diff options
author | Lennart Poettering <lennart@poettering.net> | 2023-05-05 21:43:57 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2023-05-16 12:08:41 +0200 |
commit | c32f9648cc058c96b2ab927b73af3fa28f7c69f6 (patch) | |
tree | 8ac98f5a3cb082836785162ed9bfd22ced9cbe2a /src/libsystemd/sd-bus/bus-socket.c | |
parent | a0cb33581630a54c89d088d36eb3bf6cf7459cd7 (diff) | |
download | systemd-c32f9648cc058c96b2ab927b73af3fa28f7c69f6.tar.gz |
sd-bus: use the new information in the client's sockaddr in the creds structure
Now that clients might convey comm/description strings via the sockaddr,
let's actually use them on the other side, read the data via
getpeername() parse it, and include it in the "owner" creds (which is
how we call the peer's creds).
Diffstat (limited to 'src/libsystemd/sd-bus/bus-socket.c')
-rw-r--r-- | src/libsystemd/sd-bus/bus-socket.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/libsystemd/sd-bus/bus-socket.c b/src/libsystemd/sd-bus/bus-socket.c index 11f4aa9669..741d54cabd 100644 --- a/src/libsystemd/sd-bus/bus-socket.c +++ b/src/libsystemd/sd-bus/bus-socket.c @@ -652,6 +652,17 @@ static void bus_get_peercred(sd_bus *b) { b->n_groups = (size_t) r; else if (!IN_SET(r, -EOPNOTSUPP, -ENOPROTOOPT)) log_debug_errno(r, "Failed to determine peer's group list: %m"); + + /* Let's query the peers socket address, it might carry information such as the peer's comm or + * description string */ + zero(b->sockaddr_peer); + b->sockaddr_size_peer = 0; + + socklen_t l = sizeof(b->sockaddr_peer) - 1; /* Leave space for a NUL */ + if (getpeername(b->input_fd, &b->sockaddr_peer.sa, &l) < 0) + log_debug_errno(errno, "Failed to get peer's socket address, ignoring: %m"); + else + b->sockaddr_size_peer = l; } static int bus_socket_start_auth_client(sd_bus *b) { |