Hi all, As tetris is one of my preferred game :-) ... just did wrapper around setegid in same manner than xmalloc and such. If it can find any use ...
Thanks.
Index: scores.c =================================================================== RCS file: /cvs/src/games/tetris/scores.c,v retrieving revision 1.12 diff -u -p -r1.12 scores.c --- scores.c 16 Nov 2014 04:49:49 -0000 1.12 +++ scores.c 15 Mar 2015 09:08:46 -0000 @@ -111,11 +111,11 @@ getscores(FILE **fpp) human = "reading"; lck = LOCK_SH; } - setegid(egid); + xsetegid(egid); mask = umask(S_IWOTH); sd = open(_PATH_SCOREFILE, mint, 0666); (void)umask(mask); - setegid(gid); + xsetegid(gid); if (sd < 0) { if (fpp == NULL) { nscores = 0; @@ -123,10 +123,10 @@ getscores(FILE **fpp) } err(1, "cannot open %s for %s", _PATH_SCOREFILE, human); } - setegid(egid); + xsetegid(egid); if ((sf = fdopen(sd, mstr)) == NULL) err(1, "cannot fdopen %s for %s", _PATH_SCOREFILE, human); - setegid(gid); + xsetegid(gid); /* * Grab a lock. Index: tetris.c =================================================================== RCS file: /cvs/src/games/tetris/tetris.c,v retrieving revision 1.25 diff -u -p -r1.25 tetris.c --- tetris.c 16 Nov 2014 04:49:49 -0000 1.25 +++ tetris.c 15 Mar 2015 09:08:46 -0000 @@ -161,7 +161,7 @@ main(int argc, char *argv[]) gid = getgid(); egid = getegid(); - setegid(gid); + xsetegid(gid); classic = showpreview = 0; while ((ch = getopt(argc, argv, "ck:l:ps")) != -1) @@ -363,4 +363,11 @@ usage(void) { (void)fprintf(stderr, "usage: tetris [-cps] [-k keys] [-l level]\n"); exit(1); +} + +void +xsetegid(gid_t gid) +{ + if (setegid(gid) == -1) + err(1, "setegid() failed"); } Index: tetris.h =================================================================== RCS file: /cvs/src/games/tetris/tetris.h,v retrieving revision 1.10 diff -u -p -r1.10 tetris.h --- tetris.h 10 Aug 2008 12:23:25 -0000 1.10 +++ tetris.h 15 Mar 2015 09:08:46 -0000 @@ -176,3 +176,4 @@ extern int classic; int fits_in(const struct shape *, int); void place(const struct shape *, int, int); void stop(char *); +void xsetegid(gid_t);