X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/dc0fb68d25efd03d4536dd3c112d609f8be79ac1..eae4e80fddb67ed353f32a54c9eeed1c1527e5a9:/uip/inc.c?ds=inline diff --git a/uip/inc.c b/uip/inc.c index c337dde5..d65c46fb 100644 --- a/uip/inc.c +++ b/uip/inc.c @@ -40,9 +40,10 @@ #include #include #include -#include "../sbr/lock_file.h" -#include "../sbr/m_maildir.h" -#include "../sbr/m_mktemp.h" +#include "h/done.h" +#include "sbr/lock_file.h" +#include "sbr/m_maildir.h" +#include "sbr/m_mktemp.h" #ifndef TLS_SUPPORT # define TLSminc(a) (a) @@ -156,10 +157,11 @@ static FILE *in; /* * prototypes */ +static int maildir_srt(const void *va, const void *vb) PURE; static void inc_done(int) NORETURN; static int pop_action(void *closure, char *); -int +static int maildir_srt(const void *va, const void *vb) { const struct Maildir_entry *a = va, *b = vb; @@ -195,7 +197,7 @@ main (int argc, char **argv) int nmsgs, nbytes; char *MAILHOST_env_variable; - done=inc_done; + set_done(inc_done); /* absolutely the first thing we do is save our privileges, * and drop them if we can. @@ -203,7 +205,7 @@ main (int argc, char **argv) SAVEGROUPPRIVS(); TRYDROPGROUPPRIVS(); - if (nmh_init(argv[0], 1)) { return 1; } + if (nmh_init(argv[0], true, true)) { return 1; } mts_init (); arguments = getarguments (invo_name, argc, argv, 1); @@ -234,7 +236,7 @@ main (int argc, char **argv) ambigsw (cp, switches); done (1); case UNKWNSW: - adios (NULL, "-%s unknown", cp); + die("-%s unknown", cp); case HELPSW: snprintf (buf, sizeof(buf), "%s [+folder] [switches]", invo_name); @@ -246,8 +248,8 @@ main (int argc, char **argv) case AUDSW: if (!(cp = *argp++) || *cp == '-') - adios (NULL, "missing argument to %s", argp[-2]); - audfile = getcpy (m_maildir (cp)); + die("missing argument to %s", argp[-2]); + audfile = mh_xstrdup(m_maildir(cp)); continue; case NAUDSW: audfile = NULL; @@ -276,7 +278,7 @@ main (int argc, char **argv) case FILESW: if (!(cp = *argp++) || *cp == '-') - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); from = path (cp, TFILE); /* @@ -296,34 +298,34 @@ main (int argc, char **argv) case FORMSW: if (!(form = *argp++) || *form == '-') - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); format = NULL; continue; case FMTSW: if (!(format = *argp++) || *format == '-') - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); form = NULL; continue; case WIDTHSW: if (!(cp = *argp++) || *cp == '-') - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); width = atoi (cp); continue; case HOSTSW: if (!(host = *argp++) || *host == '-') - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); continue; case PORTSW: if (!(port = *argp++) || *port == '-') - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); continue; case USERSW: if (!(user = *argp++) || *user == '-') - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); continue; case SNOOPSW: @@ -339,7 +341,7 @@ main (int argc, char **argv) case SASLMECHSW: if (!(saslmech = *argp++) || *saslmech == '-') - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); continue; case INITTLSSW: @@ -361,25 +363,24 @@ main (int argc, char **argv) case AUTHSERVICESW: #ifdef OAUTH_SUPPORT if (!(auth_svc = *argp++) || *auth_svc == '-') - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); #else - adios (NULL, "not built with OAuth support"); + die("not built with OAuth support"); #endif continue; case PROXYSW: if (!(proxy = *argp++) || *proxy == '-') - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); continue; } } if (*cp == '+' || *cp == '@') { if (folder) - adios (NULL, "only one folder at a time!"); - else - folder = pluspath (cp); + die("only one folder at a time!"); + folder = pluspath (cp); } else { - adios (NULL, "usage: %s [+folder] [switches]", invo_name); + die("usage: %s [+folder] [switches]", invo_name); } } @@ -401,11 +402,11 @@ main (int argc, char **argv) if (auth_svc == NULL) { if (saslmech && ! strcasecmp(saslmech, "xoauth2")) { - adios (NULL, "must specify -authservice with -saslmech xoauth2"); + die("must specify -authservice with -saslmech xoauth2"); } } else { if (user == NULL) { - adios (NULL, "must specify -user with -saslmech xoauth2"); + die("must specify -user with -saslmech xoauth2"); } } @@ -420,15 +421,15 @@ main (int argc, char **argv) */ if (pop_init (host, port, user, proxy, snoop, sasl, saslmech, tlsflag, auth_svc) == NOTOK) - adios (NULL, "%s", response); + die("%s", response); /* Check if there are any messages */ if (pop_stat (&nmsgs, &nbytes) == NOTOK) - adios (NULL, "%s", response); + die("%s", response); if (nmsgs == 0) { pop_quit(); - adios (NULL, "no mail to incorporate"); + die("no mail to incorporate"); } } else if (inc_type == INC_FILE) { @@ -443,7 +444,7 @@ main (int argc, char **argv) newmail = concat (MAILDIR, "/", MAILFIL, NULL); } if (stat (newmail, &s1) == NOTOK || s1.st_size == 0) - adios (NULL, "no mail to incorporate"); + die("no mail to incorporate"); if (s1.st_mode & S_IFDIR) { DIR *md; struct dirent *de; @@ -452,13 +453,13 @@ main (int argc, char **argv) i = 0; cp = concat (newmail, "/new", NULL); if ((md = opendir(cp)) == NULL) - adios (NULL, "unable to open %s", cp); + die("unable to open %s", cp); while ((de = readdir (md)) != NULL) { if (de->d_name[0] == '.') continue; if (i >= num_maildir_entries) { if ((Maildir = realloc(Maildir, sizeof(*Maildir) * (2*i+16))) == NULL) - adios(NULL, "not enough memory for %d messages", 2*i+16); + die("not enough memory for %d messages", 2*i+16); num_maildir_entries = 2*i+16; } Maildir[i].filename = concat (cp, "/", de->d_name, NULL); @@ -471,13 +472,13 @@ main (int argc, char **argv) closedir (md); cp = concat (newmail, "/cur", NULL); if ((md = opendir(cp)) == NULL) - adios (NULL, "unable to open %s", cp); + die("unable to open %s", cp); while ((de = readdir (md)) != NULL) { if (de->d_name[0] == '.') continue; if (i >= num_maildir_entries) { if ((Maildir = realloc(Maildir, sizeof(*Maildir) * (2*i+16))) == NULL) - adios(NULL, "not enough memory for %d messages", 2*i+16); + die("not enough memory for %d messages", 2*i+16); num_maildir_entries = 2*i+16; } Maildir[i].filename = concat (cp, "/", de->d_name, NULL); @@ -489,7 +490,7 @@ main (int argc, char **argv) free (cp); closedir (md); if (i == 0) - adios (NULL, "no mail to incorporate"); + die("no mail to incorporate"); num_maildir_entries = i; qsort (Maildir, num_maildir_entries, sizeof(*Maildir), maildir_srt); } @@ -520,7 +521,7 @@ main (int argc, char **argv) /* read folder and create message structure */ if (!(mp = folder_read (folder, 0))) - adios (NULL, "unable to read folder %s", folder); + die("unable to read folder %s", folder); if (inc_type == INC_FILE && Maildir == NULL) { /* Mail from a spool file. */ @@ -538,7 +539,7 @@ main (int argc, char **argv) in = lkfopenspool (newmail, "r"); DROPGROUPPRIVS(); if (in == NULL) - adios (NULL, "unable to lock and fopen %s", newmail); + die("unable to lock and fopen %s", newmail); fstat (fileno(in), &s1); } else { trnflag = 0; @@ -556,7 +557,7 @@ main (int argc, char **argv) inform("Creating Receive-Audit: %s", audfile); if ((aud = fopen (audfile, "a")) == NULL) adios (audfile, "unable to append to"); - else if (i == NOTOK) + if (i == NOTOK) chmod (audfile, m_gmprot ()); if (from) @@ -600,7 +601,7 @@ main (int argc, char **argv) pc.written = 0; pc.mailout = pf; if (pop_retr(i, pop_action, &pc) == NOTOK) - adios (NULL, "%s", response); + die("%s", response); if (fflush (pf)) adios (cp, "write error on"); @@ -643,13 +644,13 @@ main (int argc, char **argv) free (cp); if (trnflag && pop_dele (i) == NOTOK) - adios (NULL, "%s", response); + die("%s", response); scan_finished(); } if (pop_quit () == NOTOK) - adios (NULL, "%s", response); + die("%s", response); } else if (inc_type == INC_FILE && Maildir == NULL) { /* Mail from a spool file. */ @@ -809,7 +810,7 @@ main (int argc, char **argv) } else { fclose (in); in = NULL; } - adios (NULL, "failed"); + die("failed"); } if (aud) @@ -907,7 +908,7 @@ skip: static void NORETURN inc_done (int status) { - done = exit; + set_done(exit); if (locked) { GETGROUPPRIVS();