|
|
1.1 root 1: /*
2: * main program for server called by setup
3: */
4: #include <stdio.h>
5: #include <signal.h>
6: #include "rf.h"
7:
8: #define CFD 0 /* filesystem connection */
9:
10: int fserrno;
11:
12: /*
13: * setup handshake:
14: * receive 16-byte message with initial parameters
15: * send 1
16: * receive maxsize bytes: uid map
17: * user : means list is incomplete;
18: * send 012 and read another maxsize bytes
19: * send 2
20: * receive maxsize bytes: gid map
21: * group : means list is incomplete;
22: * send 013 and read another maxsize bytes
23: * send 3
24: */
25: #define MSG1LEN 16
26:
27: extern char *_rfwhocalled();
28: char *malloc();
29:
30: char *rfclient;
31: int rfdebug;
32:
33: main(argc, argv)
34: int argc;
35: char **argv;
36: {
37: char *inbuf;
38: char msg[MSG1LEN];
39: int n;
40: int maxsize;
41:
42: umask(0);
43: signal(SIGHUP, SIG_IGN);
44: if ((rfclient = _rfwhocalled(CFD)) == NULL)
45: rfclient = "";
46: /*
47: * setup message 1
48: */
49: if ((n = _rfgread(CFD, msg, MSG1LEN, MSG1LEN)) != MSG1LEN)
50: rfpanic("setup 1: %d\n", n);
51: maxsize = msg[0] * 1024;
52: rfdebug = msg[3];
53: if (_rfinit(argc, argv) == 0)
54: rfpanic("can't init\n");
55: if ((inbuf = malloc(maxsize)) == NULL)
56: rfpanic("can't alloc %d bytes\n", maxsize);
57: if (write(CFD, "\1", 1) != 1)
58: rfpanic("setup 1: write error\n");
59: /*
60: * setup message 2
61: */
62: for (;;) {
63: if ((n = _rfgread(CFD, inbuf, maxsize, maxsize)) != maxsize)
64: rfpanic("setup 2: %d\n", n);
65: inbuf[n-1] = 0; /* safety */
66: if (_rfmapuid(inbuf) != 0)
67: break;
68: if (write(CFD, "\012", 1) != 1)
69: rfpanic("setup 2 (12): write error\n");
70: }
71: if (write(CFD, "\2", 1) != 1)
72: rfpanic("setup 2: write error\n");
73: /*
74: * setup message 3
75: */
76: for (;;) {
77: if ((n = _rfgread(CFD, inbuf, maxsize, maxsize)) != maxsize)
78: rfpanic("setup 3: %d\n", n);
79: inbuf[n-1] = 0; /* safety */
80: if (_rfmapgid(inbuf) != 0)
81: break;
82: if (write(CFD, "\013", 1) != 1)
83: rfpanic("setup 3 (13): write error\n");
84: }
85: if (write(CFD, "\3", 1) != 1)
86: rfpanic("setup 3: write error\n");
87: rflog("ok; buf %d\n", maxsize);
88: _rfscan(CFD, inbuf, maxsize);
89: rflog("eof\n");
90: exit(0);
91: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.