]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/libauthsrv/convPR2M.c
marshal(1): fix example: upas/mail -> mail (thanks fulton)
[plan9front.git] / sys / src / libauthsrv / convPR2M.c
old mode 100755 (executable)
new mode 100644 (file)
index 8b2422f..37168b9
@@ -2,27 +2,33 @@
 #include <libc.h>
 #include <authsrv.h>
 
-#define        CHAR(x)         *p++ = f->x
-#define        SHORT(x)        p[0] = f->x; p[1] = f->x>>8; p += 2
-#define        VLONG(q)        p[0] = (q); p[1] = (q)>>8; p[2] = (q)>>16; p[3] = (q)>>24; p += 4
-#define        LONG(x)         VLONG(f->x)
-#define        STRING(x,n)     memmove(p, f->x, n); p += n
+extern int form1B2M(char *ap, int n, uchar key[32]);
 
 int
-convPR2M(Passwordreq *f, char *ap, char *key)
+convPR2M(Passwordreq *f, char *ap, int n, Ticket *t)
 {
-       int n;
        uchar *p;
 
+       if(n < 1+2*PASSWDLEN+1+SECRETLEN)
+               return 0;
+
        p = (uchar*)ap;
-       CHAR(num);
-       STRING(old, ANAMELEN);
-       STRING(new, ANAMELEN);
-       CHAR(changesecret);
-       STRING(secret, SECRETLEN);
-       n = p - (uchar*)ap;
-       if(key)
-               encrypt(key, ap, n);
-       return n;
+       *p++ = f->num;
+       memmove(p, f->old, PASSWDLEN), p += PASSWDLEN;
+       memmove(p, f->new, PASSWDLEN), p += PASSWDLEN;
+       *p++ = f->changesecret;
+       memmove(p, f->secret, SECRETLEN), p += SECRETLEN;
+       switch(t->form){
+       case 0:
+               n = p - (uchar*)ap;
+               encrypt(t->key, ap, n);
+               return n;
+       case 1:
+               if(n < 12+2*PASSWDLEN+1+SECRETLEN+16)
+                       return 0;
+               return form1B2M(ap, p - (uchar*)ap, t->key);
+       }
+
+       return 0;
 }