Fixed a bug in the initial loopback ifs patch.

Signed-off-by: Love Hornquist Astrand <lha@h5l.org>
This commit is contained in:
Nicolas Williams
2011-03-28 12:08:37 -05:00
committed by Love Hornquist Astrand
parent e7672a71aa
commit c5041352cb

View File

@@ -82,8 +82,8 @@ gethostname_fallback (krb5_context context, krb5_addresses *res)
} }
enum { enum {
LOOP = 1, /* do include loopback interfaces XXX remove */ LOOP = 1, /* do include loopback addrs */
LOOP_IF_NONE = 2, /* include loopback if no other if's */ LOOP_IF_NONE = 2, /* include loopback addrs if no others */
EXTRA_ADDRESSES = 4, /* include extra addresses */ EXTRA_ADDRESSES = 4, /* include extra addresses */
SCAN_INTERFACES = 8 /* scan interfaces for addresses */ SCAN_INTERFACES = 8 /* scan interfaces for addresses */
}; };
@@ -146,9 +146,7 @@ find_all_addresses (krb5_context context, krb5_addresses *res, int flags)
continue; continue;
if (krb5_sockaddr_uninteresting(ifa->ifa_addr)) if (krb5_sockaddr_uninteresting(ifa->ifa_addr))
continue; continue;
if (krb5_sockaddr_is_loopback(ifa->ifa_addr)) if (krb5_sockaddr_is_loopback(ifa->ifa_addr) && (flags & LOOP) == 0)
continue;
if ((ifa->ifa_flags & IFF_LOOPBACK) != 0 && (flags & LOOP) == 0)
/* We'll deal with the LOOP_IF_NONE case later. */ /* We'll deal with the LOOP_IF_NONE case later. */
continue; continue;
@@ -189,25 +187,22 @@ find_all_addresses (krb5_context context, krb5_addresses *res, int flags)
continue; continue;
if (krb5_sockaddr_uninteresting(ifa->ifa_addr)) if (krb5_sockaddr_uninteresting(ifa->ifa_addr))
continue; continue;
/* XXX Do we really want to allow loopback addresses here? */ if (!krb5_sockaddr_is_loopback(ifa->ifa_addr))
continue;
if ((ifa->ifa_flags & IFF_LOOPBACK) != 0) { if ((ifa->ifa_flags & IFF_LOOPBACK) == 0)
ret = krb5_sockaddr2address(context, /* Presumably loopback addrs are only used on loopback ifs! */
ifa->ifa_addr, &res->val[idx]); continue;
if (ret) { ret = krb5_sockaddr2address(context,
/* ifa->ifa_addr, &res->val[idx]);
* See comment above. if (ret)
*/ continue; /* We don't consider this failure fatal */
continue; if((flags & EXTRA_ADDRESSES) &&
} krb5_address_search(context, &res->val[idx],
if((flags & EXTRA_ADDRESSES) && &ignore_addresses)) {
krb5_address_search(context, &res->val[idx], krb5_free_address(context, &res->val[idx]);
&ignore_addresses)) { continue;
krb5_free_address(context, &res->val[idx]);
continue;
}
idx++;
} }
idx++;
} }
} }
@@ -270,7 +265,7 @@ get_addrs_int (krb5_context context, krb5_addresses *res, int flags)
KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_get_all_client_addrs (krb5_context context, krb5_addresses *res) krb5_get_all_client_addrs (krb5_context context, krb5_addresses *res)
{ {
int flags = LOOP | LOOP_IF_NONE | EXTRA_ADDRESSES; int flags = LOOP_IF_NONE | EXTRA_ADDRESSES;
if (context->scan_interfaces) if (context->scan_interfaces)
flags |= SCAN_INTERFACES; flags |= SCAN_INTERFACES;