X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/b4ed4da0f525ab98c05797e15df0045e49ae3618..ce5524496cf016f06c8004e00ce9d043f4ac6aff:/src/src/macros.h diff --git a/src/src/macros.h b/src/src/macros.h index 7b317e42d..aa4acd1c8 100644 --- a/src/src/macros.h +++ b/src/src/macros.h @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/macros.h,v 1.30 2007/01/15 15:59:22 ph10 Exp $ */ +/* $Cambridge: exim/src/src/macros.h,v 1.37 2008/09/29 11:41:07 nm4 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -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. */ @@ -378,21 +388,22 @@ set all the bits in a multi-word selector. */ #define LX_incoming_interface 0x80000020 #define LX_incoming_port 0x80000040 #define LX_outgoing_port 0x80000080 -#define LX_queue_time 0x80000100 -#define LX_queue_time_overall 0x80000200 -#define LX_received_sender 0x80000400 -#define LX_received_recipients 0x80000800 -#define LX_rejected_header 0x80001000 -#define LX_return_path_on_delivery 0x80002000 -#define LX_sender_on_delivery 0x80004000 -#define LX_sender_verify_fail 0x80008000 -#define LX_smtp_confirmation 0x80010000 -#define LX_smtp_no_mail 0x80020000 -#define LX_subject 0x80040000 -#define LX_tls_certificate_verified 0x80080000 -#define LX_tls_cipher 0x80100000 -#define LX_tls_peerdn 0x80200000 -#define LX_unknown_in_list 0x80400000 +#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 | \ @@ -727,7 +738,10 @@ 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_BODY, MSG_SHOW_HEADER, MSG_SHOW_LOG, MSG_LOAD }; + 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 */ @@ -749,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 */ @@ -794,6 +809,7 @@ enum { ACL_WHERE_RCPT, /* Some controls are for RCPT only */ ACL_WHERE_HELO, ACL_WHERE_MAILAUTH, ACL_WHERE_NOTSMTP_START, + ACL_WHERE_NOTQUIT, ACL_WHERE_QUIT, ACL_WHERE_STARTTLS, ACL_WHERE_VRFY @@ -824,4 +840,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 */