#include "clock-util.h"
#include "fd-util.h"
#include "fs-util.h"
+#include "mkdir.h"
#include "network-util.h"
#include "process-util.h"
#include "signal-util.h"
* systems lacking a battery backed RTC. We also will adjust
* the time to at least the build time of systemd. */
- fd = open("/var/lib/systemd/clock", O_RDWR|O_CLOEXEC, 0644);
+ fd = open("/var/lib/systemd/timesync/clock", O_RDWR|O_CLOEXEC, 0644);
if (fd >= 0) {
struct stat st;
usec_t stamp;
min = stamp;
}
- /* Try to fix the access mode, so that we can still
- touch the file after dropping priviliges */
- (void) fchmod(fd, 0644);
- (void) fchown(fd, uid, gid);
+ if (geteuid() == 0) {
+ /* Try to fix the access mode, so that we can still
+ touch the file after dropping priviliges */
+ r = fchmod(fd, 0644);
+ if (r < 0)
+ return log_error_errno(errno, "Failed to change file access mode: %m");
+ r = fchown(fd, uid, gid);
+ return log_error_errno(errno, "Failed to change file owner: %m");
+ }
+
+ } else {
+ r = mkdir_safe_label("/var/lib/systemd/timesync", 0755, uid, gid);
+ if (r < 0)
+ return log_error_errno(r, "Failed to create state directory: %m");
- } else
/* create stamp file with the compiled-in date */
- (void) touch_file("/var/lib/systemd/clock", true, min, uid, gid, 0644);
+ (void) touch_file("/var/lib/systemd/timesync/clock", false, min, uid, gid, 0644);
+ }
ct = now(CLOCK_REALTIME);
if (ct < min) {
/* if we got an authoritative time, store it in the file system */
if (m->sync)
- (void) touch("/var/lib/systemd/clock");
+ (void) touch("/var/lib/systemd/timesync/clock");
sd_event_get_exit_code(m->event, &r);
ConditionCapability=CAP_SYS_TIME
ConditionVirtualization=!container
DefaultDependencies=no
-RequiresMountsFor=/var/lib/systemd/clock
+RequiresMountsFor=/var/lib/systemd/timesync/clock
After=systemd-remount-fs.service systemd-sysusers.service
Before=time-sync.target sysinit.target shutdown.target
Conflicts=shutdown.target
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
SystemCallFilter=~@cpu-emulation @debug @keyring @module @mount @obsolete @raw-io @reboot @swap
SystemCallArchitectures=native
-ReadWritePaths=/var/lib/systemd
+StateDirectory=systemd/timesync
[Install]
WantedBy=sysinit.target