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
/
docmd.c
diff --git
a/usr/src/usr.bin/rdist/docmd.c
b/usr/src/usr.bin/rdist/docmd.c
index
77798e3
..
f7fe6c5
100644
(file)
--- a/
usr/src/usr.bin/rdist/docmd.c
+++ b/
usr/src/usr.bin/rdist/docmd.c
@@
-1,9
+1,17
@@
+/*
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.
+ *
+ * %sccs.include.redist.c%
+ */
+
#ifndef lint
#ifndef lint
-static char
*sccsid = "@(#)docmd.c 4.21 (Berkeley) 84/06/28
";
-#endif
+static char
sccsid[] = "@(#)docmd.c 5.7 (Berkeley) %G%
";
+#endif
/* not lint */
#include "defs.h"
#include <setjmp.h>
#include "defs.h"
#include <setjmp.h>
+#include <netdb.h>
FILE *lfp; /* log file for recording files updated */
struct subcmd *subcmds; /* list of sub-commands for current cmd */
FILE *lfp; /* log file for recording files updated */
struct subcmd *subcmds; /* list of sub-commands for current cmd */
@@
-15,7
+23,8
@@
int lostconn();
/*
* Do the commands in cmds (initialized by yyparse).
*/
/*
* Do the commands in cmds (initialized by yyparse).
*/
-docmds(argc, argv)
+docmds(dhosts, argc, argv)
+ char **dhosts;
int argc;
char **argv;
{
int argc;
char **argv;
{
@@
-30,6
+39,13
@@
docmds(argc, argv)
signal(SIGTERM, cleanup);
for (c = cmds; c != NULL; c = c->c_next) {
signal(SIGTERM, cleanup);
for (c = cmds; c != NULL; c = c->c_next) {
+ if (dhosts != NULL && *dhosts != NULL) {
+ for (cpp = dhosts; *cpp; cpp++)
+ if (strcmp(c->c_name, *cpp) == 0)
+ goto fndhost;
+ continue;
+ }
+ fndhost:
if (argc) {
for (cpp = argv; *cpp; cpp++) {
if (c->c_label != NULL &&
if (argc) {
for (cpp = argv; *cpp; cpp++) {
if (c->c_label != NULL &&
@@
-91,8
+107,8
@@
doarrow(filev, files, rhost, cmds)
signal(SIGPIPE, lostconn);
if (!makeconn(rhost))
return;
signal(SIGPIPE, lostconn);
if (!makeconn(rhost))
return;
- if ((lfp = fopen(tmpfile, "w")) == NULL) {
- fatal("cannot open %s\n", tmpfile);
+ if ((lfp = fopen(t
e
mpfile, "w")) == NULL) {
+ fatal("cannot open %s\n", t
e
mpfile);
exit(1);
}
}
exit(1);
}
}
@@
-126,9
+142,9
@@
done:
}
for (sc = cmds; sc != NULL; sc = sc->sc_next)
if (sc->sc_type == NOTIFY)
}
for (sc = cmds; sc != NULL; sc = sc->sc_next)
if (sc->sc_type == NOTIFY)
- notify(tmpfile, rhost, sc->sc_args, 0);
+ notify(t
e
mpfile, rhost, sc->sc_args, 0);
if (!nflag) {
if (!nflag) {
- (void) unlink(tmpfile);
+ (void) unlink(t
e
mpfile);
for (; ihead != NULL; ihead = ihead->nextp) {
free(ihead);
if ((opts & IGNLNKS) || ihead->count == 0)
for (; ihead != NULL; ihead = ihead->nextp) {
free(ihead);
if ((opts & IGNLNKS) || ihead->count == 0)
@@
-147,8
+163,11
@@
makeconn(rhost)
{
register char *ruser, *cp;
static char *cur_host = NULL;
{
register char *ruser, *cp;
static char *cur_host = NULL;
+ static int port = -1;
+ char tuser[20];
int n;
extern char user[];
int n;
extern char user[];
+ extern int userid;
if (debug)
printf("makeconn(%s)\n", rhost);
if (debug)
printf("makeconn(%s)\n", rhost);
@@
-158,26
+177,42
@@
makeconn(rhost)
return(1);
closeconn();
}
return(1);
closeconn();
}
-
- ruser = rindex(rhost, '.');
- if (ruser != NULL) {
- *ruser++ = '\0';
- if (!okname(ruser))
+ cur_host = rhost;
+ cp = index(rhost, '@');
+ if (cp != NULL) {
+ char c = *cp;
+
+ *cp = '\0';
+ strncpy(tuser, rhost, sizeof(tuser)-1);
+ *cp = c;
+ rhost = cp + 1;
+ ruser = tuser;
+ if (*ruser == '\0')
+ ruser = user;
+ else if (!okname(ruser))
return(0);
} else
ruser = user;
if (!qflag)
printf("updating host %s\n", rhost);
return(0);
} else
ruser = user;
if (!qflag)
printf("updating host %s\n", rhost);
- (void) sprintf(buf, "/usr/local/rdist -Server%s", qflag ? " -q" : "");
+ (void) sprintf(buf, "%s -Server%s", _PATH_RDIST, qflag ? " -q" : "");
+ if (port < 0) {
+ struct servent *sp;
+
+ if ((sp = getservbyname("shell", "tcp")) == NULL)
+ fatal("shell/tcp: unknown service");
+ port = sp->s_port;
+ }
if (debug) {
if (debug) {
- printf("
luser = %s, ruser = %s\n"
, user, ruser);
+ printf("
port = %d, luser = %s, ruser = %s\n", ntohs(port)
, user, ruser);
printf("buf = %s\n", buf);
}
fflush(stdout);
printf("buf = %s\n", buf);
}
fflush(stdout);
- cur_host = rhost;
- rem = rcmd(&rhost, IPPORT_CMDSERVER, user, ruser, buf, 0);
+ setreuid(userid, 0);
+ rem = rcmd(&rhost, port, user, ruser, buf, 0);
+ setreuid(0, userid);
if (rem < 0)
return(0);
cp = buf;
if (rem < 0)
return(0);
cp = buf;
@@
-273,7
+308,7
@@
dodcolon(filev, files, stamp, cmds)
return;
}
if (stat(stamp, &stb) < 0) {
return;
}
if (stat(stamp, &stb) < 0) {
- error("%s: %s\n", stamp, s
ys_errlist[errno]
);
+ error("%s: %s\n", stamp, s
trerror(errno)
);
return;
}
if (debug)
return;
}
if (debug)
@@
-284,8
+319,8
@@
dodcolon(filev, files, stamp, cmds)
if (nflag || (options & VERIFY))
tfp = NULL;
else {
if (nflag || (options & VERIFY))
tfp = NULL;
else {
- if ((tfp = fopen(tmpfile, "w")) == NULL) {
- error("%s: %s\n", stamp, s
ys_errlist[errno]
);
+ if ((tfp = fopen(t
e
mpfile, "w")) == NULL) {
+ error("%s: %s\n", stamp, s
trerror(errno)
);
return;
}
(void) gettimeofday(&tv[0], &tz);
return;
}
(void) gettimeofday(&tv[0], &tz);
@@
-309,9
+344,9
@@
dodcolon(filev, files, stamp, cmds)
(void) fclose(tfp);
for (sc = cmds; sc != NULL; sc = sc->sc_next)
if (sc->sc_type == NOTIFY)
(void) fclose(tfp);
for (sc = cmds; sc != NULL; sc = sc->sc_next)
if (sc->sc_type == NOTIFY)
- notify(tmpfile, NULL, sc->sc_args, lastmod);
+ notify(t
e
mpfile, NULL, sc->sc_args, lastmod);
if (!nflag && !(options & VERIFY))
if (!nflag && !(options & VERIFY))
- (void) unlink(tmpfile);
+ (void) unlink(t
e
mpfile);
}
/*
}
/*
@@
-344,7
+379,7
@@
cmptime(name)
tp++;
}
if (access(name, 4) < 0 || stat(name, &stb) < 0) {
tp++;
}
if (access(name, 4) < 0 || stat(name, &stb) < 0) {
- error("%s: %s\n", name, s
ys_errlist[errno]
);
+ error("%s: %s\n", name, s
trerror(errno)
);
return;
}
return;
}
@@
-378,7
+413,7
@@
rcmptime(st)
printf("rcmptime(%x)\n", st);
if ((d = opendir(target)) == NULL) {
printf("rcmptime(%x)\n", st);
if ((d = opendir(target)) == NULL) {
- error("%s: %s\n", target, s
ys_errlist[errno]
);
+ error("%s: %s\n", target, s
trerror(errno)
);
return;
}
otp = tp;
return;
}
otp = tp;
@@
-429,11
+464,11
@@
notify(file, rhost, to, lmod)
return;
if ((fd = open(file, 0)) < 0) {
return;
if ((fd = open(file, 0)) < 0) {
- error("%s: %s\n", file, s
ys_errlist[errno]
);
+ error("%s: %s\n", file, s
trerror(errno)
);
return;
}
if (fstat(fd, &stb) < 0) {
return;
}
if (fstat(fd, &stb) < 0) {
- error("%s: %s\n", file, s
ys_errlist[errno]
);
+ error("%s: %s\n", file, s
trerror(errno)
);
(void) close(fd);
return;
}
(void) close(fd);
return;
}
@@
-444,9
+479,10
@@
notify(file, rhost, to, lmod)
/*
* Create a pipe to mailling program.
*/
/*
* Create a pipe to mailling program.
*/
- pf = popen(MAILCMD, "w");
+ (void)sprintf(buf, "%s -oi -t", _PATH_SENDMAIL);
+ pf = popen(buf, "w");
if (pf == NULL) {
if (pf == NULL) {
- error("notify: \"%s\" failed\n",
MAILCMD
);
+ error("notify: \"%s\" failed\n",
_PATH_SENDMAIL
);
(void) close(fd);
return;
}
(void) close(fd);
return;
}