_asrdresp.c (874B)
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 }