|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)xget.c 4.4 6/30/83"; ! 3: #endif ! 4: ! 5: #include "xmail.h" ! 6: #include <sys/types.h> ! 7: #include <sys/dir.h> ! 8: #include <ctype.h> ! 9: #include <pwd.h> ! 10: #include <sys/stat.h> ! 11: char *myname; ! 12: int uid; ! 13: struct direct *dbuf; ! 14: char *maildir = "/usr/spool/secretmail/"; ! 15: FILE *kf, *mf; ! 16: DIR *df; ! 17: MINT *x, *b, *one, *t45, *z, *q, *r; ! 18: MINT *two, *t15, *mbuf; ! 19: char buf[256], line[128]; ! 20: #define MXF 100 ! 21: int fnum[MXF], fcnt; ! 22: struct stat stbuf; ! 23: main() ! 24: { int i; ! 25: char *p; ! 26: ! 27: uid = getuid(); ! 28: myname = (char *)getlogin(); ! 29: if(myname == NULL) ! 30: myname = getpwuid(uid)->pw_name; ! 31: comminit(); ! 32: mbuf = itom(0); ! 33: files(); ! 34: setup(getpass("Key: ")); ! 35: mkb(); ! 36: mkx(); ! 37: #ifndef debug ! 38: invert(x, b, x); ! 39: #else ! 40: invert(x, b, z); ! 41: mult(x, z, z); ! 42: mdiv(z, b, q, z); ! 43: omout(z); ! 44: invert(x, b, x); ! 45: #endif ! 46: for(i=0; i<fcnt; i++) ! 47: { sprintf(line, "%s%s.%d", maildir, myname, fnum[i]); ! 48: if(stat(line, &stbuf)<0) ! 49: { perror(line); ! 50: continue; ! 51: } ! 52: if(stbuf.st_size == 0) ! 53: { printf("zero length mail file\n"); ! 54: unlink(line); ! 55: continue; ! 56: } ! 57: if((mf = fopen(line, "r"))==NULL) ! 58: { perror(line); ! 59: continue; ! 60: } ! 61: decipher(mf, stdout); ! 62: cmnd: ! 63: printf("? "); ! 64: fgets(buf, sizeof(buf), stdin); ! 65: if(feof(stdin)) exit(0); ! 66: switch(buf[0]) ! 67: { ! 68: case 'q': ! 69: exit(0); ! 70: case 'n': ! 71: case 'd': ! 72: case '\n': ! 73: fclose(mf); ! 74: unlink(line); ! 75: break; ! 76: case '!': ! 77: system(buf+1); ! 78: printf("!\n"); ! 79: goto cmnd; ! 80: case 's': ! 81: case 'w': ! 82: rewind(mf); ! 83: if(buf[1] == '\n' || buf[1] == '\0') ! 84: strcpy(buf, "s mbox\n"); ! 85: for(p = buf+1; isspace(*p); p++); ! 86: p[strlen(p)-1] = 0; ! 87: kf = fopen(p, "a"); ! 88: if(kf == NULL) ! 89: { perror(p); ! 90: goto cmnd; ! 91: } ! 92: decipher(mf, kf); ! 93: fclose(mf); ! 94: fclose(kf); ! 95: unlink(line); ! 96: break; ! 97: default: ! 98: printf("Commands are:\n"); ! 99: printf("q quit, leaving unread messages\n"); ! 100: printf("n delete current message and goto next\n"); ! 101: printf("d same as above\n"); ! 102: printf("\\n same as above\n"); ! 103: printf("! execute shell command\n"); ! 104: printf("s save message in the named file or mbox\n"); ! 105: printf("w same as above\n"); ! 106: printf("? prints this list\n"); ! 107: goto cmnd; ! 108: } ! 109: } ! 110: exit(0); ! 111: } ! 112: icmp(a, b) int *a, *b; ! 113: { ! 114: return(*a - *b); ! 115: } ! 116: files() ! 117: { int i; ! 118: if((df = opendir(maildir)) == NULL) ! 119: { perror(maildir); ! 120: exit(1); ! 121: } ! 122: strcpy(line, myname); ! 123: strcat(line, ".%d"); ! 124: while ((dbuf = readdir(df)) != NULL) ! 125: { ! 126: if(sscanf(dbuf->d_name, line, &i) != 1) ! 127: continue; ! 128: if(fcnt >= MXF) ! 129: break; ! 130: fnum[fcnt++] = i; ! 131: } ! 132: closedir(df); ! 133: if(fcnt == 0) ! 134: { printf("no secret mail\n"); ! 135: exit(0); ! 136: } ! 137: qsort(fnum, fcnt, sizeof(int), icmp); ! 138: } ! 139: decipher(u, w) FILE *u, *w; ! 140: { int i; ! 141: short a; ! 142: for(;;) ! 143: { nin(mbuf, u); ! 144: if(feof(u)) break; ! 145: mult(mbuf, x, mbuf); ! 146: mdiv(mbuf, b, q, mbuf); ! 147: for(i=1; i<=3; i++) ! 148: { a = mbuf->val[i]; ! 149: putc(a&0177, w); ! 150: a >>= 8; ! 151: putc(a&0177, w); ! 152: } ! 153: } ! 154: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.