1
0
mirror of https://github.com/openbsd/src.git synced 2025-01-10 06:47:55 -08:00

'Spam' winners a bit more safely

This commit is contained in:
pjanzen 1998-10-01 05:31:38 +00:00
parent 54eb5b4e54
commit a6048ad6b9
4 changed files with 63 additions and 41 deletions

View File

@ -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

View File

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

View File

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

View File

@ -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"