Annotation of 43BSDTahoe/new/xns/examples/filing/cmds.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char RCSid[] = "$Header: cmds.c,v 2.3 86/12/15 11:40:49 jqj Exp $";
        !             3: #endif
        !             4: /* $Log:       cmds.c,v $
        !             5:  * Revision 2.3  86/12/15  11:40:49  jqj
        !             6:  * Added support for more ViewPoint file types (no other attributes, though)
        !             7:  * 
        !             8:  * Revision 2.2  86/12/11  06:11:30  jqj
        !             9:  * Eliminated form, mode, and struct commands.  Started adding support for
        !            10:  * more file types.
        !            11:  * 
        !            12:  * Revision 2.1  86/06/30  12:18:56  jqj
        !            13:  * get proper order of args to allow mget to work right.
        !            14:  * 
        !            15:  * Revision 2.0  85/11/21  07:22:41  jqj
        !            16:  * 4.3BSD standard release
        !            17:  * 
        !            18:  * Revision 1.2  85/10/30  08:06:37  root
        !            19:  * if prompt=off but verbose=on, print the name of each file during
        !            20:  * multiplefile transfers.
        !            21:  * 
        !            22:  * Revision 1.1  85/05/27  06:30:51  jqj
        !            23:  * Initial revision
        !            24:  * 
        !            25:  * based on Berkeley tcp/ftp
        !            26:  */
        !            27: /* static char sccsid[] = "@(#)cmds.c  4.9 (Berkeley) 7/26/83"; */
        !            28: 
        !            29: /*
        !            30:  * FTP User Program -- Command Routines.
        !            31:  */
        !            32: #include <sys/param.h>
        !            33: #include <sys/stat.h>
        !            34: #include <sys/socket.h>
        !            35: 
        !            36: #include <signal.h>
        !            37: #include <stdio.h>
        !            38: #include <errno.h>
        !            39: 
        !            40: #include "ftp_var.h"
        !            41: 
        !            42: extern char *globerr;
        !            43: extern char **glob();
        !            44: extern char *home;
        !            45: extern short gflag;
        !            46: extern char *remglob();
        !            47: extern char *getenv();
        !            48: extern char *index();
        !            49: extern char *rindex();
        !            50: 
        !            51: /*
        !            52:  * Connect to peer server and
        !            53:  * auto-login, if possible.
        !            54:  */
        !            55: setpeer(argc, argv)
        !            56:        int argc;
        !            57:        char *argv[];
        !            58: {
        !            59:        CourierConnection *hookup();
        !            60: 
        !            61:        if (connected != (CourierConnection*)0) {
        !            62:                printf("Already connected to %s, use disconnect first.\n",
        !            63:                        hostname);
        !            64:                return;
        !            65:        }
        !            66:        if (argc < 2) {
        !            67:                strcat(line, " ");
        !            68:                printf("(to) ");
        !            69:                gets(&line[strlen(line)]);
        !            70:                makeargv();
        !            71:                argc = margc;
        !            72:                argv = margv;
        !            73:        }
        !            74:        if (argc > 2) {
        !            75:                printf("usage: %s fileservice-name\n", argv[0]);
        !            76:                return;
        !            77:        }
        !            78:        connected = hookup(argv[1]);
        !            79:        if (connected != (CourierConnection*)0) {
        !            80:                if (autologin) {
        !            81:                        char *pwd, name[128], *getXNSpass();
        !            82:                        printf("XNS UserName: ");
        !            83:                        gets(name);
        !            84:                        pwd = getXNSpass("Password:");
        !            85:                        login(name,pwd);
        !            86:                }
        !            87:        }
        !            88: }
        !            89: 
        !            90: struct types {
        !            91:        char    *t_name;
        !            92:        int     t_type;
        !            93: } types[] = {
        !            94:        { "ascii",      TYPE_A },
        !            95:        { "binary",     TYPE_I },
        !            96:        { "image",      TYPE_I },
        !            97:        { "interpress", TYPE_Interpress },
        !            98:        { "viewpoint",  TYPE_VP },
        !            99:        { "vpcanvas",   TYPE_VPCanvas },
        !           100:        { "vpdictionary",TYPE_VPDictionary },
        !           101:        { "vpmailnote", TYPE_VPMailNote },
        !           102:        { "vpreference",TYPE_VPReference },
        !           103:        0
        !           104: };
        !           105: 
        !           106: /*
        !           107:  * Set transfer type.
        !           108:  */
        !           109: settype(argc, argv)
        !           110:        char *argv[];
        !           111: {
        !           112:        register struct types *p;
        !           113:        int comret;
        !           114: 
        !           115:        if (argc > 2 || (argc == 2 && strcmp(argv[1],"?") == 0)) {
        !           116:                char *sep;
        !           117: 
        !           118:                printf("usage: %s [ <integer> ", argv[0]);
        !           119:                sep = " | ";
        !           120:                for (p = types; p->t_name; p++) {
        !           121:                        printf("%s%s", sep, p->t_name);
        !           122:                }
        !           123:                printf(" ]\n");
        !           124:                return;
        !           125:        }
        !           126:        if (argc < 2) {
        !           127:                printf("Using %s mode to transfer files.\n", typename);
        !           128:                return;
        !           129:        }
        !           130:        for (p = types; p->t_name; p++)
        !           131:                if (strcmp(argv[1], p->t_name) == 0)
        !           132:                        break;
        !           133:        if (p->t_name == 0) {
        !           134:                int tmp = atoi(argv[1]);
        !           135:                if (tmp == 0 && strcmp(argv[1],"0") != 0) {
        !           136:                        printf("%s: unknown mode (\"%s ?\" for help)\n",
        !           137:                                argv[1], argv[0]);
        !           138:                        return;
        !           139:                }
        !           140:                sprintf(typename,"%d",tmp);
        !           141:                typevalue = tmp;
        !           142:                return;
        !           143:        }
        !           144:        strcpy(typename, p->t_name);
        !           145:        typevalue = p->t_type;
        !           146: }
        !           147: 
        !           148: /*
        !           149:  * Set binary transfer type.
        !           150:  */
        !           151: /*VARARGS*/
        !           152: setbinary()
        !           153: {
        !           154: 
        !           155:        call(settype, "type", "binary", 0);
        !           156: }
        !           157: 
        !           158: /*
        !           159:  * Set ascii transfer type.
        !           160:  */
        !           161: /*VARARGS*/
        !           162: setascii()
        !           163: {
        !           164: 
        !           165:        call(settype, "type", "ascii", 0);
        !           166: }
        !           167: 
        !           168: put(argc, argv)
        !           169:        int argc;
        !           170:        char *argv[];
        !           171: {
        !           172:        char *cmd;
        !           173: 
        !           174:        if (argc == 2)
        !           175:                argc++, argv[2] = argv[1];
        !           176:        if (argc < 2) {
        !           177:                strcat(line, " ");
        !           178:                printf("(local-file) ");
        !           179:                gets(&line[strlen(line)]);
        !           180:                makeargv();
        !           181:                argc = margc;
        !           182:                argv = margv;
        !           183:        }
        !           184:        if (argc < 2) {
        !           185: usage:
        !           186:                printf("%s local-file remote-file\n", argv[0]);
        !           187:                return;
        !           188:        }
        !           189:        if (argc < 3) {
        !           190:                strcat(line, " ");
        !           191:                printf("(remote-file) ");
        !           192:                gets(&line[strlen(line)]);
        !           193:                makeargv();
        !           194:                argc = margc;
        !           195:                argv = margv;
        !           196:        }
        !           197:        if (argc < 3) 
        !           198:                goto usage;
        !           199:        if (!globulize(&argv[1]))
        !           200:                return;
        !           201:        cmd = (argv[0][0] == 'a') ? "APPE" : "STOR";
        !           202:        sendrequest(cmd, argv[1], argv[2]);
        !           203: 
        !           204: }
        !           205: 
        !           206: /*
        !           207:  * Send multiple files.
        !           208:  */
        !           209: mput(argc, argv)
        !           210:        char *argv[];
        !           211: {
        !           212:        register int i;
        !           213: 
        !           214:        if (argc < 2) {
        !           215:                strcat(line, " ");
        !           216:                printf("(local-files) ");
        !           217:                gets(&line[strlen(line)]);
        !           218:                makeargv();
        !           219:                argc = margc;
        !           220:                argv = margv;
        !           221:        }
        !           222:        if (argc < 2) {
        !           223:                printf("%s local-files\n", argv[0]);
        !           224:                return;
        !           225:        }
        !           226:        for (i = 1; i < argc; i++) {
        !           227:                register char **cpp, **gargs;
        !           228: 
        !           229:                if (!doglob) {
        !           230:                        if (confirm(argv[0], argv[i]))
        !           231:                                sendrequest("STOR", argv[i], argv[i]);
        !           232:                        continue;
        !           233:                }
        !           234:                gargs = glob(argv[i]);
        !           235:                if (globerr != NULL) {
        !           236:                        printf("%s\n", globerr);
        !           237:                        if (gargs)
        !           238:                                blkfree(gargs);
        !           239:                        continue;
        !           240:                }
        !           241:                for (cpp = gargs; cpp && *cpp != NULL; cpp++)
        !           242:                        if (confirm(argv[0], *cpp))
        !           243:                                sendrequest("STOR", *cpp, *cpp);
        !           244:                if (gargs != NULL)
        !           245:                        blkfree(gargs);
        !           246:        }
        !           247: }
        !           248: 
        !           249: /*
        !           250:  * Receive one file.
        !           251:  */
        !           252: get(argc, argv)
        !           253:        char *argv[];
        !           254: {
        !           255: 
        !           256:        if (argc == 2)
        !           257:                argc++, argv[2] = argv[1];
        !           258:        if (argc < 2) {
        !           259:                strcat(line, " ");
        !           260:                printf("(remote-file) ");
        !           261:                gets(&line[strlen(line)]);
        !           262:                makeargv();
        !           263:                argc = margc;
        !           264:                argv = margv;
        !           265:        }
        !           266:        if (argc < 2) {
        !           267: usage:
        !           268:                printf("%s remote-file [ local-file ]\n", argv[0]);
        !           269:                return;
        !           270:        }
        !           271:        if (argc < 3) {
        !           272:                strcat(line, " ");
        !           273:                printf("(local-file) ");
        !           274:                gets(&line[strlen(line)]);
        !           275:                makeargv();
        !           276:                argc = margc;
        !           277:                argv = margv;
        !           278:        }
        !           279:        if (argc < 3) 
        !           280:                goto usage;
        !           281:        if (!globulize(&argv[2]))
        !           282:                return;
        !           283:        recvrequest("RETR", argv[2], argv[1], "w");
        !           284: }
        !           285: /*
        !           286:  * given a remote file name, strip directory path and version number
        !           287:  */
        !           288: char *
        !           289: getlocalname(cp)
        !           290:        char *cp;
        !           291: {
        !           292:        char *result;
        !           293:        static char buf[MAXPATHLEN];
        !           294: 
        !           295:        result = rindex(cp,'/'); /* find last component */
        !           296:        if (result == NULL) result = cp;
        !           297:        else result += 1;
        !           298:        strcpy(buf, result);
        !           299:        result = index(buf,'!'); /* strip version # if any */
        !           300:        if (result != NULL && result != buf) *result = '\000';
        !           301:        return(buf);
        !           302: }
        !           303: 
        !           304: /*
        !           305:  * Get multiple files.
        !           306:  */
        !           307: mget(argc, argv)
        !           308:        char *argv[];
        !           309: {
        !           310:        char *cp;
        !           311:        char *tailp;
        !           312: 
        !           313:        if (argc < 2) {
        !           314:                strcat(line, " ");
        !           315:                printf("(remote-files) ");
        !           316:                gets(&line[strlen(line)]);
        !           317:                makeargv();
        !           318:                argc = margc;
        !           319:                argv = margv;
        !           320:        }
        !           321:        if (argc < 2) {
        !           322:                printf("%s remote-files\n", argv[0]);
        !           323:                return;
        !           324:        }
        !           325:        while ((cp = remglob(argc, argv)) != NULL)
        !           326:                if (confirm(argv[0], cp)) {
        !           327:                        tailp = getlocalname(cp);
        !           328:                        recvrequest("RETR", tailp, cp, "w");
        !           329:                }
        !           330: }
        !           331: 
        !           332: char *
        !           333: remglob(argc, argv)
        !           334:        char *argv[];
        !           335: {
        !           336:        char temp[16];
        !           337:        static char buf[MAXPATHLEN];
        !           338:        static FILE *ftemp = NULL;
        !           339:        static char **args;
        !           340:        int oldverbose, oldhash;
        !           341:        char *cp, *mode;
        !           342: 
        !           343:        if (!doglob) {
        !           344:                if (args == NULL)
        !           345:                        args = argv;
        !           346:                if ((cp = *++args) == NULL)
        !           347:                        args = NULL;
        !           348:                return (cp);
        !           349:        }
        !           350:        if (ftemp == NULL) {
        !           351:                strcpy(temp, "/tmp/ftpXXXXXX");
        !           352:                mktemp(temp);
        !           353:                oldverbose = verbose, verbose = 0;
        !           354:                oldhash = hash, hash = 0;
        !           355:                for (mode = "w"; *++argv != NULL; mode = "a")
        !           356:                        recvrequest("NLST", temp, *argv, mode);
        !           357:                verbose = oldverbose; hash = oldhash;
        !           358:                ftemp = fopen(temp, "r");
        !           359:                unlink(temp);
        !           360:                if (ftemp == NULL) {
        !           361:                        printf("can't find list of remote files, oops\n");
        !           362:                        return (NULL);
        !           363:                }
        !           364:        }
        !           365:        if (fgets(buf, sizeof (buf), ftemp) == NULL) {
        !           366:                fclose(ftemp), ftemp = NULL;
        !           367:                return (NULL);
        !           368:        }
        !           369:        if ((cp = index(buf, '\n')) != NULL)
        !           370:                *cp = '\0';
        !           371:        return (buf);
        !           372: }
        !           373: 
        !           374: char *
        !           375: onoff(bool)
        !           376:        int bool;
        !           377: {
        !           378: 
        !           379:        return (bool ? "on" : "off");
        !           380: }
        !           381: 
        !           382: /*
        !           383:  * Show status.
        !           384:  */
        !           385: status(argc, argv)
        !           386:        char *argv[];
        !           387: {
        !           388: 
        !           389:        if (connected)
        !           390:                printf("Connected to %s.\n", hostname);
        !           391:        else
        !           392:                printf("Not connected.\n");
        !           393:        printf("Type: %s\n", typename);
        !           394:        printf("Verbose: %s; Bell: %s; Prompting: %s; Globbing: %s\n", 
        !           395:                onoff(verbose), onoff(bell), onoff(interactive),
        !           396:                onoff(doglob));
        !           397:        printf("Hash mark printing: %s\n",
        !           398:                onoff(hash));
        !           399: }
        !           400: 
        !           401: /*
        !           402:  * Set beep on cmd completed mode.
        !           403:  */
        !           404: /*VARARGS*/
        !           405: setbell()
        !           406: {
        !           407: 
        !           408:        bell = !bell;
        !           409:        printf("Bell mode %s.\n", onoff(bell));
        !           410: }
        !           411: 
        !           412: /*
        !           413:  * Turn on packet tracing.
        !           414:  */
        !           415: /*VARARGS*/
        !           416: settrace()
        !           417: {
        !           418: 
        !           419:        trace = !trace;
        !           420:        printf("Packet tracing %s.\n", onoff(trace));
        !           421: }
        !           422: 
        !           423: /*
        !           424:  * Toggle hash mark printing during transfers.
        !           425:  */
        !           426: /*VARARGS*/
        !           427: sethash()
        !           428: {
        !           429: 
        !           430:        hash = !hash;
        !           431:        printf("Hash mark printing %s", onoff(hash));
        !           432:        if (hash)
        !           433:                printf(" (1 packet/hash mark)");
        !           434:        printf(".\n");
        !           435: }
        !           436: 
        !           437: /*
        !           438:  * Turn on printing of server echo's.
        !           439:  */
        !           440: /*VARARGS*/
        !           441: setverbose()
        !           442: {
        !           443: 
        !           444:        verbose = !verbose;
        !           445:        printf("Verbose mode %s.\n", onoff(verbose));
        !           446: }
        !           447: 
        !           448: /*
        !           449:  * Turn on interactive prompting
        !           450:  * during mget, mput, and mdelete.
        !           451:  */
        !           452: /*VARARGS*/
        !           453: setprompt()
        !           454: {
        !           455: 
        !           456:        interactive = !interactive;
        !           457:        printf("Interactive mode %s.\n", onoff(interactive));
        !           458: }
        !           459: 
        !           460: /*
        !           461:  * Toggle metacharacter interpretation
        !           462:  * on local file names.
        !           463:  */
        !           464: /*VARARGS*/
        !           465: setglob()
        !           466: {
        !           467:        
        !           468:        doglob = !doglob;
        !           469:        printf("Globbing %s.\n", onoff(doglob));
        !           470: }
        !           471: 
        !           472: /*
        !           473:  * Set debugging mode on/off and/or
        !           474:  * set level of debugging.
        !           475:  */
        !           476: /*VARARGS*/
        !           477: setdebug(argc, argv)
        !           478:        char *argv[];
        !           479: {
        !           480:        int val;
        !           481: 
        !           482:        if (argc > 1) {
        !           483:                val = atoi(argv[1]);
        !           484:                if (val < 0) {
        !           485:                        printf("%s: bad debugging value.\n", argv[1]);
        !           486:                        return;
        !           487:                }
        !           488:        } else
        !           489:                val = !debug;
        !           490:        debug = val;
        !           491:        printf("Debugging %s (debug=%d).\n", onoff(debug), debug);
        !           492: }
        !           493: 
        !           494: /*
        !           495:  * Set current working directory
        !           496:  * on remote machine.
        !           497:  */
        !           498: cd(argc, argv)
        !           499:        char *argv[];
        !           500: {
        !           501: 
        !           502:        if (argc < 2) {
        !           503:                strcat(line, " ");
        !           504:                printf("(remote-directory) ");
        !           505:                gets(&line[strlen(line)]);
        !           506:                makeargv();
        !           507:                argc = margc;
        !           508:                argv = margv;
        !           509:        }
        !           510:        if (argc < 2) {
        !           511:                printf("%s remote-directory\n", argv[0]);
        !           512:                return;
        !           513:        }
        !           514:        (void) docd(argv[1]);
        !           515: }
        !           516: 
        !           517: /*
        !           518:  * Set current working directory
        !           519:  * on local machine.
        !           520:  */
        !           521: lcd(argc, argv)
        !           522:        char *argv[];
        !           523: {
        !           524:        char buf[MAXPATHLEN];
        !           525: 
        !           526:        if (argc < 2)
        !           527:                argc++, argv[1] = home;
        !           528:        if (argc != 2) {
        !           529:                printf("%s local-directory\n", argv[0]);
        !           530:                return;
        !           531:        }
        !           532:        if (!globulize(&argv[1]))
        !           533:                return;
        !           534:        if (chdir(argv[1]) < 0) {
        !           535:                perror(argv[1]);
        !           536:                return;
        !           537:        }
        !           538:        printf("Local directory now %s\n", getwd(buf));
        !           539: }
        !           540: 
        !           541: /*
        !           542:  * Delete a single file.
        !           543:  */
        !           544: delete(argc, argv)
        !           545:        char *argv[];
        !           546: {
        !           547: 
        !           548:        if (argc < 2) {
        !           549:                strcat(line, " ");
        !           550:                printf("(remote-file) ");
        !           551:                gets(&line[strlen(line)]);
        !           552:                makeargv();
        !           553:                argc = margc;
        !           554:                argv = margv;
        !           555:        }
        !           556:        if (argc < 2) {
        !           557:                printf("%s remote-file\n", argv[0]);
        !           558:                return;
        !           559:        }
        !           560:        (void) dodelete( argv[1]);
        !           561: }
        !           562: 
        !           563: /*
        !           564:  * Delete multiple files.
        !           565:  */
        !           566: mdelete(argc, argv)
        !           567:        char *argv[];
        !           568: {
        !           569:        char *cp;
        !           570: 
        !           571:        if (argc < 2) {
        !           572:                strcat(line, " ");
        !           573:                printf("(remote-files) ");
        !           574:                gets(&line[strlen(line)]);
        !           575:                makeargv();
        !           576:                argc = margc;
        !           577:                argv = margv;
        !           578:        }
        !           579:        if (argc < 2) {
        !           580:                printf("%s remote-files\n", argv[0]);
        !           581:                return;
        !           582:        }
        !           583:        while ((cp = remglob(argc, argv)) != NULL)
        !           584:                if (confirm(argv[0], cp))
        !           585:                        (void) dodelete( cp);
        !           586: }
        !           587: 
        !           588: /*
        !           589:  * Rename a remote file.
        !           590:  */
        !           591: renamefile(argc, argv)
        !           592:        char *argv[];
        !           593: {
        !           594: 
        !           595:        if (argc < 2) {
        !           596:                strcat(line, " ");
        !           597:                printf("(from-name) ");
        !           598:                gets(&line[strlen(line)]);
        !           599:                makeargv();
        !           600:                argc = margc;
        !           601:                argv = margv;
        !           602:        }
        !           603:        if (argc < 2) {
        !           604: usage:
        !           605:                printf("%s from-name to-name\n", argv[0]);
        !           606:                return;
        !           607:        }
        !           608:        if (argc < 3) {
        !           609:                strcat(line, " ");
        !           610:                printf("(to-name) ");
        !           611:                gets(&line[strlen(line)]);
        !           612:                makeargv();
        !           613:                argc = margc;
        !           614:                argv = margv;
        !           615:        }
        !           616:        if (argc < 3) 
        !           617:                goto usage;
        !           618:        dorename(argv[1], argv[2]);
        !           619: }
        !           620: 
        !           621: /*
        !           622:  * Get a directory listing
        !           623:  * of remote files.
        !           624:  */
        !           625: ls(argc, argv)
        !           626:        char *argv[];
        !           627: {
        !           628:        char *cmd;
        !           629: 
        !           630:        if (argc < 2)
        !           631:                argc++, argv[1] = NULL;
        !           632:        if (argc < 3)
        !           633:                argc++, argv[2] = "-";
        !           634:        if (argc > 3) {
        !           635:                printf("usage: %s remote-directory local-file\n", argv[0]);
        !           636:                return;
        !           637:        }
        !           638:        cmd = argv[0][0] == 'l' ? "NLST" : "LIST";
        !           639:        if (strcmp(argv[2], "-") && !globulize(&argv[2]))
        !           640:                return;
        !           641:        recvrequest(cmd, argv[2], argv[1], "w");
        !           642: }
        !           643: 
        !           644: /*
        !           645:  * Get a directory listing
        !           646:  * of multiple remote files.
        !           647:  */
        !           648: mls(argc, argv)
        !           649:        char *argv[];
        !           650: {
        !           651:        char *cmd, *mode, *cp, *dest;
        !           652: 
        !           653:        if (argc < 2) {
        !           654:                strcat(line, " ");
        !           655:                printf("(remote-files) ");
        !           656:                gets(&line[strlen(line)]);
        !           657:                makeargv();
        !           658:                argc = margc;
        !           659:                argv = margv;
        !           660:        }
        !           661:        if (argc < 3) {
        !           662:                strcat(line, " ");
        !           663:                printf("(local-file) ");
        !           664:                gets(&line[strlen(line)]);
        !           665:                makeargv();
        !           666:                argc = margc;
        !           667:                argv = margv;
        !           668:        }
        !           669:        if (argc < 3) {
        !           670:                printf("%s remote-files local-file\n", argv[0]);
        !           671:                return;
        !           672:        }
        !           673:        dest = argv[argc - 1];
        !           674:        argv[argc - 1] = NULL;
        !           675:        if (strcmp(dest, "-"))
        !           676:                if (globulize(&dest) && confirm("local-file", dest))
        !           677:                        return;
        !           678:        cmd = argv[0][1] == 'l' ? "NLST" : "LIST";
        !           679:        for (mode = "w"; cp = remglob(argc, argv); mode = "a")
        !           680:                if (confirm(argv[0], cp))
        !           681:                        recvrequest(cmd, argv[2], argv[1], "w");
        !           682: }
        !           683: 
        !           684: /*
        !           685:  * Do a shell escape
        !           686:  */
        !           687: shell(argc, argv)
        !           688:        char *argv[];
        !           689: {
        !           690:        int pid, status, (*old1)(), (*old2)();
        !           691:        char shellnam[40], *shell, *namep;
        !           692:        char **cpp, **gargs;
        !           693: 
        !           694:        old1 = signal (SIGINT, SIG_IGN);
        !           695:        old2 = signal (SIGQUIT, SIG_IGN);
        !           696:        if ((pid = fork()) == 0) {
        !           697:                for (pid = 3; pid < 20; pid++)
        !           698:                        close(pid);
        !           699:                signal(SIGINT, SIG_DFL);
        !           700:                signal(SIGQUIT, SIG_DFL);
        !           701:                if (argc <= 1) {
        !           702:                        shell = getenv("SHELL");
        !           703:                        if (shell == NULL)
        !           704:                                shell = "/bin/sh";
        !           705:                        namep = rindex(shell,'/');
        !           706:                        if (namep == NULL)
        !           707:                                namep = shell;
        !           708:                        strcpy(shellnam,"-");
        !           709:                        strcat(shellnam, ++namep);
        !           710:                        if (strcmp(namep, "sh") != 0)
        !           711:                                shellnam[0] = '+';
        !           712:                        if (debug) {
        !           713:                                printf ("%s\n", shell);
        !           714:                                fflush (stdout);
        !           715:                        }
        !           716:                        execl(shell, shellnam, 0);
        !           717:                        perror(shell);
        !           718:                        exit(1);
        !           719:                }
        !           720:                cpp = &argv[1];
        !           721:                if (argc > 2) {
        !           722:                        if ((gargs = glob(cpp)) != NULL)
        !           723:                                cpp = gargs;
        !           724:                        if (globerr != NULL) {
        !           725:                                printf("%s\n", globerr);
        !           726:                                exit(1);
        !           727:                        }
        !           728:                }
        !           729:                if (debug) {
        !           730:                        register char **zip = cpp;
        !           731: 
        !           732:                        printf("%s", *zip);
        !           733:                        while (*++zip != NULL)
        !           734:                                printf(" %s", *zip);
        !           735:                        printf("\n");
        !           736:                        fflush(stdout);
        !           737:                }
        !           738:                execvp(argv[1], cpp);
        !           739:                perror(argv[1]);
        !           740:                exit(1);
        !           741:        }
        !           742:        if (pid > 0)
        !           743:                while (wait(&status) != pid)
        !           744:                        ;
        !           745:        signal(SIGINT, old1);
        !           746:        signal(SIGQUIT, old2);
        !           747:        if (pid == -1)
        !           748:                perror("Try again later");
        !           749:        return (0);
        !           750: }
        !           751: 
        !           752: /*
        !           753:  * Send new user information (re-login)
        !           754:  */
        !           755: user(argc, argv)
        !           756:        int argc;
        !           757:        char **argv;
        !           758: {
        !           759:        char *getXNSpass();
        !           760: 
        !           761:        if (argc < 2) {
        !           762:                strcat(line, " ");
        !           763:                printf("(XNS username) ");
        !           764:                gets(&line[strlen(line)]);
        !           765:                makeargv();
        !           766:                argc = margc;
        !           767:                argv = margv;
        !           768:        }
        !           769:        if (argc > 3) {
        !           770:                printf("usage: %s username [password]\n", argv[0]);
        !           771:                return (0);
        !           772:        }
        !           773:        if (argc < 3 )
        !           774:                argv[2] = getXNSpass("Password: "), argc++;
        !           775:        login(argv[1], argv[2]);
        !           776:        return (1);
        !           777: }
        !           778: 
        !           779: /*
        !           780:  * Print working directory.
        !           781:  */
        !           782: /*VARARGS*/
        !           783: pwd()
        !           784: {
        !           785:        dopwd();
        !           786: }
        !           787: 
        !           788: /*
        !           789:  * Make a directory.
        !           790:  */
        !           791: makedir(argc, argv)
        !           792:        char *argv[];
        !           793: {
        !           794: 
        !           795:        if (argc < 2) {
        !           796:                strcat(line, " ");
        !           797:                printf("(directory-name) ");
        !           798:                gets(&line[strlen(line)]);
        !           799:                makeargv();
        !           800:                argc = margc;
        !           801:                argv = margv;
        !           802:        }
        !           803:        if (argc < 2) {
        !           804:                printf("%s directory-name\n", argv[0]);
        !           805:                return;
        !           806:        }
        !           807:        domakedir(argv[1]);
        !           808: }
        !           809: 
        !           810: /*
        !           811:  * Remove a directory.
        !           812:  */
        !           813: removedir(argc, argv)
        !           814:        char *argv[];
        !           815: {
        !           816: 
        !           817:        if (argc < 2) {
        !           818:                strcat(line, " ");
        !           819:                printf("(directory-name) ");
        !           820:                gets(&line[strlen(line)]);
        !           821:                makeargv();
        !           822:                argc = margc;
        !           823:                argv = margv;
        !           824:        }
        !           825:        if (argc < 2) {
        !           826:                printf("%s directory-name\n", argv[0]);
        !           827:                return;
        !           828:        }
        !           829:        doremovedir(argv[1]);
        !           830: }
        !           831: 
        !           832: /*
        !           833:  * Terminate session and exit.
        !           834:  */
        !           835: /*VARARGS*/
        !           836: quit()
        !           837: {
        !           838: 
        !           839:        disconnect();
        !           840:        exit(0);
        !           841: }
        !           842: 
        !           843: /*
        !           844:  * Terminate session, but don't exit.
        !           845:  */
        !           846: disconnect()
        !           847: {
        !           848:        extern FILE *cout;
        !           849:        extern int data;
        !           850: 
        !           851:        if (!connected)
        !           852:                return;
        !           853:        logout();
        !           854:        CourierClose(connected);
        !           855:        connected = (CourierConnection *)0;
        !           856: }
        !           857: 
        !           858: confirm(cmd, file)
        !           859:        char *cmd, *file;
        !           860: {
        !           861:        char line[BUFSIZ];
        !           862: 
        !           863:        if (!interactive) {
        !           864:                if (verbose)
        !           865:                        printf("%s %s\n", cmd, file);
        !           866:                return (1);
        !           867:        }
        !           868:        printf("%s %s? ", cmd, file);
        !           869:        fflush(stdout);
        !           870:        gets(line);
        !           871:        return (*line != 'n' && *line != 'N');
        !           872: }
        !           873: 
        !           874: fatal(msg)
        !           875:        char *msg;
        !           876: {
        !           877: 
        !           878:        fprintf(stderr, "ftp: %s\n");
        !           879:        exit(1);
        !           880: }
        !           881: 
        !           882: /*
        !           883:  * Glob a local file name specification with
        !           884:  * the expectation of a single return value.
        !           885:  * Can't control multiple values being expanded
        !           886:  * from the expression, we return only the first.
        !           887:  */
        !           888: globulize(cpp)
        !           889:        char **cpp;
        !           890: {
        !           891:        char **globbed;
        !           892: 
        !           893:        if (!doglob)
        !           894:                return (1);
        !           895:        globbed = glob(*cpp);
        !           896:        if (globerr != NULL) {
        !           897:                printf("%s: %s\n", *cpp, globerr);
        !           898:                if (globbed)
        !           899:                        blkfree(globbed);
        !           900:                return (0);
        !           901:        }
        !           902:        if (globbed) {
        !           903:                *cpp = *globbed++;
        !           904:                /* don't waste too much memory */
        !           905:                if (*globbed)
        !           906:                        blkfree(globbed);
        !           907:        }
        !           908:        return (1);
        !           909: }

unix.superglobalmegacorp.com

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