master
c 52 lines 1.6 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #include "log2journal.h"
4
5 void rewrite_cleanup(REWRITE *rw) {
6 hashed_key_cleanup(&rw->key);
7
8 if(rw->flags & RW_MATCH_PCRE2)
9 search_pattern_cleanup(&rw->match_pcre2);
10
11 else if(rw->flags & RW_MATCH_NON_EMPTY)
12 replace_pattern_cleanup(&rw->match_non_empty);
13
14 replace_pattern_cleanup(&rw->value);
15 rw->flags = RW_NONE;
16 }
17
18 bool log_job_rewrite_add(LOG_JOB *jb, const char *key, RW_FLAGS flags, const char *search_pattern, const char *replace_pattern) {
19 if(jb->rewrites.used >= MAX_REWRITES) {
20 l2j_log("Error: too many rewrites. You can add up to %d rewrite rules.", MAX_REWRITES);
21 return false;
22 }
23
24 if((flags & (RW_MATCH_PCRE2|RW_MATCH_NON_EMPTY)) && (!search_pattern || !*search_pattern)) {
25 l2j_log("Error: rewrite for key '%s' does not specify a search pattern.", key);
26 return false;
27 }
28
29 REWRITE *rw = &jb->rewrites.array[jb->rewrites.used++];
30 rw->flags = flags;
31
32 hashed_key_set(&rw->key, key, -1);
33
34 if((flags & RW_MATCH_PCRE2) && !search_pattern_set(&rw->match_pcre2, search_pattern, strlen(search_pattern))) {
35 rewrite_cleanup(rw);
36 jb->rewrites.used--;
37 return false;
38 }
39 else if((flags & RW_MATCH_NON_EMPTY) && !replace_pattern_set(&rw->match_non_empty, search_pattern)) {
40 rewrite_cleanup(rw);
41 jb->rewrites.used--;
42 return false;
43 }
44
45 if(replace_pattern && *replace_pattern && !replace_pattern_set(&rw->value, replace_pattern)) {
46 rewrite_cleanup(rw);
47 jb->rewrites.used--;
48 return false;
49 }
50
51 return true;
52 }