]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libauthsrv/_asgetresp.c
marshal(1): fix example: upas/mail -> mail (thanks fulton)
[plan9front.git] / sys / src / libauthsrv / _asgetresp.c
1 #include <u.h>
2 #include <libc.h>
3 #include <authsrv.h>
4
5 int
6 _asgetresp(int fd, Ticket *t, Authenticator *a, Authkey *k)
7 {
8         char buf[MAXTICKETLEN+MAXAUTHENTLEN], err[ERRMAX];
9         int n, m;
10
11         memset(t, 0, sizeof(Ticket));
12         if(a != nil)
13                 memset(a, 0, sizeof(Authenticator));
14
15         strcpy(err, "AS protocol botch");
16         errstr(err, ERRMAX);
17
18         if(_asrdresp(fd, buf, 0) < 0)
19                 return -1;
20
21         for(n = 0; (m = convM2T(buf, n, t, k)) <= 0; n += m){
22                 m = -m;
23                 if(m <= n || m > sizeof(buf))
24                         return -1;
25                 m -= n;
26                 if(readn(fd, buf+n, m) != m)
27                         return -1;
28         }
29
30         if(a != nil){
31                 for(n = 0; (m = convM2A(buf, n, a, t)) <= 0; n += m){
32                         m = -m;
33                         if(m <= n || m > sizeof(buf))
34                                 return -1;
35                         m -= n;
36                         if(readn(fd, buf+n, m) != m)
37                                 return -1;
38                 }
39         }
40
41         errstr(err, ERRMAX);
42
43         return 0;
44 }