Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/external/bsd/blacklist/bin Centralize and fix =/* parsing, n...



details:   https://anonhg.NetBSD.org/src/rev/851c07d501d6
branches:  trunk
changeset: 338585:851c07d501d6
user:      christos <christos%NetBSD.org@localhost>
date:      Sat May 30 22:39:14 2015 +0000

description:
Centralize and fix =/* parsing, now =/24 works again.
XXX: pullup-7

diffstat:

 external/bsd/blacklist/bin/conf.c |  92 +++++++++++++-------------------------
 1 files changed, 31 insertions(+), 61 deletions(-)

diffs (195 lines):

diff -r 6a03de0c6b24 -r 851c07d501d6 external/bsd/blacklist/bin/conf.c
--- a/external/bsd/blacklist/bin/conf.c Sat May 30 21:44:38 2015 +0000
+++ b/external/bsd/blacklist/bin/conf.c Sat May 30 22:39:14 2015 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: conf.c,v 1.19 2015/05/27 22:39:01 christos Exp $       */
+/*     $NetBSD: conf.c,v 1.20 2015/05/30 22:39:14 christos Exp $       */
 
 /*-
  * Copyright (c) 2015 The NetBSD Foundation, Inc.
@@ -33,7 +33,7 @@
 #endif
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: conf.c,v 1.19 2015/05/27 22:39:01 christos Exp $");
+__RCSID("$NetBSD: conf.c,v 1.20 2015/05/30 22:39:14 christos Exp $");
 
 #include <stdio.h>
 #include <string.h>
@@ -83,20 +83,38 @@
 }
 
 static int
-getnum(const char *f, size_t l, void *r, const char *p)
+getnum(const char *f, size_t l, bool local, void *rp, const char *name,
+    const char *p)
 {
        int e;
        intmax_t im;
+       int *r = rp;
+
+       if (strcmp(p, "*") == 0) {
+               *r = -1;
+               return 0;
+       }
+       if (strcmp(p, "=") == 0) {
+               if (local)
+                       goto out;
+               *r = -2;
+               return 0;
+       }
 
        im = strtoi(p, NULL, 0, 0, INT_MAX, &e);
        if (e == 0) {
-               *(int *)r = (int)im;
+               *r = (int)im;
                return 0;
        }
 
        if (f == NULL)
                return -1;
-       (*lfun)(LOG_ERR, "%s: %s, %zu: Bad number [%s]", __func__, f, l, p);
+       (*lfun)(LOG_ERR, "%s: %s, %zu: Bad number for %s [%s]", __func__, f, l,
+          name,  p);
+       return -1;
+out:
+       (*lfun)(LOG_ERR, "%s: %s, %zu: `=' for %s not allowed in local config",
+           __func__, f, l, name);
        return -1;
 
 }
@@ -104,25 +122,7 @@
 static int
 getnfail(const char *f, size_t l, bool local, struct conf *c, const char *p)
 {
-       if (strcmp(p, "*") == 0) {
-               c->c_nfail = -1;
-               return 0;
-       }
-       if (strcmp(p, "=") == 0) {
-               if (local)
-                       goto out;
-               c->c_nfail = -2;
-               return 0;
-       }
-       if (getnum(NULL, 0, &c->c_nfail, p) == 0)
-               return 0;
-
-       (*lfun)(LOG_ERR, "%s: %s, %zu: Bad nfail [%s]", __func__, f, l, p);
-       return -1;
-out:
-       (*lfun)(LOG_ERR, "%s: %s, %zu: `=' nfail not allowed in local config",
-           __func__, f, l);
-       return -1;
+       return getnum(f, l, local, &c->c_nfail, "nfail", p);
 }
 
 static int
@@ -186,7 +186,7 @@
 }
 
 static int
-getport(const char *f, size_t l, void *r, const char *p)
+getport(const char *f, size_t l, bool local, void *r, const char *p)
 {
        struct servent *sv;
 
@@ -200,11 +200,7 @@
                return 0;
        }
 
-       if (getnum(NULL, 0, r, p) == 0)
-               return 0;
-
-       (*lfun)(LOG_ERR, "%s: %s, %zu: Bad service [%s]", __func__, f, l, p);
-       return -1;
+       return getnum(f, l, local, r, "service", p);
 }
 
 static int
@@ -317,7 +313,7 @@
 
        if (strcmp(pstr, "*") == 0)
                c->c_port = -1;
-       else if (getport(f, l, &c->c_port, pstr) == -1)
+       else if (getport(f, l, local, &c->c_port, pstr) == -1)
                return -1;
 
        if (port && c->c_port != -1)
@@ -336,10 +332,6 @@
 getproto(const char *f, size_t l, bool local __unused, struct conf *c,
     const char *p)
 {
-       if (strcmp(p, "*") == 0) {
-               c->c_proto = -1;
-               return 0;
-       }
        if (strcmp(p, "stream") == 0) {
                c->c_proto = IPPROTO_TCP;
                return 0;
@@ -348,31 +340,18 @@
                c->c_proto = IPPROTO_UDP;
                return 0;
        }
-       if (getnum(NULL, 0, &c->c_proto, p) == 0)
-               return 0;
-
-       (*lfun)(LOG_ERR, "%s: %s, %zu: Bad protocol [%s]", __func__, f, l, p);
-       return -1;
+       return getnum(f, l, local, &c->c_proto, "protocol", p);
 }
 
 static int
 getfamily(const char *f, size_t l, bool local __unused, struct conf *c,
     const char *p)
 {
-       if (strcmp(p, "*") == 0) {
-               c->c_family = -1;
-               return 0;
-       }
-
        if (strncmp(p, "tcp", 3) == 0 || strncmp(p, "udp", 3) == 0) {
                c->c_family = p[3] == '6' ? AF_INET6 : AF_INET;
                return 0;
        }
-       if (getnum(NULL, 0, &c->c_family, p) == 0)
-               return 0;
-
-       (*lfun)(LOG_ERR, "%s: %s, %zu: Bad family [%s]", __func__, f, l, p);
-       return -1;
+       return getnum(f, l, local, &c->c_family, "family", p);
 }
 
 static int
@@ -381,21 +360,12 @@
 {
        struct passwd *pw;
 
-       if (strcmp(p, "*") == 0) {
-               c->c_uid = -1;
-               return 0;
-       }
-
        if ((pw = getpwnam(p)) != NULL) {
                c->c_uid = (int)pw->pw_uid;
                return 0;
        }
 
-       if (getnum(NULL, 0, &c->c_uid, p) == 0)
-               return 0;
-
-       (*lfun)(LOG_ERR, "%s: %s, %zu: Bad user [%s]", __func__, f, l, p);
-       return -1;
+       return getnum(f, l, local, &c->c_uid, "user", p);
 }
 
 
@@ -720,7 +690,7 @@
                return 0;
 
 #define CMP(a, b, f) \
-       if ((a)->f != (b)->f && (b)->f != -1) { \
+       if ((a)->f != (b)->f && (b)->f != -1 && (b)->f != -2) { \
                if (debug > 1) \
                        (*lfun)(LOG_DEBUG, "%s: %s fail %d != %d", __func__, \
                            __STRING(f), (a)->f, (b)->f); \



Home | Main Index | Thread Index | Old Index