]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
dhcpcd starts inactive interfaces erroneously.
authorRoy Marples <roy@marples.name>
Tue, 25 Jul 2017 09:14:06 +0000 (10:14 +0100)
committerRoy Marples <roy@marples.name>
Tue, 25 Jul 2017 09:17:06 +0000 (10:17 +0100)
Summary: If ifp->active is not IF_ACTIVE_USER only find DHCPv6 delegations for the interface on carrier up.

Test Plan:
Allow DHCP on all interfaces, but set one interface in denyinterfaces.
Assign this interface a delegation from another interface.
This interface should not start DHCP.

Differential Revision: https://dev.marples.name/D120

src/dhcpcd.c

index 9c99cb76a0d91fd605ec29a47decedfd43ee61c3..4213c490b061496032139cb3ff8fb455d49f264f 100644 (file)
@@ -860,16 +860,19 @@ dhcpcd_startinterface(void *arg)
                ifo->options &= ~DHCPCD_IPV6;
        }
        if (ifo->options & DHCPCD_IPV6) {
-               ipv6_startstatic(ifp);
+               if (ifp->active == IF_ACTIVE_USER) {
+                       ipv6_startstatic(ifp);
 
-               if (ifo->options & DHCPCD_IPV6RS)
-                       ipv6nd_startrs(ifp);
+                       if (ifo->options & DHCPCD_IPV6RS)
+                               ipv6nd_startrs(ifp);
+               }
 
                if (ifo->options & DHCPCD_DHCP6)
                        dhcp6_find_delegates(ifp);
 
-               if (!(ifo->options & DHCPCD_IPV6RS) ||
-                   ifo->options & (DHCPCD_IA_FORCED | DHCPCD_INFORM6))
+               if ((!(ifo->options & DHCPCD_IPV6RS) ||
+                   ifo->options & (DHCPCD_IA_FORCED | DHCPCD_INFORM6)) &&
+                   ifp->active == IF_ACTIVE_USER)
                {
                        ssize_t nolease;
 
@@ -899,7 +902,7 @@ dhcpcd_startinterface(void *arg)
        }
 
 #ifdef INET
-       if (ifo->options & DHCPCD_IPV4) {
+       if (ifo->options & DHCPCD_IPV4 && ifp->active == IF_ACTIVE_USER) {
                /* Ensure we have an IPv4 state before starting DHCP */
                if (ipv4_getstate(ifp) != NULL)
                        dhcp_start(ifp);