]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
homed: also fsync private/public key pair when storing it
authorLennart Poettering <lennart@poettering.net>
Wed, 20 May 2020 16:06:56 +0000 (18:06 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 21 May 2020 21:39:30 +0000 (23:39 +0200)
src/home/homed-manager.c

index 525e0c7d66283e8cd14aa6fdedbe4411ece32125..ea5791ae49891ff09d27f1efa1f0dd205f813c6f 100644 (file)
@@ -1337,7 +1337,7 @@ static int manager_generate_key_pair(Manager *m) {
         if (PEM_write_PUBKEY(fpublic, m->private_key) <= 0)
                 return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to write public key.");
 
-        r = fflush_and_check(fpublic);
+        r = fflush_sync_and_check(fpublic);
         if (r < 0)
                 return log_error_errno(r, "Failed to write private key: %m");
 
@@ -1351,7 +1351,7 @@ static int manager_generate_key_pair(Manager *m) {
         if (PEM_write_PrivateKey(fprivate, m->private_key, NULL, NULL, 0, NULL, 0) <= 0)
                 return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to write private key pair.");
 
-        r = fflush_and_check(fprivate);
+        r = fflush_sync_and_check(fprivate);
         if (r < 0)
                 return log_error_errno(r, "Failed to write private key: %m");
 
@@ -1369,6 +1369,10 @@ static int manager_generate_key_pair(Manager *m) {
         }
         temp_private = mfree(temp_private);
 
+        r = fsync_path_at(AT_FDCWD, "/var/lib/systemd/home/");
+        if (r < 0)
+                log_warning_errno(r, "Failed to sync /var/lib/systemd/home/, ignoring: %m");
+
         return 1;
 }