Annotation of researchv10no/cmd/uucp/cico.c, revision 1.1.1.1

1.1       root        1: /*     %W%
                      2: 
                      3:  * uucp file transfer program:
                      4:  * to place a call to a remote machine, login, and
                      5:  * copy files between the two machines.
                      6: 
                      7: */
                      8: #include "uucp.h"
                      9: VERSION(%W%);
                     10: 
                     11: #ifndef        V7
                     12: #include <sys/sysmacros.h>
                     13: #endif
                     14: 
                     15: jmp_buf Sjbuf;
                     16: extern int Errorrate;
                     17: char   uuxqtarg[MAXBASENAME] = {'\0'};
                     18: 
                     19: #define USAGE  "[-xNUM] [-r[0|1]] -sSYSTEM"
                     20: 
                     21: extern void closedem();
                     22: 
                     23: main(argc, argv, envp)
                     24: char *argv[];
                     25: char **envp;
                     26: {
                     27:        extern onintr(), timeout();
                     28:        extern intrEXIT();
                     29:        extern char *pskip();
                     30:        int ret, seq, exitcode;
                     31:        char file[NAMESIZE];
                     32:        char msg[BUFSIZ], *p, *q;
                     33:        char xflag[6];  /* -xN N is single digit */
                     34:        char *ttyn;
                     35:        char    cb[128];
                     36:        time_t  ts, tconv;
                     37: #ifndef        V7
                     38:        long    minulimit, dummy;
                     39: #endif V7
                     40: 
                     41:        Uid = getuid();
                     42:        Euid = geteuid();       /* this should be UUCPUID */
                     43:        if (Uid == 0)
                     44:            setuid(UUCPUID);    /* fails in ATTSV, but so what? */
                     45:        Env = envp;
                     46:        Role = SLAVE;
                     47:        strcpy(Logfile, LOGCICO);
                     48:        *Rmtname = NULLCHAR;
                     49: 
                     50:        closedem();
                     51:        time(&Nstat.t_qtime);
                     52:        tconv = Nstat.t_start = Nstat.t_qtime;
                     53:        strcpy(Progname, "uucico");
                     54:        Pchar = 'C';
                     55:        (void) signal(SIGILL, intrEXIT);
                     56:        (void) signal(SIGTRAP, intrEXIT);
                     57:        (void) signal(SIGIOT, intrEXIT);
                     58:        (void) signal(SIGEMT, intrEXIT);
                     59:        (void) signal(SIGFPE, intrEXIT);
                     60:        (void) signal(SIGBUS, intrEXIT);
                     61:        (void) signal(SIGSEGV, intrEXIT);
                     62:        (void) signal(SIGSYS, intrEXIT);
                     63:        (void) signal(SIGPIPE, SIG_IGN);
                     64:        (void) signal(SIGINT, onintr);
                     65:        (void) signal(SIGHUP, onintr);
                     66:        (void) signal(SIGQUIT, onintr);
                     67:        (void) signal(SIGTERM, onintr);
                     68: #ifdef ATTSV
                     69:        (void) signal(SIGUSR1, SIG_IGN);
                     70:        (void) signal(SIGUSR2, SIG_IGN);
                     71: #endif
                     72:        ret = guinfo(Euid, User);
                     73:        ASSERT(ret == 0, "BAD UID ", "", ret);
                     74:        strncpy(Uucp, User, NAMESIZE);
                     75: 
                     76:        setuucp(User);
                     77:        ret = guinfo(Uid, Loginuser);
                     78:        ASSERT(ret == 0, "BAD LOGIN_UID ", "", ret);
                     79: 
                     80:        *xflag = NULLCHAR;
                     81:        Ifn = Ofn = -1;
                     82:        while ((ret = getopt(argc, argv, "d:r:s:x:")) != EOF) {
                     83:                switch (ret) {
                     84:                case 'd':
                     85:                        Spool = optarg;
                     86:                        break;
                     87:                case 'r':
                     88:                        Role = atoi(optarg);
                     89:                        break;
                     90:                case 's':
                     91: /*  avoid 2 searches of the systems file
                     92:                        if (versys(optarg, 0)) {
                     93:                            DEBUG(4, "%s not in Systems file\n", optarg);
                     94:                            cleanup(101);
                     95:                        }
                     96: */
                     97:                        strncpy(Rmtname, optarg, MAXBASENAME);
                     98:                        Rmtname[MAXBASENAME] = '\0';
                     99:                        /* set args for possible xuuxqt call */
                    100:                        strcpy(uuxqtarg, Rmtname);
                    101:                        break;
                    102:                case 'x':
                    103:                        Debug = atoi(optarg);
                    104:                        if (Debug <= 0)
                    105:                                Debug = 1;
                    106:                        if (Debug > 9)
                    107:                                Debug = 9;
                    108:                        (void) sprintf(xflag, "-x%d", Debug);
                    109:                        break;
                    110:                default:
                    111:                        (void) fprintf(stderr, "\tusage: %s %s\n",
                    112:                            Progname, USAGE);
                    113:                        exit(1);
                    114:                }
                    115:        }
                    116: 
                    117:        if (Role == MASTER) {
                    118:            if (*Rmtname == NULLCHAR) {
                    119:                DEBUG(5, "No -s specified\n" , "");
                    120:                cleanup(101);
                    121:            }
                    122:            /* get Myname - it depends on who I'm calling--Rmtname */
                    123:            (void) mchFind(Rmtname);
                    124:            myName(Myname);
                    125:            if (EQUALSN(Rmtname, Myname, SYSNSIZE)) {
                    126:                DEBUG(5, "This system specified: -sMyname: %s, ", Myname);
                    127:                cleanup(101);
                    128:            }
                    129:        }
                    130: 
                    131:        ASSERT(chdir(Spool) == 0, Ct_CHDIR, Spool, errno);
                    132:        strcpy(Wrkdir, Spool);
                    133: 
                    134:        if (Role == SLAVE) {
                    135: 
                    136:                /*
                    137:                 * initial handshake
                    138:                 */
                    139:                ret = savline();
                    140:                Ifn = 0;
                    141:                Ofn = 1;
                    142:                fixline(Ifn, 0, D_ACU);
                    143:                freopen(RMTDEBUG, "a", stderr);
                    144:                setbuf(stderr, (char *)NULL);
                    145:                /* get MyName - use logFind to check PERMISSIONS file */
                    146:                (void) logFind(Loginuser, "");
                    147:                myName(Myname);
                    148: 
                    149:                DEBUG(4,"cico.c: Myname - %s\n",Myname);
                    150:                DEBUG(4,"cico.c: Loginuser - %s\n",Loginuser);
                    151:                Nstat.t_scall = times(&Nstat.t_tga);
                    152:                (void) sprintf(msg, "here=%s", Myname);
                    153:                omsg('S', msg, Ofn);
                    154:                (void) signal(SIGALRM, timeout);
                    155:                (void) alarm(2 * MAXMSGTIME);   /* give slow machines a second chance */
                    156:                if (setjmp(Sjbuf)) {
                    157: 
                    158:                        /*
                    159:                         * timed out
                    160:                         */
                    161:                        ret = restline();
                    162:                        rmlock(CNULL);
                    163:                        exit(0);
                    164:                }
                    165:                for (;;) {
                    166:                        ret = imsg(msg, Ifn);
                    167:                        if (ret != 0) {
                    168:                                (void) alarm(0);
                    169:                                ret = restline();
                    170:                                rmlock(CNULL);
                    171:                                exit(0);
                    172:                        }
                    173:                        if (msg[0] == 'S')
                    174:                                break;
                    175:                }
                    176:                Nstat.t_ecall = times(&Nstat.t_tga);
                    177:                (void) alarm(0);
                    178:                q = &msg[1];
                    179:                p = pskip(q);
                    180:                strncpy(Rmtname, q, MAXBASENAME);
                    181:                Rmtname[MAXBASENAME] = '\0';
                    182: 
                    183:                seq = 0;
                    184:                while (*p == '-') {
                    185:                        q = pskip(p);
                    186:                        switch(*(++p)) {
                    187:                        case 'x':
                    188:                                Debug = atoi(++p);
                    189:                                if (Debug <= 0)
                    190:                                        Debug = 1;
                    191:                                break;
                    192:                        case 'Q':
                    193:                                seq = atoi(++p);
                    194:                                break;
                    195:                        default:
                    196:                                break;
                    197:                        }
                    198:                        p = q;
                    199:                }
                    200:                DEBUG(4, "sys-%s\n", Rmtname);
                    201: 
                    202: #ifdef NOSTRANGERS
                    203: /* here's the place to look the remote system up in the Systems file.
                    204:  * If the command NOSTRANGERS is executable and 
                    205: /* If they're not in my file then hang up */
                    206:                if ( (access(NOSTRANGERS, 1) == 0) && versys(Rmtname, 1)) {
                    207:                    char unkcmd[64];
                    208:                    register char *p;
                    209: 
                    210:                    omsg('R', "You are unknown to me", Ofn);
                    211:                    for (p = Rmtname; *p; p++)
                    212:                        if (*p == '\'')
                    213:                                *p = ' ';       /* cheap hack.  who cares. */
                    214:                    (void) sprintf(unkcmd, "%s '%s'", NOSTRANGERS, Rmtname);
                    215:                    system(unkcmd);
                    216:                    cleanup(101);
                    217:                }
                    218: #endif NOSTRANGERS
                    219: 
                    220:                if (mlock(Rmtname)) {
                    221:                        omsg('R', "LCK", Ofn);
                    222:                        cleanup(101);
                    223:                }
                    224:                
                    225:                /* validate login using PERMISSIONS file */
                    226:                if (logFind(Loginuser, Rmtname) == FAIL) {
                    227:                        Uerror = SS_BAD_LOG_MCH;
                    228:                        logent(UERRORTEXT, "FAILED");
                    229:                        systat(Rmtname, SS_BAD_LOG_MCH, UERRORTEXT,
                    230:                            Retrytime);
                    231:                        omsg('R', "LOGIN", Ofn);
                    232:                        cleanup(101);
                    233:                }
                    234: 
                    235:                ret = callBack();
                    236:                DEBUG(4,"return from callcheck: %s",ret ? "TRUE" : "FALSE");
                    237:                if (ret==TRUE) {
                    238:                        (void) signal(SIGINT, SIG_IGN);
                    239:                        (void) signal(SIGHUP, SIG_IGN);
                    240:                        omsg('R', "CB", Ofn);
                    241:                        logent("CALLBACK", "REQUIRED");
                    242: 
                    243:                        /*
                    244:                         * set up for call back
                    245:                         */
                    246:                        systat(Rmtname, SS_CALLBACK, "CALL BACK", Retrytime);
                    247:                        gename(CMDPRE, Rmtname, 'C', file);
                    248:                        (void) close(creat(file, CFILEMODE));
                    249:                        xuucico(Rmtname);
                    250:                        cleanup(101);
                    251:                }
                    252: 
                    253:                if (callok(Rmtname) == SS_SEQBAD) {
                    254:                        Uerror = SS_SEQBAD;
                    255:                        logent(UERRORTEXT, "PREVIOUS");
                    256:                        omsg('R', "BADSEQ", Ofn);
                    257:                        cleanup(101);
                    258:                }
                    259: 
                    260:                if ((ret = gnxseq(Rmtname)) == seq) {
                    261:                        omsg('R', "OK", Ofn);
                    262:                        cmtseq();
                    263:                } else {
                    264:                        Uerror = SS_SEQBAD;
                    265:                        systat(Rmtname, SS_SEQBAD, UERRORTEXT, Retrytime);
                    266:                        logent(UERRORTEXT, "HANDSHAKE FAILED");
                    267:                        ulkseq();
                    268:                        omsg('R', "BADSEQ", Ofn);
                    269:                        cleanup(101);
                    270:                }
                    271:                if ((ttyn = ttyname(Ifn)) != NULL)
                    272:                        strcpy(Dc, BASENAME(ttyn, '/'));
                    273:                else
                    274:                        strcpy(Dc, "notty");
                    275:                /* set args for possible xuuxqt call */
                    276:                strcpy(uuxqtarg, Rmtname);
                    277:        }
                    278: 
                    279:        strcpy(User, Uucp);
                    280: /*
                    281:  *  Ensure reasonable ulimit (MINULIMIT)
                    282:  */
                    283: 
                    284: #ifndef        V7
                    285:        minulimit = ulimit(1,dummy);
                    286:        ASSERT(minulimit >= MINULIMIT, "ULIMIT TOO SMALL",
                    287:            Loginuser, minulimit);
                    288: #endif
                    289:        if (Role == MASTER && callok(Rmtname) != 0) {
                    290:                logent("SYSTEM STATUS", "CAN NOT CALL");
                    291:                cleanup(101);
                    292:        }
                    293: 
                    294:        chremdir(Rmtname);
                    295: 
                    296:        (void) strcpy(Wrkdir, RemSpool);
                    297:        if (Role == MASTER) {
                    298: 
                    299:                /*
                    300:                 * master part
                    301:                 */
                    302:                (void) signal(SIGINT, SIG_IGN);
                    303:                (void) signal(SIGHUP, SIG_IGN);
                    304:                (void) signal(SIGQUIT, SIG_IGN);
                    305:                if (Ifn != -1 && Role == MASTER) {
                    306:                        (void) write(Ofn, EOTMSG, strlen(EOTMSG));
                    307:                        (void) close(Ofn);
                    308:                        (void) close(Ifn);
                    309:                        Ifn = Ofn = -1;
                    310:                        rmlock(CNULL);
                    311:                        sleep(3);
                    312:                }
                    313:                (void) sprintf(msg, "call to %s ", Rmtname);
                    314:                if (mlock(Rmtname) != 0) {
                    315:                        logent(msg, "LOCKED");
                    316:                        CDEBUG(1, "Currently Talking With %s\n",
                    317:                            Rmtname);
                    318:                        cleanup(100);
                    319:                }
                    320:                Nstat.t_scall = times(&Nstat.t_tga);
                    321:                Ofn = Ifn = conn(Rmtname);
                    322:                Nstat.t_ecall = times(&Nstat.t_tga);
                    323:                if (Ofn < 0) {
                    324:                        delock(Rmtname);
                    325:                        logent(UERRORTEXT, "CONN FAILED");
                    326:                        systat(Rmtname, Uerror, UERRORTEXT, Retrytime);
                    327:                        cleanup(101);
                    328:                } else {
                    329:                        logent(msg, "SUCCEEDED");
                    330:                        ttyn = ttyname(Ifn);
                    331:                }
                    332:        
                    333:                if (setjmp(Sjbuf)) {
                    334:                        delock(Rmtname);
                    335:                        Uerror = SS_LOGIN_FAILED;
                    336:                        logent(Rmtname, UERRORTEXT);
                    337:                        systat(Rmtname, SS_LOGIN_FAILED,
                    338:                            UERRORTEXT, Retrytime);
                    339:                        DEBUG(4, "%s - failed\n", UERRORTEXT);
                    340:                        cleanup(101);
                    341:                }
                    342:                (void) signal(SIGALRM, timeout);
                    343:                /* give slow guys lots of time to thrash */
                    344:                (void) alarm(3 * MAXMSGTIME);
                    345:                for (;;) {
                    346:                        ret = imsg(msg, Ifn);
                    347:                        if (ret != 0) {
                    348:                                continue; /* try again */
                    349:                        }
                    350:                        if (msg[0] == 'S')
                    351:                                break;
                    352:                }
                    353:                (void) alarm(0);
                    354:                if(EQUALSN("here=", &msg[1], 5)){
                    355:                        /*
                    356:                        /* this is a problem.  We'd like to compare with an
                    357:                         * untruncated Rmtname but we fear incompatability.
                    358:                         * So we'll look at most 6 chars (at most).
                    359:                         */
                    360:                        if(!EQUALSN(&msg[6], Rmtname, (strlen(Rmtname)< 7 ?
                    361:                                                strlen(Rmtname) : 6))){
                    362:                                delock(Rmtname);
                    363:                                Uerror = SS_WRONG_MCH;
                    364:                                logent(&msg[6], UERRORTEXT);
                    365:                                systat(Rmtname, SS_WRONG_MCH, UERRORTEXT,
                    366:                                     Retrytime);
                    367:                                DEBUG(4, "%s - failed\n", UERRORTEXT);
                    368:                                cleanup(101);
                    369:                        }
                    370:                }
                    371:                CDEBUG(1,"Login Successful: System=%s\n",&msg[6]);
                    372:                seq = gnxseq(Rmtname);
                    373:                (void) sprintf(msg, "%s -Q%d %s", Myname, seq, xflag);
                    374:                omsg('S', msg, Ofn);
                    375:                (void) alarm(2 * MAXMSGTIME);   /* give slow guys some thrash time */
                    376:                for (;;) {
                    377:                        ret = imsg(msg, Ifn);
                    378:                        DEBUG(3, "msg-%s\n", msg);
                    379:                        if (ret != 0) {
                    380:                                (void) alarm(0);
                    381:                                delock(Rmtname);
                    382:                                ulkseq();
                    383:                                cleanup(101);
                    384:                        }
                    385:                        if (msg[0] == 'R')
                    386:                                break;
                    387:                }
                    388:                (void) alarm(0);
                    389: 
                    390:                /*  check for rejects from remote */
                    391:                Uerror = 0;
                    392:                if (EQUALS(&msg[1], "LCK")) 
                    393:                        Uerror = SS_RLOCKED;
                    394:                else if (EQUALS(&msg[1], "LOGIN"))
                    395:                        Uerror = SS_RLOGIN;
                    396:                else if (EQUALS(&msg[1], "CB"))
                    397:                        Uerror = SS_CALLBACK;
                    398:                else if (EQUALS(&msg[1], "You are unknown to me"))
                    399:                        Uerror = SS_RUNKNOWN;
                    400:                else if (EQUALS(&msg[1], "BADSEQ"))
                    401:                        Uerror = SS_SEQBAD;
                    402:                else if (!EQUALS(&msg[1], "OK"))
                    403:                        Uerror = SS_UNKNOWN_RESPONSE;
                    404:                if (Uerror)  {
                    405:                        delock(Rmtname);
                    406:                        systat(Rmtname, Uerror, UERRORTEXT, Retrytime);
                    407:                        logent(UERRORTEXT, "HANDSHAKE FAILED");
                    408:                        CDEBUG(1, "HANDSHAKE FAILED: %s\n", UERRORTEXT);
                    409:                        ulkseq();
                    410:                        cleanup(101);
                    411:                }
                    412:                cmtseq();
                    413:        }
                    414:        DEBUG(4, " Rmtname %s, ", Rmtname);
                    415:        DEBUG(4, "Role %s,  ", Role ? "MASTER" : "SLAVE");
                    416:        DEBUG(4, "Ifn - %d, ", Ifn);
                    417:        DEBUG(4, "Loginuser - %s\n", Loginuser);
                    418: 
                    419:        /* alarm/setjmp added here due to experience with uucico
                    420:         * hanging for hours in imsg().
                    421:         */
                    422:        if (setjmp(Sjbuf)) {
                    423:                delock(Rmtname);
                    424:                logent("startup", "TIMEOUT");
                    425:                DEBUG(4, "%s - timeout\n", "startup");
                    426:                cleanup(101);
                    427:        }
                    428:        (void) alarm(MAXSTART);
                    429:        ret = startup(Role);
                    430:        (void) alarm(0);
                    431: 
                    432:        if (ret != SUCCESS) {
                    433:                delock(Rmtname);
                    434:                logent("startup", "FAILED");
                    435:                Uerror = SS_STARTUP;
                    436:                CDEBUG(1, "%s\n", UERRORTEXT);
                    437:                systat(Rmtname, Uerror, UERRORTEXT, Retrytime);
                    438:                exitcode = 101;
                    439:        } else {
                    440:                logent("startup", "OK");
                    441:                systat(Rmtname, SS_INPROGRESS, UTEXT(SS_INPROGRESS),Retrytime);
                    442:                Nstat.t_sftp = times(&Nstat.t_tga);
                    443: 
                    444:                exitcode = cntrl(Role);
                    445:                Nstat.t_eftp = times(&Nstat.t_tga);
                    446:                DEBUG(4, "cntrl - %d\n", exitcode);
                    447:                (void) signal(SIGINT, SIG_IGN);
                    448:                (void) signal(SIGHUP, SIG_IGN);
                    449:                (void) signal(SIGALRM, timeout);
                    450: 
                    451:                if (exitcode == 0) {
                    452:                        (void) time(&ts);
                    453:                        (void) sprintf(cb, "conversation complete %s %ld",
                    454:                                Dc, ts - tconv);
                    455:                        logent(cb, "OK");
                    456:                        systat(Rmtname, SS_OK, UTEXT(SS_OK), Retrytime);
                    457: 
                    458:                } else {
                    459:                        logent("conversation complete", "FAILED");
                    460:                        systat(Rmtname, SS_CONVERSATION,
                    461:                            UTEXT(SS_CONVERSATION), 0);
                    462:                }
                    463:                (void) alarm(2 * MAXMSGTIME);   /* give slow guys some thrash time */
                    464:                omsg('O', "OOOOO", Ofn);
                    465:                CDEBUG(4, "send OO %d,", ret);
                    466:                if (!setjmp(Sjbuf)) {
                    467:                        for (;;) {
                    468:                                omsg('O', "OOOOO", Ofn);
                    469:                                ret = imsg(msg, Ifn);
                    470:                                if (ret != 0)
                    471:                                        break;
                    472:                                if (msg[0] == 'O')
                    473:                                        break;
                    474:                        }
                    475:                }
                    476:                (void) alarm(0);
                    477:        }
                    478:        cleanup(exitcode);
                    479: }
                    480: 
                    481: /*
                    482:  * clean and exit with "code" status
                    483:  */
                    484: cleanup(code)
                    485: register int code;
                    486: {
                    487:        int ret;
                    488: 
                    489:        (void) signal(SIGINT, SIG_IGN);
                    490:        (void) signal(SIGHUP, SIG_IGN);
                    491:        rmlock(CNULL);
                    492:        closedem();
                    493:        if (Role == SLAVE) {
                    494:                ret = restline();
                    495:                DEBUG(4, "ret restline - %d\n", ret);
                    496:                sethup(0);
                    497:        }
                    498:        if (Ofn != -1) {
                    499:                if (Role == MASTER)
                    500:                        (void) write(Ofn, EOTMSG, strlen(EOTMSG));
                    501:                (void) close(Ifn);
                    502:                (void) close(Ofn);
                    503:        }
                    504:        DEBUG(4, "exit code %d\n", code);
                    505:        CDEBUG(1, "Conversation Complete: Status %s\n\n", 
                    506:            code ? "FAILED" : "SUCCEEDED");
                    507: 
                    508:        cleanTM();
                    509:        if (code == 0)
                    510:                xuuxqt(uuxqtarg);
                    511:        exit(code);
                    512: }
                    513: 
                    514: short TM_cnt = 0;
                    515: char TM_name[MAXNAMESIZE];
                    516: 
                    517: cleanTM()
                    518: {
                    519:        register int i;
                    520:        char tm_name[MAXNAMESIZE];
                    521: 
                    522:        DEBUG(7,"TM_cnt: %d\n",TM_cnt);
                    523:        for(i=0; i < TM_cnt; i++) {
                    524:                (void) sprintf(tm_name, "%s.%3.3d", TM_name, i);
                    525:                DEBUG(7, "tm_name: %s\n", tm_name);
                    526:                unlink(tm_name);
                    527:        }
                    528: }
                    529: 
                    530: TMname(file, pnum)
                    531: char *file;
                    532: {
                    533: 
                    534:        (void) sprintf(file, "%s/TM.%.5d.%.3d", RemSpool, pnum, TM_cnt);
                    535:        if (TM_cnt == 0)
                    536:            (void) sprintf(TM_name, "%s/TM.%.5d", RemSpool, pnum);
                    537:        DEBUG(7, "TMname(%s)\n", file);
                    538:        TM_cnt++;
                    539: }
                    540: 
                    541: /*
                    542:  * intrrupt - remove locks and exit
                    543:  */
                    544: onintr(inter)
                    545: register int inter;
                    546: {
                    547:        char str[30];
                    548:        /* I'm putting a test for zero here because I saw it happen
                    549:         * and don't know how or why, but it seemed to then loop
                    550:         * here for ever?
                    551:         */
                    552:        if (inter == 0)
                    553:            exit(99);
                    554:        (void) signal(inter, SIG_IGN);
                    555:        (void) sprintf(str, "SIGNAL %d", inter);
                    556:        logent(str, "CAUGHT");
                    557:        cleanup(inter);
                    558: }
                    559: 
                    560: /*ARGSUSED*/
                    561: intrEXIT(inter)
                    562: {
                    563:        char    cb[10];
                    564:        extern int errno;
                    565: 
                    566:        (void) sprintf(cb, "%d", errno);
                    567:        logent("INTREXIT", cb);
                    568:        (void) signal(SIGIOT, SIG_DFL);
                    569:        (void) signal(SIGILL, SIG_DFL);
                    570:        rmlock(CNULL);
                    571:        closedem();
                    572:        (void) setuid(Uid);
                    573:        abort();
                    574: }
                    575: 
                    576: /*
                    577:  * catch SIGALRM routine
                    578:  */
                    579: timeout()
                    580: {
                    581:        longjmp(Sjbuf, 1);
                    582: }
                    583: 
                    584: static char *
                    585: pskip(p)
                    586: register char *p;
                    587: {
                    588:        while( *p && *p != ' ' )
                    589:                ++p;
                    590:        if( *p ) *p++ = 0;
                    591:        return(p);
                    592: }
                    593: 
                    594: void
                    595: closedem()
                    596: {
                    597:        register i;
                    598: 
                    599:        for(i=3;i<_NFILE;i++)
                    600:                (void) close(i);
                    601: }

unix.superglobalmegacorp.com

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