57 lines
874 B
C
57 lines
874 B
C
|
#include <u.h>
|
||
|
#include <libc.h>
|
||
|
#include <authsrv.h>
|
||
|
|
||
|
static char *pbmsg = "AS protocol botch";
|
||
|
|
||
|
int
|
||
|
_asrdresp(int fd, char *buf, int len)
|
||
|
{
|
||
|
int n;
|
||
|
char error[64];
|
||
|
|
||
|
if(read(fd, buf, 1) != 1){
|
||
|
werrstr(pbmsg);
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
n = len;
|
||
|
switch(buf[0]){
|
||
|
case AuthOK:
|
||
|
if(readn(fd, buf, len) != len){
|
||
|
werrstr(pbmsg);
|
||
|
return -1;
|
||
|
}
|
||
|
break;
|
||
|
case AuthErr:
|
||
|
if(readn(fd, error, sizeof error) != sizeof error){
|
||
|
werrstr(pbmsg);
|
||
|
return -1;
|
||
|
}
|
||
|
error[sizeof error-1] = '\0';
|
||
|
werrstr("remote: %s", error);
|
||
|
return -1;
|
||
|
case AuthOKvar:
|
||
|
if(readn(fd, error, 5) != 5){
|
||
|
werrstr(pbmsg);
|
||
|
return -1;
|
||
|
}
|
||
|
error[5] = 0;
|
||
|
n = atoi(error);
|
||
|
if(n <= 0 || n > len){
|
||
|
werrstr(pbmsg);
|
||
|
return -1;
|
||
|
}
|
||
|
memset(buf, 0, len);
|
||
|
if(readn(fd, buf, n) != n){
|
||
|
werrstr(pbmsg);
|
||
|
return -1;
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
werrstr(pbmsg);
|
||
|
return -1;
|
||
|
}
|
||
|
return n;
|
||
|
}
|