adios(EX_OSERR, NULL, "atexit failed");
}
-/*
-** absolutely the first thing we do is save our privileges,
-** and drop them if we can.
-*/
+ /*
+ ** absolutely the first thing we do is save our privileges,
+ ** and drop them if we can.
+ */
SAVEGROUPPRIVS();
TRYDROPGROUPPRIVS();
setlocale(LC_ALL, "");
invo_name = mhbasename(argv[0]);
- /* read user profile/context */
context_read();
arguments = getarguments(invo_name, argc, argv, 1);
continue;
case FILESW:
- if (!(cp = *argp++) || *cp == '-')
+ if (!(cp = *argp++))
adios(EX_USAGE, NULL, "missing argument to %s",
argp[-2]);
- from = mh_xstrdup(expanddir(cp));
+ from = (strcmp(cp, "-")==0) ? "-" : mh_xstrdup(expanddir(cp));
/*
** If the truncate file is in default state,
/* guarantee dropping group priveleges; we might not have done so earlier */
DROPGROUPPRIVS();
- /*
- ** We will get the mail from a file
- ** (typically the standard maildrop)
- */
- if (from)
- newmail = from;
- else if ((newmail = getenv("MAILDROP")) && *newmail)
- newmail = toabsdir(newmail);
- else if ((newmail = context_find("maildrop")) && *newmail)
- newmail = toabsdir(newmail);
- else {
- newmail = concat(mailspool, "/", getusername(), NULL);
- }
- if (stat(newmail, &s1) == NOTOK || s1.st_size == 0)
- adios(EX_DATAERR, NULL, "no mail to incorporate");
+ if (from && strcmp(from, "-")==0) {
+ /* We'll read mail from stdin. */
+ newmail = NULL;
+ } else {
+ /* We'll read mail from a file. */
+ if (from)
+ newmail = from;
+ else if ((newmail = getenv("MAILDROP")) && *newmail)
+ newmail = toabsdir(newmail);
+ else if ((newmail = context_find("maildrop")) && *newmail)
+ newmail = toabsdir(newmail);
+ else {
+ newmail = concat(mailspool, "/", getusername(), NULL);
+ }
+ if (stat(newmail, &s1) == NOTOK || s1.st_size == 0)
+ adios(EX_DATAERR, NULL, "no mail to incorporate");
- if ((cp = strdup(newmail)) == NULL)
- adios(EX_OSERR, NULL, "error allocating memory to copy newmail");
+ if ((cp = strdup(newmail)) == NULL)
+ adios(EX_OSERR, NULL, "error allocating memory to copy newmail");
- newmail = cp;
+ newmail = cp;
+ }
if (!folder)
folder = getdeffol();
if (chdir(maildir) == NOTOK)
adios(EX_OSERR, maildir, "unable to change directory to");
- /* read folder and create message structure */
if (!(mp = folder_read(folder)))
adios(EX_IOERR, NULL, "unable to read folder %s", folder);
- if (access(newmail, W_OK) != NOTOK) {
+ if (!newmail) {
+ trnflag = 0;
+ in = stdin;
+ } else if (access(newmail, W_OK) != NOTOK) {
locked++;
if (trnflag) {
SIGNAL(SIGHUP, SIG_IGN);
dtimenow(), from);
}
- /* Get new format string */
- fmtstr = new_fs(form, FORMAT);
+ /* Set format string */
+ fmtstr = new_fs(form, scanformat);
if (noisy) {
printf("Incorporating new mail into %s...\n\n", folder);
fflush(stdout);
}
+ /* check if readable and nonempty */
+ if (!fgets(buf, sizeof(buf), in)) {
+ if (ferror(in)) {
+ advise("read", "unable to");
+ incerr = SCNFAT;
+ } else {
+ incerr = SCNEOF;
+ }
+ goto giveup;
+ }
+ if (strncmp("From ", buf, 5)!=0) {
+ advise(NULL, "not in mbox format");
+ incerr = SCNFAT;
+ goto giveup;
+ }
+
/*
** Get the mail from file (usually mail spool)
*/
- thisisanmbox(in);
hghnum = msgnum = mp->hghmsg;
for (;;) {
/*
*/
break;
}
+giveup:;
mh_free0(&maildir_copy);
if (incerr < 0) { /* error */
else
admonish(newmail, "error zero'ing");
}
- } else if (noisy) {
+ } else if (noisy && newmail) {
printf("%s not zero'd\n", newmail);
}
fclose(in); in = NULL;
}
- seq_setunseen(mp, 1); /* add new msgs to unseen sequences */
- seq_save(mp); /* synchronize sequences */
- context_save(); /* save the context file */
+ seq_setunseen(mp, 1);
+ seq_save(mp);
+ context_save();
return 0;
}