From: Lennart Poettering Date: Mon, 24 Nov 2014 20:20:53 +0000 (+0100) Subject: sd-bus: don't blindly take incomplete ucred bits from AF_UNIX when constructing message X-Git-Tag: v218~371 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=dc18cefdc3bdedddeddf05ede7d662ed15cde825 sd-bus: don't blindly take incomplete ucred bits from AF_UNIX when constructing message --- diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c index 9d6647b2c..6889754a9 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) {