X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Finc.c;h=a2ecb4406c987053ee428a4f600d702cf88ff0d9;hp=f076e48af51b1fe3a779956fa3b5bf078895219e;hb=0569d6d1631dc90d4f2f2df6bdd0599c7ecc7814;hpb=cfc525a9b85207225cb4071d1d3b01e8d1db2424 diff --git a/uip/inc.c b/uip/inc.c index f076e48..a2ecb44 100644 --- a/uip/inc.c +++ b/uip/inc.c @@ -3,6 +3,10 @@ * inc.c -- incorporate messages from a maildrop into a folder * * $Id$ + * + * This code is Copyright (c) 2002, by the authors of nmh. See the + * COPYRIGHT file in the root directory of the nmh distribution for + * complete copyright information. */ #ifdef MAILGROUP @@ -25,6 +29,7 @@ #endif #include +#include #include #ifdef POP @@ -40,7 +45,7 @@ #include #include #include -#include +#include #include #include @@ -127,11 +132,11 @@ static struct swit switches[] = { { "sasl", SASLminc(-4) }, #define SASLMECHSW 25 { "saslmech", SASLminc(-8) }, +#define PROXYSW 26 + { "proxy command", POPminc(-5) }, { NULL, 0 } }; -extern int errno; - /* * flags for the mail source */ @@ -232,19 +237,22 @@ main (int argc, char **argv) int chgflag = 1, trnflag = 1; int noisy = 1, width = 0; int rpop, i, hghnum, msgnum; - int kpop = 0; + int kpop = 0, sasl = 0; char *cp, *maildir, *folder = NULL; char *format = NULL, *form = NULL; - char *host = NULL, *user = NULL; - char *audfile = NULL, *from = NULL; + char *host = NULL, *user = NULL, *proxy = NULL; + char *audfile = NULL, *from = NULL, *saslmech = NULL; char buf[BUFSIZ], **argp, *nfs, **arguments; struct msgs *mp; struct stat st, s1; FILE *aud = NULL; + char b[MAXPATHLEN + 1]; + char *maildir_copy; /* copy of mail directory because the static gets overwritten */ #ifdef POP int nmsgs, nbytes, p = 0; char *pass = NULL; + char *MAILHOST_env_variable; #endif #ifdef MHE @@ -253,7 +261,6 @@ main (int argc, char **argv) #ifdef HESIOD struct hes_postoffice *po; - char *tmphost; #endif /* absolutely the first thing we do is save our privileges, @@ -275,7 +282,6 @@ main (int argc, char **argv) argp = arguments; #ifdef POP -# ifdef HESIOD /* * Scheme is: * use MAILHOST environment variable if present, @@ -283,8 +289,9 @@ main (int argc, char **argv) * If that fails, use the default (if any) * provided by mts.conf in mts_init() */ - if ((tmphost = getenv("MAILHOST")) != NULL) - pophost = tmphost; + if ((MAILHOST_env_variable = getenv("MAILHOST")) != NULL) + pophost = MAILHOST_env_variable; +# ifdef HESIOD else if ((po = hes_getmailhost(getusername())) != NULL && strcmp(po->po_type, "POP") == 0) pophost = po->po_host; @@ -440,13 +447,17 @@ main (int argc, char **argv) if (!(saslmech = *argp++) || *saslmech == '-') adios (NULL, "missing argument to %s", argp[-2]); continue; + case PROXYSW: + if (!(proxy = *argp++) || *proxy == '-') + adios (NULL, "missing argument to %s", argp[-2]); + continue; } } if (*cp == '+' || *cp == '@') { if (folder) adios (NULL, "only one folder at a time!"); else - folder = path (cp + 1, *cp == '+' ? TFOLDER : TSUBCWF); + folder = pluspath (cp); } else { adios (NULL, "usage: %s [+folder] [switches]", invo_name); } @@ -496,7 +507,7 @@ main (int argc, char **argv) /* * initialize POP connection */ - if (pop_init (host, user, pass, snoop, kpop ? 1 : rpop, kpop, + if (pop_init (host, user, pass, proxy, snoop, kpop ? 1 : rpop, kpop, sasl, saslmech) == NOTOK) adios (NULL, "%s", response); @@ -530,6 +541,11 @@ main (int argc, char **argv) } if (stat (newmail, &s1) == NOTOK || s1.st_size == 0) adios (NULL, "no mail to incorporate"); + + if ((cp = strdup(newmail)) == (char *)0) + adios (maildir, "error allocating memory to copy newmail"); + + newmail = cp; } #ifdef POP @@ -544,16 +560,13 @@ main (int argc, char **argv) folder = getfolder (0); maildir = m_maildir (folder); - if (stat (maildir, &st) == NOTOK) { - if (errno != ENOENT) - adios (maildir, "error on folder"); - cp = concat ("Create folder \"", maildir, "\"? ", NULL); - if (noisy && !getanswer (cp)) - done (1); - free (cp); - if (!makedir (maildir)) - adios (NULL, "unable to create folder %s", maildir); - } + if ((maildir_copy = strdup(maildir)) == (char *)0) + adios (maildir, "error allocating memory to copy maildir"); + + if (noisy) + create_folder(maildir, 0, done); + else + done (1); if (chdir (maildir) == NOTOK) adios (maildir, "unable to change directory to"); @@ -798,7 +811,6 @@ go_to_it: /* link message into folder */ newmsg = folder_addmsg(mp, tmpfilenam); #endif - /* create scanline for new message */ switch (i = scan (in, msgnum + 1, msgnum + 1, nfs, width, msgnum == hghnum && chgflag, 1, NULL, 0L, noisy)) { @@ -822,6 +834,13 @@ go_to_it: case SCNMSG: case SCNENC: + /* + * Run the external program hook on the message. + */ + + (void)snprintf(b, sizeof (b), "%s/%d", maildir_copy, msgnum + 1); + (void)ext_hook("add-hook", b, (char *)0); + if (aud) fputs (scanl, aud); #ifdef MHE @@ -833,6 +852,9 @@ go_to_it: msgnum++; mp->hghmsg++; + mp->nummsg++; + if (mp->lowmsg == 0) mp->lowmsg = 1; + clear_msg_flags (mp, msgnum); set_exists (mp, msgnum); set_unseen (mp, msgnum);