changeset 5483:f137886e6211 draft

FreeBSD: Anticipate SIOCGIFDATA not working in Capsicum
author Roy Marples <roy@marples.name>
date Thu, 24 Sep 2020 03:49:30 +0100
parents 7f7968235543
children e01d8ea25a42
files src/if-bsd.c src/privsep-bsd.c
diffstat 2 files changed, 9 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/if-bsd.c	Thu Sep 24 03:31:43 2020 +0100
+++ b/src/if-bsd.c	Thu Sep 24 03:49:30 2020 +0100
@@ -364,7 +364,7 @@
 {
 	struct ifreq ifr = { .ifr_flags = 0 };
 
-#if defined(PRIVSEP) && defined(HAVE_PLEDGE)
+#if defined(PRIVSEP) && (defined(HAVE_CAPSICUM) || defined(HAVE_PLEDGE))
 	if (IN_PRIVSEP(ctx))
 		return (int)ps_root_indirectioctl(ctx, cmd, ifname, data, len);
 #else
@@ -440,7 +440,7 @@
 int
 if_carrier_ifadata(struct interface *ifp, void *ifadata)
 {
-	int carrier = if_carrier(ifp);
+	int carrier = if_carrier0(ifp);
 	struct if_data *ifdata;
 
 	if (carrier != LINK_UNKNOWN || ifadata == NULL)
--- a/src/privsep-bsd.c	Thu Sep 24 03:31:43 2020 +0100
+++ b/src/privsep-bsd.c	Thu Sep 24 03:49:30 2020 +0100
@@ -118,7 +118,7 @@
 	return err;
 }
 
-#ifdef HAVE_PLEDGE
+#if defined(HAVE_CAPSICUM) || defined(HAVE_PLEDGE)
 static ssize_t
 ps_root_doindirectioctl(unsigned long req, void *data, size_t len)
 {
@@ -139,7 +139,9 @@
 
 	return ps_root_doioctldom(PF_INET, req, &ifr, sizeof(ifr));
 }
+#endif
 
+#ifdef HAVE_PLEDGE
 static ssize_t
 ps_root_doifignoregroup(void *data, size_t len)
 {
@@ -177,10 +179,12 @@
 		break;
 	case PS_ROUTE:
 		return ps_root_doroute(data, len);
-#ifdef HAVE_PLEDGE
+#if defined(HAVE_CAPSICUM) || defined(HAVE_PLEDGE)
 	case PS_IOCTLINDIRECT:
 		err = ps_root_doindirectioctl(psm->ps_flags, data, len);
 		break;
+#endif
+#ifdef HAVE_PLEDGE
 	case PS_IFIGNOREGRP:
 		return ps_root_doifignoregroup(data, len);
 #endif
@@ -232,7 +236,7 @@
 	return ps_root_readerror(ctx, data, len);
 }
 
-#ifdef HAVE_PLEDGE
+#if defined(HAVE_CAPSICUM) || defined(HAVE_PLEDGE)
 ssize_t
 ps_root_indirectioctl(struct dhcpcd_ctx *ctx, unsigned long request,
     const char *ifname, void *data, size_t len)