X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/c4efe382b151f36a90213f8a3e629d4290ea22a8..15a68d6eb3fb6f20f8ee0a7bf97e665d6c952a60:/src/exim_monitor/em_log.c diff --git a/src/exim_monitor/em_log.c b/src/exim_monitor/em_log.c index 1e1dc7c04..49f649d7e 100644 --- a/src/exim_monitor/em_log.c +++ b/src/exim_monitor/em_log.c @@ -3,7 +3,9 @@ *************************************************/ /* Copyright (c) University of Cambridge 1995 - 2018 */ +/* Copyright (c) The Exim Maintainters 2021 - 2022 */ /* See the file NOTICE for conditions of use and distribution. */ +/* SPDX-License-Identifier: GPL-2.0-or-later */ /* This module contains code for scanning the main log, extracting information from it, and displaying a "tail". */ @@ -106,7 +108,9 @@ length = Ustrlen(buffer); #ifdef ANONYMIZE { uschar *p = buffer + 9; - if (p[6] == '-' && p[13] == '-') p += 17; + if ( p[MESSAGE_ID_TIME_LEN] == '-' + && p[MESSAGE_ID_TIME_LEN + MESSAGE_ID_PID_LEN + 1] == '-') + p += MESSAGE_ID_LENGTH + 1; while (p < buffer + length) { @@ -229,7 +233,7 @@ if (LOG != NULL) uschar *p = buffer; rmark reset_point; int length = Ustrlen(buffer); - int i; + pcre2_match_data * md = pcre2_match_data_create(1, NULL); /* Skip totally blank lines (paranoia: there shouldn't be any) */ @@ -246,27 +250,25 @@ if (LOG != NULL) stripchart is the queue length, which is handled elsewhere, and the 1st may the a size monitor. */ - for (i = stripchart_varstart; i < stripchart_number; i++) - { - if (pcre_exec(stripchart_regex[i], NULL, CS buffer, length, 0, PCRE_EOPT, - NULL, 0) >= 0) + for (int i = stripchart_varstart; i < stripchart_number; i++) + if (pcre2_match(stripchart_regex[i], (PCRE2_SPTR)buffer, length, + 0, PCRE_EOPT, md, NULL) >= 0) stripchart_total[i]++; - } /* Munge the log entry and display shortened form on one line. We omit the date and show only the time. Remove any time zone offset. Take note of the presence of [pid]. */ - if (pcre_exec(yyyymmdd_regex,NULL,CS buffer,length,0,PCRE_EOPT,NULL,0) >= 0) + if (pcre2_match(yyyymmdd_regex, (PCRE2_SPTR) buffer, length, 0, PCRE_EOPT, + md, NULL) >= 0) { int pidlength = 0; - if ((buffer[20] == '+' || buffer[20] == '-') && - isdigit(buffer[21]) && buffer[25] == ' ') + if ( (buffer[20] == '+' || buffer[20] == '-') + && isdigit(buffer[21]) && buffer[25] == ' ') memmove(buffer + 20, buffer + 26, Ustrlen(buffer + 26) + 1); if (buffer[20] == '[') - { - while (Ustrchr("[]0123456789", buffer[20+pidlength++]) != NULL); - } + while (Ustrchr("[]0123456789", buffer[20+pidlength++]) != NULL) + ; id = string_copyn(buffer + 20 + pidlength, MESSAGE_ID_LENGTH); show_log("%s", buffer+11); } @@ -275,6 +277,7 @@ if (LOG != NULL) id = US""; show_log("%s", buffer); } + pcre2_match_data_free(md); /* Deal with frozen and unfrozen messages */ @@ -291,22 +294,20 @@ if (LOG != NULL) if ((p = Ustrstr(buffer, "==")) != NULL) { - queue_item *qq = find_queue(id, queue_noop, 0); - if (qq != NULL) + queue_item * qq = find_queue(id, queue_noop, 0); + if (qq) { dest_item *d; uschar *q, *r; p += 2; while (isspace(*p)) p++; q = p; - while (*p != 0 && !isspace(*p)) + while (*p && !isspace(*p)) { if (*p++ != '\"') continue; - while (*p != 0) - { + while (*p) if (*p == '\\') p += 2; - else if (*p++ == '\"') break; - } + else if (*p++ == '\"') break; } *p++ = 0; if ((r = strstric(q, qualify_domain, FALSE)) != NULL &&