Replaced mkinstalldirs with `mkdir -p'.
[mmh] / uip / msgchk.c
index 36edccb..932da20 100644 (file)
@@ -7,7 +7,6 @@
 */
 
 #include <h/mh.h>
-#include <h/mts.h>
 #include <h/tws.h>
 #include <pwd.h>
 
@@ -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;
 }