]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
Test leap second timezone on start
authorMiroslav Lichvar <mlichvar@redhat.com>
Mon, 27 Feb 2012 12:27:32 +0000 (13:27 +0100)
committerMiroslav Lichvar <mlichvar@redhat.com>
Mon, 27 Feb 2012 12:28:14 +0000 (13:28 +0100)
reference.c

index 1ef3fa68a48e62c4e313e206de2db6e5edd0af17..1d9a249d6aaa73014b57717d1152c7dd55c820a4 100644 (file)
@@ -126,6 +126,10 @@ static double last_ref_update_interval;
 
 /* ================================================== */
 
+static NTP_Leap get_tz_leap(time_t when);
+
+/* ================================================== */
+
 static void
 handle_slew(struct timeval *raw,
             struct timeval *cooked,
@@ -202,6 +206,16 @@ REF_Initialise(void)
   enable_local_stratum = CNF_AllowLocalReference(&local_stratum);
 
   leap_tzname = CNF_GetLeapSecTimezone();
+  if (leap_tzname) {
+    /* Check that the timezone has good data for Jun 30 2008 and Dec 31 2008 */
+    if (get_tz_leap(1214784000) == LEAP_Normal &&
+        get_tz_leap(1230681600) == LEAP_InsertSecond) {
+      LOG(LOGS_INFO, LOGF_Reference, "Using %s timezone to obtain leap second data", leap_tzname);
+    } else {
+      LOG(LOGS_WARN, LOGF_Reference, "Timezone %s failed leap second check, ignoring", leap_tzname);
+      leap_tzname = NULL;
+    }
+  }
 
   CNF_GetMakeStep(&make_step_limit, &make_step_threshold);
   CNF_GetMaxChange(&max_offset_delay, &max_offset_ignore, &max_offset);