mirror of https://github.com/hak5/openwrt.git
dnsmasq: write atomic host file
Different invocations of the dnsmasq init script (e.g. at startup by procd) will rewrite the dhcp host file which might result into dnsmasq reading an empty dhcp host file as it is being rewritten by the dnsmasq init script. Let the dnsmasq init script first write to a temp dhcp host file so it does not overwrite the contents of the existing dhcp host file. Reported-by: Hartmut Birr <e9hack@gmail.com> Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>openwrt-18.06
parent
94fcd92913
commit
a39ddff428
|
@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
|||
|
||||
PKG_NAME:=dnsmasq
|
||||
PKG_VERSION:=2.78
|
||||
PKG_RELEASE:=5
|
||||
PKG_RELEASE:=6
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||
PKG_SOURCE_URL:=http://thekelleys.org.uk/dnsmasq/
|
||||
|
|
|
@ -294,7 +294,7 @@ dhcp_host_add() {
|
|||
|
||||
config_get_bool dns "$cfg" dns 0
|
||||
[ "$dns" = "1" -a -n "$ip" -a -n "$name" ] && {
|
||||
echo "$ip $name${DOMAIN:+.$DOMAIN}" >> $HOSTFILE
|
||||
echo "$ip $name${DOMAIN:+.$DOMAIN}" >> $HOSTFILE_TMP
|
||||
}
|
||||
|
||||
config_get mac "$cfg" mac
|
||||
|
@ -635,7 +635,7 @@ dhcp_domain_add() {
|
|||
record="${record:+$record }$name"
|
||||
done
|
||||
|
||||
echo "$ip $record" >> $HOSTFILE
|
||||
echo "$ip $record" >> $HOSTFILE_TMP
|
||||
}
|
||||
|
||||
dhcp_srv_add() {
|
||||
|
@ -741,6 +741,7 @@ dnsmasq_start()
|
|||
CONFIGFILE="${BASECONFIGFILE}.${cfg}"
|
||||
CONFIGFILE_TMP="${CONFIGFILE}.$$"
|
||||
HOSTFILE="${BASEHOSTFILE}.${cfg}"
|
||||
HOSTFILE_TMP="${HOSTFILE}.$$"
|
||||
BASEDHCPSTAMPFILE_CFG="${BASEDHCPSTAMPFILE}.${cfg}"
|
||||
|
||||
# before we can call xappend
|
||||
|
@ -751,7 +752,7 @@ dnsmasq_start()
|
|||
chown dnsmasq:dnsmasq /var/run/dnsmasq
|
||||
|
||||
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_TMP
|
||||
|
||||
local dnsmasqconffile="/etc/dnsmasq.${cfg}.conf"
|
||||
if [ ! -r "$dnsmasqconffile" ]; then
|
||||
|
@ -998,6 +999,7 @@ dnsmasq_start()
|
|||
|
||||
echo >> $CONFIGFILE_TMP
|
||||
mv -f $CONFIGFILE_TMP $CONFIGFILE
|
||||
mv -f $HOSTFILE_TMP $HOSTFILE
|
||||
|
||||
[ "$resolvfile" = "/tmp/resolv.conf.auto" ] && {
|
||||
rm -f /tmp/resolv.conf
|
||||
|
|
Loading…
Reference in New Issue