chiark / gitweb /
util: rename write_one_line_file() to write_string_file()
[elogind.git] / src / core / machine-id-setup.c
index 636519c00c81d7d17b41fc675642fd114bbac3f5..51074fea449058b5433f1c80adb10e06a659f2ea 100644 (file)
@@ -35,6 +35,7 @@
 #include "mkdir.h"
 #include "log.h"
 #include "virt.h"
+#include "fileio.h"
 
 static int shorten_uuid(char destination[36], const char *source) {
         unsigned i, j;
@@ -100,7 +101,7 @@ static int generate(char id[34]) {
                         if (k >= 36) {
                                 r = shorten_uuid(id, uuid);
                                 if (r >= 0) {
-                                        log_info("Initializing machine ID from KVM UUID");
+                                        log_info("Initializing machine ID from KVM UUID.");
                                         return 0;
                                 }
                         }
@@ -119,7 +120,7 @@ static int generate(char id[34]) {
                         if (strlen(e) >= 36) {
                                 r = shorten_uuid(id, e);
                                 if (r >= 0) {
-                                        log_info("Initializing machine ID from container UUID");
+                                        log_info("Initializing machine ID from container UUID.");
                                         free(e);
                                         return 0;
                                 }
@@ -215,7 +216,7 @@ int machine_id_setup(void) {
          * /run/machine-id as a replacement */
 
         m = umask(0022);
-        r = write_one_line_file("/run/machine-id", id);
+        r = write_string_file("/run/machine-id", id);
         umask(m);
 
         if (r < 0) {
@@ -226,13 +227,19 @@ int machine_id_setup(void) {
         }
 
         /* And now, let's mount it over */
-        r = mount("/run/machine-id", "/etc/machine-id", "bind", MS_BIND|MS_RDONLY, NULL) < 0 ? -errno : 0;
+        r = mount("/run/machine-id", "/etc/machine-id", NULL, MS_BIND, NULL) < 0 ? -errno : 0;
         if (r < 0) {
                 unlink("/run/machine-id");
                 log_error("Failed to mount /etc/machine-id: %s", strerror(-r));
-        } else
+        } else {
                 log_info("Installed transient /etc/machine-id file.");
 
+                /* Mark the mount read-only */
+                if (mount(NULL, "/etc/machine-id", NULL,
+                          MS_BIND|MS_RDONLY|MS_REMOUNT, NULL) < 0)
+                        log_warning("Failed to make transient /etc/machine-id read-only");
+        }
+
 finish:
 
         if (fd >= 0)