From: Yu Watanabe Date: Thu, 26 Jul 2018 02:42:54 +0000 (+0900) Subject: core: fix gid when DynamicUser=yes with static User= X-Git-Tag: v240~889^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=25a1df7c652d180eb716412885c3ce3fcc1bbded;p=platform%2Fupstream%2Fsystemd.git 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. --- diff --git a/src/core/dynamic-user.c b/src/core/dynamic-user.c index 7c5111d..f380db5 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