From 7b21067503bb4b81e42776343e490095223a9bfc Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 26 Jul 2018 11:42:54 +0900 Subject: [PATCH] core: fix gid when DynamicUser=yes with static User= When DynamicUser=yes and static User= are set, and the user has different uid and gid, then as the storage socket for the dynamic user does not contains gid, we need to obtain gid. Follow-up for 9ec655cbbd7505ef465e0444da0622e46099ce42. Fixes #9702. (cherry picked from commit 25a1df7c652d180eb716412885c3ce3fcc1bbded) --- src/core/dynamic-user.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/core/dynamic-user.c b/src/core/dynamic-user.c index 7c5111ddf640e..f380db553ebe5 100644 --- a/src/core/dynamic-user.c +++ b/src/core/dynamic-user.c @@ -525,6 +525,16 @@ static int dynamic_user_realize( num = new_uid; uid_lock_fd = new_uid_lock_fd; } + } else if (is_user && !uid_is_dynamic(num)) { + struct passwd *p; + + /* Statically allocated user may have different uid and gid. So, let's obtain the gid. */ + errno = 0; + p = getpwuid(num); + if (!p) + return errno > 0 ? -errno : -ESRCH; + + gid = p->pw_gid; } /* If the UID/GID was already allocated dynamically, push the data we popped out back in. If it was already