Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.sbin/sup/source - don't allow multiple active connection...
details: https://anonhg.NetBSD.org/src/rev/e739abd8d4d0
branches: trunk
changeset: 785332:e739abd8d4d0
user: christos <christos%NetBSD.org@localhost>
date: Fri Mar 08 20:56:44 2013 +0000
description:
- don't allow multiple active connections from the same host
- prefix all messages with the local hostname
- more error checking
diffstat:
usr.sbin/sup/source/log.c | 25 ++-
usr.sbin/sup/source/scan.c | 45 +++++-
usr.sbin/sup/source/scm.c | 11 +-
usr.sbin/sup/source/scmio.c | 11 +-
usr.sbin/sup/source/setproctitle.c | 22 +-
usr.sbin/sup/source/supcmeat.c | 242 +++++++++++++++++++++---------------
usr.sbin/sup/source/supcmisc.c | 28 ++-
usr.sbin/sup/source/supextern.h | 6 +-
usr.sbin/sup/source/supfilesrv.c | 85 ++++++++++--
usr.sbin/sup/source/supscan.c | 8 +-
10 files changed, 311 insertions(+), 172 deletions(-)
diffs (truncated from 1346 to 300 lines):
diff -r 376ff0bfbe69 -r e739abd8d4d0 usr.sbin/sup/source/log.c
--- a/usr.sbin/sup/source/log.c Fri Mar 08 19:04:27 2013 +0000
+++ b/usr.sbin/sup/source/log.c Fri Mar 08 20:56:44 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: log.c,v 1.10 2009/10/16 12:41:37 christos Exp $ */
+/* $NetBSD: log.c,v 1.11 2013/03/08 20:56:44 christos Exp $ */
/*
* Copyright (c) 1992 Carnegie Mellon University
@@ -63,6 +63,19 @@
opened++;
}
+static void
+vfmtbuf(int f, char *buf, size_t bufsiz, const char *fmt, va_list ap)
+{
+ char hostname[MAXHOSTNAMELEN];
+ char xbuf[STRINGLENGTH], ybuf[STRINGLENGTH];
+ gethostname(hostname, sizeof(hostname));
+ snprintf(ybuf, sizeof(ybuf), "SUP@%s%s ", hostname, f ? ":" : "");
+ vsnprintf(xbuf, sizeof(xbuf), fmt, ap);
+ snprintf(buf, bufsiz, "%s%s", ybuf, xbuf);
+ return buf;
+}
+
+
void
logquit(int retval, const char *fmt, ...)
{
@@ -70,7 +83,7 @@
va_list ap;
va_start(ap, fmt);
- vsnprintf(buf, sizeof(buf), fmt, ap);
+ vfmtbuf(1, buf, sizeof(buf), fmt, ap);
va_end(ap);
if (opened) {
syslog(LOG_ERR, "%s", buf);
@@ -87,7 +100,7 @@
va_list ap;
va_start(ap, fmt);
- vsnprintf(buf, sizeof(buf), fmt, ap);
+ vfmtbuf(1, buf, sizeof(buf), fmt, ap);
va_end(ap);
if (opened) {
syslog(LOG_ERR, "%s", buf);
@@ -104,7 +117,7 @@
va_list ap;
va_start(ap, fmt);
- vsnprintf(buf, sizeof(buf), fmt, ap);
+ vfmtbuf(0, buf, sizeof(buf), fmt, ap);
va_end(ap);
if (opened) {
syslog(LOG_INFO, "%s", buf);
@@ -137,7 +150,7 @@
va_list ap;
va_start(ap, fmt);
- vsnprintf(buf, sizeof(buf), fmt, ap);
+ vfmtbuf(1, buf, sizeof(buf), fmt, ap);
va_end(ap);
if (opened) {
syslog(deny_severity, "%s", buf);
@@ -154,7 +167,7 @@
va_list ap;
va_start(ap, fmt);
- vsnprintf(buf, sizeof(buf), fmt, ap);
+ vfmtbuf(1, buf, sizeof(buf), fmt, ap);
va_end(ap);
if (opened) {
syslog(allow_severity, "%s", buf);
diff -r 376ff0bfbe69 -r e739abd8d4d0 usr.sbin/sup/source/scan.c
--- a/usr.sbin/sup/source/scan.c Fri Mar 08 19:04:27 2013 +0000
+++ b/usr.sbin/sup/source/scan.c Fri Mar 08 20:56:44 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: scan.c,v 1.30 2011/08/31 16:25:00 plunky Exp $ */
+/* $NetBSD: scan.c,v 1.31 2013/03/08 20:56:44 christos Exp $ */
/*
* Copyright (c) 1992 Carnegie Mellon University
@@ -310,7 +310,9 @@
free(frelease);
return (FALSE);
} else
- (void) chdir(basedir);
+ if (chdir(basedir) < 0)
+ goaway("Can't chdir to %s (%s)",
+ basedir, strerror(errno));
tl->TLnext = listTL;
listTL = tl;
if (release == NULL)
@@ -363,8 +365,11 @@
prefix = saveprefix;
if (prefix != NULL) {
if (chdir(prefix) < 0)
- goaway("Can't chdir to %s", prefix);
- (void) chdir(basedir);
+ goaway("Can't chdir to %s (%s)",
+ prefix, strerror(errno));
+ if (chdir(basedir) < 0)
+ goaway("Can't chdir to %s (%s)",
+ basedir, strerror(errno));
}
makescan(tl->TLlist, tl->TLscan);
free(tl);
@@ -628,13 +633,21 @@
}
listdir(fullname, always);
if (updir == 0 || linkcount) {
- (void) chdir(basedir);
+ if (chdir(basedir) < 0)
+ goaway("Can't chdir to %s (%s)",
+ basedir, strerror(errno));
if (prefix)
- (void) chdir(prefix);
+ if (chdir(prefix) < 0)
+ goaway("Can't chdir to %s (%s)",
+ prefix, strerror(errno));
if (updir && *updir)
- (void) chdir(updir);
+ if (chdir(updir) < 0)
+ goaway("Can't chdir to %s (%s)",
+ updir, strerror(errno));
} else
- (void) chdir("..");
+ if (chdir("..") < 0)
+ goaway("Can't chdir to %s (%s)",
+ "..", strerror(errno));
return;
}
if (access(name, R_OK) < 0)
@@ -1009,12 +1022,16 @@
if (curprefix == NULL) {
if (prefix == NULL)
return;
- (void) chdir(prefix);
+ if (chdir(prefix) < 0)
+ goaway("Can't chdir to %s (%s)",
+ prefix, strerror(errno));
curprefix = prefix;
return;
}
if (prefix == NULL) {
- (void) chdir(basedir);
+ if (chdir(basedir) < 0)
+ goaway("Can't chdir to %s (%s)",
+ basedir, strerror(errno));
curprefix = NULL;
return;
}
@@ -1024,7 +1041,11 @@
curprefix = prefix;
return;
}
- (void) chdir(basedir);
- (void) chdir(prefix);
+ if (chdir(basedir) < 0)
+ goaway("Can't chdir to %s (%s)",
+ basedir, strerror(errno));
+ if (chdir(prefix) < 0)
+ goaway("Can't chdir to %s (%s)",
+ prefix, strerror(errno));
curprefix = prefix;
}
diff -r 376ff0bfbe69 -r e739abd8d4d0 usr.sbin/sup/source/scm.c
--- a/usr.sbin/sup/source/scm.c Fri Mar 08 19:04:27 2013 +0000
+++ b/usr.sbin/sup/source/scm.c Fri Mar 08 20:56:44 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: scm.c,v 1.29 2011/08/31 16:25:00 plunky Exp $ */
+/* $NetBSD: scm.c,v 1.30 2013/03/08 20:56:44 christos Exp $ */
/*
* Copyright (c) 1992 Carnegie Mellon University
@@ -445,7 +445,8 @@
memcpy(&remoteaddr, res->ai_addr, res->ai_addrlen);
remotename = estrdup(hostname);
x = 0x01020304;
- (void) write(netfile, &x, sizeof(int));
+ if (write(netfile, &x, sizeof(int)) == -1)
+ return (SCMERR);
swapmode = 0; /* swap only on server, not client */
freeaddrinfo(res0);
return (SCMOK);
@@ -655,14 +656,16 @@
scmerr(int error, const char *fmt, ...)
{
va_list ap;
+ char hostname[MAXHOSTNAMELEN];
+ gethostname(hostname, sizeof(hostname));
va_start(ap, fmt);
(void) fflush(stdout);
if (progpid > 0)
- fprintf(stderr, "%s %d: ", program, progpid);
+ fprintf(stderr, "%s@%s %d: ", program, hostname, progpid);
else
- fprintf(stderr, "%s: ", program);
+ fprintf(stderr, "%s@%s: ", program, hostname);
vfprintf(stderr, fmt, ap);
va_end(ap);
diff -r 376ff0bfbe69 -r e739abd8d4d0 usr.sbin/sup/source/scmio.c
--- a/usr.sbin/sup/source/scmio.c Fri Mar 08 19:04:27 2013 +0000
+++ b/usr.sbin/sup/source/scmio.c Fri Mar 08 20:56:44 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: scmio.c,v 1.21 2011/08/31 16:25:00 plunky Exp $ */
+/* $NetBSD: scmio.c,v 1.22 2013/03/08 20:56:44 christos Exp $ */
/*
* Copyright (c) 1992 Carnegie Mellon University
@@ -667,7 +667,8 @@
} else
x = readdata((size_t)XFERSIZE(count), buf, false);
if (x == SCMOK) {
- (void) write(f, buf, (size_t)XFERSIZE(count));
+ if (write(f, buf, (size_t)XFERSIZE(count)) == -1)
+ return SCMERR;
count -= XFERSIZE(count);
}
}
@@ -740,7 +741,8 @@
if (c <= 0) {
break;
}
- (void) write(1, buf, (size_t)c);
+ if (write(1, buf, (size_t)c) == -1)
+ break;
}
}
if (set[0].revents & POLLIN) {
@@ -750,7 +752,8 @@
else {
if (c <= 0)
break;
- (void) write(netfile, buf, (size_t)c);
+ if (write(netfile, buf, (size_t)c) == -1)
+ break;
}
}
}
diff -r 376ff0bfbe69 -r e739abd8d4d0 usr.sbin/sup/source/setproctitle.c
--- a/usr.sbin/sup/source/setproctitle.c Fri Mar 08 19:04:27 2013 +0000
+++ b/usr.sbin/sup/source/setproctitle.c Fri Mar 08 20:56:44 2013 +0000
@@ -62,12 +62,12 @@
*/
/* 1 for the first entry, 1 for the NULL */
- char **args = __environ - 2, *s;
+ char **args = __environ - 2;
#ifdef _SC_ARG_MAX
s = (char *)sysconf(_SC_ARG_MAX);
-#elifdef ARG_MAX
+#elif defined(ARG_MAX)
s = (char *)ARG_MAX;
-#elifdef NCARGS
+#elif defined(NCARGS)
s = (char *)NCARGS;
#else
s = (char *)(256 * 1024);
@@ -82,21 +82,23 @@
*(int *)args = 1; /* *argc = 1; */
pname = *++args; /* pname = argv[0] */
+ /* In case we get called again */
+ if ((p = strchr(pname, ':')) != NULL)
+ *p = '\0';
+
/* Just the last component of the name */
if ((p = strrchr(pname, '/')) != NULL)
- pname = p + 1;
-
- /* In case we get called again */
- if ((p = strrchr(pname, ':')) != NULL)
- *p = '\0';
+ p = p + 1;
+ else
+ p = pname;
va_start(ap, fmt);
if (fmt != NULL) {
- len = snprintf(buf, sizeof(buf), "%s: ", pname);
+ len = snprintf(buf, sizeof(buf), "%s: ", p);
if (len >= 0)
(void)vsnprintf(buf + len, sizeof(buf) - len, fmt, ap);
} else
- (void)snprintf(buf, sizeof(buf), "%s", pname);
+ (void)snprintf(buf, sizeof(buf), "%s", p);
va_end(ap);
(void)strcpy(pname, buf);
diff -r 376ff0bfbe69 -r e739abd8d4d0 usr.sbin/sup/source/supcmeat.c
--- a/usr.sbin/sup/source/supcmeat.c Fri Mar 08 19:04:27 2013 +0000
+++ b/usr.sbin/sup/source/supcmeat.c Fri Mar 08 20:56:44 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: supcmeat.c,v 1.40 2011/09/21 19:34:54 christos Exp $ */
+/* $NetBSD: supcmeat.c,v 1.41 2013/03/08 20:56:44 christos Exp $ */
Home |
Main Index |
Thread Index |
Old Index