diff options
author | Paul Janzen <pjanzen@cvs.openbsd.org> | 1998-10-01 05:31:39 +0000 |
---|---|---|
committer | Paul Janzen <pjanzen@cvs.openbsd.org> | 1998-10-01 05:31:39 +0000 |
commit | 37050e0ebb79a0adf6c41ad88f985cf4fb639998 (patch) | |
tree | f6bef751af27447e66f2c329fdad516b66c861d8 | |
parent | 5ebd1c7d9b5bb0f04af00115afa948dcaad1376a (diff) |
'Spam' winners a bit more safely
-rw-r--r-- | games/larn/Makefile | 6 | ||||
-rw-r--r-- | games/larn/bill.c | 81 | ||||
-rw-r--r-- | games/larn/main.c | 13 | ||||
-rw-r--r-- | games/larn/pathnames.h | 4 |
4 files changed, 63 insertions, 41 deletions
diff --git a/games/larn/Makefile b/games/larn/Makefile index e8a181ad8e7..d9b0716d5ac 100644 --- a/games/larn/Makefile +++ b/games/larn/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.7 1998/09/15 05:12:30 pjanzen Exp $ +# $OpenBSD: Makefile,v 1.8 1998/10/01 05:31:38 pjanzen Exp $ # EXTRA # Incorporates code to gather additional performance statistics @@ -37,7 +37,7 @@ # cause player id's from the file ".playerids" to be used instead. # (.playerids is created upon demand). Only one entry per id # is # allowed in each scoreboard (winning & non-winning). -# VT100 +# VT100 # Compile for using vt100 family of terminals. Omission of this # define will cause larn to use termcap, but it will be MUCH slower # due to an extra layer of output interpretation. Also, only VT100 @@ -52,6 +52,8 @@ # used to delay for effect when casting missile type spells. # NOLOG # Turn off logging. +# NOSPAM +# Don't send e-mail to players once they've won. PROG= larn MAN= larn.6 diff --git a/games/larn/bill.c b/games/larn/bill.c index 63960d50b49..51d3116baea 100644 --- a/games/larn/bill.c +++ b/games/larn/bill.c @@ -1,4 +1,4 @@ -/* $OpenBSD: bill.c,v 1.3 1998/09/15 05:12:31 pjanzen Exp $ */ +/* $OpenBSD: bill.c,v 1.4 1998/10/01 05:31:38 pjanzen Exp $ */ /* $NetBSD: bill.c,v 1.5 1997/10/18 20:03:06 christos Exp $ */ /*- @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)bill.c 5.2 (Berkeley) 5/28/91"; #else -static char rcsid[] = "$OpenBSD: bill.c,v 1.3 1998/09/15 05:12:31 pjanzen Exp $"; +static char rcsid[] = "$OpenBSD: bill.c,v 1.4 1998/10/01 05:31:38 pjanzen Exp $"; #endif #endif /* not lint */ @@ -50,12 +50,14 @@ static char rcsid[] = "$OpenBSD: bill.c,v 1.3 1998/09/15 05:12:31 pjanzen Exp $" #include <unistd.h> #include "header.h" #include "extern.h" +#include "pathnames.h" /* bill.c Larn is copyrighted 1986 by Noah Morgan. */ +#ifndef NOSPAM char *mail[] = { + "Undeclared Income", "From: The LRS (Larn Revenue Service)\n", - "~s Undeclared Income\n", "\n We have heard you survived the caverns of Larn. Let us be the", "\nfirst to congratulate you on your success. It was quite a feat.", "\nIt was also very profitable for you...", @@ -67,8 +69,8 @@ char *mail[] = { "\nmean penalties. Once again, congratulations. We look forward", "\nto your future successful expeditions.\n", NULL, + "A Noble Deed", "From: His Majesty King Wilfred of Larndom\n", - "~s A Noble Deed\n", "\n I have heard of your magnificent feat, and I, King Wilfred,", "\nforthwith declare today to be a national holiday. Furthermore,", "\nthree days hence be ye invited to the castle to receive the", @@ -76,15 +78,15 @@ char *mail[] = { "\n\nBravery and courage be yours.", "\n\nMay you live in happiness forevermore...\n", NULL, + "You Bastard!", "From: Count Endelford\n", - "~s You Bastard!\n", "\n I have heard (from sources) of your journey. Congratulations!", "\nYou Bastard! With several attempts I have yet to endure the", " caves,\nand you, a nobody, make the journey! From this time", " onward, bewarned -- \nupon our meeting you shall pay the price!\n", NULL, + "High Praise", "From: Mainair, Duke of Larnty\n", - "~s High Praise\n", "\n With certainty, a hero I declare to be amongst us! A nod of", "\nfavour I send to thee. Me thinks Count Endelford this day of", "\nright breath'eth fire as of dragon of whom ye are slayer. I", @@ -92,8 +94,8 @@ char *mail[] = { "\nunleash some of thy wealth upon those who be unfortunate, I,", "\nDuke Mainair, shall equal thy gift also.\n", NULL, + "these poor children", "From: St. Mary's Children's Home\n", - "~s these poor children\n", "\n News of your great conquests has spread to all of Larndom.", "\nMight I have a moment of a great adventurer's time? We here at", "\nSt. Mary's Children's Home are very poor, and many children are", @@ -102,8 +104,8 @@ char *mail[] = { "\nin our plight? Whatever you could give will help much.", "\n(your gift is tax deductible)\n", NULL, + "hope", "From: The National Cancer Society of Larn\n", - "~s hope\n", "\nCongratulations on your successful expedition. We are sure much", "\ncourage and determination were needed on your quest. There are", "\nmany though, that could never hope to undertake such a journey", @@ -114,8 +116,10 @@ char *mail[] = { "\ndreaded disease, and you can help today. Could you please see it", "\nin your heart to give generously? Your continued good health", "\ncan be your everlasting reward.\n", + NULL, NULL }; +#endif /* * function to mail the letters to the player if a winner @@ -124,41 +128,54 @@ char *mail[] = { void mailbill() { +#ifndef NOSPAM int i; - char fname[32]; char buf[128]; char **cp; - int fd; + int fd[2]; + pid_t pid; + /* This is the last thing that gets run. We don't care if it + * fails, so exit on any failure. Drop privs. */ + setegid(gid); + setgid(gid); wait(0); - if (fork() == 0) { - resetscroll(); - cp = mail; - sprintf(fname, "/tmp/#%dlarnmail", getpid()); - for (i = 0; i < 6; i++) { - if ((fd = open(fname, O_WRONLY | O_TRUNC | O_CREAT, - 0666)) == -1) - exit(0); - while (*cp != NULL) { - if (*cp[0] == '1') { + resetscroll(); + cp = mail; + for (i = 0; i < 6; i++) { + if (pipe(fd) < 0) + exit(0); + if ((pid = fork()) < 0) + exit(0); + else if (pid > 0) { /* parent */ + close(fd[0]); + while (*++cp != NULL) { + if (*cp[0] == '1') sprintf(buf, "\n%ld gold pieces back with you from your journey. As the", (long) c[GOLD]); - write(fd, buf, strlen(buf)); - } else if (*cp[0] == '2') { + else if (*cp[0] == '2') sprintf(buf, "\nin preparing your tax bill. You owe %ld gold pieces as", (long) c[GOLD] * TAXRATE); - write(fd, buf, strlen(buf)); - } else - write(fd, *cp, strlen(*cp)); - cp++; + else + sprintf(buf, *cp); + if (write(fd[1], buf, strlen(buf)) != strlen(buf)) + exit(0); } cp++; - - close(fd); - sprintf(buf, "mail -I %s < %s > /dev/null", - loginname, fname); - system(buf); - unlink(fname); + close(fd[1]); + if (waitpid(pid, NULL, 0) < 0) + exit(0); + } else { /* child */ + close(fd[1]); + if (fd[0] != STDIN_FILENO) { + if (dup2(fd[0], STDIN_FILENO) != STDIN_FILENO) + exit(0); + close(fd[0]); + } + if (execl(_PATH_MAIL, "mail", "-s", *cp, loginname, + (char *) NULL) < 0) + exit(0); } } +#endif exit(0); } diff --git a/games/larn/main.c b/games/larn/main.c index 53cd18e0156..48a59cd75eb 100644 --- a/games/larn/main.c +++ b/games/larn/main.c @@ -1,12 +1,13 @@ -/* $OpenBSD: main.c,v 1.8 1998/09/15 05:12:32 pjanzen Exp $ */ +/* $OpenBSD: main.c,v 1.9 1998/10/01 05:31:38 pjanzen Exp $ */ /* $NetBSD: main.c,v 1.12 1998/02/12 08:07:49 mikel Exp $ */ /* main.c */ #ifndef lint -static char rcsid[] = "$OpenBSD: main.c,v 1.8 1998/09/15 05:12:32 pjanzen Exp $"; +static char rcsid[] = "$OpenBSD: main.c,v 1.9 1998/10/01 05:31:38 pjanzen Exp $"; #endif /* not lint */ #include <sys/types.h> +#include <err.h> #include <errno.h> #include <stdio.h> #include <pwd.h> @@ -79,11 +80,11 @@ main(argc, argv) /* can we get it from /etc/passwd? */ if ((pwe = getpwuid(getuid())) != NULL) ptr = pwe->pw_name; +#ifdef NOSPAM else if ((ptr = getenv("LOGNAME")) == 0) - if ((ptr = getenv("USER")) == 0) { - noone: write(2, "Can't find your logname. Who Are You?\n", 39); - exit(1); - } + if ((ptr = getenv("USER")) == 0) +#endif + noone: errx(1, "can't find your logname. Who Are You?"); } if (ptr == 0) goto noone; diff --git a/games/larn/pathnames.h b/games/larn/pathnames.h index f61281975d7..6698cffe171 100644 --- a/games/larn/pathnames.h +++ b/games/larn/pathnames.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pathnames.h,v 1.2 1998/09/15 05:12:33 pjanzen Exp $ */ +/* $OpenBSD: pathnames.h,v 1.3 1998/10/01 05:31:38 pjanzen Exp $ */ /* $NetBSD: pathnames.h,v 1.7 1997/10/18 20:03:41 christos Exp $ */ /*- @@ -41,3 +41,5 @@ #define _PATH_HELP "/usr/share/games/larn/larn.help" #define _PATH_LEVELS "/usr/share/games/larn/larnmaze" #define _PATH_PLAYERIDS "/var/games/larn/playerids" + +#define _PATH_MAIL "/usr/bin/mail" |