URI:
       t_asrdresp.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       t_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 }