From: Lennart Poettering Date: Tue, 19 Dec 2023 12:12:14 +0000 (+0100) Subject: varlink: add varlink_get_peer_gid() helper X-Git-Tag: v256-rc1~283^2~30 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=52bd61373b89bb6b458f5020b23a92253b12f235;p=thirdparty%2Fsystemd.git varlink: add varlink_get_peer_gid() helper --- diff --git a/src/shared/varlink.c b/src/shared/varlink.c index d4072ec3982..1bfa4c70818 100644 --- a/src/shared/varlink.c +++ b/src/shared/varlink.c @@ -2807,12 +2807,29 @@ int varlink_get_peer_uid(Varlink *v, uid_t *ret) { return varlink_log_errno(v, r, "Failed to acquire credentials: %m"); if (!uid_is_valid(v->ucred.uid)) - return varlink_log_errno(v, SYNTHETIC_ERRNO(ENODATA), "Peer uid is invalid."); + return varlink_log_errno(v, SYNTHETIC_ERRNO(ENODATA), "Peer UID is invalid."); *ret = v->ucred.uid; return 0; } +int varlink_get_peer_gid(Varlink *v, gid_t *ret) { + int r; + + assert_return(v, -EINVAL); + assert_return(ret, -EINVAL); + + r = varlink_acquire_ucred(v); + if (r < 0) + return varlink_log_errno(v, r, "Failed to acquire credentials: %m"); + + if (!gid_is_valid(v->ucred.gid)) + return varlink_log_errno(v, SYNTHETIC_ERRNO(ENODATA), "Peer GID is invalid."); + + *ret = v->ucred.gid; + return 0; +} + int varlink_get_peer_pid(Varlink *v, pid_t *ret) { int r; diff --git a/src/shared/varlink.h b/src/shared/varlink.h index db7227b2154..c8639f4d7f0 100644 --- a/src/shared/varlink.h +++ b/src/shared/varlink.h @@ -173,6 +173,7 @@ void* varlink_set_userdata(Varlink *v, void *userdata); void* varlink_get_userdata(Varlink *v); int varlink_get_peer_uid(Varlink *v, uid_t *ret); +int varlink_get_peer_gid(Varlink *v, gid_t *ret); int varlink_get_peer_pid(Varlink *v, pid_t *ret); int varlink_get_peer_pidref(Varlink *v, PidRef *ret);