Annotation of 43BSDReno/contrib/isode-beta/others/idist/main.c, revision 1.1

1.1     ! root        1: /* main.c -- driver for the client program */
        !             2: 
        !             3: /*
        !             4:  * $Header: /f/osi/others/idist/RCS/main.c,v 7.0 89/11/23 21:58:37 mrose Rel $
        !             5:  *
        !             6:  * Major changes to this file have been the ripping out of the server
        !             7:  * code. This is entirely the client part now. Also changed are the
        !             8:  * argument parsing stuff and a few bits and pieces.
        !             9:  *
        !            10:  * Julian Onions <[email protected]>
        !            11:  * Nottingham University Computer Science.
        !            12:  *
        !            13:  *
        !            14:  * $Log:       main.c,v $
        !            15:  * Revision 7.0  89/11/23  21:58:37  mrose
        !            16:  * Release 6.0
        !            17:  * 
        !            18:  */
        !            19: 
        !            20: 
        !            21: /*
        !            22:  * Copyright (c) 1983 Regents of the University of California.
        !            23:  * All rights reserved.  The Berkeley software License Agreement
        !            24:  * specifies the terms and conditions for redistribution.
        !            25:  */
        !            26: 
        !            27: #ifndef lint
        !            28: char copyright[] =
        !            29: "@(#) Copyright (c) 1983 Regents of the University of California.\n\
        !            30:  All rights reserved.\n";
        !            31: #endif
        !            32: 
        !            33: #ifndef lint
        !            34: static char sccsid[] = "@(#)main.c     5.1 (Berkeley) 6/6/85";
        !            35: static char *rcsid = "$Header: /f/osi/others/idist/RCS/main.c,v 7.0 89/11/23 21:58:37 mrose Rel $";
        !            36: #endif
        !            37: 
        !            38: #include "defs.h"
        !            39: 
        !            40: #define NHOSTS 100
        !            41: 
        !            42: /*
        !            43:  * Remote distribution program.
        !            44:  *
        !            45:  * -u option (controlled by "#ifdef UW") to update only (don't install
        !            46:  *     the file, assuming the workstation owner doesn't want that file)
        !            47:  */
        !            48: 
        !            49: char   *distfile = NULL;
        !            50: char   utmpfile[] = "/tmp/idistXXXXXX";
        !            51: char   *tmpname = &utmpfile[5];
        !            52: 
        !            53: int    debug;          /* debugging flag */
        !            54: int    nflag;          /* NOP flag, just print commands without executing */
        !            55: int    qflag;          /* Quiet. Don't print messages */
        !            56: int    options;        /* global options */
        !            57: int    iamremote;      /* act as remote server for transfering files */
        !            58: 
        !            59: FILE   *fin = NULL;    /* input file pointer */
        !            60: char   *host;          /* host name */
        !            61: int    nerrs;          /* number of errors while sending/receiving */
        !            62: char   user[10];       /* user's name */
        !            63: char   homedir[128];   /* user's home directory */
        !            64: int    userid;         /* user's user ID */
        !            65: int    groupid;        /* user's group ID */
        !            66: 
        !            67: struct passwd *pw;     /* pointer to static area used by getpwent */
        !            68: struct group *gr;      /* pointer to static area used by getgrent */
        !            69: char   *myname = "idist";
        !            70: 
        !            71: main(argc, argv)
        !            72:        int argc;
        !            73:        char *argv[];
        !            74: {
        !            75:        int cmdargs = 0;
        !            76:        char *dhosts[NHOSTS], **hp = dhosts;
        !            77:        extern  int optind;
        !            78:        extern  char *optarg;
        !            79:        int     opt;
        !            80: 
        !            81:        if (myname = rindex (argv[0], '/'))
        !            82:                myname++;
        !            83:        if (myname == NULL || *myname == NULL)
        !            84:                myname = argv[0];
        !            85: 
        !            86:        isodetailor (myname, 1);
        !            87: 
        !            88:        pw = getpwuid(userid = getuid());
        !            89:        if (pw == NULL)
        !            90:                adios (NULLCP, "Who are you?");
        !            91: 
        !            92:        (void) strcpy(user, pw->pw_name);
        !            93:        (void) strcpy(homedir, pw->pw_dir);
        !            94:        groupid = pw->pw_gid;
        !            95:        host = getlocalhost ();
        !            96: 
        !            97:        while ((opt = getopt (argc, argv, "f:m:d:DcnqbuRvwyhiQ")) != EOF)
        !            98:                switch (opt) {
        !            99:                    case 'f':
        !           100:                        distfile = optarg;
        !           101:                        if (distfile[0] == '-' && distfile[1] == '\0')
        !           102:                                fin = stdin;
        !           103:                        break;
        !           104: 
        !           105:                    case 'm':
        !           106:                        if (hp >= &dhosts[NHOSTS-2])
        !           107:                                adios (NULLCP, "too many destination hosts");
        !           108:                        *hp++ = optarg;
        !           109:                        break;
        !           110: 
        !           111:                    case 'd':
        !           112:                        define(optarg);
        !           113:                        break;
        !           114: 
        !           115:                    case 'D':
        !           116:                        debug++;
        !           117:                        break;
        !           118: 
        !           119:                    case 'c':
        !           120:                        cmdargs++;
        !           121:                        break;
        !           122: 
        !           123:                    case 'n':
        !           124:                        if (options & VERIFY) {
        !           125:                                advise (NULLCP, "-n overrides -v");
        !           126:                                options &= ~VERIFY;
        !           127:                        }
        !           128:                        nflag++;
        !           129:                        break;
        !           130: 
        !           131:                    case 'q':
        !           132:                        qflag++;
        !           133:                        break;
        !           134: 
        !           135:                    case 'b':
        !           136:                        options |= COMPARE;
        !           137:                        break;
        !           138: #ifdef UW
        !           139:                    case 'u':
        !           140:                        options |= NOINSTALL;
        !           141:                        break;
        !           142: #endif UW
        !           143:                    case 'R':
        !           144:                        options |= REMOVE;
        !           145:                        break;
        !           146: 
        !           147:                    case 'v':
        !           148:                        if (nflag) {
        !           149:                                advise (NULLCP, "-n overrides -v");
        !           150:                                break;
        !           151:                        }
        !           152:                        options |= VERIFY;
        !           153:                        break;
        !           154: 
        !           155:                    case 'w':
        !           156:                        options |= WHOLE;
        !           157:                        break;
        !           158: 
        !           159:                    case 'y':
        !           160:                        options |= YOUNGER;
        !           161:                        break;
        !           162: 
        !           163:                    case 'h':
        !           164:                        options |= FOLLOW;
        !           165:                        break;
        !           166: 
        !           167:                    case 'i':
        !           168:                        options |= IGNLNKS;
        !           169:                        break;
        !           170: 
        !           171:                    case 'Q':
        !           172:                        options |= QUERYM;
        !           173:                        break;
        !           174: 
        !           175:                    default:
        !           176:                        usage();
        !           177:                        break;
        !           178:                }
        !           179:        *hp = NULL;
        !           180:        argc -= optind;
        !           181:        argv += optind;
        !           182: 
        !           183:        (void) mktemp(utmpfile);
        !           184: 
        !           185:        if (cmdargs)
        !           186:                docmdargs(argc, argv);
        !           187:        else {
        !           188:                if (fin == NULL) {
        !           189:                        if(distfile == NULL) {
        !           190:                                if((fin = fopen("distfile","r")) == NULL)
        !           191:                                        fin = fopen("Distfile", "r");
        !           192:                        } else
        !           193:                                fin = fopen(distfile, "r");
        !           194:                        if(fin == NULL) {
        !           195:                                adios (distfile, "Can't open file");
        !           196:                        }
        !           197:                }
        !           198:                (void) yyparse();
        !           199:                if (nerrs == 0)
        !           200:                        docmds(dhosts, argc, argv);
        !           201:        }
        !           202: 
        !           203:        exit(nerrs != 0);
        !           204: }
        !           205: 
        !           206: usage()
        !           207: {
        !           208:        advise (NULLCP,
        !           209:                "Usage: %s [-nqbhirvwyD] [-f distfile] [-d var=value] [-m host] [file ...]\n",
        !           210:                myname);
        !           211:        adios(NULLCP, "or: %s [-nqbhirvwyD] -c source [...] machine[:dest]\n",
        !           212:              myname);
        !           213: }
        !           214: 
        !           215: /*
        !           216:  * rcp like interface for distributing files.
        !           217:  */
        !           218: docmdargs(nargs, args)
        !           219:        int nargs;
        !           220:        char *args[];
        !           221: {
        !           222:        register struct namelist *nl, *prev;
        !           223:        register char *cp;
        !           224:        struct namelist *files, *hosts;
        !           225:        struct subcmd *cmds;
        !           226:        char *dest;
        !           227:        static struct namelist tnl = { NULL, NULL };
        !           228:        int i;
        !           229: 
        !           230:        if (nargs < 2)
        !           231:                usage();
        !           232: 
        !           233:        prev = NULL;
        !           234:        for (i = 0; i < nargs - 1; i++) {
        !           235:                nl = makenl(args[i]);
        !           236:                if (prev == NULL)
        !           237:                        files = prev = nl;
        !           238:                else {
        !           239:                        prev->n_next = nl;
        !           240:                        prev = nl;
        !           241:                }
        !           242:        }
        !           243: 
        !           244:        cp = args[i];
        !           245:        if ((dest = index(cp, ':')) != NULL)
        !           246:                *dest++ = '\0';
        !           247:        tnl.n_name = cp;
        !           248:        hosts = expand(&tnl, E_ALL);
        !           249:        if (nerrs)
        !           250:                exit(1);
        !           251: 
        !           252:        if (dest == NULL || *dest == '\0')
        !           253:                cmds = NULL;
        !           254:        else {
        !           255:                cmds = makesubcmd(INSTALL);
        !           256:                cmds->sc_options = options;
        !           257:                cmds->sc_name = dest;
        !           258:        }
        !           259: 
        !           260:        if (debug) {
        !           261:                printf("docmdargs()\nfiles = ");
        !           262:                prnames(files);
        !           263:                printf("hosts = ");
        !           264:                prnames(hosts);
        !           265:        }
        !           266:        insert((char *)NULL, files, hosts, cmds);
        !           267:        docmds((char **)NULL, 0, (char **)NULL);
        !           268: }
        !           269: 
        !           270: /*
        !           271:  * Print a list of NAME blocks (mostly for debugging).
        !           272:  */
        !           273: prnames(nl)
        !           274:        register struct namelist *nl;
        !           275: {
        !           276:        printf("( ");
        !           277:        while (nl != NULL) {
        !           278:                printf("%s ", nl->n_name);
        !           279:                nl = nl->n_next;
        !           280:        }
        !           281:        printf(")\n");
        !           282: }

unix.superglobalmegacorp.com

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