|
|
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.