X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Finc.c;h=f461dd86745a92c117390b40ca1f80bd5165a25a;hp=45036f5baa0877b399fdcbdda930f76939e0ddc4;hb=56f52a606b02d40fdc92b9012c7835679163cd5c;hpb=7edb0cbc236244d996d1e2ae1d58d0e9f7d98062 diff --git a/uip/inc.c b/uip/inc.c index 45036f5..f461dd8 100644 --- a/uip/inc.c +++ b/uip/inc.c @@ -2,8 +2,6 @@ /* * 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. @@ -37,10 +35,6 @@ # include #endif -#ifdef HESIOD -# include -#endif - #include #include #include @@ -55,24 +49,6 @@ # define POPminc(a) 0 #endif -#ifndef RPOP -# define RPOPminc(a) (a) -#else -# define RPOPminc(a) 0 -#endif - -#ifndef APOP -# define APOPminc(a) (a) -#else -# define APOPminc(a) 0 -#endif - -#ifndef KPOP -# define KPOPminc(a) (a) -#else -# define KPOPminc(a) 0 -#endif - #ifndef CYRUS_SASL # define SASLminc(a) (a) #else @@ -102,37 +78,29 @@ static struct swit switches[] = { { "pack file", POPminc (-4) }, #define NPACKSW 10 { "nopack", POPminc (-6) }, -#define APOPSW 11 - { "apop", APOPminc (-4) }, -#define NAPOPSW 12 - { "noapop", APOPminc (-6) }, -#define RPOPSW 13 - { "rpop", RPOPminc (-4) }, -#define NRPOPSW 14 - { "norpop", RPOPminc (-6) }, -#define SILSW 15 +#define PORTSW 11 + { "port name/number", POPminc (-4) }, +#define SILSW 12 { "silent", 0 }, -#define NSILSW 16 +#define NSILSW 13 { "nosilent", 0 }, -#define TRNCSW 17 +#define TRNCSW 14 { "truncate", 0 }, -#define NTRNCSW 18 +#define NTRNCSW 15 { "notruncate", 0 }, -#define WIDTHSW 19 +#define WIDTHSW 16 { "width columns", 0 }, -#define VERSIONSW 20 +#define VERSIONSW 17 { "version", 0 }, -#define HELPSW 21 +#define HELPSW 18 { "help", 0 }, -#define SNOOPSW 22 +#define SNOOPSW 19 { "snoop", -5 }, -#define KPOPSW 23 - { "kpop", KPOPminc (-4) }, -#define SASLSW 24 +#define SASLSW 20 { "sasl", SASLminc(-4) }, -#define SASLMECHSW 25 +#define SASLMECHSW 21 { "saslmech", SASLminc(-8) }, -#define PROXYSW 26 +#define PROXYSW 22 { "proxy command", POPminc(-5) }, { NULL, 0 } }; @@ -207,12 +175,6 @@ if (geteuid() != 0) DROPGROUPPRIVS() #define SAVEGROUPPRIVS() #endif /* not MAILGROUP */ -#ifdef POP -#define DROPUSERPRIVS() setuid(getuid()) -#else -#define DROPUSERPRIVS() -#endif - /* these variables have to be globals so that done() can correctly clean up the lockfile */ static int locked = 0; static char *newmail; @@ -223,8 +185,8 @@ static FILE *in; */ char *map_name(char *); +static void inc_done(int) NORETURN; #ifdef POP -int done(int); static int pop_action(char *); static int pop_pack(char *); static int map_count(void); @@ -236,18 +198,18 @@ main (int argc, char **argv) { int chgflag = 1, trnflag = 1; int noisy = 1, width = 0; - int rpop, i, hghnum, msgnum; - int kpop = 0, sasl = 0; - char *cp, *maildir, *folder = NULL; + int i, hghnum = 0, msgnum = 0; + int sasl = 0; + char *cp, *maildir = NULL, *folder = NULL; char *format = NULL, *form = NULL; - char *host = NULL, *user = NULL, *proxy = NULL; + char *host = NULL, *port = NULL, *user = NULL, *proxy = NULL; char *audfile = NULL, *from = NULL, *saslmech = NULL; char buf[BUFSIZ], **argp, *nfs, **arguments; - struct msgs *mp; + struct msgs *mp = NULL; struct stat st, s1; FILE *aud = NULL; - char b[MAXPATHLEN + 1]; - char *maildir_copy; /* copy of mail directory because the static gets overwritten */ + char b[MAXPATHLEN + 1]; + char *maildir_copy = NULL; /* copy of mail directory because the static gets overwritten */ #ifdef POP int nmsgs, nbytes, p = 0; @@ -259,9 +221,7 @@ main (int argc, char **argv) FILE *mhe = NULL; #endif -#ifdef HESIOD - struct hes_postoffice *po; -#endif + done=inc_done; /* absolutely the first thing we do is save our privileges, * and drop them if we can. @@ -291,11 +251,6 @@ main (int argc, char **argv) */ 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; -# endif /* HESIOD */ /* * If there is a valid "pophost" entry in mts.conf, * then use it as the default host. @@ -307,8 +262,6 @@ main (int argc, char **argv) snoop++; #endif /* POP */ - rpop = 0; - while ((cp = *argp++)) { if (*cp == '-') { switch (smatch (++cp, switches)) { @@ -397,6 +350,12 @@ main (int argc, char **argv) if (!(host = *argp++) || *host == '-') adios (NULL, "missing argument to %s", argp[-2]); continue; + + case PORTSW: + if (!(host = *argp++) || *port == '-') + adios (NULL, "missing argument to %s", argp[-2]); + continue; + case USERSW: if (!(user = *argp++) || *user == '-') adios (NULL, "missing argument to %s", argp[-2]); @@ -417,24 +376,6 @@ main (int argc, char **argv) #endif /* POP */ continue; - case APOPSW: - rpop = -1; - continue; - case NAPOPSW: - rpop = 0; - continue; - - case RPOPSW: - rpop = 1; - continue; - case NRPOPSW: - rpop = 0; - continue; - - case KPOPSW: - kpop = 1; - continue; - case SNOOPSW: snoop++; continue; @@ -469,8 +410,6 @@ main (int argc, char **argv) #ifdef POP if (host && !*host) host = NULL; - if (from || !host || rpop <= 0) - DROPUSERPRIVS(); #endif /* POP */ /* guarantee dropping group priveleges; we might not have done so earlier */ @@ -496,10 +435,7 @@ main (int argc, char **argv) if (inc_type == INC_POP) { if (user == NULL) user = getusername (); - if ( strcmp( POPSERVICE, "kpop" ) == 0 ) { - kpop = 1; - } - if (kpop || sasl || ( rpop > 0)) + if (sasl) pass = getusername (); else ruserpass (host, &user, &pass); @@ -507,16 +443,14 @@ main (int argc, char **argv) /* * initialize POP connection */ - if (pop_init (host, user, pass, proxy, snoop, kpop ? 1 : rpop, kpop, - sasl, saslmech) == NOTOK) + if (pop_init (host, port, user, pass, proxy, snoop, sasl, + saslmech) == NOTOK) adios (NULL, "%s", response); /* Check if there are any messages */ if (pop_stat (&nmsgs, &nbytes) == NOTOK) adios (NULL, "%s", response); - if (rpop > 0) - DROPUSERPRIVS(); if (nmsgs == 0) { pop_quit(); adios (NULL, "no mail to incorporate"); @@ -543,7 +477,7 @@ main (int argc, char **argv) adios (NULL, "no mail to incorporate"); if ((cp = strdup(newmail)) == (char *)0) - adios (maildir, "error allocating memory to copy newmail"); + adios (NULL, "error allocating memory to copy newmail"); newmail = cp; } @@ -620,10 +554,9 @@ go_to_it: #ifdef POP fprintf (aud, from ? "<> %s -ms %s\n" - : host ? "<> %s -host %s -user %s%s\n" + : host ? "<> %s -host %s -user %s\n" : "<> %s\n", - dtimenow (0), from ? from : host, user, - rpop < 0 ? " -apop" : rpop > 0 ? " -rpop" : ""); + dtimenow (0), from ? from : host, user); #else /* POP */ fprintf (aud, from ? "<> %s -ms %s\n" : "<> %s\n", dtimenow (0), from); @@ -950,7 +883,8 @@ go_to_it: seq_setunseen (mp, 0); /* set the Unseen-Sequence */ seq_save (mp); /* synchronize sequences */ context_save (); /* save the context file */ - return done (0); + done (0); + return 1; } @@ -987,8 +921,8 @@ cpymsg (FILE *in, FILE *out) #endif /* if 0 */ -int -done (int status) +static void +inc_done (int status) { #ifdef POP if (packfile && pd != NOTOK) @@ -1001,7 +935,6 @@ done (int status) DROPGROUPPRIVS(); } exit (status); - return 1; /* dead code to satisfy the compiler */ } #ifdef POP