]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- fix #544: Fixed +i causes segfault when running with module conf "iterator".
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Thu, 16 Jan 2014 13:04:34 +0000 (13:04 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Thu, 16 Jan 2014 13:04:34 +0000 (13:04 +0000)
git-svn-id: file:///svn/unbound/trunk@3038 be551aaa-1e26-0410-a405-d3ace91eadb9

daemon/remote.c
doc/Changelog
validator/val_anchor.c

index 404ff5f38bcdcd8c03086e7fe9816277a2a52fe5..ffb0a24e5eb8988837e77633bd0e5e6a4c3ec336 100644 (file)
@@ -1576,7 +1576,7 @@ do_forward_add(SSL* ssl, struct worker* worker, char* args)
        struct delegpt* dp = NULL;
        if(!parse_fs_args(ssl, args, &nm, &dp, &insecure, NULL))
                return;
-       if(insecure) {
+       if(insecure && worker->env.anchors) {
                if(!anchors_add_insecure(worker->env.anchors, LDNS_RR_CLASS_IN,
                        nm)) {
                        (void)ssl_printf(ssl, "error out of memory\n");
@@ -1603,7 +1603,7 @@ do_forward_remove(SSL* ssl, struct worker* worker, char* args)
        uint8_t* nm = NULL;
        if(!parse_fs_args(ssl, args, &nm, NULL, &insecure, NULL))
                return;
-       if(insecure)
+       if(insecure && worker->env.anchors)
                anchors_delete_insecure(worker->env.anchors, LDNS_RR_CLASS_IN,
                        nm);
        forwards_delete_zone(fwd, LDNS_RR_CLASS_IN, nm);
@@ -1621,7 +1621,7 @@ do_stub_add(SSL* ssl, struct worker* worker, char* args)
        struct delegpt* dp = NULL;
        if(!parse_fs_args(ssl, args, &nm, &dp, &insecure, &prime))
                return;
-       if(insecure) {
+       if(insecure && worker->env.anchors) {
                if(!anchors_add_insecure(worker->env.anchors, LDNS_RR_CLASS_IN,
                        nm)) {
                        (void)ssl_printf(ssl, "error out of memory\n");
@@ -1631,8 +1631,9 @@ do_stub_add(SSL* ssl, struct worker* worker, char* args)
                }
        }
        if(!forwards_add_stub_hole(fwd, LDNS_RR_CLASS_IN, nm)) {
-               if(insecure) anchors_delete_insecure(worker->env.anchors,
-                       LDNS_RR_CLASS_IN, nm);
+               if(insecure && worker->env.anchors)
+                       anchors_delete_insecure(worker->env.anchors,
+                               LDNS_RR_CLASS_IN, nm);
                (void)ssl_printf(ssl, "error out of memory\n");
                delegpt_free_mlc(dp);
                free(nm);
@@ -1641,8 +1642,9 @@ do_stub_add(SSL* ssl, struct worker* worker, char* args)
        if(!hints_add_stub(worker->env.hints, LDNS_RR_CLASS_IN, dp, !prime)) {
                (void)ssl_printf(ssl, "error out of memory\n");
                forwards_delete_stub_hole(fwd, LDNS_RR_CLASS_IN, nm);
-               if(insecure) anchors_delete_insecure(worker->env.anchors,
-                       LDNS_RR_CLASS_IN, nm);
+               if(insecure && worker->env.anchors)
+                       anchors_delete_insecure(worker->env.anchors,
+                               LDNS_RR_CLASS_IN, nm);
                free(nm);
                return;
        }
@@ -1659,7 +1661,7 @@ do_stub_remove(SSL* ssl, struct worker* worker, char* args)
        uint8_t* nm = NULL;
        if(!parse_fs_args(ssl, args, &nm, NULL, &insecure, NULL))
                return;
-       if(insecure)
+       if(insecure && worker->env.anchors)
                anchors_delete_insecure(worker->env.anchors, LDNS_RR_CLASS_IN,
                        nm);
        forwards_delete_stub_hole(fwd, LDNS_RR_CLASS_IN, nm);
@@ -1677,10 +1679,13 @@ do_insecure_add(SSL* ssl, struct worker* worker, char* arg)
        uint8_t* nm = NULL;
        if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs))
                return;
-       if(!anchors_add_insecure(worker->env.anchors, LDNS_RR_CLASS_IN, nm)) {
-               (void)ssl_printf(ssl, "error out of memory\n");
-               free(nm);
-               return;
+       if(worker->env.anchors) {
+               if(!anchors_add_insecure(worker->env.anchors,
+                       LDNS_RR_CLASS_IN, nm)) {
+                       (void)ssl_printf(ssl, "error out of memory\n");
+                       free(nm);
+                       return;
+               }
        }
        free(nm);
        send_ok(ssl);
@@ -1695,7 +1700,9 @@ do_insecure_remove(SSL* ssl, struct worker* worker, char* arg)
        uint8_t* nm = NULL;
        if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs))
                return;
-       anchors_delete_insecure(worker->env.anchors, LDNS_RR_CLASS_IN, nm);
+       if(worker->env.anchors)
+               anchors_delete_insecure(worker->env.anchors,
+                       LDNS_RR_CLASS_IN, nm);
        free(nm);
        send_ok(ssl);
 }
index 5a6f618542ddbb0986251927fe03d75179282be6..de6ca0c27ba6570deb399e8f07e224328e3877de 100644 (file)
@@ -1,3 +1,7 @@
+16 January 2014: Wouter
+       - fix #544: Fixed +i causes segfault when running with module conf
+         "iterator".
+
 14 January 2014: Wouter
        - iana portlist updated.
 
index a3cb1b5784d338506c28536737b3ea47a89f8c54..3142071b887a20c8adcbf45fbbe69597de1d85e0 100644 (file)
@@ -1184,6 +1184,8 @@ anchors_get_mem(struct val_anchors* anchors)
 {
        struct trust_anchor *ta;
        size_t s = sizeof(*anchors);
+       if(!anchors)
+               return 0;
        RBTREE_FOR(ta, struct trust_anchor*, anchors->tree) {
                s += sizeof(*ta) + ta->namelen;
                /* keys and so on */