diff options
author | Lennart Poettering <lennart@poettering.net> | 2013-12-24 15:53:04 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2013-12-24 15:53:04 +0100 |
commit | eff05270986a13e7de93ae16311f654d3f7c166f (patch) | |
tree | c5c7d7c456f8a8b9d3e75cb9e36b5974215003ed /src/bus-proxyd | |
parent | 96415cad2fdd8d280ae94b02651b5f826a2f7f3d (diff) |
util: unify SO_PEERCRED/SO_PEERSEC invocations
Introduce new call getpeercred() which internally just uses SO_PEERCRED
but checks if the returned data is actually useful due to namespace
quirks.
Diffstat (limited to 'src/bus-proxyd')
-rw-r--r-- | src/bus-proxyd/bus-proxyd.c | 45 |
1 files changed, 1 insertions, 44 deletions
diff --git a/src/bus-proxyd/bus-proxyd.c b/src/bus-proxyd/bus-proxyd.c index b87dffe0e8..60490d5166 100644 --- a/src/bus-proxyd/bus-proxyd.c +++ b/src/bus-proxyd/bus-proxyd.c @@ -358,40 +358,6 @@ static int process_hello(sd_bus *a, sd_bus *b, sd_bus_message *m, bool *got_hell return 1; } -static int getpeersec(int fd, char **ret) { - socklen_t n = 64; - char *s; - int r; - - assert(fd >= 0); - assert(ret); - - s = new0(char, n); - if (!s) - return -ENOMEM; - - r = getsockopt(fd, SOL_SOCKET, SO_PEERSEC, s, &n); - if (r < 0) { - free(s); - - if (errno != ERANGE) - return r; - - s = new0(char, n); - if (!s) - return -ENOMEM; - - r = getsockopt(fd, SOL_SOCKET, SO_PEERSEC, s, &n); - if (r < 0) { - free(s); - return r; - } - } - - *ret = s; - return 0; -} - int main(int argc, char *argv[]) { _cleanup_bus_unref_ sd_bus *a = NULL, *b = NULL; @@ -427,16 +393,7 @@ int main(int argc, char *argv[]) { sd_is_socket(out_fd, AF_UNIX, 0, 0) > 0; if (is_unix) { - socklen_t l = sizeof(ucred); - - r = getsockopt(in_fd, SOL_SOCKET, SO_PEERCRED, &ucred, &l); - if (r < 0) { - r = -errno; - goto finish; - } - - assert(l == sizeof(ucred)); - + getpeercred(in_fd, &ucred); getpeersec(in_fd, &peersec); } |