aboutgitcodebugslistschat
path: root/conf.c
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2022-09-12 22:24:00 +1000
committerStefano Brivio <sbrivio@redhat.com>2022-09-13 05:31:51 +0200
commit10c63477476acdd5cbe6f3ac13dc637e80d0104b (patch)
tree82a8d9240f34d4d55cb7c23ba7717adb16f71eaf /conf.c
parent7330ae3abfba9722c04e6c52ae6222de47016834 (diff)
downloadpasst-10c63477476acdd5cbe6f3ac13dc637e80d0104b.tar
passt-10c63477476acdd5cbe6f3ac13dc637e80d0104b.tar.gz
passt-10c63477476acdd5cbe6f3ac13dc637e80d0104b.tar.bz2
passt-10c63477476acdd5cbe6f3ac13dc637e80d0104b.tar.lz
passt-10c63477476acdd5cbe6f3ac13dc637e80d0104b.tar.xz
passt-10c63477476acdd5cbe6f3ac13dc637e80d0104b.tar.zst
passt-10c63477476acdd5cbe6f3ac13dc637e80d0104b.zip
Split checking for root from dropping root privilege
check_root() both checks to see if we are root (in the init namespace), and if we are drops to an unprivileged user. To make future cleanups simpler, split the checking for root (now in check_root()) from the actual dropping of privilege (now in drop_root()). Note that this does slightly alter semantics. Previously we would only setuid() if we were originally root (in the init namespace). Now we will always setuid() and setgid(), though it won't actually change anything if we weren't privileged to begin with. This also means that we will now always attempt to switch to the user specified with --runas, even if we aren't (init namespace) root to begin with. Obviously this will fail with an error if we weren't privileged to start with. --help and the man page are updated accordingly. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'conf.c')
-rw-r--r--conf.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/conf.c b/conf.c
index 0fe5266..545f61d 100644
--- a/conf.c
+++ b/conf.c
@@ -747,8 +747,8 @@ static void usage(const char *name)
info( " default: run in background if started from a TTY");
info( " -e, --stderr Log to stderr too");
info( " default: log to system logger only if started from a TTY");
- info( " --runas UID|UID:GID Use given UID, GID if started as root");
- info( " UID and GID can be numeric, or login and group names");
+ info( " --runas UID|UID:GID Run as given UID, GID, which can be");
+ info( " numeric, or login and group names");
info( " default: drop to user \"nobody\"");
info( " -h, --help Display this help message and exit");
@@ -1500,6 +1500,7 @@ void conf(struct ctx *c, int argc, char **argv)
} while (name != -1);
check_root(&uid, &gid);
+ drop_root(uid, gid);
if (c->mode == MODE_PASTA) {
if (*netns && optind != argc) {