#!/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
|
|
|
|
if [ -d "/etc/ntpd.d" ]; then
|
|
local entry
|
|
for entry in "/etc/ntpd.d"/*.conf; do
|
|
emit "includefile ${entry}\n"
|
|
done
|
|
fi
|
|
|
|
if [ -d "/tmp/ntpd.d" ]; then
|
|
local entry
|
|
for entry in "/tmp/ntpd.d"/*.conf; do
|
|
emit "includefile ${entry}\n"
|
|
done
|
|
fi
|
|
|
|
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
|
|
}
|