|
|
1.1 ! root 1: /* ! 2: setup.c ! 3: ! 4: support procedures used in setting up the network ! 5: ! 6: */ ! 7: ! 8: # include "defs.h" ! 9: ! 10: char logfile[] = LOGFILE; ! 11: ! 12: /* global variables */ ! 13: int datasize = SIZE; /* best if mult of 512 */ ! 14: char vaxtovax = 0; ! 15: int linkspeed = LINKS; ! 16: char local; ! 17: char device[]; ! 18: int debugflg; ! 19: int maxbread,atime; ! 20: int onlyuid; ! 21: ! 22: short masterseqno; ! 23: FILE *readtty,*writetty; ! 24: int readfd, writefd, pipesim; ! 25: /* ! 26: called in netdaemon and debugging software ! 27: handles parameter lists to setup ! 28: remote machine and pipes ! 29: */ ! 30: setupdaemon(argc,argv) ! 31: char **argv; { ! 32: remote = argc > 1 ? lookup(argv[1]) : getremote(local); ! 33: if(argc == 4){ /* simulate using pipes */ ! 34: readfd = atoi(argv[2]); ! 35: writefd = atoi(argv[3]); ! 36: pipesim++; ! 37: } ! 38: initdaemon(); ! 39: } ! 40: /* ! 41: set the correct mode on the link device ! 42: */ ! 43: setup(str) ! 44: char *str; { ! 45: struct sgttyb stt; ! 46: static char readbuf[BUFSIZ],writebuf[BUFSIZ]; ! 47: if(str == 0 || str[0] == 0){ ! 48: err("invalid net device\n"); ! 49: exit(1); ! 50: } ! 51: masterseqno = 1; ! 52: readtty = pipesim ? fdopen(readfd,"r") : fopen(str,"r"); ! 53: if(readtty == NULL){ ! 54: perror(str); ! 55: exit(1); ! 56: } ! 57: writetty = pipesim ? fdopen(writefd,"w") : fopen(str,"w"); ! 58: if(writetty == NULL){ ! 59: perror(str); ! 60: exit(1); ! 61: } ! 62: if(!pipesim){ ! 63: /* set exclusive use for line */ ! 64: if(ioctl(fileno(readtty),TIOCEXCL,&stt) != 0 || ! 65: gtty(fileno(readtty),&stt) < 0){ ! 66: perror(str); ! 67: exit(1); ! 68: } ! 69: stt.sg_ispeed = stt.sg_ospeed = linkspeed; /* user-set baud */ ! 70: stt.sg_erase = stt.sg_kill = 0; /* erase and kill off */ ! 71: stt.sg_flags = ANYP; /* even and odd parity, off everything else */ ! 72: if(stty(fileno(readtty),&stt) < 0){ ! 73: perror(str); ! 74: exit(1); ! 75: } ! 76: } ! 77: setbuf(readtty,readbuf); ! 78: setbuf(writetty,writebuf); ! 79: } ! 80: /* ! 81: initialize various data structures and print banner ! 82: */ ! 83: initdaemon(){ ! 84: long timev; ! 85: int timei; ! 86: FILE *cfile; ! 87: cfile = fopen(INITFILE,"r"); ! 88: rdnetfile(cfile); ! 89: fclose(cfile); ! 90: err("remote %c local %c link %s speed %d vtov %d length %d\n", ! 91: remote,local,device,linkspeed,vaxtovax,datasize); ! 92: err("debug %d time %d count %d onlyuid %d\n",debugflg,atime, ! 93: maxbread,onlyuid); ! 94: setup(device); ! 95: timev = gettime(); ! 96: timei = timev >> 16; ! 97: srand(timei); ! 98: # ifdef IMAGE ! 99: if(machtype[local - 'a'] != M_OTHER) ! 100: # endif ! 101: # ifdef EECS40 ! 102: if(machtype[local - 'a'] != M_OTHER) ! 103: # endif ! 104: # ifdef OPTVAX ! 105: if(machtype[local - 'a'] != M_OTHER) ! 106: # endif ! 107: # ifdef CSVAX ! 108: if(machtype[local - 'a'] != M_VAX) ! 109: # endif ! 110: # ifdef CORY ! 111: if(machtype[local - 'a'] != M_CORY) ! 112: # endif ! 113: # ifdef INGVAX ! 114: if(machtype[local - 'a'] != M_INGRES) ! 115: # endif ! 116: # ifdef ING70 ! 117: if(machtype[local - 'a'] != M_INGRES) ! 118: # endif ! 119: # ifdef CC ! 120: if(machtype[local -'a'] != M_CC && machtype[local - 'a'] != M_SRC) ! 121: # endif ! 122: err("Machine type disagrees with local machine\n"); ! 123: } ! 124: /*VARARGS0*/ ! 125: error(s,a,b,c,d,e,f,g,h) ! 126: char *s; { ! 127: char buf[10]; ! 128: if(remote != 0) sprintf(buf,"%s",longname(remote)); ! 129: else buf[0] = 0; ! 130: fflush(stdout); ! 131: if(debugflg){ ! 132: fprintf(stderr,s,a,b,c,d,e,f,g,h); ! 133: putc('\n',stderr); ! 134: } ! 135: addtolog(remote,"Err %s: ",buf); ! 136: addtolog(remote,s,a,b,c,d,e,f,g,h); ! 137: addtolog(remote,"\n"); ! 138: } ! 139: /* this is really not right - we should use the rcslog format */ ! 140: /* also, the user must be able to write on the ! 141: public logfile to get error messages such as ! 142: directory not found after he has ! 143: setuid'd from root ! 144: */ ! 145: /*VARARGS0*/ ! 146: addtolog(mach,s,a,b,c,d,e,f,g,h,i,j,k,l,m,n) ! 147: char *s; ! 148: { ! 149: static FILE *log = NULL; ! 150: struct stat statbuf; ! 151: logfile[strlen(logfile)-1] = mach; ! 152: if(log == NULL){ ! 153: if(stat(logfile,&statbuf) < 0)return; ! 154: log = fopen(logfile,"a"); ! 155: } ! 156: if(log == NULL)return; ! 157: fseek(log,0L,2); ! 158: fprintf(log,s,a,b,c,d,e,f,g,h,i,j,k,l,m,n); ! 159: fflush(log); ! 160: debug(s,a,b,c,d,e,f,g,h,i,h,k,l,m,n); ! 161: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.