X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd%2Fsd-bus%2Fbus-creds.c;h=d27ef1edbfdec69c8aa99fe02dd912300a5b614e;hb=9cbfc66c621c42aa6e58e9e0da0adfb01efa7537;hp=85509e88193c349b35382cf686aefcc1df10ae9e;hpb=cccb0b2cdbd25e90ae92d2d5b107125cb1ca3433;p=elogind.git diff --git a/src/libsystemd/sd-bus/bus-creds.c b/src/libsystemd/sd-bus/bus-creds.c index 85509e881..d27ef1edb 100644 --- a/src/libsystemd/sd-bus/bus-creds.c +++ b/src/libsystemd/sd-bus/bus-creds.c @@ -30,6 +30,7 @@ #include "time-util.h" #include "strv.h" #include "bus-creds.h" +#include "bus-label.h" enum { CAP_OFFSET_INHERITABLE = 0, @@ -48,6 +49,7 @@ void bus_creds_done(sd_bus_creds *c) { free(c->unit); free(c->user_unit); free(c->slice); + free(c->unescaped_description); strv_free(c->cmdline_array); strv_free(c->well_known_names); @@ -92,7 +94,7 @@ _public_ sd_bus_creds *sd_bus_creds_unref(sd_bus_creds *c) { free(c->label); free(c->unique_name); free(c->cgroup_root); - free(c->conn_name); + free(c->description); free(c); } } else { @@ -124,7 +126,7 @@ sd_bus_creds* bus_creds_new(void) { return c; } -_public_ int sd_bus_creds_new_from_pid(pid_t pid, uint64_t mask, sd_bus_creds **ret) { +_public_ int sd_bus_creds_new_from_pid(sd_bus_creds **ret, pid_t pid, uint64_t mask) { sd_bus_creds *c; int r; @@ -147,7 +149,7 @@ _public_ int sd_bus_creds_new_from_pid(pid_t pid, uint64_t mask, sd_bus_creds ** /* Check if the process existed at all, in case we haven't * figured that out already */ - if (kill(pid, 0) < 0 && errno == ESRCH) { + if (!pid_is_alive(pid)) { sd_bus_creds_unref(c); return -ESRCH; } @@ -463,15 +465,22 @@ _public_ int sd_bus_creds_get_well_known_names(sd_bus_creds *c, char ***well_kno return 0; } -_public_ int sd_bus_creds_get_connection_name(sd_bus_creds *c, const char **ret) { +_public_ int sd_bus_creds_get_description(sd_bus_creds *c, const char **ret) { assert_return(c, -EINVAL); assert_return(ret, -EINVAL); - if (!(c->mask & SD_BUS_CREDS_CONNECTION_NAME)) + if (!(c->mask & SD_BUS_CREDS_DESCRIPTION)) return -ENODATA; - assert(c->conn_name); - *ret = c->conn_name; + assert(c->description); + + if (!c->unescaped_description) { + c->unescaped_description = bus_label_unescape(c->description); + if (!c->unescaped_description) + return -ENOMEM; + } + + *ret = c->unescaped_description; return 0; } @@ -740,7 +749,7 @@ int bus_creds_add_more(sd_bus_creds *c, uint64_t mask, pid_t pid, pid_t tid) { if (tid > 0 && (missing & SD_BUS_CREDS_TID_COMM)) { _cleanup_free_ char *p = NULL; - if (asprintf(&p, "/proc/%lu/task/%lu/comm", (unsigned long) pid, (unsigned long) tid) < 0) + if (asprintf(&p, "/proc/"PID_FMT"/task/"PID_FMT"/comm", pid, tid) < 0) return -ENOMEM; r = read_one_line_file(p, &c->tid_comm);