From 897395791f53064d8c9a18cf6b6567404fbedf15 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 11 Dec 2013 23:10:36 +0100 Subject: [PATCH 1/1] journal: when listing logs of a container make sure we don't accidentally show messages from host too --- src/journal/journal-internal.h | 1 + src/journal/sd-journal.c | 26 +++++++++++++++----------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/journal/journal-internal.h b/src/journal/journal-internal.h index 3355fca6b..2c401e308 100644 --- a/src/journal/journal-internal.h +++ b/src/journal/journal-internal.h @@ -98,6 +98,7 @@ struct Directory { struct sd_journal { char *path; + char *prefix; Hashmap *files; MMapCache *mmap; diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c index b55cf37e5..dda9351da 100644 --- a/src/journal/sd-journal.c +++ b/src/journal/sd-journal.c @@ -1466,7 +1466,7 @@ static int add_directory(sd_journal *j, const char *prefix, const char *dirname) return 0; } -static int add_root_directory(sd_journal *j, const char *p, const char *prefix) { +static int add_root_directory(sd_journal *j, const char *p) { _cleanup_closedir_ DIR *d = NULL; Directory *m; int r; @@ -1478,8 +1478,8 @@ static int add_root_directory(sd_journal *j, const char *p, const char *prefix) !path_startswith(p, "/run")) return -EINVAL; - if (prefix) - p = strappenda(prefix, p); + if (j->prefix) + p = strappenda(j->prefix, p); d = opendir(p); if (!d) @@ -1580,7 +1580,7 @@ static int remove_directory(sd_journal *j, Directory *d) { return 0; } -static int add_search_paths(sd_journal *j, const char *prefix) { +static int add_search_paths(sd_journal *j) { int r; const char search_paths[] = "/run/log/journal\0" @@ -1593,7 +1593,7 @@ static int add_search_paths(sd_journal *j, const char *prefix) { * what's actually accessible, and ignore the rest. */ NULSTR_FOREACH(p, search_paths) { - r = add_root_directory(j, p, prefix); + r = add_root_directory(j, p); if (r < 0 && r != -ENOENT) { r = set_put_error(j, r); if (r < 0) @@ -1623,7 +1623,7 @@ static int add_current_paths(sd_journal *j) { if (!dir) return -ENOMEM; - r = add_root_directory(j, dir, NULL); + r = add_root_directory(j, dir); if (r < 0) { set_put_error(j, r); return r; @@ -1694,7 +1694,7 @@ _public_ int sd_journal_open(sd_journal **ret, int flags) { if (!j) return -ENOMEM; - r = add_search_paths(j, NULL); + r = add_search_paths(j); if (r < 0) goto fail; @@ -1734,7 +1734,10 @@ _public_ int sd_journal_open_container(sd_journal **ret, const char *machine, in if (!j) return -ENOMEM; - r = add_search_paths(j, root); + j->prefix = root; + root = NULL; + + r = add_search_paths(j); if (r < 0) goto fail; @@ -1758,7 +1761,7 @@ _public_ int sd_journal_open_directory(sd_journal **ret, const char *path, int f if (!j) return -ENOMEM; - r = add_root_directory(j, path, NULL); + r = add_root_directory(j, path); if (r < 0) { set_put_error(j, r); goto fail; @@ -1836,6 +1839,7 @@ _public_ void sd_journal_close(sd_journal *j) { } free(j->path); + free(j->prefix); free(j->unique_field); set_free(j->errors); free(j); @@ -2121,9 +2125,9 @@ _public_ int sd_journal_get_fd(sd_journal *j) { if (j->no_new_files) r = add_current_paths(j); else if (j->path) - r = add_root_directory(j, j->path, NULL); + r = add_root_directory(j, j->path); else - r = add_search_paths(j, NULL); + r = add_search_paths(j); if (r < 0) return r; -- 2.30.2