]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
timedate: refuse to set time when previous request is not finished 11424/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 15 Jan 2019 05:51:30 +0000 (14:51 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 15 Jan 2019 06:15:26 +0000 (15:15 +0900)
If `timedatectl set-time` is invoked right after `timedatectl set-ntp true`,
then, the NTP service may not be started yet.

Fixes #11420.

src/timedate/timedated.c

index 12308bed42b2fb947a6a759567b5bde6822d3a2a..eeb17b613e7f9d339c47ae4088733ec34724cefd 100644 (file)
@@ -523,6 +523,10 @@ static int property_get_can_ntp(
         assert(reply);
         assert(error);
 
+        if (c->slot_job_removed)
+                /* When the previous request is not finished, then assume NTP is enabled. */
+                return sd_bus_message_append(reply, "b", true);
+
         r = context_update_ntp_status(c, bus, reply);
         if (r < 0)
                 return r;
@@ -548,6 +552,10 @@ static int property_get_ntp(
         assert(reply);
         assert(error);
 
+        if (c->slot_job_removed)
+                /* When the previous request is not finished, then assume NTP is active. */
+                return sd_bus_message_append(reply, "b", true);
+
         r = context_update_ntp_status(c, bus, reply);
         if (r < 0)
                 return r;
@@ -735,6 +743,9 @@ static int method_set_time(sd_bus_message *m, void *userdata, sd_bus_error *erro
         assert(m);
         assert(c);
 
+        if (c->slot_job_removed)
+                return sd_bus_error_set(error, BUS_ERROR_AUTOMATIC_TIME_SYNC_ENABLED, "Previous request is not finished, refusing.");
+
         r = context_update_ntp_status(c, bus, m);
         if (r < 0)
                 return sd_bus_error_set_errnof(error, r, "Failed to update context: %m");