Annotation of 43BSD/contrib/mh/uip/msgchk.c, revision 1.1

1.1     ! root        1: /* msgchk.c - check for mail */
        !             2: 
        !             3: #include "../h/mh.h"
        !             4: #include <stdio.h>
        !             5: #include "../zotnet/mts.h"
        !             6: #include <sys/types.h>
        !             7: #include <sys/stat.h>
        !             8: #include <pwd.h>
        !             9: 
        !            10: /*  */
        !            11: 
        !            12: static struct swit switches[] = {
        !            13: #define        HELPSW  0
        !            14:     "help", 4,
        !            15: 
        !            16: #ifdef POP
        !            17: #define        HOSTSW  1
        !            18:     "host host", 0,
        !            19: #define        USERSW  2
        !            20:     "user user", 0,
        !            21: 
        !            22: #define        RPOPSW  3
        !            23:     "rpop", 0,
        !            24: #define        NRPOPSW 4
        !            25:     "norpop", 0,
        !            26: #endif POP
        !            27: 
        !            28: 
        !            29:     NULL, NULL
        !            30: };
        !            31: 
        !            32: /*  */
        !            33: 
        !            34: #define        NONEOK  0x0
        !            35: #define        UUCPOLD 0x1
        !            36: #define        UUCPNEW 0x2
        !            37: #define        UUCPOK  (UUCPOLD | UUCPNEW)
        !            38: #define        MMDFOLD 0x4
        !            39: #define        MMDFNEW 0x8
        !            40: #define        MMDFOK  (MMDFOLD | MMDFNEW)
        !            41: 
        !            42: 
        !            43: #ifdef POP
        !            44: int    snoop = 0;
        !            45: #endif POP
        !            46: 
        !            47: 
        !            48: #ifdef SYS5
        !            49: struct passwd  *getpwuid(), *getpwnam();
        !            50: #endif SYS5
        !            51: 
        !            52: /*  */
        !            53: 
        !            54: /* ARGSUSED */
        !            55: 
        !            56: main (argc, argv)
        !            57: int     argc;
        !            58: char   *argv[];
        !            59: {
        !            60:     int     vecp = 0;
        !            61: #ifdef POP
        !            62:     int            rpop = 1;
        !            63: #endif POP
        !            64:     char   *cp,
        !            65: #ifdef POP
        !            66:            *host = NULL,
        !            67: #endif POP
        !            68:             buf[80],
        !            69:          **ap,
        !            70:           **argp,
        !            71:           *arguments[MAXARGS],
        !            72:            *vec[50];
        !            73:     struct passwd  *pw;
        !            74: 
        !            75:     invo_name = r1bindex (argv[0], '/');
        !            76:     mts_init (invo_name);
        !            77: #ifdef POP
        !            78:     if (pophost && *pophost)
        !            79:        host = pophost;
        !            80:     if ((cp = getenv ("MHPOPDEBUG")) && *cp)
        !            81:        snoop++;
        !            82: #endif POP
        !            83:     if ((cp = m_find (invo_name)) != NULL) {
        !            84:        ap = brkstring (cp = getcpy (cp), " ", "\n");
        !            85:        ap = copyip (ap, arguments);
        !            86:     }
        !            87:     else
        !            88:        ap = arguments;
        !            89:     (void) copyip (argv + 1, ap);
        !            90:     argp = arguments;
        !            91: 
        !            92: /*  */
        !            93: 
        !            94:     while (cp = *argp++) {
        !            95:        if (*cp == '-')
        !            96:            switch (smatch (++cp, switches)) {
        !            97:                case AMBIGSW: 
        !            98:                    ambigsw (cp, switches);
        !            99:                    done (1);
        !           100:                case UNKWNSW: 
        !           101:                    adios (NULLCP, "-%s unknown", cp);
        !           102:                case HELPSW: 
        !           103:                    (void) sprintf (buf, "%s [switches] [users ...]",
        !           104:                            invo_name);
        !           105:                    help (buf, switches);
        !           106:                    done (1);
        !           107: 
        !           108: #ifdef POP
        !           109:                case HOSTSW: 
        !           110:                    if (!(host = *argp++) || *host == '-')
        !           111:                        adios (NULLCP, "missing argument to %s", argp[-2]);
        !           112:                    continue;
        !           113:                case USERSW: 
        !           114:                    if (!(cp = *argp++) || *cp == '-')
        !           115:                        adios (NULLCP, "missing argument to %s", argp[-2]);
        !           116:                    vec[vecp++] = cp;
        !           117:                    continue;
        !           118:                case RPOPSW: 
        !           119:                    rpop++;
        !           120:                    continue;
        !           121:                case NRPOPSW: 
        !           122:                    rpop = 0;
        !           123:                    continue;
        !           124: #endif POP
        !           125:            }
        !           126:        vec[vecp++] = cp;
        !           127:     }
        !           128: 
        !           129: /*  */
        !           130: 
        !           131: #ifdef POP
        !           132:     if (!*host)
        !           133:        host = NULL;
        !           134:     if (!host || !rpop)
        !           135:        (void) setuid (getuid ());
        !           136: #endif POP
        !           137:     if (vecp == 0) {
        !           138: #ifdef POP
        !           139:        if (host)
        !           140:            remotemail (host, NULLCP, rpop, 1);
        !           141:        else
        !           142: #endif POP
        !           143:            if ((pw = getpwuid (getuid ())) == NULL)
        !           144:                adios (NULLCP, "you lose");
        !           145:            else
        !           146:                checkmail (pw, 1);
        !           147:     }
        !           148:     else {
        !           149:        vec[vecp] = NULL;
        !           150: 
        !           151:        for (vecp = 0; cp = vec[vecp]; vecp++)
        !           152: #ifdef POP
        !           153:            if (host)
        !           154:                remotemail (host, cp, rpop, 0);
        !           155:            else
        !           156: #endif POP
        !           157:                if (pw = getpwnam (cp))
        !           158:                    checkmail (pw, 0);
        !           159:                else
        !           160:                    advise (NULLCP, "no such user as %s", cp);
        !           161:     }
        !           162: 
        !           163:     done (0);
        !           164: }
        !           165: 
        !           166: /*  */
        !           167: 
        !           168: checkmail (pw, personal)
        !           169: register struct passwd  *pw;
        !           170: int    personal;
        !           171: {
        !           172:     int     mf;
        !           173:     char    buffer[BUFSIZ];
        !           174:     struct stat st;
        !           175: 
        !           176:     (void) sprintf (buffer, "%s/%s",
        !           177:            mmdfldir[0] ? mmdfldir : pw -> pw_dir,
        !           178:            mmdflfil[0] ? mmdflfil : pw -> pw_name);
        !           179:     mf = (stat (buffer, &st) == NOTOK || st.st_size == 0) ? NONEOK
        !           180:        : st.st_atime <= st.st_mtime ? MMDFNEW : MMDFOLD;
        !           181: 
        !           182: #ifdef MF
        !           183:     if (umincproc != NULL && *umincproc != NULL) {
        !           184:        (void) sprintf (buffer, "%s/%s",
        !           185:                uucpldir[0] ? uucpldir : pw -> pw_dir,
        !           186:                uucplfil[0] ? uucplfil : pw -> pw_name);
        !           187:        mf |= (stat (buffer, &st) == NOTOK || st.st_size == 0) ? NONEOK
        !           188:            : st.st_atime <= st.st_mtime ? UUCPNEW : UUCPOLD;
        !           189:     }
        !           190: #endif MF
        !           191: 
        !           192:     if ((mf & UUCPOK) || (mf & MMDFOK)) {
        !           193:        printf (personal ? "You have " : "%s has ", pw -> pw_name);
        !           194:        if (mf & UUCPOK)
        !           195:            printf ("%s old-style bell",
        !           196:                    mf & UUCPOLD ? "old" : "new");
        !           197:        if ((mf & UUCPOK) && (mf & MMDFOK))
        !           198:            printf (" and ");
        !           199:        if (mf & MMDFOK)
        !           200:            printf ("%s Internet",
        !           201:                    mf & MMDFOLD ? "old" : "new");
        !           202:        printf (" mail waiting\n");
        !           203:     }
        !           204:     else
        !           205:        printf (personal ? "You don't %s%s" : "%s doesn't %s",
        !           206:                personal ? "" : pw -> pw_name, "have any mail waiting\n");
        !           207: }
        !           208: 
        !           209: /*  */
        !           210: 
        !           211: #ifdef POP
        !           212: extern char response[];
        !           213: 
        !           214: 
        !           215: remotemail (host, user, rpop, personal)
        !           216: register char   *host;
        !           217: char   *user;
        !           218: int    rpop,
        !           219:        personal;
        !           220: {
        !           221:     int     nmsgs,
        !           222:             nbytes;
        !           223:     char   *pass;
        !           224: 
        !           225:     if (rpop) {
        !           226:        if (user == NULL)
        !           227:            user = getusr ();
        !           228:        pass = getusr ();
        !           229:     }
        !           230:     else
        !           231:        ruserpass (host, &user, &pass);
        !           232: 
        !           233:     if (pop_init (host, user, pass, snoop, rpop) == NOTOK
        !           234:            || pop_stat (&nmsgs, &nbytes) == NOTOK
        !           235:            || pop_quit () == NOTOK) {
        !           236:        advise (NULLCP, "%s", response);
        !           237:        return;
        !           238:     }
        !           239: 
        !           240:     if (nmsgs) {
        !           241:        printf (personal ? "You have " : "%s has ", user);
        !           242:        printf ("%d message%s (%d bytes)",
        !           243:                nmsgs, nmsgs != 1 ? "s" : "", nbytes);
        !           244:     }
        !           245:     else
        !           246:        printf (personal ? "You don't %s%s" : "%s doesn't %s",
        !           247:                personal ? "" : user, "have any mail waiting");
        !           248:     printf (" on %s\n", host);
        !           249: }
        !           250: #endif POP

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.