changeset 5319:3180f8b46cc4 draft

BSD: In privsep with no GIFALIAS support? getifaddrs over privsep This makes the heavy weight call even more heavy weight :(
author Roy Marples <roy@marples.name>
date Fri, 05 Jun 2020 14:39:06 +0100
parents 8611693d307f
children 6b1dead2555e
files src/if-bsd.c
diffstat 1 files changed, 17 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/if-bsd.c	Fri Jun 05 14:28:27 2020 +0100
+++ b/src/if-bsd.c	Fri Jun 05 14:39:06 2020 +0100
@@ -1364,7 +1364,18 @@
 		struct ifaddrs *ifaddrs = NULL, *ifa;
 
 		sa = rti_info[RTAX_IFA];
-		getifaddrs(&ifaddrs);
+#ifdef PRIVSEP_GETIFADDRS
+		if (IN_PRIVSEP(ctx)) {
+			if (ps_root_getifaddrs(ctx, &ifaddrs) == -1) {
+				logerr("ps_root_getifaddrs");
+				break;
+			}
+		} else
+#endif
+		if (getifaddrs(&ifaddrs) == -1) {
+			logerr("getifaddrs");
+			break;
+		}
 		for (ifa = ifaddrs; ifa; ifa = ifa->ifa_next) {
 			if (ifa->ifa_addr == NULL)
 				continue;
@@ -1372,6 +1383,11 @@
 			    strcmp(ifa->ifa_name, ifp->name) == 0)
 				break;
 		}
+#ifdef PRIVSEP_GETIFADDRS
+		if (IN_PRIVSEP(ctx))
+			free(ifaddrs);
+		else
+#endif
 		freeifaddrs(ifaddrs);
 		if (ifam->ifam_type == RTM_DELADDR) {
 			if (ifa != NULL)