]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libauthsrv/_asrdresp.c
add swiss german kbmap (thanks mike)
[plan9front.git] / sys / src / libauthsrv / _asrdresp.c
1 #include <u.h>
2 #include <libc.h>
3 #include <authsrv.h>
4
5 static char *pbmsg = "AS protocol botch";
6
7 int
8 _asrdresp(int fd, char *buf, int len)
9 {
10         int n;
11         char error[64];
12
13         if(read(fd, buf, 1) != 1){
14                 werrstr(pbmsg);
15                 return -1;
16         }
17
18         n = len;
19         switch(buf[0]){
20         case AuthOK:
21                 if(readn(fd, buf, len) != len){
22                         werrstr(pbmsg);
23                         return -1;
24                 }
25                 break;
26         case AuthErr:
27                 if(readn(fd, error, sizeof error) != sizeof error){
28                         werrstr(pbmsg);
29                         return -1;
30                 }
31                 error[sizeof error-1] = '\0';
32                 werrstr("remote: %s", error);
33                 return -1;
34         case AuthOKvar:
35                 if(readn(fd, error, 5) != 5){
36                         werrstr(pbmsg);
37                         return -1;
38                 }
39                 error[5] = 0;
40                 n = atoi(error);
41                 if(n <= 0 || n > len){
42                         werrstr(pbmsg);
43                         return -1;
44                 }
45                 memset(buf, 0, len);
46                 if(readn(fd, buf, n) != n){
47                         werrstr(pbmsg);
48                         return -1;
49                 }
50                 break;
51         default:
52                 werrstr(pbmsg);
53                 return -1;
54         }
55         return n;
56 }