Commit c2d5ce0c authored by Max Kellermann's avatar Max Kellermann

Client: move trivial functions into the Client class

parent 32645b80
...@@ -182,7 +182,7 @@ static enum command_return ...@@ -182,7 +182,7 @@ static enum command_return
handle_commands(Client &client, handle_commands(Client &client,
gcc_unused int argc, gcc_unused char *argv[]) gcc_unused int argc, gcc_unused char *argv[])
{ {
const unsigned permission = client_get_permission(client); const unsigned permission = client.GetPermission();
const struct command *cmd; const struct command *cmd;
for (unsigned i = 0; i < num_commands; ++i) { for (unsigned i = 0; i < num_commands; ++i) {
...@@ -200,7 +200,7 @@ static enum command_return ...@@ -200,7 +200,7 @@ static enum command_return
handle_not_commands(Client &client, handle_not_commands(Client &client,
gcc_unused int argc, gcc_unused char *argv[]) gcc_unused int argc, gcc_unused char *argv[])
{ {
const unsigned permission = client_get_permission(client); const unsigned permission = client.GetPermission();
const struct command *cmd; const struct command *cmd;
for (unsigned i = 0; i < num_commands; ++i) { for (unsigned i = 0; i < num_commands; ++i) {
...@@ -364,7 +364,7 @@ command_process(Client &client, unsigned num, char *line) ...@@ -364,7 +364,7 @@ command_process(Client &client, unsigned num, char *line)
/* look up and invoke the command handler */ /* look up and invoke the command handler */
cmd = command_checked_lookup(client, client_get_permission(client), cmd = command_checked_lookup(client, client.GetPermission(),
argc, argv); argc, argv);
if (cmd) if (cmd)
ret = cmd->handler(client, argc, argv); ret = cmd->handler(client, argc, argv);
......
...@@ -22,21 +22,3 @@ ...@@ -22,21 +22,3 @@
#include "util/Domain.hxx" #include "util/Domain.hxx"
const Domain client_domain("client"); const Domain client_domain("client");
int
client_get_uid(const Client &client)
{
return client.uid;
}
unsigned
client_get_permission(const Client &client)
{
return client.permission;
}
void
client_set_permission(Client &client, unsigned permission)
{
client.permission = permission;
}
...@@ -102,6 +102,30 @@ public: ...@@ -102,6 +102,30 @@ public:
using FullyBufferedSocket::Write; using FullyBufferedSocket::Write;
/** /**
* returns the uid of the client process, or a negative value
* if the uid is unknown
*/
int GetUID() const {
return uid;
}
/**
* Is this client running on the same machine, connected with
* a local (UNIX domain) socket?
*/
bool IsLocal() const {
return uid > 0;
}
unsigned GetPermission() const {
return permission;
}
void SetPermission(unsigned _permission) {
permission = _permission;
}
/**
* Send "idle" response to this client. * Send "idle" response to this client.
*/ */
void IdleNotify(); void IdleNotify();
...@@ -125,31 +149,6 @@ client_new(EventLoop &loop, Partition &partition, ...@@ -125,31 +149,6 @@ client_new(EventLoop &loop, Partition &partition,
int fd, const struct sockaddr *sa, size_t sa_length, int uid); int fd, const struct sockaddr *sa, size_t sa_length, int uid);
/** /**
* returns the uid of the client process, or a negative value if the
* uid is unknown
*/
gcc_pure
int
client_get_uid(const Client &client);
/**
* Is this client running on the same machine, connected with a local
* (UNIX domain) socket?
*/
gcc_pure
static inline bool
client_is_local(const Client &client)
{
return client_get_uid(client) > 0;
}
gcc_pure
unsigned
client_get_permission(const Client &client);
void client_set_permission(Client &client, unsigned permission);
/**
* Write a C string to the client. * Write a C string to the client.
*/ */
void client_puts(Client &client, const char *s); void client_puts(Client &client, const char *s);
......
...@@ -41,7 +41,7 @@ client_allow_file(const Client &client, Path path_fs, Error &error) ...@@ -41,7 +41,7 @@ client_allow_file(const Client &client, Path path_fs, Error &error)
error.Set(ack_domain, ACK_ERROR_PERMISSION, "Access denied"); error.Set(ack_domain, ACK_ERROR_PERMISSION, "Access denied");
return false; return false;
#else #else
const int uid = client_get_uid(client); const int uid = client.GetUID();
if (uid >= 0 && (uid_t)uid == geteuid()) if (uid >= 0 && (uid_t)uid == geteuid())
/* always allow access if user runs his own MPD /* always allow access if user runs his own MPD
instance */ instance */
......
...@@ -67,7 +67,7 @@ enum command_return ...@@ -67,7 +67,7 @@ enum command_return
handle_urlhandlers(Client &client, handle_urlhandlers(Client &client,
gcc_unused int argc, gcc_unused char *argv[]) gcc_unused int argc, gcc_unused char *argv[])
{ {
if (client_is_local(client)) if (client.IsLocal())
client_puts(client, "handler: file://\n"); client_puts(client, "handler: file://\n");
print_supported_uri_schemes(client); print_supported_uri_schemes(client);
return COMMAND_RETURN_OK; return COMMAND_RETURN_OK;
...@@ -262,7 +262,7 @@ handle_password(Client &client, gcc_unused int argc, char *argv[]) ...@@ -262,7 +262,7 @@ handle_password(Client &client, gcc_unused int argc, char *argv[])
return COMMAND_RETURN_ERROR; return COMMAND_RETURN_ERROR;
} }
client_set_permission(client, permission); client.SetPermission(permission);
return COMMAND_RETURN_OK; return COMMAND_RETURN_OK;
} }
...@@ -271,7 +271,7 @@ enum command_return ...@@ -271,7 +271,7 @@ enum command_return
handle_config(Client &client, handle_config(Client &client,
gcc_unused int argc, gcc_unused char *argv[]) gcc_unused int argc, gcc_unused char *argv[])
{ {
if (!client_is_local(client)) { if (!client.IsLocal()) {
command_error(client, ACK_ERROR_PERMISSION, command_error(client, ACK_ERROR_PERMISSION,
"Command only permitted to local clients"); "Command only permitted to local clients");
return COMMAND_RETURN_ERROR; return COMMAND_RETURN_ERROR;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment