Blame


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