]> git.netwichtig.de Git - user/henk/code/exim.git/blobdiff - src/src/functions.h
Fix $recipients expansion when used within ${run...}. Bug 3013
[user/henk/code/exim.git] / src / src / functions.h
index 37f0a57bc6e8412ae73f75da03c9e44c4d34826c..0b030e4fe2f7a0fb2ea9bd4113a86285a9df8b1b 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2022 */
+/* Copyright (c) The Exim Maintainers 2020 - 2023 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -54,6 +54,8 @@ extern uschar * tls_cert_fprt_sha256(void *);
 extern void    tls_clean_env(void);
 extern BOOL    tls_client_start(client_conn_ctx *, smtp_connect_args *,
                  void *, tls_support *, uschar **);
+extern BOOL    tls_client_adjunct_start(host_item *, client_conn_ctx *,
+                 const uschar *, uschar **);
 extern void    tls_client_creds_reload(BOOL);
 
 extern void    tls_close(void *, int);
@@ -398,9 +400,9 @@ extern const uschar *parse_quote_2047(const uschar *, int, const uschar *,
 extern const uschar *parse_date_time(const uschar *str, time_t *t);
 extern void priv_drop_temp(const uid_t, const gid_t);
 extern void priv_restore(void);
-extern int     vaguely_random_number(int);
-#ifndef DISABLE_TLS
-extern int     vaguely_random_number_fallback(int);
+#ifdef SUPPORT_PROXY
+extern BOOL    proxy_protocol_host(void);
+extern void    proxy_protocol_setup(void);
 #endif
 
 extern BOOL    queue_action(uschar *, int, uschar **, int, int);
@@ -560,7 +562,8 @@ extern gstring *string_append(gstring *, int, ...) WARN_UNUSED_RESULT;
 extern gstring *string_append_listele(gstring *, uschar, const uschar *) WARN_UNUSED_RESULT;
 extern gstring *string_append_listele_n(gstring *, uschar, const uschar *, unsigned) WARN_UNUSED_RESULT;
 extern gstring *string_append2_listele_n(gstring *, const uschar *, const uschar *, unsigned) WARN_UNUSED_RESULT;
-extern uschar *string_base62(unsigned long int);
+extern uschar *string_base62_32(unsigned long int);
+extern uschar *string_base62_64(unsigned long int);
 extern gstring *string_cat (gstring *, const uschar *     ) WARN_UNUSED_RESULT;
 extern gstring *string_catn(gstring *, const uschar *, int) WARN_UNUSED_RESULT;
 extern int     string_compare_by_pointer(const void *, const void *);
@@ -631,7 +634,7 @@ extern BOOL    transport_pass_socket(const uschar *, const uschar *, const uscha
                        );
 extern uschar *transport_rcpt_address(address_item *, BOOL);
 extern BOOL    transport_set_up_command(const uschar ***, const uschar *,
-                BOOL, int, address_item *, BOOL, const uschar *, uschar **);
+                unsigned, int, address_item *, const uschar *, uschar **);
 extern void    transport_update_waiting(host_item *, uschar *);
 extern BOOL    transport_write_block(transport_ctx *, uschar *, int, BOOL);
 extern void    transport_write_reset(int);
@@ -656,6 +659,10 @@ extern void    unspool_mbox(void);
 extern gstring *utf8_version_report(gstring *);
 #endif
 
+extern int     vaguely_random_number(int);
+#ifndef DISABLE_TLS
+extern int     vaguely_random_number_fallback(int);
+#endif
 extern int     verify_address(address_item *, FILE *, int, int, int, int,
                  uschar *, uschar *, BOOL *);
 extern int     verify_check_dnsbl(int, const uschar **, uschar **);
@@ -678,6 +685,12 @@ extern void    version_init(void);
 
 extern BOOL    write_chunk(transport_ctx *, uschar *, int);
 extern ssize_t write_to_fd_buf(int, const uschar *, size_t);
+extern uschar *wrap_header(const uschar *, unsigned, unsigned, const uschar *, unsigned);
+
+#ifdef EXPERIMENTAL_XCLIENT
+extern uschar * xclient_smtp_command(uschar *, int *, BOOL *);
+extern gstring * xclient_smtp_advertise_str(gstring *);
+#endif
 
 
 /******************************************************************************/
@@ -1154,10 +1167,32 @@ set_subdir_str(uschar * subdir_str, const uschar * name,
        int search_sequence)
 {
 subdir_str[0] = split_spool_directory == (search_sequence == 0)
-       ? name[5] : '\0';
+       ? name[MESSAGE_ID_TIME_LEN-1] : '\0';
 subdir_str[1] = '\0';
 }
 
+/******************************************************************************/
+/* Message-ID format transition knowlege */
+
+static inline BOOL
+is_new_message_id(const uschar * id)
+{
+return id[MESSAGE_ID_TIME_LEN + 1 + MESSAGE_ID_PID_LEN] == '-';
+}
+
+static inline BOOL
+is_old_message_id(const uschar * id)
+{
+return id[MESSAGE_ID_TIME_LEN + 1 + MESSAGE_ID_PID_LEN_OLD] == '-';
+}
+
+static inline unsigned
+spool_data_start_offset(const uschar * id)
+{
+if (is_old_message_id(id)) return SPOOL_DATA_START_OFFSET_OLD;
+return SPOOL_DATA_START_OFFSET;
+}
+
 /******************************************************************************/
 /* Time calculations */