packages/net/ntpd/files/ntpd.init
Sebastian Kemper 18335dc424 ntpd: create config_file directory
ntpd's configuration is stored in /var/etc, but the init script doesn't
create this directory. To be fair this folder is used by other packages
as well, for instance dnsmasq. Still, it's better not to rely on other
packages to create it.

Fixes: #10636

Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
2019-11-28 22:27:03 +01:00

98 lines
2 KiB
Bash

#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2011 OpenWrt.org
START=65
STOP=65
USE_PROCD=1
PROG=/sbin/ntpd
HOTPLUG_HELPER=/usr/sbin/ntpd.hotplug-helper
config_file=/var/etc/ntpd.conf
trunc() {
echo -n "" > $config_file
}
emit() {
echo -e "$@" >> $config_file
}
validate_ntp_section() {
uci_load_validate system timeserver "$1" "$2" \
'server:list(host)' 'enabled:bool:1' 'enable_server:bool:0' \
'interface:list(string)'
}
start_ntpd_instance() {
local intf i
[ "$2" = 0 ] || {
echo "validation failed"
return 1
}
[ "$enabled" = 0 ] && return
[ -z "$server" -a "$enable_server" = 0 ] && return
# not sure that the interfaces enumerated should be validated,
# since some of them might be dynamic interfaces (like IPsec
# tunnels) which aren't known by ubus.
mkdir -p "$(dirname "$config_file")"
trunc
emit "driftfile /var/lib/ntp/ntp.drift\n"
if [ "$enable_server" != 0 ]; then
emit "restrict default limited kod nomodify notrap nopeer"
emit "restrict -6 default limited kod nomodify notrap nopeer"
else
emit "restrict -4 default noserve"
emit "restrict -6 default noserve"
fi
emit "restrict source noquery"
emit "\n# No limits for local monitoring"
emit "restrict 127.0.0.1"
emit "restrict -6 ::1\n"
if [ -n "$interface" ]; then
local loopback=$(ubus call network.interface dump | jsonfilter -e "@.interface[@.interface='loopback']['device']")
local saw_lo=
for intf in $interface; do
emit "interface listen $intf"
[ "$intf" = "$loopback" ] && saw_lo=1
done
[ -z "$saw_lo" ] && emit "interface listen $loopback"
emit ""
fi
for i in $server
do
emit "server $i iburst"
done
mkdir -p /var/lib/ntp
chown -R ntp:ntp /var/lib/ntp
procd_open_instance
procd_set_param command $PROG -g -u ntp:ntp -p /var/run/ntpd.pid -n \
-c $config_file
procd_close_instance
procd_open_instance
procd_set_param command $HOTPLUG_HELPER
procd_close_instance
}
start_service() {
validate_ntp_section ntp start_ntpd_instance
}
service_triggers() {
procd_add_reload_trigger "system"
procd_add_validation validate_ntp_section
}