setgid games, not setuid games. closes a neat set of holes
authorderaadt <deraadt@openbsd.org>
Thu, 19 Dec 1996 22:19:48 +0000 (22:19 +0000)
committerderaadt <deraadt@openbsd.org>
Thu, 19 Dec 1996 22:19:48 +0000 (22:19 +0000)
43 files changed:
etc/master.passwd
etc/mtree/4.4BSD.dist
etc/mtree/special
games/adventure/hdr.h
games/adventure/main.c
games/adventure/save.c
games/adventure/vocab.c
games/adventure/wizard.c
games/atc/main.c
games/backgammon/backgammon/main.c
games/backgammon/teachgammon/teach.c
games/banner/banner.c
games/battlestar/battlestar.c
games/battlestar/externs.h
games/battlestar/save.c
games/bcd/bcd.c
games/boggle/boggle/bog.c
games/bs/bs.c
games/caesar/caesar.c
games/canfield/canfield/canfield.c
games/canfield/cfscores/cfscores.c
games/cribbage/crib.c
games/factor/factor.c
games/gomoku/main.c
games/grdc/grdc.c
games/hangman/main.c
games/mille/mille.c
games/monop/initdeck.c
games/morse/morse.c
games/number/number.c
games/pig/pig.c
games/pom/pom.c
games/ppt/ppt.c
games/primes/primes.c
games/quiz/quiz.c
games/rain/rain.c
games/random/random.c
games/snake/snake/snake.c
games/snake/snscore/snscore.c
games/trek/main.c
games/worm/worm.c
games/worms/worms.c
games/wump/wump.c

index 4bc03f7..ee0de90 100644 (file)
@@ -3,6 +3,5 @@ daemon:*:1:31::0:0:The devil himself:/root:/sbin/nologin
 operator:*:2:20::0:0:System &:/usr/guest/operator:/sbin/nologin
 bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/sbin/nologin
 uucp:*:66:1::0:0:UNIX-to-UNIX Copy:/var/spool/uucppublic:/usr/libexec/uucp/uucico
-games:*:7:13::0:0:Games pseudo-user:/usr/games:/sbin/nologin
 nobody:*:32767:32767::0:0:Unprivileged user:/nonexistent:/sbin/nologin
 ingres:*:267:74::0:0:& Group:/usr/ingres:/sbin/nologin
index c651a47..d6ffebf 100644 (file)
@@ -1,4 +1,4 @@
-#      $OpenBSD: 4.4BSD.dist,v 1.27 1996/12/19 02:31:17 millert Exp $
+#      $OpenBSD: 4.4BSD.dist,v 1.28 1996/12/19 22:19:50 deraadt Exp $
 
 /set type=dir uname=root gname=wheel mode=0755
 # .
@@ -113,7 +113,7 @@ bin
 games
 
 # ./usr/games/hide
-hide            gname=games uname=games mode=0700
+hide            gname=games uname=root mode=0550
 # ./usr/games/hide
 ..
 
@@ -1457,13 +1457,13 @@ ns
 ..
 
 # ./var/games
-games            uname=games gname=games mode=0775
+games            uname=root gname=games mode=0755
 
 # ./var/games/hackdir
-hackdir          uname=games gname=games mode=0775
+hackdir          uname=root gname=games mode=0775
 
 # ./var/games/hackdir/save
-save            uname=games gname=games mode=0770
+save            uname=root gname=games mode=0770
 # ./var/games/hackdir/save
 ..
 
@@ -1471,17 +1471,17 @@ save             uname=games gname=games mode=0770
 ..
 
 # ./var/games/hackdir/save             XXX
-save           uname=games gname=games mode=0775
+save           uname=root gname=games mode=0775
 # ./var/games/hackdir/save             XXX
 ..
 
 # ./var/games/larn
-larn             uname=games gname=games mode=0775
+larn             uname=root gname=games mode=0775
 # ./var/games/larn
 ..
 
 # ./var/games/phantasia
-phantasia        uname=games gname=games mode=0775
+phantasia        uname=root gname=games mode=0775
 # ./var/games/phantasia
 ..
 
index dbfefd6..b020da1 100644 (file)
@@ -1,4 +1,4 @@
-#      $OpenBSD: special,v 1.8 1996/12/15 20:21:56 millert Exp $
+#      $OpenBSD: special,v 1.9 1996/12/19 22:19:51 deraadt Exp $
 #      $NetBSD: special,v 1.4 1996/05/08 21:30:18 pk Exp $
 #      @(#)special     8.2 (Berkeley) 1/23/94
 #
@@ -76,7 +76,7 @@ usr           type=dir mode=0755 uname=root gname=wheel
 bin            type=dir mode=0755 uname=root gname=wheel ignore
 ..     #usr/bin
 games          type=dir mode=0755 uname=root gname=wheel optional
-hide           type=dir mode=0700 uname=games gname=games optional ignore
+hide           type=dir mode=0700 uname=root gname=wheel optional ignore
 ..     #usr/games/hide
 ..     #usr/games
 include                type=dir mode=0755 uname=root gname=bin ignore
index 9b8a7a5..e56a8ee 100644 (file)
@@ -54,6 +54,7 @@
  */
 
 /* hdr.h: included by c advent files */
+#include <sys/types.h>
 
 int datfd;                              /* message file descriptor      */
 int delhit;
@@ -130,7 +131,7 @@ int hntmax;
 int hints[20][5];                       /* info on hints                */
 int hinted[20],hintlc[20];
 
-int place[101], prop[101],link[201];
+int place[101], prop[101],linkx[201];
 int abb[LOCSIZ];
 
 int maxtrs,tally,tally2;                /* treasure values              */
@@ -163,3 +164,5 @@ unsigned long crc();
 
 /* We need to get a little tricky to avoid strings */
 #define DECR(a,b,c,d,e) decr('a'+'+','b'+'-','c'+'#','d'+'&','e'+'%')
+
+gid_t  egid;
index 17b008b..aa113f8 100644 (file)
@@ -68,9 +68,8 @@ char **argv;
        struct text *kk;
        extern trapdel();
 
-       /* adventure doesn't need setuid-ness, so, just get rid of it */
-       if (setuid(getuid()) < 0)
-               perror("setuid");
+       egid = getegid();
+       setegid(getgid());
 
        init();         /* Initialize everything */
        signal(SIGINT,trapdel);
@@ -125,7 +124,7 @@ char **argv;
                if (loc==33 && pct(25)&&!closng) rspeak(8);
                if (!dark(0))
                {       abb[loc]++;
-                       for (i=atloc[loc]; i!=0; i=link[i])     /*2004  */
+                       for (i=atloc[loc]; i!=0; i=linkx[i])     /*2004  */
                        {       obj=i;
                                if (obj>100) obj -= 100;
                                if (obj==steps && toting(nugget)) continue;
@@ -269,7 +268,7 @@ char **argv;
        l4080:
                switch(verb)
                {   case 1:                     /* take = 8010          */
-                       if (atloc[loc]==0||link[atloc[loc]]!=0) goto l8000;
+                       if (atloc[loc]==0||linkx[atloc[loc]]!=0) goto l8000;
                        for (i=1; i<=5; i++)
                                if (dloc[i]==loc&&dflag>=2) goto l8000;
                        obj=atloc[loc];
index 9ee1eac..77f36f0 100644 (file)
@@ -114,7 +114,7 @@ struct savestruct save_array[] =
        dseen,          sizeof(dseen),
        fixed,          sizeof(fixed),
        hinted,         sizeof(hinted),
-       link,           sizeof(link),
+       linkx,           sizeof(linkx),
        odloc,          sizeof(odloc),
        place,          sizeof(place),
        prop,           sizeof(prop),
@@ -131,25 +131,22 @@ char *outfile;  /* to output the data using checksum to start random #s */
        char *s;
        long sum;
        int i;
-       uid_t euid_save;
 
        crc_start();
        for (p = save_array; p->address != NULL; p++)
                sum = crc(p->address, p->width);
        srandom((int) sum);
 
-       euid_save = geteuid();
-       seteuid(getuid());
-
+       setegid(egid);
        if ((out = fopen(outfile, "wb")) == NULL)
        {
            fprintf(stderr,
                "Hmm.  The name \"%s\" appears to be magically blocked.\n",
                outfile);
-           seteuid(euid_save);
+           setegid(getgid());
            return 1;
        }
-       seteuid(euid_save);
+       setegid(getgid());
 
        fwrite(&sum, sizeof(sum), 1, out);      /* Here's the random() key */
        for (p = save_array; p->address != NULL; p++)
@@ -170,20 +167,17 @@ char *infile;
        char *s;
        long sum, cksum;
        int i;
-       uid_t euid_save;
-
-       euid_save = geteuid();
-       seteuid(euid_save);
 
+       setegid(egid);
        if ((in = fopen(infile, "rb")) == NULL)
        {
            fprintf(stderr,
                "Hmm.  The file \"%s\" appears to be magically blocked.\n",
                infile);
-           seteuid(euid_save);
+           setegid(getgid());
            return 1;
        }
-       seteuid(euid_save);
+       setegid(getgid());
 
        fread(&sum, sizeof(sum), 1, in);        /* Get the seed */
        srandom((int) sum);
index dbd451c..8447818 100644 (file)
@@ -96,11 +96,11 @@ int object,where;
                holdng++;
        }
        if (atloc[where]==object)
-       {       atloc[where]=link[object];
+       {       atloc[where]=linkx[object];
                return;
        }
-       for (temp=atloc[where]; link[temp]!=object; temp=link[temp]);
-       link[temp]=link[object];
+       for (temp=atloc[where]; linkx[temp]!=object; temp=linkx[temp]);
+       linkx[temp]=linkx[object];
 }
 
 
@@ -112,7 +112,7 @@ int object,where;
                place[object]=where;
        }
        if (where<=0) return;
-       link[object]=atloc[where];
+       linkx[object]=atloc[where];
        atloc[where]=object;
 }
 
index aee942e..2ff3f5f 100644 (file)
@@ -54,7 +54,6 @@ static char rcsid[] = "$NetBSD: wizard.c,v 1.3 1995/04/24 12:21:41 cgd Exp $";
 datime(d,t)
 int *d,*t;
 {       int tvec[2],*tptr;
-       int *localtime();
 
        time(tvec);
        tptr=localtime(tvec);
index 9f2c0ce..4ba2d0f 100644 (file)
@@ -77,6 +77,8 @@ main(ac, av)
        extern char             *default_game(), *okay_game();
        extern void             log_score(), quit(), update();
 
+       setgid(getgid());
+
        start_time = seed = time(0);
 
        name = *av++;
index 7554ff6..7077e28 100644 (file)
@@ -109,6 +109,8 @@ char        **argv;
        register char   c;              /* non-descript character storage */
        long    t;                      /* time for random num generator */
 
+       setgid(getgid());
+
        /* initialization */
        bflag = 2;                                      /* default no board */
        signal (2, getout);                             /* trap interrupts */
index 3eaf273..72b9901 100644 (file)
@@ -84,6 +84,8 @@ char  **argv;
 {
        register int    i;
 
+       setgid(getgid());
+
        signal (2,getout);
        if (tcgetattr (0, &old) == -1)                  /* get old tty mode */
                errexit ("teachgammon(gtty)");
index b3d842a..cd46e29 100644 (file)
@@ -1036,6 +1036,8 @@ main(argc, argv)
 { 
        int ch;
 
+       setgid(getgid());
+
        while ((ch = getopt(argc, argv, "w:td")) != EOF)
                switch(ch) {
                case 'w':
index 078adb9..b97e89c 100644 (file)
@@ -63,6 +63,9 @@ char **argv;
        char mainbuf[LINELENGTH];
        char *next;
 
+       egid = getegid();
+       setegid(getgid());
+
        initialize(argc < 2 || strcmp(argv[1], "-r"));
 start:
        news();
index 2a0ef58..cb3513a 100644 (file)
@@ -299,3 +299,5 @@ struct objs {
 };
 struct objs dayobjs[];
 struct objs nightobjs[];
+
+gid_t  egid;
index b218d3c..654deb0 100644 (file)
@@ -47,7 +47,7 @@ restore()
 {
        char *getenv();
        char *home;
-       char home1[100];
+       char home1[1024];
        register int n;
        int tmp;
        register FILE *fp;
@@ -57,13 +57,16 @@ restore()
                strcpy(home1, home);
                strcat(home1, "/Bstar");
        } else {
-               fprintf(stderr, "%s/Bstar: %s\n", home, strerror(ENAMETOOLONG));
+               fprintf(stderr, "%s: %s\n", home1, strerror(ENAMETOOLONG));
                return;
        }
+       setegid(egid);
        if ((fp = fopen(home1, "r")) == 0) {
                perror(home1);
+               setegid(getgid());
                return;
        }
+       setegid(getgid());
        fread(&WEIGHT, sizeof WEIGHT, 1, fp);
        fread(&CUMBER, sizeof CUMBER, 1, fp);
        fread(&clock, sizeof clock, 1, fp);
@@ -118,10 +121,13 @@ save()
                fprintf(stderr, "%s/Bstar: %s\n", home, strerror(ENAMETOOLONG));
                return;
        }
+       setegid(egid);
        if ((fp = fopen(home1, "w")) == 0) {
                perror(home1);
+               setegid(getgid());
                return;
        }
+       setegid(getgid());
        printf("Saved in %s.\n", home1);
        fwrite(&WEIGHT, sizeof WEIGHT, 1, fp);
        fwrite(&CUMBER, sizeof CUMBER, 1, fp);
index 69ee9a1..ba6f11b 100644 (file)
@@ -134,6 +134,8 @@ main(argc, argv)
         * but this seems kind of silly.  So this one doesn't.
         */
 
+       setgid(getgid());
+
        if (argc > 1) {
                while (--argc)
                        printcard(*++argv);
index 9a601fd..5ceb547 100644 (file)
@@ -130,6 +130,8 @@ main(argc, argv)
        int ch, done, i, selfuse, sflag;
        char *bspec, *p;
 
+       setgid(getgid());
+
        batch = debug = reuse = selfuse = sflag = 0;
        bspec = NULL;
        minlength = 3;
index ad01d60..75ab721 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: bs.c,v 1.1 1996/08/21 08:18:36 downsj Exp $   */
+/*     $OpenBSD: bs.c,v 1.2 1996/12/19 22:21:13 deraadt Exp $  */
 /*
  * bs.c - original author: Bruce Holloway
  *             salvo option by: Chuck A DeGaul
@@ -1203,6 +1203,8 @@ main(argc, argv)
 int argc;
 char *argv[];
 {
+    setgid(getgid());
+
     do_options(argc, argv);
 
     intro();
index 80e41ac..dd9a0f2 100644 (file)
@@ -85,6 +85,8 @@ main(argc, argv)
        int obs[26], try, winner;
        char *malloc(), *strerror();
 
+       setgid(getgid());
+
        if (argc > 1)
                printit(argv[1]);
 
index 406b698..9028522 100644 (file)
@@ -1578,10 +1578,10 @@ initall()
        srandom(getpid());
        time(&acctstart);
        initdeck(deck);
-       uid = getuid();
        if (uid < 0)
                uid = 0;
        dbfd = open(_PATH_SCORE, 2);
+       setegid(getgid());
        if (dbfd < 0)
                return;
        i = lseek(dbfd, uid * sizeof(struct betinfo), 0);
@@ -1699,6 +1699,7 @@ main(argc, argv)
        raw();
        noecho();
        initall();
+       setgid(getgid());               /* revoke */
        instruct();
        makeboard();
        for (;;) {
index 4a3a0e8..520c401 100644 (file)
@@ -80,6 +80,7 @@ main(argc, argv)
                perror(_PATH_SCORE);
                exit(2);
        }
+       setgid(getgid());               /* revoke */
        setpwent();
        if (argc == 1) {
                uid = getuid();
index 96bfe56..1ff23da 100644 (file)
@@ -66,6 +66,10 @@ main(argc, argv)
        BOOLEAN playing;
        FILE *f;
        int ch;
+       gid_t egid;
+
+       egid = getegid();
+       setegid(getgid());
 
        while ((ch = getopt(argc, argv, "eqr")) != EOF)
                switch (ch) {
@@ -93,6 +97,7 @@ main(argc, argv)
        Tablewin = subwin(stdscr, TABLE_Y, TABLE_X, 0, PLAY_X);
        Compwin = subwin(stdscr, COMP_Y, COMP_X, 0, TABLE_X + PLAY_X);
        Msgwin = subwin(stdscr, MSG_Y, MSG_X, Y_MSG_START, SCORE_X + 1);
+
        leaveok(Playwin, TRUE);
        leaveok(Tablewin, TRUE);
        leaveok(Compwin, TRUE);
@@ -126,11 +131,13 @@ main(argc, argv)
                playing = (getuchar() == 'Y');
        } while (playing);
 
+       setegid(egid);
        if (f = fopen(_PATH_LOG, "a")) {
                (void)fprintf(f, "%s: won %5.5d, lost %5.5d\n",
                    getlogin(), cgames, pgames);
                (void) fclose(f);
        }
+       setegid(getgid());
        bye();
        if (!f) {
                (void) fprintf(stderr, "\ncribbage: can't open %s.\n",
index c578a74..0f56322 100644 (file)
@@ -99,6 +99,8 @@ main(argc, argv)
        int ch;
        char *p, buf[100];              /* > max number of digits. */
 
+       setgid(getgid());
+
        while ((ch = getopt(argc, argv, "")) != EOF)
                switch (ch) {
                case '?':
index 0a4bbfd..b1647cc 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: main.c,v 1.1.1.1 1996/12/16 06:56:08 downsj Exp $     */
+/*     $OpenBSD: main.c,v 1.2 1996/12/19 22:21:28 deraadt Exp $        */
 /*
  * Copyright (c) 1994
  *     The Regents of the University of California.  All rights reserved.
@@ -95,6 +95,8 @@ main(argc, argv)
                "%3d        %-6s"
        };
 
+       setgid(getgid());
+
        prog = strrchr(argv[0], '/');
        if (prog)
                prog++;
index aaec201..a1d98d4 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: grdc.c,v 1.1 1996/08/21 07:58:08 downsj Exp $ */
+/*     $OpenBSD: grdc.c,v 1.2 1996/12/19 22:21:30 deraadt Exp $        */
 /*
  * Grand digital clock for curses compatible terminals
  * Usage: grdc [-s] [n]   -- run for n seconds (default infinity)
@@ -57,6 +57,8 @@ int n = 0;
 
        initscr();
 
+       setgid(getgid());
+
        signal(SIGINT,sighndl);
        signal(SIGTERM,sighndl);
        signal(SIGHUP,sighndl);
index 3da3bac..3ab3677 100644 (file)
@@ -56,6 +56,8 @@ main()
 {
        void die();
 
+       setgid(getgid());
+
        initscr();
        signal(SIGINT, die);
        setup();
index 66ccd3a..c5632a2 100644 (file)
@@ -65,8 +65,7 @@ register char *av[]; {
 
        register bool   restore;
 
-       /* run as the user */
-       setuid(getuid());
+       setgid(getgid());       /* run as the user */
 
        if (strcmp(av[0], "a.out") == 0) {
                outf = fopen("q", "w");
index bef9655..6c60bf7 100644 (file)
@@ -82,6 +82,8 @@ int   ac;
 char   *av[]; {
        int n;
 
+       setgid(getgid());
+
        getargs(ac, av);
        if ((inf = fopen(infile, "r")) == NULL) {
                perror(infile);
index a904501..af5b456 100644 (file)
@@ -103,6 +103,8 @@ main(argc, argv)
        register int ch;
        register char *p;
 
+       setgid(getgid());
+
        while ((ch = getopt(argc, argv, "s")) != EOF)
                switch((char)ch) {
                case 's':
index 509f012..dafbe8f 100644 (file)
@@ -96,6 +96,8 @@ main(argc, argv)
        int ch, first;
        char line[256];
 
+       setgid(getgid());
+
        lflag = 0;
        while ((ch = getopt(argc, argv, "l")) != EOF)
                switch (ch) {
index b5bec38..0cffcd3 100644 (file)
@@ -66,6 +66,8 @@ main(argc, argv)
        int ch;
        char buf[1024];
 
+       setgid(getgid());
+
        while ((ch = getopt(argc, argv, "")) != EOF)
                switch(ch) {
                case '?':
index b154e1e..9e78e40 100644 (file)
@@ -86,6 +86,8 @@ main()
        double days, today, tomorrow;
        int cnt;
 
+       setgid(getgid());
+
        if (gettimeofday(&tp,&tzp)) {
                (void)fprintf(stderr, "pom: %s\n", strerror(errno));
                exit(1);
index c86c1dc..3bb88b9 100644 (file)
@@ -58,6 +58,8 @@ main(argc, argv)
        register int c;
        register char *p;
 
+       setgid(getgid());
+
        (void) puts("___________");
        if (argc > 1)
                while (p = *++argv)
index 868d994..09fa701 100644 (file)
@@ -120,6 +120,8 @@ main(argc, argv)
        int ch;
        char *p;
 
+       setgid(getgid());
+
        while ((ch = getopt(argc, argv, "")) != EOF)
                switch (ch) {
                case '?':
index 6af648d..4aa34a2 100644 (file)
@@ -84,6 +84,8 @@ main(argc, argv)
        register int ch;
        char *indexfile;
 
+       setgid(getgid());
+
        indexfile = _PATH_QUIZIDX;
        while ((ch = getopt(argc, argv, "i:t")) != EOF)
                switch(ch) {
index ef9fbfb..340ed05 100644 (file)
@@ -81,6 +81,8 @@ main(argc, argv)
        struct winsize ws;
 #endif
 
+       setgid(getgid());
+
        if (!(term = getenv("TERM"))) {
                fprintf(stderr, "%s: TERM: parameter not set\n", *argv);
                exit(1);
index 96267e2..5849588 100644 (file)
@@ -73,6 +73,8 @@ main(argc, argv)
        int ch, random_exit, selected, unbuffer_output;
        char *ep;
 
+       setgid(getgid());
+
        random_exit = unbuffer_output = 0;
        while ((ch = getopt(argc, argv, "er")) != EOF)
                switch (ch) {
index db69aef..a09e900 100644 (file)
@@ -100,6 +100,9 @@ int repeat=1;
 time_t tv;
 char *tn;
 
+int rawscores;
+FILE *logfile;
+
 main(argc,argv)
 int argc;
 char **argv;
@@ -109,6 +112,10 @@ char **argv;
        int ch, i, j, k;
        void stop();
 
+       rawscores = open(_PATH_RAWSCORES, O_RDWR|O_CREAT, 0644);
+       logfile = fopen(_PATH_LOGFILE, "a");
+       setgid(getgid());
+
        (void)time(&tv);
        srandom((int)tv);
 
@@ -469,7 +476,6 @@ post(iscore, flag)
 int    iscore, flag;
 {
        short   score = iscore;
-       int     rawscores;
        short   uid;
        short   oldbest=0;
        short   allbwho=0, allbscore=0;
@@ -482,7 +488,7 @@ int iscore, flag;
                pr("No saved scores for uid %d.\n", uid);
                return(1);
        }
-       if ((rawscores = open(_PATH_RAWSCORES, O_RDWR|O_CREAT, 0644)) < 0) {
+       if (rawscores == -1) {
                pr("No score file %s: %s.\n", _PATH_RAWSCORES,
                    strerror(errno));
                return(1);
@@ -885,10 +891,9 @@ int num;
 logit(msg)
 char *msg;
 {
-       FILE *logfile;
        time_t t;
 
-       if ((logfile=fopen(_PATH_LOGFILE, "a")) != NULL) {
+       if (logfile != NULL) {
                time(&t);
                fprintf(logfile, "%s $%d %dx%d %s %s",
                    getlogin(), cashvalue, lcnt, ccnt, msg, ctime(&t));
index a45babc..a6a2e6d 100644 (file)
@@ -75,6 +75,7 @@ main()
        struct  passwd  *p;
 
        fd = fopen(recfile, "r");
+       setgid(getgid());
        if (fd == NULL) {
                perror(recfile);
                exit(1);
index 9d8491e..6843ef9 100644 (file)
@@ -167,6 +167,8 @@ char        **argv;
        register char           **av;
        struct  termios         argp;
 
+       setgid(getgid());
+
        av = argv;
        ac = argc;
        av++;
index e4488bc..495ed3c 100644 (file)
@@ -89,6 +89,8 @@ main(argc, argv)
 {
        char ch;
 
+       setgid(getgid());
+
        if (argc == 2)
                start_len = atoi(argv[1]);
        if ((start_len <= 0) || (start_len > 500))
index dbf9511..62d7ea9 100644 (file)
@@ -211,6 +211,8 @@ main(argc, argv)
        struct winsize ws;
 #endif
 
+       setgid(getgid());
+
        length = 16;
        number = 3;
        trail = ' ';
index 536324e..ceff053 100644 (file)
@@ -118,6 +118,8 @@ main(argc, argv)
        extern char *optarg;
        int c;
 
+       setgid(getgid());
+
 #ifdef DEBUG
        while ((c = getopt(argc, argv, "a:b:hp:r:t:d")) != EOF)
 #else