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