Blame


1 551445b9 2004-04-21 devnull #include <u.h>
2 551445b9 2004-04-21 devnull #include <libc.h>
3 551445b9 2004-04-21 devnull #include <thread.h>
4 551445b9 2004-04-21 devnull #include <sunrpc.h>
5 551445b9 2004-04-21 devnull
6 551445b9 2004-04-21 devnull uint
7 551445b9 2004-04-21 devnull sunauthunixsize(SunAuthUnix *x)
8 551445b9 2004-04-21 devnull {
9 551445b9 2004-04-21 devnull return 4 + sunstringsize(x->sysname) + 4 + 4 + 4 + 4*x->ng;
10 551445b9 2004-04-21 devnull }
11 551445b9 2004-04-21 devnull int
12 551445b9 2004-04-21 devnull sunauthunixunpack(uchar *a, uchar *ea, uchar **pa, SunAuthUnix *x)
13 551445b9 2004-04-21 devnull {
14 551445b9 2004-04-21 devnull int i;
15 551445b9 2004-04-21 devnull
16 551445b9 2004-04-21 devnull if(sunuint32unpack(a, ea, &a, &x->stamp) < 0) goto Err;
17 551445b9 2004-04-21 devnull if(sunstringunpack(a, ea, &a, &x->sysname, 256) < 0) goto Err;
18 551445b9 2004-04-21 devnull if(sunuint32unpack(a, ea, &a, &x->uid) < 0) goto Err;
19 551445b9 2004-04-21 devnull if(sunuint32unpack(a, ea, &a, &x->gid) < 0) goto Err;
20 551445b9 2004-04-21 devnull if(sunuint32unpack(a, ea, &a, &x->ng) < 0 || x->ng > nelem(x->g)) goto Err;
21 551445b9 2004-04-21 devnull for(i=0; i<x->ng; i++)
22 551445b9 2004-04-21 devnull if(sunuint32unpack(a, ea, &a, &x->g[i]) < 0) goto Err;
23 551445b9 2004-04-21 devnull
24 551445b9 2004-04-21 devnull *pa = a;
25 551445b9 2004-04-21 devnull return 0;
26 551445b9 2004-04-21 devnull
27 551445b9 2004-04-21 devnull Err:
28 551445b9 2004-04-21 devnull *pa = ea;
29 551445b9 2004-04-21 devnull return -1;
30 551445b9 2004-04-21 devnull }
31 551445b9 2004-04-21 devnull int
32 551445b9 2004-04-21 devnull sunauthunixpack(uchar *a, uchar *ea, uchar **pa, SunAuthUnix *x)
33 551445b9 2004-04-21 devnull {
34 551445b9 2004-04-21 devnull int i;
35 551445b9 2004-04-21 devnull
36 551445b9 2004-04-21 devnull if(sunuint32pack(a, ea, &a, &x->stamp) < 0) goto Err;
37 551445b9 2004-04-21 devnull if(sunstringpack(a, ea, &a, &x->sysname, 256) < 0) goto Err;
38 551445b9 2004-04-21 devnull if(sunuint32pack(a, ea, &a, &x->uid) < 0) goto Err;
39 551445b9 2004-04-21 devnull if(sunuint32pack(a, ea, &a, &x->gid) < 0) goto Err;
40 551445b9 2004-04-21 devnull if(sunuint32pack(a, ea, &a, &x->ng) < 0 || x->ng > nelem(x->g)) goto Err;
41 551445b9 2004-04-21 devnull for(i=0; i<x->ng; i++)
42 551445b9 2004-04-21 devnull if(sunuint32pack(a, ea, &a, &x->g[i]) < 0) goto Err;
43 551445b9 2004-04-21 devnull
44 551445b9 2004-04-21 devnull *pa = a;
45 551445b9 2004-04-21 devnull return 0;
46 551445b9 2004-04-21 devnull
47 551445b9 2004-04-21 devnull Err:
48 551445b9 2004-04-21 devnull *pa = ea;
49 551445b9 2004-04-21 devnull return -1;
50 551445b9 2004-04-21 devnull }
51 551445b9 2004-04-21 devnull void
52 551445b9 2004-04-21 devnull sunauthunixprint(Fmt *fmt, SunAuthUnix *x)
53 551445b9 2004-04-21 devnull {
54 551445b9 2004-04-21 devnull int i;
55 551445b9 2004-04-21 devnull fmtprint(fmt, "unix %.8lux %s %lud %lud (", (ulong)x->stamp,
56 551445b9 2004-04-21 devnull x->sysname, (ulong)x->uid, (ulong)x->gid);
57 551445b9 2004-04-21 devnull for(i=0; i<x->ng; i++)
58 551445b9 2004-04-21 devnull fmtprint(fmt, "%s%lud", i ? " ":"", (ulong)x->g[i]);
59 551445b9 2004-04-21 devnull fmtprint(fmt, ")");
60 551445b9 2004-04-21 devnull }