Blob Blame History Raw
--- framework/runtime/process.cpp.orig	2016-02-07 10:33:01.882420699 +0100
+++ framework/runtime/process.cpp	2016-02-07 10:53:46.341371018 +0100
@@ -80,6 +80,16 @@
 
     log_debug("change user to " << user << '(' << pw->pw_uid << ')');
 
+
+    /* When dropping privileges from root, the `setgroups` call will
+    * remove any extraneous groups. If we don't call this, then
+    * even though our uid has dropped, we may still have groups
+    * that enable us to do super-user things. This will fail if we
+    * aren't root, so don't bother checking the return value, this
+    * is just done as an optimistic privilege dropping function.
+    */
+    setgroups(0, NULL);
+
     int ret = ::setuid(pw->pw_uid);
     if (ret != 0)
       throw cxxtools::SystemError("getuid");