svn commit: r255700 - user/pho/stress2/misc

Peter Holm pho at FreeBSD.org
Thu Sep 19 11:06:59 UTC 2013


Author: pho
Date: Thu Sep 19 11:06:58 2013
New Revision: 255700
URL: http://svnweb.freebsd.org/changeset/base/255700

Log:
  Use getpwnam() get switch to user "nobody".
  
  Sponsored by:	EMC / Isilon storage division

Modified:
  user/pho/stress2/misc/syscall4.sh

Modified: user/pho/stress2/misc/syscall4.sh
==============================================================================
--- user/pho/stress2/misc/syscall4.sh	Thu Sep 19 10:56:36 2013	(r255699)
+++ user/pho/stress2/misc/syscall4.sh	Thu Sep 19 11:06:58 2013	(r255700)
@@ -78,6 +78,7 @@ EOF
 #include <fts.h>
 #include <libutil.h>
 #include <pthread.h>
+#include <pwd.h>
 #include <signal.h>
 #include <sys/socket.h>
 #include <stdint.h>
@@ -114,9 +115,6 @@ int fd[900], fds[2], socketpr[2];
 u_int32_t r[N];
 int syscallno;
 
-#define		UID_NOBODY	65534
-#define		GID_NOBODY	65534
-
 static int
 random_int(int mi, int ma)
 {
@@ -240,13 +238,18 @@ calls(void *arg __unused)
 int
 main(int argc, char **argv)
 {
+	struct passwd *pw;
 	pthread_t rp, cp[50];
 	int i, j;
 
-	if (setgid(GID_NOBODY) == -1)
-		err(1, "setgid(%d)", GID_NOBODY);
-	if (setuid(UID_NOBODY) == -1)
-		err(1, "setuid(%d)", UID_NOBODY);
+	if ((pw = getpwnam("nobody")) == NULL)
+		err(1, "no such user: nobody");
+
+	if (setgroups(1, &pw->pw_gid) ||
+	    setegid(pw->pw_gid) || setgid(pw->pw_gid) ||
+	    seteuid(pw->pw_uid) || setuid(pw->pw_uid))
+		err(1, "Can't drop privileges to \"nobody\"");
+	endpwent();
 
 	signal(SIGALRM, hand);
 	signal(SIGILL,  hand);


More information about the svn-src-user mailing list