|
|
1.1 root 1: /* Network file system B.
2: * Setup message contains protocol type, max message size, and dev, at least.
3: * Maybe add some permissions stuff.
4: * The second message contains login names and uids from the client.
5: * The third message contains group names and gids from the client.
6: * Each message is acked by a single byte (1, 2, resp 3).
7: *
8: * All headers are translated from the client .../sys/h/netb.h into a global
9: * host structure that contains the union of all the fields. Each type of
10: * response is converted back to the client's format as part of sending the
11: * response. server() is in input.c.
12: */
13:
14: #include "share.h"
15: int cfd, dbgfd, debugflag;
16: int dtime;
17:
18: main(argc, argv)
19: char **argv;
20: { int i, n;
21: char buf[32];
22: cfd = 0; /* we get invoked by rexec */
23: dbgfd = open("/dev/null", 1);
24: /* dbgfd = creat("/tmp/zarf", 0644); /* /tmp/zarf is creamed on reboot */
25: n = xread(cfd, buf, 16);
26: if(n != 16)
27: fatal("client: read on setup %d bytes %d, |%s|\n", n, errno, buf);
28: n = buf[0];
29: hisdev = buf[1] << 8; /* that's his dev */
30: switch(buf[2]) {
31: default:
32: fatal("unk protocol %c (0%0)\n", buf[2], buf[2]);
33: case 't': case 'd':
34: proto = buf[2];
35: break;
36: }
37: debugflag = buf[3];
38: switch(buf[4]) {
39: default:
40: fatal("unk client type %c (0%0)\n", buf[4], buf[4]);
41: case 'v': case 's':
42: clienttype = buf[4];
43: break;
44: }
45: buf[0] = 1;
46: write(cfd, buf, 1);
47: for(i = 0; i < FILES; i++)
48: files[i].fd = -1;
49: error("server %d\n", getpid());
50: error("CSOURCE=%s\n", getenv("CSOURCE"));
51: server(n * 1024);
52: }
53:
54: /* read a fixed size off cfd */
55: xread(fd, buf, cnt)
56: unsigned char *buf;
57: { unsigned char *p = buf;
58: int i, n;
59: n = 0;
60: loop:
61: i = read(fd, p, cnt - n);
62: if(i <= 0)
63: fatal("xread(%d) n %d i %d\n", cnt, n, i);
64:
65: p += i;
66: n += i;
67: if(n >= cnt)
68: return(cnt);
69: goto loop;
70: }
71:
72: char msgbuf[1024];
73: /* VARARGS1 */
74: error(s, a, b, c, d, e, f)
75: char *s;
76: {
77: sprintf(msgbuf, s, a, b, c, d, e, f);
78: write(dbgfd, msgbuf, strlen(msgbuf));
79: }
80:
81: /* VARARGS1 */
82: debug(s, a, b, c, d, e, f)
83: char *s;
84: {
85: if(!debugflag)
86: return;
87: sprintf(msgbuf, s, a, b, c, d, e, f);
88: write(dbgfd, msgbuf, strlen(msgbuf));
89: /*sync();vain attempt to preserve every precious byte of message */
90: }
91: /* VARARGS1 */
92: fatal(s, a, b, c, d, e, f)
93: {
94: sprintf(msgbuf, s, a, b, c, d, e, f);
95: write(dbgfd, msgbuf, strlen(msgbuf));
96: exit(1);
97: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.