- #!/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
- }
|