]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - caesar/caesar.c
Drop setgid privs early, via OpenBSD
[bsdgames-darwin.git] / caesar / caesar.c
index e2355fdcd1932f8b5653075b1d683592cde250e1..3359a067c3943d05384f1261624dc1a65a9b6cd8 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: caesar.c,v 1.5 1997/10/10 12:07:11 lukem Exp $ */
+/*     $NetBSD: caesar.c,v 1.8 1999/07/21 04:04:21 hubertf Exp $       */
 
 /*
  * Copyright (c) 1989, 1993
@@ -51,11 +51,12 @@ __COPYRIGHT("@(#) Copyright (c) 1989, 1993\n\
 #if 0
 static char sccsid[] = "@(#)caesar.c   8.1 (Berkeley) 5/31/93";
 #else
-__RCSID("$NetBSD: caesar.c,v 1.5 1997/10/10 12:07:11 lukem Exp $");
+__RCSID("$NetBSD: caesar.c,v 1.8 1999/07/21 04:04:21 hubertf Exp $");
 #endif
 #endif /* not lint */
 
 #include <ctype.h>
+#include <err.h>
 #include <errno.h>
 #include <math.h>
 #include <stdio.h>
@@ -80,7 +81,7 @@ double stdf[26] = {
 
 
 int    main __P((int, char *[]));
-void   printit __P((char *));
+void   printit __P((char *)) __attribute__((__noreturn__));
 
 int
 main(argc, argv)
@@ -91,14 +92,15 @@ main(argc, argv)
        char *inbuf;
        int obs[26], try, winner;
 
+       /* revoke setgid privileges */
+       setregid(getgid(), getgid());
+
        winnerdot = 0;
        if (argc > 1)
                printit(argv[1]);
 
-       if (!(inbuf = malloc(LINELENGTH))) {
-               (void)fprintf(stderr, "caesar: out of memory.\n");
-               exit(1);
-       }
+       if (!(inbuf = malloc(LINELENGTH)))
+               errx(1, "out of memory");
 
        /* adjust frequency table to weight low probs REAL low */
        for (i = 0; i < 26; ++i)
@@ -107,10 +109,8 @@ main(argc, argv)
        /* zero out observation table */
        memset(obs, 0, 26 * sizeof(int));
 
-       if ((nread = read(STDIN_FILENO, inbuf, LINELENGTH)) < 0) {
-               (void)fprintf(stderr, "caesar: %s\n", strerror(errno));
-               exit(1);
-       }
+       if ((nread = read(STDIN_FILENO, inbuf, LINELENGTH)) < 0)
+               err(1, "reading from stdin");
        for (i = nread; i--;) {
                ch = inbuf[i];
                if (islower(ch))
@@ -144,10 +144,8 @@ main(argc, argv)
                }
                if (nread < LINELENGTH)
                        break;
-               if ((nread = read(STDIN_FILENO, inbuf, LINELENGTH)) < 0) {
-                       (void)fprintf(stderr, "caesar: %s\n", strerror(errno));
-                       exit(1);
-               }
+               if ((nread = read(STDIN_FILENO, inbuf, LINELENGTH)) < 0)
+                       err(1, "reading from stdin");
        }
        exit(0);
 }
@@ -158,10 +156,8 @@ printit(arg)
 {
        int ch, rot;
 
-       if ((rot = atoi(arg)) < 0) {
-               (void)fprintf(stderr, "caesar: bad rotation value.\n");
-               exit(1);
-       }
+       if ((rot = atoi(arg)) < 0)
+               errx(1, "bad rotation value.");
        while ((ch = getchar()) != EOF)
                putchar(ROTATE(ch, rot));
        exit(0);