Annotation of researchv10no/cmd/sign/notary.c, revision 1.1.1.1

1.1       root        1: #include <string.h>
                      2: #include <stdio.h>
                      3: #include <ipc.h>
                      4: 
                      5: extern char *getkey();
                      6: extern char *pexpw();
                      7: extern char *xs();
                      8: extern void exit();
                      9: 
                     10: char *
                     11: getkey(s)
                     12: char *s;
                     13: {
                     14:        s = pexpw(3, s);
                     15:        if(s==0) {
                     16:                printf("cannot pex for key; quitting\n");
                     17:                exit(1);
                     18:        }
                     19:        return s;
                     20: }
                     21: 
                     22: static pexipc(name)
                     23: char *name;
                     24: {
                     25:        char *x;
                     26:        int fd;
                     27:        /* struct pexclude pexbuf; */
                     28: 
                     29:        x = ipcpath("astro/giacobini", "dk", name);
                     30:        if((fd = ipcopen(x, "light"))==-1){
                     31:                return -1;
                     32:        }
                     33:        /*
                     34:        if(pex(fd, 60, &pexbuf)!=0
                     35:            ||pexbuf.farpid<=0
                     36:            ||pexbuf.farcap==0) {
                     37:                close(fd);
                     38:                return -1;
                     39:        }
                     40:        */
                     41:        return fd;
                     42: }
                     43: 
                     44: static yesno(fd)
                     45: {
                     46:        char buf[4];
                     47:        int i;
                     48: 
                     49:        strncpy(buf,"",4);
                     50:        for(i=0; i<4; i++) {
                     51:                if(read(fd,&buf[i],1)!=1)break;
                     52:                if(strncmp(buf, "yes\n",4)==0)return 1;
                     53:                if(strncmp(buf, "no\n",3)==0)return 0;
                     54:        }
                     55:        return -1;
                     56: }
                     57: 
                     58: #ifndef SIGN
                     59: keynotary(k1, k2)
                     60: char *k1, *k2;
                     61: {
                     62:        int fd = ipcopen("/cs/mcert!key","light");
                     63:        if(fd != -1)
                     64:                fprint(fd, "%s\n%s\n", k1, k2);
                     65:        return fd;
                     66: }
                     67: 
                     68: rverify(name, xsum, body, n)
                     69: char *name, *xsum, *body;
                     70: {
                     71:        static int vfd = 0;
                     72:        
                     73:        if(name==0) {
                     74:                if(vfd>0)close(vfd);
                     75:                vfd = 0;
                     76:                return -1;
                     77:        }
                     78:        if(vfd == 0)
                     79:                vfd = pexipc("mcert");
                     80:        if(vfd == -1) return -1;
                     81: 
                     82:        fprint(vfd, "%s\n%s\n%d\n", name, xsum, n);
                     83:        if(write(vfd, body,n)!=n)
                     84:                return -1;
                     85:        return yesno(vfd);
                     86: }
                     87: 
                     88: #endif
                     89: verify(name, xsum, body, n)
                     90: char *name, *xsum, *body;
                     91: {
                     92:        char s[100];
                     93:        int r, fd = pexipc("mcert");
                     94:        
                     95:        if(fd==-1)return -1;
                     96:        sprintf(s, "%s\n%s\n%d\n", name, xsum, n);
                     97:        if(write(fd,s,strlen(s))!=strlen(s))
                     98:                return -1;
                     99:        if(write(fd, body,n)!=n)
                    100:                return -1;
                    101:        r = yesno(fd);
                    102:        close(fd);
                    103:        return r;
                    104: }
                    105: 
                    106: enroll(name, opw, npw) 
                    107: char *name, *opw, *npw;
                    108: {
                    109:        char buf[9], s[100];
                    110:        int r, fd, n = strlen(npw);
                    111: 
                    112:        strncpy(buf,opw,9);
                    113:        fd = pexipc("mcert!register");
                    114:        if(fd==-1)return -1;
                    115:        sprintf(s, "%s\n%s\n%d\n", name, xs(buf,npw,n), n);
                    116:        if(write(fd,s,strlen(s))!=strlen(s))
                    117:                return -1;
                    118:        if(write(fd, npw,n)!=n)
                    119:                return -1;
                    120:        r = yesno(fd);
                    121:        close(fd);
                    122:        return r;
                    123: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.