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