diff options
-rw-r--r-- | Makefile-man.am | 10 | ||||
-rw-r--r-- | man/sd_journal_open.xml | 35 | ||||
-rw-r--r-- | src/journal/journal-gatewayd.c | 2 | ||||
-rw-r--r-- | src/journal/sd-journal.c | 45 | ||||
-rw-r--r-- | src/python-systemd/_reader.c | 1 | ||||
-rw-r--r-- | src/shared/logs-show.c | 2 | ||||
-rw-r--r-- | src/systemd/sd-journal.h | 4 |
7 files changed, 85 insertions, 14 deletions
diff --git a/Makefile-man.am b/Makefile-man.am index 58881586cf..a31427e9b9 100644 --- a/Makefile-man.am +++ b/Makefile-man.am @@ -107,6 +107,7 @@ MANPAGES_ALIAS += \ man/SD_ID128_MAKE.3 \ man/SD_INFO.3 \ man/SD_JOURNAL_APPEND.3 \ + man/SD_JOURNAL_CURRENT_USER.3 \ man/SD_JOURNAL_FOREACH.3 \ man/SD_JOURNAL_FOREACH_BACKWARDS.3 \ man/SD_JOURNAL_FOREACH_DATA.3 \ @@ -116,6 +117,7 @@ MANPAGES_ALIAS += \ man/SD_JOURNAL_NOP.3 \ man/SD_JOURNAL_RUNTIME_ONLY.3 \ man/SD_JOURNAL_SUPPRESS_LOCATION.3 \ + man/SD_JOURNAL_SYSTEM.3 \ man/SD_JOURNAL_SYSTEM_ONLY.3 \ man/SD_LISTEN_FDS_START.3 \ man/SD_NOTICE.3 \ @@ -205,6 +207,7 @@ man/SD_ID128_FORMAT_VAL.3: man/sd-id128.3 man/SD_ID128_MAKE.3: man/sd-id128.3 man/SD_INFO.3: man/sd-daemon.3 man/SD_JOURNAL_APPEND.3: man/sd_journal_get_fd.3 +man/SD_JOURNAL_CURRENT_USER.3: man/sd_journal_open.3 man/SD_JOURNAL_FOREACH.3: man/sd_journal_next.3 man/SD_JOURNAL_FOREACH_BACKWARDS.3: man/sd_journal_next.3 man/SD_JOURNAL_FOREACH_DATA.3: man/sd_journal_get_data.3 @@ -214,6 +217,7 @@ man/SD_JOURNAL_LOCAL_ONLY.3: man/sd_journal_open.3 man/SD_JOURNAL_NOP.3: man/sd_journal_get_fd.3 man/SD_JOURNAL_RUNTIME_ONLY.3: man/sd_journal_open.3 man/SD_JOURNAL_SUPPRESS_LOCATION.3: man/sd_journal_print.3 +man/SD_JOURNAL_SYSTEM.3: man/sd_journal_open.3 man/SD_JOURNAL_SYSTEM_ONLY.3: man/sd_journal_open.3 man/SD_LISTEN_FDS_START.3: man/sd_listen_fds.3 man/SD_NOTICE.3: man/sd-daemon.3 @@ -325,6 +329,9 @@ man/SD_INFO.html: man/sd-daemon.html man/SD_JOURNAL_APPEND.html: man/sd_journal_get_fd.html $(html-alias) +man/SD_JOURNAL_CURRENT_USER.html: man/sd_journal_open.html + $(html-alias) + man/SD_JOURNAL_FOREACH.html: man/sd_journal_next.html $(html-alias) @@ -352,6 +359,9 @@ man/SD_JOURNAL_RUNTIME_ONLY.html: man/sd_journal_open.html man/SD_JOURNAL_SUPPRESS_LOCATION.html: man/sd_journal_print.html $(html-alias) +man/SD_JOURNAL_SYSTEM.html: man/sd_journal_open.html + $(html-alias) + man/SD_JOURNAL_SYSTEM_ONLY.html: man/sd_journal_open.html $(html-alias) diff --git a/man/sd_journal_open.xml b/man/sd_journal_open.xml index 76b857b991..dd2f32d81a 100644 --- a/man/sd_journal_open.xml +++ b/man/sd_journal_open.xml @@ -49,7 +49,8 @@ <refname>sd_journal</refname> <refname>SD_JOURNAL_LOCAL_ONLY</refname> <refname>SD_JOURNAL_RUNTIME_ONLY</refname> - <refname>SD_JOURNAL_SYSTEM_ONLY</refname> + <refname>SD_JOURNAL_SYSTEM</refname> + <refname>SD_JOURNAL_CURRENT_USER</refname> <refpurpose>Open the system journal for reading</refpurpose> </refnamediv> @@ -93,10 +94,14 @@ be opened. <literal>SD_JOURNAL_RUNTIME_ONLY</literal> makes sure only volatile journal files will be opened, excluding those which are stored on persistent - storage. <literal>SD_JOURNAL_SYSTEM_ONLY</literal> - will ensure that only journal files of system services - and the kernel (in opposition to user session processes) will - be opened.</para> + storage. <literal>SD_JOURNAL_SYSTEM</literal> + will cause journal files of system services and the + kernel (in opposition to user session processes) to + be opened. <literal>SD_JOURNAL_CURRENT_USER</literal> + will cause journal files of the current user to be + opened. If neither <literal>SD_JOURNAL_SYSTEM</literal> + nor <literal>SD_JOURNAL_CURRENT_USER</literal> are + specified, all journal file types will be opened.</para> <para><function>sd_journal_open_directory()</function> is similar to <function>sd_journal_open()</function> @@ -171,6 +176,26 @@ </refsect1> <refsect1> + <title>History</title> + + <para><function>sd_journal_open()</function>, + <function>sd_journal_close()</function>, + <literal>SD_JOURNAL_LOCAL_ONLY</literal>, + <literal>SD_JOURNAL_RUNTIME_ONLY</literal>, + <literal>SD_JOURNAL_SYSTEM_ONLY</literal> were added + in systemd-38.</para> + + <para><function>sd_journal_open_directory()</function> + was added in systemd-187.</para> + + <para><literal>SD_JOURNAL_SYSTEM</literal> and + <literal>SD_JOURNAL_CURRENT_USER</literal> were added + in systemd-205. + <literal>SD_JOURNAL_SYSTEM_ONLY</literal> + was deprecated.</para> + </refsect1> + + <refsect1> <title>See Also</title> <para> diff --git a/src/journal/journal-gatewayd.c b/src/journal/journal-gatewayd.c index 745f45f932..86338c66f3 100644 --- a/src/journal/journal-gatewayd.c +++ b/src/journal/journal-gatewayd.c @@ -109,7 +109,7 @@ static int open_journal(RequestMeta *m) { if (m->journal) return 0; - return sd_journal_open(&m->journal, SD_JOURNAL_LOCAL_ONLY|SD_JOURNAL_SYSTEM_ONLY); + return sd_journal_open(&m->journal, SD_JOURNAL_LOCAL_ONLY|SD_JOURNAL_SYSTEM); } static int respond_oom_internal(struct MHD_Connection *connection) { diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c index 2bad243ea1..46511df6be 100644 --- a/src/journal/sd-journal.c +++ b/src/journal/sd-journal.c @@ -1249,6 +1249,42 @@ static void check_network(sd_journal *j, int fd) { F_TYPE_CMP(sfs.f_type, SMB_SUPER_MAGIC); } +static bool file_has_type_prefix(const char *prefix, const char *filename) { + const char *full, *tilded, *atted; + + full = strappend(prefix, ".journal"); + tilded = strappenda(full, "~"); + atted = strappenda(prefix, "@"); + + return streq(filename, full) || + streq(filename, tilded) || + startswith(filename, atted); +} + +static bool file_type_wanted(int flags, const char *filename) { + if (!endswith(filename, ".journal") && !endswith(filename, ".journal~")) + return false; + + /* no flags set → every type is OK */ + if (!(flags & (SD_JOURNAL_SYSTEM | SD_JOURNAL_CURRENT_USER))) + return true; + + if (flags & SD_JOURNAL_SYSTEM && file_has_type_prefix("system", filename)) + return true; + + if (flags & SD_JOURNAL_CURRENT_USER) { + char prefix[5 + DECIMAL_STR_MAX(uid_t) + 1]; + + assert_se(snprintf(prefix, sizeof(prefix), "user-%lu", (unsigned long) getuid()) + < (int) sizeof(prefix)); + + if (file_has_type_prefix(prefix, filename)) + return true; + } + + return false; +} + static int add_file(sd_journal *j, const char *prefix, const char *filename) { _cleanup_free_ char *path = NULL; int r; @@ -1258,11 +1294,7 @@ static int add_file(sd_journal *j, const char *prefix, const char *filename) { assert(prefix); assert(filename); - if ((j->flags & SD_JOURNAL_SYSTEM_ONLY) && - !(streq(filename, "system.journal") || - streq(filename, "system.journal~") || - (startswith(filename, "system@") && - (endswith(filename, ".journal") || endswith(filename, ".journal~"))))) + if (!file_type_wanted(j->flags, filename)) return 0; path = strjoin(prefix, "/", filename, NULL); @@ -1619,7 +1651,8 @@ _public_ int sd_journal_open(sd_journal **ret, int flags) { if (flags & ~(SD_JOURNAL_LOCAL_ONLY| SD_JOURNAL_RUNTIME_ONLY| - SD_JOURNAL_SYSTEM_ONLY)) + SD_JOURNAL_SYSTEM| + SD_JOURNAL_CURRENT_USER)) return -EINVAL; j = journal_new(flags, NULL); diff --git a/src/python-systemd/_reader.c b/src/python-systemd/_reader.c index c4c4fdfe1d..2c699630c2 100644 --- a/src/python-systemd/_reader.c +++ b/src/python-systemd/_reader.c @@ -1097,6 +1097,7 @@ init_reader(void) PyModule_AddIntConstant(m, "INVALIDATE", SD_JOURNAL_INVALIDATE) || PyModule_AddIntConstant(m, "LOCAL_ONLY", SD_JOURNAL_LOCAL_ONLY) || PyModule_AddIntConstant(m, "RUNTIME_ONLY", SD_JOURNAL_RUNTIME_ONLY) || + PyModule_AddIntConstant(m, "SYSTEM", SD_JOURNAL_SYSTEM) || PyModule_AddIntConstant(m, "SYSTEM_ONLY", SD_JOURNAL_SYSTEM_ONLY) || PyModule_AddStringConstant(m, "__version__", PACKAGE_VERSION)) { #if PY_MAJOR_VERSION >= 3 diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c index 7947df3a89..013a281eac 100644 --- a/src/shared/logs-show.c +++ b/src/shared/logs-show.c @@ -1010,7 +1010,7 @@ int show_journal_by_unit( _cleanup_journal_close_ sd_journal*j = NULL; int r; - int jflags = SD_JOURNAL_LOCAL_ONLY | system * SD_JOURNAL_SYSTEM_ONLY; + int jflags = SD_JOURNAL_LOCAL_ONLY | system * SD_JOURNAL_SYSTEM; assert(mode >= 0); assert(mode < _OUTPUT_MODE_MAX); diff --git a/src/systemd/sd-journal.h b/src/systemd/sd-journal.h index 5375d49963..cf105cde72 100644 --- a/src/systemd/sd-journal.h +++ b/src/systemd/sd-journal.h @@ -86,7 +86,9 @@ typedef struct sd_journal sd_journal; enum { SD_JOURNAL_LOCAL_ONLY = 1, SD_JOURNAL_RUNTIME_ONLY = 2, - SD_JOURNAL_SYSTEM_ONLY = 4 + SD_JOURNAL_SYSTEM = 4, + SD_JOURNAL_SYSTEM_ONLY = SD_JOURNAL_SYSTEM, /* deprecated */ + SD_JOURNAL_CURRENT_USER = 8, }; /* Wakeup event types */ |