log2journal-rewrite.c 1.6 KB

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