start_stop_daemon: set complementary group ids too. Closes 3253
No binary (build failed)
—
(log yok)
| @@ -502,8 +502,16 @@ int start_stop_daemon_main(int argc UNUSED_PARAM, char **argv) | |
| if (opt & OPT_c) { | |
| struct bb_uidgid_t ugid = { -1, -1 }; | |
| parse_chown_usergroup_or_die(&ugid, chuid); | |
| - | if (ugid.gid != (gid_t) -1) xsetgid(ugid.gid); |
| - | if (ugid.uid != (uid_t) -1) xsetuid(ugid.uid); |
| + | if (ugid.uid != (uid_t) -1) { |
| + | struct passwd *pw = xgetpwuid(ugid.uid); |
| + | if (ugid.gid != (gid_t) -1) |
| + | pw->pw_gid = ugid.gid; |
| + | /* initgroups, setgid, setuid: */ |
| + | change_identity(pw); |
| + | } else if (ugid.gid != (gid_t) -1) { |
| + | xsetgid(ugid.gid); |
| + | setgroups(1, &ugid.gid); |
| + | } |
| } | |
| #if ENABLE_FEATURE_START_STOP_DAEMON_FANCY | |
| if (opt & OPT_NICELEVEL) { | |
| @@ -1414,7 +1414,7 @@ int inetd_main(int argc UNUSED_PARAM, char **argv) | |
| bb_error_msg("non-root must run services as himself"); | |
| goto do_exit1; | |
| } | |
| - | if (pwd->pw_uid) { |
| + | if (pwd->pw_uid != 0) { |
| if (sep->se_group) | |
| pwd->pw_gid = grp->gr_gid; | |
| /* initgroups, setgid, setuid: */ | |