Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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
}