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

1.1     ! root        1: /* inc.c - incorporate messages from a maildrop into a folder */
        !             2: 
        !             3: #include "../h/mh.h"
        !             4: #ifdef POP
        !             5: #include "../h/dropsbr.h"
        !             6: #endif POP
        !             7: #include "../h/formatsbr.h"
        !             8: #include "../h/scansbr.h"
        !             9: #include "../zotnet/tws.h"
        !            10: #include <stdio.h>
        !            11: #include "../zotnet/mts.h"
        !            12: #include <errno.h>
        !            13: #include <signal.h>
        !            14: #include <sys/types.h>
        !            15: #include <sys/stat.h>
        !            16: 
        !            17: /*  */
        !            18: 
        !            19: static struct swit switches[] = {
        !            20: #define        AUDSW   0
        !            21:     "audit audit-file", 0,
        !            22: #define        NAUDSW  1
        !            23:     "noaudit", 0,
        !            24: 
        !            25: #define        CHGSW   2
        !            26:     "changecur", 0,
        !            27: #define        NCHGSW  3
        !            28:     "nochangecur", 0,
        !            29: 
        !            30: #define        DECRSW  4
        !            31:     "decrypt",
        !            32: #ifndef        TMA
        !            33:        -7,
        !            34: #else  TMA
        !            35:        0,
        !            36: #endif TMA
        !            37: #define        NDECRSW 5
        !            38:     "nodecrypt",
        !            39: #ifndef        TMA
        !            40:        -9,
        !            41: #else  TMA
        !            42:        0,
        !            43: #endif TMA
        !            44: 
        !            45: #define        MSW     6
        !            46:     "file name", 0,
        !            47: 
        !            48: #define        FORMSW  7
        !            49:     "form formatfile", 0,
        !            50: #define        FMTSW   8
        !            51:     "format string", 5,
        !            52: 
        !            53: #define        HOSTSW  9
        !            54:     "host host",
        !            55: #ifndef        POP
        !            56:        -4,
        !            57: #else  POP
        !            58:        0,
        !            59: #endif POP
        !            60: #define        USERSW  10
        !            61:     "user user",
        !            62: #ifndef        POP
        !            63:        -4,
        !            64: #else  POP
        !            65:        0,
        !            66: #endif POP
        !            67: #define        PACKSW  11
        !            68:     "pack file",
        !            69: #ifndef        POP
        !            70:        -4,
        !            71: #else  POP
        !            72:        0,
        !            73: #endif POP
        !            74: #define        NPACKSW 12
        !            75:     "nopack",
        !            76: #ifndef        POP
        !            77:        -6,
        !            78: #else  POP
        !            79:        0,
        !            80: #endif POP
        !            81: #define        RPOPSW  13
        !            82:     "rpop",
        !            83: #ifndef        RPOP
        !            84:        -4,
        !            85: #else  RPOP
        !            86:        0,
        !            87: #endif RPOP
        !            88: #define        NRPOPSW 14
        !            89:     "norpop",
        !            90: #ifndef        RPOP
        !            91:        -6,
        !            92: #else  RPOP
        !            93:        0,
        !            94: #endif RPOP
        !            95: 
        !            96: #define        SILSW   15
        !            97:     "silent", 0,
        !            98: #define        NSILSW  16
        !            99:     "nosilent", 0,
        !           100: 
        !           101: #define        TRNCSW  17
        !           102:     "truncate", 0,
        !           103: #define        NTRNCSW 18
        !           104:     "notruncate", 0,
        !           105: 
        !           106: #define        UUCPSW  19
        !           107:     "uucp",
        !           108: #ifndef        MF
        !           109:        -4,
        !           110: #else  MF
        !           111:        0,
        !           112: #endif MF
        !           113: #define        NUUCPSW 20
        !           114:     "nouucp",
        !           115: #ifndef        MF
        !           116:        -6,
        !           117: #else  MF
        !           118:        0,
        !           119: #endif MF
        !           120: 
        !           121: #define        WIDSW   21
        !           122:     "width columns", 0,
        !           123: 
        !           124: #define        HELPSW  22
        !           125:     "help", 4,
        !           126: 
        !           127:     NULL, NULL
        !           128: };
        !           129: 
        !           130: /*  */
        !           131: 
        !           132: extern int  errno;
        !           133: 
        !           134: #ifdef POP
        !           135: int  snoop = 0;
        !           136: extern char response[];
        !           137: 
        !           138: static  char *file = NULL;
        !           139: static int  size;
        !           140: static long pos;
        !           141: static long start;
        !           142: static long stop;
        !           143: 
        !           144: static  int   pd = NOTOK;
        !           145: static FILE *pf = NULL;
        !           146: 
        !           147: int    pop_action (), pop_pack ();
        !           148: #endif POP
        !           149: 
        !           150: /*  * /
        !           151: 
        !           152: /* ARGSUSED */
        !           153: 
        !           154: main (argc, argv)
        !           155: int    argc;
        !           156: char   *argv[];
        !           157: {
        !           158:     int     chgflag = 1,
        !           159:            trnflag = 1,
        !           160:            decflag = 1,
        !           161:             noisy = 1,
        !           162:            width = 0,
        !           163:            uucp = 1,
        !           164:            locked = 0,
        !           165: #ifdef POP
        !           166:            nmsgs,
        !           167:            nbytes,
        !           168:            p,
        !           169: #endif POP
        !           170:            rpop = 1,
        !           171:             i,
        !           172:            hghnum,
        !           173:             msgnum;
        !           174:     char   *cp,
        !           175:            *maildir,
        !           176:            *folder = NULL,
        !           177:           *form = NULL,
        !           178:           *format = NULL,
        !           179:            *audfile = NULL,
        !           180:            *from = NULL,
        !           181:           *host = NULL,
        !           182:           *user = NULL,
        !           183: #ifdef POP
        !           184:           *pass = NULL,
        !           185: #endif POP
        !           186:            *newmail,
        !           187:             buf[100],
        !           188:           **ap,
        !           189:           **argp,
        !           190:            *nfs,
        !           191:            *arguments[MAXARGS];
        !           192:     struct msgs *mp;
        !           193:     struct stat st,
        !           194:                 s1;
        !           195:     FILE *in, *aud;
        !           196: #ifdef MHE
        !           197:     FILE *mhe;
        !           198: #endif MHE
        !           199: 
        !           200:     invo_name = r1bindex (argv[0], '/');
        !           201:     mts_init (invo_name);
        !           202: #ifdef POP
        !           203:     if (pophost && *pophost)
        !           204:        host = pophost;
        !           205:     if ((cp = getenv ("MHPOPDEBUG")) && *cp)
        !           206:        snoop++;
        !           207: #endif POP
        !           208:     if ((cp = m_find (invo_name)) != NULL) {
        !           209:        ap = brkstring (cp = getcpy (cp), " ", "\n");
        !           210:        ap = copyip (ap, arguments);
        !           211:     }
        !           212:     else
        !           213:        ap = arguments;
        !           214:     (void) copyip (argv + 1, ap);
        !           215:     argp = arguments;
        !           216: 
        !           217: /*  */
        !           218: 
        !           219:     while (cp = *argp++) {
        !           220:        if (*cp == '-')
        !           221:            switch (smatch (++cp, switches)) {
        !           222:                case AMBIGSW: 
        !           223:                    ambigsw (cp, switches);
        !           224:                    done (1);
        !           225:                case UNKWNSW: 
        !           226:                    adios (NULLCP, "-%s unknown", cp);
        !           227:                case HELPSW: 
        !           228:                    (void) sprintf (buf, "%s [+folder] [switches]", invo_name);
        !           229:                    help (buf, switches);
        !           230:                    done (1);
        !           231: 
        !           232:                case AUDSW: 
        !           233:                    if (!(cp = *argp++) || *cp == '-')
        !           234:                        adios (NULLCP, "missing argument to %s", argp[-2]);
        !           235:                    audfile = getcpy (m_maildir (cp));
        !           236:                    continue;
        !           237:                case NAUDSW: 
        !           238:                    audfile = NULL;
        !           239:                    continue;
        !           240: 
        !           241:                case CHGSW: 
        !           242:                    chgflag++;
        !           243:                    continue;
        !           244:                case NCHGSW: 
        !           245:                    chgflag = 0;
        !           246:                    continue;
        !           247: 
        !           248:                case TRNCSW: 
        !           249:                    trnflag++;
        !           250:                    continue;
        !           251:                case MSW: 
        !           252:                    if (!(cp = *argp++) || *cp == '-')
        !           253:                        adios (NULLCP, "missing argument to %s", argp[-2]);
        !           254:                    from = path (cp, TFILE);/* fall */
        !           255:                case NTRNCSW: 
        !           256:                    trnflag = 0;
        !           257:                    continue;
        !           258: 
        !           259:                case SILSW: 
        !           260:                    noisy = 0;
        !           261:                    continue;
        !           262:                case NSILSW: 
        !           263:                    noisy++;
        !           264:                    continue;
        !           265: 
        !           266:                case FORMSW: 
        !           267:                    if (!(form = *argp++) || *form == '-')
        !           268:                        adios (NULLCP, "missing argument to %s", argp[-2]);
        !           269:                    format = NULL;
        !           270:                    continue;
        !           271:                case FMTSW: 
        !           272:                    if (!(format = *argp++) || *format == '-')
        !           273:                        adios (NULLCP, "missing argument to %s", argp[-2]);
        !           274:                    form = NULL;
        !           275:                    continue;
        !           276: 
        !           277:                case WIDSW: 
        !           278:                    if (!(cp = *argp++) || *cp == '-')
        !           279:                        adios (NULLCP, "missing argument to %s", argp[-2]);
        !           280:                    width = atoi (cp);
        !           281:                    continue;
        !           282: 
        !           283:                case DECRSW:
        !           284:                    decflag++;
        !           285:                    continue;
        !           286:                case NDECRSW:
        !           287:                    decflag = 0;
        !           288:                    continue;
        !           289: 
        !           290:                case UUCPSW: 
        !           291:                    uucp++;
        !           292:                    continue;
        !           293:                case NUUCPSW: 
        !           294:                    uucp = 0;
        !           295:                    continue;
        !           296: 
        !           297:                case HOSTSW:
        !           298:                    if (!(host = *argp++) || *host == '-')
        !           299:                        adios (NULLCP, "missing argument to %s", argp[-2]);
        !           300:                    continue;
        !           301:                case USERSW:
        !           302:                    if (!(user = *argp++) || *user == '-')
        !           303:                        adios (NULLCP, "missing argument to %s", argp[-2]);
        !           304:                    continue;
        !           305:                case PACKSW:
        !           306: #ifndef        POP
        !           307:                    if (!(cp = *argp++) || *cp == '-')
        !           308:                        adios (NULLCP, "missing argument to %s", argp[-2]);
        !           309: #else  POP
        !           310:                    if (!(file = *argp++) || *file == '-')
        !           311:                        adios (NULLCP, "missing argument to %s", argp[-2]);
        !           312: #endif POP
        !           313:                    continue;
        !           314:                case NPACKSW:
        !           315: #ifdef POP
        !           316:                    file = NULLCP;
        !           317: #endif POP
        !           318:                    continue;
        !           319:                case RPOPSW:
        !           320:                    rpop++;
        !           321:                    continue;
        !           322:                case NRPOPSW:
        !           323:                    rpop = 0;
        !           324:                    continue;
        !           325:            }
        !           326:        if (*cp == '+' || *cp == '@') {
        !           327:            if (folder)
        !           328:                adios (NULLCP, "only one folder at a time!");
        !           329:            else
        !           330:                folder = path (cp + 1, *cp == '+' ? TFOLDER : TSUBCWF);
        !           331:        }
        !           332:        else
        !           333:            adios (NULLCP, "usage: %s [+folder] [switches]", invo_name);
        !           334:     }
        !           335: 
        !           336: /*  */
        !           337: 
        !           338: #ifdef POP
        !           339:     if (host && !*host)
        !           340:        host = NULL;
        !           341:     if (from || !host || !rpop)
        !           342:        (void) setuid (getuid ());
        !           343: #endif POP
        !           344:     if (from) {
        !           345:        newmail = from;
        !           346: #ifdef POP
        !           347:        host = NULL;
        !           348: #endif POP
        !           349:        if (stat (newmail, &s1) == NOTOK || s1.st_size == 0)
        !           350:            adios (NULLCP, "no mail to incorporate");
        !           351:     }
        !           352: #ifdef POP
        !           353:     else if (host) {
        !           354:        if (rpop) {
        !           355:            if (user == NULL)
        !           356:                user = getusr ();
        !           357:            pass = getusr ();
        !           358:        }
        !           359:        else
        !           360:            ruserpass (host, &user, &pass);
        !           361: 
        !           362:        if (pop_init (host, user, pass, snoop, rpop) == NOTOK
        !           363:                || pop_stat (&nmsgs, &nbytes) == NOTOK)
        !           364:            adios (NULLCP, "%s", response);
        !           365:        if (rpop)
        !           366:            (void) setuid (getuid ());
        !           367:        if (nmsgs == 0) {
        !           368:            (void) pop_quit ();
        !           369:            adios (NULLCP, "no mail to incorporate");
        !           370:        }
        !           371:     }
        !           372: #endif POP
        !           373:     else {
        !           374:        if (((newmail = getenv ("MAILDROP")) && *newmail)
        !           375:                || ((newmail = m_find ("maildrop")) && *newmail))
        !           376:            newmail = m_mailpath (newmail);
        !           377:        else {
        !           378: #ifdef MF
        !           379:            if (uucp && umincproc && *umincproc)
        !           380:                get_uucp_mail ();
        !           381: #endif MF
        !           382:            newmail = concat (MAILDIR, "/", MAILFIL, NULLCP);
        !           383:        }
        !           384:        if (stat (newmail, &s1) == NOTOK || s1.st_size == 0)
        !           385:            adios (NULLCP, "no mail to incorporate");
        !           386:     }
        !           387: 
        !           388: #ifdef POP
        !           389:     if (host && file)
        !           390:        goto go_to_it;
        !           391: #endif POP
        !           392:     if (!m_find ("path"))
        !           393:        free (path ("./", TFOLDER));
        !           394:     if (!folder)
        !           395:        folder = defalt;
        !           396:     maildir = m_maildir (folder);
        !           397: 
        !           398:     if (stat (maildir, &st) == NOTOK) {
        !           399:        if (errno != ENOENT)
        !           400:            adios (maildir, "error on folder");
        !           401:        cp = concat ("Create folder \"", maildir, "\"? ", NULLCP);
        !           402:        if (noisy && !getanswer (cp))
        !           403:            done (1);
        !           404:        free (cp);
        !           405:        if (!makedir (maildir))
        !           406:            adios (NULLCP, "unable to create folder %s", maildir);
        !           407:     }
        !           408: 
        !           409:     if (chdir (maildir) == NOTOK)
        !           410:        adios (maildir, "unable to change directory to");
        !           411:     if (!(mp = m_gmsg (folder)))
        !           412:        adios (NULLCP, "unable to read folder %s", folder);
        !           413: 
        !           414: /*  */
        !           415: 
        !           416: #ifdef POP
        !           417: go_to_it: ;
        !           418:     if (host == NULL)
        !           419: #endif POP
        !           420:     if (access (newmail, 02) == NOTOK) {
        !           421:        trnflag = 0;
        !           422:        if ((in = fopen (newmail, "r")) == NULL)
        !           423:            adios (newmail, "unable to read");
        !           424:     }
        !           425:     else {
        !           426:        locked++;
        !           427:        if (trnflag) {
        !           428:            (void) signal (SIGHUP, SIG_IGN);
        !           429:            (void) signal (SIGINT, SIG_IGN);
        !           430:            (void) signal (SIGQUIT, SIG_IGN);
        !           431:            (void) signal (SIGTERM, SIG_IGN);
        !           432:        }
        !           433:        if ((in = lkfopen (newmail, "r")) == NULL)
        !           434:            adios (NULLCP, "unable to lock and fopen %s", newmail);
        !           435:        (void) fstat (fileno(in), &s1);
        !           436:     }
        !           437: 
        !           438:     if (audfile) {
        !           439:        if ((i = stat (audfile, &st)) == NOTOK)
        !           440:            advise (NULLCP, "Creating Receive-Audit: %s", audfile);
        !           441:        if ((aud = fopen (audfile, "a")) == NULL)
        !           442:            adios (audfile, "unable to append to");
        !           443:        else
        !           444:            if (i == NOTOK)
        !           445:                (void) chmod (audfile, m_gmprot ());
        !           446: #ifndef        POP
        !           447:        fprintf (aud, from ? "<<inc>> %s  -ms %s\n" : "<<inc>> %s\n",
        !           448:                dtimenow (), from);
        !           449: #else  POP
        !           450:        fprintf (aud, from ? "<<inc>> %s -ms %s\n"
        !           451:                        : host ? "<<inc>> %s -host %s -user %s%s\n"
        !           452:                        : "<<inc>> %s\n",
        !           453:                dtimenow (), from ? from : host, user, rpop ? " -rpop" : "");
        !           454: #endif POP
        !           455:     }
        !           456: 
        !           457: #ifdef MHE
        !           458:     if (m_find ("mhe")) {
        !           459:        cp = concat (maildir, "/++", NULLCP);
        !           460:        i = stat (cp, &st);
        !           461:        if ((mhe = fopen (cp, "a")) == NULL)
        !           462:            admonish (cp, "unable to append to");
        !           463:        else
        !           464:            if (i == NOTOK)
        !           465:                (void) chmod (cp, m_gmprot ());
        !           466:        free (cp);
        !           467:     }
        !           468: #endif MHE
        !           469: 
        !           470:     nfs = new_fs (form, format, FORMAT);
        !           471: 
        !           472:     if (noisy) {
        !           473:        printf ("Incorporating new mail into %s...\n\n", folder);
        !           474:        (void) fflush (stdout);
        !           475:     }
        !           476: 
        !           477: /*  */
        !           478: 
        !           479: #ifdef POP
        !           480:     if (host) {
        !           481:        if (file) {
        !           482:            file = path (file, TFILE);
        !           483:            if (stat (file, &st) == NOTOK) {
        !           484:                if (errno != ENOENT)
        !           485:                    adios (file, "error on file");
        !           486:                cp = concat ("Create file \"", file, "\"? ", NULLCP);
        !           487:                if (noisy && !getanswer (cp))
        !           488:                    done (1);
        !           489:                free (cp);
        !           490:            }
        !           491:            msgnum = map_count ();
        !           492:            if ((pd = mbx_open (file, getuid (), getgid (), m_gmprot ()))
        !           493:                    == NOTOK)
        !           494:                adios (file, "unable to open");
        !           495:            if ((pf = fdopen (pd, "w+")) == NULL)
        !           496:                adios (NULLCP, "unable to fdopen %s", file);
        !           497:        }
        !           498:        else {
        !           499:            hghnum = msgnum = mp -> hghmsg;
        !           500:            if ((mp = m_remsg (mp, 0, mp -> hghmsg + nmsgs)) == NULL)
        !           501:                adios (NULLCP, "unable to allocate folder storage");
        !           502:        }
        !           503: 
        !           504:        for (i = 1; i <= nmsgs; i++) {
        !           505:            msgnum++;
        !           506:            if (file) {
        !           507:                (void) fseek (pf, 0L, 1);
        !           508:                pos = ftell (pf);
        !           509:                size = 0;
        !           510:                (void) fwrite (mmdlm1, 1, strlen (mmdlm1), pf);
        !           511:                start = ftell (pf);
        !           512: 
        !           513:                if (pop_retr (i, pop_pack) == NOTOK)
        !           514:                    adios (NULLCP, "%s", response);
        !           515: 
        !           516:                (void) fseek (pf, 0L, 1);
        !           517:                stop = ftell (pf);
        !           518:                if (fflush (pf))
        !           519:                    adios (file, "write error on");
        !           520:                (void) fseek (pf, start, 0);
        !           521:            }
        !           522:            else {
        !           523:                cp = getcpy (m_name (msgnum));
        !           524:                if ((pf = fopen (cp, "w+")) == NULL)
        !           525:                    adios (cp, "unable to write");
        !           526:                (void) chmod (cp, m_gmprot ());
        !           527:                start = stop = 0L;
        !           528: 
        !           529:                if (pop_retr (i, pop_action) == NOTOK)
        !           530:                    adios (NULLCP, "%s", response);
        !           531: 
        !           532:                if (fflush (pf))
        !           533:                    adios (cp, "write error on");
        !           534:                (void) fseek (pf, 0L, 0);
        !           535:            }
        !           536:            switch (p = scan (pf, msgnum, 0, nfs, width,
        !           537:                        file ? 0 : msgnum == mp -> hghmsg + 1 && chgflag,
        !           538:                        0, stop - start, noisy)) {
        !           539:                case SCNEOF: 
        !           540:                    printf ("%*d  empty\n", DMAXFOLDER, msgnum);
        !           541:                    break;
        !           542: 
        !           543:                case SCNERR: 
        !           544:                case SCNNUM: 
        !           545:                    break;
        !           546: 
        !           547:                case SCNMSG: 
        !           548:                case SCNENC:
        !           549:                default: 
        !           550:                    if (aud)
        !           551:                        fputs (scanl, aud);
        !           552: #ifdef MHE
        !           553:                    if (mhe)
        !           554:                        fputs (scanl, mhe);
        !           555: #endif MHE
        !           556:                    if (noisy)
        !           557:                        (void) fflush (stdout);
        !           558:                    if (!file) {
        !           559:                        mp -> msgstats[msgnum] = EXISTS;
        !           560: #ifdef TMA
        !           561:                        if (p == SCNENC) {
        !           562:                            if (mp -> lowsel == 0 || msgnum < mp -> lowsel)
        !           563:                                mp -> lowsel = msgnum;
        !           564:                            if (mp -> hghsel == 0 || msgnum > mp -> hghsel)
        !           565:                                mp -> hghsel = msgnum;
        !           566:                            mp -> numsel++;
        !           567:                            mp -> msgstats[msgnum] |= SELECTED;
        !           568:                        }
        !           569: #endif TMA
        !           570:                        mp -> msgstats[msgnum] |= UNSEEN;
        !           571:                        mp -> msgflags |= SEQMOD;
        !           572:                    }
        !           573:                    break;
        !           574:                }
        !           575:            if (file) {
        !           576:                (void) fseek (pf, stop, 0);
        !           577:                (void) fwrite (mmdlm2, 1, strlen (mmdlm2), pf);
        !           578:                if (fflush (pf))
        !           579:                    adios (file, "write error on");
        !           580:                (void) map_write (file, pd, 0, start, stop, pos, size, noisy);
        !           581:            }
        !           582:            else {
        !           583:                (void) fclose (pf);
        !           584:                free (cp);
        !           585:            }
        !           586: 
        !           587:            if (trnflag && pop_dele (i) == NOTOK)
        !           588:                adios (NULLCP, "%s", response);
        !           589:        }
        !           590:        if (pop_quit () == NOTOK)
        !           591:            adios (NULLCP, "%s", response);
        !           592:        if (file) {
        !           593:            (void) mbx_close (file, pd);
        !           594:            pd = NOTOK;
        !           595:        }
        !           596:     }
        !           597:     else {
        !           598: #endif POP
        !           599: 
        !           600: /*  */
        !           601: 
        !           602:     m_unknown (in);            /* the MAGIC invocation... */
        !           603:     hghnum = msgnum = mp -> hghmsg;
        !           604:     for (;;) {
        !           605:        if (msgnum >= mp -> hghoff)
        !           606:            if ((mp = m_remsg (mp, 0, mp -> hghoff + MAXFOLDER)) == NULL)
        !           607:                adios (NULLCP, "unable to allocate folder storage");
        !           608: 
        !           609:        switch (i = scan (in, msgnum + 1, msgnum + 1, nfs, width,
        !           610:                    msgnum == hghnum && chgflag,
        !           611:                    0,
        !           612:                    0L,
        !           613:                    noisy)) {
        !           614:            case SCNEOF: 
        !           615:                break;
        !           616: 
        !           617:            case SCNERR: 
        !           618:                if (aud)
        !           619:                    fputs ("inc aborted!\n", aud);
        !           620:                adios (NULLCP, "aborted!");
        !           621: 
        !           622:            case SCNNUM: 
        !           623:                adios (NULLCP, "more than %d messages in folder %s, %s not zero'd",
        !           624:                        MAXFOLDER, folder, newmail);
        !           625: 
        !           626:            default: 
        !           627:                adios (NULLCP, "scan() botch (%d)", i);
        !           628: 
        !           629:            case SCNMSG:
        !           630:            case SCNENC:
        !           631:                if (aud)
        !           632:                    fputs (scanl, aud);
        !           633: #ifdef MHE
        !           634:                if (mhe)
        !           635:                    fputs (scanl, mhe);
        !           636: #endif MHE
        !           637:                if (noisy)
        !           638:                    (void) fflush (stdout);
        !           639: 
        !           640:                msgnum++, mp -> hghmsg++;
        !           641:                mp -> msgstats[msgnum] = EXISTS;
        !           642: #ifdef TMA
        !           643:                if (i == SCNENC) {
        !           644:                    if (mp -> lowsel == 0 || mp -> lowsel > msgnum)
        !           645:                        mp -> lowsel = msgnum;
        !           646:                    if (mp -> hghsel == 0 || mp -> hghsel < msgnum)
        !           647:                        mp -> hghsel = msgnum;
        !           648:                    mp -> numsel++;
        !           649:                    mp -> msgstats[msgnum] |= SELECTED;
        !           650:                }
        !           651: #endif TMA
        !           652:                mp -> msgstats[msgnum] |= UNSEEN;
        !           653:                mp -> msgflags |= SEQMOD;
        !           654:                continue;
        !           655:        }
        !           656:        break;
        !           657:     }
        !           658: #ifdef POP
        !           659:     }
        !           660: #endif POP
        !           661: 
        !           662:     if (aud)
        !           663:        (void) fclose (aud);
        !           664: #ifdef MHE
        !           665:     if (mhe)
        !           666:        (void) fclose (mhe);
        !           667: #endif MHE
        !           668:     if (noisy)
        !           669:        (void) fflush (stdout);
        !           670: #ifdef POP
        !           671:     if (host && file)
        !           672:        done (0);
        !           673: #endif POP
        !           674: 
        !           675: /*  */
        !           676: 
        !           677: #ifdef POP
        !           678:     if (host == NULL)
        !           679: #endif POP
        !           680:     if (trnflag) {
        !           681:        if (stat (newmail, &st) != NOTOK && s1.st_mtime != st.st_mtime)
        !           682:            advise (NULLCP, "new messages have arrived!\007");
        !           683:        else {
        !           684:            if ((i = creat (newmail, 0600)) != NOTOK)
        !           685:                (void) close (i);
        !           686:            else
        !           687:                admonish (newmail, "error zero'ing");
        !           688:            (void) unlink (map_name (newmail));
        !           689:        }
        !           690:     }
        !           691:     else
        !           692:        if (noisy)
        !           693:            printf ("%s not zero'd\n", newmail);
        !           694: 
        !           695:     if (msgnum == hghnum)
        !           696:        admonish (NULLCP, "no messages incorporated");
        !           697:     else {
        !           698:        m_replace (pfolder, folder);
        !           699:        if (chgflag)
        !           700:            mp -> curmsg = hghnum + 1;
        !           701:        mp -> hghmsg = msgnum;
        !           702:        if (mp -> lowmsg == 0)
        !           703:            mp -> lowmsg = 1;
        !           704:        if (chgflag)            /* sigh... */
        !           705:            m_setcur (mp, mp -> curmsg);
        !           706:     }
        !           707: 
        !           708: #ifdef POP
        !           709:     if (host == NULL)
        !           710: #endif POP
        !           711:     if (locked)
        !           712:        (void) lkfclose (in, newmail);
        !           713:     else
        !           714:        (void) fclose (in);
        !           715: 
        !           716:     m_setvis (mp, 0);
        !           717:     m_sync (mp);
        !           718:     m_update ();
        !           719: 
        !           720: #ifdef TMA
        !           721:     if (decflag && mp -> numsel > 0) {
        !           722:        if (noisy) {
        !           723:            printf ("\nIncorporating encrypted mail into %s...\n\n", folder);
        !           724:            (void) fflush (stdout);
        !           725:        }
        !           726: 
        !           727:        tmastart ();
        !           728:        for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
        !           729:            if (mp -> msgstats[msgnum] & SELECTED && decipher (msgnum) == OK) {
        !           730:                if ((in = fopen (cp = m_name (msgnum), "r")) == NULL) {
        !           731:                    admonish (cp, "unable to open message");
        !           732:                    free (cp);
        !           733:                    continue;
        !           734:                }
        !           735:                switch (scan (in, msgnum, 0, nfs, width,
        !           736:                        msgnum == mp -> curmsg,
        !           737:                        0,
        !           738:                        fstat (fileno (in), &st) != NOTOK ? (long) st.st_size
        !           739:                            : 0L,
        !           740:                        noisy)) {
        !           741:                    case SCNEOF: 
        !           742:                        printf ("%*d  empty\n", DMAXFOLDER, msgnum);
        !           743:                        break;
        !           744: 
        !           745:                    default: 
        !           746:                        break;
        !           747:                }
        !           748:                (void) fclose (in);
        !           749:                free (cp);
        !           750:            }
        !           751:        tmastop ();
        !           752: 
        !           753:        if (noisy)
        !           754:            (void) fflush (stdout);
        !           755:     }
        !           756: #endif TMA
        !           757: 
        !           758:     done (0);
        !           759: }
        !           760: 
        !           761: /*  */
        !           762: 
        !           763: #ifdef POP
        !           764: void   done (status)
        !           765: int    status;
        !           766: {
        !           767:     if (file && pd != NOTOK)
        !           768:        (void) mbx_close (file, pd);
        !           769: 
        !           770:     exit (status);
        !           771: }
        !           772: #endif POP
        !           773: /*  */
        !           774: 
        !           775: #ifdef MF
        !           776: get_uucp_mail () {
        !           777:     int     child_id;
        !           778:     char    buffer[BUFSIZ];
        !           779:     struct stat st;
        !           780: 
        !           781:     (void) sprintf (buffer, "%s/%s", UUCPDIR, UUCPFIL);
        !           782:     if (stat (buffer, &st) == NOTOK || st.st_size == 0)
        !           783:        return;
        !           784: 
        !           785:     switch (child_id = vfork ()) {
        !           786:        case NOTOK: 
        !           787:            admonish ("fork", "unable to");
        !           788:            break;
        !           789: 
        !           790:        case OK: 
        !           791:            execlp (umincproc, r1bindex (umincproc, '/'), NULLCP);
        !           792:            fprintf (stderr, "unable to exec ");
        !           793:            perror (umincproc);
        !           794:            _exit (-1);
        !           795: 
        !           796:        default: 
        !           797:            (void) pidXwait (child_id, umincproc);
        !           798:            break;
        !           799:     }
        !           800: }
        !           801: #endif MF
        !           802: 
        !           803: /*  */
        !           804: 
        !           805: #ifdef POP
        !           806: static int  pop_action (s)
        !           807: register char *s;
        !           808: {
        !           809:     fprintf (pf, "%s\n", s);
        !           810:     stop += strlen (s) + 1;
        !           811: }
        !           812: 
        !           813: 
        !           814: static int  pop_pack (s)
        !           815: register char *s;
        !           816: {
        !           817:     register int    j;
        !           818:     char    buffer[BUFSIZ];
        !           819: 
        !           820:     (void) sprintf (buffer, "%s\n", s);
        !           821:     for (j = 0; (j = stringdex (mmdlm1, buffer)) >= 0; buffer[j]++)
        !           822:        continue;
        !           823:     for (j = 0; (j = stringdex (mmdlm2, buffer)) >= 0; buffer[j]++)
        !           824:        continue;
        !           825:     fputs (buffer, pf);
        !           826:     size += strlen (buffer) + 1;
        !           827: }
        !           828: 
        !           829: static int  map_count () {
        !           830:     int     md;
        !           831:     char   *cp;
        !           832:     struct drop d;
        !           833:     struct stat st;
        !           834: 
        !           835:     if (stat (file, &st) == NOTOK)
        !           836:        return 0;
        !           837:     if ((md = open (cp = map_name (file), 0)) == NOTOK
        !           838:            || map_chk (cp, md, &d, (long) st.st_size, 1)) {
        !           839:        if (md != NOTOK)
        !           840:            (void) close (md);
        !           841:        return 0;
        !           842:     }
        !           843:     (void) close (md);
        !           844:     return (d.d_id);
        !           845: }
        !           846: #endif POP

unix.superglobalmegacorp.com

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