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 <thread.h>
4
#include <sunrpc.h>
5
 
6
uint
7
sunAuthUnixSize(SunAuthUnix *x)
8
{
9
	return 4 + sunStringSize(x->sysname) + 4 + 4 + 4 + 4*x->ng;
10
}
11
int
12
sunAuthUnixUnpack(uchar *a, uchar *ea, uchar **pa, SunAuthUnix *x)
13
{
14
	int i;
15
 
16
	if(sunUint32Unpack(a, ea, &a, &x->stamp) < 0) goto Err;
17
	if(sunStringUnpack(a, ea, &a, &x->sysname, 256) < 0) goto Err;
18
	if(sunUint32Unpack(a, ea, &a, &x->uid) < 0) goto Err;
19
	if(sunUint32Unpack(a, ea, &a, &x->gid) < 0) goto Err;
20
	if(sunUint32Unpack(a, ea, &a, &x->ng) < 0 || x->ng > nelem(x->g)) goto Err;
21
	for(i=0; i<x->ng; i++)
22
		if(sunUint32Unpack(a, ea, &a, &x->g[i]) < 0) goto Err;
23
 
24
	*pa = a;
25
	return 0;
26
 
27
Err:
28
	*pa = ea;
29
	return -1;
30
}
31
int
32
sunAuthUnixPack(uchar *a, uchar *ea, uchar **pa, SunAuthUnix *x)
33
{
34
	int i;
35
 
36
	if(sunUint32Pack(a, ea, &a, &x->stamp) < 0) goto Err;
37
	if(sunStringPack(a, ea, &a, &x->sysname, 256) < 0) goto Err;
38
	if(sunUint32Pack(a, ea, &a, &x->uid) < 0) goto Err;
39
	if(sunUint32Pack(a, ea, &a, &x->gid) < 0) goto Err;
40
	if(sunUint32Pack(a, ea, &a, &x->ng) < 0 || x->ng > nelem(x->g)) goto Err;
41
	for(i=0; i<x->ng; i++)
42
		if(sunUint32Pack(a, ea, &a, &x->g[i]) < 0) goto Err;
43
 
44
	*pa = a;
45
	return 0;
46
 
47
Err:
48
	*pa = ea;
49
	return -1;
50
}
51
void
52
sunAuthUnixPrint(Fmt *fmt, SunAuthUnix *x)
53
{
54
	int i;
55
	fmtprint(fmt, "unix %.8lux %s %lud %lud (", (ulong)x->stamp,
56
		x->sysname, (ulong)x->uid, (ulong)x->gid);
57
	for(i=0; i<x->ng; i++)
58
		fmtprint(fmt, "%s%lud", i ? " ":"", (ulong)x->g[i]);
59
	fmtprint(fmt, ")");
60
}