mirror of https://github.com/hak5/openwrt.git
dnsmasq: write atomic config file
multiple invocation of dnsmasq script (e.g. by procd and hotplugd) might cause procd to restart dnsmasq with an incomplete config file. Config file generation might take quite a long time on larger configs due ubus calls for each listening interface... Signed-off-by: Ulrich Weber <ulrich.weber@riverbed.com>
parent
d9ff187003
commit
712b6fdc5c
|
@ -13,6 +13,7 @@ ADD_LOCAL_DOMAIN=1
|
||||||
ADD_LOCAL_HOSTNAME=1
|
ADD_LOCAL_HOSTNAME=1
|
||||||
|
|
||||||
CONFIGFILE="/var/etc/dnsmasq.conf"
|
CONFIGFILE="/var/etc/dnsmasq.conf"
|
||||||
|
CONFIGFILE_TMP="/var/etc/dnsmasq.conf.$$"
|
||||||
HOSTFILE="/tmp/hosts/dhcp"
|
HOSTFILE="/tmp/hosts/dhcp"
|
||||||
TRUSTANCHORSFILE="/usr/share/dnsmasq/trust-anchors.conf"
|
TRUSTANCHORSFILE="/usr/share/dnsmasq/trust-anchors.conf"
|
||||||
TIMESTAMPFILE="/etc/dnsmasq.time"
|
TIMESTAMPFILE="/etc/dnsmasq.time"
|
||||||
|
@ -21,7 +22,7 @@ TIMEVALIDFILE="/var/state/dnsmasqsec"
|
||||||
xappend() {
|
xappend() {
|
||||||
local value="$1"
|
local value="$1"
|
||||||
|
|
||||||
echo "${value#--}" >> $CONFIGFILE
|
echo "${value#--}" >> $CONFIGFILE_TMP
|
||||||
}
|
}
|
||||||
|
|
||||||
hex_to_hostid() {
|
hex_to_hostid() {
|
||||||
|
@ -255,7 +256,7 @@ dnsmasq() {
|
||||||
xappend "--user=dnsmasq"
|
xappend "--user=dnsmasq"
|
||||||
xappend "--group=dnsmasq"
|
xappend "--group=dnsmasq"
|
||||||
|
|
||||||
echo >> $CONFIGFILE
|
echo >> $CONFIGFILE_TMP
|
||||||
|
|
||||||
config_get_bool enable_tftp "$cfg" enable_tftp 0
|
config_get_bool enable_tftp "$cfg" enable_tftp 0
|
||||||
[ "$enable_tftp" -gt 0 ] && {
|
[ "$enable_tftp" -gt 0 ] && {
|
||||||
|
@ -635,7 +636,7 @@ start_service() {
|
||||||
|
|
||||||
[ -f "$TIMESTAMPFILE" ] && rm -f "$TIMESTAMPFILE"
|
[ -f "$TIMESTAMPFILE" ] && rm -f "$TIMESTAMPFILE"
|
||||||
|
|
||||||
echo "# auto-generated config file from /etc/config/dhcp" > $CONFIGFILE
|
echo "# auto-generated config file from /etc/config/dhcp" > $CONFIGFILE_TMP
|
||||||
echo "# auto-generated config file from /etc/config/dhcp" > $HOSTFILE
|
echo "# auto-generated config file from /etc/config/dhcp" > $HOSTFILE
|
||||||
|
|
||||||
# if we did this last, we could override auto-generated config
|
# if we did this last, we could override auto-generated config
|
||||||
|
@ -648,7 +649,7 @@ start_service() {
|
||||||
args=""
|
args=""
|
||||||
config_foreach dnsmasq dnsmasq
|
config_foreach dnsmasq dnsmasq
|
||||||
config_foreach dhcp_host_add host
|
config_foreach dhcp_host_add host
|
||||||
echo >> $CONFIGFILE
|
echo >> $CONFIGFILE_TMP
|
||||||
config_foreach dhcp_boot_add boot
|
config_foreach dhcp_boot_add boot
|
||||||
config_foreach dhcp_mac_add mac
|
config_foreach dhcp_mac_add mac
|
||||||
config_foreach dhcp_tag_add tag
|
config_foreach dhcp_tag_add tag
|
||||||
|
@ -682,19 +683,20 @@ start_service() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
echo >> $CONFIGFILE
|
echo >> $CONFIGFILE_TMP
|
||||||
config_foreach dhcp_srv_add srvhost
|
config_foreach dhcp_srv_add srvhost
|
||||||
config_foreach dhcp_mx_add mxhost
|
config_foreach dhcp_mx_add mxhost
|
||||||
echo >> $CONFIGFILE
|
echo >> $CONFIGFILE_TMP
|
||||||
|
|
||||||
config_get odhcpd_is_active odhcpd maindhcp
|
config_get odhcpd_is_active odhcpd maindhcp
|
||||||
if [ "$odhcpd_is_active" != "1" ]; then
|
if [ "$odhcpd_is_active" != "1" ]; then
|
||||||
config_foreach dhcp_add dhcp
|
config_foreach dhcp_add dhcp
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo >> $CONFIGFILE
|
echo >> $CONFIGFILE_TMP
|
||||||
config_foreach dhcp_cname_add cname
|
config_foreach dhcp_cname_add cname
|
||||||
echo >> $CONFIGFILE
|
echo >> $CONFIGFILE_TMP
|
||||||
|
mv -f $CONFIGFILE_TMP $CONFIGFILE
|
||||||
|
|
||||||
rm -f /tmp/resolv.conf
|
rm -f /tmp/resolv.conf
|
||||||
[ $ADD_LOCAL_DOMAIN -eq 1 ] && [ -n "$DOMAIN" ] && {
|
[ $ADD_LOCAL_DOMAIN -eq 1 ] && [ -n "$DOMAIN" ] && {
|
||||||
|
|
Loading…
Reference in New Issue