* obsoletes Get-rid-of-EVP_MD_CTX_FLAG_NON_FIPS_ALLOW.patch
* Multiple bug fixes and improvements. For details, see:
/usr/share/doc/packages/ntp/ChangeLog
http://www.ntp.org/support/securitynotice/4_2_8-series-changelog/
- bsc#1233890: chown refclock device to ntp user on startup.
- ntp-check-argv.patch: Improve the handling of the process name of
the forked-off DNS resolver process.
OBS-URL: https://build.opensuse.org/package/show/network:time/ntp?expand=0&rev=227
218 lines
5.6 KiB
Bash
218 lines
5.6 KiB
Bash
#!/bin/bash
|
|
# Copyright (c) 1995-2014 SuSE Linux AG, Nuernberg, Germany.
|
|
# All rights reserved.
|
|
#
|
|
# Author: Peter Varkoly
|
|
|
|
# set default options
|
|
NTP_CONF="/etc/ntp.conf"
|
|
if [ ! -f ${NTP_CONF} ]; then
|
|
echo -n "Time server configuration file, ${NTP_CONF} does not exist."
|
|
exit 6
|
|
fi
|
|
|
|
NTPD_BIN="/usr/sbin/ntpd"
|
|
if [ ! -x ${NTPD_BIN} ]; then
|
|
echo -n "Time server, ${NTPD_BIN} not installed!"
|
|
exit 5
|
|
fi
|
|
|
|
NTPD_OPTIONS="-g -u ntp:ntp"
|
|
NTPD_RUN_CHROOTED="yes"
|
|
|
|
NTPQ_BIN="/usr/sbin/ntpq"
|
|
|
|
NTP_KEYS=$(awk '/^keys[[:blank:]]/ { print $2; exit }' $NTP_CONF)
|
|
NTP_KEYID=$(awk '/^controlkey[[:blank:]]/ { print $2; exit }' $NTP_CONF)
|
|
if test -n "$NTP_KEYS" -a -n "$NTP_KEYID" -a -r "$NTP_KEYS"; then
|
|
NTP_KEYTYPE=$(awk '$1 == "'$NTP_KEYID'"{ print $2 }' $NTP_KEYS)
|
|
NTP_PASSWD=$(awk '$1 == "'$NTP_KEYID'"{ print $3 }' $NTP_KEYS)
|
|
fi
|
|
|
|
if [ -n "$NTP_KEYS" ]; then
|
|
if test -z "$NTP_KEYID"; then
|
|
echo -n "NTP key id not defined"
|
|
exit 5
|
|
fi
|
|
if test -z "$NTP_PASSWD"; then
|
|
echo -n "No password for controlkey set"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Override defaults, if we have the sysconfig file
|
|
test -f /etc/sysconfig/ntp && . /etc/sysconfig/ntp
|
|
|
|
function update_cmos() { return 0; }
|
|
# Now see if we have to fix the CMOS clock
|
|
if [ "$NTPD_FORCE_SYNC_ON_STARTUP" = yes -a "$1" = ntptimeset ] ; then
|
|
test -f /etc/sysconfig/clock && . /etc/sysconfig/clock
|
|
if test -r /proc/xen/capabilities ; then
|
|
read -t1 caps < /proc/xen/capabilities
|
|
test "$caps" = "${caps%control_d*}" && NTPD_FORCE_SYNC_HWCLOCK_ON_STARTUP=no
|
|
fi
|
|
case "$(uname -i)" in
|
|
s390*) NTPD_FORCE_SYNC_HWCLOCK_ON_STARTUP=no
|
|
esac
|
|
if [ "$NTPD_FORCE_SYNC_HWCLOCK_ON_STARTUP" = yes ] ; then
|
|
function update_cmos() {
|
|
if test -e /dev/rtc ; then
|
|
/sbin/hwclock --systohc $HWCLOCK
|
|
return $?
|
|
fi
|
|
}
|
|
fi
|
|
fi
|
|
|
|
# set Default CHROOT path if not set but wanted
|
|
test "${NTPD_RUN_CHROOTED}" = "yes" && \
|
|
CHROOT_PREFIX="/var/lib/ntp" || \
|
|
CHROOT_PREFIX=""
|
|
|
|
# set default PID variables
|
|
NTPD_PID="${CHROOT_PREFIX}/var/run/ntp/ntpd.pid"
|
|
|
|
# Create if /var/run is on tmpfs
|
|
test -e /var/run/ntp || ln -s /var/lib/ntp/var/run/ntp /var/run
|
|
|
|
function ntpd_is_running() {
|
|
service ntpd status >/dev/null
|
|
}
|
|
|
|
function parse_symlink() {
|
|
if [ -c "${CHROOT_PREFIX}$NTP_PARSE_DEVICE" ]; then
|
|
if [ -n "${CHROOT_PREFIX}$NTP_PARSE_LINK" ]; then
|
|
ln -sf $NTP_PARSE_DEVICE ${CHROOT_PREFIX}$NTP_PARSE_LINK
|
|
fi
|
|
chown ntp:ntp ${CHROOT_PREFIX}$NTP_PARSE_DEVICE
|
|
fi
|
|
}
|
|
|
|
function prepare_chroot() {
|
|
for configfile in /etc/{localtime,ntp.keys} $NTP_CONF $NTPD_CHROOT_FILES; do
|
|
test -d ${CHROOT_PREFIX}${configfile%/*} || mkdir -p ${CHROOT_PREFIX}${configfile%/*}
|
|
if [ -r ${configfile} ]
|
|
then
|
|
cp -aL ${configfile} ${CHROOT_PREFIX}${configfile%/*}
|
|
else
|
|
echo
|
|
echo "Warning: ${configfile} not found or not readable"
|
|
fi
|
|
done
|
|
mkdir -p ${CHROOT_PREFIX}/var/log
|
|
mkdir -p ${CHROOT_PREFIX}/proc
|
|
mount -t proc none -o ro,nosuid,nodev "${CHROOT_PREFIX}/proc" 2>/dev/null
|
|
NTPD_OPTIONS="${NTPD_OPTIONS} -i ${CHROOT_PREFIX}"
|
|
}
|
|
|
|
function runtime_configuration() {
|
|
for f in /var/run/ntp/servers*; do
|
|
if [ -r ${f} ]; then
|
|
. ${f}
|
|
ntp_server="${ntp_server} ${RUNTIME_SERVERS}"
|
|
fi
|
|
done
|
|
if [ -n "${ntp_server}" ]; then
|
|
for s in ${ntp_server}; do
|
|
add_runtime_server ${s}
|
|
done
|
|
fi
|
|
}
|
|
|
|
function add_runtime_server() {
|
|
NTPC_CMD="keytype $NTP_KEYTYPE\nkeyid $NTP_KEYID\npasswd $NTP_PASSWD\n:config server $@\n"
|
|
NTPQ_LOG=$(echo -e "${NTPC_CMD}quit" | $NTPQ_BIN)
|
|
logger -t $0 "runtime configuration: server $@"
|
|
}
|
|
|
|
function get_ntpd_ip_proto() {
|
|
local -a OPTS
|
|
read -ra OPTS <<< "$NTPD_OPTIONS"
|
|
for i in "${OPTS[@]}"; do
|
|
if [ "$i" = "-4" ] || [ "$i" = "-6" ]; then
|
|
# first occurrence wins safely because ntpd couldn't handle more anyway
|
|
echo "$i"
|
|
return
|
|
fi
|
|
done
|
|
echo ""
|
|
return
|
|
}
|
|
|
|
case "$1" in
|
|
start)
|
|
if [ "$NTPD_FORCE_SYNC_ON_STARTUP" = "yes" ]; then
|
|
# get the initial date from the timeservers configured in ntp.conf
|
|
ntpd_is_running || $0 ntptimeset
|
|
fi
|
|
echo -n "Starting network time protocol daemon (NTPD)"
|
|
# do we run chrooted?
|
|
test "${NTPD_RUN_CHROOTED}" = "yes" && prepare_chroot
|
|
# do we need a refclock symlink?
|
|
parse_symlink
|
|
|
|
$NTPD_BIN -p ${NTPD_PID#${CHROOT_PREFIX}} $NTPD_OPTIONS -c $NTP_CONF
|
|
|
|
if [ -n "${NTP_KEYS}" ]; then
|
|
runtime_configuration
|
|
fi
|
|
|
|
;;
|
|
addserver)
|
|
if [ -z "${NTP_KEYS}" ]; then
|
|
echo "Runtime configuration disabled, no key file specified."
|
|
exit 1
|
|
fi
|
|
|
|
if test $# -lt 2; then
|
|
echo "No servers to add specified"
|
|
exit 1
|
|
fi
|
|
shift
|
|
|
|
service ntpd status 2>&1 >/dev/null
|
|
if test $? = 0;
|
|
then
|
|
add_runtime_server "$@"
|
|
fi
|
|
;;
|
|
ntptimeset)
|
|
NTPD_PROTO="$( get_ntpd_ip_proto )"
|
|
while read arg1 arg2 arg3 dummy
|
|
do
|
|
test "$arg1" = "server" || continue
|
|
if [ "$arg2" = "-4" -o "$arg2" = "-6" ]
|
|
then
|
|
srv="$arg3"
|
|
proto="$arg2"
|
|
args="$arg2 $arg3"
|
|
else
|
|
srv="$arg2"
|
|
proto=""
|
|
args="$arg2"
|
|
fi
|
|
# ignore servers with conflicting IP version
|
|
test -n "$NTP_PROTO" -a "NTPD_PROTO" != "$proto" && continue
|
|
# ignore hardware clock drivers
|
|
test "${srv#127.127.}" != "$srv" && continue
|
|
if /usr/sbin/sntp -S -c $args &> /dev/null
|
|
then
|
|
SYNCHRONISED=$srv
|
|
break
|
|
fi
|
|
done < /etc/ntp.conf
|
|
if [ "$SYNCHRONISED" ]
|
|
then
|
|
echo "Time synchronized with $SYNCHRONISED"
|
|
update_cmos
|
|
else
|
|
echo "Time could not be synchronized"
|
|
fi
|
|
;;
|
|
*)
|
|
echo "Usage: $0 {start|addserver|ntptimeset}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|