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

1.1     ! root        1: static char sccsid[] = "@(#)netq.c     4.2     (Berkeley)      9/12/82";
        !             2: 
        !             3: /* netq - print the netq send queue */
        !             4: /* netq [-] [mach] */
        !             5: /* must be setuid root */
        !             6: 
        !             7: /* sccs id variable */
        !             8: static char *netq_sid = "@(#)netq.c    1.5";
        !             9: 
        !            10: # include "defs.h"
        !            11: /* this is an internal table size -- only STSIZE entries will 
        !            12:        be sorted correctly */
        !            13: # define STSIZE 150
        !            14: 
        !            15: static DIR *df;
        !            16: static char jname[16], printlong;
        !            17: static struct table {
        !            18:        char name[16];
        !            19:        long filesize;
        !            20:        } stack[STSIZE], temp;
        !            21: static int stptr = 0;
        !            22: static char mach,visit[MAXINX];
        !            23: static char netcmd1[] =        NETCMD1;
        !            24: static int hisuid,sumj,nsumj;
        !            25: static long sumb, nsumb;
        !            26: static struct stat statbuf;
        !            27: 
        !            28: char _sobuf[BUFSIZ];
        !            29: main(argc,argv)
        !            30:   char **argv; {
        !            31:        int i;
        !            32:        setbuf(stdout,_sobuf);
        !            33:        hisuid = getuid();
        !            34:        hisuid = uidmask(hisuid);
        !            35:        if(stat(netcmd,&statbuf) >= 0)
        !            36:                if((statbuf.st_mode & 07) == 0){
        !            37:                        printf("Network is down\n");
        !            38:                        exit(EX_UNAVAILABLE);
        !            39:                        }
        !            40:        else if(stat(netcmd1,&statbuf) >= 0)
        !            41:                if((statbuf.st_mode & 07) == 0){
        !            42:                        printf("Network is down\n");
        !            43:                        exit(EX_UNAVAILABLE);
        !            44:                        }
        !            45:        while(argc > 1){
        !            46:                switch(argv[1][0]){
        !            47:                case '-': printlong++; break;
        !            48:                default: mach = lookup(argv[1]);
        !            49:                        if(mach > 0 && machtype[chtoinx(mach)] == 0)mach = 0;
        !            50:                        break;
        !            51:                }
        !            52:                argc--, argv++;
        !            53:                }
        !            54:        if(mach){
        !            55:                mach = gothru(local,mach); /* list to directly conn. machine */
        !            56:                if(mach == 0){
        !            57:                        fprintf(stderr,"That machine not directly connected.\n");
        !            58:                        exit(EX_USAGE);
        !            59:                }
        !            60:                senddir[strlen(senddir)-1] = mach;
        !            61:                if(chdir(senddir) < 0){
        !            62:                        perror(senddir);
        !            63:                        exit(EX_OSFILE);
        !            64:                }
        !            65:                pdir(senddir);
        !            66:        }
        !            67:        else for(i = 0; i < MAXINX; i++)
        !            68:                if((mach = gothru(local,inxtoch(i))) && !visit[chtoinx(mach)]){
        !            69:                        visit[chtoinx(mach)] = 1;
        !            70:                        senddir[strlen(senddir)-1] = mach;
        !            71:                        if(chdir(senddir) < 0)continue;
        !            72:                        pdir(senddir);
        !            73:                        printf("---\n");
        !            74:                        }
        !            75:        fflush(stdout);
        !            76:        }
        !            77: static pdir(str)
        !            78:   char *str; {
        !            79:        int i;
        !            80:        char more = 0, *cp;
        !            81:        char listrest = 0;
        !            82:        int (*compar)();
        !            83:        char printhead = 0;
        !            84:        register struct direct *dp;
        !            85:        df = opendir(str);
        !            86:        if(df == NULL){
        !            87:                perror(str);
        !            88:                exit(EX_OSFILE);
        !            89:                }
        !            90:        stptr = 0;
        !            91:        while((dp = readdir(df)) != NULL){
        !            92:                if(dp->d_name[0] != 'c'
        !            93:                || dp->d_name[1] != 'f'
        !            94:                || stat(dp->d_name,&statbuf) < 0)
        !            95:                        continue;
        !            96:                if(mach != dp->d_name[2])continue;
        !            97:                dp->d_name[0] = 'd';
        !            98:                if(stat(dp->d_name,&statbuf) < 0)continue;
        !            99: #ifdef MAXSENDQ
        !           100:                if( stptr >= MAXSENDQ ) {
        !           101:                        listrest++;
        !           102:                        break;
        !           103:                }
        !           104: #endif
        !           105: 
        !           106:                if(!insert(dp->d_name,getsize(&statbuf))){
        !           107:                        more++;
        !           108:                        break;
        !           109:                        }
        !           110:                }
        !           111:        if(stptr == 0){
        !           112:                printf("Network queue to/thru %s is empty.\n",longname(mach));
        !           113:                closedir(df);
        !           114:                return;
        !           115:                }
        !           116:        cp = (char *)&(stack[0].name[0]);
        !           117:        sort(cp,stptr,sizeof temp,compar);
        !           118:        printf("Network queue to/thru %s:\n",longname(mach));
        !           119:        for(i = 0; i < stptr; i++){ /* screen size */
        !           120:                strcpy(jname,stack[i].name);
        !           121:                jname[0] = 'd';
        !           122:                if(stat(jname,&statbuf) < 0)
        !           123:                        continue;
        !           124:                if(printlong || guid(statbuf.st_uid,statbuf.st_gid) == hisuid){
        !           125:                        if(!printhead){
        !           126:                                printhead = 1;
        !           127:                                printf( "From       To           Len  Code   Time          Command\n");
        !           128:                                };
        !           129:                        process();
        !           130:                        }
        !           131:                else summarize( stack[i].filesize );
        !           132:                }
        !           133: # ifdef MAXSENDQ
        !           134:        if( listrest )
        !           135:                listem(dp);
        !           136: # endif
        !           137:        closedir(df);
        !           138:        printsum();
        !           139:        if(more)printf("   ... more ...\n");
        !           140:        }
        !           141: summarize( size )
        !           142: long size;
        !           143:        {
        !           144: #ifndef DONTHOLDBIG
        !           145:        if( size > MAXDAYFILE ) {
        !           146:                nsumj++;
        !           147:                nsumb += size;
        !           148:        }
        !           149:        else {
        !           150:                sumj++;
        !           151:                sumb += size;
        !           152:        }
        !           153: #else
        !           154:        sumb += size;
        !           155:        sumj++;
        !           156: #endif
        !           157:        }
        !           158: printsum(){
        !           159: #ifndef DONTHOLDBIG
        !           160:        if( sumj != 0 || nsumj != 0 ){
        !           161:                printf("day jobs: %d request%s (%ld bytes)",
        !           162:                        sumj, (sumj > 1 ? "s" : ""), sumb);
        !           163:                if(nsumj > 0)
        !           164:                        printf("; night jobs: %d request%s (%ld bytes)", 
        !           165:                                nsumj, ( nsumj > 1 ? "s" : ""), nsumb );
        !           166:                putchar('\n');
        !           167:                nsumb = 0l;
        !           168:                nsumj = 0;
        !           169:        }
        !           170: #else
        !           171:        if(sumj != 0){
        !           172:                printf("%d request%s, %ld bytes\n",
        !           173:                        sumj,(sumj > 1 ? "s" : ""),sumb);
        !           174:                }
        !           175: #endif
        !           176:        sumj = 0;
        !           177:        sumb = 0l;
        !           178:        }
        !           179: process(){
        !           180:        static struct header hd;
        !           181:        static char nightheader = 0;
        !           182:        FILE *look;
        !           183:        char *cp;
        !           184:        long size;
        !           185: 
        !           186:        printsum();
        !           187:        look = fopen(jname,"r");
        !           188:        if(look == NULL)
        !           189:                return;
        !           190:        readhdfd(&hd,look);
        !           191:        fclose(look);
        !           192:        if(hd.hd_snfrom[0] == 0)strcat(hd.hd_addrfrom,"Internal");
        !           193:        expandcc(hd.hd_sttyname);
        !           194:        cp = ctime(&statbuf.st_mtime);
        !           195:        cp[strlen(cp)-9] = 0;
        !           196:        jname[3] = jname[2];
        !           197:        size = getsize(&statbuf);
        !           198:        if(size >= MAXDAYFILE && ! nightheader){
        !           199:                printf("(> %ld bytes, will only transfer between Midnight and 6AM.)\n", MAXDAYFILE);
        !           200:                nightheader = 1;
        !           201:                };
        !           202:        printf("%-10s %-10s %6ld %s %s  %-.27s\n",
        !           203:                hd.hd_addrfrom,hd.hd_addrto,size,jname+3,cp+4,hd.hd_scmdvirt);
        !           204:        }
        !           205: readhdfd(phd,fd)
        !           206: register struct header *phd;
        !           207: FILE *fd;
        !           208: {
        !           209:        char sbuf[BUFSIZ], parmlist[PARMLIST];
        !           210:        char *s, cflag;
        !           211:        int c, i;
        !           212:        phd->hd_code = phd->hd_mchto = phd->hd_snto[0] = phd->hd_sinfile[0] = 0;
        !           213:        phd->hd_soutfile[0] = phd->hd_srespfile[0] = phd->hd_snfrom[0] = 0;
        !           214:        phd->hd_scmdact[0] = 0;
        !           215:        for(i=0;i<20;i++)phd->hd_sttyname[i] = 0;
        !           216: 
        !           217:        phd->hd_code = ngetc(fd);
        !           218:        if(phd->hd_code == 0)return;
        !           219:        phd->hd_mchto = ngetc(fd);
        !           220:        phd->hd_mchfrom = ngetc(fd);    /* from machine */
        !           221:        phd->hd_vmajor = ngetc(fd);
        !           222:        phd->hd_vminor = ngetc(fd);
        !           223:        ngets(phd->hd_snto,NS,fd);
        !           224:        ngets(phd->hd_spasswd,20,fd);                   /* passwd */
        !           225:        ngets(phd->hd_sinfile,FNS,fd);
        !           226:        ngets(phd->hd_soutfile,FNS,fd);
        !           227:        ngets(phd->hd_srespfile,FNS,fd);
        !           228:        ngets(phd->hd_snfrom,NS,fd);
        !           229:        ngets(phd->hd_sttyname,20,fd);
        !           230:        cflag = ngetc(fd);              
        !           231:        ngets(sbuf,BUFSIZ,fd);                          /* lttytime */
        !           232:        ngets(parmlist,PARMLIST,fd);                    /* jobno */
        !           233:        parseparmlist(parmlist);
        !           234:        ngets(sbuf,BUFSIZ,fd);                          /* timesent */
        !           235:        s = phd->hd_scmdact;
        !           236:        while((c = getc(fd)) != EOF && c != '\n'){
        !           237:                if(c == '\\')c = getc(fd);
        !           238:                *s++ = c;
        !           239:                }
        !           240:        *s = 0;
        !           241:        s = phd->hd_scmdvirt;
        !           242:        while((c = getc(fd)) != EOF && c != '\n'){
        !           243:                if(c == '\\')c = getc(fd);
        !           244:                *s++ = c;
        !           245:                }
        !           246:        *s = 0;
        !           247:        if(phd->hd_scmdvirt[0] == 0)strcpy(phd->hd_scmdvirt,phd->hd_scmdact);
        !           248:        sprintf(phd->hd_addrfrom,"%c:%s",phd->hd_mchfrom,phd->hd_snfrom);
        !           249:        sprintf(phd->hd_addrto  ,"%c:%s",phd->hd_mchto  ,phd->hd_snto  );
        !           250: }
        !           251: ngetc(fd)
        !           252: FILE *fd;
        !           253: {
        !           254:        char b[3];
        !           255:        if(feof(fd))return(0);
        !           256:        if(fread(b,1,3,fd) != 3) return(0);
        !           257:        return(b[0]);
        !           258:        }
        !           259: /* read a string s of max length maxlen out of queue file */
        !           260: ngets(s,maxlen,fd)
        !           261: int maxlen;
        !           262: char *s;
        !           263: FILE *fd;
        !           264: {
        !           265:        int i;
        !           266:        if(feof(fd))return;
        !           267:        for(;;){
        !           268:                i = getc(fd);
        !           269:                if(i == EOF){
        !           270:                        *s = 0;
        !           271:                        return;
        !           272:                        }
        !           273:                *s = i;
        !           274:                if(*s == '\\')*s = getc(fd);
        !           275:                if(*s == ' ')break;
        !           276:                if(maxlen-- > 0)s++;
        !           277:                }
        !           278:        *s = 0;
        !           279:        getc(fd);
        !           280:        }
        !           281: insert(f,t)
        !           282:   char *f;
        !           283:   long t; {
        !           284:        strcpy(stack[stptr].name,f);
        !           285:        stack[stptr++].filesize = t;
        !           286:        return(stptr <= STSIZE);
        !           287:        }
        !           288: compar(a,b)
        !           289:   register struct table *a,*b; {
        !           290:        if(a->filesize < b->filesize)return(-1);
        !           291:        if(a->filesize > b->filesize)return(1);
        !           292:        return(0);
        !           293:        }
        !           294: sort(){                /* use this cause qsort doesn't work */
        !           295:        register int i,j;
        !           296:        for(i=0; i< stptr-1; i++)
        !           297:                for(j=i+1;j<stptr;j++)
        !           298:                        if(compar(&stack[i],&stack[j]) > 0)
        !           299:                                swap(&stack[i],&stack[j]);
        !           300:        }
        !           301: swap(a,b)
        !           302:   register struct table *a, *b; {
        !           303:        char str[16];
        !           304:        long t;
        !           305:        strcpy(str,a->name);
        !           306:        t = a->filesize;
        !           307:        strcpy(a->name,b->name);
        !           308:        a->filesize = b->filesize;
        !           309:        strcpy(b->name,str);
        !           310:        b->filesize = t;
        !           311:        }
        !           312: # ifdef MAXSENDQ
        !           313: listem(dp)
        !           314: register struct direct *dp; {
        !           315:        
        !           316:        do {
        !           317:                if(dp->d_name[0] != 'c'
        !           318:                || dp->d_name[1] != 'f'
        !           319:                || stat( dp->d_name, &statbuf ) < 0 )
        !           320:                        continue;
        !           321:                if( mach != dp->d_name[2] )
        !           322:                        continue;
        !           323:                dp->d_name[0] = 'd';
        !           324:                if( stat( dp->d_name, &statbuf ) < 0 )
        !           325:                        continue;
        !           326:                if( printlong || guid( statbuf.st_uid, statbuf.st_gid) == hisuid )
        !           327:                        process();
        !           328:                else
        !           329:                        summarize( getsize( &statbuf ) );
        !           330:        } while((dp = readdir(df)) != NULL);
        !           331: 
        !           332:        return;
        !           333: }
        !           334: # endif MAXSENDQ

unix.superglobalmegacorp.com

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