chiark / gitweb /
timedated: flip internal status after executing operation
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 21 Mar 2015 21:40:20 +0000 (17:40 -0400)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 21 Mar 2015 21:40:57 +0000 (17:40 -0400)
timedated would set the internal status before calling out to systemd to do
the actual change. When the operation was refused because of a SELinux denial,
the state kept in timedated would get out of sync, and the second call from
timedatectl would appear to succeed.

https://bugzilla.redhat.com/show_bug.cgi?id=1014315

src/timedate/timedated.c

index ca771d5b33241215e4987fb06e53f33e171b73f2..db9a149ae5dcd9294a88d78be60a2f9e2d1b14c4 100644 (file)
@@ -646,8 +646,6 @@ static int method_set_ntp(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bus
         if (r == 0)
                 return 1;
 
-        c->use_ntp = ntp;
-
         r = context_enable_ntp(c, bus, error);
         if (r < 0)
                 return r;
@@ -656,6 +654,8 @@ static int method_set_ntp(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bus
         if (r < 0)
                 return r;
 
+        c->use_ntp = ntp;
+
         log_info("Set NTP to %s", c->use_ntp ? "enabled" : "disabled");
 
         sd_bus_emit_properties_changed(bus, "/org/freedesktop/timedate1", "org.freedesktop.timedate1", "NTP", NULL);