]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
firstboot: fix can't overwrite timezone
authorbin456789 <bin456789@gmail.com>
Sat, 13 Aug 2022 19:29:37 +0000 (03:29 +0800)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 15 Aug 2022 05:08:04 +0000 (14:08 +0900)
src/firstboot/firstboot.c

index 7684c205fb36cc868bc7467b62b0a89725cf6e0d..9169129a6880776464d3e9dbcce3782c1102d4f5 100644 (file)
@@ -479,8 +479,9 @@ static int process_timezone(void) {
                                 return log_error_errno(r, "Failed to read host timezone: %m");
 
                         (void) mkdir_parents(etc_localtime, 0755);
-                        if (symlink(p, etc_localtime) < 0)
-                                return log_error_errno(errno, "Failed to create %s symlink: %m", etc_localtime);
+                        r = symlink_atomic(p, etc_localtime);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to create %s symlink: %m", etc_localtime);
 
                         log_info("%s copied.", etc_localtime);
                         return 0;
@@ -497,8 +498,9 @@ static int process_timezone(void) {
         e = strjoina("../usr/share/zoneinfo/", arg_timezone);
 
         (void) mkdir_parents(etc_localtime, 0755);
-        if (symlink(e, etc_localtime) < 0)
-                return log_error_errno(errno, "Failed to create %s symlink: %m", etc_localtime);
+        r = symlink_atomic(e, etc_localtime);
+        if (r < 0)
+                return log_error_errno(r, "Failed to create %s symlink: %m", etc_localtime);
 
         log_info("%s written", etc_localtime);
         return 0;