47 lines
840 B
Text
47 lines
840 B
Text
|
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
|