Annotation of 41BSD/cmd/berknet/netq.c, revision 1.1

1.1     ! root        1: /* netq - print the netq send queue */
        !             2: /* netq [-a] [mach] */
        !             3: /* must be setuid root */
        !             4: 
        !             5: # include "defs.h"
        !             6: # define STSIZE 150
        !             7: 
        !             8: static FILE *df;
        !             9: static char jname[16], printlong;
        !            10: static struct table {
        !            11:        char name[16];
        !            12:        long filesize;
        !            13:        } stack[STSIZE], temp;
        !            14: static int stptr = 0;
        !            15: static char mach,visit[26];
        !            16: static char netcmd1[] =        NETCMD1;
        !            17: static int hisuid,sumj;
        !            18: static long sumb;
        !            19: static struct stat statbuf;
        !            20: static struct direct dirbuf;
        !            21: 
        !            22: char _sobuf[BUFSIZ];
        !            23: main(argc,argv)
        !            24:   char **argv; {
        !            25:        int i;
        !            26:        setbuf(stdout,_sobuf);
        !            27:        hisuid = getuid();
        !            28:        hisuid = uidmask(hisuid);
        !            29:        if(stat(netcmd,&statbuf) >= 0)
        !            30:                if((statbuf.st_mode & 07) == 0){
        !            31:                        printf("Network is down\n");
        !            32:                        exit(EX_UNAVAILABLE);
        !            33:                        }
        !            34:        else if(stat(netcmd1,&statbuf) >= 0)
        !            35:                if((statbuf.st_mode & 07) == 0){
        !            36:                        printf("Network is down\n");
        !            37:                        exit(EX_UNAVAILABLE);
        !            38:                        }
        !            39:        while(argc > 1){
        !            40:                switch(argv[1][0]){
        !            41:                case '-': printlong++; break;
        !            42:                default: mach = lookup(argv[1]);
        !            43:                        if(mach > 0 && machtype[mach-'a'] == 0)mach = 0;
        !            44:                        break;
        !            45:                }
        !            46:                argc--, argv++;
        !            47:                }
        !            48:        if(mach){
        !            49:                mach = gothru(local,mach); /* list to directly conn. machine */
        !            50:                if(mach == 0){
        !            51:                        fprintf(stderr,"That machine not directly connected.\n");
        !            52:                        exit(EX_USAGE);
        !            53:                }
        !            54:                senddir[strlen(senddir)-1] = mach;
        !            55:                if(chdir(senddir) < 0){
        !            56:                        perror(senddir);
        !            57:                        exit(EX_OSFILE);
        !            58:                }
        !            59:                pdir(senddir);
        !            60:        }
        !            61:        else for(i = 'a'; i <= 'z'; i++)
        !            62:                if((mach = gothru(local,i)) && !visit[mach - 'a']){
        !            63:                        visit[mach - 'a'] = 1;
        !            64:                        senddir[strlen(senddir)-1] = mach;
        !            65:                        if(chdir(senddir) < 0)continue;
        !            66:                        pdir(senddir);
        !            67:                        printf("---\n");
        !            68:                        }
        !            69:        fflush(stdout);
        !            70:        }
        !            71: static pdir(str)
        !            72:   char *str; {
        !            73:        int i;
        !            74:        char more = 0, *cp;
        !            75:        int (*compar)();
        !            76:        df = fopen(str,"r");
        !            77:        if(df == NULL){
        !            78:                perror(str);
        !            79:                exit(EX_OSFILE);
        !            80:                }
        !            81:        stptr = 0;
        !            82:        while(fread(&dirbuf,1,sizeof dirbuf,df)==sizeof dirbuf){
        !            83:                if(dirbuf.d_ino == 0 
        !            84:                || dirbuf.d_name[0] != 'c'
        !            85:                || dirbuf.d_name[1] != 'f'
        !            86:                || stat(dirbuf.d_name,&statbuf) < 0)
        !            87:                        continue;
        !            88:                if(mach != dirbuf.d_name[2])continue;
        !            89:                dirbuf.d_name[0] = 'd';
        !            90:                if(stat(dirbuf.d_name,&statbuf) < 0)continue;
        !            91: 
        !            92:                if(!insert(dirbuf.d_name,getsize(&statbuf))){
        !            93:                        more++;
        !            94:                        break;
        !            95:                        }
        !            96:                }
        !            97:        if(stptr == 0){
        !            98:                printf("Network queue to/thru %s is empty.\n",longname(mach));
        !            99:                return;
        !           100:                }
        !           101:        cp = (char *)&(stack[0].name[0]);
        !           102:        sort(cp,stptr,sizeof temp,compar);
        !           103:        printf("Network queue to/thru %s:\n",longname(mach));
        !           104:        printf(
        !           105:        "From       To           Len  Code   Time          Command\n");
        !           106:        for(i = 0; i < stptr; i++){ /* screen size */
        !           107:                strcpy(jname,stack[i].name);
        !           108:                jname[0] = 'd';
        !           109:                if(stat(jname,&statbuf) < 0)
        !           110:                        continue;
        !           111:                if(printlong || guid(statbuf.st_uid,statbuf.st_gid) == hisuid)
        !           112:                        process();
        !           113:                else summarize(i);
        !           114:                }
        !           115:        printsum();
        !           116:        if(more)printf("   ... more ...\n");
        !           117:        }
        !           118: summarize(i){
        !           119:        sumb += stack[i].filesize;
        !           120:        sumj++;
        !           121:        }
        !           122: printsum(){
        !           123:        if(sumj != 0){
        !           124:                printf("%d request%s, %ld bytes\n",
        !           125:                        sumj,(sumj > 1 ? "s" : ""),sumb);
        !           126:                sumj = 0;
        !           127:                sumb = 0L;
        !           128:                }
        !           129:        }
        !           130: process(){
        !           131:        static struct header hd;
        !           132:        FILE *look;
        !           133:        char *cp;
        !           134: 
        !           135:        printsum();
        !           136:        look = fopen(jname,"r");
        !           137:        if(look == NULL)
        !           138:                return;
        !           139:        readhdfd(&hd,look);
        !           140:        fclose(look);
        !           141:        if(hd.hd_snfrom[0] == 0)strcat(hd.hd_addrfrom,"Internal");
        !           142:        expandcc(hd.hd_sttyname);
        !           143:        cp = ctime(&statbuf.st_mtime);
        !           144:        cp[strlen(cp)-9] = 0;
        !           145:        jname[3] = jname[2];
        !           146:        printf("%-10s %-10s %5ld %s %s  %-.27s\n",
        !           147:                hd.hd_addrfrom,hd.hd_addrto,getsize(&statbuf),
        !           148:                jname+3,cp+4,hd.hd_scmdvirt);
        !           149:        }
        !           150: readhdfd(phd,fd)
        !           151: register struct header *phd;
        !           152: FILE *fd;
        !           153: {
        !           154:        char sbuf[BUFSIZ], parmlist[PARMLIST];
        !           155:        char *s, cflag;
        !           156:        int c, i;
        !           157:        phd->hd_code = phd->hd_mchto = phd->hd_snto[0] = phd->hd_sinfile[0] = 0;
        !           158:        phd->hd_soutfile[0] = phd->hd_srespfile[0] = phd->hd_snfrom[0] = 0;
        !           159:        phd->hd_scmdact[0] = 0;
        !           160:        for(i=0;i<20;i++)phd->hd_sttyname[i] = 0;
        !           161: 
        !           162:        phd->hd_code = ngetc(fd);
        !           163:        if(phd->hd_code == 0)return;
        !           164:        phd->hd_mchto = ngetc(fd);
        !           165:        phd->hd_mchfrom = ngetc(fd);    /* from machine */
        !           166:        phd->hd_vmajor = ngetc(fd);
        !           167:        phd->hd_vminor = ngetc(fd);
        !           168:        ngets(phd->hd_snto,NS,fd);
        !           169:        ngets(phd->hd_spasswd,20,fd);                   /* passwd */
        !           170:        ngets(phd->hd_sinfile,FNS,fd);
        !           171:        ngets(phd->hd_soutfile,FNS,fd);
        !           172:        ngets(phd->hd_srespfile,FNS,fd);
        !           173:        ngets(phd->hd_snfrom,NS,fd);
        !           174:        ngets(phd->hd_sttyname,20,fd);
        !           175:        cflag = ngetc(fd);              
        !           176:        ngets(sbuf,BUFSIZ,fd);                          /* lttytime */
        !           177:        ngets(parmlist,PARMLIST,fd);                    /* jobno */
        !           178:        parseparmlist(parmlist);
        !           179:        ngets(sbuf,BUFSIZ,fd);                          /* timesent */
        !           180:        s = phd->hd_scmdact;
        !           181:        while((c = getc(fd)) != EOF && c != '\n'){
        !           182:                if(c == '\\')c = getc(fd);
        !           183:                *s++ = c;
        !           184:                }
        !           185:        *s = 0;
        !           186:        s = phd->hd_scmdvirt;
        !           187:        while((c = getc(fd)) != EOF && c != '\n'){
        !           188:                if(c == '\\')c = getc(fd);
        !           189:                *s++ = c;
        !           190:                }
        !           191:        *s = 0;
        !           192:        if(phd->hd_scmdvirt[0] == 0)strcpy(phd->hd_scmdvirt,phd->hd_scmdact);
        !           193:        sprintf(phd->hd_addrfrom,"%c:%s",phd->hd_mchfrom,phd->hd_snfrom);
        !           194:        sprintf(phd->hd_addrto  ,"%c:%s",phd->hd_mchto  ,phd->hd_snto  );
        !           195: }
        !           196: ngetc(fd)
        !           197: FILE *fd;
        !           198: {
        !           199:        char b[3];
        !           200:        if(feof(fd))return(0);
        !           201:        if(fread(b,1,3,fd) != 3) return(0);
        !           202:        return(b[0]);
        !           203:        }
        !           204: /* read a string s of max length maxlen out of queue file */
        !           205: ngets(s,maxlen,fd)
        !           206: int maxlen;
        !           207: char *s;
        !           208: FILE *fd;
        !           209: {
        !           210:        int i;
        !           211:        if(feof(fd))return;
        !           212:        for(;;){
        !           213:                i = getc(fd);
        !           214:                if(i == EOF){
        !           215:                        *s = 0;
        !           216:                        return;
        !           217:                        }
        !           218:                *s = i;
        !           219:                if(*s == '\\')*s = getc(fd);
        !           220:                if(*s == ' ')break;
        !           221:                if(maxlen-- > 0)s++;
        !           222:                }
        !           223:        *s = 0;
        !           224:        getc(fd);
        !           225:        }
        !           226: insert(f,t)
        !           227:   char *f;
        !           228:   long t; {
        !           229:        strcpy(stack[stptr].name,f);
        !           230:        stack[stptr++].filesize = t;
        !           231:        return(stptr <= STSIZE);
        !           232:        }
        !           233: compar(a,b)
        !           234:   register struct table *a,*b; {
        !           235:        if(a->filesize < b->filesize)return(-1);
        !           236:        if(a->filesize > b->filesize)return(1);
        !           237:        return(0);
        !           238:        }
        !           239: sort(){                /* use this cause qsort doesn't work */
        !           240:        register int i,j;
        !           241:        for(i=0; i< stptr-1; i++)
        !           242:                for(j=i+1;j<stptr;j++)
        !           243:                        if(compar(&stack[i],&stack[j]) > 0)
        !           244:                                swap(&stack[i],&stack[j]);
        !           245:        }
        !           246: swap(a,b)
        !           247:   register struct table *a, *b; {
        !           248:        char str[16];
        !           249:        long t;
        !           250:        strcpy(str,a->name);
        !           251:        t = a->filesize;
        !           252:        strcpy(a->name,b->name);
        !           253:        a->filesize = b->filesize;
        !           254:        strcpy(b->name,str);
        !           255:        b->filesize = t;
        !           256:        }

unix.superglobalmegacorp.com

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