NTP_CONF=/etc/ntpsec/ntp.conf
NTP_DHCP_CONF_DIR=/run/ntpsec
NTP_DHCP_CONF=$NTP_DHCP_CONF_DIR/ntp.conf.dhcp
ntp_server_restart() {
if [ -r /etc/default/ntpsec ]; then
. /etc/default/ntpsec
fi
if [ "$IGNORE_DHCP" != "yes" ]; then
invoke-rc.d ntpsec try-restart
fi
}
ntp_servers_setup_remove() {
if [ ! -e "$NTP_DHCP_CONF" ]; then
return
fi
rm -f "$NTP_DHCP_CONF"
ntp_server_restart
}
ntp_servers_setup_add() {
# dhclient provides the old servers in $old_ntp_servers, but NetworkManager
# and networkd do not. Get the old list from the configuration file, if
# it is present.
old_ntp_servers=""
if [ -e "$NTP_DHCP_CONF" ]; then
old_ntp_servers=$(awk '/^server / {print $2}' "$NTP_DHCP_CONF")
fi
# $new_ntp_servers comes from dhclient.
# $DHCP4_NTP_SERVERS and $DHCP6_NTP_SERVERS come from NetworkManager.
new_ntp_servers=$(
for i in \
$new_ntp_servers \
$DHCP4_NTP_SERVERS $DHCP6_NTP_SERVERS \
$(sed -n 's/NTP=//p' /run/systemd/netif/leases/* 2>/dev/null)
do
echo $i
done)
# NOTE: By this point, both $old_ntp_servers and $new_ntp_servers are
# NOTE: newline-separated.
if [ "$new_ntp_servers" = "$old_ntp_servers" ]; then
return
fi
if [ -z "$new_ntp_servers" ]; then
ntp_servers_setup_remove
return
fi
mkdir -p "$NTP_DHCP_CONF_DIR"
tmp=$(mktemp "$NTP_DHCP_CONF.XXXXXX") || return
chmod --reference="$NTP_CONF" "$tmp"
chown --reference="$NTP_CONF" "$tmp"
(
echo "# This file was copied from $NTP_CONF with the server options changed"
echo "# to reflect the information sent by the DHCP server. Any changes made"
echo "# here will be lost at the next DHCP event. Edit $NTP_CONF instead."
echo
echo "# NTP server entries received from DHCP server"
for server in $new_ntp_servers; do
echo "server $server iburst"
done
echo
sed '/^[[:space:]]*\(server\|peer\|pool\|tos\)[[:space:]]/d' \
"$NTP_CONF"
) >> "$tmp"
mv "$tmp" "$NTP_DHCP_CONF"
ntp_server_restart
}
ntp_servers_setup() {
case $reason in
BOUND|RENEW|REBIND|REBOOT)
ntp_servers_setup_add
;;
EXPIRE|FAIL|RELEASE|STOP)
ntp_servers_setup_remove
;;
esac
}
ntp_servers_setup
|