/* * rcp like interface for distributing files. */ static void docmdargs(int nargs, char **args) { struct namelist *nl, *prev; char *cp; struct namelist *files, *hosts; struct subcmd *cmds; char *dest; static struct namelist tnl = { NULL, NULL }; int i; files = NULL; if (nargs < 2) usage(); prev = NULL; for (i = 0; i < nargs - 1; i++) { nl = makenl(args[i]); if (prev == NULL) files = prev = nl; else { prev->n_next = nl; prev = nl; } } cp = args[i]; if ((dest = index(cp, ':')) != NULL) *dest++ = '\0'; tnl.n_name = cp; hosts = expand(&tnl, E_ALL); if (nerrs) exit(1); if (dest == NULL || *dest == '\0') cmds = NULL; else { cmds = makesubcmd(INSTALL); cmds->sc_options = options; cmds->sc_name = dest; } if (debug) { printf("docmdargs()\nfiles = "); prnames(files); printf("hosts = "); prnames(hosts); } insert(NULL, files, hosts, cmds); docmds(NULL, 0, NULL); }
int main(int argc, char **argv) { char *arg; int cmdargs; char *dhosts[NHOSTS], **hp = dhosts; cmdargs = 0; pw = getpwuid(userid = getuid()); if (pw == NULL) { fprintf(stderr, "%s: Who are you?\n", argv[0]); exit(1); } strcpy(user, pw->pw_name); strcpy(homedir, pw->pw_dir); groupid = pw->pw_gid; gethostname(host, sizeof(host)); strcpy(tempfile, _PATH_TMP); strcat(tempfile, _RDIST_TMP); if ((tempname = rindex(tempfile, '/')) != 0) tempname++; else tempname = tempfile; while (--argc > 0) { if ((arg = *++argv)[0] != '-') break; if (!strcmp(arg, "-Server")) iamremote++; else while (*++arg) switch (*arg) { case 'P': if (--argc <= 0) usage(); path_rsh = *++argv; break; case 'f': if (--argc <= 0) usage(); distfile = *++argv; if (distfile[0] == '-' && distfile[1] == '\0') fin = stdin; break; case 'm': if (--argc <= 0) usage(); if (hp >= &dhosts[NHOSTS-2]) { fprintf(stderr, "rdist: too many destination hosts\n"); exit(1); } *hp++ = *++argv; break; case 'd': if (--argc <= 0) usage(); define(*++argv); break; case 'D': debug++; break; case 'c': cmdargs++; break; case 'n': if (options & VERIFY) { printf("rdist: -n overrides -v\n"); options &= ~VERIFY; } nflag++; break; case 'q': qflag++; break; case 'b': options |= COMPARE; break; case 'R': options |= REMOVE; break; case 'v': if (nflag) { printf("rdist: -n overrides -v\n"); break; } options |= VERIFY; break; case 'w': options |= WHOLE; break; case 'y': options |= YOUNGER; break; case 'h': options |= FOLLOW; break; case 'i': options |= IGNLNKS; break; default: usage(); } } *hp = NULL; seteuid(userid); mktemp(tempfile); if (iamremote) { server(); exit(nerrs != 0); } if (cmdargs) docmdargs(argc, argv); else { if (fin == NULL) { if(distfile == NULL) { if((fin = fopen("distfile","r")) == NULL) fin = fopen("Distfile", "r"); } else fin = fopen(distfile, "r"); if(fin == NULL) { perror(distfile ? distfile : "distfile"); exit(1); } } yyparse(); if (nerrs == 0) docmds(dhosts, argc, argv); } exit(nerrs != 0); }
int main (int argc, char *argv[]) { int cmdargs = 0; char *dhosts[NHOSTS], **hp = dhosts; extern int optind; extern char *optarg; int opt; if (myname = rindex (argv[0], '/')) myname++; if (myname == NULL || *myname == NULL) myname = argv[0]; isodetailor (myname, 1); pw = getpwuid(userid = getuid()); if (pw == NULL) adios (NULLCP, "Who are you?"); strcpy(user, pw->pw_name); strcpy(homedir, pw->pw_dir); groupid = pw->pw_gid; host = getlocalhost (); while ((opt = getopt (argc, argv, "f:m:d:DcnqbuRvwyhiQ")) != EOF) switch (opt) { case 'f': distfile = optarg; if (distfile[0] == '-' && distfile[1] == '\0') fin = stdin; break; case 'm': if (hp >= &dhosts[NHOSTS-2]) adios (NULLCP, "too many destination hosts"); *hp++ = optarg; break; case 'd': define(optarg); break; case 'D': debug++; break; case 'c': cmdargs++; break; case 'n': if (options & VERIFY) { advise (NULLCP, "-n overrides -v"); options &= ~VERIFY; } nflag++; break; case 'q': qflag++; break; case 'b': options |= COMPARE; break; #ifdef UW case 'u': options |= NOINSTALL; break; #endif UW case 'R': options |= REMOVE; break; case 'v': if (nflag) { advise (NULLCP, "-n overrides -v"); break; } options |= VERIFY; break; case 'w': options |= WHOLE; break; case 'y': options |= YOUNGER; break; case 'h': options |= FOLLOW; break; case 'i': options |= IGNLNKS; break; case 'Q': options |= QUERYM; break; default: usage(); break; } *hp = NULL; argc -= optind; argv += optind; mktemp(utmpfile); if (cmdargs) docmdargs(argc, argv); else { if (fin == NULL) { if(distfile == NULL) { if((fin = fopen("distfile","r")) == NULL) fin = fopen("Distfile", "r"); } else fin = fopen(distfile, "r"); if(fin == NULL) { adios (distfile, "Can't open file"); } } yyparse(); if (nerrs == 0) docmds(dhosts, argc, argv); } return(nerrs != 0); }