From 63f49e43e62fa70bf8f3aa0a8082cb133a1b82cf Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Sat, 27 Mar 2010 17:13:33 +0000 Subject: base-files: add a hotplug handler for rdate SVN-Revision: 20518 --- .../base-files/files/etc/hotplug.d/iface/40-rdate | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 package/base-files/files/etc/hotplug.d/iface/40-rdate (limited to 'package/base-files/files/etc/hotplug.d') diff --git a/package/base-files/files/etc/hotplug.d/iface/40-rdate b/package/base-files/files/etc/hotplug.d/iface/40-rdate new file mode 100644 index 0000000000..cf56c02ac5 --- /dev/null +++ b/package/base-files/files/etc/hotplug.d/iface/40-rdate @@ -0,0 +1,46 @@ +uci_get_one() +{ + for var in "$@"; do + uci -P /var/state get "$var" 2>/dev/null && break + done +} + +rand() +{ + random=$(awk 'BEGIN { srand(); print int(rand() * 10 + 1); }') +} + +sync_rdate() +{ + local servers=$(uci_get_one "network.$INTERFACE.lease_timesrv" \ + "system.@rdate[0].server") + + if [ -n "$servers" ]; then + match=0 + tries=3 + rand + + while [ $match = 0 ] && [ $tries != 0 ]; do + for server in $servers; do + if [ $((--random)) = 0 ]; then + rdate -s $server >/dev/null 2>/dev/null && { + logger -t rdate "Synced with $server" + match=1 + } || { + logger -t rdate "Failed to sync with $server" + let tries="$tries - 1" + rand + } + + break + fi + done + done + else + logger -t rdate "No usable time server found" + fi +} + +case "$ACTION" in + ifup) route -n | grep -q ^0.0.0.0 && sync_rdate;; +esac -- cgit v1.2.3