1
0
mirror of https://github.com/openbsd/src.git synced 2024-12-22 16:42:56 -08:00

from christos;

- Fix PR/105: Implement dot locking protocol and check return value of flock.
- Fix PR/2247: Don't call unknown users "ubluit". Issue an error message.
- Fix/add prototypes.
- Fix warnings.
- Use POSIX signal mask calls.
This commit is contained in:
deraadt 1996-06-11 12:53:31 +00:00
parent 34e3ab7268
commit 7eb34045c5
43 changed files with 899 additions and 390 deletions

View File

@ -1,10 +1,10 @@
# $OpenBSD: Makefile,v 1.2 1996/03/27 19:32:29 niklas Exp $
# from: @(#)Makefile 8.2 (Berkeley) 1/25/94
# $OpenBSD: Makefile,v 1.3 1996/06/11 12:53:31 deraadt Exp $
# $NetBSD: Makefile,v 1.8 1996/06/08 19:48:09 christos Exp $
PROG= mail
SRCS= version.c aux.c cmd1.c cmd2.c cmd3.c cmdtab.c collect.c edit.c fio.c \
getname.c head.c v7.local.c lex.c list.c main.c names.c popen.c \
quit.c send.c strings.c temp.c tty.c vars.c
SRCS= version.c aux.c cmd1.c cmd2.c cmd3.c cmdtab.c collect.c dotlock.c \
edit.c fio.c getname.c head.c v7.local.c lex.c list.c main.c names.c \
popen.c quit.c send.c strings.c temp.c tty.c vars.c
SFILES= mail.help mail.tildehelp
EFILES= mail.rc
LINKS= ${BINDIR}/mail ${BINDIR}/Mail ${BINDIR}/mail ${BINDIR}/mailx

View File

@ -1,5 +1,4 @@
# from: @(#)Makefile 8.1 (Berkeley) 6/8/93
# $Id: Makefile,v 1.1.1.1 1995/10/18 08:45:39 deraadt Exp $
# $OpenBSD: Makefile,v 1.2 1996/06/11 12:54:17 deraadt Exp $
DIR= usd/07.mail
SRCS= mail0.nr mail1.nr mail2.nr mail3.nr mail4.nr mail5.nr mail6.nr \

View File

@ -1,3 +1,5 @@
.\" $OpenBSD: mail0.nr,v 1.2 1996/06/11 12:54:18 deraadt Exp $
.\"
.\" Copyright (c) 1980, 1993
.\" The Regents of the University of California. All rights reserved.
.\"

View File

@ -1,3 +1,5 @@
.\" $OpenBSD: mail1.nr,v 1.2 1996/06/11 12:54:18 deraadt Exp $
.\"
.\" Copyright (c) 1980, 1993
.\" The Regents of the University of California. All rights reserved.
.\"

View File

@ -1,3 +1,5 @@
.\" $OpenBSD: mail2.nr,v 1.2 1996/06/11 12:54:19 deraadt Exp $
.\"
.\" Copyright (c) 1980, 1993
.\" The Regents of the University of California. All rights reserved.
.\"

View File

@ -1,3 +1,5 @@
.\" $OpenBSD: mail3.nr,v 1.2 1996/06/11 12:54:20 deraadt Exp $
.\"
.\" Copyright (c) 1980, 1993
.\" The Regents of the University of California. All rights reserved.
.\"

View File

@ -1,3 +1,5 @@
.\" $OpenBSD: mail4.nr,v 1.2 1996/06/11 12:54:20 deraadt Exp $
.\"
.\" Copyright (c) 1980, 1993
.\" The Regents of the University of California. All rights reserved.
.\"

View File

@ -1,3 +1,5 @@
.\" $OpenBSD: mail5.nr,v 1.2 1996/06/11 12:54:21 deraadt Exp $
.\"
.\" Copyright (c) 1980, 1993
.\" The Regents of the University of California. All rights reserved.
.\"

View File

@ -1,3 +1,5 @@
.\" $OpenBSD: mail6.nr,v 1.2 1996/06/11 12:54:22 deraadt Exp $
.\"
.\" Copyright (c) 1980, 1993
.\" The Regents of the University of California. All rights reserved.
.\"

View File

@ -1,3 +1,5 @@
.\" $OpenBSD: mail7.nr,v 1.2 1996/06/11 12:54:23 deraadt Exp $
.\"
.\" Copyright (c) 1980, 1993
.\" The Regents of the University of California. All rights reserved.
.\"

View File

@ -1,3 +1,5 @@
.\" $OpenBSD: mail8.nr,v 1.2 1996/06/11 12:54:24 deraadt Exp $
.\"
.\" Copyright (c) 1980, 1993
.\" The Regents of the University of California. All rights reserved.
.\"

View File

@ -1,3 +1,5 @@
.\" $OpenBSD: mail9.nr,v 1.2 1996/06/11 12:54:24 deraadt Exp $
.\"
.\" Copyright (c) 1980, 1993
.\" The Regents of the University of California. All rights reserved.
.\"

View File

@ -1,3 +1,5 @@
.\" $OpenBSD: maila.nr,v 1.2 1996/06/11 12:54:25 deraadt Exp $
.\"
.\" Copyright (c) 1980, 1993
.\" The Regents of the University of California. All rights reserved.
.\"

View File

@ -1,3 +1,6 @@
/* $OpenBSD: aux.c,v 1.2 1996/06/11 12:53:32 deraadt Exp $ */
/* $NetBSD: aux.c,v 1.4 1996/06/08 19:48:10 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -32,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)aux.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$Id: aux.c,v 1.1.1.1 1995/10/18 08:45:37 deraadt Exp $";
#if 0
static char sccsid[] = "@(#)aux.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: aux.c,v 1.2 1996/06/11 12:53:32 deraadt Exp $";
#endif
#endif /* not lint */
#include "rcv.h"
@ -44,6 +50,7 @@ static char rcsid[] = "$Id: aux.c,v 1.1.1.1 1995/10/18 08:45:37 deraadt Exp $";
*
* Auxiliary functions.
*/
static char *save2str __P((char *, char *));
/*
* Return a pointer to a dynamic copy of the argument.
@ -63,7 +70,7 @@ savestr(str)
/*
* Make a copy of new argument incorporating old one.
*/
char *
static char *
save2str(str, old)
char *str, *old;
{
@ -180,7 +187,7 @@ hfield(field, mp)
while (lc > 0) {
if ((lc = gethfield(ibuf, linebuf, lc, &colon)) < 0)
return oldhfield;
if (hfield = ishfield(linebuf, colon, field))
if ((hfield = ishfield(linebuf, colon, field)) != NULL)
oldhfield = save2str(hfield, oldhfield);
}
return oldhfield;
@ -304,9 +311,10 @@ struct sstack {
* that they are no longer reading from a tty (in all probability).
*/
int
source(arglist)
char **arglist;
source(v)
void *v;
{
char **arglist = v;
FILE *fi;
char *cp;
@ -366,7 +374,6 @@ alter(name)
{
struct stat sb;
struct timeval tv[2];
time_t time();
if (stat(name, &sb))
return;
@ -465,7 +472,7 @@ skin(name)
gotlt = 0;
lastsp = 0;
bufend = nbuf;
for (cp = name, cp2 = bufend; c = *cp++; ) {
for (cp = name, cp2 = bufend; (c = *cp++) != '\0'; ) {
switch (c) {
case '(':
cp = skip_comment(cp);
@ -477,13 +484,13 @@ skin(name)
* Start of a "quoted-string".
* Copy it in its entirety.
*/
while (c = *cp) {
while ((c = *cp) != '\0') {
cp++;
if (c == '"')
break;
if (c != '\\')
*cp2++ = c;
else if (c = *cp) {
else if ((c = *cp) != '\0') {
*cp2++ = c;
cp++;
}
@ -515,7 +522,7 @@ skin(name)
if (c == '(')
cp = skip_comment(cp);
else if (c == '"')
while (c = *cp) {
while ((c = *cp) != '\0') {
cp++;
if (c == '"')
break;
@ -663,7 +670,7 @@ copy(s1, s2)
register char *s1, *s2;
{
while (*s2++ = *s1++)
while ((*s2++ = *s1++) != '\0')
;
return s2 - 1;
}

View File

@ -1,4 +1,5 @@
/* $OpenBSD: cmd1.c,v 1.2 1996/03/27 19:32:30 niklas Exp $ */
/* $OpenBSD: cmd1.c,v 1.3 1996/06/11 12:53:32 deraadt Exp $ */
/* $NetBSD: cmd1.c,v 1.5 1996/06/08 19:48:11 christos Exp $ */
/*-
* Copyright (c) 1980, 1993
@ -34,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)cmd1.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$OpenBSD: cmd1.c,v 1.2 1996/03/27 19:32:30 niklas Exp $";
#if 0
static char sccsid[] = "@(#)cmd1.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: cmd1.c,v 1.3 1996/06/11 12:53:32 deraadt Exp $";
#endif
#endif /* not lint */
#include "rcv.h"
@ -55,9 +59,10 @@ static char rcsid[] = "$OpenBSD: cmd1.c,v 1.2 1996/03/27 19:32:30 niklas Exp $";
static int screen;
int
headers(msgvec)
int *msgvec;
headers(v)
void *v;
{
int *msgvec = v;
register int n, mesg, flag;
register struct message *mp;
int size;
@ -96,9 +101,10 @@ headers(msgvec)
* Scroll to the next/previous screen
*/
int
scroll(arg)
char arg[];
scroll(v)
void *v;
{
char *arg = v;
register int s, size;
int cur[1];
@ -150,9 +156,10 @@ screensize()
* in the passed message list.
*/
int
from(msgvec)
int *msgvec;
from(v)
void *v;
{
int *msgvec = v;
register int *ip;
for (ip = msgvec; *ip != NULL; ip++)
@ -214,7 +221,8 @@ printhead(mesg)
* Print out the value of dot.
*/
int
pdot()
pdot(v)
void *v;
{
printf("%d\n", dot - &message[0] + 1);
return(0);
@ -224,7 +232,8 @@ pdot()
* Print out all the possible commands.
*/
int
pcmdlist()
pcmdlist(v)
void *v;
{
extern const struct cmd cmdtab[];
register const struct cmd *cp;
@ -249,9 +258,10 @@ pcmdlist()
* Paginate messages, honor ignored fields.
*/
int
more(msgvec)
int *msgvec;
more(v)
void *v;
{
int *msgvec = v;
return (type1(msgvec, 1, 1));
}
@ -259,9 +269,10 @@ more(msgvec)
* Paginate messages, even printing ignored fields.
*/
int
More(msgvec)
int *msgvec;
More(v)
void *v;
{
int *msgvec = v;
return (type1(msgvec, 0, 1));
}
@ -270,9 +281,10 @@ More(msgvec)
* Type out messages, honor ignored fields.
*/
int
type(msgvec)
int *msgvec;
type(v)
void *v;
{
int *msgvec = v;
return(type1(msgvec, 1, 0));
}
@ -281,9 +293,10 @@ type(msgvec)
* Type out messages, even printing ignored fields.
*/
int
Type(msgvec)
int *msgvec;
Type(v)
void *v;
{
int *msgvec = v;
return(type1(msgvec, 0, 0));
}
@ -298,10 +311,15 @@ type1(msgvec, doign, page)
int doign, page;
{
register *ip;
register struct message *mp;
register char *cp;
struct message *mp;
char *cp;
int nlines;
FILE *obuf;
#if __GNUC__
/* Avoid longjmp clobbering */
(void) &cp;
(void) &obuf;
#endif
obuf = stdout;
if (setjmp(pipestop))
@ -362,9 +380,10 @@ brokpipe(signo)
* and defaults to 5.
*/
int
top(msgvec)
int *msgvec;
top(v)
void *v;
{
int *msgvec = v;
register int *ip;
register struct message *mp;
int c, topl, lines, lineb;
@ -404,9 +423,10 @@ top(msgvec)
* get mboxed.
*/
int
stouch(msgvec)
int msgvec[];
stouch(v)
void *v;
{
int *msgvec = v;
register int *ip;
for (ip = msgvec; *ip != 0; ip++) {
@ -421,9 +441,10 @@ stouch(msgvec)
* Make sure all passed messages get mboxed.
*/
int
mboxit(msgvec)
int msgvec[];
mboxit(v)
void *v;
{
int *msgvec = v;
register int *ip;
for (ip = msgvec; *ip != 0; ip++) {
@ -438,7 +459,8 @@ mboxit(msgvec)
* List the folders the user currently has.
*/
int
folders()
folders(v)
void *v;
{
char dirname[BUFSIZ];
char *cmd;

View File

@ -1,3 +1,6 @@
/* $OpenBSD: cmd2.c,v 1.2 1996/06/11 12:53:33 deraadt Exp $ */
/* $NetBSD: cmd2.c,v 1.5 1996/06/08 19:48:13 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -32,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)cmd2.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$Id: cmd2.c,v 1.1.1.1 1995/10/18 08:45:38 deraadt Exp $";
#if 0
static char sccsid[] = "@(#)cmd2.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: cmd2.c,v 1.2 1996/06/11 12:53:33 deraadt Exp $";
#endif
#endif /* not lint */
#include "rcv.h"
@ -45,6 +51,7 @@ static char rcsid[] = "$Id: cmd2.c,v 1.1.1.1 1995/10/18 08:45:38 deraadt Exp $";
*
* More user commands.
*/
static int igcomp __P((const void *, const void *));
/*
* If any arguments were given, go to the next applicable argument
@ -52,9 +59,10 @@ static char rcsid[] = "$Id: cmd2.c,v 1.1.1.1 1995/10/18 08:45:38 deraadt Exp $";
* If given as first command with no arguments, print first message.
*/
int
next(msgvec)
int *msgvec;
next(v)
void *v;
{
int *msgvec = v;
register struct message *mp;
register int *ip, *ip2;
int list[2], mdot;
@ -131,9 +139,10 @@ hitit:
* so we can discard when the user quits.
*/
int
save(str)
char str[];
save(v)
void *v;
{
char *str = v;
return save1(str, 1, "save", saveignore);
}
@ -142,9 +151,10 @@ save(str)
* Copy a message to a file without affected its saved-ness
*/
int
copycmd(str)
char str[];
copycmd(v)
void *v;
{
char *str = v;
return save1(str, 0, "copy", saveignore);
}
@ -215,9 +225,10 @@ save1(str, mark, cmd, ignore)
* file name, minus header and trailing blank line.
*/
int
swrite(str)
char str[];
swrite(v)
void *v;
{
char *str = v;
return save1(str, 1, "write", ignoreall);
}
@ -270,9 +281,10 @@ snarf(linebuf, flag)
* Delete messages.
*/
int
delete(msgvec)
int msgvec[];
delete(v)
void *v;
{
int *msgvec = v;
delm(msgvec);
return 0;
}
@ -281,9 +293,10 @@ delete(msgvec)
* Delete messages, then type the new dot.
*/
int
deltype(msgvec)
int msgvec[];
deltype(v)
void *v;
{
int *msgvec = v;
int list[2];
int lastdot;
@ -346,9 +359,10 @@ delm(msgvec)
* Undelete the indicated messages.
*/
int
undeletecmd(msgvec)
int *msgvec;
undeletecmd(v)
void *v;
{
int *msgvec = v;
register struct message *mp;
register *ip;
@ -365,7 +379,8 @@ undeletecmd(msgvec)
* Interactively dump core on "core"
*/
int
core()
core(v)
void *v;
{
int pid;
extern union wait wait_status;
@ -392,9 +407,10 @@ core()
* Clobber as many bytes of stack as the user requests.
*/
int
clobber(argv)
char **argv;
clobber(v)
void *v;
{
char **argv = v;
register int times;
if (argv[0] == 0)
@ -427,9 +443,10 @@ clob1(n)
* If no arguments, print the current list of retained fields.
*/
int
retfield(list)
char *list[];
retfield(v)
void *v;
{
char **list = v;
return ignore1(list, ignore + 1, "retained");
}
@ -439,25 +456,28 @@ retfield(list)
* If no arguments, print the current list of ignored fields.
*/
int
igfield(list)
char *list[];
igfield(v)
void *v;
{
char **list = v;
return ignore1(list, ignore, "ignored");
}
int
saveretfield(list)
char *list[];
saveretfield(v)
void *v;
{
char **list = v;
return ignore1(list, saveignore + 1, "retained");
}
int
saveigfield(list)
char *list[];
saveigfield(v)
void *v;
{
char **list = v;
return ignore1(list, saveignore, "ignored");
}
@ -502,7 +522,6 @@ igshow(tab, which)
register int h;
struct ignore *igp;
char **ap, **ring;
int igcomp();
if (tab->i_count == 0) {
printf("No fields currently being %s.\n", which);
@ -523,7 +542,7 @@ igshow(tab, which)
/*
* Compare two names for sorting ignored field list.
*/
int
static int
igcomp(l, r)
const void *l, *r;
{

View File

@ -1,3 +1,6 @@
/* $OpenBSD: cmd3.c,v 1.2 1996/06/11 12:53:34 deraadt Exp $ */
/* $NetBSD: cmd3.c,v 1.5 1996/06/08 19:48:14 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -32,8 +35,11 @@
*/
#ifndef lint
#if 0
static char sccsid[] = "@(#)cmd3.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$Id: cmd3.c,v 1.1.1.1 1995/10/18 08:45:38 deraadt Exp $";
#else
static char rcsid[] = "$OpenBSD: cmd3.c,v 1.2 1996/06/11 12:53:34 deraadt Exp $";
#endif
#endif /* not lint */
#include "rcv.h"
@ -44,15 +50,17 @@ static char rcsid[] = "$Id: cmd3.c,v 1.1.1.1 1995/10/18 08:45:38 deraadt Exp $";
*
* Still more user commands.
*/
static int diction __P((const void *, const void *));
/*
* Process a shell escape by saving signals, ignoring signals,
* and forking a sh -c
*/
int
shell(str)
char *str;
shell(v)
void *v;
{
char *str = v;
sig_t sigint = signal(SIGINT, SIG_IGN);
char *shell;
char cmd[BUFSIZ];
@ -73,8 +81,8 @@ shell(str)
*/
/*ARGSUSED*/
int
dosh(str)
char *str;
dosh(v)
void *v;
{
sig_t sigint = signal(SIGINT, SIG_IGN);
char *shell;
@ -147,7 +155,8 @@ overf:
*/
int
help()
help(v)
void *v;
{
register c;
register FILE *f;
@ -166,9 +175,10 @@ help()
* Change user's working directory.
*/
int
schdir(arglist)
char **arglist;
schdir(v)
void *v;
{
char **arglist = v;
char *cp;
if (*arglist == NOSTR)
@ -184,9 +194,10 @@ schdir(arglist)
}
int
respond(msgvec)
int *msgvec;
respond(v)
void *v;
{
int *msgvec = v;
if (value("Replyall") == NOSTR)
return (_respond(msgvec));
else
@ -284,9 +295,10 @@ reedit(subj)
* back to the system mailbox.
*/
int
preserve(msgvec)
int *msgvec;
preserve(v)
void *v;
{
int *msgvec = v;
register struct message *mp;
register int *ip, mesg;
@ -308,9 +320,10 @@ preserve(msgvec)
* Mark all given messages as unread.
*/
int
unread(msgvec)
int msgvec[];
unread(v)
void *v;
{
int *msgvec = v;
register int *ip;
for (ip = msgvec; *ip != NULL; ip++) {
@ -325,9 +338,10 @@ unread(msgvec)
* Print the size of each message.
*/
int
messize(msgvec)
int *msgvec;
messize(v)
void *v;
{
int *msgvec = v;
register struct message *mp;
register int *ip, mesg;
@ -344,12 +358,12 @@ messize(msgvec)
* by returning an error.
*/
int
rexit(e)
int e;
rexit(v)
void *v;
{
if (sourcing)
return(1);
exit(e);
exit(0);
/*NOTREACHED*/
}
@ -358,9 +372,10 @@ rexit(e)
* of csh.
*/
int
set(arglist)
char **arglist;
set(v)
void *v;
{
char **arglist = v;
register struct var *vp;
register char *cp, *cp2;
char varbuf[BUFSIZ], **ap, **p;
@ -405,9 +420,10 @@ set(arglist)
* Unset a bunch of variable values.
*/
int
unset(arglist)
char **arglist;
unset(v)
void *v;
{
char **arglist = v;
register struct var *vp, *vp2;
int errs, h;
char **ap;
@ -443,9 +459,10 @@ unset(arglist)
* Put add users to a group.
*/
int
group(argv)
char **argv;
group(v)
void *v;
{
char **argv = v;
register struct grouphead *gh;
register struct group *gp;
register int h;
@ -504,7 +521,6 @@ sort(list)
char **list;
{
register char **ap;
int diction();
for (ap = list; *ap != NOSTR; ap++)
;
@ -517,7 +533,7 @@ sort(list)
* Do a dictionary order comparison of the arguments from
* qsort.
*/
int
static int
diction(a, b)
const void *a, *b;
{
@ -530,8 +546,8 @@ diction(a, b)
/*ARGSUSED*/
int
null(e)
int e;
null(v)
void *v;
{
return 0;
}
@ -541,9 +557,10 @@ null(e)
* the current file.
*/
int
file(argv)
register char **argv;
file(v)
void *v;
{
char **argv = v;
if (argv[0] == NOSTR) {
newfileinfo();
@ -559,9 +576,10 @@ file(argv)
* Expand file names like echo
*/
int
echo(argv)
char **argv;
echo(v)
void *v;
{
char **argv = v;
register char **ap;
register char *cp;
@ -578,9 +596,10 @@ echo(argv)
}
int
Respond(msgvec)
int *msgvec;
Respond(v)
void *v;
{
int *msgvec = v;
if (value("Replyall") == NOSTR)
return (_Respond(msgvec));
else
@ -628,9 +647,10 @@ _Respond(msgvec)
* .mailrc and do some things if sending, others if receiving.
*/
int
ifcmd(argv)
char **argv;
ifcmd(v)
void *v;
{
char **argv = v;
register char *cp;
if (cond != CANY) {
@ -660,7 +680,8 @@ ifcmd(argv)
* flip over the conditional flag.
*/
int
elsecmd()
elsecmd(v)
void *v;
{
switch (cond) {
@ -688,7 +709,8 @@ elsecmd()
* End of if statement. Just set cond back to anything.
*/
int
endifcmd()
endifcmd(v)
void *v;
{
if (cond == CANY) {
@ -703,9 +725,10 @@ endifcmd()
* Set the list of alternate names.
*/
int
alternates(namelist)
char **namelist;
alternates(v)
void *v;
{
char **namelist = v;
register int c;
register char **ap, **ap2, *cp;

View File

@ -1,4 +1,5 @@
/* $OpenBSD: cmdtab.c,v 1.2 1996/03/27 19:32:31 niklas Exp $ */
/* $OpenBSD: cmdtab.c,v 1.3 1996/06/11 12:53:35 deraadt Exp $ */
/* $NetBSD: cmdtab.c,v 1.6 1996/06/08 19:48:15 christos Exp $ */
/*
* Copyright (c) 1980, 1993
@ -34,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)cmdtab.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$OpenBSD: cmdtab.c,v 1.2 1996/03/27 19:32:31 niklas Exp $";
#if 0
static char sccsid[] = "@(#)cmdtab.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: cmdtab.c,v 1.3 1996/06/11 12:53:35 deraadt Exp $";
#endif
#endif /* not lint */
#include "def.h"
@ -48,73 +52,73 @@ static char rcsid[] = "$OpenBSD: cmdtab.c,v 1.2 1996/03/27 19:32:31 niklas Exp $
*/
const struct cmd cmdtab[] = {
"next", next, NDMLIST, 0, MMNDEL,
"alias", group, M|RAWLIST, 0, 1000,
"print", type, MSGLIST, 0, MMNDEL,
"type", type, MSGLIST, 0, MMNDEL,
"Type", Type, MSGLIST, 0, MMNDEL,
"Print", Type, MSGLIST, 0, MMNDEL,
"visual", visual, I|MSGLIST, 0, MMNORM,
"top", top, MSGLIST, 0, MMNDEL,
"touch", stouch, W|MSGLIST, 0, MMNDEL,
"preserve", preserve, W|MSGLIST, 0, MMNDEL,
"delete", delete, W|P|MSGLIST, 0, MMNDEL,
"dp", deltype, W|MSGLIST, 0, MMNDEL,
"dt", deltype, W|MSGLIST, 0, MMNDEL,
"undelete", undeletecmd, P|MSGLIST, MDELETED,MMNDEL,
"unset", unset, M|RAWLIST, 1, 1000,
"mail", sendmail, R|M|I|STRLIST, 0, 0,
"mbox", mboxit, W|MSGLIST, 0, 0,
"more", more, MSGLIST, 0, MMNDEL,
"page", more, MSGLIST, 0, MMNDEL,
"More", More, MSGLIST, 0, MMNDEL,
"Page", More, MSGLIST, 0, MMNDEL,
"unread", unread, MSGLIST, 0, MMNDEL,
"!", shell, I|STRLIST, 0, 0,
"copy", copycmd, M|STRLIST, 0, 0,
"chdir", schdir, M|RAWLIST, 0, 1,
"cd", schdir, M|RAWLIST, 0, 1,
"save", save, STRLIST, 0, 0,
"source", source, M|RAWLIST, 1, 1,
"set", set, M|RAWLIST, 0, 1000,
"shell", dosh, I|NOLIST, 0, 0,
"version", pversion, M|NOLIST, 0, 0,
"group", group, M|RAWLIST, 0, 1000,
"write", swrite, STRLIST, 0, 0,
"from", from, MSGLIST, 0, MMNORM,
"file", file, T|M|RAWLIST, 0, 1,
"folder", file, T|M|RAWLIST, 0, 1,
"folders", folders, T|M|NOLIST, 0, 0,
"?", help, M|NOLIST, 0, 0,
"z", scroll, M|STRLIST, 0, 0,
"headers", headers, MSGLIST, 0, MMNDEL,
"help", help, M|NOLIST, 0, 0,
"=", pdot, NOLIST, 0, 0,
"Reply", Respond, R|I|MSGLIST, 0, MMNDEL,
"Respond", Respond, R|I|MSGLIST, 0, MMNDEL,
"reply", respond, R|I|MSGLIST, 0, MMNDEL,
"respond", respond, R|I|MSGLIST, 0, MMNDEL,
"edit", editor, I|MSGLIST, 0, MMNORM,
"echo", echo, M|RAWLIST, 0, 1000,
"quit", quitcmd, NOLIST, 0, 0,
"list", pcmdlist, M|NOLIST, 0, 0,
"xit", rexit, M|NOLIST, 0, 0,
"exit", rexit, M|NOLIST, 0, 0,
"size", messize, MSGLIST, 0, MMNDEL,
"hold", preserve, W|MSGLIST, 0, MMNDEL,
"if", ifcmd, F|M|RAWLIST, 1, 1,
"else", elsecmd, F|M|RAWLIST, 0, 0,
"endif", endifcmd, F|M|RAWLIST, 0, 0,
"alternates", alternates, M|RAWLIST, 0, 1000,
"ignore", igfield, M|RAWLIST, 0, 1000,
"discard", igfield, M|RAWLIST, 0, 1000,
"retain", retfield, M|RAWLIST, 0, 1000,
"saveignore", saveigfield, M|RAWLIST, 0, 1000,
"savediscard", saveigfield, M|RAWLIST, 0, 1000,
"saveretain", saveretfield, M|RAWLIST, 0, 1000,
/* "Header", Header, STRLIST, 0, 1000, */
"core", core, M|NOLIST, 0, 0,
"#", null, M|NOLIST, 0, 0,
"clobber", clobber, M|RAWLIST, 0, 1,
0, 0, 0, 0, 0
{ "next", next, NDMLIST, 0, MMNDEL },
{ "alias", group, M|RAWLIST, 0, 1000 },
{ "print", type, MSGLIST, 0, MMNDEL },
{ "type", type, MSGLIST, 0, MMNDEL },
{ "Type", Type, MSGLIST, 0, MMNDEL },
{ "Print", Type, MSGLIST, 0, MMNDEL },
{ "visual", visual, I|MSGLIST, 0, MMNORM },
{ "top", top, MSGLIST, 0, MMNDEL },
{ "touch", stouch, W|MSGLIST, 0, MMNDEL },
{ "preserve", preserve, W|MSGLIST, 0, MMNDEL },
{ "delete", delete, W|P|MSGLIST, 0, MMNDEL },
{ "dp", deltype, W|MSGLIST, 0, MMNDEL },
{ "dt", deltype, W|MSGLIST, 0, MMNDEL },
{ "undelete", undeletecmd, P|MSGLIST, MDELETED,MMNDEL },
{ "unset", unset, M|RAWLIST, 1, 1000 },
{ "mail", sendmail, R|M|I|STRLIST, 0, 0 },
{ "mbox", mboxit, W|MSGLIST, 0, 0 },
{ "more", more, MSGLIST, 0, MMNDEL },
{ "page", more, MSGLIST, 0, MMNDEL },
{ "More", More, MSGLIST, 0, MMNDEL },
{ "Page", More, MSGLIST, 0, MMNDEL },
{ "unread", unread, MSGLIST, 0, MMNDEL },
{ "!", shell, I|STRLIST, 0, 0 },
{ "copy", copycmd, M|STRLIST, 0, 0 },
{ "chdir", schdir, M|RAWLIST, 0, 1 },
{ "cd", schdir, M|RAWLIST, 0, 1 },
{ "save", save, STRLIST, 0, 0 },
{ "source", source, M|RAWLIST, 1, 1 },
{ "set", set, M|RAWLIST, 0, 1000 },
{ "shell", dosh, I|NOLIST, 0, 0 },
{ "version", pversion, M|NOLIST, 0, 0 },
{ "group", group, M|RAWLIST, 0, 1000 },
{ "write", swrite, STRLIST, 0, 0 },
{ "from", from, MSGLIST, 0, MMNORM },
{ "file", file, T|M|RAWLIST, 0, 1 },
{ "folder", file, T|M|RAWLIST, 0, 1 },
{ "folders", folders, T|M|NOLIST, 0, 0 },
{ "?", help, M|NOLIST, 0, 0 },
{ "z", scroll, M|STRLIST, 0, 0 },
{ "headers", headers, MSGLIST, 0, MMNDEL },
{ "help", help, M|NOLIST, 0, 0 },
{ "=", pdot, NOLIST, 0, 0 },
{ "Reply", Respond, R|I|MSGLIST, 0, MMNDEL },
{ "Respond", Respond, R|I|MSGLIST, 0, MMNDEL },
{ "reply", respond, R|I|MSGLIST, 0, MMNDEL },
{ "respond", respond, R|I|MSGLIST, 0, MMNDEL },
{ "edit", editor, I|MSGLIST, 0, MMNORM },
{ "echo", echo, M|RAWLIST, 0, 1000 },
{ "quit", quitcmd, NOLIST, 0, 0 },
{ "list", pcmdlist, M|NOLIST, 0, 0 },
{ "xit", rexit, M|NOLIST, 0, 0 },
{ "exit", rexit, M|NOLIST, 0, 0 },
{ "size", messize, MSGLIST, 0, MMNDEL },
{ "hold", preserve, W|MSGLIST, 0, MMNDEL },
{ "if", ifcmd, F|M|RAWLIST, 1, 1 },
{ "else", elsecmd, F|M|RAWLIST, 0, 0 },
{ "endif", endifcmd, F|M|RAWLIST, 0, 0 },
{ "alternates", alternates, M|RAWLIST, 0, 1000 },
{ "ignore", igfield, M|RAWLIST, 0, 1000 },
{ "discard", igfield, M|RAWLIST, 0, 1000 },
{ "retain", retfield, M|RAWLIST, 0, 1000 },
{ "saveignore", saveigfield, M|RAWLIST, 0, 1000 },
{ "savediscard",saveigfield, M|RAWLIST, 0, 1000 },
{ "saveretain", saveretfield, M|RAWLIST, 0, 1000 },
/* { "Header", Header, STRLIST, 0, 1000 }, */
{ "core", core, M|NOLIST, 0, 0 },
{ "#", null, M|NOLIST, 0, 0 },
{ "clobber", clobber, M|RAWLIST, 0, 1 },
{ 0, 0, 0, 0, 0 }
};

View File

@ -1,3 +1,6 @@
/* $OpenBSD: collect.c,v 1.2 1996/06/11 12:53:35 deraadt Exp $ */
/* $NetBSD: collect.c,v 1.6 1996/06/08 19:48:16 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -32,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)collect.c 8.2 (Berkeley) 4/19/94";
static char rcsid[] = "$Id: collect.c,v 1.1.1.1 1995/10/18 08:45:38 deraadt Exp $";
#if 0
static char sccsid[] = "@(#)collect.c 8.2 (Berkeley) 4/19/94";
#else
static char rcsid[] = "$OpenBSD: collect.c,v 1.2 1996/06/11 12:53:35 deraadt Exp $";
#endif
#endif /* not lint */
/*
@ -80,15 +86,23 @@ collect(hp, printheaders)
char linebuf[LINESIZE], *cp;
extern char *tempMail;
char getsub;
int omask;
void collint(), collhup(), collstop();
sigset_t oset, nset;
#if __GNUC__
/* Avoid longjmp clobbering */
(void) &escape;
(void) &eofcount;
(void) &getsub;
#endif
collf = NULL;
/*
* Start catching signals from here, but we're still die on interrupts
* until we're in the main loop.
*/
omask = sigblock(sigmask(SIGINT) | sigmask(SIGHUP));
sigemptyset(&nset);
sigaddset(&nset, SIGINT);
sigaddset(&nset, SIGHUP);
sigprocmask(SIG_BLOCK, &nset, &oset);
if ((saveint = signal(SIGINT, SIG_IGN)) != SIG_IGN)
signal(SIGINT, collint);
if ((savehup = signal(SIGHUP, SIG_IGN)) != SIG_IGN)
@ -100,7 +114,7 @@ collect(hp, printheaders)
rm(tempMail);
goto err;
}
sigsetmask(omask & ~(sigmask(SIGINT) | sigmask(SIGHUP)));
sigprocmask(SIG_SETMASK, &oset, NULL);
noreset++;
if ((collf = Fopen(tempMail, "w+")) == NULL) {
@ -191,7 +205,7 @@ cont:
/*
* Dump core.
*/
core();
core(NULL);
break;
case '!':
/*
@ -375,13 +389,16 @@ out:
if (collf != NULL)
rewind(collf);
noreset--;
sigblock(sigmask(SIGINT) | sigmask(SIGHUP));
sigemptyset(&nset);
sigaddset(&nset, SIGINT);
sigaddset(&nset, SIGHUP);
sigprocmask(SIG_BLOCK, &nset, &oset);
signal(SIGINT, saveint);
signal(SIGHUP, savehup);
signal(SIGTSTP, savetstp);
signal(SIGTTOU, savettou);
signal(SIGTTIN, savettin);
sigsetmask(omask);
sigprocmask(SIG_SETMASK, &oset, NULL);
return collf;
}
@ -561,10 +578,13 @@ collstop(s)
int s;
{
sig_t old_action = signal(s, SIG_DFL);
sigset_t nset;
sigsetmask(sigblock(0) & ~sigmask(s));
sigemptyset(&nset);
sigaddset(&nset, s);
sigprocmask(SIG_UNBLOCK, &nset, NULL);
kill(0, s);
sigblock(sigmask(s));
sigprocmask(SIG_BLOCK, &nset, NULL);
signal(s, old_action);
if (colljmp_p) {
colljmp_p = 0;

View File

@ -1,3 +1,5 @@
/* $OpenBSD: def.h,v 1.2 1996/06/11 12:53:36 deraadt Exp $ */
/* $NetBSD: def.h,v 1.8 1996/06/08 19:48:18 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -30,8 +32,8 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* from: @(#)def.h 8.2 (Berkeley) 3/21/94
* $Id: def.h,v 1.1.1.1 1995/10/18 08:45:38 deraadt Exp $
* @(#)def.h 8.2 (Berkeley) 3/21/94
* $NetBSD: def.h,v 1.8 1996/06/08 19:48:18 christos Exp $
*/
/*
@ -105,7 +107,7 @@ struct message {
*/
struct cmd {
char *c_name; /* Name of command */
int (*c_func)(); /* Implementor of the command */
int (*c_func) __P((void *));/* Implementor of the command */
short c_argtype; /* Type of arglist (see below) */
short c_msgflag; /* Required flags of messages */
short c_msgmask; /* Relevant flags of messages */

198
usr.bin/mail/dotlock.c Normal file
View File

@ -0,0 +1,198 @@
/* $OpenBSD: dotlock.c,v 1.1 1996/06/11 12:53:37 deraadt Exp $ */
/* $NetBSD: dotlock.c,v 1.1 1996/06/08 19:48:19 christos Exp $ */
/*
* Copyright (c) 1996 Christos Zoulas. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Christos Zoulas.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef lint
static char rcsid[] = "$OpenBSD: dotlock.c,v 1.1 1996/06/11 12:53:37 deraadt Exp $";
#endif
#include <sys/types.h>
#include <sys/param.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <signal.h>
#include "extern.h"
#ifndef O_SYNC
#define O_SYNC 0
#endif
static int create_exclusive __P((const char *));
/*
* Create a unique file. O_EXCL does not really work over NFS so we follow
* the following trick: [Inspired by S.R. van den Berg]
*
* - make a mostly unique filename and try to create it.
* - link the unique filename to our target
* - get the link count of the target
* - unlink the mostly unique filename
* - if the link count was 2, then we are ok; else we've failed.
*/
static int
create_exclusive(fname)
const char *fname;
{
char path[MAXPATHLEN], hostname[MAXHOSTNAMELEN];
const char *ptr;
struct timeval tv;
pid_t pid;
size_t ntries, cookie;
int fd, serrno;
struct stat st;
(void) gettimeofday(&tv, NULL);
(void) gethostname(hostname, MAXHOSTNAMELEN);
pid = getpid();
cookie = pid ^ tv.tv_usec;
/*
* We generate a semi-unique filename, from hostname.(pid ^ usec)
*/
if ((ptr = strrchr(fname, '/')) == NULL)
ptr = fname;
else
ptr++;
(void) snprintf(path, sizeof(path), "%.*s.%s.%x",
ptr - fname, fname, hostname, cookie);
/*
* We try to create the unique filename.
*/
for (ntries = 0; ntries < 5; ntries++) {
fd = open(path, O_WRONLY|O_CREAT|O_TRUNC|O_EXCL|O_SYNC, 0);
if (fd != -1) {
(void) close(fd);
break;
}
else if (errno == EEXIST)
continue;
else
return -1;
}
/*
* We link the path to the name
*/
if (link(path, fname) == -1)
goto bad;
/*
* Note that we stat our own exclusively created name, not the
* destination, since the destination can be affected by others.
*/
if (stat(path, &st) == -1)
goto bad;
(void) unlink(path);
/*
* If the number of links was two (one for the unique file and one
* for the lock), we've won the race
*/
if (st.st_nlink != 2) {
errno = EEXIST;
return -1;
}
return 0;
bad:
serrno = errno;
(void) unlink(path);
errno = serrno;
return -1;
}
int
dot_lock(fname, pollinterval, fp, msg)
const char *fname; /* Pathname to lock */
int pollinterval; /* Interval to check for lock, -1 return */
FILE *fp; /* File to print message */
const char *msg; /* Message to print */
{
char path[MAXPATHLEN];
sigset_t nset, oset;
sigemptyset(&nset);
sigaddset(&nset, SIGHUP);
sigaddset(&nset, SIGINT);
sigaddset(&nset, SIGQUIT);
sigaddset(&nset, SIGTERM);
sigaddset(&nset, SIGTTIN);
sigaddset(&nset, SIGTTOU);
sigaddset(&nset, SIGTSTP);
sigaddset(&nset, SIGCHLD);
(void) snprintf(path, sizeof(path), "%s.lock", fname);
for (;;) {
(void) sigprocmask(SIG_BLOCK, &nset, &oset);
if (create_exclusive(path) != -1) {
(void) sigprocmask(SIG_SETMASK, &oset, NULL);
return 0;
}
else
(void) sigprocmask(SIG_SETMASK, &oset, NULL);
if (errno != EEXIST)
return -1;
if (fp && msg)
(void) fputs(msg, fp);
if (pollinterval) {
if (pollinterval == -1) {
errno = EEXIST;
return -1;
}
sleep(pollinterval);
}
}
}
void
dot_unlock(fname)
const char *fname;
{
char path[MAXPATHLEN];
(void) snprintf(path, sizeof(path), "%s.lock", fname);
(void) unlink(path);
}

View File

@ -1,3 +1,6 @@
/* $OpenBSD: edit.c,v 1.2 1996/06/11 12:53:38 deraadt Exp $ */
/* $NetBSD: edit.c,v 1.5 1996/06/08 19:48:20 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -32,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)edit.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$Id: edit.c,v 1.1.1.1 1995/10/18 08:45:38 deraadt Exp $";
#if 0
static char sccsid[] = "@(#)edit.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: edit.c,v 1.2 1996/06/11 12:53:38 deraadt Exp $";
#endif
#endif /* not lint */
#include "rcv.h"
@ -50,9 +56,10 @@ static char rcsid[] = "$Id: edit.c,v 1.1.1.1 1995/10/18 08:45:38 deraadt Exp $";
* Edit a message list.
*/
int
editor(msgvec)
int *msgvec;
editor(v)
void *v;
{
int *msgvec = v;
return edit1(msgvec, 'e');
}
@ -61,9 +68,10 @@ editor(msgvec)
* Invoke the visual editor on a message list.
*/
int
visual(msgvec)
int *msgvec;
visual(v)
void *v;
{
int *msgvec = v;
return edit1(msgvec, 'v');
}

View File

@ -1,4 +1,5 @@
/* $OpenBSD: extern.h,v 1.2 1996/03/27 19:32:32 niklas Exp $ */
/* $OpenBSD: extern.h,v 1.3 1996/06/11 12:53:39 deraadt Exp $ */
/* $NetBSD: extern.h,v 1.4 1996/06/08 19:48:21 christos Exp $ */
/*-
* Copyright (c) 1992, 1993
@ -33,14 +34,18 @@
* SUCH DAMAGE.
*
* @(#)extern.h 8.1 (Berkeley) 6/6/93
* $NetBSD: extern.h,v 1.4 1996/06/08 19:48:21 christos Exp $
*/
struct name;
struct name *cat __P((struct name *, struct name *));
struct name *delname __P((struct name *, char []));
struct name *elide __P((struct name *));
struct name *extract __P((char [], int));
struct grouphead;
struct name *gexpand __P((struct name *, struct grouphead *, int, int));
struct name *nalloc __P((char [], int));
struct header;
struct name *outof __P((struct name *, FILE *, struct header *));
struct name *put __P((struct name *, struct name *));
struct name *tailof __P((struct name *));
@ -55,6 +60,7 @@ char *detract __P((struct name *, int));
char *expand __P((char *));
char *getdeadletter __P((void));
char *getname __P((int));
struct message;
char *hfield __P((char [], struct message *));
FILE *infix __P((struct header *, FILE *));
char *ishfield __P((char [], char[], char *));
@ -75,14 +81,14 @@ char *value __P((char []));
char *vcopy __P((char []));
char *yankword __P((char *, char []));
int Fclose __P((FILE *));
int More __P((int *));
int More __P((void *));
int Pclose __P((FILE *));
int Respond __P((int *));
int Type __P((int *));
int Respond __P((void *));
int Type __P((void *));
int _Respond __P((int []));
int _respond __P((int *));
void alter __P((char *));
int alternates __P((char **));
int alternates __P((void *));
void announce __P((void));
int anyof __P((char *, char *));
int append __P((struct message *, FILE *));
@ -94,43 +100,44 @@ void brokpipe __P((int));
int charcount __P((char *, int));
int check __P((int, int));
void clob1 __P((int));
int clobber __P((char **));
int clobber __P((void *));
void close_all_files __P((void));
int cmatch __P((char *, char *));
void collhup __P((int));
void collint __P((int));
void collstop __P((int));
void commands __P((void));
int copycmd __P((char []));
int core __P((void));
int copycmd __P((void *));
int core __P((void *));
int count __P((struct name *));
int delete __P((int []));
int delete __P((void *));
int delm __P((int []));
int deltype __P((int []));
int deltype __P((void *));
void demail __P((void));
int diction __P((const void *, const void *));
int dosh __P((char *));
int echo __P((char **));
int dosh __P((void *));
int dot_lock __P((const char *, int, FILE *, const char *));
void dot_unlock __P((const char *));
int echo __P((void *));
int edit1 __P((int *, int));
int editor __P((int *));
int editor __P((void *));
void edstop __P((void));
int elsecmd __P((void));
int endifcmd __P((void));
int elsecmd __P((void *));
int endifcmd __P((void *));
int evalcol __P((int));
int execute __P((char [], int));
int exwrite __P((char [], FILE *, int));
void fail __P((char [], char []));
int file __P((char **));
int file __P((void *));
struct grouphead *
findgroup __P((char []));
void findmail __P((char *, char *));
int first __P((int, int));
void fixhead __P((struct header *, struct name *));
void fmt __P((char *, struct name *, FILE *, int));
int folders __P((void));
int folders __P((void *));
int forward __P((char [], FILE *, int));
void free_child __P((int));
int from __P((int *));
int from __P((void *));
off_t fsize __P((FILE *));
int getfold __P((char *));
int gethfield __P((FILE *, char [], int, char **));
@ -138,16 +145,16 @@ int getmsglist __P((char *, int *, int));
int getrawlist __P((char [], char **, int));
int getuserid __P((char []));
int grabh __P((struct header *, int));
int group __P((char **));
int group __P((void *));
void hangup __P((int));
int hash __P((char *));
void hdrstop __P((int));
int headers __P((int *));
int help __P((void));
int headers __P((void *));
int help __P((void *));
void holdsigs __P((void));
int ifcmd __P((char **));
int igcomp __P((const void *, const void *));
int igfield __P((char *[]));
int ifcmd __P((void *));
int igfield __P((void *));
struct ignoretab;
int ignore1 __P((char *[], struct ignoretab *, char *));
int igshow __P((struct ignoretab *, char *));
void intr __P((int));
@ -171,85 +178,87 @@ void mark __P((int));
int markall __P((char [], int));
int matchsender __P((char *, int));
int matchsubj __P((char *, int));
int mboxit __P((int []));
int mboxit __P((void *));
int member __P((char *, struct ignoretab *));
void mesedit __P((FILE *, int));
void mespipe __P((FILE *, char []));
int messize __P((int *));
int messize __P((void *));
int metamess __P((int, int));
int more __P((int *));
int more __P((void *));
int newfileinfo __P((void));
int next __P((int *));
int null __P((int));
void panic __P((const char *, ...));
int next __P((void *));
int null __P((void *));
void panic __P((const char *, ...))
__attribute__((__format__(__printf__,1,2),__noreturn__));
struct headline;
void parse __P((char [], struct headline *, char []));
int pcmdlist __P((void));
int pdot __P((void));
void prepare_child __P((int, int, int));
int preserve __P((int *));
int pcmdlist __P((void *));
int pdot __P((void *));
void prepare_child __P((sigset_t *, int, int));
int preserve __P((void *));
void prettyprint __P((struct name *));
void printgroup __P((char []));
void printhead __P((int));
int puthead __P((struct header *, FILE *, int));
int putline __P((FILE *, char *));
int pversion __P((int));
int pversion __P((void *));
void quit __P((void));
int quitcmd __P((void));
int quitcmd __P((void *));
int raise __P((int));
int readline __P((FILE *, char *, int));
void register_file __P((FILE *, int, int));
void regret __P((int));
void relsesigs __P((void));
int respond __P((int *));
int retfield __P((char *[]));
int rexit __P((int));
int respond __P((void *));
int retfield __P((void *));
int rexit __P((void *));
int rm __P((char *));
int run_command __P((char *, int, int, int, char *, char *, char *));
int save __P((char []));
int run_command __P((char *, sigset_t *, int, int, char *, char *, char *));
int save __P((void *));
int save1 __P((char [], int, char *, struct ignoretab *));
void savedeadletter __P((FILE *));
int saveigfield __P((char *[]));
int saveigfield __P((void *));
int savemail __P((char [], FILE *));
int saveretfield __P((char *[]));
int saveretfield __P((void *));
int scan __P((char **));
void scaninit __P((void));
int schdir __P((char **));
int schdir __P((void *));
int screensize __P((void));
int scroll __P((char []));
int scroll __P((void *));
int send __P((struct message *, FILE *, struct ignoretab *, char *));
int sendmail __P((char *));
int set __P((char **));
int sendmail __P((void *));
int set __P((void *));
int setfile __P((char *));
void setmsize __P((int));
void setptr __P((FILE *));
void setscreensize __P((void));
int shell __P((char *));
int shell __P((void *));
void sigchild __P((int));
void sort __P((char **));
int source __P((char **));
int source __P((void *));
void spreserve __P((void));
void sreset __P((void));
int start_command __P((char *, int, int, int, char *, char *, char *));
int start_command __P((char *, sigset_t *, int, int, char *, char *, char *));
void statusput __P((struct message *, FILE *, char *));
void stop __P((int));
int stouch __P((int []));
int swrite __P((char []));
int stouch __P((void *));
int swrite __P((void *));
void tinit __P((void));
int top __P((int *));
int top __P((void *));
void touch __P((struct message *));
void ttyint __P((int));
void ttystop __P((int));
int type __P((int *));
int type __P((void *));
int type1 __P((int *, int, int));
int undeletecmd __P((int *));
int undeletecmd __P((void *));
void unmark __P((int));
char **unpack __P((struct name *));
int unread __P((int []));
int unread __P((void *));
void unregister_file __P((FILE *));
int unset __P((char **));
int unset __P((void *));
int unstack __P((void));
void vfree __P((char *));
int visual __P((int *));
int visual __P((void *));
int wait_child __P((int));
int wait_command __P((int));
int writeback __P((FILE *));

View File

@ -1,3 +1,6 @@
/* $OpenBSD: fio.c,v 1.2 1996/06/11 12:53:39 deraadt Exp $ */
/* $NetBSD: fio.c,v 1.5 1996/06/08 19:48:22 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -32,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)fio.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$Id: fio.c,v 1.1.1.1 1995/10/18 08:45:38 deraadt Exp $";
#if 0
static char sccsid[] = "@(#)fio.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: fio.c,v 1.2 1996/06/11 12:53:39 deraadt Exp $";
#endif
#endif /* not lint */
#include "rcv.h"
@ -122,7 +128,7 @@ setptr(ibuf)
;
if (cp[-1] != ':')
break;
while (c = *cp++)
while ((c = *cp++) != '\0')
if (c == 'R')
this.m_flag |= MREAD;
else if (c == 'O')
@ -256,7 +262,7 @@ rm(name)
}
static int sigdepth; /* depth of holdsigs() */
static int omask;
static sigset_t nset, oset;
/*
* Hold signals SIGHUP, SIGINT, and SIGQUIT.
*/
@ -264,8 +270,13 @@ void
holdsigs()
{
if (sigdepth++ == 0)
omask = sigblock(sigmask(SIGHUP)|sigmask(SIGINT)|sigmask(SIGQUIT));
if (sigdepth++ == 0) {
sigemptyset(&nset);
sigaddset(&nset, SIGHUP);
sigaddset(&nset, SIGINT);
sigaddset(&nset, SIGQUIT);
sigprocmask(SIG_BLOCK, &nset, &oset);
}
}
/*
@ -276,7 +287,7 @@ relsesigs()
{
if (--sigdepth == 0)
sigsetmask(omask);
sigprocmask(SIG_SETMASK, &oset, NULL);
}
/*

View File

@ -1,3 +1,6 @@
/* $OpenBSD: getname.c,v 1.2 1996/06/11 12:53:40 deraadt Exp $ */
/* $NetBSD: getname.c,v 1.4 1996/06/08 19:48:23 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -32,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)getname.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$Id: getname.c,v 1.1.1.1 1995/10/18 08:45:38 deraadt Exp $";
#if 0
static char sccsid[] = "@(#)getname.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: getname.c,v 1.2 1996/06/11 12:53:40 deraadt Exp $";
#endif
#endif /* not lint */
#include "rcv.h"
@ -43,8 +49,7 @@ static char rcsid[] = "$Id: getname.c,v 1.1.1.1 1995/10/18 08:45:38 deraadt Exp
/* Getname / getuserid for those with hashed passwd data base). */
/*
* Search the passwd file for a uid. Return name through ref parameter
* if found, indicating success with 0 return. Return -1 on error.
* Search the passwd file for a uid. Return name on success, NOSTR on failure
*/
char *
getname(uid)

View File

@ -1,3 +1,6 @@
/* $OpenBSD: glob.h,v 1.2 1996/06/11 12:53:41 deraadt Exp $ */
/* $NetBSD: glob.h,v 1.4 1996/06/08 19:48:25 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -31,7 +34,7 @@
* SUCH DAMAGE.
*
* from: @(#)glob.h 8.1 (Berkeley) 6/6/93
* $Id: glob.h,v 1.1.1.1 1995/10/18 08:45:38 deraadt Exp $
* $NetBSD: glob.h,v 1.4 1996/06/08 19:48:25 christos Exp $
*/
/*

View File

@ -1,3 +1,6 @@
/* $OpenBSD: head.c,v 1.2 1996/06/11 12:53:42 deraadt Exp $ */
/* $NetBSD: head.c,v 1.5 1996/06/08 19:48:26 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -32,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)head.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$Id: head.c,v 1.1.1.1 1995/10/18 08:45:39 deraadt Exp $";
#if 0
static char sccsid[] = "@(#)head.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: head.c,v 1.2 1996/06/11 12:53:42 deraadt Exp $";
#endif
#endif /* not lint */
#include "rcv.h"
@ -140,7 +146,7 @@ copyin(src, space)
char *top;
top = cp = *space;
while (*cp++ = *src++)
while ((*cp++ = *src++) != '\0')
;
*space = cp;
return (top);

View File

@ -1,4 +1,5 @@
/* $OpenBSD: lex.c,v 1.2 1996/03/27 19:32:33 niklas Exp $ */
/* $OpenBSD: lex.c,v 1.3 1996/06/11 12:53:42 deraadt Exp $ */
/* $NetBSD: lex.c,v 1.7 1996/06/08 19:48:28 christos Exp $ */
/*
* Copyright (c) 1980, 1993
@ -34,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)lex.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$OpenBSD: lex.c,v 1.2 1996/03/27 19:32:33 niklas Exp $";
#if 0
static char sccsid[] = "@(#)lex.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: lex.c,v 1.3 1996/06/11 12:53:42 deraadt Exp $";
#endif
#endif /* not lint */
#include "rcv.h"
@ -171,7 +175,10 @@ commands()
int eofloop = 0;
register int n;
char linebuf[LINESIZE];
void intr(), stop(), hangup();
#if __GNUC__
/* Avoid longjmp clobbering */
(void) &eofloop;
#endif
if (!sourcing) {
if (signal(SIGINT, SIG_IGN) != SIG_IGN)
@ -249,7 +256,7 @@ execute(linebuf, contxt)
{
char word[LINESIZE];
char *arglist[MAXARGC];
const struct cmd *com;
const struct cmd *com = NULL;
register char *cp, *cp2;
register int c;
int muvec[2];
@ -301,7 +308,7 @@ execute(linebuf, contxt)
*/
if ((com->c_argtype & F) == 0)
if (cond == CRCV && !rcvmode || cond == CSEND && rcvmode)
if ((cond == CRCV && !rcvmode) || (cond == CSEND && rcvmode))
return(0);
/*
@ -424,6 +431,8 @@ out:
unstack();
return 0;
}
if (com == NULL)
return(0);
if (value("autoprint") != NOSTR && com->c_argtype & P)
if ((dot->m_flag & MDELETED) == 0) {
muvec[0] = dot - &message[0] + 1;
@ -526,10 +535,13 @@ stop(s)
int s;
{
sig_t old_action = signal(s, SIG_DFL);
sigset_t nset;
sigsetmask(sigblock(0) & ~sigmask(s));
sigemptyset(&nset);
sigaddset(&nset, s);
sigprocmask(SIG_UNBLOCK, &nset, NULL);
kill(0, s);
sigblock(sigmask(s));
sigprocmask(SIG_BLOCK, &nset, NULL);
signal(s, old_action);
if (reset_on_stop) {
reset_on_stop = 0;
@ -636,8 +648,8 @@ newfileinfo()
/*ARGSUSED*/
int
pversion(e)
int e;
pversion(v)
void *v;
{
extern char *version;

View File

@ -1,3 +1,6 @@
/* $OpenBSD: list.c,v 1.2 1996/06/11 12:53:43 deraadt Exp $ */
/* $NetBSD: list.c,v 1.4 1996/06/08 19:48:30 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -32,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)list.c 8.2 (Berkeley) 4/19/94";
static char rcsid[] = "$Id: list.c,v 1.1.1.1 1995/10/18 08:45:39 deraadt Exp $";
#if 0
static char sccsid[] = "@(#)list.c 8.2 (Berkeley) 4/19/94";
#else
static char rcsid[] = "$OpenBSD: list.c,v 1.2 1996/06/11 12:53:43 deraadt Exp $";
#endif
#endif /* not lint */
#include "rcv.h"
@ -101,12 +107,12 @@ struct coltab {
int co_mask; /* m_status bits to mask */
int co_equal; /* ... must equal this */
} coltab[] = {
'n', CMNEW, MNEW, MNEW,
'o', CMOLD, MNEW, 0,
'u', CMUNREAD, MREAD, 0,
'd', CMDELETED, MDELETED, MDELETED,
'r', CMREAD, MREAD, MREAD,
0, 0, 0, 0
{ 'n', CMNEW, MNEW, MNEW },
{ 'o', CMOLD, MNEW, 0 },
{ 'u', CMUNREAD, MREAD, 0 },
{ 'd', CMDELETED, MDELETED, MDELETED },
{ 'r', CMREAD, MREAD, MREAD },
{ 0, 0, 0, 0 }
};
static int lastcolmod;
@ -454,8 +460,8 @@ getrawlist(line, argv, argc)
if (c == '?')
*cp2++ = '\177';
/* null doesn't show up anyway */
else if (c >= 'A' && c <= '_' ||
c >= 'a' && c <= 'z')
else if ((c >= 'A' && c <= '_') ||
(c >= 'a' && c <= 'z'))
*cp2++ = c & 037;
else {
*cp2++ = '^';
@ -488,15 +494,15 @@ struct lex {
char l_char;
char l_token;
} singles[] = {
'$', TDOLLAR,
'.', TDOT,
'^', TUP,
'*', TSTAR,
'-', TDASH,
'+', TPLUS,
'(', TOPEN,
')', TCLOSE,
0, 0
{ '$', TDOLLAR },
{ '.', TDOT },
{ '^', TUP },
{ '*', TSTAR },
{ '-', TDASH },
{ '+', TPLUS },
{ '(', TOPEN },
{ ')', TCLOSE },
{ 0, 0 }
};
int

View File

@ -1,3 +1,4 @@
.\" $OpenBSD: mail.1,v 1.2 1996/06/11 12:53:44 deraadt Exp $
.\" Copyright (c) 1980, 1990, 1993
.\" The Regents of the University of California. All rights reserved.
.\"
@ -30,7 +31,6 @@
.\" SUCH DAMAGE.
.\"
.\" from: @(#)mail.1 8.2 (Berkeley) 12/30/93
.\" $Id: mail.1,v 1.1.1.1 1995/10/18 08:45:39 deraadt Exp $
.\"
.Dd December 30, 1993
.Dt MAIL 1

View File

@ -1,3 +1,6 @@
/* $OpenBSD: main.c,v 1.2 1996/06/11 12:53:45 deraadt Exp $ */
/* $NetBSD: main.c,v 1.5 1996/06/08 19:48:31 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -38,12 +41,16 @@ static char copyright[] =
#endif /* not lint */
#ifndef lint
static char sccsid[] = "from: @(#)main.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$Id: main.c,v 1.1.1.1 1995/10/18 08:45:39 deraadt Exp $";
#if 0
static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: main.c,v 1.2 1996/06/11 12:53:45 deraadt Exp $";
#endif
#endif /* not lint */
#include "rcv.h"
#include <fcntl.h>
#include <sys/ioctl.h>
#include "extern.h"
/*
@ -64,9 +71,7 @@ main(argc, argv)
char *subject;
char *ef;
char nosrc = 0;
void hdrstop();
sig_t prevint;
void sigchild();
/*
* Set up a reasonable environment.

View File

@ -1,3 +1,6 @@
/* $OpenBSD: names.c,v 1.2 1996/06/11 12:53:45 deraadt Exp $ */
/* $NetBSD: names.c,v 1.5 1996/06/08 19:48:32 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -32,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)names.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$Id: names.c,v 1.1.1.1 1995/10/18 08:45:39 deraadt Exp $";
#if 0
static char sccsid[] = "@(#)names.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: names.c,v 1.2 1996/06/11 12:53:45 deraadt Exp $";
#endif
#endif /* not lint */
/*
@ -220,8 +226,8 @@ outof(names, fo, hp)
{
register int c;
register struct name *np, *top;
time_t now, time();
char *date, *fname, *ctime();
time_t now;
char *date, *fname;
FILE *fout, *fin;
int ispipe;
extern char *tempEdit;
@ -282,6 +288,7 @@ outof(names, fo, hp)
if (ispipe) {
int pid;
char *shell;
sigset_t nset;
/*
* XXX
@ -292,8 +299,11 @@ outof(names, fo, hp)
*/
if ((shell = value("SHELL")) == NOSTR)
shell = _PATH_CSHELL;
pid = start_command(shell, sigmask(SIGHUP)|
sigmask(SIGINT)|sigmask(SIGQUIT),
sigemptyset(&nset);
sigaddset(&nset, SIGHUP);
sigaddset(&nset, SIGINT);
sigaddset(&nset, SIGQUIT);
pid = start_command(shell, &nset,
image, -1, "-c", fname, NOSTR);
if (pid < 0) {
senderr++;

View File

@ -1,3 +1,6 @@
/* $OpenBSD: pathnames.h,v 1.2 1996/06/11 12:53:46 deraadt Exp $ */
/* $NetBSD: pathnames.h,v 1.4 1996/06/08 19:48:34 christos Exp $ */
/*
* Copyright (c) 1989, 1993
* The Regents of the University of California. All rights reserved.
@ -30,8 +33,8 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* from: @(#)pathnames.h 8.1 (Berkeley) 6/6/93
* $Id: pathnames.h,v 1.1.1.1 1995/10/18 08:45:39 deraadt Exp $
* @(#)pathnames.h 8.1 (Berkeley) 6/6/93
* $NetBSD: pathnames.h,v 1.4 1996/06/08 19:48:34 christos Exp $
*/
#include <paths.h>

View File

@ -1,3 +1,6 @@
/* $OpenBSD: popen.c,v 1.2 1996/06/11 12:53:47 deraadt Exp $ */
/* $NetBSD: popen.c,v 1.4 1996/06/08 19:48:35 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -32,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)popen.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$Id: popen.c,v 1.1.1.1 1995/10/18 08:45:39 deraadt Exp $";
#if 0
static char sccsid[] = "@(#)popen.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: popen.c,v 1.2 1996/06/11 12:53:47 deraadt Exp $";
#endif
#endif /* not lint */
#include "rcv.h"
@ -62,6 +68,7 @@ struct child {
static struct child *child;
static struct child *findchild __P((int));
static void delchild __P((struct child *));
static int file_pid __P((FILE *));
FILE *
Fopen(file, mode)
@ -106,6 +113,7 @@ Popen(cmd, mode)
int p[2];
int myside, hisside, fd0, fd1;
int pid;
sigset_t nset;
FILE *fp;
if (pipe(p) < 0)
@ -121,7 +129,8 @@ Popen(cmd, mode)
hisside = fd0 = p[READ];
fd1 = -1;
}
if ((pid = start_command(cmd, 0, fd0, fd1, NOSTR, NOSTR, NOSTR)) < 0) {
sigemptyset(&nset);
if ((pid = start_command(cmd, &nset, fd0, fd1, NOSTR, NOSTR, NOSTR)) < 0) {
close(p[READ]);
close(p[WRITE]);
return NULL;
@ -137,14 +146,17 @@ Pclose(ptr)
FILE *ptr;
{
int i;
int omask;
sigset_t nset, oset;
i = file_pid(ptr);
unregister_file(ptr);
(void) fclose(ptr);
omask = sigblock(sigmask(SIGINT)|sigmask(SIGHUP));
sigemptyset(&nset);
sigaddset(&nset, SIGINT);
sigaddset(&nset, SIGHUP);
sigprocmask(SIG_BLOCK, &nset, &oset);
i = wait_child(i);
sigsetmask(omask);
sigprocmask(SIG_SETMASK, &oset, NULL);
return i;
}
@ -181,7 +193,7 @@ unregister_file(fp)
{
struct fp **pp, *p;
for (pp = &fp_head; p = *pp; pp = &p->link)
for (pp = &fp_head; (p = *pp) != NULL; pp = &p->link)
if (p->fp == fp) {
*pp = p->link;
free((char *) p);
@ -190,6 +202,7 @@ unregister_file(fp)
panic("Invalid file pointer");
}
static int
file_pid(fp)
FILE *fp;
{
@ -213,7 +226,8 @@ file_pid(fp)
int
run_command(cmd, mask, infd, outfd, a0, a1, a2)
char *cmd;
int mask, infd, outfd;
sigset_t *mask;
int infd, outfd;
char *a0, *a1, *a2;
{
int pid;
@ -227,7 +241,8 @@ run_command(cmd, mask, infd, outfd, a0, a1, a2)
int
start_command(cmd, mask, infd, outfd, a0, a1, a2)
char *cmd;
int mask, infd, outfd;
sigset_t *mask;
int infd, outfd;
char *a0, *a1, *a2;
{
int pid;
@ -253,10 +268,12 @@ start_command(cmd, mask, infd, outfd, a0, a1, a2)
}
void
prepare_child(mask, infd, outfd)
int mask, infd, outfd;
prepare_child(nset, infd, outfd)
sigset_t *nset;
int infd, outfd;
{
int i;
sigset_t fset;
/*
* All file descriptors other than 0, 1, and 2 are supposed to be
@ -267,11 +284,12 @@ prepare_child(mask, infd, outfd)
if (outfd >= 0)
dup2(outfd, 1);
for (i = 1; i <= NSIG; i++)
if (mask & sigmask(i))
if (sigismember(nset, i))
(void) signal(i, SIG_IGN);
if ((mask & sigmask(SIGINT)) == 0)
if (!sigismember(nset, SIGINT))
(void) signal(SIGINT, SIG_DFL);
(void) sigsetmask(0);
sigfillset(&fset);
(void) sigprocmask(SIG_UNBLOCK, &fset, NULL);
}
int
@ -345,14 +363,17 @@ int
wait_child(pid)
int pid;
{
int mask = sigblock(sigmask(SIGCHLD));
sigset_t nset, oset;
register struct child *cp = findchild(pid);
sigemptyset(&nset);
sigaddset(&nset, SIGCHLD);
sigprocmask(SIG_BLOCK, &nset, &oset);
while (!cp->done)
sigpause(mask);
sigsuspend(&oset);
wait_status = cp->status;
delchild(cp);
sigsetmask(mask);
sigprocmask(SIG_SETMASK, &oset, NULL);
return wait_status.w_status ? -1 : 0;
}
@ -363,12 +384,15 @@ void
free_child(pid)
int pid;
{
int mask = sigblock(sigmask(SIGCHLD));
sigset_t nset, oset;
register struct child *cp = findchild(pid);
sigemptyset(&nset);
sigaddset(&nset, SIGCHLD);
sigprocmask(SIG_BLOCK, &nset, &oset);
if (cp->done)
delchild(cp);
else
cp->free = 1;
sigsetmask(mask);
sigprocmask(SIG_SETMASK, &oset, NULL);
}

View File

@ -1,3 +1,6 @@
/* $OpenBSD: quit.c,v 1.2 1996/06/11 12:53:48 deraadt Exp $ */
/* $NetBSD: quit.c,v 1.5 1996/06/08 19:48:37 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -32,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)quit.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$Id: quit.c,v 1.1.1.1 1995/10/18 08:45:39 deraadt Exp $";
#if 0
static char sccsid[] = "@(#)quit.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: quit.c,v 1.2 1996/06/11 12:53:48 deraadt Exp $";
#endif
#endif /* not lint */
#include "rcv.h"
@ -50,7 +56,8 @@ static char rcsid[] = "$Id: quit.c,v 1.1.1.1 1995/10/18 08:45:39 deraadt Exp $";
* The "quit" command.
*/
int
quitcmd()
quitcmd(v)
void *v;
{
/*
* If we are sourcing, then return 1 so execute() can handle it.
@ -70,7 +77,7 @@ void
quit()
{
int mcount, p, modify, autohold, anystat, holdbit, nohold;
FILE *ibuf, *obuf, *fbuf, *rbuf, *readstat, *abuf;
FILE *ibuf = NULL, *obuf, *fbuf, *rbuf, *readstat = NULL, *abuf;
register struct message *mp;
register int c;
extern char *tempQuit, *tempResid;
@ -105,7 +112,14 @@ quit()
fbuf = Fopen(mailname, "r");
if (fbuf == NULL)
goto newmail;
flock(fileno(fbuf), LOCK_EX);
if (flock(fileno(fbuf), LOCK_EX) == -1) {
nolock:
perror("Unable to lock mailbox");
Fclose(fbuf);
return;
}
if (dot_lock(mailname, 1, stdout, ".") == -1)
goto nolock;
rbuf = NULL;
if (fstat(fileno(fbuf), &minfo) >= 0 && minfo.st_size > mailsize) {
printf("New mail has arrived.\n");
@ -178,12 +192,14 @@ quit()
printf("Held %d message%s in %s\n",
p, p == 1 ? "" : "s", mailname);
Fclose(fbuf);
dot_unlock(mailname);
return;
}
if (c == 0) {
if (p != 0) {
writeback(rbuf);
Fclose(fbuf);
dot_unlock(mailname);
return;
}
goto cream;
@ -202,6 +218,7 @@ quit()
if ((obuf = Fopen(tempQuit, "w")) == NULL) {
perror(tempQuit);
Fclose(fbuf);
dot_unlock(mailname);
return;
}
if ((ibuf = Fopen(tempQuit, "r")) == NULL) {
@ -209,6 +226,7 @@ quit()
rm(tempQuit);
Fclose(obuf);
Fclose(fbuf);
dot_unlock(mailname);
return;
}
rm(tempQuit);
@ -222,6 +240,7 @@ quit()
Fclose(ibuf);
Fclose(obuf);
Fclose(fbuf);
dot_unlock(mailname);
return;
}
Fclose(obuf);
@ -230,13 +249,15 @@ quit()
perror(mbox);
Fclose(ibuf);
Fclose(fbuf);
dot_unlock(mailname);
return;
}
}
if (value("append") != NOSTR) {
else {
if ((obuf = Fopen(mbox, "a")) == NULL) {
perror(mbox);
Fclose(fbuf);
dot_unlock(mailname);
return;
}
fchmod(fileno(obuf), 0600);
@ -248,6 +269,7 @@ quit()
Fclose(ibuf);
Fclose(obuf);
Fclose(fbuf);
dot_unlock(mailname);
return;
}
@ -274,6 +296,7 @@ quit()
perror(mbox);
Fclose(obuf);
Fclose(fbuf);
dot_unlock(mailname);
return;
}
Fclose(obuf);
@ -290,6 +313,7 @@ quit()
if (p != 0) {
writeback(rbuf);
Fclose(fbuf);
dot_unlock(mailname);
return;
}
@ -310,16 +334,20 @@ cream:
Fclose(abuf);
alter(mailname);
Fclose(fbuf);
dot_unlock(mailname);
return;
}
demail();
Fclose(fbuf);
dot_unlock(mailname);
return;
newmail:
printf("Thou hast new mail.\n");
if (fbuf != NULL)
if (fbuf != NULL) {
Fclose(fbuf);
dot_unlock(mailname);
}
}
/*
@ -388,7 +416,7 @@ edstop()
extern char *tmpdir;
register int gotcha, c;
register struct message *mp;
FILE *obuf, *ibuf, *readstat;
FILE *obuf, *ibuf, *readstat = NULL;
struct stat statb;
char *tempname;

View File

@ -1,3 +1,6 @@
/* $OpenBSD: rcv.h,v 1.2 1996/06/11 12:53:48 deraadt Exp $ */
/* $NetBSD: rcv.h,v 1.4 1996/06/08 19:48:38 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -30,8 +33,8 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* from: @(#)rcv.h 8.1 (Berkeley) 6/6/93
* $Id: rcv.h,v 1.1.1.1 1995/10/18 08:45:39 deraadt Exp $
* @(#)rcv.h 8.1 (Berkeley) 6/6/93
* $NetBSD: rcv.h,v 1.4 1996/06/08 19:48:38 christos Exp $
*/
/*

View File

@ -1,3 +1,6 @@
/* $OpenBSD: send.c,v 1.2 1996/06/11 12:53:50 deraadt Exp $ */
/* $NetBSD: send.c,v 1.6 1996/06/08 19:48:39 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -32,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)send.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$Id: send.c,v 1.1.1.1 1995/10/18 08:45:39 deraadt Exp $";
#if 0
static char sccsid[] = "@(#)send.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: send.c,v 1.2 1996/06/11 12:53:50 deraadt Exp $";
#endif
#endif /* not lint */
#include "rcv.h"
@ -62,11 +68,11 @@ send(mp, obuf, doign, prefix)
long count;
register FILE *ibuf;
char line[LINESIZE];
int ishead, infld, ignoring, dostat, firstline;
int ishead, infld, ignoring = 0, dostat, firstline;
register char *cp, *cp2;
register int c;
register int c = 0;
int length;
int prefixlen;
int prefixlen = 0;
/*
* Compute the prefix string, without trailing whitespace
@ -273,9 +279,10 @@ mail(to, cc, bcc, smopts, subject)
* the mail routine below.
*/
int
sendmail(str)
char *str;
sendmail(v)
void *v;
{
char *str = v;
struct header head;
head.h_to = extract(str, GTO);
@ -373,9 +380,15 @@ mail1(hp, printheaders)
goto out;
}
if (pid == 0) {
prepare_child(sigmask(SIGHUP)|sigmask(SIGINT)|sigmask(SIGQUIT)|
sigmask(SIGTSTP)|sigmask(SIGTTIN)|sigmask(SIGTTOU),
fileno(mtf), -1);
sigset_t nset;
sigemptyset(&nset);
sigaddset(&nset, SIGHUP);
sigaddset(&nset, SIGINT);
sigaddset(&nset, SIGQUIT);
sigaddset(&nset, SIGTSTP);
sigaddset(&nset, SIGTTIN);
sigaddset(&nset, SIGTTOU);
prepare_child(&nset, fileno(mtf), -1);
if ((cp = value("sendmail")) != NOSTR)
cp = expand(cp);
else
@ -539,8 +552,7 @@ savemail(name, fi)
register FILE *fo;
char buf[BUFSIZ];
register i;
time_t now, time();
char *ctime();
time_t now;
if ((fo = Fopen(name, "a")) == NULL) {
perror(name);

View File

@ -1,3 +1,6 @@
/* $OpenBSD: strings.c,v 1.2 1996/06/11 12:53:50 deraadt Exp $ */
/* $NetBSD: strings.c,v 1.5 1996/06/08 19:48:40 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -32,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)strings.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$Id: strings.c,v 1.1.1.1 1995/10/18 08:45:39 deraadt Exp $";
#if 0
static char sccsid[] = "@(#)strings.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: strings.c,v 1.2 1996/06/11 12:53:50 deraadt Exp $";
#endif
#endif /* not lint */
/*

View File

@ -1,3 +1,6 @@
/* $OpenBSD: temp.c,v 1.2 1996/06/11 12:53:51 deraadt Exp $ */
/* $NetBSD: temp.c,v 1.5 1996/06/08 19:48:42 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -32,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)temp.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$Id: temp.c,v 1.1.1.1 1995/10/18 08:45:39 deraadt Exp $";
#if 0
static char sccsid[] = "@(#)temp.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: temp.c,v 1.2 1996/06/11 12:53:51 deraadt Exp $";
#endif
#endif /* not lint */
#include "rcv.h"
@ -57,7 +63,6 @@ void
tinit()
{
register char *cp;
int len;
if ((tmpdir = getenv("TMPDIR")) == NULL) {
tmpdir = _PATH_TMP;
@ -81,11 +86,9 @@ tinit()
}
} else {
if ((cp = username()) == NOSTR) {
myname = "ubluit";
if (rcvmode) {
printf("Who are you!?\n");
myname = "nobody";
if (rcvmode)
exit(1);
}
} else
myname = savestr(cp);
}

View File

@ -1,3 +1,6 @@
/* $OpenBSD: tty.c,v 1.2 1996/06/11 12:53:52 deraadt Exp $ */
/* $NetBSD: tty.c,v 1.5 1996/06/08 19:48:43 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -32,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)tty.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$Id: tty.c,v 1.1.1.1 1995/10/18 08:45:39 deraadt Exp $";
#if 0
static char sccsid[] = "@(#)tty.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: tty.c,v 1.2 1996/06/11 12:53:52 deraadt Exp $";
#endif
#endif /* not lint */
/*
@ -44,6 +50,7 @@ static char rcsid[] = "$Id: tty.c,v 1.1.1.1 1995/10/18 08:45:39 deraadt Exp $";
#include "rcv.h"
#include "extern.h"
#include <sys/ioctl.h>
static cc_t c_erase; /* Current erase char */
static cc_t c_kill; /* Current kill char */
@ -71,7 +78,10 @@ grabh(hp, gflags)
sig_t savettou;
sig_t savettin;
int errs;
void ttyint();
#ifdef __GNUC__
/* Avoid longjmp clobbering */
(void) &saveint;
#endif
savetstp = signal(SIGTSTP, SIG_DFL);
savettou = signal(SIGTTOU, SIG_DFL);
@ -157,8 +167,12 @@ readtty(pr, src)
{
char ch, canonb[BUFSIZ];
int c;
register char *cp, *cp2;
void ttystop();
char *cp, *cp2;
#if __GNUC__
/* Avoid longjmp clobbering */
(void) &c;
(void) &cp2;
#endif
fputs(pr, stdout);
fflush(stdout);
@ -175,7 +189,7 @@ readtty(pr, src)
fflush(stdout);
#else
cp = src == NOSTR ? "" : src;
while (c = *cp++) {
while ((c = *cp++) != '\0') {
if ((c_erase != _POSIX_VDISABLE && c == c_erase) ||
(c_kill != _POSIX_VDISABLE && c == c_kill)) {
ch = '\\';
@ -258,10 +272,13 @@ ttystop(s)
int s;
{
sig_t old_action = signal(s, SIG_DFL);
sigset_t nset;
sigsetmask(sigblock(0) & ~sigmask(s));
sigemptyset(&nset);
sigaddset(&nset, s);
sigprocmask(SIG_BLOCK, &nset, NULL);
kill(0, s);
sigblock(sigmask(s));
sigprocmask(SIG_UNBLOCK, &nset, NULL);
signal(s, old_action);
longjmp(rewrite, 1);
}

View File

@ -1,3 +1,6 @@
/* $OpenBSD: v7.local.c,v 1.2 1996/06/11 12:53:53 deraadt Exp $ */
/* $NetBSD: v7.local.c,v 1.7 1996/06/08 19:48:44 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -32,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)v7.local.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$Id: v7.local.c,v 1.1.1.1 1995/10/18 08:45:39 deraadt Exp $";
#if 0
static char sccsid[] = "@(#)v7.local.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: v7.local.c,v 1.2 1996/06/11 12:53:53 deraadt Exp $";
#endif
#endif /* not lint */
/*
@ -83,8 +89,12 @@ char *
username()
{
char *np;
uid_t uid;
if ((np = getenv("USER")) != NOSTR)
return np;
return getname(getuid());
if ((np = getname(uid = getuid())) != NOSTR)
return np;
printf("Cannot associate a name with uid %d\n", uid);
return NOSTR;
}

View File

@ -1,3 +1,6 @@
/* $OpenBSD: vars.c,v 1.2 1996/06/11 12:53:53 deraadt Exp $ */
/* $NetBSD: vars.c,v 1.4 1996/06/08 19:48:45 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -32,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)vars.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$Id: vars.c,v 1.1.1.1 1995/10/18 08:45:39 deraadt Exp $";
#if 0
static char sccsid[] = "@(#)vars.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: vars.c,v 1.2 1996/06/11 12:53:53 deraadt Exp $";
#endif
#endif /* not lint */
#include "rcv.h"

View File

@ -1,3 +1,6 @@
/* $OpenBSD: version.c,v 1.2 1996/06/11 12:53:54 deraadt Exp $ */
/* $NetBSD: version.c,v 1.4 1996/06/08 19:48:46 christos Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@ -32,8 +35,11 @@
*/
#ifndef lint
static char sccsid[] = "from: @(#)version.c 8.1 (Berkeley) 6/6/93";
static char rcsid[] = "$Id: version.c,v 1.1.1.1 1995/10/18 08:45:39 deraadt Exp $";
#if 0
static char sccsid[] = "@(#)version.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: version.c,v 1.2 1996/06/11 12:53:54 deraadt Exp $";
#endif
#endif /* not lint */
/*