don't include client addresses that match ignore_addresses

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@10239 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Johan Danielsson
2001-07-02 22:28:09 +00:00
parent b8310059d5
commit 73326d079c

View File

@@ -102,6 +102,7 @@ find_all_addresses (krb5_context context, krb5_addresses *res, int flags)
struct ifaddrs *ifa0, *ifa; struct ifaddrs *ifa0, *ifa;
krb5_error_code ret = ENXIO; krb5_error_code ret = ENXIO;
int num, idx; int num, idx;
krb5_addresses ignore_addresses;
res->val = NULL; res->val = NULL;
@@ -123,9 +124,17 @@ find_all_addresses (krb5_context context, krb5_addresses *res, int flags)
return (ENXIO); return (ENXIO);
} }
if (flags & EXTRA_ADDRESSES) {
/* we'll remove the addresses we don't care about */
ret = krb5_get_ignore_addresses(context, &ignore_addresses);
if(ret)
return ret;
}
/* Allocate storage for them. */ /* Allocate storage for them. */
res->val = calloc(num, sizeof(*res->val)); res->val = calloc(num, sizeof(*res->val));
if (res->val == NULL) { if (res->val == NULL) {
krb5_free_addresses(context, ignore_addresses);
freeifaddrs(ifa0); freeifaddrs(ifa0);
krb5_set_error_string (context, "malloc: out of memory"); krb5_set_error_string (context, "malloc: out of memory");
return (ENOMEM); return (ENOMEM);
@@ -139,7 +148,6 @@ 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 ((ifa->ifa_flags & IFF_LOOPBACK) != 0) { if ((ifa->ifa_flags & IFF_LOOPBACK) != 0) {
/* We'll deal with the LOOP_IF_NONE case later. */ /* We'll deal with the LOOP_IF_NONE case later. */
if ((flags & LOOP) == 0) if ((flags & LOOP) == 0)
@@ -156,6 +164,16 @@ find_all_addresses (krb5_context context, krb5_addresses *res, int flags)
*/ */
continue; continue;
} }
/* possibly skip this address? */
if((flags & EXTRA_ADDRESSES) &&
krb5_address_search(context, &res->val[idx], &ignore_addresses)) {
krb5_free_address(context, &res->val[idx]);
flags &= ~LOOP_IF_NONE; /* we actually found an address,
so don't add any loop-back
addresses */
continue;
}
idx++; idx++;
} }
@@ -181,11 +199,19 @@ find_all_addresses (krb5_context context, krb5_addresses *res, int flags)
*/ */
continue; continue;
} }
if((flags & EXTRA_ADDRESSES) &&
krb5_address_search(context, &res->val[idx],
&ignore_addresses)) {
krb5_free_address(context, &res->val[idx]);
continue;
}
idx++; idx++;
} }
} }
} }
if (flags & EXTRA_ADDRESSES)
krb5_free_addresses(context, ignore_addresses);
freeifaddrs(ifa0); freeifaddrs(ifa0);
if (ret) if (ret)
free(res->val); free(res->val);
@@ -207,8 +233,8 @@ get_addrs_int (krb5_context context, krb5_addresses *res, int flags)
ret = 0; ret = 0;
if(ret == 0 && (flags & EXTRA_ADDRESSES)) { if(ret == 0 && (flags & EXTRA_ADDRESSES)) {
/* append user specified addresses */
krb5_addresses a; krb5_addresses a;
/* append user specified addresses */
ret = krb5_get_extra_addresses(context, &a); ret = krb5_get_extra_addresses(context, &a);
if(ret) { if(ret) {
krb5_free_addresses(context, res); krb5_free_addresses(context, res);
@@ -221,6 +247,10 @@ get_addrs_int (krb5_context context, krb5_addresses *res, int flags)
} }
krb5_free_addresses(context, &a); krb5_free_addresses(context, &a);
} }
if(res->len == 0) {
free(res->val);
res->val = NULL;
}
return ret; return ret;
} }