|
|
1.1 ! root 1: static char sccsid[] = "@(#)setup.c 4.2 (Berkeley) 10/3/82"; ! 2: ! 3: /* ! 4: setup.c ! 5: ! 6: support procedures used in setting up the network ! 7: ! 8: */ ! 9: ! 10: # include "defs.h" ! 11: ! 12: char logfile[] = LOGFILE; ! 13: ! 14: /* global variables */ ! 15: struct daemonparms netd; ! 16: ! 17: /* ! 18: called in netdaemon and debugging software ! 19: handles parameter lists to setup ! 20: remote machine and pipes ! 21: */ ! 22: setupdaemon(argc,argv) ! 23: char **argv;{ ! 24: long timev; ! 25: int timei; ! 26: FILE *cfile; ! 27: ! 28: parseargs(argc,argv); ! 29: ! 30: cfile = fopen(INITFILE,"r"); ! 31: rdnetfile(cfile); ! 32: fclose(cfile); ! 33: err("remote %c local %c link %s inspeed %d outspeed %d length %d\n", ! 34: remote,local,netd.dp_device,netd.dp_inspeed, ! 35: netd.dp_outspeed,netd.dp_datasize); ! 36: err("debug %d time %d count %d onlyuid %d usehispeed=%d hispeedlink='%s'\n", ! 37: debugflg,netd.dp_oatime, netd.dp_maxbread,netd.dp_onlyuid, ! 38: netd.dp_usehispeed, netd.dp_hispeedlink); ! 39: err("sendonly %c rcvonly %c pipesim %c\n", ! 40: chfromf(netd.dp_sndorcv < 0),chfromf(netd.dp_sndorcv > 0), ! 41: chfromf(netd.dp_pipesim)); ! 42: setup(netd.dp_device); ! 43: timev = gettime(); ! 44: timei = timev >> 16; ! 45: srand(timei); ! 46: } ! 47: /* ! 48: ! 49: see comment in netdaemon.c about the arguments ! 50: ! 51: */ ! 52: parseargs(argc,argv) ! 53: char **argv; { ! 54: char stemp[30]; ! 55: remote = 0; ! 56: while(argc > 1 && argv[1][0] == '-'){ ! 57: argc--; argv++; ! 58: switch(argv[0][1]){ ! 59: case '8': ! 60: netd.dp_use8bit = 1; ! 61: break; ! 62: case 'd': ! 63: debugflg = 1; ! 64: break; ! 65: case 'h': ! 66: netd.dp_usehispeed = 1; ! 67: break; ! 68: case 'l': ! 69: netd.dp_trynetl = 0; ! 70: break; ! 71: case 'm': ! 72: harg(stemp); ! 73: remote = lookup(stemp); ! 74: break; ! 75: case 'o': /* only */ ! 76: if(argv[0][2] == 's') /* only send */ ! 77: netd.dp_sndorcv = -1; ! 78: else if(argv[0][2] == 'r') /* only receive */ ! 79: netd.dp_sndorcv = 1; ! 80: else if(argv[0][2] == 'u') /* only uid num */ ! 81: netd.dp_onlyuid = atoi(argv[1]); ! 82: break; ! 83: case 'p': ! 84: harg(stemp); ! 85: netd.dp_datasize = atol(stemp); ! 86: break; ! 87: case 'r': ! 88: harg(stemp); ! 89: netd.dp_rdfile = fdopen(atoi(stemp),"r"); ! 90: netd.dp_pipesim++; ! 91: break; ! 92: case 'w': ! 93: harg(stemp); ! 94: netd.dp_pwritefd = atoi(stemp); ! 95: netd.dp_pipesim++; ! 96: break; ! 97: /* ignore unknown options */ ! 98: } ! 99: } ! 100: if(remote == 0){ ! 101: fprintf(stderr,"Error- must specify machine - use -m option\n"); ! 102: exit(EX_USAGE); ! 103: } ! 104: } ! 105: /* ! 106: set the correct mode on the link device ! 107: */ ! 108: setup(str) ! 109: char *str; { ! 110: struct sgttyb stt; ! 111: # ifdef RAND ! 112: struct { ! 113: int t_xflags; ! 114: char t_col; ! 115: char t_delct; ! 116: char t_outqc_cc; ! 117: char t_rawqc_cc; ! 118: } exstt; ! 119: #define OUT8BIT 01 /* All 8 bits on output */ ! 120: #define IN8BIT 02 /* All 8 bits on input */ ! 121: # endif ! 122: ! 123: initseqno(); ! 124: /* nothing to set up if we're simulating with pipes */ ! 125: if(netd.dp_pipesim)return; ! 126: ! 127: if(netd.dp_usehispeed){ ! 128: str = netd.dp_hispeedlink; ! 129: netd.dp_datasize = SENDLEN - ACKLENGTH; ! 130: } ! 131: if(str == 0 || str[0] == 0){ ! 132: err("invalid net device\n"); ! 133: exit(EX_OSFILE); ! 134: } ! 135: netd.dp_linefd = open(str,2); ! 136: if(netd.dp_linefd < 0){ ! 137: perror(str); ! 138: exit(EX_OSERR); ! 139: } ! 140: /* set exclusive use for line */ ! 141: #ifdef TIOCEXCL ! 142: #ifdef VAX ! 143: (void) ! 144: #endif ! 145: ioctl(netd.dp_linefd,TIOCEXCL,&stt); ! 146: #endif ! 147: if(gtty(netd.dp_linefd,&stt) < 0){ ! 148: perror(str); ! 149: exit(EX_OSERR); ! 150: } ! 151: stt.sg_ispeed = netd.dp_inspeed; /* user set baud */ ! 152: stt.sg_ospeed = netd.dp_outspeed; /* user-set baud */ ! 153: stt.sg_erase = stt.sg_kill = 0; /* erase and kill off */ ! 154: stt.sg_flags = ANYP; /* even and odd parity, off everything else */ ! 155: if(stty(netd.dp_linefd,&stt) < 0){ ! 156: perror(str); ! 157: exit(EX_OSERR); ! 158: } ! 159: # ifdef RAND ! 160: /* set device into 8-bit mode */ ! 161: if(gtty((2<<8)|netd.dp_linefd,&exstt) < 0){ ! 162: perror(str); ! 163: exit(EX_OSERR); ! 164: } ! 165: exstt.t_xflags = OUT8BIT | IN8BIT; ! 166: if(stty((2<<8)|netd.dp_linefd, &exstt) < 0){ ! 167: perror(str); ! 168: exit(EX_OSERR); ! 169: } ! 170: # endif ! 171: /* set my own line discipline */ ! 172: /* NETLDISC is defined in sgtty.h on the CSVAX */ ! 173: /* setting the line discipline must be done AFTER the sttys */ ! 174: # ifdef NETLDISC ! 175: if(netd.dp_trynetl){ ! 176: netd.dp_linedis = NETLDISC; ! 177: if(ioctl(netd.dp_linefd,TIOCSETD,&netd.dp_linedis) != 0){ ! 178: printf("error - line discipline\n"); ! 179: perror(str); ! 180: printf("proceeding...\n"); ! 181: netd.dp_linedis = 0; ! 182: } ! 183: if(netd.dp_linedis){ ! 184: /* set the line into RAW mode */ ! 185: netd.dp_linedis = 0; ! 186: ioctl(netd.dp_linefd,TIOCSETD,&netd.dp_linedis); ! 187: netd.dp_linedis = NETLDISC; ! 188: stt.sg_ispeed = netd.dp_inspeed;/* user set baud */ ! 189: stt.sg_ospeed = netd.dp_outspeed; /* user-set baud */ ! 190: stt.sg_erase = stt.sg_kill = 0; ! 191: stt.sg_flags = ANYP|RAW; /* in raw mode */ ! 192: if(stty(netd.dp_linefd,&stt) < 0){ ! 193: perror(str); ! 194: exit(EX_OSERR); ! 195: } ! 196: ioctl(netd.dp_linefd,TIOCSETD,&netd.dp_linedis); ! 197: printf("Using network line discipline.\n"); ! 198: } ! 199: } ! 200: # endif ! 201: } ! 202: /*VARARGS0*/ ! 203: error(s,a,b,c,d,e,f,g,h) ! 204: char *s; { ! 205: char buf[10]; ! 206: if(remote != 0) sprintf(buf,"%s",longname(remote)); ! 207: else buf[0] = 0; ! 208: fflush(stdout); ! 209: if(debugflg){ ! 210: fprintf(stderr,s,a,b,c,d,e,f,g,h); ! 211: putc('\n',stderr); ! 212: } ! 213: addtolog(remote,"Err %s: ",buf); ! 214: addtolog(remote,s,a,b,c,d,e,f,g,h); ! 215: addtolog(remote,"\n"); ! 216: } ! 217: /* this is really not right - we should use the rcslog format */ ! 218: /* also, the user must be able to write on the ! 219: public logfile to get error messages such as ! 220: directory not found after he has ! 221: setuid'd from root ! 222: */ ! 223: /*VARARGS0*/ ! 224: addtolog(mach,s,a,b,c,d,e,f,g,h,i,j,k,l,m,n) ! 225: char *s; ! 226: { ! 227: static FILE *log = NULL; ! 228: struct stat statbuf; ! 229: logfile[strlen(logfile)-1] = mach; ! 230: if(log == NULL){ ! 231: if(stat(logfile,&statbuf) < 0)return; ! 232: log = fopen(logfile,"a"); ! 233: } ! 234: if(log == NULL)return; ! 235: fseek(log,0L,2); ! 236: fprintf(log,s,a,b,c,d,e,f,g,h,i,j,k,l,m,n); ! 237: fflush(log); ! 238: debug(s,a,b,c,d,e,f,g,h,i,h,k,l,m,n); ! 239: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.