[package] base-files: add a hotplug handler for rdate
[openwrt.git] / package / base-files / files / etc / hotplug.d / iface / 40-rdate
1 uci_get_one()
2 {
3         for var in "$@"; do
4                 uci -P /var/state get "$var" 2>/dev/null && break
5         done
6 }
7
8 rand()
9 {
10         random=$(awk 'BEGIN { srand(); print int(rand() * 10 + 1); }')
11 }
12
13 sync_rdate()
14 {
15         local servers=$(uci_get_one "network.$INTERFACE.lease_timesrv" \
16                 "system.@rdate[0].server")
17
18         if [ -n "$servers" ]; then
19                 match=0
20                 tries=3
21                 rand
22
23                 while [ $match = 0 ] && [ $tries != 0 ]; do
24                         for server in $servers; do
25                                 if [ $((--random)) = 0 ]; then
26                                         rdate -s $server >/dev/null 2>/dev/null && {
27                                                 logger -t rdate "Synced with $server"
28                                                 match=1
29                                         } || {
30                                                 logger -t rdate "Failed to sync with $server"
31                                                 let tries="$tries - 1"
32                                                 rand
33                                         }
34
35                                         break
36                                 fi
37                         done
38                 done
39         else
40                 logger -t rdate "No usable time server found"
41         fi
42 }
43
44 case "$ACTION" in
45         ifup) route -n | grep -q ^0.0.0.0 && sync_rdate;;
46 esac