Annotation of 43BSD/old/berknet/setup.c, revision 1.1

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:        }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.