From: W.C.A. Wijngaards Date: Fri, 9 May 2025 14:01:41 +0000 (+0200) Subject: - Fix #1281: forward-zone "name: ." conflicts with auth-zone "name: ." X-Git-Tag: release-1.24.0rc1~100 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8190526250c6d8bca271f3f84f74bb9f789b0a37;p=thirdparty%2Funbound.git - Fix #1281: forward-zone "name: ." conflicts with auth-zone "name: ." in 1.23.0, but worked in 1.22.0. --- diff --git a/doc/Changelog b/doc/Changelog index e97eed9bf..fc293a5f3 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -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. diff --git a/iterator/iter_fwd.c b/iterator/iter_fwd.c index 5c104a0a3..5d70c6664 100644 --- a/iterator/iter_fwd.c +++ b/iterator/iter_fwd.c @@ -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)