}
}
label_init("/etc");
- r = write_one_line_file_atomic_label("/etc/adjtime", w);
+ r = write_string_file_atomic_label("/etc/adjtime", w);
free(w);
return r;
goto finish;
}
- if (reply)
- dbus_message_unref(reply);
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
if (!reply) {
if (streq(error.name, "org.freedesktop.DBus.Error.FileNotFound")) {
goto finish;
}
- if (reply)
- dbus_message_unref(reply);
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, error);
if (!reply) {
if (streq(error->name, "org.freedesktop.DBus.Error.FileNotFound") ||
}
}
- if (reply)
- dbus_message_unref(reply);
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, error);
if (!reply) {
if (streq(error->name, "org.freedesktop.DBus.Error.FileNotFound")) {
struct timespec ts;
struct tm* tm;
+ if (relative) {
+ usec_t n, x;
+
+ n = now(CLOCK_REALTIME);
+ x = n + utc;
+
+ if ((utc > 0 && x < n) ||
+ (utc < 0 && x > n))
+ return bus_send_error_reply(connection, message, NULL, -EOVERFLOW);
+
+ timespec_store(&ts, x);
+ } else
+ timespec_store(&ts, (usec_t) utc);
+
r = verify_polkit(connection, message, "org.freedesktop.timedate1.set-time", interactive, NULL, &error);
if (r < 0)
return bus_send_error_reply(connection, message, &error, r);
- if (relative)
- timespec_store(&ts, now(CLOCK_REALTIME) + utc);
- else
- timespec_store(&ts, utc);
-
/* Set system clock */
if (clock_settime(CLOCK_REALTIME, &ts) < 0) {
log_error("Failed to set local time: %m");