Source-Changes-HG archive

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

[src/trunk]: src/external/bsd/dhcpcd/dist Update to dhcpcd-9.3.3 with the fol...



details:   https://anonhg.NetBSD.org/src/rev/34431a568ad7
branches:  trunk
changeset: 957149:34431a568ad7
user:      roy <roy%NetBSD.org@localhost>
date:      Fri Nov 20 13:23:38 2020 +0000

description:
Update to dhcpcd-9.3.3 with the following changes:

 * dhcpcd: Don't create a launcher process if keeping in foreground
 * dhcpcd: Add --noconfigure option
 * control: Create an unpriv socket for non master mode
 * options: Don't log unknown ones when printing pidfile location

diffstat:

 external/bsd/dhcpcd/dist/hooks/15-timezone    |   2 +-
 external/bsd/dhcpcd/dist/hooks/30-hostname.in |   2 +-
 external/bsd/dhcpcd/dist/src/control.c        |  36 +++++++++++++++------------
 external/bsd/dhcpcd/dist/src/defs.h           |   7 +---
 external/bsd/dhcpcd/dist/src/dhcpcd.h         |   1 +
 external/bsd/dhcpcd/dist/src/if-options.h     |   4 ++-
 external/bsd/dhcpcd/dist/src/ipv4ll.c         |  18 +++++++++---
 external/bsd/dhcpcd/dist/src/route.c          |   3 +-
 8 files changed, 43 insertions(+), 30 deletions(-)

diffs (268 lines):

diff -r 564f2515d9b3 -r 34431a568ad7 external/bsd/dhcpcd/dist/hooks/15-timezone
--- a/external/bsd/dhcpcd/dist/hooks/15-timezone        Fri Nov 20 10:08:47 2020 +0000
+++ b/external/bsd/dhcpcd/dist/hooks/15-timezone        Fri Nov 20 13:23:38 2020 +0000
@@ -42,6 +42,6 @@
        ;;
 esac
 
-if $if_up; then
+if $if_configured && $if_up; then
        set_zoneinfo
 fi
diff -r 564f2515d9b3 -r 34431a568ad7 external/bsd/dhcpcd/dist/hooks/30-hostname.in
--- a/external/bsd/dhcpcd/dist/hooks/30-hostname.in     Fri Nov 20 10:08:47 2020 +0000
+++ b/external/bsd/dhcpcd/dist/hooks/30-hostname.in     Fri Nov 20 13:23:38 2020 +0000
@@ -153,6 +153,6 @@
        ;;
 esac
 
-if $if_up && [ "$reason" != ROUTERADVERT ]; then
+if $if_configured && $if_up && [ "$reason" != ROUTERADVERT ]; then
        set_hostname
 fi
diff -r 564f2515d9b3 -r 34431a568ad7 external/bsd/dhcpcd/dist/src/control.c
--- a/external/bsd/dhcpcd/dist/src/control.c    Fri Nov 20 10:08:47 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/control.c    Fri Nov 20 13:23:38 2020 +0000
@@ -274,9 +274,11 @@
 }
 
 static int
-make_path(char *path, size_t len, const char *ifname, sa_family_t family)
+make_path(char *path, size_t len, const char *ifname, sa_family_t family,
+    bool unpriv)
 {
        const char *per;
+       const char *sunpriv;
 
        switch(family) {
        case AF_INET:
@@ -289,8 +291,13 @@
                per = "";
                break;
        }
+       if (unpriv)
+               sunpriv = ifname ? ".unpriv" : "unpriv.";
+       else
+               sunpriv = "";
        return snprintf(path, len, CONTROLSOCKET,
-           ifname ? ifname : "", ifname ? per : "", ifname ? "." : "");
+           ifname ? ifname : "", ifname ? per : "",
+           sunpriv, ifname ? "." : "");
 }
 
 static int
@@ -303,10 +310,7 @@
                return -1;
        memset(sa, 0, sizeof(*sa));
        sa->sun_family = AF_UNIX;
-       if (unpriv)
-               strlcpy(sa->sun_path, UNPRIVSOCKET, sizeof(sa->sun_path));
-       else
-               make_path(sa->sun_path, sizeof(sa->sun_path), ifname, family);
+       make_path(sa->sun_path, sizeof(sa->sun_path), ifname, family, unpriv);
        return fd;
 }
 
@@ -346,9 +350,12 @@
        }
 #endif
 
-       if ((fmode & S_UNPRIV) != S_UNPRIV)
+       if ((fmode & S_PRIV) == S_PRIV)
                strlcpy(ctx->control_sock, sa.sun_path,
                    sizeof(ctx->control_sock));
+       else
+               strlcpy(ctx->control_sock_unpriv, sa.sun_path,
+                   sizeof(ctx->control_sock_unpriv));
        return fd;
 }
 
@@ -360,7 +367,9 @@
 #ifdef PRIVSEP
        if (IN_PRIVSEP_SE(ctx)) {
                make_path(ctx->control_sock, sizeof(ctx->control_sock),
-                   ifname, family);
+                   ifname, family, false);
+               make_path(ctx->control_sock_unpriv, sizeof(ctx->control_sock),
+                   ifname, family, true);
                return 0;
        }
 #endif
@@ -371,11 +380,7 @@
        ctx->control_fd = fd;
        eloop_event_add(ctx->eloop, fd, control_handle, ctx);
 
-       if (ifname == NULL &&
-           (fd = control_start1(ctx, NULL, AF_UNSPEC, S_UNPRIV)) != -1)
-       {
-               /* We must be in master mode, so create an unprivileged socket
-                * to allow normal users to learn the status of dhcpcd. */
+       if ((fd = control_start1(ctx, ifname, family, S_UNPRIV)) != -1) {
                ctx->control_unpriv_fd = fd;
                eloop_event_add(ctx->eloop, fd, control_handle_unpriv, ctx);
        }
@@ -414,8 +419,7 @@
        if (IN_PRIVSEP_SE(ctx)) {
                if (ps_root_unlink(ctx, ctx->control_sock) == -1)
                        retval = -1;
-               if (ctx->options & DHCPCD_MASTER &&
-                   control_unlink(ctx, UNPRIVSOCKET) == -1)
+               if (ps_root_unlink(ctx, ctx->control_sock_unpriv) == -1)
                        retval = -1;
                return retval;
        } else if (ctx->options & DHCPCD_FORKED)
@@ -434,7 +438,7 @@
                eloop_event_delete(ctx->eloop, ctx->control_unpriv_fd);
                close(ctx->control_unpriv_fd);
                ctx->control_unpriv_fd = -1;
-               if (control_unlink(ctx, UNPRIVSOCKET) == -1)
+               if (control_unlink(ctx, ctx->control_sock_unpriv) == -1)
                        retval = -1;
        }
 
diff -r 564f2515d9b3 -r 34431a568ad7 external/bsd/dhcpcd/dist/src/defs.h
--- a/external/bsd/dhcpcd/dist/src/defs.h       Fri Nov 20 10:08:47 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/defs.h       Fri Nov 20 13:23:38 2020 +0000
@@ -29,7 +29,7 @@
 #define CONFIG_H
 
 #define PACKAGE                        "dhcpcd"
-#define VERSION                        "9.3.2"
+#define VERSION                        "9.3.3"
 
 #ifndef PRIVSEP_USER
 # define PRIVSEP_USER          "_" PACKAGE
@@ -60,10 +60,7 @@
 # define PIDFILE               RUNDIR "/%s%s%spid"
 #endif
 #ifndef CONTROLSOCKET
-# define CONTROLSOCKET         RUNDIR "/%s%s%ssock"
-#endif
-#ifndef UNPRIVSOCKET
-# define UNPRIVSOCKET          RUNDIR "/unpriv.sock"
+# define CONTROLSOCKET         RUNDIR "/%s%s%s%ssock"
 #endif
 #ifndef RDM_MONOFILE
 # define RDM_MONOFILE          DBDIR "/rdm_monotonic"
diff -r 564f2515d9b3 -r 34431a568ad7 external/bsd/dhcpcd/dist/src/dhcpcd.h
--- a/external/bsd/dhcpcd/dist/src/dhcpcd.h     Fri Nov 20 10:08:47 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/dhcpcd.h     Fri Nov 20 13:23:38 2020 +0000
@@ -180,6 +180,7 @@
        int control_unpriv_fd;
        struct fd_list_head control_fds;
        char control_sock[sizeof(CONTROLSOCKET) + IF_NAMESIZE];
+       char control_sock_unpriv[sizeof(CONTROLSOCKET) + IF_NAMESIZE + 7];
        gid_t control_group;
 
        /* DHCP Enterprise options, RFC3925 */
diff -r 564f2515d9b3 -r 34431a568ad7 external/bsd/dhcpcd/dist/src/if-options.h
--- a/external/bsd/dhcpcd/dist/src/if-options.h Fri Nov 20 10:08:47 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/if-options.h Fri Nov 20 13:23:38 2020 +0000
@@ -91,7 +91,7 @@
 #define DHCPCD_IPV6RS                  (1ULL << 31)
 #define DHCPCD_IPV6RA_REQRDNSS         (1ULL << 32)
 #define DHCPCD_PRIVSEP                 (1ULL << 33)
-#define DHCPCD_UNPRIV                  (1ULL << 34)
+#define DHCPCD_CONFIGURE               (1ULL << 34)
 #define DHCPCD_IPV4                    (1ULL << 35)
 #define DHCPCD_FORKED                  (1ULL << 36)
 #define DHCPCD_IPV6                    (1ULL << 37)
@@ -180,6 +180,8 @@
 #define O_INACTIVE             O_BASE + 47
 #define O_MUDURL               O_BASE + 48
 #define O_MSUSERCLASS          O_BASE + 49
+#define O_CONFIGURE            O_BASE + 50
+#define O_NOCONFIGURE          O_BASE + 51
 
 extern const struct option cf_options[];
 
diff -r 564f2515d9b3 -r 34431a568ad7 external/bsd/dhcpcd/dist/src/ipv4ll.c
--- a/external/bsd/dhcpcd/dist/src/ipv4ll.c     Fri Nov 20 10:08:47 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/ipv4ll.c     Fri Nov 20 13:23:38 2020 +0000
@@ -228,6 +228,8 @@
 #endif
                loginfox("%s: using IPv4LL address %s",
                  ifp->name, inet_ntoa(state->pickedaddr));
+       if (!(ifp->options->options & DHCPCD_CONFIGURE))
+               goto run;
        if (ia == NULL) {
                if (ifp->ctx->options & DHCPCD_TEST)
                        goto test;
@@ -252,6 +254,7 @@
                return;
        }
        rt_build(ifp->ctx, AF_INET);
+run:
        astate = arp_announceaddr(ifp->ctx, &ia->addr);
        if (astate != NULL)
                astate->announced_cb = ipv4ll_announced_arp;
@@ -281,7 +284,8 @@
        struct ipv4ll_state *state = IPV4LL_STATE(ifp);
 
        ipv4ll_freearp(ifp);
-       ipv4_deladdr(state->addr, 1);
+       if (ifp->options->options & DHCPCD_CONFIGURE)
+               ipv4_deladdr(state->addr, 1);
        state->addr = NULL;
        rt_build(ifp->ctx, AF_INET);
        script_runreason(ifp, "IPV4LL");
@@ -373,7 +377,8 @@
        if (ia != NULL && ia->addr_flags & IN_IFF_DUPLICATED) {
                state->pickedaddr = ia->addr; /* So it's not picked again. */
                repick = true;
-               ipv4_deladdr(ia, 0);
+               if (ifp->options->options & DHCPCD_CONFIGURE)
+                       ipv4_deladdr(ia, 0);
                ia = NULL;
        }
 #endif
@@ -431,7 +436,8 @@
 
        state = IPV4LL_STATE(ifp);
        if (state && state->addr != NULL) {
-               ipv4_deladdr(state->addr, 1);
+               if (ifp->options->options & DHCPCD_CONFIGURE)
+                       ipv4_deladdr(state->addr, 1);
                state->addr = NULL;
                dropped = true;
        }
@@ -442,7 +448,8 @@
 
                TAILQ_FOREACH_SAFE(ia, &istate->addrs, next, ian) {
                        if (IN_LINKLOCAL(ntohl(ia->addr.s_addr))) {
-                               ipv4_deladdr(ia, 0);
+                               if (ifp->options->options & DHCPCD_CONFIGURE)
+                                       ipv4_deladdr(ia, 0);
                                dropped = true;
                        }
                }
@@ -534,7 +541,8 @@
        else if (ia->addr_flags & IN_IFF_DUPLICATED) {
                logerrx("%s: DAD detected %s", ifp->name, ia->saddr);
                ipv4ll_freearp(ifp);
-               ipv4_deladdr(ia, 1);
+               if (ifp->options->options & DHCPCD_CONFIGURE)
+                       ipv4_deladdr(ia, 1);
                state->addr = NULL;
                rt_build(ifp->ctx, AF_INET);
                ipv4ll_found(ifp);
diff -r 564f2515d9b3 -r 34431a568ad7 external/bsd/dhcpcd/dist/src/route.c
--- a/external/bsd/dhcpcd/dist/src/route.c      Fri Nov 20 10:08:47 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/route.c      Fri Nov 20 13:23:38 2020 +0000
@@ -713,6 +713,8 @@
 #endif
 
        RB_TREE_FOREACH_SAFE(rt, &routes, rtn) {
+               if (!(rt->rt_ifp->options->options & DHCPCD_CONFIGURE))
+                       continue;
 #ifdef BSD
                if (rt_is_default(rt) &&
                    if_missfilter(rt->rt_ifp, &rt->rt_gateway) == -1)
@@ -771,7 +773,6 @@
                }
        }
 
-
 getfail:
        rt_headclear(&routes, AF_UNSPEC);
        rt_headclear(&kroutes, AF_UNSPEC);



Home | Main Index | Thread Index | Old Index