r12577: filter the loopback addresses like this 127.*.*.* and not only 127.0.0.1
authorStefan Metzmacher <metze@samba.org>
Thu, 29 Dec 2005 16:58:35 +0000 (16:58 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:48:56 +0000 (13:48 -0500)
metze
(This used to be commit 3b32d8b6b6565d8c5b3f7e653fdc385cc8cb96ef)

source4/nbt_server/interfaces.c

index f607c070d86a0baa8e051c4ad04162790374f9f3..344d1b57d3f1866bac0d04ae2fdc44006493b6ed 100644 (file)
@@ -251,15 +251,22 @@ const char **nbtd_address_list(struct nbtd_interface *iface, TALLOC_CTX *mem_ctx
        struct nbtd_server *nbtsrv = iface->nbtsrv;
        const char **ret = NULL;
        struct nbtd_interface *iface2;
+       BOOL is_loopback = False;
 
        if (iface->ip_address) {
+               is_loopback = iface_same_net(iface->ip_address, "127.0.0.1", "255.0.0.0");
                ret = str_list_add(ret, iface->ip_address);
        }
 
        for (iface2=nbtsrv->interfaces;iface2;iface2=iface2->next) {
-               if (iface->ip_address &&
-                   strcmp(iface2->ip_address, iface->ip_address) == 0) {
-                       continue;
+               if (iface2 == iface) continue;
+
+               if (!iface2->ip_address) continue;
+
+               if (!is_loopback) {
+                       if (iface_same_net(iface2->ip_address, "127.0.0.1", "255.0.0.0")) {
+                               continue;
+                       }
                }
 
                ret = str_list_add(ret, iface2->ip_address);
@@ -267,15 +274,6 @@ const char **nbtd_address_list(struct nbtd_interface *iface, TALLOC_CTX *mem_ctx
 
        talloc_steal(mem_ctx, ret);
 
-       /* if the query didn't come from loopback, then never give out
-          loopback in the reply, as loopback means something
-          different for the recipient than for us */
-       if (ret != NULL && 
-           iface->ip_address != NULL &&
-           strcmp(iface->ip_address, "127.0.0.1") != 0) {
-               str_list_remove(ret, "127.0.0.1");
-       }
-
        return ret;
 }