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);