diff options
author | Cy Schubert <cy@FreeBSD.org> | 2018-04-03 19:36:00 +0000 |
---|---|---|
committer | Cy Schubert <cy@FreeBSD.org> | 2018-04-03 19:36:00 +0000 |
commit | b0e4d68d5124581ae353493d69bea352de4cff8a (patch) | |
tree | 43300ec43e83eccd367fd76fdfdefba2dcd7d8f4 /src/lib/krb5/os/localaddr.c | |
parent | 33a9b234e7087f573ef08cd7318c6497ba08b439 (diff) |
Notes
Diffstat (limited to 'src/lib/krb5/os/localaddr.c')
-rw-r--r-- | src/lib/krb5/os/localaddr.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/lib/krb5/os/localaddr.c b/src/lib/krb5/os/localaddr.c index 9f7765254467e..58443f6e354ad 100644 --- a/src/lib/krb5/os/localaddr.c +++ b/src/lib/krb5/os/localaddr.c @@ -181,11 +181,11 @@ is_loopback_address(struct sockaddr *sa) { switch (sa->sa_family) { case AF_INET: { - struct sockaddr_in *s4 = (struct sockaddr_in *)sa; + struct sockaddr_in *s4 = sa2sin(sa); return s4->sin_addr.s_addr == htonl(INADDR_LOOPBACK); } case AF_INET6: { - struct sockaddr_in6 *s6 = (struct sockaddr_in6 *)sa; + struct sockaddr_in6 *s6 = sa2sin6(sa); return IN6_IS_ADDR_LOOPBACK(&s6->sin6_addr); } default: @@ -239,16 +239,17 @@ printifaddr(struct ifaddrs *ifp) #include <stdlib.h> static int -addr_eq (const struct sockaddr *s1, const struct sockaddr *s2) +addr_eq (struct sockaddr *s1, struct sockaddr *s2) { if (s1->sa_family != s2->sa_family) return 0; -#define CMPTYPE(T,F) (!memcmp(&((const T*)s1)->F,&((const T*)s2)->F,sizeof(((const T*)s1)->F))) switch (s1->sa_family) { case AF_INET: - return CMPTYPE (struct sockaddr_in, sin_addr); + return !memcmp(&sa2sin(s1)->sin_addr, &sa2sin(s2)->sin_addr, + sizeof(sa2sin(s1)->sin_addr)); case AF_INET6: - return CMPTYPE (struct sockaddr_in6, sin6_addr); + return !memcmp(&sa2sin6(s1)->sin6_addr, &sa2sin6(s2)->sin6_addr, + sizeof(sa2sin6(s1)->sin6_addr)); default: /* Err on side of duplicate listings. */ return 0; @@ -861,6 +862,9 @@ get_ifreq_array(char **bufp, size_t *np, int s) int numifs = -1; #endif + *bufp = NULL; + *np = 0; + /* At least on NetBSD, an ifreq can hold an IPv4 address, but isn't big enough for an IPv6 or ethernet address. So add a little more space. */ @@ -937,9 +941,9 @@ foreach_localaddr (/*@null@*/ void *data, #endif { struct ifreq *ifr, ifreq, *ifr2; - int s, code; + int s; char *buf = 0; - size_t size, n, i, j; + size_t n, i, j; int retval = 0; #ifdef LINUX_IPV6_HACK struct linux_ipv6_addr_list *linux_ipv6_addrs = get_linux_ipv6_addrs (); @@ -1183,14 +1187,14 @@ add_addr (void *P_data, struct sockaddr *a) #ifdef HAVE_NETINET_IN_H case AF_INET: address = make_addr (ADDRTYPE_INET, sizeof (struct in_addr), - &((const struct sockaddr_in *) a)->sin_addr); + &sa2sin(a)->sin_addr); if (address == NULL) data->mem_err++; break; case AF_INET6: { - const struct sockaddr_in6 *in = (const struct sockaddr_in6 *) a; + const struct sockaddr_in6 *in = sa2sin6(a); if (IN6_IS_ADDR_LINKLOCAL (&in->sin6_addr)) break; |