[krbdev.mit.edu #6017] KDC virtual address support
Alexandra Ellwood via RT
rt-comment at krbdev.mit.edu
Mon Jul 7 16:01:44 EDT 2008
=== Kerberos/KerberosFramework/Kerberos5/Sources/lib/krb5/os/localaddr.c
==================================================================
--- Kerberos/KerberosFramework/Kerberos5/Sources/lib/krb5/os/localaddr.c (revision 559)
+++ Kerberos/KerberosFramework/Kerberos5/Sources/lib/krb5/os/localaddr.c (local)
@@ -415,6 +415,23 @@
#ifdef HAVE_IFADDRS_H
+static int
+is_loopback_address(struct sockaddr *sa)
+{
+ switch (sa->sa_family) {
+ case AF_INET: {
+ struct sockaddr_in *s4 = (struct sockaddr_in *)sa;
+ return s4->sin_addr.s_addr == htonl(INADDR_LOOPBACK);
+ }
+ case AF_INET6: {
+ struct sockaddr_in6 *s6 = (struct sockaddr_in6 *)sa;
+ return IN6_IS_ADDR_LOOPBACK(&s6->sin6_addr);
+ }
+ default:
+ return 0;
+ }
+}
+
int
foreach_localaddr (/*@null@*/ void *data,
int (*pass1fn) (/*@null@*/ void *, struct sockaddr *) /*@*/,
@@ -436,7 +453,7 @@
#endif
if ((ifp->ifa_flags & IFF_UP) == 0)
continue;
- if (ifp->ifa_flags & IFF_LOOPBACK) {
+ if (is_loopback_address(ifp->ifa_addr)) {
/* Pretend it's not up, so the second pass will skip
it. */
ifp->ifa_flags &= ~IFF_UP;
@@ -459,7 +476,7 @@
for (ifp2 = ifp_head; ifp2 && ifp2 != ifp; ifp2 = ifp2->ifa_next) {
if ((ifp2->ifa_flags & IFF_UP) == 0)
continue;
- if (ifp2->ifa_flags & IFF_LOOPBACK)
+ if (is_loopback_address(ifp2->ifa_addr))
continue;
if (addr_eq (ifp->ifa_addr, ifp2->ifa_addr)) {
match = 1;
More information about the krb5-bugs
mailing list