s4-rpc: dnsserver: Ignore duplicate dns zones from multiple locations
authorAmitay Isaacs <amitay@gmail.com>
Fri, 4 Oct 2013 06:10:31 +0000 (16:10 +1000)
committerAmitay Isaacs <amitay@samba.org>
Sat, 30 Nov 2013 05:15:51 +0000 (06:15 +0100)
Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Kai Blin <kai@samba.org>
Autobuild-User(master): Amitay Isaacs <amitay@samba.org>
Autobuild-Date(master): Sat Nov 30 06:15:52 CET 2013 on sn-devel-104

source4/rpc_server/dnsserver/dcerpc_dnsserver.c

index 5733a51177ae3a824272198880ce6abaa1285ba2..f3dd1957afb52010684830785e16822726344714 100644 (file)
@@ -142,13 +142,19 @@ static struct dnsserver_state *dnsserver_connect(struct dcesrv_call_state *dce_c
                }
                for (z = zones; z; ) {
                        znext = z->next;
-                       z->zoneinfo = dnsserver_init_zoneinfo(z, dsstate->serverinfo);
-                       if (z->zoneinfo == NULL) {
-                               goto failed;
+                       if (dnsserver_find_zone(dsstate->zones, z->name) == NULL) {
+                               z->zoneinfo = dnsserver_init_zoneinfo(z, dsstate->serverinfo);
+                               if (z->zoneinfo == NULL) {
+                                       goto failed;
+                               }
+                               DLIST_ADD_END(dsstate->zones, z, NULL);
+                               p->zones_count++;
+                               dsstate->zones_count++;
+                       } else {
+                               /* Ignore duplicate zone */
+                               DEBUG(3,("dnsserver: Ignoring duplicate zone '%s' from '%s'",
+                                        z->name, ldb_dn_get_linearized(z->zone_dn)));
                        }
-                       DLIST_ADD_END(dsstate->zones, z, NULL);
-                       p->zones_count++;
-                       dsstate->zones_count++;
                        z = znext;
                }
        }