--- /tmp/etc/dhcp/dhclient-enter-hooks.d/resolved 2018-04-20 19:55:56.000000000 +0300 +++ /etc/dhcp/dhclient-enter-hooks.d/resolved 2018-05-11 13:39:59.513700826 +0300 @@ -28,29 +28,48 @@ fi statedir="/run/systemd/resolved.conf.d" mkdir -p $statedir + local updated + updated='' + local tmpi + tmpi=$(mktemp) if [ -n "$new_domain_name_servers" ] ; then - cat <$statedir/isc-dhcp-v4-$interface.conf + cat <$tmpi [Resolve] DNS=$new_domain_name_servers EOF if [ -n "$new_domain_name" ] || [ -n "$new_domain_search" ] ; then - cat <>$statedir/isc-dhcp-v4-$interface.conf + cat <>$tmpi Domains=$new_domain_search $new_domain_name EOF fi + local v4ic + v4ic=$statedir/isc-dhcp-v4-$interface.conf + if ! [ -f $v4ic ] || ! cmp $tmpi $v4ic + then cp -a $tmpi $v4ic + chmod +r $v4ic + updated=y + fi fi if [ -n "$new_dhcp6_name_servers" ] ; then - cat <$statedir/isc-dhcp-v6-$interface.conf + cat <$tmpi [Resolve] DNS=$new_dhcp6_name_servers EOF if [ -n "$new_dhcp6_domain_search" ] ; then - cat <>$statedir/isc-dhcp-v6-$interface.conf + cat <>$tmpi Domains=$new_dhcp6_domain_search EOF fi + local v6ic + v6ic=$statedir/isc-dhcp-v6-$interface.conf + if ! [ -f $v6ic ] || ! cmp $tmpi $v6ic + then cp -a $tmpi $v6ic + chmod +r $v6ic + updated=y + fi fi - systemctl try-reload-or-restart systemd-resolved.service + rm $tmpi + [ "$updated" ] && systemctl try-reload-or-restart systemd-resolved.service } ;; @@ -58,15 +77,23 @@ if [ ! "$interface" ] ; then return fi - rm -f /run/systemd/resolved.conf.d/isc-dhcp-v4-$interface.conf - systemctl try-reload-or-restart systemd-resolved.service + local v4ic + v4ic=/run/systemd/resolved.conf.d/isc-dhcp-v4-$interface.conf + if [ -f $v4ic ] + then rm -f $v4ic + systemctl try-reload-or-restart systemd-resolved.service + fi ;; EXPIRE6|RELEASE6|STOP6) if [ ! "$interface" ] ; then return fi - rm -f /run/systemd/resolved.conf.d/isc-dhcp-v6-$interface.conf - systemctl try-reload-or-restart systemd-resolved.service + local v6ic + v6ic=/run/systemd/resolved.conf.d/isc-dhcp-v6-$interface.conf + if [ -f $v6ic ] + then rm -f $v6ic + systemctl try-reload-or-restart systemd-resolved.service + fi ;; esac fi