X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fbus-proxyd%2Fbus-proxyd.c;h=9645c504f538230906f5e145ed7d29f9aaeb9b8a;hb=0289f2fb2a64df53b589b771f69c43126b029590;hp=8cc4412034751e73ff6307df81f51c0a9ba86fff;hpb=d340f82032e4eb538e7b79087d95d5af1ae3dd91;p=elogind.git diff --git a/src/bus-proxyd/bus-proxyd.c b/src/bus-proxyd/bus-proxyd.c index 8cc441203..9645c504f 100644 --- a/src/bus-proxyd/bus-proxyd.c +++ b/src/bus-proxyd/bus-proxyd.c @@ -23,13 +23,9 @@ ***/ #include -#include -#include -#include #include #include #include -#include #include #include #include @@ -37,24 +33,14 @@ #include "log.h" #include "util.h" -#include "hashmap.h" -#include "socket-util.h" #include "sd-daemon.h" -#include "sd-bus.h" #include "bus-internal.h" -#include "bus-message.h" -#include "bus-util.h" #include "build.h" #include "strv.h" #include "def.h" #include "capability.h" -#include "bus-control.h" -#include "smack-util.h" -#include "set.h" #include "bus-xml-policy.h" -#include "driver.h" #include "proxy.h" -#include "synthesize.h" static char *arg_address = NULL; static char **arg_configuration = NULL; @@ -69,7 +55,7 @@ static ClientContext *client_context_free(ClientContext *c) { if (!c) return NULL; - close(c->fd); + safe_close(c->fd); free(c); return NULL; @@ -101,6 +87,8 @@ static void *run_client(void *userdata) { if (r < 0) goto exit; + c->fd = -1; + /* set comm to "p$PIDu$UID" and suffix with '*' if truncated */ r = snprintf(comm, sizeof(comm), "p" PID_FMT "u" UID_FMT, p->local_creds.pid, p->local_creds.uid); if (r >= (ssize_t)sizeof(comm)) @@ -128,19 +116,18 @@ static int loop_clients(int accept_fd, uid_t bus_uid) { r = pthread_attr_init(&attr); if (r < 0) { - r = log_error_errno(errno, "Cannot initialize pthread attributes: %m"); - goto exit; + return log_error_errno(errno, "Cannot initialize pthread attributes: %m"); } r = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if (r < 0) { r = log_error_errno(errno, "Cannot mark pthread attributes as detached: %m"); - goto exit_attr; + goto finish; } r = shared_policy_new(&sp); if (r < 0) - goto exit_attr; + goto finish; for (;;) { ClientContext *c; @@ -153,7 +140,7 @@ static int loop_clients(int accept_fd, uid_t bus_uid) { continue; r = log_error_errno(errno, "accept4() failed: %m"); - break; + goto finish; } r = client_context_new(&c); @@ -175,9 +162,8 @@ static int loop_clients(int accept_fd, uid_t bus_uid) { } } -exit_attr: +finish: pthread_attr_destroy(&attr); -exit: return r; } @@ -232,17 +218,11 @@ static int parse_argv(int argc, char *argv[]) { puts(SYSTEMD_FEATURES); return 0; - case ARG_ADDRESS: { - char *a; - - a = strdup(optarg); - if (!a) + case ARG_ADDRESS: + r = free_and_strdup(&arg_address, optarg); + if (r < 0) return log_oom(); - - free(arg_address); - arg_address = a; break; - } case ARG_CONFIGURATION: r = strv_extend(&arg_configuration, optarg); @@ -294,7 +274,6 @@ static int parse_argv(int argc, char *argv[]) { } int main(int argc, char *argv[]) { - const char *user = "systemd-bus-proxy"; int r, accept_fd; uid_t uid, bus_uid; gid_t gid; @@ -306,6 +285,8 @@ int main(int argc, char *argv[]) { bus_uid = getuid(); if (geteuid() == 0) { + const char *user = "systemd-bus-proxy"; + r = get_user_creds(&user, &uid, &gid, NULL, NULL); if (r < 0) { log_error_errno(r, "Cannot resolve user name %s: %m", user); @@ -330,6 +311,7 @@ int main(int argc, char *argv[]) { } accept_fd = SD_LISTEN_FDS_START; + r = fd_nonblock(accept_fd, false); if (r < 0) { log_error_errno(r, "Cannot mark accept-fd non-blocking: %m");