X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fnspawn%2Fnspawn.c;h=c5faac4797396e29d54b2f39e86bc336d94cac34;hb=4d680aeea1e479f08f3dbdb7430def5d9eefe2ee;hp=eef0e9a28147012fb810a25d4b0a0f7e6fc54e64;hpb=2ed4e5e0b89cd1cf128803a62c0a27dd78e1c12e;p=elogind.git diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index eef0e9a28..c5faac479 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -804,14 +804,11 @@ static int setup_hostname(void) { } static int setup_journal(const char *directory) { - sd_id128_t machine_id; + sd_id128_t machine_id, this_id; _cleanup_free_ char *p = NULL, *b = NULL, *q = NULL, *d = NULL; char *id; int r; - if (arg_link_journal == LINK_NO) - return 0; - p = strappend(directory, "/etc/machine-id"); if (!p) return log_oom(); @@ -835,6 +832,24 @@ static int setup_journal(const char *directory) { return r; } + r = sd_id128_get_machine(&this_id); + if (r < 0) { + log_error("Failed to retrieve machine ID: %s", strerror(-r)); + return r; + } + + if (sd_id128_equal(machine_id, this_id)) { + log_full(arg_link_journal == LINK_AUTO ? LOG_WARNING : LOG_ERR, + "Host and machine ids are equal (%s): refusing to link journals", id); + if (arg_link_journal == LINK_AUTO) + return 0; + return + -EEXIST; + } + + if (arg_link_journal == LINK_NO) + return 0; + free(p); p = strappend("/var/log/journal/", id); q = strjoin(directory, "/var/log/journal/", id, NULL); @@ -1067,6 +1082,7 @@ int main(int argc, char *argv[]) { _cleanup_close_pipe_ int kmsg_socket_pair[2] = { -1, -1 }; _cleanup_fdset_free_ FDSet *fds = NULL; _cleanup_free_ char *kdbus_namespace = NULL; + const char *ns; log_parse_environment(); log_open(); @@ -1096,7 +1112,7 @@ int main(int argc, char *argv[]) { path_kill_slashes(arg_directory); if (!arg_machine) { - arg_machine = strdup(path_get_file_name(arg_directory)); + arg_machine = strdup(basename(arg_directory)); if (!arg_machine) { log_oom(); goto finish; @@ -1167,7 +1183,8 @@ int main(int argc, char *argv[]) { goto finish; } - kdbus_fd = bus_kernel_create_namespace(arg_machine, &kdbus_namespace); + ns = strappenda("machine-", arg_machine); + kdbus_fd = bus_kernel_create_namespace(ns, &kdbus_namespace); if (r < 0) log_debug("Failed to create kdbus namespace: %s", strerror(-r)); else