X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fmachine-id-setup.c;h=fbba3aab78d0f0073a65b34d7374cb8a8c7f24c0;hb=ee531d949c2f62374fc109252f8cbe61c2b8ee39;hp=146c5653c96af4b91ac12ed5b268684429136c3a;hpb=10d18763ec6f31ded1535f810be765f7fab2d97d;p=elogind.git diff --git a/src/core/machine-id-setup.c b/src/core/machine-id-setup.c index 146c5653c..fbba3aab7 100644 --- a/src/core/machine-id-setup.c +++ b/src/core/machine-id-setup.c @@ -155,31 +155,27 @@ int machine_id_setup(void) { bool writable; struct stat st; char id[34]; /* 32 + \n + \0 */ - mode_t m; - m = umask(0000); - - /* We create this 0444, to indicate that this isn't really - * something you should ever modify. Of course, since the file - * will be owned by root it doesn't matter much, but maybe - * people look. */ + RUN_WITH_UMASK(0000) { + /* We create this 0444, to indicate that this isn't really + * something you should ever modify. Of course, since the file + * will be owned by root it doesn't matter much, but maybe + * people look. */ + + fd = open("/etc/machine-id", O_RDWR|O_CREAT|O_CLOEXEC|O_NOCTTY, 0444); + if (fd >= 0) + writable = true; + else { + fd = open("/etc/machine-id", O_RDONLY|O_CLOEXEC|O_NOCTTY); + if (fd < 0) { + log_error("Cannot open /etc/machine-id: %m"); + return -errno; + } - fd = open("/etc/machine-id", O_RDWR|O_CREAT|O_CLOEXEC|O_NOCTTY, 0444); - if (fd >= 0) - writable = true; - else { - fd = open("/etc/machine-id", O_RDONLY|O_CLOEXEC|O_NOCTTY); - if (fd < 0) { - umask(m); - log_error("Cannot open /etc/machine-id: %m"); - return -errno; + writable = false; } - - writable = false; } - umask(m); - if (fstat(fd, &st) < 0) { log_error("fstat() failed: %m"); r = -errno; @@ -215,10 +211,9 @@ int machine_id_setup(void) { /* Hmm, we couldn't write it? So let's write it to * /run/machine-id as a replacement */ - m = umask(0022); - r = write_one_line_file("/run/machine-id", id); - umask(m); - + RUN_WITH_UMASK(0022) { + r = write_string_file("/run/machine-id", id); + } if (r < 0) { log_error("Cannot write /run/machine-id: %s", strerror(-r));