]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
IPv6: Return errors from ip6_forwarding
authorRoy Marples <roy@marples.name>
Wed, 4 Sep 2024 11:18:10 +0000 (12:18 +0100)
committerRoy Marples <roy@marples.name>
Wed, 4 Sep 2024 11:18:10 +0000 (12:18 +0100)
On all OS 0 is disabled and >0 is enabled.
So return -1 on any error which is returned to the main process so
we could log a diagnostic in the future.

While where allow privsep to actually get the sysctl for Capsicum.

src/if-bsd.c
src/if-linux.c
src/ipv6.c
src/ipv6nd.c
src/privsep-root.c

index a0dde1735fd469bf112a13490ef88ab9f19c4d25..ceae985934263b06e49384ecb78fe838a00015b6 100644 (file)
@@ -1767,14 +1767,12 @@ inet6_sysctlbyname(const char *name, int val, int action)
 int
 ip6_forwarding(__unused const char *ifname)
 {
-       int val;
 
 #ifdef IPV6CTL_FORWARDING
-       val = get_inet6_sysctl(IPV6CTL_FORWARDING);
+       return get_inet6_sysctl(IPV6CTL_FORWARDING);
 #else
-       val = get_inet6_sysctlbyname("net.inet6.ip6.forwarding");
+       return get_inet6_sysctlbyname("net.inet6.ip6.forwarding");
 #endif
-       return val < 0 ? 0 : val;
 }
 
 #ifdef SIOCIFAFATTACH
index 8331265696f4b6a5ea8ba39726f4a583ed2d3b3d..b907595298cf1ee4831b591245b997c244f5fee1 100644 (file)
@@ -2250,10 +2250,10 @@ ip6_forwarding(const char *ifname)
                ifname = "all";
        snprintf(path, sizeof(path), "%s/%s/forwarding", p_conf, ifname);
        if (readfile(path, buf, sizeof(buf)) == -1)
-               return 0;
+               return -1;
        i = (int)strtoi(buf, NULL, 0, INT_MIN, INT_MAX, &error);
        if (error != 0 && error != ENOTSUP)
-               return 0;
+               return -1;
        return i;
 }
 
index 28f31fc9e887c679b540da4d9923490d78ba74df..8877381ae26b96e3ccad6238e32cea1d142a73c1 100644 (file)
@@ -1149,10 +1149,10 @@ ipv6_anyglobal(struct interface *sifp)
         * Per interface only affects IsRouter of NA messages. */
 #ifdef PRIVSEP_SYSCTL
        if (IN_PRIVSEP(sifp->ctx))
-               forwarding = ps_root_ip6forwarding(sifp->ctx, NULL) != 0;
+               forwarding = ps_root_ip6forwarding(sifp->ctx, NULL) > 0;
        else
 #endif
-               forwarding = ip6_forwarding(NULL) != 0;
+               forwarding = ip6_forwarding(NULL) > 0;
 
        if (!forwarding)
                return NULL;
index 3d3f1fbda9b5323e1638e095775621ebf7405522..71b1230ca1c48fad34974d23120d36dbb8eb86b3 100644 (file)
@@ -572,7 +572,7 @@ ipv6nd_advertise(struct ipv6_addr *ia)
                        na->nd_na_flags_reserved |= ND_NA_FLAG_ROUTER;
        } else
 #endif
-       if (ip6_forwarding(ifp->name) != 0)
+       if (ip6_forwarding(ifp->name) > 0)
                na->nd_na_flags_reserved |= ND_NA_FLAG_ROUTER;
        na->nd_na_target = ia->addr;
 
index 50cd294149c9c29d21891ccd6a6ae647e8abee66..d33286ec1e4b8e4a5e0f8f980f352b9e22119850 100644 (file)
@@ -611,7 +611,7 @@ ps_root_recvmsgcb(void *arg, struct ps_msghdr *psm, struct msghdr *msg)
                free_rdata = true;
                break;
 #endif
-#if defined(INET6) && (defined(__linux__) || defined(HAVE_PLEDGE))
+#if defined(INET6) && defined(PRIVSEP_SYSCTL)
        case PS_IP6FORWARDING:
                 err = ip6_forwarding(data);
                 break;