diff options
-rw-r--r-- | source3/lib/interface.c | 7 | ||||
-rw-r--r-- | source3/nmbd/nmbd_become_dmb.c | 3 | ||||
-rw-r--r-- | source3/nmbd/nmbd_subnetdb.c | 3 |
3 files changed, 9 insertions, 4 deletions
diff --git a/source3/lib/interface.c b/source3/lib/interface.c index 48fa4d32a9..b32ccb9c56 100644 --- a/source3/lib/interface.c +++ b/source3/lib/interface.c @@ -151,7 +151,8 @@ int iface_count_v4_nl(void) } /**************************************************************************** - Return a pointer to the in_addr of the first IPv4 interface. + Return a pointer to the in_addr of the first IPv4 interface that's + not 0.0.0.0. **************************************************************************/ const struct in_addr *first_ipv4_iface(void) @@ -159,7 +160,9 @@ const struct in_addr *first_ipv4_iface(void) struct interface *i; for (i=local_interfaces;i ;i=i->next) { - if (i->ip.ss_family == AF_INET) { + if ((i->ip.ss_family == AF_INET) && + (!is_zero_ip_v4(((struct sockaddr_in *)&i->ip)->sin_addr))) + { break; } } diff --git a/source3/nmbd/nmbd_become_dmb.c b/source3/nmbd/nmbd_become_dmb.c index a0b2ef15f8..827d56cb06 100644 --- a/source3/nmbd/nmbd_become_dmb.c +++ b/source3/nmbd/nmbd_become_dmb.c @@ -128,7 +128,8 @@ in workgroup %s on subnet %s\n", work->dmb_name = nmbname; - /* Pick the first interface IPv4 address as the domain master browser ip. */ + /* Pick the first interface IPv4 address as the domain master + * browser ip. */ nip = first_ipv4_iface(); if (!nip) { DEBUG(0,("become_domain_master_stage2: " diff --git a/source3/nmbd/nmbd_subnetdb.c b/source3/nmbd/nmbd_subnetdb.c index 61af0bb4a4..13bc931863 100644 --- a/source3/nmbd/nmbd_subnetdb.c +++ b/source3/nmbd/nmbd_subnetdb.c @@ -287,7 +287,8 @@ bool create_subnets(void) } if (lp_we_are_a_wins_server()) { - /* Pick the first interface IPv4 address as the WINS server ip. */ + /* Pick the first interface IPv4 address as the WINS server + * ip. */ const struct in_addr *nip = first_ipv4_iface(); if (!nip) { |