X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/8768d5483a5894400ae1f70cda1beb44ed9b087c..b10c87b38c:/src/src/macros.h diff --git a/src/src/macros.h b/src/src/macros.h index fd53de883..e3f1f4c28 100644 --- a/src/src/macros.h +++ b/src/src/macros.h @@ -278,7 +278,9 @@ and some additional values are used only by non-driver functions. OK, FAIL, DEFER, ERROR, and FAIL_FORCED are also declared in local_scan.h for use in the local_scan() function and in ${dlfunc loaded functions. Do not -change them unilaterally. */ +change them unilaterally. + +Use rc_names[] for debug strings. */ #define OK 0 /* Successful match */ #define DEFER 1 /* Defer - some problem */ @@ -337,11 +339,11 @@ platforms, but this ensures bit vectors always work the same way. */ /* This macro is for single-word bit vectors: the debug selector, and the first word of the log selector. */ -#define BIT(n) (1 << (n)) +#define BIT(n) (1U << (n)) /* And these are for multi-word vectors. */ -#define BITWORD(n) ( (n) / BITWORDSIZE) -#define BITMASK(n) (1 << (n) % BITWORDSIZE) +#define BITWORD(n) ( (n) / BITWORDSIZE) +#define BITMASK(n) (1U << (n) % BITWORDSIZE) #define BIT_CLEAR(s,z,n) ((s)[BITWORD(n)] &= ~BITMASK(n)) #define BIT_SET(s,z,n) ((s)[BITWORD(n)] |= BITMASK(n)) @@ -362,6 +364,7 @@ masks, alternating between sequential bit index and corresponding mask. */ /* Options bits for debugging. DEBUG_BIT() declares both a bit index and the corresponding mask. Di_all is a special value recognized by decode_bits(). +These must match the debug_options table in globals.c . Exim's code assumes in a number of places that the debug_selector is one word, and this is exposed in the local_scan ABI. The D_v and D_local_scan bit @@ -375,12 +378,12 @@ enum { Di_local_scan = 1, Di_iota = IOTA_INIT(2), - DEBUG_BIT(acl), + DEBUG_BIT(acl), /* 2 */ DEBUG_BIT(auth), DEBUG_BIT(deliver), DEBUG_BIT(dns), DEBUG_BIT(dnsbl), - DEBUG_BIT(exec), + DEBUG_BIT(exec), /* 7 */ DEBUG_BIT(expand), DEBUG_BIT(filter), DEBUG_BIT(hints_lookup), @@ -388,14 +391,15 @@ enum { DEBUG_BIT(ident), DEBUG_BIT(interface), DEBUG_BIT(lists), - DEBUG_BIT(load), + DEBUG_BIT(load), /* 15 */ DEBUG_BIT(lookup), DEBUG_BIT(memory), + DEBUG_BIT(noutf8), DEBUG_BIT(pid), DEBUG_BIT(process_info), DEBUG_BIT(queue_run), DEBUG_BIT(receive), - DEBUG_BIT(resolver), + DEBUG_BIT(resolver), /* 23 */ DEBUG_BIT(retry), DEBUG_BIT(rewrite), DEBUG_BIT(route), @@ -403,7 +407,7 @@ enum { DEBUG_BIT(tls), DEBUG_BIT(transport), DEBUG_BIT(uid), - DEBUG_BIT(verify), + DEBUG_BIT(verify), /* 31 */ }; /* Multi-bit debug masks */ @@ -412,6 +416,7 @@ enum { #define D_any (D_all & \ ~(D_v | \ + D_noutf8 | \ D_pid | \ D_timestamp) ) @@ -422,6 +427,7 @@ enum { D_load | \ D_local_scan | \ D_memory | \ + D_noutf8 | \ D_pid | \ D_timestamp | \ D_resolver)) @@ -429,11 +435,12 @@ enum { /* Options bits for logging. Those that have values < BITWORDSIZE can be used in calls to log_write(). The others are put into later words in log_selector and are only ever tested independently, so they do not need bit mask -declarations. The Li_all value is recognized specially by decode_bits(). */ +declarations. The Li_all value is recognized specially by decode_bits(). +Add also to log_options[] when creating new ones. */ #define LOG_BIT(name) Li_##name = IOTA(Li_iota), L_##name = BIT(Li_##name) -enum { +enum logbit { Li_all = -1, Li_iota = IOTA_INIT(0), @@ -466,6 +473,8 @@ enum { Li_incoming_interface, Li_incoming_port, Li_millisec, + Li_msg_id, + Li_msg_id_created, Li_outgoing_interface, Li_outgoing_port, Li_pid, @@ -487,6 +496,7 @@ enum { Li_tls_certificate_verified, Li_tls_cipher, Li_tls_peerdn, + Li_tls_resumption, Li_tls_sni, Li_unknown_in_list, @@ -551,19 +561,20 @@ table exim_errstrings[] in log.c */ #ifdef SUPPORT_I18N # define ERRNO_UTF8_FWD (-49) /* target not supporting SMTPUTF8 */ #endif -#if defined(SUPPORT_TLS) && defined(EXPERIMENTAL_REQUIRETLS) -# define ERRNO_REQUIRETLS (-50) /* REQUIRETLS session not started */ -#endif + /* -50 free for re-use */ /* These must be last, so all retry deferments can easily be identified */ #define ERRNO_RETRY_BASE (-51) /* Base to test against */ #define ERRNO_RRETRY (-51) /* Not time for routing */ + +#define ERRNO_WARN_BASE (-52) /* Base to test against */ #define ERRNO_LRETRY (-52) /* Not time for local delivery */ #define ERRNO_HRETRY (-53) /* Not time for any remote host */ #define ERRNO_LOCAL_ONLY (-54) /* Local-only delivery */ #define ERRNO_QUEUE_DOMAIN (-55) /* Domain in queue_domains */ #define ERRNO_TRETRY (-56) /* Transport concurrency limit */ +#define ERRNO_EVENT (-57) /* Event processing request alternate response */ @@ -1010,19 +1021,15 @@ enum { FILTER_UNSET, FILTER_FORWARD, FILTER_EXIM, FILTER_SIEVE }; /* Codes for ESMTP facilities offered by peer */ -#define OPTION_TLS BIT(0) -#define OPTION_IGNQ BIT(1) -#define OPTION_PRDR BIT(2) -#define OPTION_UTF8 BIT(3) -#define OPTION_DSN BIT(4) -#define OPTION_PIPE BIT(5) -#define OPTION_SIZE BIT(6) -#define OPTION_CHUNKING BIT(7) -#define OPTION_REQUIRETLS BIT(8) - -/* Codes for tls_requiretls requests (usually by sender) */ - -#define REQUIRETLS_MSG BIT(0) /* REQUIRETLS onward use */ +#define OPTION_TLS BIT(0) +#define OPTION_IGNQ BIT(1) +#define OPTION_PRDR BIT(2) +#define OPTION_UTF8 BIT(3) +#define OPTION_DSN BIT(4) +#define OPTION_PIPE BIT(5) +#define OPTION_SIZE BIT(6) +#define OPTION_CHUNKING BIT(7) +#define OPTION_EARLY_PIPE BIT(8) /* Argument for *_getc */ @@ -1043,4 +1050,50 @@ enum { FILTER_UNSET, FILTER_FORWARD, FILTER_EXIM, FILTER_SIEVE }; #define TLS_SHUTDOWN_WAIT 2 +#ifdef COMPILE_UTILITY +# define ALARM(seconds) alarm(seconds); +# define ALARM_CLR(seconds) alarm(seconds); +#else +/* For debugging of odd alarm-signal problems, stash caller info while the +alarm is active. Clear it down on cancelling the alarm so we can tell there +should not be one active. */ + +# define ALARM(seconds) \ + debug_selector & D_any \ + ? (sigalarm_setter = CUS __FUNCTION__, alarm(seconds)) : alarm(seconds); +# define ALARM_CLR(seconds) \ + debug_selector & D_any \ + ? (sigalarm_setter = NULL, alarm(seconds)) : alarm(seconds); +#endif + +#define AUTHS_REGEX US"\\n250[\\s\\-]AUTH\\s+([\\-\\w \\t]+)(?:\\n|$)" + +#define EARLY_PIPE_FEATURE_NAME "X_PIPE_CONNECT" +#define EARLY_PIPE_FEATURE_LEN 14 + + +/* Flags for auth_client_item() */ + +#define AUTH_ITEM_FIRST BIT(0) +#define AUTH_ITEM_LAST BIT(1) +#define AUTH_ITEM_IGN64 BIT(2) + + +/* Flags for tls_{in,out}_resumption */ +#define RESUME_SUPPORTED BIT(0) +#define RESUME_CLIENT_REQUESTED BIT(1) +#define RESUME_CLIENT_SUGGESTED BIT(2) +#define RESUME_SERVER_TICKET BIT(3) +#define RESUME_USED BIT(4) + +#define RESUME_DECODE_STRING \ + US"not requested or offered : 0x02 :client requested, no server ticket" \ + ": 0x04 : 0x05 : 0x06 :client offered session, no server action" \ + ": 0x08 :no client request: 0x0A :client requested new ticket, server provided" \ + ": 0x0C :client offered session, not used: 0x0E :client offered session, server only provided new ticket" \ + ": 0x10 :session resumed unasked: 0x12 :session resumed unasked" \ + ": 0x14 : 0x15 : 0x16 :session resumed" \ + ": 0x18 :session resumed unasked: 0x1A :session resumed unasked" \ + ": 0x1C :session resumed: 0x1E :session resumed, also new ticket" + /* End of macros.h */