aboutsummaryrefslogtreecommitdiff
path: root/contrib/unbound/iterator/iter_fwd.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/unbound/iterator/iter_fwd.c')
-rw-r--r--contrib/unbound/iterator/iter_fwd.c32
1 files changed, 21 insertions, 11 deletions
diff --git a/contrib/unbound/iterator/iter_fwd.c b/contrib/unbound/iterator/iter_fwd.c
index 5c104a0a3217..5d70c6664862 100644
--- a/contrib/unbound/iterator/iter_fwd.c
+++ b/contrib/unbound/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)