X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/54a2a2a9983913a91ccef3aac107a159434a4714..a85c067ba6c6940512cf57ec213277a370d87e70:/src/src/transports/tf_maildir.c diff --git a/src/src/transports/tf_maildir.c b/src/src/transports/tf_maildir.c index bcd091b75..925b8fac0 100644 --- a/src/src/transports/tf_maildir.c +++ b/src/src/transports/tf_maildir.c @@ -3,7 +3,9 @@ *************************************************/ /* Copyright (c) University of Cambridge 1995 - 2018 */ +/* Copyright (c) The Exim Maintainers 2020 - 2021 */ /* See the file NOTICE for conditions of use and distribution. */ +/* SPDX-License-Identifier: GPL-2.0-only */ /* Functions in support of the use of maildirsize files for handling quotas in maildir directories. Some of the rules are a bit baroque: @@ -139,24 +141,17 @@ for (i = 0; i < 4; i++) /* If the basic path matches maildirfolder_create_regex, we are dealing with a subfolder, and should ensure that a maildirfolder file exists. */ -if (maildirfolder_create_regex != NULL) +if (maildirfolder_create_regex) { - const uschar *error; - int offset; - const pcre *regex; + const pcre2_code * re; DEBUG(D_transport) debug_printf("checking for maildirfolder requirement\n"); - if (!(regex = pcre_compile(CS maildirfolder_create_regex, PCRE_COPT, - CCSS &error, &offset, NULL))) - { - addr->message = string_sprintf("appendfile: regular expression " - "error: %s at offset %d while compiling %s", error, offset, - maildirfolder_create_regex); + if (!(re = regex_compile(maildirfolder_create_regex, + MCS_NOFLAGS, &addr->message, pcre_gen_cmp_ctx))) return FALSE; - } - if (pcre_exec(regex, NULL, CS path, Ustrlen(path), 0, 0, NULL, 0) >= 0) + if (regex_match(re, path, -1, NULL)) { uschar *fname = string_sprintf("%s/maildirfolder", path); if (Ustat(fname, &statbuf) == 0) @@ -249,7 +244,7 @@ Returns: the sum of the sizes of the messages off_t maildir_compute_size(uschar *path, int *filecount, time_t *latest, - const pcre *regex, const pcre *dir_regex, BOOL timestamp_only) + const pcre2_code *regex, const pcre2_code *dir_regex, BOOL timestamp_only) { DIR *dir; off_t sum = 0; @@ -268,8 +263,7 @@ for (struct dirent *ent; ent = readdir(dir); ) scan. We do the regex match first, because that avoids a stat() for names we aren't interested in. */ - if (dir_regex != NULL && - pcre_exec(dir_regex, NULL, CS name, Ustrlen(name), 0, 0, NULL, 0) < 0) + if (dir_regex && !regex_match(dir_regex, name, -1, NULL)) { DEBUG(D_transport) debug_printf("skipping %s/%s: dir_regex does not match\n", path, name); @@ -357,7 +351,7 @@ Returns: >=0 a file descriptor for an open maildirsize file int maildir_ensure_sizefile(uschar *path, appendfile_transport_options_block *ob, - const pcre *regex, const pcre *dir_regex, off_t *returned_size, + const pcre2_code *regex, const pcre2_code *dir_regex, off_t *returned_size, int *returned_filecount) { int count, fd;