Mercurial > hg > freeDiameter
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;