/* * rmail: a q&d rmail program for bauble */ #include #include #include #include #include extern char *itob36(); extern char *rfcdate(); char rmt_sys[16]; int rmt_seq; char rmt_zseq[4]; char program[] = "rmail"; static char currentdir[200]; main(argc, argv) char **argv; { FILE *mail; char text[200]; long mark, here, size; register char *p; char *user; int sys_len; char *self; if (argc < 2) exit(1); if (!getcfg()) exit(2); if ((self = getenv("LOGNAME")) == (char *)0) self = "uucp"; user = argv[1]; if (user[0] == '!') ++user; if (p=strchr(user, '!')) { #if MSDOS|OS2 getcwd(currentdir, 200); #endif if (xchdir(SPOOL) != 0) exit(1); sys_len = (int)(p-user); strncpy(rmt_sys, user, sys_len); rmt_sys[sys_len] = 0; user = ++p; if (*user && findsys(rmt_sys)) { rmt_seq = getseq(); strcpy(rmt_zseq, itob36(rmt_seq)); sprintf(text, "D%s.%s", rmt_sys, rmt_zseq); if (mail=fopen(text, "wb")) { if (fgets(text, 200, stdin)) { if (strncmp(text, "From ", 5) != 0) fprintf(mail, "From %s %s remote from %s\n", self, rfcdate(), SITE); fputs(text, mail); while (fgets(text, 200, stdin)) fputs(text, mail); } fclose(mail); sprintf(text, "X%s.%s", rmt_sys, rmt_zseq); if (mail = fopen(text, "wb")) { fprintf(mail, "U uucp %s\n", SITE); fprintf(mail, "F D.%sbc%04x\n", rmt_sys, rmt_seq); fprintf(mail, "I D.%sbc%04x\n", rmt_sys, rmt_seq); fprintf(mail, "C rmail %s\n", user); fclose(mail); if (mail = fopen(rmt_sys, "a")) { fprintf(mail, " %3sS D%s.%s D.%sbc%04x uucp - D%s.%s 0666 uucp\n", rmt_zseq, rmt_sys, rmt_zseq, rmt_sys, rmt_seq, rmt_sys, rmt_zseq); fprintf(mail, " %3sS X%s.%s X.%sbc%04x uucp - X%s.%s 0666 uucp\n", rmt_zseq, rmt_sys, rmt_zseq, rmt_sys, rmt_seq, rmt_sys, rmt_zseq); fclose(mail); } } } } #if MSDOS|OS2 xchdir(currentdir); #endif } else { if ((mail=fopen(makepath(text, MAIL, user), "r+")) == (FILE*)0) mail=fopen(text, "w+"); if (mail) { fseek(mail, 0L, SEEK_END); mark = ftell(mail); fprintf(mail, "!%8ld\n", 0L); fflush(mail); here=ftell(mail); if (fgets(text, 200, stdin)) { if (strncmp(text, "From ", 5) != 0) fprintf(mail, "From %s %s\n", self, rfcdate()); fputs(text, mail); while (fgets(text, 200, stdin)) fputs(text, mail); } fflush(mail); size = ftell(mail)-here; fseek(mail, mark, SEEK_SET); fprintf(mail, "!%8ld\n", size); fclose(mail); } else { fprintf(stderr, "rmail: can't access %s\n", text); exit(1); } } exit(0); } /* rmail */