summaryrefslogtreecommitdiff
path: root/src/journal/journald-native.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2017-07-31 20:01:05 +0200
committerGitHub <noreply@github.com>2017-07-31 20:01:05 +0200
commit6b43d079a251f11ec70ac91579ecc24f3448b963 (patch)
tree9de58289d618e16a8e1ebab6769476bb9440f7fc /src/journal/journald-native.c
parent3a0bf6d6aa08a267aefd5d5620fb6bee2556affb (diff)
parent22e3a02b9d618bbebcf987bc1411acda367271ec (diff)
downloadsystemd-6b43d079a251f11ec70ac91579ecc24f3448b963.tar.gz
Merge pull request #6392 from poettering/journal-cache
add limited metadata caching to journald and other journal improvements
Diffstat (limited to 'src/journal/journald-native.c')
-rw-r--r--src/journal/journald-native.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/journal/journald-native.c b/src/journal/journald-native.c
index abd06b1adc..23afe59bd5 100644
--- a/src/journal/journald-native.c
+++ b/src/journal/journald-native.c
@@ -37,6 +37,7 @@
#include "memfd-util.h"
#include "parse-util.h"
#include "path-util.h"
+#include "process-util.h"
#include "selinux-util.h"
#include "socket-util.h"
#include "string-util.h"
@@ -142,6 +143,7 @@ static void server_process_entry_meta(
static int server_process_entry(
Server *s,
const void *buffer, size_t *remaining,
+ ClientContext *context,
const struct ucred *ucred,
const struct timeval *tv,
const char *label, size_t label_len) {
@@ -303,7 +305,7 @@ static int server_process_entry(
server_forward_wall(s, priority, identifier, message, ucred);
}
- server_dispatch_message(s, iovec, n, m, ucred, tv, label, label_len, NULL, priority, object_pid);
+ server_dispatch_message(s, iovec, n, m, context, tv, priority, object_pid);
finish:
for (j = 0; j < n; j++) {
@@ -329,16 +331,23 @@ void server_process_native_message(
const struct timeval *tv,
const char *label, size_t label_len) {
- int r;
size_t remaining = buffer_size;
+ ClientContext *context;
+ int r;
assert(s);
assert(buffer || buffer_size == 0);
+ if (ucred && pid_is_valid(ucred->pid)) {
+ r = client_context_get(s, ucred->pid, ucred, label, label_len, NULL, &context);
+ if (r < 0)
+ log_warning_errno(r, "Failed to retrieve credentials for PID " PID_FMT ", ignoring: %m", ucred->pid);
+ }
+
do {
r = server_process_entry(s,
(const uint8_t*) buffer + (buffer_size - remaining), &remaining,
- ucred, tv, label, label_len);
+ context, ucred, tv, label, label_len);
} while (r == 0);
}