mirror of
git://git.sv.gnu.org/coreutils
synced 2026-05-17 04:17:17 -04:00
chroot: set-*-ID failure must provoke nonzero exit before execvp
* src/chroot.c (main): Exit upon set-group-ID or set-user-ID failure.
This commit is contained in:
+18
-3
@@ -207,6 +207,7 @@ main (int argc, char **argv)
|
||||
char *user;
|
||||
char *group;
|
||||
char const *err = parse_user_spec (userspec, &uid, &gid, &user, &group);
|
||||
bool fail = false;
|
||||
|
||||
if (err)
|
||||
error (EXIT_FAILURE, errno, "%s", err);
|
||||
@@ -214,14 +215,28 @@ main (int argc, char **argv)
|
||||
free (user);
|
||||
free (group);
|
||||
|
||||
/* Attempt to set all three: supplementary groups, group ID, user ID.
|
||||
Diagnose any failures. If any have failed, exit before execvp. */
|
||||
if (groups && set_additional_groups (groups))
|
||||
error (0, errno, _("failed to set additional groups"));
|
||||
{
|
||||
error (0, errno, _("failed to set additional groups"));
|
||||
fail = true;
|
||||
}
|
||||
|
||||
if (gid && setgid (gid))
|
||||
error (0, errno, _("failed to set group-ID"));
|
||||
{
|
||||
error (0, errno, _("failed to set group-ID"));
|
||||
fail = true;
|
||||
}
|
||||
|
||||
if (uid && setuid (uid))
|
||||
error (0, errno, _("failed to set user-ID"));
|
||||
{
|
||||
error (0, errno, _("failed to set user-ID"));
|
||||
fail = true;
|
||||
}
|
||||
|
||||
if (fail)
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* Execute the given command. */
|
||||
|
||||
Reference in New Issue
Block a user