diff options
author | Lennart Poettering <lennart@poettering.net> | 2017-07-31 20:01:05 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-31 20:01:05 +0200 |
commit | 6b43d079a251f11ec70ac91579ecc24f3448b963 (patch) | |
tree | 9de58289d618e16a8e1ebab6769476bb9440f7fc /src/journal/journald-native.c | |
parent | 3a0bf6d6aa08a267aefd5d5620fb6bee2556affb (diff) | |
parent | 22e3a02b9d618bbebcf987bc1411acda367271ec (diff) | |
download | systemd-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.c | 15 |
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); } |