X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/cb45303cf2a8d9922702f13db42b3285c48f6aa7..a85c067ba6c6940512cf57ec213277a370d87e70:/src/src/functions.h diff --git a/src/src/functions.h b/src/src/functions.h index 8badd90a4..be1fae00d 100644 --- a/src/src/functions.h +++ b/src/src/functions.h @@ -2,9 +2,10 @@ * Exim - an Internet mail transport agent * *************************************************/ +/* Copyright (c) The Exim Maintainers 2020 - 2022 */ /* 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 */ /* Prototypes for functions that appear in various modules. Gathered together @@ -100,6 +101,7 @@ extern acl_block *acl_read(uschar *(*)(void), uschar **); extern int acl_check(int, uschar *, uschar *, uschar **, uschar **); extern uschar *acl_current_verb(void); extern int acl_eval(int, uschar *, uschar **, uschar **); +extern uschar *acl_standalone_setvar(const uschar *); extern tree_node *acl_var_create(uschar *); extern void acl_var_write(uschar *, uschar *, void *); @@ -182,12 +184,17 @@ extern BOOL cutthrough_predata(void); extern void release_cutthrough_connection(const uschar *); extern void daemon_go(void); +#ifndef COMPILE_UTILITY +extern ssize_t daemon_client_sockname(struct sockaddr_un *, uschar **); +extern ssize_t daemon_notifier_sockname(struct sockaddr_un *); +#endif #ifdef EXPERIMENTAL_DCC extern int dcc_process(uschar **); #endif -extern void debug_logging_activate(uschar *, uschar *); +extern void debug_logging_activate(const uschar *, const uschar *); +extern void debug_logging_from_spool(const uschar *); extern void debug_logging_stop(BOOL); extern void debug_print_argv(const uschar **); extern void debug_print_ids(uschar *); @@ -201,7 +208,7 @@ extern void debug_print_socket(int); extern void debug_trigger_fire(void); extern void decode_bits(unsigned int *, size_t, int *, - uschar *, bit_table *, int, uschar *, int); + const uschar *, bit_table *, int, uschar *, int); extern void delete_pid_file(void); extern void deliver_local(address_item *, BOOL); extern address_item *deliver_make_addr(uschar *, BOOL); @@ -259,6 +266,7 @@ extern int exp_bool(address_item *addr, extern BOOL expand_check_condition(uschar *, uschar *, uschar *); extern uschar *expand_file_big_buffer(const uschar *); extern uschar *expand_string(uschar *); /* public, cannot make const */ +extern const uschar *expand_string_2(const uschar *, BOOL *); extern const uschar *expand_cstring(const uschar *); /* ... so use this one */ extern uschar *expand_getkeyed(const uschar *, const uschar *); @@ -323,7 +331,7 @@ extern int ip_streamsocket(const uschar *, uschar **, int, host_item *); extern int ipv6_nmtoa(int *, uschar *); extern uschar *local_part_quote(uschar *); -extern int log_open_as_exim(uschar * const); +extern int log_open_as_exim(const uschar * const); extern void log_close_all(void); extern macro_item * macro_create(const uschar *, const uschar *, BOOL); @@ -331,7 +339,7 @@ extern BOOL macro_read_assignment(uschar *); extern uschar *macros_expand(int, int *, BOOL *); extern void mainlog_close(void); #ifdef WITH_CONTENT_SCAN -extern int malware(const uschar *, int); +extern int malware(const uschar *, BOOL, int); extern int malware_in_file(uschar *); extern void malware_init(void); extern gstring * malware_show_supported(gstring *); @@ -344,7 +352,7 @@ extern int match_check_list(const uschar **, int, tree_node **, unsigned int const uschar *, const uschar **); extern int match_isinlist(const uschar *, const uschar **, int, tree_node **, unsigned int *, int, BOOL, const uschar **); -extern int match_check_string(const uschar *, const uschar *, int, BOOL, BOOL, BOOL, +extern int match_check_string(const uschar *, const uschar *, int, mcs_flags, const uschar **); extern void message_start(void); @@ -359,7 +367,7 @@ extern int mime_acl_check(uschar *acl, FILE *f, struct mime_boundary_context *, uschar **, uschar **); extern int mime_decode(const uschar **); extern ssize_t mime_decode_base64(FILE *, FILE *, uschar *); -extern int mime_regex(const uschar **); +extern int mime_regex(const uschar **, BOOL); extern void mime_set_anomaly(int); #endif extern uschar *moan_check_errorcopy(uschar *); @@ -419,7 +427,7 @@ extern void readconf_main(BOOL); extern void readconf_options_from_list(optionlist *, unsigned, const uschar *, uschar *); extern BOOL readconf_print(const uschar *, uschar *, BOOL); extern uschar *readconf_printtime(int); -extern uschar *readconf_readname(uschar *, int, uschar *); +extern const uschar *readconf_readname(uschar *, int, const uschar *); extern int readconf_readtime(const uschar *, int, BOOL); extern void readconf_rest(void); extern uschar *readconf_retry_error(const uschar *, const uschar *, int *, int *); @@ -432,11 +440,15 @@ extern BOOL receive_msg(BOOL); extern int_eximarith_t receive_statvfs(BOOL, int *); extern void receive_swallow_smtp(void); #ifdef WITH_CONTENT_SCAN -extern int regex(const uschar **); +extern int regex(const uschar **, BOOL); +extern void regex_vars_clear(void); #endif +extern void regex_at_daemon(const uschar *); extern BOOL regex_match(const pcre2_code *, const uschar *, int, uschar **); extern BOOL regex_match_and_setup(const pcre2_code *, const uschar *, int, int); -extern const pcre2_code *regex_must_compile(const uschar *, BOOL, BOOL); +extern const pcre2_code *regex_compile(const uschar *, mcs_flags, uschar **, + pcre2_compile_context *); +extern const pcre2_code *regex_must_compile(const uschar *, mcs_flags, BOOL); extern void retry_add_item(address_item *, uschar *, int); extern BOOL retry_check_address(const uschar *, host_item *, uschar *, BOOL, uschar **, uschar **); @@ -507,7 +519,7 @@ extern BOOL smtp_hasc(void); extern int smtp_handle_acl_fail(int, int, uschar *, uschar *); extern void smtp_log_no_mail(void); extern void smtp_message_code(uschar **, int *, uschar **, uschar **, BOOL); -extern void smtp_proxy_tls(void *, uschar *, size_t, int *, int) NORETURN; +extern void smtp_proxy_tls(void *, uschar *, size_t, int *, int, const uschar *) NORETURN; extern BOOL smtp_read_response(void *, uschar *, int, int, int); extern void *smtp_reset(void *); extern void smtp_respond(uschar *, int, BOOL, uschar *); @@ -537,6 +549,7 @@ extern int stdin_ferror(void); extern BOOL stdin_hasc(void); extern int stdin_ungetc(int); +extern void stackdump(void); extern void store_exit(void); extern void store_init(void); extern void store_writeprotect(int); @@ -788,7 +801,10 @@ static inline uschar * string_copyn_taint_trc(const uschar * s, unsigned len, const void * proto_mem, const char * func, int line) { -uschar * ss = store_get_3(len + 1, proto_mem, func, line); +uschar * ss; +unsigned slen = Ustrlen(s); +if (len > slen) len = slen; +ss = store_get_3(len + 1, proto_mem, func, line); memcpy(ss, s, len); ss[len] = '\0'; return ss; @@ -1217,6 +1233,7 @@ pid_t pid; DEBUG(D_any) debug_printf("%s forking for %s\n", process_purpose, purpose); if ((pid = fork()) == 0) { + f.daemon_listen = FALSE; process_purpose = purpose; DEBUG(D_any) debug_printf("postfork: %s\n", purpose); } @@ -1264,10 +1281,10 @@ HDEBUG(D_transport|D_acl|D_v) debug_printf_indent(" SMTP%c> %s\n", # ifndef DISABLE_CLIENT_CMD_LOG { + int len = Ustrcspn(buf, " \n"); int old_pool = store_pool; store_pool = POOL_PERM; /* Main pool ACL allocations eg. callouts get released */ - client_cmd_log = string_append_listele_n(client_cmd_log, ':', buf, - Ustrcspn(buf, " \n")); + client_cmd_log = string_append_listele_n(client_cmd_log, ':', buf, MIN(len, 8)); if (mode == SCMD_BUFFER) { client_cmd_log = string_catn(client_cmd_log, US"|", 1);