src/runas: Fixes and cleanups
authorAndreas Gruenbacher <andreas.gruenbacher@gmail.com>
Wed, 14 Oct 2015 03:19:34 +0000 (14:19 +1100)
committerDave Chinner <david@fromorbit.com>
Wed, 14 Oct 2015 03:19:34 +0000 (14:19 +1100)
commitbd1af95e55d9fad900030856adb9d08b70bd8e1c
treea4f0c3cdc7a487cffe3f34bd2efaa2a0ed7e181d
parentbe6122971fa08146ee531f84a7553aa15e2b63ec
src/runas: Fixes and cleanups

The runas helper runs a command as another user and/or with different group
memberships.  Fix the following problems:

 * Use setgid instead of setegid and setuid instead of seteuid.
   Otherwise, the command will run with the original real UID
   and/or GID; those could be made the effective IDs again.

 * When only a GID is specified, remove all supplementary
   GIDs.  Otherwise, the command would remain in the same
   supplementary groups as runas -- which often is the root
   group.

 * Use execvp instead of execv which searches the PATH when
   necessary.  The runas helper is always called either with a
   '/' in the pathname or as "runas ... `which program`", so
   we obviously want PATH lookup, anyway.

 * There is no advantage in fork'ing and waiting for the child
   over directly exec'ing the command; the test cases already
   have to deal with commands which can be killed by signals.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
src/runas.c
tests/generic/237
tests/shared/051