summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDidier Roche <didrocks@ubuntu.com>2014-11-24 09:40:57 +0100
committerLennart Poettering <lennart@poettering.net>2014-12-03 03:10:27 +0100
commit9496e375f7274e7d0f61f8e9d6a001b9f2dc579b (patch)
tree8697c1fca2c05ad435727bb2156deb122244a6e6 /src
parent4844262f25a3ff6bd23de05a0a6f84a8e2983d74 (diff)
machine-id-setup: Factorize some machine-id-setup functions to be reused
Diffstat (limited to 'src')
-rw-r--r--src/core/machine-id-setup.c44
1 files changed, 34 insertions, 10 deletions
diff --git a/src/core/machine-id-setup.c b/src/core/machine-id-setup.c
index 671003820b..77f047dde8 100644
--- a/src/core/machine-id-setup.c
+++ b/src/core/machine-id-setup.c
@@ -157,6 +157,37 @@ static int generate(char id[34], const char *root) {
return 0;
}
+static int get_valid_machine_id(int fd, char id[34]) {
+ char id_to_validate[34];
+
+ assert(fd >= 0);
+ assert(id);
+
+ if (loop_read(fd, id_to_validate, 33, false) == 33 && id_to_validate[32] == '\n') {
+ id_to_validate[32] = 0;
+
+ if (id128_is_valid(id_to_validate)) {
+ memcpy(id, id_to_validate, 32);
+ id[32] = '\n';
+ id[33] = 0;
+ return 0;
+ }
+ }
+
+ return -EINVAL;
+}
+
+static int write_machine_id(int fd, char id[34]) {
+ assert(fd >= 0);
+ assert(id);
+ lseek(fd, 0, SEEK_SET);
+
+ if (loop_write(fd, id, 33, false) == 33)
+ return 0;
+
+ return -errno;
+}
+
int machine_id_setup(const char *root) {
const char *etc_machine_id, *run_machine_id;
_cleanup_close_ int fd = -1;
@@ -207,13 +238,8 @@ int machine_id_setup(const char *root) {
if (fstat(fd, &st) < 0)
return log_error_errno(errno, "fstat() failed: %m");
- if (S_ISREG(st.st_mode))
- if (loop_read(fd, id, 33, false) == 33 && id[32] == '\n') {
- id[32] = 0;
-
- if (id128_is_valid(id))
- return 0;
- }
+ if (S_ISREG(st.st_mode) && get_valid_machine_id(fd, id) == 0)
+ return 0;
/* Hmm, so, the id currently stored is not useful, then let's
* generate one */
@@ -223,9 +249,7 @@ int machine_id_setup(const char *root) {
return r;
if (S_ISREG(st.st_mode) && writable) {
- lseek(fd, 0, SEEK_SET);
-
- if (loop_write(fd, id, 33, false) == 33)
+ if (write_machine_id(fd, id) == 0)
return 0;
}