(krb5_get_all_client_addrs): don't include loopback.

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@2704 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Assar Westerlund
1997-08-05 20:53:51 +00:00
parent ca44e29ff4
commit 9dd1a54675

View File

@@ -80,9 +80,16 @@ gethostname_fallback (krb5_addresses *res)
return 0; return 0;
} }
/*
*
* Try to figure out the addresses of all configured interfaces with a
* lot of magic ioctls.
* Include loopback (lo*) interfaces iff loop.
*/
#if defined(SIOCGIFCONF) && defined(SIOCGIFFLAGS) && defined(SIOCGIFADDR) #if defined(SIOCGIFCONF) && defined(SIOCGIFFLAGS) && defined(SIOCGIFADDR)
static krb5_error_code static krb5_error_code
find_all_addresses (krb5_addresses *res) find_all_addresses (krb5_addresses *res, int loop)
{ {
krb5_error_code err; krb5_error_code err;
int fd; int fd;
@@ -120,7 +127,8 @@ find_all_addresses (krb5_addresses *res)
if(ifr->ifr_addr.sa_len) if(ifr->ifr_addr.sa_len)
sz = sizeof(ifr->ifr_name) + ifr->ifr_addr.sa_len; sz = sizeof(ifr->ifr_name) + ifr->ifr_addr.sa_len;
#endif #endif
if(strncmp(ifreq.ifr_name, ifr->ifr_name, sizeof(ifr->ifr_name))) { if(strncmp(ifreq.ifr_name, ifr->ifr_name, sizeof(ifr->ifr_name))
&& (loop || strncmp (ifr->ifr_name, "lo", 2))) {
if(ioctl(fd, SIOCGIFFLAGS, ifr) < 0) { if(ioctl(fd, SIOCGIFFLAGS, ifr) < 0) {
close (fd); close (fd);
free (res->val); free (res->val);
@@ -201,6 +209,9 @@ find_all_addresses (krb5_addresses *res)
/* /*
* Try to get all addresses, but return the one corresponding to * Try to get all addresses, but return the one corresponding to
* `hostname' if we fail. * `hostname' if we fail.
*
* Don't include any loopback addresses (interfaces of name lo*).
*
*/ */
krb5_error_code krb5_error_code
@@ -209,12 +220,12 @@ krb5_get_all_client_addrs (krb5_addresses *res)
#if !defined(SIOCGIFCONF) || !defined(SIOCGIFFLAGS) || !defined(SIOCGIFADDR) #if !defined(SIOCGIFCONF) || !defined(SIOCGIFFLAGS) || !defined(SIOCGIFADDR)
return gethostname_fallback (res); return gethostname_fallback (res);
#else #else
return find_all_addresses (res); return find_all_addresses (res, 0);
#endif /* SIOCGIFCONF */ #endif /* SIOCGIFCONF */
} }
/* /*
* Same as above, but with the fall-back to INADDR_ANY. * XXX
*/ */
#if 0 #if 0