1: #include "xmail.h"
   2: #include "sys/types.h"
   3: #include "sys/dir.h"
   4: #include "ctype.h"
   5: #include "pwd.h"
   6: #include "sys/stat.h"
   7: char *myname;
   8: int uid;
   9: struct direct dbuf;
  10: char *maildir = "/usr/spool/secretmail/";
  11: FILE *kf, *mf, *df;
  12: MINT *x, *b, *one, *t45, *z, *q, *r;
  13: MINT *two, *t15, *mbuf;
  14: char buf[256], line[128];
  15: #define MXF 100
  16: int fnum[MXF], fcnt;
  17: struct stat stbuf;
  18: main()
  19: {   int i;
  20:     char *p;
  21:     uid = getuid();
  22:     myname = getlogin();
  23:     if(myname == NULL)
  24:         myname = getpwuid(uid)->pw_name;
  25:     comminit();
  26:     mbuf = itom(0);
  27:     files();
  28:     setup(getpass("Key: "));
  29:     mkb();
  30:     mkx();
  31: #ifndef debug
  32:     invert(x, b, x);
  33: #else
  34:     invert(x, b, z);
  35:     mult(x, z, z);
  36:     mdiv(z, b, q, z);
  37:     omout(z);
  38:     invert(x, b, x);
  39: #endif
  40:     for(i=0; i<fcnt; i++)
  41:     {   sprintf(line, "%s%s.%d", maildir, myname, fnum[i]);
  42:         if(stat(line, &stbuf)<0)
  43:         {   perror(line);
  44:             continue;
  45:         }
  46:         if(stbuf.st_size == 0)
  47:         {   printf("zero length mail file\n");
  48:             unlink(line);
  49:             continue;
  50:         }
  51:         if((mf = fopen(line, "r"))==NULL)
  52:         {   perror(line);
  53:             continue;
  54:         }
  55:         decipher(mf, stdout);
  56:     cmnd:
  57:         printf("? ");
  58:         fgets(buf, sizeof(buf), stdin);
  59:         if(feof(stdin)) exit(0);
  60:         switch(buf[0])
  61:         {
  62:         case 'q':
  63:             exit(0);
  64:         case 'n':
  65:         case 'd':
  66:         case '\n':
  67:             unlink(line);
  68:             fclose(mf);
  69:             break;
  70:         case '!':
  71:             system(buf+1);
  72:             printf("!\n");
  73:             goto cmnd;
  74:         case 's':
  75:         case 'w':
  76:             rewind(mf);
  77:             if(buf[1] == '\n' || buf[1] == '\0')
  78:                 strcpy(buf, "s mbox\n");
  79:             for(p=buf; !isspace(*p); p++);
  80:             for(; isspace(*p); p++);
  81:             p[strlen(p)-1] = 0;
  82:             kf = fopen(p, "a");
  83:             if(kf == NULL)
  84:             {   perror(p);
  85:                 break;
  86:             }
  87:             decipher(mf, kf);
  88:             fclose(mf);
  89:             fclose(kf);
  90:             unlink(line);
  91:             break;
  92:         }
  93:     }
  94:     exit(0);
  95: }
  96: icmp(a, b) int *a, *b;
  97: {
  98:     return(*a - *b);
  99: }
 100: files()
 101: {   int i;
 102:     if((df = fopen(maildir, "r")) == NULL)
 103:     {   perror(maildir);
 104:         exit(1);
 105:     }
 106:     strcpy(line, myname);
 107:     strcat(line, ".%d");
 108:     for(; !feof(df);)
 109:     {   fread(&dbuf, sizeof(dbuf), 1, df);
 110:         if(feof(df)) break;
 111:         if(dbuf.d_ino == 0) continue;
 112:         if(sscanf(dbuf.d_name, line, &i) != 1)
 113:             continue;
 114:         if(fcnt >= MXF)
 115:             break;
 116:         fnum[fcnt++] = i;
 117:     }
 118:     if(fcnt == 0)
 119:     {   printf("no secret mail\n");
 120:         exit(0);
 121:     }
 122:     qsort(fnum, fcnt, sizeof(int), icmp);
 123: }
 124: decipher(u, w) FILE *u, *w;
 125: {   int i;
 126:     short a;
 127:     for(;;)
 128:     {   nin(mbuf, u);
 129:         if(feof(u)) break;
 130:         mult(mbuf, x, mbuf);
 131:         mdiv(mbuf, b, q, mbuf);
 132:         for(i=1; i<=3; i++)
 133:         {   a = mbuf->val[i];
 134:             putc(a&0177, w);
 135:             a >>= 8;
 136:             putc(a&0177, w);
 137:         }
 138:     }
 139: }

Defined functions

decipher defined in line 124; used 2 times
files defined in line 100; used 1 times
  • in line 27
icmp defined in line 96; used 1 times
main defined in line 18; never used

Defined variables

buf defined in line 14; used 16 times
dbuf defined in line 9; used 4 times
fcnt defined in line 16; used 5 times
fnum defined in line 16; used 3 times
line defined in line 14; used 11 times
maildir defined in line 10; used 3 times
myname defined in line 7; used 5 times
stbuf defined in line 17; used 2 times
uid defined in line 8; used 2 times

Defined macros

MXF defined in line 15; used 2 times
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 727
Valid CSS Valid XHTML 1.0 Strict