net_dns: Make "lwinet ads dns register" honor the "interfaces" parameter.
authorGerald (Jerry) Carter <jerry@samba.org>
Fri, 3 Oct 2008 15:51:54 +0000 (10:51 -0500)
committerGerald (Jerry) Carter <jerry@samba.org>
Fri, 3 Oct 2008 15:51:54 +0000 (10:51 -0500)
This is helpful on multihomed hosts that only require a subset
of IP addresses be registered with DNS.

source3/utils/net_dns.c

index 14d45e2b0fcf4b9a6596fa55cf7ce065a88f3e39..46f38d42f66012d61d24e23c90c22da3f2c35989 100644 (file)
@@ -150,9 +150,10 @@ int get_my_ip_address( struct sockaddr_storage **pp_ss )
        struct sockaddr_storage *list = NULL;
        int count = 0;
 
-       /* find the first non-loopback address from our list of interfaces */
+       /* Honor the configured list of interfaces to register */
 
-       n = get_interfaces(nics, MAX_INTERFACES);
+       load_interfaces();
+       n = iface_count();
 
        if (n <= 0) {
                return -1;
@@ -163,19 +164,17 @@ int get_my_ip_address( struct sockaddr_storage **pp_ss )
        }
 
        for ( i=0; i<n; i++ ) {
-               if (is_loopback_addr(&nics[i].ip)) {
+               const struct sockaddr_storage *nic_sa_storage = NULL;
+
+               if ((nic_sa_storage = iface_n_sockaddr_storage(i)) == NULL)
+                       continue;
+
+               /* Don't register loopback addresses */
+               if (is_loopback_addr(nic_sa_storage)) {
                        continue;
                }
-#if defined(HAVE_IPV6)
-               if ((nics[i].ip.ss_family == AF_INET6)) {
-                       memcpy(&list[count++], &nics[i].ip,
-                              sizeof(struct sockaddr_storage));
-               } else
-#endif
-               if (nics[i].ip.ss_family == AF_INET) {
-                       memcpy(&list[count++], &nics[i].ip,
-                              sizeof(struct sockaddr_storage));
-               }
+
+               memcpy(&list[count++], nic_sa_storage, sizeof(struct sockaddr_storage));
        }
        *pp_ss = list;