Commit Diff


commit - 52772181b5adf4709a8219ef283210564a184352
commit + c197ad99a36ea820b528cb9fd10ff80f96674bb8
blob - 3f2901f9d05e8a616c3d08ac173755913dfcb66d
blob + 0bc44b739c894b6f9e39d1f73f6df75b556cfc33
--- gmid.c
+++ gmid.c
@@ -408,9 +408,10 @@ drop_priv(void)
 	}
 
 	if (pw != NULL) {
-		if (setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid) == -1)
-			fatal("setresuid(%d): %s", pw->pw_uid,
-			    strerror(errno));
+		if (setgroups(1, &pw->pw_gid) == -1 ||
+		    setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) == -1 ||
+		    setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid) == -1)
+			fatal("cannot drop privileges");
 	}
 
 	if (getuid() == 0)