projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
don't redefine _PATH_TMP; don't assume it begins "/tmp/";
[unix-history]
/
usr
/
src
/
usr.bin
/
rdist
/
main.c
diff --git
a/usr/src/usr.bin/rdist/main.c
b/usr/src/usr.bin/rdist/main.c
index
8ab9ba8
..
fd426db
100644
(file)
--- a/
usr/src/usr.bin/rdist/main.c
+++ b/
usr/src/usr.bin/rdist/main.c
@@
-1,16
+1,32
@@
+/*
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.
+ *
+ * %sccs.include.redist.c%
+ */
+
+#ifndef lint
+char copyright[] =
+"@(#) Copyright (c) 1983 Regents of the University of California.\n\
+ All rights reserved.\n";
+#endif /* not lint */
+
#ifndef lint
#ifndef lint
-static char
*sccsid = "@(#)main.c 4.10 (Berkeley) 84/02/09
";
-#endif
+static char
sccsid[] = "@(#)main.c 5.6 (Berkeley) %G%
";
+#endif
/* not lint */
#include "defs.h"
#include "defs.h"
+#define NHOSTS 100
+
/*
* Remote distribution program.
*/
/*
* Remote distribution program.
*/
-char *distfile = "distfile";
-char tmpfile[] = "/tmp/rdistXXXXXX";
-char *tmpname = &tmpfile[5];
+char *distfile = NULL;
+#define _RDIST_TMP "/rdistXXXXXX"
+char tempfile[sizeof _PATH_TMP + sizeof _RDIST_TMP + 1];
+char *tempname;
int debug; /* debugging flag */
int nflag; /* NOP flag, just print commands without executing */
int debug; /* debugging flag */
int nflag; /* NOP flag, just print commands without executing */
@@
-18,8
+34,6
@@
int qflag; /* Quiet. Don't print messages */
int options; /* global options */
int iamremote; /* act as remote server for transfering files */
int options; /* global options */
int iamremote; /* act as remote server for transfering files */
-int filec; /* number of files to update */
-char **filev; /* list of files/directories to update */
FILE *fin = NULL; /* input file pointer */
int rem = -1; /* file descriptor to remote source/sink process */
char host[32]; /* host name */
FILE *fin = NULL; /* input file pointer */
int rem = -1; /* file descriptor to remote source/sink process */
char host[32]; /* host name */
@@
-38,6
+52,7
@@
main(argc, argv)
{
register char *arg;
int cmdargs = 0;
{
register char *arg;
int cmdargs = 0;
+ char *dhosts[NHOSTS], **hp = dhosts;
pw = getpwuid(userid = getuid());
if (pw == NULL) {
pw = getpwuid(userid = getuid());
if (pw == NULL) {
@@
-48,6
+63,12
@@
main(argc, argv)
strcpy(homedir, pw->pw_dir);
groupid = pw->pw_gid;
gethostname(host, sizeof(host));
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] != '-')
while (--argc > 0) {
if ((arg = *++argv)[0] != '-')
@@
-64,6
+85,16
@@
main(argc, argv)
fin = stdin;
break;
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();
case 'd':
if (--argc <= 0)
usage();
@@
-114,37
+145,54
@@
main(argc, argv)
options |= YOUNGER;
break;
options |= YOUNGER;
break;
+ case 'h':
+ options |= FOLLOW;
+ break;
+
+ case 'i':
+ options |= IGNLNKS;
+ break;
+
default:
usage();
}
}
default:
usage();
}
}
+ *hp = NULL;
- mktemp(tmpfile);
+ setreuid(0, userid);
+ mktemp(tempfile);
if (iamremote) {
server();
if (iamremote) {
server();
- exit(nerrs);
+ exit(nerrs
!= 0
);
}
if (cmdargs)
docmdargs(argc, argv);
else {
}
if (cmdargs)
docmdargs(argc, argv);
else {
- if (fin == NULL && (fin = fopen(distfile, "r")) == NULL) {
- perror(distfile);
- exit(1);
+ 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)
}
yyparse();
if (nerrs == 0)
- docmds(argc, argv);
+ docmds(
dhosts,
argc, argv);
}
}
- exit(nerrs);
+ exit(nerrs
!= 0
);
}
usage()
{
}
usage()
{
- printf("Usage: rdist [-nqb
rvwyD] [-f distfile] [-d var=value
] [file ...]\n");
- printf("or: rdist [-nqbrvwyD] -c source [...] machine[:dest]\n");
+ printf("Usage: rdist [-nqb
hirvwyD] [-f distfile] [-d var=value] [-m host
] [file ...]\n");
+ printf("or: rdist [-nqb
hi
rvwyD] -c source [...] machine[:dest]\n");
exit(1);
}
exit(1);
}
@@
-182,6
+230,8
@@
docmdargs(nargs, args)
*dest++ = '\0';
tnl.n_name = cp;
hosts = expand(&tnl, E_ALL);
*dest++ = '\0';
tnl.n_name = cp;
hosts = expand(&tnl, E_ALL);
+ if (nerrs)
+ exit(1);
if (dest == NULL || *dest == '\0')
cmds = NULL;
if (dest == NULL || *dest == '\0')
cmds = NULL;
@@
-197,8
+247,8
@@
docmdargs(nargs, args)
printf("hosts = ");
prnames(hosts);
}
printf("hosts = ");
prnames(hosts);
}
- insert(files, hosts, cmds);
- docmds(0, NULL);
+ insert(
NULL,
files, hosts, cmds);
+ docmds(
NULL,
0, NULL);
}
/*
}
/*