-/* $Cambridge: exim/src/src/macros.h,v 1.22 2006/02/07 11:19:00 ph10 Exp $ */
+/* $Cambridge: exim/src/src/macros.h,v 1.36 2007/08/22 10:10:23 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
*************************************************/
-/* Copyright (c) University of Cambridge 1995 - 2006 */
+/* Copyright (c) University of Cambridge 1995 - 2007 */
/* See the file NOTICE for conditions of use and distribution. */
#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. */
#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 <Mailer-Daemon@$qualify_domain>"
+
/* 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. */
#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. */
#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_smtp_confirmation 0x80008000
-#define LX_subject 0x80010000
-#define LX_tls_certificate_verified 0x80020000
-#define LX_tls_cipher 0x80040000
-#define LX_tls_peerdn 0x80080000
-#define LX_unknown_in_list 0x80100000
+#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 | \
#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
#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 */
#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 */
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. */
#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 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 {
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 */
#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 */
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