Commit 4b73a0c0 authored by Lennart Poettering's avatar Lennart Poettering

machine-id: fix missing initialization

parent d3a86981
......@@ -151,7 +151,8 @@ static int generate(char id[34]) {
}
int machine_id_setup(void) {
int fd, r;
_cleanup_close_ int fd = -1;
int r;
bool writable;
struct stat st;
char id[34]; /* 32 + \n + \0 */
......@@ -178,31 +179,25 @@ int machine_id_setup(void) {
if (fstat(fd, &st) < 0) {
log_error("fstat() failed: %m");
r = -errno;
goto finish;
return -errno;
}
if (S_ISREG(st.st_mode)) {
if (loop_read(fd, id, 32, false) >= 32) {
r = 0;
goto finish;
}
}
if (S_ISREG(st.st_mode))
if (loop_read(fd, id, 32, false) >= 32)
return 0;
/* Hmm, so, the id currently stored is not useful, then let's
* generate one */
r = generate(id);
if (r < 0)
goto finish;
return r;
if (S_ISREG(st.st_mode) && writable) {
lseek(fd, 0, SEEK_SET);
if (loop_write(fd, id, 33, false) == 33) {
r = 0;
goto finish;
}
if (loop_write(fd, id, 33, false) == 33)
return 0;
}
close_nointr_nofail(fd);
......@@ -216,29 +211,23 @@ int machine_id_setup(void) {
}
if (r < 0) {
log_error("Cannot write /run/machine-id: %s", strerror(-r));
unlink("/run/machine-id");
goto finish;
return r;
}
/* And now, let's mount it over */
r = mount("/run/machine-id", "/etc/machine-id", NULL, MS_BIND, NULL) < 0 ? -errno : 0;
r = mount("/run/machine-id", "/etc/machine-id", NULL, MS_BIND, NULL);
if (r < 0) {
unlink("/run/machine-id");
log_error("Failed to mount /etc/machine-id: %s", strerror(-r));
} 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");
log_error("Failed to mount /etc/machine-id: %m");
unlink_noerrno("/run/machine-id");
return -errno;
}
finish:
log_info("Installed transient /etc/machine-id file.");
if (fd >= 0)
close_nointr_nofail(fd);
/* 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: %m");
return r;
return 0;
}
......@@ -234,6 +234,17 @@ void close_many(const int fds[], unsigned n_fd) {
close_nointr_nofail(fds[i]);
}
int unlink_noerrno(const char *path) {
PROTECT_ERRNO;
int r;
r = unlink(path);
if (r < 0)
return -errno;
return 0;
}
int parse_boolean(const char *v) {
assert(v);
......
......@@ -646,3 +646,5 @@ static inline unsigned u64log2(uint64_t n) {
static inline bool logind_running(void) {
return access("/run/systemd/seats/", F_OK) >= 0;
}
int unlink_noerrno(const char *path);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment