|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include <sys/stat.h> ! 3: #include <access.h> ! 4: #include "mail.h" ! 5: ! 6: char *parent(); ! 7: char keyname[64]; /* Destination public key file name */ ! 8: ! 9: ! 10: /* ! 11: * Check access on a file. ! 12: */ ! 13: maccess(name) ! 14: char *name; ! 15: { ! 16: struct stat sb; ! 17: ! 18: if (stat(name, &sb) < 0) { ! 19: if (access(parent(name), ACREAT) < 0) ! 20: return (-1); ! 21: } else if (access(name, AWRITE) < 0) ! 22: return (-1); ! 23: return (0); ! 24: } ! 25: ! 26: /* ! 27: * Check enrollment for xmail. ! 28: */ ! 29: xaccess(name) char *name; ! 30: { ! 31: struct stat sb; ! 32: sprintf(keyname, "%s%s", PUBKEYDIR, name); ! 33: return stat(keyname, &sb) >= 0; ! 34: } ! 35: /* ! 36: * Find the parent directory for access permissions. ! 37: */ ! 38: char * ! 39: parent(name) ! 40: char *name; ! 41: { ! 42: register char *cp, *xp; ! 43: static char p[256]; ! 44: char *rindex(); ! 45: ! 46: xp = rindex(name, '/'); ! 47: if (xp == NULL) ! 48: return ("."); ! 49: if (xp == name) ! 50: return ("/"); ! 51: if (xp - name >= 256) ! 52: return (""); ! 53: cp = p; ! 54: while (name < xp) ! 55: *cp++ = *name++; ! 56: *cp = 0; ! 57: return (p); ! 58: } ! 59: ! 60: /* ! 61: * Copy from the file stream `ifp' (starting at ! 62: * position `start' and ending at `end' or EOF) ! 63: * to the file stream `ofp' which is assumed ! 64: * to be already correctly positioned. ! 65: * Returns non-zero on errors. ! 66: * intstop == 1 means stop on interrupt ! 67: * intstop == 0 means ignore interrupt ! 68: */ ! 69: mcopy(ifp, ofp, start, end, intstop) ! 70: register FILE *ifp, *ofp; ! 71: fsize_t start, end; ! 72: { ! 73: register int c; ! 74: ! 75: fseek(ifp, start, 0); ! 76: end -= start; ! 77: if (intstop) ! 78: while (!intcheck() && end-- > 0 && (c = getc(ifp))!=EOF) ! 79: putc(c, ofp); ! 80: else ! 81: while (end-- > 0 && (c = getc(ifp))!=EOF) ! 82: putc(c, ofp); ! 83: fflush(ofp); ! 84: if (ferror(ofp)) ! 85: return (1); ! 86: return (0); ! 87: } ! 88: ! 89: char helpmessage[] = "\ ! 90: \ ! 91: mail -- computer mail\n\ ! 92: xmail -- secret computer mail\n\ ! 93: Usage: mail [ options ] [ user ... ]\n\ ! 94: or: xmail [ options ] user [ ... ]\n\ ! 95: Options:\n\ ! 96: -f file Print mail from 'file' instead of the default\n\ ! 97: -p Print mail non-interactively\n\ ! 98: -q Exit on interrupt, leaving mail unchanged\n\ ! 99: -r Print mail in reverse order, latest first\n\ ! 100: If 'user' is present, send each a mail message read from standard input.\n\ ! 101: If 'xmail' is the command, use xencode to encrypt the mail messages.\n\ ! 102: Mail message ends with EOF of a line containing only '.'. Otherwise, read\n\ ! 103: and print the invoking user's mailbox.\n\ ! 104: \ ! 105: "; ! 106: ! 107: usage() ! 108: { ! 109: mmsg(helpmessage); ! 110: rmexit(1); ! 111: } ! 112:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.