}
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();
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);
_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();
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;
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