--- samba/source/utils/net_dns.c.orig 2007-02-20 19:31:20.000000000 -0500 +++ samba/source/utils/net_dns.c 2009-09-05 02:01:06.000000000 -0400 @@ -134,29 +134,38 @@ /********************************************************************* *********************************************************************/ +static bool ip4_mask_match(struct in_addr ip, struct in_addr mask) +{ + return (ip.s_addr & mask.s_addr) == mask.s_addr; +} + int get_my_ip_address( struct in_addr **ips ) { - struct iface_struct nics[MAX_INTERFACES]; int i, n; - struct in_addr loopback_ip = *interpret_addr2("127.0.0.1"); + struct in_addr loopback_ip = *interpret_addr2("127.0.0.0"); struct in_addr *list; int count = 0; - + /* find the first non-loopback address from our list of interfaces */ - - n = get_interfaces(nics, MAX_INTERFACES); + + load_interfaces(); + n = iface_count(); if ( (list = SMB_MALLOC_ARRAY( struct in_addr, n )) == NULL ) { return -1; } - - for ( i=0; iip, loopback_ip)) { + /* Skip addresses that are in the loopback network. */ + continue; } + + memcpy(&list[count++], &iface->ip, sizeof(struct in_addr)); } + *ips = list; - return count; }