changeset 135:bbb8ddba4c85

Filter out more invalid addresses
author Sebastien Decugis <sdecugis@nict.go.jp>
date Wed, 16 Dec 2009 14:44:56 +0900
parents 6b2989c066a6
children abd3c441780b
files freeDiameter/endpoints.c include/freeDiameter/libfreeDiameter.h
diffstat 2 files changed, 15 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/freeDiameter/endpoints.c	Tue Dec 15 18:15:41 2009 +0900
+++ b/freeDiameter/endpoints.c	Wed Dec 16 14:44:56 2009 +0900
@@ -51,15 +51,21 @@
 	TRACE_ENTRY("%p %p %u %x", list, sa, sl, flags);
 	CHECK_PARAMS( list && sa && (sl <= sizeof(sSS)) );
 	
-	/* Filter out loopback addresses */
+	/* Filter out loopback addresses, unspecified addresses, and invalid families */
 	ptr.sa = sa;
 	switch (sa->sa_family) {
 		case AF_INET:
-			if (IN_IS_ADDR_LOOPBACK(&ptr.sin->sin_addr))
+			if (IN_IS_ADDR_UNSPECIFIED(&ptr.sin->sin_addr) || IN_IS_ADDR_LOOPBACK(&ptr.sin->sin_addr))
 				return 0;
+			break;
+			
 		case AF_INET6:
-			if (IN6_IS_ADDR_LOOPBACK(&ptr.sin6->sin6_addr))
+			if (IN6_IS_ADDR_UNSPECIFIED(&ptr.sin6->sin6_addr) || IN6_IS_ADDR_LOOPBACK(&ptr.sin6->sin6_addr))
 				return 0;
+			break;
+			
+		default:
+			return 0;
 	}
 	
 	/* Search place in the list */
--- a/include/freeDiameter/libfreeDiameter.h	Tue Dec 15 18:15:41 2009 +0900
+++ b/include/freeDiameter/libfreeDiameter.h	Wed Dec 16 14:44:56 2009 +0900
@@ -400,6 +400,12 @@
   ((((long int) (a)->s_addr) & ntohl(0xff000000)) == ntohl(0x7f000000))
 #endif /* IN_IS_ADDR_LOOPBACK */
 
+/* An IP equivalent to IN6_IS_ADDR_UNSPECIFIED */
+#ifndef IN_IS_ADDR_UNSPECIFIED
+#define IN_IS_ADDR_UNSPECIFIED(a) \
+  (((long int) (a)->s_addr) == 0x00000000)
+#endif /* IN_IS_ADDR_UNSPECIFIED */
+
 
 /* create a V4MAPPED address */
 #define IN6_ADDR_V4MAP( a6, a4 ) {			\
"Welcome to our mercurial repository"