aboutsummaryrefslogtreecommitdiff
path: root/net/ntpd-rs/files/ntp_daemon.in
diff options
context:
space:
mode:
Diffstat (limited to 'net/ntpd-rs/files/ntp_daemon.in')
-rw-r--r--net/ntpd-rs/files/ntp_daemon.in74
1 files changed, 74 insertions, 0 deletions
diff --git a/net/ntpd-rs/files/ntp_daemon.in b/net/ntpd-rs/files/ntp_daemon.in
new file mode 100644
index 000000000000..9441e8d35fc3
--- /dev/null
+++ b/net/ntpd-rs/files/ntp_daemon.in
@@ -0,0 +1,74 @@
+#!/bin/sh
+
+# PROVIDE: ntp_daemon
+# REQUIRE: DAEMON FILESYSTEMS devfs
+# BEFORE: LOGIN
+# KEYWORD: nojail resume shutdown
+#
+. /etc/rc.subr
+
+name=ntp_daemon
+rcvar=ntp_daemon_enable
+
+load_rc_config $name
+
+ntp_daemon_enable=${ntp_daemon_enable-"NO"}
+ntp_daemon_config=${ntp_daemon_config-"%%ETCDIR%%/ntp.toml"}
+ntp_daemon_socket=${ntp_daemon_socket-"/var/run/ntpd-rs"}
+
+command="/usr/bin/true"
+procname="/usr/sbin/daemon"
+pidfile="/var/run/${name}.pid"
+
+start_cmd="ntp_daemon_start"
+stop_cmd="ntp_daemon_stop"
+
+can_run_nonroot()
+{
+ # Try to set up the MAC ntpd policy so ntpd can run with reduced
+ # privileges. Detect whether MAC is compiled into the kernel, load
+ # the policy module if not already present, then check whether the
+ # policy has been disabled via tunable or sysctl.
+ [ -n "$(sysctl -qn security.mac.version)" ] || return 1
+ sysctl -qn security.mac.ntpd >/dev/null || kldload -qn mac_ntpd || return 1
+ [ "$(sysctl -qn security.mac.ntpd.enabled)" == "1" ] || return 1
+}
+
+is_process_running()
+{
+ [ -f ${pidfile} ] && procstat $(cat ${pidfile}) >/dev/null 2>&1
+}
+
+ntp_daemon_start()
+{
+ # If we can run as a non-root user, switch uid to ntpd.
+ if can_run_nonroot; then
+ _user="ntpd"
+ else
+ _user="root"
+ fi
+
+ [ -d "${ntp_daemon_socket}" ] || /bin/mkdir "${ntp_daemon_socket}"
+ /usr/sbin/chown ${_user}:${_user} "${ntp_daemon_socket}"
+ /usr/sbin/daemon -P ${pidfile} -r -f -o /var/log/ntp_daemon.log -u ${_user} -H %%PREFIX%%/bin/ntp-daemon --config "${ntp_daemon_config}"
+
+ if is_process_running; then
+ echo "Started ntp-daemon (pid=$(cat ${pidfile}))"
+ else
+ echo "Failed to start ntp-daemon"
+ fi
+}
+
+ntp_daemon_stop()
+{
+ if is_process_running; then
+ /bin/rm -rf "${ntp_daemon_socket}"
+ local pid=$(cat ${pidfile})
+ echo "Stopping ntp-daemon (pid=${pid})"
+ kill -- -${pid}
+ else
+ echo "ntp-daemon isn't running"
+ fi
+}
+
+run_rc_command "$1"