X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/9c4e8f608a0cb5dc688e3c8ac3bc13ef3cb42620..0a49a7a4f1090b6f1ce1d0f9d969804c9226b53e:/src/src/macros.h diff --git a/src/src/macros.h b/src/src/macros.h index 2eef204a3..4db115533 100644 --- a/src/src/macros.h +++ b/src/src/macros.h @@ -1,10 +1,10 @@ -/* $Cambridge: exim/src/src/macros.h,v 1.12 2005/04/07 10:54:54 ph10 Exp $ */ +/* $Cambridge: exim/src/src/macros.h,v 1.39 2009/11/16 19:50:37 nm4 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2005 */ +/* Copyright (c) University of Cambridge 1995 - 2009 */ /* See the file NOTICE for conditions of use and distribution. */ @@ -15,6 +15,12 @@ a string as a text string. This is sometimes useful for debugging output. */ #define mac_expanded_string(s) mac_string(s) +/* When running in the test harness, the load average is fudged. */ + +#define OS_GETLOADAVG() \ + (running_in_test_harness? (test_harness_load_avg += 10) : os_getloadavg()) + + /* The address_item structure has a word full of 1-bit flags. These macros manipulate them. */ @@ -97,6 +103,10 @@ don't make the file descriptors two-way. */ #define DEBUG(x) if ((debug_selector & (x)) != 0) #define HDEBUG(x) if (host_checking || (debug_selector & (x)) != 0) +/* The default From: text for DSNs */ + +#define DEFAULT_DSN_FROM "Mail Delivery System " + /* The size of the vector for saving/restoring address expansion pointers while verifying. This has to be explicit because it is referenced in more than one source module. */ @@ -127,6 +137,10 @@ enough to hold all the headers from a normal kind of message. */ #define LOG_BUFFER_SIZE 8192 +/* The size of the circular buffer that remembers recent SMTP commands */ + +#define SMTP_HBUFF_SIZE 20 + /* The initial size of a big buffer for use in various places. It gets put into big_buffer_size and in some circumstances increased. It should be at least as long as the maximum path length. */ @@ -160,11 +174,6 @@ record. */ #define WAIT_NAME_MAX 50 -/* The numbers of connection and message variables for ACLs */ - -#define ACL_C_MAX 10 -#define ACL_M_MAX 10 - /* Fixed option values for all PCRE functions */ #define PCRE_COPT 0 /* compile */ @@ -178,7 +187,7 @@ record. */ /* Options for dns_next_rr */ -enum { RESET_NEXT, RESET_ANSWERS, RESET_ADDITIONAL }; +enum { RESET_NEXT, RESET_ANSWERS, RESET_AUTHORITY, RESET_ADDITIONAL }; /* Argument values for the time-of-day function */ @@ -318,6 +327,12 @@ for having to swallow the rest of an SMTP message is whether the value is #define D_uid 0x20000000 #define D_verify 0x40000000 +/* The D_all value must always have all bits set, as it is recognized specially +by the function that decodes debug and log selectors. This is to enable it to +set all the bits in a multi-word selector. Debug doesn't use this yet, but we +are getting close. In fact, we want to omit "memory" for -d+all, but can't +handle this here. It is fudged externally. */ + #define D_all 0xffffffff #define D_any (D_all & \ @@ -325,7 +340,7 @@ for having to swallow the rest of an SMTP message is whether the value is D_pid | \ D_timestamp) ) -#define D_default (D_all & \ +#define D_default (0xffffffff & \ ~(D_expand | \ D_filter | \ D_interface | \ @@ -342,6 +357,10 @@ values > 0x80000000 and are put into log_extra_selector (without the top bit). These are only ever tested independently. "All" is a magic value that is used only in the name table to set all options in both bit maps. */ +/* The L_all value must always have all bits set, as it is recognized specially +by the function that decodes debug and log selectors. This is to enable it to +set all the bits in a multi-word selector. */ + #define L_all 0xffffffff #define L_address_rewrite 0x00000001 @@ -361,25 +380,30 @@ only in the name table to set all options in both bit maps. */ #define L_smtp_protocol_error 0x00004000 #define L_smtp_syntax_error 0x00008000 -#define LX_arguments 0x80000001 -#define LX_deliver_time 0x80000002 -#define LX_delivery_size 0x80000004 -#define LX_ident_timeout 0x80000008 -#define LX_incoming_interface 0x80000010 -#define LX_incoming_port 0x80000020 -#define LX_outgoing_port 0x80000040 -#define LX_queue_time 0x80000080 -#define LX_queue_time_overall 0x80000100 -#define LX_received_sender 0x80000200 -#define LX_received_recipients 0x80000400 -#define LX_rejected_header 0x80000800 -#define LX_return_path_on_delivery 0x80001000 -#define LX_sender_on_delivery 0x80002000 -#define LX_smtp_confirmation 0x80004000 -#define LX_subject 0x80008000 -#define LX_tls_certificate_verified 0x80010000 -#define LX_tls_cipher 0x80020000 -#define LX_tls_peerdn 0x80040000 +#define LX_acl_warn_skipped 0x80000001 +#define LX_arguments 0x80000002 +#define LX_deliver_time 0x80000004 +#define LX_delivery_size 0x80000008 +#define LX_ident_timeout 0x80000010 +#define LX_incoming_interface 0x80000020 +#define LX_incoming_port 0x80000040 +#define LX_outgoing_port 0x80000080 +#define LX_pid 0x80000100 +#define LX_queue_time 0x80000200 +#define LX_queue_time_overall 0x80000400 +#define LX_received_sender 0x80000800 +#define LX_received_recipients 0x80001000 +#define LX_rejected_header 0x80002000 +#define LX_return_path_on_delivery 0x80004000 +#define LX_sender_on_delivery 0x80008000 +#define LX_sender_verify_fail 0x80010000 +#define LX_smtp_confirmation 0x80020000 +#define LX_smtp_no_mail 0x80040000 +#define LX_subject 0x80080000 +#define LX_tls_certificate_verified 0x80100000 +#define LX_tls_cipher 0x80200000 +#define LX_tls_peerdn 0x80400000 +#define LX_unknown_in_list 0x80800000 #define L_default (L_connection_reject | \ L_delay_delivery | \ @@ -392,7 +416,9 @@ only in the name table to set all options in both bit maps. */ L_size_reject | \ L_skip_delivery) -#define LX_default ((LX_rejected_header | \ +#define LX_default ((LX_acl_warn_skipped | \ + LX_rejected_header | \ + LX_sender_verify_fail | \ LX_tls_cipher) & 0x7fffffff) /* Private error numbers for delivery failures, set negative so as not @@ -442,6 +468,8 @@ to conflict with system errno values. */ #define ERRNO_AUTHFAIL (-42) /* When required by client */ #define ERRNO_CONNECTTIMEOUT (-43) /* Used internally in smtp transport */ #define ERRNO_RCPT4XX (-44) /* RCPT gave 4xx error */ +#define ERRNO_MAIL4XX (-45) /* MAIL gave 4xx error */ +#define ERRNO_DATA4XX (-46) /* DATA gave 4xx error */ /* These must be last, so all retry deferments can easily be identified */ @@ -496,6 +524,7 @@ router, which were chosen to represent the standard situation for users' #define RDO_REWRITE 0x00020000 /* Rewrite generated addresses */ #define RDO_EXIM_FILTER 0x00040000 /* Forbid Exim filters */ #define RDO_SIEVE_FILTER 0x00080000 /* Forbid Sieve filters */ +#define RDO_PREPEND_HOME 0x00100000 /* Prepend $home to relative paths in Exim filter save commands */ /* This is the set that apply to expansions in filters */ @@ -509,7 +538,7 @@ automated, but I haven't bothered. Keep this list in step with the above! */ enum { RDON_BLACKHOLE, RDON_DEFER, RDON_EACCES, RDON_ENOTDIR, RDON_EXISTS, RDON_FAIL, RDON_FILTER, RDON_FREEZE, RDON_INCLUDE, RDON_LOG, RDON_LOOKUP, RDON_PERL, RDON_READFILE, RDON_READSOCK, RDON_RUN, RDON_DLFUNC, RDON_REALLOG, - RDON_REWRITE, RDON_EXIM_FILTER, RDON_SIEVE_FILTER }; + RDON_REWRITE, RDON_EXIM_FILTER, RDON_SIEVE_FILTER, RDON_PREPEND_HOME }; /* Results of filter or forward file processing. Some are only from a filter; some are only from a forward file. */ @@ -602,22 +631,25 @@ enum { v_none, v_sender, v_recipient, v_expn }; #define vopt_is_recipient 0x0002 #define vopt_qualify 0x0004 #define vopt_expn 0x0008 -#define vopt_callout_postmaster 0x0010 /* during callout */ +#define vopt_callout_fullpm 0x0010 /* full postmaster during callout */ #define vopt_callout_random 0x0020 /* during callout */ #define vopt_callout_no_cache 0x0040 /* disable callout cache */ #define vopt_callout_recipsender 0x0080 /* use real sender to verify recip */ #define vopt_callout_recippmaster 0x0100 /* use postmaster to verify recip */ +#define vopt_success_on_redirect 0x0200 /* Values for fields in callout cache records */ #define ccache_unknown 0 /* test hasn't been done */ #define ccache_accept 1 -#define ccache_reject 2 +#define ccache_reject 2 /* All rejections except */ +#define ccache_reject_mfnull 3 /* MAIL FROM:<> was rejected */ /* Options for lookup functions */ #define lookup_querystyle 1 /* query-style lookup */ #define lookup_absfile 2 /* requires absolute file name */ +#define lookup_absfilequery 4 /* query-style starts with file name */ /* Status values for host_item blocks. Require hstatus_unusable and hstatus_unusable_expired to be last. */ @@ -675,6 +707,15 @@ local_scan.h */ #define LOG_CONFIG_FOR (256+128) /* Add " for" instead of ":\n" */ #define LOG_CONFIG_IN (512+128) /* Add " in line x[ of file y]" */ +/* SMTP command identifiers for the smtp_connection_had field that records the +most recent SMTP commands. Must be kept in step with the list of names in +smtp_in.c that is used for creating the smtp_no_mail logging action. SCH_NONE +is "empty". */ + +enum { SCH_NONE, SCH_AUTH, SCH_DATA, SCH_EHLO, SCH_ETRN, SCH_EXPN, SCH_HELO, + SCH_HELP, SCH_MAIL, SCH_NOOP, SCH_QUIT, SCH_RCPT, SCH_RSET, SCH_STARTTLS, + SCH_VRFY }; + /* Returns from host_find_by{name,dns}() */ enum { @@ -697,6 +738,9 @@ enum { enum { MSG_DELIVER, MSG_FREEZE, MSG_REMOVE, MSG_THAW, MSG_ADD_RECIPIENT, MSG_MARK_ALL_DELIVERED, MSG_MARK_DELIVERED, MSG_EDIT_SENDER, + MSG_SHOW_COPY, MSG_LOAD, + /* These ones must be last: a test for >= MSG_SHOW_BODY is used + to test for actions that list individual spool files. */ MSG_SHOW_BODY, MSG_SHOW_HEADER, MSG_SHOW_LOG }; /* Returns from the spool_read_header() function */ @@ -719,13 +763,14 @@ enum { #define topt_no_body 0x040 /* Omit body */ #define topt_escape_headers 0x080 /* Apply escape check to headers */ -/* Codes for the host_find_failed option. */ +/* Codes for the host_find_failed and host_all_ignored options. */ #define hff_freeze 0 #define hff_defer 1 #define hff_pass 2 #define hff_decline 3 #define hff_fail 4 +#define hff_ignore 5 /* Router information flags */ @@ -754,6 +799,7 @@ enum { ACL_WHERE_RCPT, /* Some controls are for RCPT only */ ACL_WHERE_MAIL, /* ) */ ACL_WHERE_PREDATA, /* ) There are several tests for "in message", */ ACL_WHERE_MIME, /* ) implemented by <= WHERE_NOTSMTP */ + ACL_WHERE_DKIM, /* ) */ ACL_WHERE_DATA, /* ) */ ACL_WHERE_NOTSMTP, /* ) */ @@ -763,6 +809,8 @@ enum { ACL_WHERE_RCPT, /* Some controls are for RCPT only */ ACL_WHERE_EXPN, ACL_WHERE_HELO, ACL_WHERE_MAILAUTH, + ACL_WHERE_NOTSMTP_START, + ACL_WHERE_NOTQUIT, ACL_WHERE_QUIT, ACL_WHERE_STARTTLS, ACL_WHERE_VRFY @@ -793,4 +841,19 @@ explicit port number. */ enum { FILTER_UNSET, FILTER_FORWARD, FILTER_EXIM, FILTER_SIEVE }; +/* C99 defines va_copy() for copying a varargs ap so that it can be reused, +since on some platforms multiple iterations of va_start()/va_end() are not +supported. But va_copy() is itself not so portable. Hack around it. +See portability notes at: http://unixpapa.com/incnote/variadic.html */ + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +/* va_copy exists for us or the system is broken and we need OS hacks */ +#elif defined(va_copy) +/* trust it; hope that va_copy is always a macro when defined */ +#elif !defined(va_copy) && defined(__va_copy) +#define va_copy(dest, src) __va_copy(dest, src) +#else +#define va_copy(dest, src) do { memcpy(dest, src, sizeof(va_list) } while (0) +#endif + /* End of macros.h */