From 7306ae9a02f8e503096502bf8d03c00ced838397 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sun, 21 Feb 2016 20:13:12 +0100 Subject: Replace setuid/setgid with setresuid/setresgid (or setreuid/setregid) The semantics of setuid in SUID processes are not entirely clear on all Unix-like systems. Better use setresuid to drop privileges where available. --- src/fastd.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'src/fastd.c') diff --git a/src/fastd.c b/src/fastd.c index 64bc294..8adea3c 100644 --- a/src/fastd.c +++ b/src/fastd.c @@ -312,11 +312,22 @@ static inline void write_pid(void) { static void set_user(void) { #ifdef USE_USER if (conf.user || conf.group) { - if (setgid(conf.gid) < 0) - exit_errno("setgid"); - if (setuid(conf.uid) < 0) - exit_errno("setuid"); +#ifdef HAVE_SETRESGID + if (setresgid(conf.gid, conf.gid, conf.gid) < 0) + exit_errno("setresgid"); +#else + if (setregid(conf.gid, conf.gid) < 0) + exit_errno("setregid"); +#endif + +#ifdef HAVE_SETRESUID + if (setresuid(conf.uid, conf.uid, conf.uid) < 0) + exit_errno("setresuid"); +#else + if (setreuid(conf.uid, conf.uid) < 0) + exit_errno("setreuid"); +#endif pr_info("changed to UID %i, GID %i", (int)conf.uid, (int)conf.gid); } -- cgit v1.2.3