X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fmsgchk.c;h=932da20634c5e7d0eaf2808a79214faf34f220c7;hp=36edccb4e0499457907b766f6273bad6a35db456;hb=ffe93d6dc707aaf92529cefb38a1814956b48c9e;hpb=5b792c4424571f05bc2008e3109797d18d7d00d1 diff --git a/uip/msgchk.c b/uip/msgchk.c index 36edccb..932da20 100644 --- a/uip/msgchk.c +++ b/uip/msgchk.c @@ -7,7 +7,6 @@ */ #include -#include #include #include @@ -38,19 +37,16 @@ static struct swit switches[] = { #define NT_ALL (NT_MAIL | NT_NMAI) #define NONEOK 0x0 -#define UUCPOLD 0x1 -#define UUCPNEW 0x2 -#define UUCPOK (UUCPOLD | UUCPNEW) -#define MMDFOLD 0x4 -#define MMDFNEW 0x8 -#define MMDFOK (MMDFOLD | MMDFNEW) +#define MAILOLD 0x4 +#define MAILNEW 0x8 +#define MAILOK (MAILOLD | MAILNEW) /* ** static prototypes */ static int donote(char *, int); -static int checkmail(char *, char *, int, int, int); +static int checkmail(char *, int, int, int); int @@ -59,7 +55,6 @@ main(int argc, char **argv) int datesw = 1, notifysw = NT_ALL; int status = 0; int vecp = 0; - uid_t uid; char buf[BUFSIZ]; char *user, *cp; char **argp, **arguments, *vec[MAXVEC]; @@ -73,8 +68,6 @@ main(int argc, char **argv) /* read user profile/context */ context_read(); - mts_init(invo_name); - uid = getuid(); user = getusername(); arguments = getarguments(invo_name, argc, argv, 1); @@ -125,30 +118,18 @@ main(int argc, char **argv) vec[vecp++] = cp; } - if (vecp != 0) - vec[vecp] = NULL; - - 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 (!vecp) { + done(checkmail(user, datesw, notifysw, 1)); + return 1; } + vec[vecp] = NULL; + for (vecp = 0; vec[vecp]; vecp++) { + if ((pw = getpwnam(vec[vecp]))) + status += checkmail(pw->pw_name, datesw, notifysw, 0); + else + advise(NULL, "no such user as %s", vec[vecp]); + } done(status); return 1; } @@ -189,55 +170,72 @@ donote(char *cp, int ntflag) static int -checkmail(char *user, char *home, int datesw, int notifysw, int personal) +checkmail(char *user, int datesw, int notifysw, int personal) { int mf, status; char buffer[BUFSIZ]; struct stat st; - - snprintf(buffer, sizeof(buffer), "%s/%s", - mmdfldir[0] ? mmdfldir : home, - mmdflfil[0] ? mmdflfil : user); + char *maildrop; + + if (personal) { + /* + ** Evaluate the env var and profile only if the check is + ** for the calling user. + */ + if ((maildrop = getenv("MAILDROP")) && *maildrop) { + snprintf(buffer, sizeof buffer, "%s", + toabsdir(maildrop)); + } else if ((maildrop=context_find("maildrop")) && *maildrop) { + snprintf(buffer, sizeof buffer, "%s", + toabsdir(maildrop)); + } else { + snprintf(buffer, sizeof buffer, "%s/%s", + mailspool, user); + } + } else { + snprintf(buffer, sizeof(buffer), "%s/%s", mailspool, user); + } if (datesw) { st.st_size = 0; st.st_atime = st.st_mtime = 0; } mf = (stat(buffer, &st) == NOTOK || st.st_size == 0) ? NONEOK - : st.st_atime <= st.st_mtime ? MMDFNEW : MMDFOLD; + : st.st_atime <= st.st_mtime ? MAILNEW : MAILOLD; - if ((mf & UUCPOK) || (mf & MMDFOK)) { + if (mf & MAILOK) { if (notifysw & NT_MAIL) { - printf(personal ? "You have " : "%s has ", user); - if (mf & UUCPOK) - printf("%s old-style bell", - mf & UUCPOLD ? "old" : "new"); - if ((mf & UUCPOK) && (mf & MMDFOK)) - printf(" and "); - if (mf & MMDFOK) - printf("%s%s", mf & MMDFOLD ? "old" : "new", - mf & UUCPOK ? " Internet" : ""); + if (personal) { + printf("You have "); + } else { + printf("%s has ", user); + } + if (mf & MAILOK) + printf(mf & MAILOLD ? "old" : "new"); printf(" mail waiting"); } else { notifysw = 0; } status = 0; - } - else { - if (notifysw & NT_NMAI) - printf(personal ? "You don't %s%s" : "%s doesn't %s", - personal ? "" : user, - "have any mail waiting"); - else + } else { + if (notifysw & NT_NMAI) { + if (personal) { + printf("You don't have any mail waiting"); + } else { + printf("%s doesn't have any mail waiting", + user); + } + } else { notifysw = 0; - + } status = 1; } - if (notifysw) - if (datesw && st.st_atime) + if (notifysw) { + if (datesw && st.st_atime) { printf("; last read on %s", dtime(&st.st_atime, 1)); - if (notifysw) + } printf("\n"); + } return status; }