diff options
author | nectar <nectar@FreeBSD.org> | 2002-02-19 15:46:56 +0000 |
---|---|---|
committer | nectar <nectar@FreeBSD.org> | 2002-02-19 15:46:56 +0000 |
commit | 69a91bec14ec3ad49d1c8a82c40a796755f9e4a3 (patch) | |
tree | 85ecf91fd00875cec4b93111d3a8ed9eec9cddfe /crypto/heimdal/lib/krb5/get_addrs.c | |
parent | 8db4cdb3da4228a5d93635e43825e2e8a2f66db7 (diff) | |
download | FreeBSD-src-69a91bec14ec3ad49d1c8a82c40a796755f9e4a3.zip FreeBSD-src-69a91bec14ec3ad49d1c8a82c40a796755f9e4a3.tar.gz |
Import of Heimdal Kerberos from KTH repository circa 2002/02/17.
Diffstat (limited to 'crypto/heimdal/lib/krb5/get_addrs.c')
-rw-r--r-- | crypto/heimdal/lib/krb5/get_addrs.c | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/crypto/heimdal/lib/krb5/get_addrs.c b/crypto/heimdal/lib/krb5/get_addrs.c index c05569f..0638fa4 100644 --- a/crypto/heimdal/lib/krb5/get_addrs.c +++ b/crypto/heimdal/lib/krb5/get_addrs.c @@ -33,7 +33,7 @@ #include "krb5_locl.h" -RCSID("$Id: get_addrs.c,v 1.41 2001/05/14 06:14:46 assar Exp $"); +RCSID("$Id: get_addrs.c,v 1.43 2001/07/03 18:43:57 assar Exp $"); #ifdef __osf__ /* hate */ @@ -102,6 +102,7 @@ find_all_addresses (krb5_context context, krb5_addresses *res, int flags) struct ifaddrs *ifa0, *ifa; krb5_error_code ret = ENXIO; int num, idx; + krb5_addresses ignore_addresses; res->val = NULL; @@ -123,9 +124,17 @@ find_all_addresses (krb5_context context, krb5_addresses *res, int flags) 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. */ res->val = calloc(num, sizeof(*res->val)); if (res->val == NULL) { + krb5_free_addresses(context, &ignore_addresses); freeifaddrs(ifa0); krb5_set_error_string (context, "malloc: out of memory"); return (ENOMEM); @@ -139,7 +148,6 @@ find_all_addresses (krb5_context context, krb5_addresses *res, int flags) continue; if (krb5_sockaddr_uninteresting(ifa->ifa_addr)) continue; - if ((ifa->ifa_flags & IFF_LOOPBACK) != 0) { /* We'll deal with the LOOP_IF_NONE case later. */ if ((flags & LOOP) == 0) @@ -156,6 +164,16 @@ find_all_addresses (krb5_context context, krb5_addresses *res, int flags) */ 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++; } @@ -181,11 +199,19 @@ find_all_addresses (krb5_context context, krb5_addresses *res, int flags) */ continue; } + if((flags & EXTRA_ADDRESSES) && + krb5_address_search(context, &res->val[idx], + &ignore_addresses)) { + krb5_free_address(context, &res->val[idx]); + continue; + } idx++; } } } + if (flags & EXTRA_ADDRESSES) + krb5_free_addresses(context, &ignore_addresses); freeifaddrs(ifa0); if (ret) free(res->val); @@ -207,8 +233,8 @@ get_addrs_int (krb5_context context, krb5_addresses *res, int flags) ret = 0; if(ret == 0 && (flags & EXTRA_ADDRESSES)) { - /* append user specified addresses */ krb5_addresses a; + /* append user specified addresses */ ret = krb5_get_extra_addresses(context, &a); if(ret) { 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); } + if(res->len == 0) { + free(res->val); + res->val = NULL; + } return ret; } |