core: fix gid when DynamicUser=yes with static User=
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 26 Jul 2018 02:42:54 +0000 (11:42 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 26 Jul 2018 06:38:18 +0000 (15:38 +0900)
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.

src/core/dynamic-user.c

index 7c5111d..f380db5 100644 (file)
@@ -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