From 31a256f0ab801569bb26f9ba2edb4baefbfd1e34 Mon Sep 17 00:00:00 2001 From: Philip Prindeville Date: Wed, 9 Dec 2020 12:26:42 -0700 Subject: [PATCH] bind: add support for the 'rndc' utility Enable the control port on named that rncd uses to talk to it. Use rndc to allow for lightweight reloads of some (per-zone) or all of the database without an interruption of service. Signed-off-by: Philip Prindeville --- net/bind/Makefile | 2 +- net/bind/files/bind/named.conf.example | 2 ++ net/bind/files/named.init | 31 ++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/net/bind/Makefile b/net/bind/Makefile index 7470fcb6e..31d66be38 100644 --- a/net/bind/Makefile +++ b/net/bind/Makefile @@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=bind PKG_VERSION:=9.16.8 -PKG_RELEASE:=1 +PKG_RELEASE:=2 USERID:=bind=57:bind=57 PKG_MAINTAINER:=Noah Meyerhans diff --git a/net/bind/files/bind/named.conf.example b/net/bind/files/bind/named.conf.example index 162454955..0f2626919 100644 --- a/net/bind/files/bind/named.conf.example +++ b/net/bind/files/bind/named.conf.example @@ -15,6 +15,8 @@ options { auth-nxdomain no; # conform to RFC1035 }; +include "/etc/bind/named-rndc.conf"; + // prime the server with knowledge of the root servers zone "." { type hint; diff --git a/net/bind/files/named.init b/net/bind/files/named.init index b7876d9e1..db505e31c 100644 --- a/net/bind/files/named.init +++ b/net/bind/files/named.init @@ -8,7 +8,11 @@ USE_PROCD=1 START=50 config_file=/etc/bind/named.conf +config_dir=$(dirname $config_file) +named_options_file=/etc/bind/named-rndc.conf +rndc_conf_file=/etc/bind/rndc.conf pid_file=/var/run/named/named.pid +rndc_temp=$(mktemp /tmp/rndc-confgen.XXXXXX) logdir=/var/log/named/ cachedir=/var/cache/bind @@ -24,12 +28,39 @@ fix_perms() { done } +reload_service() { + rndc reload +} + start_service() { user_exists bind 57 || user_add bind 57 group_exists bind 57 || group_add bind 57 fix_perms + + rndc-confgen > $rndc_temp + + sed -r -n \ + -e '/^# options \{$/,/^\};$/{ s/^/# / }' \ + -e p \ + -e '/^# End of rndc\.conf$/q' \ + < $rndc_temp > $rndc_conf_file + + sed -r -n \ + -e '1,/^# End of rndc\.conf$/ { b done }' \ + -e '/^# Use with the following in named.conf/ { p ; b done }' \ + -e '/^# End of named\.conf$/ { p ; b done }' \ + -e '/^# key /,$ { s/^# // ; p }' \ + -e ': done' \ + < $rndc_temp > $named_options_file + + rm -f $rndc_temp + procd_open_instance procd_set_param command /usr/sbin/named -u bind -f -c $config_file + procd_set_param file $config_file \ + $config_dir/bind.keys \ + $named_options_file \ + $config_dir/db.* procd_set_param respawn procd_close_instance }