aboutgitcodebugslistschat
path: root/util.c
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2022-09-12 22:24:01 +1000
committerStefano Brivio <sbrivio@redhat.com>2022-09-13 05:31:51 +0200
commit80d7012b09cddbf6b8bb0d002af5f4645ad5c450 (patch)
treeb384ab451f8bbc8856636b66a276453c3d6c051f /util.c
parent10c63477476acdd5cbe6f3ac13dc637e80d0104b (diff)
downloadpasst-80d7012b09cddbf6b8bb0d002af5f4645ad5c450.tar
passt-80d7012b09cddbf6b8bb0d002af5f4645ad5c450.tar.gz
passt-80d7012b09cddbf6b8bb0d002af5f4645ad5c450.tar.bz2
passt-80d7012b09cddbf6b8bb0d002af5f4645ad5c450.tar.lz
passt-80d7012b09cddbf6b8bb0d002af5f4645ad5c450.tar.xz
passt-80d7012b09cddbf6b8bb0d002af5f4645ad5c450.tar.zst
passt-80d7012b09cddbf6b8bb0d002af5f4645ad5c450.zip
Consolidate determination of UID/GID to run as
Currently the logic to work out what UID and GID we will run as is spread across conf(). If --runas is specified it's handled in conf_runas(), otherwise it's handled by check_root(), which depends on initialization of the uid and gid variables by either conf() itself or conf_runas(). Make this clearer by putting all the UID and GID logic into a single conf_ugid() function. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'util.c')
-rw-r--r--util.c50
1 files changed, 0 insertions, 50 deletions
diff --git a/util.c b/util.c
index eb25c37..ce88aee 100644
--- a/util.c
+++ b/util.c
@@ -483,56 +483,6 @@ void drop_caps(void)
}
/**
- * check_root() - Check if root in init ns, exit if we can't drop to user
- */
-void check_root(uid_t *uid, gid_t *gid)
-{
- const char root_uid_map[] = " 0 0 4294967295";
- struct passwd *pw;
- char buf[BUFSIZ];
- int fd;
-
- if (!*uid)
- *uid = geteuid();
-
- if (!*gid)
- *gid = getegid();
-
- if (*uid)
- return;
-
- if ((fd = open("/proc/self/uid_map", O_RDONLY | O_CLOEXEC)) < 0)
- return;
-
- if (read(fd, buf, BUFSIZ) != sizeof(root_uid_map) ||
- strncmp(buf, root_uid_map, sizeof(root_uid_map) - 1)) {
- close(fd);
- return;
- }
-
- close(fd);
-
- if (!*uid) {
- fprintf(stderr, "Don't run as root. Changing to nobody...\n");
-#ifndef GLIBC_NO_STATIC_NSS
- pw = getpwnam("nobody");
- if (!pw) {
- perror("getpwnam");
- exit(EXIT_FAILURE);
- }
-
- *uid = pw->pw_uid;
- *gid = pw->pw_gid;
-#else
- (void)pw;
-
- /* Common value for 'nobody', not really specified */
- *uid = *gid = 65534;
-#endif
- }
-}
-
-/**
* drop_root() - Switch to given UID and GID
* @uid: User ID to switch to
* @gid: Group ID to switch to