Relinguish SGID games, restore it only when opening the score file
authortholo <tholo@openbsd.org>
Sat, 21 Dec 1996 21:43:54 +0000 (21:43 +0000)
committertholo <tholo@openbsd.org>
Sat, 21 Dec 1996 21:43:54 +0000 (21:43 +0000)
games/tetris/scores.c
games/tetris/shapes.c
games/tetris/tetris.c
games/tetris/tetris.h

index af3f348..1dddd64 100644 (file)
@@ -53,6 +53,7 @@
 #include <string.h>
 #include <time.h>
 #include <unistd.h>
+#include <sys/stat.h>
 
 /*
  * XXX - need a <termcap.h>
@@ -99,7 +100,7 @@ static void
 getscores(fpp)
        FILE **fpp;
 {
-       int sd, mint, lck;
+       int sd, mint, lck, mask;
        char *mstr, *human;
        FILE *sf;
 
@@ -114,7 +115,10 @@ getscores(fpp)
                human = "reading";
                lck = LOCK_SH;
        }
+       setegid(egid);
+       mask = umask(S_IWOTH);
        sd = open(_PATH_SCOREFILE, mint, 0666);
+       (void)umask(mask);
        if (sd < 0) {
                if (fpp == NULL) {
                        nscores = 0;
@@ -129,6 +133,7 @@ getscores(fpp)
                    _PATH_SCOREFILE, human, strerror(errno));
                exit(1);
        }
+       setegid(gid);
 
        /*
         * Grab a lock.
index 5421bcf..8e4525c 100644 (file)
@@ -44,7 +44,7 @@
  * Note that the first 7 are `well known'.
  */
 
-#include <sys/cdefs.h>
+#include <unistd.h>
 #include "tetris.h"
 
 #define        TL      -B_COLS-1       /* top left */
index ababeed..8eeb60d 100644 (file)
@@ -126,6 +126,10 @@ main(argc, argv)
 
        keys = "jkl pq";
 
+       gid = getgid();
+       egid = getegid();
+       setegid(gid);
+
        while ((ch = getopt(argc, argv, "k:l:s")) != EOF)
                switch(ch) {
                case 'k':
index 90e9c5d..1e995c3 100644 (file)
@@ -163,6 +163,7 @@ long        fallrate;               /* less than 1 million; smaller => faster */
  * still be moved or rotated).
  */
 int    score;                  /* the obvious thing */
+gid_t  gid, egid;
 
 char   key_msg[100];