]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix #1238: segmentation fault when adding through the remote
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Wed, 22 Mar 2017 07:19:38 +0000 (07:19 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Wed, 22 Mar 2017 07:19:38 +0000 (07:19 +0000)
  interface a per-view local zone to a view with no previous
  (configured) local zones.

git-svn-id: file:///svn/unbound/trunk@4077 be551aaa-1e26-0410-a405-d3ace91eadb9

daemon/remote.c
doc/Changelog

index 3b6777a8805d86dc007be9ec19aaac8f19faeb76..47f99e82f67cd6e7f2ebdbd71e89cf8aee3a7c08 100644 (file)
@@ -1375,6 +1375,13 @@ do_view_zone_add(SSL* ssl, struct worker* worker, char* arg)
                ssl_printf(ssl,"no view with name: %s\n", arg);
                return;
        }
+       if(!v->local_zones) {
+               if(!(v->local_zones = local_zones_create())){
+                       lock_rw_unlock(&v->lock);
+                       ssl_printf(ssl,"error out of memory\n");
+                       return;
+               }
+       }
        do_zone_add(ssl, v->local_zones, arg2);
        lock_rw_unlock(&v->lock);
 }
@@ -1393,6 +1400,11 @@ do_view_zone_remove(SSL* ssl, struct worker* worker, char* arg)
                ssl_printf(ssl,"no view with name: %s\n", arg);
                return;
        }
+       if(!v->local_zones) {
+               lock_rw_unlock(&v->lock);
+               send_ok(ssl);
+               return;
+       }
        do_zone_remove(ssl, v->local_zones, arg2);
        lock_rw_unlock(&v->lock);
 }
@@ -1411,6 +1423,13 @@ do_view_data_add(SSL* ssl, struct worker* worker, char* arg)
                ssl_printf(ssl,"no view with name: %s\n", arg);
                return;
        }
+       if(!v->local_zones) {
+               if(!(v->local_zones = local_zones_create())){
+                       lock_rw_unlock(&v->lock);
+                       ssl_printf(ssl,"error out of memory\n");
+                       return;
+               }
+       }
        do_data_add(ssl, v->local_zones, arg2);
        lock_rw_unlock(&v->lock);
 }
@@ -1429,6 +1448,11 @@ do_view_data_remove(SSL* ssl, struct worker* worker, char* arg)
                ssl_printf(ssl,"no view with name: %s\n", arg);
                return;
        }
+       if(!v->local_zones) {
+               lock_rw_unlock(&v->lock);
+               send_ok(ssl);
+               return;
+       }
        do_data_remove(ssl, v->local_zones, arg2);
        lock_rw_unlock(&v->lock);
 }
@@ -2564,7 +2588,9 @@ do_view_list_local_zones(SSL* ssl, struct worker* worker, char* arg)
                ssl_printf(ssl,"no view with name: %s\n", arg);
                return;
        }
-       do_list_local_zones(ssl, v->local_zones);
+       if(v->local_zones) {
+               do_list_local_zones(ssl, v->local_zones);
+       }
        lock_rw_unlock(&v->lock);
 }
 
@@ -2578,7 +2604,9 @@ do_view_list_local_data(SSL* ssl, struct worker* worker, char* arg)
                ssl_printf(ssl,"no view with name: %s\n", arg);
                return;
        }
-       do_list_local_data(ssl, worker, v->local_zones);
+       if(v->local_zones) {
+               do_list_local_data(ssl, worker, v->local_zones);
+       }
        lock_rw_unlock(&v->lock);
 }
 
index a6c52be939d261c3b8ee27d823647b9d14ddd76d..f495c7b66f026ce5b22d6f54b5d20b60294ca7ed 100644 (file)
@@ -1,3 +1,8 @@
+22 March 2017: Wouter
+       - Fix #1238: segmentation fault when adding through the remote
+         interface a per-view local zone to a view with no previous
+         (configured) local zones.
+
 21 March 2017: Ralph
        - Merge EDNS Client subnet implementation from feature branch into main
          branch, using new EDNS processing framework.