[PATCH 2/9] wpa_supplicant: use getnameinfo() for UDP ctrl iface

Janusz Dziedzic janusz.dziedzic at tieto.com
Wed Sep 23 08:04:12 EDT 2015


Kill not needed #ifdefs and use getnameinfo() that
will work for both IPv4 and IPv6.

Signed-off-by: Janusz Dziedzic <janusz.dziedzic at tieto.com>
---
 wpa_supplicant/ctrl_iface_udp.c | 111 +++++++++++++++-------------------------
 1 file changed, 41 insertions(+), 70 deletions(-)

diff --git a/wpa_supplicant/ctrl_iface_udp.c b/wpa_supplicant/ctrl_iface_udp.c
index 12b4d45..26fb3aa 100644
--- a/wpa_supplicant/ctrl_iface_udp.c
+++ b/wpa_supplicant/ctrl_iface_udp.c
@@ -63,9 +63,8 @@ static int wpa_supplicant_ctrl_iface_attach(struct ctrl_iface_priv *priv,
 					    socklen_t fromlen)
 {
 	struct wpa_ctrl_dst *dst;
-#ifdef CONFIG_CTRL_IFACE_UDP_IPV6
-	char addr[INET6_ADDRSTRLEN];
-#endif /* CONFIG_UDP_IPV6 */
+	char host[NI_MAXHOST] = {0};
+	char service[NI_MAXSERV] = {0};
 
 	dst = os_zalloc(sizeof(*dst));
 	if (dst == NULL)
@@ -75,14 +74,14 @@ static int wpa_supplicant_ctrl_iface_attach(struct ctrl_iface_priv *priv,
 	dst->debug_level = MSG_INFO;
 	dst->next = priv->ctrl_dst;
 	priv->ctrl_dst = dst;
-#ifdef CONFIG_CTRL_IFACE_UDP_IPV6
-	wpa_printf(MSG_DEBUG, "CTRL_IFACE monitor attached %s:%d",
-		   inet_ntop(AF_INET6, &from->sin6_addr, addr, sizeof(*from)),
-		   ntohs(from->sin6_port));
-#else /* CONFIG_CTRL_IFACE_UDP_IPV6 */
-	wpa_printf(MSG_DEBUG, "CTRL_IFACE monitor attached %s:%d",
-		   inet_ntoa(from->sin_addr), ntohs(from->sin_port));
-#endif /* CONFIG_CTRL_IFACE_UDP_IPV6 */
+
+	getnameinfo((struct sockaddr *) from, fromlen,
+		    host, sizeof(host),
+		    service, sizeof(service),
+		    NI_NUMERICHOST);
+
+	wpa_printf(MSG_DEBUG, "CTRL_IFACE monitor attached %s:%s",
+		   host, service);
 	return 0;
 }
 
@@ -96,9 +95,8 @@ static int wpa_supplicant_ctrl_iface_detach(struct ctrl_iface_priv *priv,
 					    socklen_t fromlen)
 {
 	struct wpa_ctrl_dst *dst, *prev = NULL;
-#ifdef CONFIG_CTRL_IFACE_UDP_IPV6
-	char addr[INET6_ADDRSTRLEN];
-#endif /* CONFIG_CTRL_IFACE_UDP_IPV6 */
+	char host[NI_MAXHOST] = {0};
+	char service[NI_MAXSERV] = {0};
 
 	dst = priv->ctrl_dst;
 	while (dst) {
@@ -106,17 +104,19 @@ static int wpa_supplicant_ctrl_iface_detach(struct ctrl_iface_priv *priv,
 		if (from->sin6_port == dst->addr.sin6_port &&
 		    !os_memcmp(&from->sin6_addr, &dst->addr.sin6_addr,
 			       sizeof(from->sin6_addr))) {
-			wpa_printf(MSG_DEBUG, "CTRL_IFACE monitor detached %s:%d",
-				   inet_ntop(AF_INET6, &from->sin6_addr, addr,
-					     sizeof(*from)),
-				   ntohs(from->sin6_port));
 #else /* CONFIG_CTRL_IFACE_UDP_IPV6 */
 		if (from->sin_addr.s_addr == dst->addr.sin_addr.s_addr &&
 		    from->sin_port == dst->addr.sin_port) {
-			wpa_printf(MSG_DEBUG, "CTRL_IFACE monitor detached "
-				   "%s:%d", inet_ntoa(from->sin_addr),
-				   ntohs(from->sin_port));
 #endif /* CONFIG_CTRL_IFACE_UDP_IPV6 */
+
+			getnameinfo((struct sockaddr *) from, fromlen,
+				    host, sizeof(host),
+				    service, sizeof(service),
+				    NI_NUMERICHOST);
+
+			wpa_printf(MSG_DEBUG, "CTRL_IFACE monitor detached %s:%s",
+				   host, service);
+
 			if (prev == NULL)
 				priv->ctrl_dst = dst->next;
 			else
@@ -141,9 +141,8 @@ static int wpa_supplicant_ctrl_iface_level(struct ctrl_iface_priv *priv,
 					   char *level)
 {
 	struct wpa_ctrl_dst *dst;
-#ifdef CONFIG_CTRL_IFACE_UDP_IPV6
-	char addr[INET6_ADDRSTRLEN];
-#endif /* CONFIG_CTRL_IFACE_UDP_IPV6 */
+	char host[NI_MAXHOST] = {0};
+	char service[NI_MAXSERV] = {0};
 
 	wpa_printf(MSG_DEBUG, "CTRL_IFACE LEVEL %s", level);
 
@@ -153,17 +152,17 @@ static int wpa_supplicant_ctrl_iface_level(struct ctrl_iface_priv *priv,
 		if (from->sin6_port == dst->addr.sin6_port &&
 		    !os_memcmp(&from->sin6_addr, &dst->addr.sin6_addr,
 			       sizeof(from->sin6_addr))) {
-			wpa_printf(MSG_DEBUG, "CTRL_IFACE changed monitor level %s:%d",
-				   inet_ntop(AF_INET6, &from->sin6_addr, addr,
-					     sizeof(*from)),
-				   ntohs(from->sin6_port));
 #else /* CONFIG_CTRL_IFACE_UDP_IPV6 */
 		if (from->sin_addr.s_addr == dst->addr.sin_addr.s_addr &&
 		    from->sin_port == dst->addr.sin_port) {
-			wpa_printf(MSG_DEBUG, "CTRL_IFACE changed monitor "
-				   "level %s:%d", inet_ntoa(from->sin_addr),
-				   ntohs(from->sin_port));
 #endif /* CONFIG_CTRL_IFACE_UDP_IPV6 */
+			getnameinfo((struct sockaddr *) from, fromlen,
+				    host, sizeof(host),
+				    service, sizeof(service),
+				    NI_NUMERICHOST);
+
+			wpa_printf(MSG_DEBUG, "CTRL_IFACE changed monitor level %s:%s",
+				   host, service);
 			dst->debug_level = atoi(level);
 			return 0;
 		}
@@ -203,9 +202,6 @@ static void wpa_supplicant_ctrl_iface_receive(int sock, void *eloop_ctx,
 	int res;
 #ifdef CONFIG_CTRL_IFACE_UDP_IPV6
 	struct sockaddr_in6 from;
-#ifndef CONFIG_CTRL_IFACE_UDP_REMOTE
-	char addr[INET6_ADDRSTRLEN];
-#endif /* CONFIG_CTRL_IFACE_UDP_REMOTE */
 #else /* CONFIG_CTRL_IFACE_UDP_IPV6 */
 	struct sockaddr_in from;
 #endif /* CONFIG_CTRL_IFACE_UDP_IPV6 */
@@ -223,28 +219,6 @@ static void wpa_supplicant_ctrl_iface_receive(int sock, void *eloop_ctx,
 		return;
 	}
 
-#ifndef CONFIG_CTRL_IFACE_UDP_REMOTE
-#ifdef CONFIG_CTRL_IFACE_UDP_IPV6
-	inet_ntop(AF_INET6, &from.sin6_addr, addr, sizeof(from));
-	if (os_strcmp(addr, "::1")) {
-		wpa_printf(MSG_DEBUG, "CTRL: Drop packet from unexpected source %s",
-			   addr);
-	}
-#else /* CONFIG_CTRL_IFACE_UDP_IPV6 */
-	if (from.sin_addr.s_addr != htonl((127 << 24) | 1)) {
-		/*
-		 * The OS networking stack is expected to drop this kind of
-		 * frames since the socket is bound to only localhost address.
-		 * Just in case, drop the frame if it is coming from any other
-		 * address.
-		 */
-		wpa_printf(MSG_DEBUG, "CTRL: Drop packet from unexpected "
-			   "source %s", inet_ntoa(from.sin_addr));
-		return;
-	}
-#endif /* CONFIG_CTRL_IFACE_UDP_IPV6 */
-#endif /* CONFIG_CTRL_IFACE_UDP_REMOTE */
-
 	buf[res] = '\0';
 
 	if (os_strcmp(buf, "GET_COOKIE") == 0) {
@@ -441,13 +415,12 @@ static void wpa_supplicant_ctrl_iface_send(struct ctrl_iface_priv *priv,
 					   size_t len)
 {
 	struct wpa_ctrl_dst *dst, *next;
+	char host[NI_MAXHOST] = {0};
+	char service[NI_MAXSERV] = {0};
 	char levelstr[10];
 	int idx;
 	char *sbuf;
 	int llen;
-#ifdef CONFIG_CTRL_IFACE_UDP_IPV6
-	char addr[INET6_ADDRSTRLEN];
-#endif /* CONFIG_CTRL_IFACE_UDP_IPV6 */
 
 	dst = priv->ctrl_dst;
 	if (priv->sock < 0 || dst == NULL)
@@ -467,19 +440,17 @@ static void wpa_supplicant_ctrl_iface_send(struct ctrl_iface_priv *priv,
 	while (dst) {
 		next = dst->next;
 		if (level >= dst->debug_level) {
-#ifdef CONFIG_CTRL_IFACE_UDP_IPV6
-			wpa_printf(MSG_DEBUG, "CTRL_IFACE monitor send %s:%d",
-				   inet_ntop(AF_INET6, &dst->addr.sin6_addr,
-					     addr, sizeof(dst->addr)),
-				   ntohs(dst->addr.sin6_port));
-#else /* CONFIG_CTRL_IFACE_UDP_IPV6 */
-			wpa_printf(MSG_DEBUG, "CTRL_IFACE monitor send %s:%d",
-				   inet_ntoa(dst->addr.sin_addr),
-				   ntohs(dst->addr.sin_port));
-#endif /* CONFIG_CTRL_IFACE_UDP_IPV6 */
+			getnameinfo((struct sockaddr *) &dst->addr, dst->addrlen,
+				    host, sizeof(host),
+				    service, sizeof(service),
+				    NI_NUMERICHOST);
+
+			wpa_printf(MSG_DEBUG, "CTRL_IFACE monitor send %s:%s",
+				   host, service);
+
 			if (sendto(priv->sock, sbuf, llen + len, 0,
 				   (struct sockaddr *) &dst->addr,
-				   sizeof(dst->addr)) < 0) {
+				   dst->addrlen) < 0) {
 				wpa_printf(MSG_ERROR,
 					   "sendto(CTRL_IFACE monitor): %s",
 					   strerror(errno));
-- 
1.9.1



More information about the HostAP mailing list