Author: cy
Date: Thu Aug 25 02:45:52 2016
New Revision: 304780
URL: https://svnweb.freebsd.org/changeset/base/304780

Log:
  Change the algorithm by which /var/db/leap-seconds is updated.
  
  1. Use the leap-seconds version number (update time) to determine
     whether to update the file or not.
  
  2. If the version numbers of the files is the same, use the later
     expiry date to determine which file to use.
  
  Suggested by: ian@
  MFC after:    1 day

Modified:
  head/etc/rc.d/ntpd

Modified: head/etc/rc.d/ntpd
==============================================================================
--- head/etc/rc.d/ntpd  Thu Aug 25 02:40:14 2016        (r304779)
+++ head/etc/rc.d/ntpd  Thu Aug 25 02:45:52 2016        (r304780)
@@ -67,11 +67,13 @@ current_ntp_ts() {
 }
        
 get_ntp_leapfile_ver() {
+       # Leapfile update date (version number).
        expr "$(awk '$1 == "#$" { print $2 }' "$1" 2>/dev/null)" : \
                '^\([1-9][0-9]*\)$' \| 0
 }
 
 get_ntp_leapfile_expiry() {
+       # Leapfile expiry date.
        expr "$(awk '$1 == "#@" { print $2 }' "$1" 2>/dev/null)" : \
                '^\([1-9][0-9]*\)$' \| 0
 }
@@ -88,19 +90,23 @@ ntpd_fetch_leapfile() {
        ntp_tmp_leapfile="/var/run/ntpd.leap-seconds.list"
 
        ntp_ver_no_src=$(get_ntp_leapfile_ver $ntp_src_leapfile)
+       ntp_expiry_src=$(get_ntp_leapfile_expiry $ntp_src_leapfile)
        ntp_ver_no_db=$(get_ntp_leapfile_ver $ntp_db_leapfile)
+       ntp_expiry_db=$(get_ntp_leapfile_expiry $ntp_db_leapfile)
        $verbose ntp_src_leapfile version is $ntp_ver_no_src
        $verbose ntp_db_leapfile version is $ntp_ver_no_db
 
-       if [ "$ntp_ver_no_src" -gt "$ntp_ver_no_db" ]; then
+       if [ "$ntp_ver_no_src" -gt "$ntp_ver_no_db" -o \
+            "$ntp_ver_no_src" -eq "$ntp_ver_no_db" -a \
+            "$ntp_expiry_src" -gt "$ntp_expiry_db" ]; then
                $verbose replacing $ntp_db_leapfile with $ntp_src_leapfile 
                cp -p $ntp_src_leapfile $ntp_db_leapfile
                ntp_ver_no_db=$ntp_ver_no_src
        else
                $verbose not replacing $ntp_db_leapfile with $ntp_src_leapfile 
        fi
-       ntp_leap_expiry=$(get_ntp_leapfile_expiry $ntp_db_leapfile)
        ntp_leapfile_expiry_seconds=$((ntp_leapfile_expiry_days*86400))
+       ntp_leap_expiry=$(get_ntp_leapfile_expiry $ntp_db_leapfile)
        ntp_leap_fetch_date=$((ntp_leap_expiry-ntp_leapfile_expiry_seconds))
        if [ $(current_ntp_ts) -ge $ntp_leap_fetch_date ]; then
                $verbose Within ntp leapfile expiry limit, initiating fetch
@@ -108,8 +114,11 @@ ntpd_fetch_leapfile() {
                        $verbose fetching $url
                        fetch $ntp_leapfile_fetch_opts -o $ntp_tmp_leapfile 
$url && break
                done
+               ntp_ver_no_tmp=$(get_ntp_leapfile_ver $ntp_tmp_leapfile)
                ntp_expiry_tmp=$(get_ntp_leapfile_expiry $ntp_tmp_leapfile)
-               if [ "$ntp_expiry_tmp" -gt "$ntp_leap_expiry" ]; then
+               if [ "$ntp_ver_no_tmp" -gt "$ntp_ver_no_db" -o \
+                    "$ntp_ver_no_tmp" -eq "$ntp_ver_no_db" -a \
+                    "$ntp_expiry_tmp" -gt "$ntp_expiry_db" ]; then
                        $verbose using $url as $ntp_db_leapfile
                        mv $ntp_tmp_leapfile $ntp_db_leapfile
                else
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to