diff --git a/daemon/remote.c b/daemon/remote.c index 3b6777a88..47f99e82f 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -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); } diff --git a/doc/Changelog b/doc/Changelog index a6c52be93..f495c7b66 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -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.