Latest NetworkManager code provides NTP servers from the DHCPv6 NTP option (RFC 5908) in the DHCP6_DHCP6_NTP_SERVERS variable to dispatcher scripts. Check for invalid characters (which can come from the FQDN suboption) and include the servers in the interface-specific sources file.
45 lines
1.2 KiB
Bash
45 lines
1.2 KiB
Bash
#!/bin/sh
|
|
# This is a NetworkManager dispatcher script for chronyd to update
|
|
# its NTP sources with servers from DHCP options passed by NetworkManager
|
|
# in the DHCP4_NTP_SERVERS and DHCP6_DHCP6_NTP_SERVERS environment variables.
|
|
|
|
export LC_ALL=C
|
|
|
|
interface=$1
|
|
action=$2
|
|
|
|
chronyc=/usr/bin/chronyc
|
|
server_options=iburst
|
|
server_dir=/var/run/chrony-dhcp
|
|
|
|
dhcp_server_file=$server_dir/$interface.sources
|
|
dhcp_ntp_servers="$DHCP4_NTP_SERVERS $DHCP6_DHCP6_NTP_SERVERS"
|
|
|
|
add_servers_from_dhcp() {
|
|
rm -f "$dhcp_server_file"
|
|
for server in $dhcp_ntp_servers; do
|
|
# Check for invalid characters (from the DHCPv6 NTP FQDN suboption)
|
|
printf '%s\n' "$server" | grep -E -q '^[-A-Za-z0-9:.]{1,255}$' || continue
|
|
|
|
printf 'server %s %s\n' "$server" "$server_options" >> "$dhcp_server_file"
|
|
done
|
|
$chronyc reload sources > /dev/null 2>&1 || :
|
|
}
|
|
|
|
clear_servers_from_dhcp() {
|
|
if [ -f "$dhcp_server_file" ]; then
|
|
rm -f "$dhcp_server_file"
|
|
$chronyc reload sources > /dev/null 2>&1 || :
|
|
fi
|
|
}
|
|
|
|
mkdir -p $server_dir
|
|
|
|
case "$action" in
|
|
up|dhcp4-change|dhcp6-change)
|
|
add_servers_from_dhcp;;
|
|
down)
|
|
clear_servers_from_dhcp;;
|
|
esac
|
|
|
|
exit 0
|