X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/f67e3671c985ad8095dc6fcc8be7ba6dd25cdf63..b3934fc32dd04ef0bbcce846f151f4fdf40bff54:/uip/msgchk.c?ds=inline diff --git a/uip/msgchk.c b/uip/msgchk.c index 6a0a12e7..76bb37d8 100644 --- a/uip/msgchk.c +++ b/uip/msgchk.c @@ -80,7 +80,7 @@ main (int argc, char **argv) int datesw = 1, notifysw = NT_ALL; int status = 0, sasl = 0; int snoop = 0, vecp = 0; - char *cp, *host = NULL, *port = NULL, *user, *proxy = NULL; + char *cp, *host = NULL, *port = NULL, *user = NULL, *proxy = NULL; char buf[BUFSIZ], *saslmech = NULL; char **argp, **arguments, *vec[MAXVEC]; struct passwd *pw; @@ -94,7 +94,6 @@ main (int argc, char **argv) context_read(); mts_init (invo_name); - user = getusername(); arguments = getarguments (invo_name, argc, argv, 1); argp = arguments; @@ -151,7 +150,7 @@ main (int argc, char **argv) if (vecp >= MAXVEC-1) adios (NULL, "you can only check %d users at a time", MAXVEC-1); else - vec[vecp++] = cp; + user = vec[vecp++] = cp; continue; case SNOOPSW: @@ -206,26 +205,26 @@ main (int argc, char **argv) snoop, sasl, saslmech); } } else { - - if (vecp == 0) { - char *home; - - /* Not sure this check makes sense... */ - if (!geteuid() || NULL == (home = getenv("HOME"))) { - pw = getpwnam (user); - if (pw == NULL) - adios (NULL, "unable to get information about user"); - home = pw->pw_dir; - } - status = checkmail (user, home, datesw, notifysw, 1); - } else { - for (vecp = 0; vec[vecp]; vecp++) { - if ((pw = getpwnam (vec[vecp]))) - status += checkmail (pw->pw_name, pw->pw_dir, datesw, notifysw, 0); - else - advise (NULL, "no such user as %s", vec[vecp]); + if (user == NULL) user = getusername (); + if (vecp == 0) { + char *home; + + /* Not sure this check makes sense... */ + if (!geteuid() || NULL == (home = getenv("HOME"))) { + pw = getpwnam (user); + if (pw == NULL) + adios (NULL, "unable to get information about user"); + home = pw->pw_dir; + } + status = checkmail (user, home, datesw, notifysw, 1); + } else { + for (vecp = 0; vec[vecp]; vecp++) { + if ((pw = getpwnam (vec[vecp]))) + status += checkmail (pw->pw_name, pw->pw_dir, datesw, notifysw, 0); + else + advise (NULL, "no such user as %s", vec[vecp]); + } } - } } /* host == NULL */ done (status); @@ -286,7 +285,10 @@ checkmail (char *user, char *home, int datesw, int notifysw, int personal) if ((mf & UUCPOK) || (mf & MMDFOK)) { if (notifysw & NT_MAIL) { - printf (personal ? "You have " : "%s has ", user); + if (personal) + printf ("You have "); + else + printf ("%s has ", user); if (mf & UUCPOK) printf ("%s old-style bell", mf & UUCPOLD ? "old" : "new"); if ((mf & UUCPOK) && (mf & MMDFOK)) @@ -327,26 +329,25 @@ remotemail (char *host, char *port, char *user, char *proxy, int notifysw, int personal, int snoop, int sasl, char *saslmech) { int nmsgs, nbytes, status; - char *pass = NULL; - - if (user == NULL) - user = getusername (); - if (sasl) - pass = getusername (); - else - ruserpass (host, &user, &pass); + struct nmh_creds creds = { 0, 0, 0 }; /* open the POP connection */ - if (pop_init (host, port, user, pass, proxy, snoop, sasl, saslmech) == NOTOK - || pop_stat (&nmsgs, &nbytes) == NOTOK /* check for messages */ - || pop_quit () == NOTOK) { /* quit POP connection */ + nmh_get_credentials (host, user, sasl, &creds); + if (pop_init (host, port, creds.user, creds.password, proxy, snoop, sasl, + saslmech) == NOTOK + || pop_stat (&nmsgs, &nbytes) == NOTOK /* check for messages */ + || pop_quit () == NOTOK) { /* quit POP connection */ advise (NULL, "%s", response); return 1; } if (nmsgs) { if (notifysw & NT_MAIL) { - printf (personal ? "You have " : "%s has ", user); + if (personal) + printf ("You have "); + else + printf ("%s has ", user); + printf ("%d message%s (%d bytes)", nmsgs, nmsgs != 1 ? "s" : "", nbytes); }