summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile-man.am10
-rw-r--r--man/sd_journal_open.xml35
-rw-r--r--src/journal/journal-gatewayd.c2
-rw-r--r--src/journal/sd-journal.c45
-rw-r--r--src/python-systemd/_reader.c1
-rw-r--r--src/shared/logs-show.c2
-rw-r--r--src/systemd/sd-journal.h4
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 */