changeset 133:5a21124536b4

Fix: remove loopback addresses from lists
author Sebastien Decugis <sdecugis@nict.go.jp>
date Thu, 10 Dec 2009 18:51:47 +0900
parents 4e49c086d2c4
children 6b2989c066a6
files freeDiameter/endpoints.c
diffstat 1 files changed, 16 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/freeDiameter/endpoints.c	Thu Dec 10 18:33:19 2009 +0900
+++ b/freeDiameter/endpoints.c	Thu Dec 10 18:51:47 2009 +0900
@@ -41,11 +41,27 @@
 {
 	struct fd_endpoint * ep;
 	struct fd_list * li;
+	union {
+		sSA * sa;
+		sSA4 *sin;
+		sSA6 *sin6;
+	} ptr;
 	int cmp = -1;
 	
 	TRACE_ENTRY("%p %p %u %x", list, sa, sl, flags);
 	CHECK_PARAMS( list && sa && (sl <= sizeof(sSS)) );
 	
+	/* Filter out loopback addresses */
+	ptr.sa = sa;
+	switch (sa->sa_family) {
+		case AF_INET:
+			if (ptr.sin->sin_addr.s_addr == INADDR_LOOPBACK)
+				return 0;
+		case AF_INET6:
+			if (!memcmp(&ptr.sin6->sin6_addr, &in6addr_loopback, sizeof(struct in6_addr)))
+				return 0;
+	}
+	
 	/* Search place in the list */
 	for (li = list->next; li != list; li = li->next) {
 		ep = (struct fd_endpoint *)li;
"Welcome to our mercurial repository"