aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2015-05-20 14:41:39 +0200
committerLennart Poettering <lennart@poettering.net>2015-05-20 14:41:39 +0200
commitb4da6d6bec4d303f90d957b2cf7d4eed678b1791 (patch)
tree2393242479acf166119906995bf407a4b7a3e39a
parentjournald: handle more gracefully when bind() fails on audit sockets (diff)
downloadsystemd-b4da6d6bec4d303f90d957b2cf7d4eed678b1791.tar.gz
systemd-b4da6d6bec4d303f90d957b2cf7d4eed678b1791.tar.bz2
systemd-b4da6d6bec4d303f90d957b2cf7d4eed678b1791.zip
util: introduce reset_uid_gid() for resetting all uids and gids to 0
-rw-r--r--src/shared/util.c25
-rw-r--r--src/shared/util.h2
2 files changed, 17 insertions, 10 deletions
diff --git a/src/shared/util.c b/src/shared/util.c
index c3b08bbc4..5f5cfcb01 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -4686,16 +4686,7 @@ int namespace_enter(int pidns_fd, int mntns_fd, int netns_fd, int root_fd) {
return -errno;
}
- if (setresgid(0, 0, 0) < 0)
- return -errno;
-
- if (setgroups(0, NULL) < 0)
- return -errno;
-
- if (setresuid(0, 0, 0) < 0)
- return -errno;
-
- return 0;
+ return reset_uid_gid();
}
int getpeercred(int fd, struct ucred *ucred) {
@@ -6247,3 +6238,17 @@ int mount_move_root(const char *path) {
return 0;
}
+
+int reset_uid_gid(void) {
+
+ if (setgroups(0, NULL) < 0)
+ return -errno;
+
+ if (setresgid(0, 0, 0) < 0)
+ return -errno;
+
+ if (setresuid(0, 0, 0) < 0)
+ return -errno;
+
+ return 0;
+}
diff --git a/src/shared/util.h b/src/shared/util.h
index f0382f0d6..24a267284 100644
--- a/src/shared/util.h
+++ b/src/shared/util.h
@@ -908,3 +908,5 @@ char *shell_maybe_quote(const char *s);
int parse_mode(const char *s, mode_t *ret);
int mount_move_root(const char *path);
+
+int reset_uid_gid(void);