machine-id: fix missing initialization
This commit is contained in:
+19
-30
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user