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

Defined functions

addtolog defined in line 211; used 19 times
error defined in line 190; used 38 times
parseargs defined in line 50; used 2 times
setup defined in line 103; used 1 times
  • in line 40

Defined variables

logfile defined in line 10; used 4 times
netd defined in line 13; used 50 times

Defined macros

IN8BIT defined in line 115; used 1 times
OUT8BIT defined in line 114; used 1 times
Last modified: 1980-07-16
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 938
Valid CSS Valid XHTML 1.0 Strict