mirror of
https://git.freebsd.org/ports.git
synced 2025-05-14 16:21:50 -04:00
Improve the rc scrtip to make it possible to run ntp_daemon with the ntpd user [1] Suggested by: Herbert J. Skuhra [1] Tested by: Herbert J. Skuhra [1]
74 lines
1.8 KiB
Bash
74 lines
1.8 KiB
Bash
#!/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"
|