packages/net/bind/files/named.init
Philip Prindeville 9e4485b156 named: don't leak mktemp files on reload
Unless we're using "mktemp -u ..." (not recommended), it will
create the temp file as part of its safety checking.  Thus you
should only create the name (file) if you're going to use it,
and always remove it if you have created it.

Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
2022-03-15 15:20:15 -07:00

80 lines
1.9 KiB
Bash

#!/bin/sh /etc/rc.common
# Copyright (C) 2014 Noah Meyerhans <frodo@morgul.net>
# Licensed under the terms of the GNU General Public License version 2
# or (at your discretion) any later later version
USE_PROCD=1
START=22
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
logdir=/var/log/named/
cachedir=/var/cache/bind
libdir=/var/lib/bind
dyndir=/tmp/bind
conf_local_file=$dyndir/named.conf.local
fix_perms() {
for dir in $libdir $logdir $cachedir $dyndir; do
test -e "$dir" || {
mkdir -p "$dir"
chgrp bind "$dir"
chmod g+w "$dir"
}
done
}
reload_service() {
rndc -q reload
}
start_service() {
user_exists bind 57 || user_add bind 57
group_exists bind 57 || group_add bind 57
fix_perms
local runnamed=$(dirname $pid_file)
# with dropped privileges, we need this created for us
[ -d $runnamed ] || {
mkdir -m 0755 $runnamed
chown bind.bind $runnamed
}
local rndc_temp=$(mktemp /tmp/rndc-confgen.XXXXXX)
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
touch $conf_local_file
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 \
$conf_local_file \
$config_dir/db.*
procd_set_param respawn
procd_close_instance
}