diff --git a/src/daemon/server.c b/src/daemon/server.c index 44b7f618..eafa25a2 100644 --- a/src/daemon/server.c +++ b/src/daemon/server.c @@ -25,6 +25,7 @@ #include #include #include +#include #include @@ -42,6 +43,8 @@ main(int argc, char *argv[]) uid = getuid (); euid = geteuid (); gid = getgid (); egid = getegid (); + glibtop_debug ("uid=%d euid=%d gid=%d egid=%d", getuid(), geteuid(), getgid(), getegid()); + if (uname (&uts) < 0) _exit (1); #ifdef _AIX @@ -74,10 +77,14 @@ main(int argc, char *argv[]) glibtop_init_p (glibtop_global_server, 0, 0); + glibtop_debug ("uid=%d euid=%d gid=%d egid=%d", getuid(), geteuid(), getgid(), getegid()); + if (setreuid (euid, uid)) _exit (1); if (setregid (egid, gid)) _exit (1); + glibtop_debug ("uid=%d euid=%d gid=%d egid=%d", getuid(), geteuid(), getgid(), getegid()); + /* !!! END OF SUID ROOT PART !!! */ handle_slave_connection (0, 0); diff --git a/sysdeps/freebsd/suid_open.c b/sysdeps/freebsd/suid_open.c index c27e4923..55456078 100644 --- a/sysdeps/freebsd/suid_open.c +++ b/sysdeps/freebsd/suid_open.c @@ -71,12 +71,16 @@ glibtop_open_p (glibtop *server, const char *program_name, /* Drop priviledges. */ + glibtop_debug ("uid=%d euid=%d gid=%d egid=%d", getuid(), geteuid(), getgid(), getegid()); + if (setreuid (server->machine.euid, server->machine.uid)) _exit (1); if (setregid (server->machine.egid, server->machine.gid)) _exit (1); + glibtop_debug ("uid=%d euid=%d gid=%d egid=%d", getuid(), geteuid(), getgid(), getegid()); + /* !!! END OF SUID ROOT PART !!! */ /* Our effective uid is now those of the user invoking the server,