Blob Blame History Raw
diff -Naur --exclude '*.swp' bsd-games-2.17/adventure/main.c bsd-games-2.17.new/adventure/main.c
--- bsd-games-2.17/adventure/main.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/adventure/main.c	2006-04-07 17:27:16.000000000 -0700
@@ -34,6 +34,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1991, 1993\n\
@@ -71,7 +72,10 @@
 	struct text *kk;
 
 	/* revoke setgid privileges from dm */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	init();		/* Initialize everything */
 	signal(SIGINT, trapdel);
diff -Naur --exclude '*.swp' bsd-games-2.17/arithmetic/arithmetic.c bsd-games-2.17.new/arithmetic/arithmetic.c
--- bsd-games-2.17/arithmetic/arithmetic.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/arithmetic/arithmetic.c	2006-04-04 17:33:55.000000000 -0700
@@ -32,6 +32,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1989, 1993\n\
@@ -117,7 +118,10 @@
 	int ch, cnt;
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	while ((ch = getopt(argc, argv, "r:o:")) != -1)
 		switch(ch) {
diff -Naur --exclude '*.swp' bsd-games-2.17/atc/main.c bsd-games-2.17.new/atc/main.c
--- bsd-games-2.17/atc/main.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/atc/main.c	2006-04-06 13:35:43.000000000 -0700
@@ -41,6 +41,7 @@
  * For more info on this and all of my stuff, mail edjames@berkeley.edu.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1990, 1993\n\
@@ -77,7 +78,10 @@
 
 	/* Open the score file then revoke setgid privileges */
 	open_score_file();
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	start_time = seed = time(NULL);
 
diff -Naur --exclude '*.swp' bsd-games-2.17/backgammon/backgammon/main.c bsd-games-2.17.new/backgammon/backgammon/main.c
--- bsd-games-2.17/backgammon/backgammon/main.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/backgammon/backgammon/main.c	2006-04-06 13:39:23.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #include <ncurses/termcap.h>
 #ifndef lint
@@ -101,7 +102,10 @@
 	long    t;		/* time for random num generator */
 
 	/* revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	/* initialization */
 	bflag = 2;		/* default no board */
diff -Naur --exclude '*.swp' bsd-games-2.17/backgammon/teachgammon/teach.c bsd-games-2.17.new/backgammon/teachgammon/teach.c
--- bsd-games-2.17/backgammon/teachgammon/teach.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/backgammon/teachgammon/teach.c	2006-04-06 13:39:44.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #include <ncurses/termcap.h>
 #ifndef lint
@@ -68,7 +69,10 @@
 	int     i;
 
 	/* revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	signal(SIGINT, getout);
 	if (tcgetattr(0, &old) == -1)	/* get old tty mode */
diff -Naur --exclude '*.swp' bsd-games-2.17/banner/banner.c bsd-games-2.17.new/banner/banner.c
--- bsd-games-2.17/banner/banner.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/banner/banner.c	2006-04-04 17:42:03.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1980, 1993, 1994\n\
@@ -1036,7 +1037,10 @@
 	int ch;
 
 	/* revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	while ((ch = getopt(argc, argv, "w:td")) != -1)
 		switch (ch) {
diff -Naur --exclude '*.swp' bsd-games-2.17/battlestar/battlestar.c bsd-games-2.17.new/battlestar/battlestar.c
--- bsd-games-2.17/battlestar/battlestar.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/battlestar/battlestar.c	2006-04-06 13:33:22.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1983, 1993\n\
@@ -64,7 +65,10 @@
 
 	/* Open the score file then revoke setgid privileges */
 	open_score_file();
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	if (argc < 2)
 		initialize(NULL);
diff -Naur --exclude '*.swp' bsd-games-2.17/bcd/bcd.c bsd-games-2.17.new/bcd/bcd.c
--- bsd-games-2.17/bcd/bcd.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/bcd/bcd.c	2006-04-04 17:34:57.000000000 -0700
@@ -32,6 +32,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1989, 1993\n\
@@ -135,7 +136,10 @@
 	char cardline[80];
 
 	/* revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	/*
 	 * The original bcd prompts with a "%" when reading from stdin,
diff -Naur --exclude '*.swp' bsd-games-2.17/boggle/boggle/bog.c bsd-games-2.17.new/boggle/boggle/bog.c
--- bsd-games-2.17/boggle/boggle/bog.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/boggle/boggle/bog.c	2006-04-04 17:41:17.000000000 -0700
@@ -32,6 +32,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1993\n\
@@ -131,7 +132,10 @@
 	char *bspec, *p;
 
 	/* revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	seed = 0;
 	batch = debug = reuse = selfuse = sflag = 0;
diff -Naur --exclude '*.swp' bsd-games-2.17/caesar/caesar.c bsd-games-2.17.new/caesar/caesar.c
--- bsd-games-2.17/caesar/caesar.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/caesar/caesar.c	2006-04-04 17:31:41.000000000 -0700
@@ -37,6 +37,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1989, 1993\n\
@@ -90,7 +91,10 @@
 	int obs[26], try, winner;
 
 	/* revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	winnerdot = 0;
 	if (argc > 1)
diff -Naur --exclude '*.swp' bsd-games-2.17/canfield/canfield/canfield.c bsd-games-2.17.new/canfield/canfield/canfield.c
--- bsd-games-2.17/canfield/canfield/canfield.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/canfield/canfield/canfield.c	2006-04-06 13:31:18.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
@@ -1666,6 +1667,20 @@
 }
 
 /*
+ * Open the high score file and then drop setgid.
+ */
+void
+open_score() {
+	dbfd = open(_PATH_SCORE, O_RDWR);
+
+	/* Revoke setgid privileges */
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
+}
+
+/*
  * procedure to initialize the game
  */
 void
@@ -1679,10 +1694,6 @@
 	uid = getuid();
 	if (uid < 0)
 		uid = 0;
-	dbfd = open(_PATH_SCORE, O_RDWR);
-
-	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
 
 	if (dbfd < 0)
 		return;
@@ -1797,6 +1808,8 @@
 		exit(0);
 	}
 #endif
+        open_score();
+
 	signal(SIGINT, askquit);
 	signal(SIGHUP, cleanup);
 	signal(SIGTERM, cleanup);
diff -Naur --exclude '*.swp' bsd-games-2.17/canfield/cfscores/cfscores.c bsd-games-2.17.new/canfield/cfscores/cfscores.c
--- bsd-games-2.17/canfield/cfscores/cfscores.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/canfield/cfscores/cfscores.c	2006-04-06 13:14:59.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1983, 1993\n\
@@ -78,7 +79,10 @@
 	int uid;
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	if (argc > 2) {
 		printf("Usage: cfscores [user]\n");
diff -Naur --exclude '*.swp' bsd-games-2.17/cribbage/crib.c bsd-games-2.17.new/cribbage/crib.c
--- bsd-games-2.17/cribbage/crib.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/cribbage/crib.c	2006-04-04 18:30:44.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
@@ -76,7 +77,10 @@
 		exit(1);
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	/* Set close-on-exec flag on log file */
 	if (f != NULL) {
diff -Naur --exclude '*.swp' bsd-games-2.17/cribbage/instr.c bsd-games-2.17.new/cribbage/instr.c
--- bsd-games-2.17/cribbage/instr.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/cribbage/instr.c	2006-04-04 17:30:46.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 #if 0
@@ -71,6 +72,11 @@
 		 * for mailx and man.  We only use a pager if stdout is
 		 * a terminal, and we pass the file on stdin to sh -c pager.
 		 */
+		if (setresgid(-1, getgid(), getgid()) != 0) {
+		    perror("Could not drop setgid privileges.  Aborting.");
+		    exit(1);
+		}
+
 		if (!isatty(1))
 			path = "cat";
 		else {
diff -Naur --exclude '*.swp' bsd-games-2.17/factor/factor.c bsd-games-2.17.new/factor/factor.c
--- bsd-games-2.17/factor/factor.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/factor/factor.c	2006-04-07 17:26:49.000000000 -0700
@@ -32,6 +32,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1989, 1993\n\
@@ -138,6 +139,12 @@
 	int ch;
 	char *p, buf[LINE_MAX];		/* > max number of digits. */
 
+	/* Revoke setgid privileges */
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
+
 #ifdef HAVE_OPENSSL 
 	ctx = BN_CTX_new();
 #endif
@@ -145,9 +152,6 @@
 	if (val == NULL)
 		errx(1, "can't initialise bignum");
 
-	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
-
 	while ((ch = getopt(argc, argv, "")) != -1)
 		switch (ch) {
 		case '?':
diff -Naur --exclude '*.swp' bsd-games-2.17/fish/fish.c bsd-games-2.17.new/fish/fish.c
--- bsd-games-2.17/fish/fish.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/fish/fish.c	2006-04-04 17:34:45.000000000 -0700
@@ -32,6 +32,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1990, 1993\n\
@@ -103,7 +104,10 @@
 	int ch, move;
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	while ((ch = getopt(argc, argv, "p")) != -1)
 		switch(ch) {
diff -Naur --exclude '*.swp' bsd-games-2.17/fortune/fortune/fortune.c bsd-games-2.17.new/fortune/fortune/fortune.c
--- bsd-games-2.17/fortune/fortune/fortune.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/fortune/fortune/fortune.c	2006-04-07 17:28:14.000000000 -0700
@@ -32,6 +32,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1986, 1993\n\
@@ -227,7 +228,10 @@
 #endif	/* OK_TO_WRITE_DISK */
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	getargs(ac, av);
 
diff -Naur --exclude '*.swp' bsd-games-2.17/gomoku/main.c bsd-games-2.17.new/gomoku/main.c
--- bsd-games-2.17/gomoku/main.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/gomoku/main.c	2006-04-04 17:35:38.000000000 -0700
@@ -32,6 +32,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1994\n\
@@ -95,7 +96,10 @@
 	};
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	color = curmove = 0;
 
diff -Naur --exclude '*.swp' bsd-games-2.17/hangman/main.c bsd-games-2.17.new/hangman/main.c
--- bsd-games-2.17/hangman/main.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/hangman/main.c	2006-04-04 17:35:55.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1983, 1993\n\
@@ -57,7 +58,10 @@
 	int ch;
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	while ((ch = getopt(argc, argv, "d:m:")) != -1) {
 		switch (ch) {
diff -Naur --exclude '*.swp' bsd-games-2.17/hunt/hunt/hunt.c bsd-games-2.17.new/hunt/hunt/hunt.c
--- bsd-games-2.17/hunt/hunt/hunt.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/hunt/hunt/hunt.c	2006-04-04 17:36:13.000000000 -0700
@@ -30,6 +30,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __RCSID("$NetBSD: hunt.c,v 1.23 2004/11/05 21:30:32 dsl Exp $");
@@ -138,7 +139,10 @@
 	long		enter_status;
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	enter_status = env_init((long) Q_CLOAK);
 	while ((c = getopt(ac, av, "Sbcfh:l:mn:op:qst:w:")) != -1) {
diff -Naur --exclude '*.swp' bsd-games-2.17/mille/mille.c bsd-games-2.17.new/mille/mille.c
--- bsd-games-2.17/mille/mille.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/mille/mille.c	2006-04-04 17:36:28.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1982, 1993\n\
@@ -58,7 +59,10 @@
 	bool	restore;
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	if (strcmp(av[0], "a.out") == 0) {
 		outf = fopen("q", "w");
diff -Naur --exclude '*.swp' bsd-games-2.17/monop/monop.c bsd-games-2.17.new/monop/monop.c
--- bsd-games-2.17/monop/monop.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/monop/monop.c	2006-04-04 17:36:51.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
@@ -65,7 +66,10 @@
 	char *av[];
 {
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	srand(getpid());
 	heapstart = sbrk(0);
diff -Naur --exclude '*.swp' bsd-games-2.17/morse/morse.c bsd-games-2.17.new/morse/morse.c
--- bsd-games-2.17/morse/morse.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/morse/morse.c	2006-04-04 17:37:05.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1988, 1993\n\
@@ -127,7 +128,10 @@
 	char *p;
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	while ((ch = getopt(argc, argv, "ds")) != -1)
 		switch((char)ch) {
diff -Naur --exclude '*.swp' bsd-games-2.17/number/number.c bsd-games-2.17.new/number/number.c
--- bsd-games-2.17/number/number.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/number/number.c	2006-04-07 17:30:32.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1988, 1993, 1994\n\
@@ -94,7 +95,10 @@
 	char line[256];
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	lflag = 0;
 	while ((ch = getopt(argc, argv, "l")) != -1)
diff -Naur --exclude '*.swp' bsd-games-2.17/pig/pig.c bsd-games-2.17.new/pig/pig.c
--- bsd-games-2.17/pig/pig.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/pig/pig.c	2006-04-04 17:37:19.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1992, 1993\n\
@@ -66,7 +67,10 @@
 	char buf[1024];
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	while ((ch = getopt(argc, argv, "")) != -1)
 		switch(ch) {
diff -Naur --exclude '*.swp' bsd-games-2.17/pom/pom.c bsd-games-2.17.new/pom/pom.c
--- bsd-games-2.17/pom/pom.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/pom/pom.c	2006-04-04 17:37:30.000000000 -0700
@@ -31,6 +31,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1989, 1993\n\
@@ -101,7 +102,10 @@
 	char buf[1024];
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	if (time(&now) == (time_t)-1)
 		err(1, "time");
diff -Naur --exclude '*.swp' bsd-games-2.17/ppt/ppt.c bsd-games-2.17.new/ppt/ppt.c
--- bsd-games-2.17/ppt/ppt.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/ppt/ppt.c	2006-04-04 17:37:39.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1988, 1993\n\
@@ -73,7 +74,10 @@
 	int c, start, neednl, dflag;
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	dflag = 0;
 	while ((c = getopt(argc, argv, "dh")) != -1)
diff -Naur --exclude '*.swp' bsd-games-2.17/primes/primes.c bsd-games-2.17.new/primes/primes.c
--- bsd-games-2.17/primes/primes.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/primes/primes.c	2006-04-07 17:29:06.000000000 -0700
@@ -32,6 +32,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1989, 1993\n\
@@ -119,7 +120,10 @@
 	char *p;
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	while ((ch = getopt(argc, argv, "")) != -1)
 		switch (ch) {
diff -Naur --exclude '*.swp' bsd-games-2.17/quiz/quiz.c bsd-games-2.17.new/quiz/quiz.c
--- bsd-games-2.17/quiz/quiz.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/quiz/quiz.c	2006-04-04 17:37:56.000000000 -0700
@@ -33,6 +33,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1991, 1993\n\
@@ -85,7 +86,10 @@
 	const char *indexfile;
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	indexfile = _PATH_QUIZIDX;
 	while ((ch = getopt(argc, argv, "i:t")) != -1)
diff -Naur --exclude '*.swp' bsd-games-2.17/rain/rain.c bsd-games-2.17.new/rain/rain.c
--- bsd-games-2.17/rain/rain.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/rain/rain.c	2006-04-04 17:38:07.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
@@ -77,7 +78,10 @@
 	int xpos[5], ypos[5];
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	while ((ch = getopt(argc, argv, "d:")) != -1)
 		switch (ch) {
diff -Naur --exclude '*.swp' bsd-games-2.17/random/random.c bsd-games-2.17.new/random/random.c
--- bsd-games-2.17/random/random.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/random/random.c	2006-04-04 17:38:19.000000000 -0700
@@ -32,6 +32,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1994\n\
@@ -73,7 +74,10 @@
 	char *ep;
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	denom = 0;
 	random_exit = unbuffer_output = 0;
diff -Naur --exclude '*.swp' bsd-games-2.17/robots/main.c bsd-games-2.17.new/robots/main.c
--- bsd-games-2.17/robots/main.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/robots/main.c	2006-04-06 13:35:58.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
@@ -68,7 +69,10 @@
 		exit(1);
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	show_only = FALSE;
 	Num_games = 1;
diff -Naur --exclude '*.swp' bsd-games-2.17/snake/snake/snake.c bsd-games-2.17.new/snake/snake/snake.c
--- bsd-games-2.17/snake/snake/snake.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/snake/snake/snake.c	2006-04-06 13:32:03.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
@@ -159,7 +160,10 @@
 		warn("fopen %s", _PATH_LOGFILE);
 		sleep(2);
 	}
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	(void) time(&tv);
 
diff -Naur --exclude '*.swp' bsd-games-2.17/snake/snscore/snscore.c bsd-games-2.17.new/snake/snscore/snscore.c
--- bsd-games-2.17/snake/snscore/snscore.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/snake/snscore/snscore.c	2006-04-06 13:15:19.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
@@ -75,7 +76,10 @@
 	struct	passwd	*p;
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	fd = fopen(recfile, "r");
 	if (fd == NULL)
diff -Naur --exclude '*.swp' bsd-games-2.17/trek/main.c bsd-games-2.17.new/trek/main.c
--- bsd-games-2.17/trek/main.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/trek/main.c	2006-04-04 17:38:38.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
@@ -173,7 +174,10 @@
 	struct	termios		argp;
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	av = argv;
 	ac = argc;
diff -Naur --exclude '*.swp' bsd-games-2.17/worm/worm.c bsd-games-2.17.new/worm/worm.c
--- bsd-games-2.17/worm/worm.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/worm/worm.c	2006-04-07 17:28:35.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
@@ -99,7 +100,10 @@
 {
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	setbuf(stdout, outbuf);
 	srand(getpid());
diff -Naur --exclude '*.swp' bsd-games-2.17/worms/worms.c bsd-games-2.17.new/worms/worms.c
--- bsd-games-2.17/worms/worms.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/worms/worms.c	2006-04-04 17:41:34.000000000 -0700
@@ -29,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
@@ -199,7 +200,10 @@
 	unsigned int delay = 0;
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 	mp = NULL;
 	length = 16;
diff -Naur --exclude '*.swp' bsd-games-2.17/wump/wump.c bsd-games-2.17.new/wump/wump.c
--- bsd-games-2.17/wump/wump.c	2006-04-14 15:55:41.000000000 -0700
+++ bsd-games-2.17.new/wump/wump.c	2006-04-04 17:41:55.000000000 -0700
@@ -33,6 +33,7 @@
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1989, 1993\n\
@@ -145,7 +146,10 @@
 	int c;
 
 	/* Revoke setgid privileges */
-	setregid(getgid(), getgid());
+        if (setresgid(-1, getgid(), getgid()) == -1) {
+            perror("Could not drop setgid privileges.  Aborting.");
+            exit(1);
+        }
 
 #ifdef DEBUG
 	while ((c = getopt(argc, argv, "a:b:hp:r:t:d")) != -1)