X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fmsgchk.c;h=52aedc86ba5b41f0a7ebdcb8ecdd8154577384c5;hp=fdf32d6cfef6ff3fbe4491ec0e66bfb9e370655a;hb=cfc525a9b85207225cb4071d1d3b01e8d1db2424;hpb=df7b16cb148474b3b80dbf1e226e858cf1e47edb diff --git a/uip/msgchk.c b/uip/msgchk.c index fdf32d6..52aedc8 100644 --- a/uip/msgchk.c +++ b/uip/msgchk.c @@ -42,6 +42,12 @@ # define KPOPminc(a) 0 #endif +#ifndef CYRUS_SASL +# define SASLminc(a) (a) +#else +# define SASLminc(a) 0 +#endif + static struct swit switches[] = { #define DATESW 0 { "date", 0 }, @@ -71,6 +77,10 @@ static struct swit switches[] = { { "snoop", -5 }, #define KPOPSW 13 { "kpop", KPOPminc (-4) }, +#define SASLSW 14 + { "sasl", SASLminc(-4) }, +#define SASLMECHSW 15 + { "saslmech", SASLminc(-5) }, { NULL, 0 } }; @@ -101,7 +111,7 @@ static int donote (char *, int); static int checkmail (char *, char *, int, int, int); #ifdef POP -static int remotemail (char *, char *, int, int, int, int, int); +static int remotemail (char *, char *, int, int, int, int, int, int, char *); #endif @@ -110,10 +120,10 @@ main (int argc, char **argv) { int datesw = 1, notifysw = NT_ALL; int rpop, status = 0; - int kpop = 0; + int kpop = 0, sasl = 0; int snoop = 0, vecp = 0; uid_t uid; - char *cp, *host = NULL, *user, buf[BUFSIZ]; + char *cp, *host = NULL, *user, buf[BUFSIZ], *saslmech = NULL; char **argp, **arguments, *vec[MAXVEC]; struct passwd *pw; @@ -214,6 +224,15 @@ main (int argc, char **argv) case SNOOPSW: snoop++; continue; + + case SASLSW: + sasl++; + continue; + + case SASLMECHSW: + if (!(saslmech = *argp++) || *saslmech == '-') + adios (NULL, "missing argument to %s", argp[-2]); + continue; } } if (vecp >= MAXVEC-1) @@ -263,10 +282,12 @@ main (int argc, char **argv) kpop = 1; } if (vecp == 0) { - status = remotemail (host, user, rpop, kpop, notifysw, 1, snoop); + status = remotemail (host, user, rpop, kpop, notifysw, 1, snoop, + sasl, saslmech); } else { for (vecp = 0; vec[vecp]; vecp++) - status += remotemail (host, vec[vecp], rpop, kpop, notifysw, 0, snoop); + status += remotemail (host, vec[vecp], rpop, kpop, notifysw, 0, + snoop, sasl, saslmech); } } else { #endif /* POP */ @@ -387,20 +408,21 @@ checkmail (char *user, char *home, int datesw, int notifysw, int personal) extern char response[]; static int -remotemail (char *host, char *user, int rpop, int kpop, int notifysw, int personal, int snoop) +remotemail (char *host, char *user, int rpop, int kpop, int notifysw, int personal, int snoop, int sasl, char *saslmech) { int nmsgs, nbytes, status; char *pass = NULL; if (user == NULL) user = getusername (); - if (kpop || (rpop > 0)) + if (kpop || sasl || (rpop > 0)) pass = getusername (); else ruserpass (host, &user, &pass); /* open the POP connection */ - if (pop_init (host, user, pass, snoop, kpop ? 1 : rpop, kpop) == NOTOK + if (pop_init (host, user, pass, snoop, kpop ? 1 : rpop, kpop, + sasl, saslmech) == NOTOK || pop_stat (&nmsgs, &nbytes) == NOTOK /* check for messages */ || pop_quit () == NOTOK) { /* quit POP connection */ advise (NULL, "%s", response);