From dc18cefdc3bdedddeddf05ede7d662ed15cde825 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 24 Nov 2014 21:20:53 +0100 Subject: [PATCH] sd-bus: don't blindly take incomplete ucred bits from AF_UNIX when constructing message --- src/libsystemd/sd-bus/bus-message.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c index 9d6647b2c4c..6889754a965 100644 --- a/src/libsystemd/sd-bus/bus-message.c +++ b/src/libsystemd/sd-bus/bus-message.c @@ -420,10 +420,20 @@ int bus_message_from_header( m->n_fds = n_fds; if (ucred) { - m->creds.uid = ucred->uid; m->creds.pid = ucred->pid; + m->creds.uid = ucred->uid; m->creds.gid = ucred->gid; - m->creds.mask |= SD_BUS_CREDS_UID | SD_BUS_CREDS_PID | SD_BUS_CREDS_GID; + + /* Due to namespace translations some data might be + * missing from this ucred record. */ + if (m->creds.pid > 0) + m->creds.mask |= SD_BUS_CREDS_PID; + + if (m->creds.uid != (uid_t) -1) + m->creds.mask |= SD_BUS_CREDS_UID; + + if (m->creds.gid != (gid_t) -1) + m->creds.mask |= SD_BUS_CREDS_GID; } if (label) {