]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix #1281: forward-zone "name: ." conflicts with auth-zone "name: ."
authorW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Fri, 9 May 2025 14:01:41 +0000 (16:01 +0200)
committerW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Fri, 9 May 2025 14:01:41 +0000 (16:01 +0200)
  in 1.23.0, but worked in 1.22.0.

doc/Changelog
iterator/iter_fwd.c

index e97eed9bf3dd01057da872918869d53fcc8e0f4b..fc293a5f3358648b18dd3d04201fc44f9a19aff7 100644 (file)
@@ -1,3 +1,7 @@
+9 May 2025: Wouter
+       - Fix #1281: forward-zone "name: ." conflicts with auth-zone "name: ."
+         in 1.23.0, but worked in 1.22.0.
+
 5 May 2025: Yorgos
        - Sync unbound and unbound-checkconf log output for unknown modules.
 
index 5c104a0a321775b22d702a39787719ad15120b73..5d70c6664862341b5e9d7d97f38c2876b3d38541 100644 (file)
@@ -139,6 +139,17 @@ forwards_insert_data(struct iter_forwards* fwd, uint16_t c, uint8_t* nm,
        return 1;
 }
 
+static struct iter_forward_zone*
+fwd_zone_find(struct iter_forwards* fwd, uint16_t c, uint8_t* nm)
+{
+       struct iter_forward_zone key;
+       key.node.key = &key;
+       key.dclass = c;
+       key.name = nm;
+       key.namelabs = dname_count_size_labels(nm, &key.namelen);
+       return (struct iter_forward_zone*)rbtree_search(fwd->tree, &key);
+}
+
 /** insert new info into forward structure given dp */
 static int
 forwards_insert(struct iter_forwards* fwd, uint16_t c, struct delegpt* dp)
@@ -321,6 +332,11 @@ make_stub_holes(struct iter_forwards* fwd, struct config_file* cfg)
                        log_err("cannot parse stub name '%s'", s->name);
                        return 0;
                }
+               if(fwd_zone_find(fwd, LDNS_RR_CLASS_IN, dname) != NULL) {
+                       /* Already a forward zone there. */
+                       free(dname);
+                       continue;
+               }
                if(!fwd_add_stub_hole(fwd, LDNS_RR_CLASS_IN, dname)) {
                        free(dname);
                        log_err("out of memory");
@@ -345,6 +361,11 @@ make_auth_holes(struct iter_forwards* fwd, struct config_file* cfg)
                        log_err("cannot parse auth name '%s'", a->name);
                        return 0;
                }
+               if(fwd_zone_find(fwd, LDNS_RR_CLASS_IN, dname) != NULL) {
+                       /* Already a forward zone there. */
+                       free(dname);
+                       continue;
+               }
                if(!fwd_add_stub_hole(fwd, LDNS_RR_CLASS_IN, dname)) {
                        free(dname);
                        log_err("out of memory");
@@ -537,17 +558,6 @@ forwards_get_mem(struct iter_forwards* fwd)
        return s;
 }
 
-static struct iter_forward_zone*
-fwd_zone_find(struct iter_forwards* fwd, uint16_t c, uint8_t* nm)
-{
-       struct iter_forward_zone key;
-       key.node.key = &key;
-       key.dclass = c;
-       key.name = nm;
-       key.namelabs = dname_count_size_labels(nm, &key.namelen);
-       return (struct iter_forward_zone*)rbtree_search(fwd->tree, &key);
-}
-
 int 
 forwards_add_zone(struct iter_forwards* fwd, uint16_t c, struct delegpt* dp,
        int nolock)