1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
// SPDX-License-Identifier: GPL-3.0-or-later
#include "log2journal.h"
void injection_cleanup(INJECTION *inj) {
hashed_key_cleanup(&inj->key);
replace_pattern_cleanup(&inj->value);
}
static inline bool log_job_injection_replace(INJECTION *inj, const char *key, size_t key_len, const char *value, size_t value_len) {
if(key_len > JOURNAL_MAX_KEY_LEN)
log2stderr("WARNING: injection key '%.*s' is too long for journal. Will be truncated.", (int)key_len, key);
if(value_len > JOURNAL_MAX_VALUE_LEN)
log2stderr("WARNING: injection value of key '%.*s' is too long for journal. Will be truncated.", (int)key_len, key);
hashed_key_len_set(&inj->key, key, key_len);
char *v = strndupz(value, value_len);
bool ret = replace_pattern_set(&inj->value, v);
freez(v);
return ret;
}
bool log_job_injection_add(LOG_JOB *jb, const char *key, size_t key_len, const char *value, size_t value_len, bool unmatched) {
if (unmatched) {
if (jb->unmatched.injections.used >= MAX_INJECTIONS) {
log2stderr("Error: too many unmatched injections. You can inject up to %d lines.", MAX_INJECTIONS);
return false;
}
}
else {
if (jb->injections.used >= MAX_INJECTIONS) {
log2stderr("Error: too many injections. You can inject up to %d lines.", MAX_INJECTIONS);
return false;
}
}
bool ret;
if (unmatched) {
ret = log_job_injection_replace(&jb->unmatched.injections.keys[jb->unmatched.injections.used++],
key, key_len, value, value_len);
} else {
ret = log_job_injection_replace(&jb->injections.keys[jb->injections.used++],
key, key_len, value, value_len);
}
return ret;
}
|