* Exim - an Internet mail transport agent *
*************************************************/
+/* Copyright (c) The Exim maintainers 2020 - 2023 */
/* Copyright (c) University of Cambridge 1995 - 2020 */
-/* Copyright (c) The Exim maintainers 2020 */
/* See the file NOTICE for conditions of use and distribution. */
+/* SPDX-License-Identifier: GPL-2.0-or-later */
#include "../exim.h"
Returns: OK, FAIL, or DEFER
*/
-void
-open_logs(void);
-
static int
appendfile_transport_setup(transport_instance *tblock, address_item *addrlist,
transport_feedback *dummy, uid_t uid, gid_t gid, uschar **errmsg)
uschar *q = ob->quota;
double default_value = 0.0;
-addrlist = addrlist; /* Keep picky compilers happy */
-dummy = dummy;
-uid = uid;
-gid = gid;
-
-/* we can't wait until we're not privileged anymore */
-open_logs();
-
if (ob->expand_maildir_use_size_file)
ob->maildir_use_size_file = expand_check_condition(ob->expand_maildir_use_size_file,
US"`maildir_use_size_file` in transport", tblock->name);
*/
static void
-notify_comsat(uschar *user, off_t offset)
+notify_comsat(const uschar * user, off_t offset)
{
struct servent *sp;
host_item host;
{
pcre2_match_data * md = pcre2_match_data_create(2, pcre_gen_ctx);
int rc = pcre2_match(re, (PCRE2_SPTR)name, PCRE2_ZERO_TERMINATED,
- 0, 0, md, pcre_mtc_ctx);
+ 0, 0, md, pcre_gen_mtc_ctx);
PCRE2_SIZE * ovec = pcre2_get_ovector_pointer(md);
if ( rc >= 0
&& (rc = pcre2_get_ovector_count(md)) >= 2)
DEBUG(D_transport)
debug_printf("check_dir_size: size from %s is " OFF_T_FMT "\n", name,
size);
+ /* pcre2_match_data_free(md); gen ctx needs no free */
continue;
}
}
+ /* pcre2_match_data_free(md); gen ctx needs no free */
DEBUG(D_transport)
debug_printf("check_dir_size: regex did not match %s\n", name);
}
if (is_tainted(path))
{
DEBUG(D_transport) debug_printf("de-tainting path '%s'\n", path);
- path = string_copy_taint(path, FALSE);
+ path = string_copy_taint(path, GET_UNTAINTED);
}
if (is_tainted(path)) goto tainted_ret_panic;
if (ob->create_file == create_belowhome)
{
DEBUG(D_transport) debug_printf("de-tainting path '%s'\n", path);
- path = string_copy_taint(path, FALSE);
+ path = string_copy_taint(path, GET_UNTAINTED);
}
else
goto tainted_ret_panic;
if (ob->quota_value > 0 || THRESHOLD_CHECK || ob->maildir_use_size_file)
{
- PCRE2_SIZE offset;
- int err;
-
/* Compile the regex if there is one. */
if (ob->quota_size_regex)
{
- if (!(re = pcre2_compile((PCRE2_SPTR)ob->quota_size_regex,
- PCRE2_ZERO_TERMINATED, PCRE_COPT, &err, &offset, pcre_cmp_ctx)))
- {
- uschar errbuf[128];
- pcre2_get_error_message(err, errbuf, sizeof(errbuf));
- addr->message = string_sprintf("appendfile: regular expression "
- "error: %s at offset %ld while compiling %s", errbuf, (long)offset,
- ob->quota_size_regex);
+ if (!(re = regex_compile(ob->quota_size_regex,
+ MCS_NOFLAGS, &addr->message, pcre_gen_cmp_ctx)))
return FALSE;
- }
+
DEBUG(D_transport) debug_printf("using regex for file sizes: %s\n",
ob->quota_size_regex);
}
if (ob->maildir_use_size_file)
{
const pcre2_code * dir_regex = NULL;
- PCRE2_SIZE offset;
- int err;
if (ob->maildir_dir_regex)
{
int check_path_len = Ustrlen(check_path);
- if (!(dir_regex = pcre2_compile((PCRE2_SPTR)ob->maildir_dir_regex,
- PCRE2_ZERO_TERMINATED, PCRE_COPT, &err, &offset, pcre_cmp_ctx)))
- {
- uschar errbuf[128];
- pcre2_get_error_message(err, errbuf, sizeof(errbuf));
- addr->message = string_sprintf("appendfile: regular expression "
- "error: %s at offset %ld while compiling %s", errbuf, (long)offset,
- ob->maildir_dir_regex);
+ if (!(dir_regex = regex_compile(ob->maildir_dir_regex,
+ MCS_NOFLAGS, &addr->message, pcre_gen_cmp_ctx)))
return FALSE;
- }
DEBUG(D_transport)
debug_printf("using regex for maildir directory selection: %s\n",
else
{
- FILE *env_file;
+ FILE * env_file;
mailstore_basename = string_sprintf("%s/%s-%s", path, message_id,
- string_base62((long int)getpid()));
+ string_base62_64((long int)getpid()));
DEBUG(D_transport)
debug_printf("delivering in mailstore format in %s\n", path);
uschar *iptr = expand_string(nametag);
if (iptr)
{
- uschar *etag = store_get(Ustrlen(iptr) + 2, is_tainted(iptr));
+ uschar *etag = store_get(Ustrlen(iptr) + 2, iptr);
uschar *optr = etag;
for ( ; *iptr; iptr++)
if (mac_isgraph(*iptr) && *iptr != '/')