|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.