-/* $Cambridge: exim/src/src/structs.h,v 1.1 2004/10/07 10:39:01 ph10 Exp $ */
-
/*************************************************
* Exim - an Internet mail transport agent *
*************************************************/
-/* Copyright (c) University of Cambridge 1995 - 2004 */
+/* Copyright (c) University of Cambridge 1995 - 2014 */
/* See the file NOTICE for conditions of use and distribution. */
but also used when checking lists of hosts and when transporting. Looking up
host addresses is done using this structure. */
+typedef enum {DS_UNK=-1, DS_NO, DS_YES} dnssec_status_t;
+
typedef struct host_item {
struct host_item *next;
- uschar *name; /* Host name */
- uschar *address; /* IP address in text form */
+ const uschar *name; /* Host name */
+ const uschar *address; /* IP address in text form */
int port; /* port value in host order (if SRV lookup) */
int mx; /* MX value if found via MX records */
int sort_key; /* MX*1000 plus random "fraction" */
int status; /* Usable, unusable, or unknown */
int why; /* Why host is unusable */
int last_try; /* Time of last try if known */
- BOOL update_waiting; /* Turned off if wait db not to be updated */
+ dnssec_status_t dnssec;
} host_item;
/* Chain of rewrite rules, read from the rewrite config, or parsed from the
uschar *port;
uschar *protocol;
uschar *hosts;
+ uschar *helo_data;
BOOL hosts_override;
BOOL hosts_randomize;
BOOL gethostbyname;
struct transport_instance *,
struct address_item *,
struct transport_feedback *, /* For passing back config data */
+ uid_t, /* The uid that will be used */
+ gid_t, /* The gid that will be used */
uschar **); /* For an error message */
/**************************************/
int batch_max; /* ) */
uschar *home_dir; /* ) Used only for local transports */
uschar *current_dir; /* ) */
/**************************************/
+ uschar *expand_multi_domain; /* ) */
BOOL multi_domain; /* ) */
BOOL overrides_hosts; /* ) Used only for remote transports */
int max_addresses; /* ) */
BOOL log_fail_output;
BOOL log_defer_output;
BOOL retry_use_local_part; /* Defaults true for local, false for remote */
+#ifdef EXPERIMENTAL_EVENT
+ uschar *event_action; /* String to expand on notable events */
+#endif
} transport_instance;
uschar *driver_name; /* Must be first */
uschar *address_data; /* Arbitrary data */
+#ifdef EXPERIMENTAL_BRIGHTMAIL
+ uschar *bmi_rule; /* Brightmail AntiSpam rule checking */
+#endif
uschar *cannot_route_message; /* Used when routing fails */
uschar *condition; /* General condition */
uschar *current_directory; /* For use during delivery */
uschar *transport_name; /* Transport name */
BOOL address_test; /* Use this router when testing addresses */
+#ifdef EXPERIMENTAL_BRIGHTMAIL
+ BOOL bmi_deliver_alternate; /* TRUE => BMI said that message should be delivered to alternate location */
+ BOOL bmi_deliver_default; /* TRUE => BMI said that message should be delivered to default location */
+ BOOL bmi_dont_deliver; /* TRUE => BMI said that message should not be delivered at all */
+#endif
BOOL expn; /* Use this router when processing EXPN */
BOOL caseful_local_part; /* TRUE => don't lowercase */
BOOL check_local_user; /* TRUE => check local user */
BOOL verify_sender; /* Use this router when verifying a sender */
BOOL uid_set; /* Flag to indicate uid is set */
BOOL unseen; /* If TRUE carry on, even after success */
+ BOOL dsn_lasthop; /* If TRUE, this router is a DSN endpoint */
int self_code; /* Encoded version of "self" */
uid_t uid; /* Fixed uid value */
transport_instance *transport; /* Transport block (when found) */
struct router_instance *pass_router; /* Actual router for passed address */
struct router_instance *redirect_router; /* Actual router for generated address */
+ uschar *dnssec_request_domains; /* ask for DNSSEC XXX */
+ uschar *dnssec_require_domains; /* require DNSSEC XXX */
} router_instance;
router_instance *,
struct address_item *,
struct passwd *,
- BOOL,
+ int,
struct address_item **,
struct address_item **,
struct address_item **,
/* Structure for holding information about a lookup type. */
-typedef struct lookup_info {
- uschar *name; /* e.g. "lsearch" */
- int type; /* query/singlekey/abs-file */
- void *(*open)( /* open function */
- uschar *, /* file name for those that have one */
- uschar **); /* for error message */
- BOOL (*check)( /* file checking function */
- void *, /* handle */
- uschar *, /* file name */
- int, /* modemask for file checking */
- uid_t *, /* owners for file checking */
- gid_t *, /* owngroups for file checking */
- uschar **); /* for error messages */
- int (*find)( /* find function */
- void *, /* handle */
- uschar *, /* file name or NULL */
- uschar *, /* key or query */
- int, /* length of key or query */
- uschar **, /* for returning answer */
- uschar **, /* for error message */
- BOOL *); /* to request cache cleanup */
- void (*close)( /* close function */
- void *); /* handle */
- void (*tidy)(void); /* tidy function */
- uschar *(*quote)( /* quoting function */
- uschar *, /* string to quote */
- uschar *); /* additional data from quote name */
-} lookup_info;
+#include "lookupapi.h"
/* Structure for holding information about the configured authentication
void *options_block; /* Pointer to private options */
uschar *driver_name; /* Must be first */
uschar *advertise_condition; /* Are we going to advertise this?*/
+ uschar *client_condition; /* Should the client try this? */
uschar *public_name; /* Advertised name */
- uschar *set_id; /* String to set as authenticated id */
+ uschar *set_id; /* String to set when server as authenticated id */
+ uschar *set_client_id; /* String to set when client as client_authenticated id */
uschar *mail_auth_condition; /* Condition for AUTH on MAIL command */
uschar *server_debug_string; /* Debugging output */
+ uschar *server_condition; /* Authorization condition */
BOOL client; /* TRUE if client option(s) set */
BOOL server; /* TRUE if server options(s) set */
BOOL advertised; /* Set TRUE when advertised */
int, /* command timeout */
uschar *, /* buffer for reading response */
int); /* sizeof buffer */
+ void (*version_report)( /* diagnostic version reporting */
+ FILE *); /* I/O stream to print to */
} auth_info;
uschar *errors_address; /* where to send errors (NULL => sender) */
header_line *extra_headers; /* additional headers */
uschar *remove_headers; /* list of those to remove */
+
+ #ifdef EXPERIMENTAL_SRS
+ uschar *srs_sender; /* Change return path when delivering */
+ #endif
+ #ifdef EXPERIMENTAL_INTERNATIONAL
+ BOOL utf8_msg:1; /* requires SMTPUTF8 processing */
+ BOOL utf8_downcvt:1; /* mandatory downconvert on delivery */
+ BOOL utf8_downcvt_maybe:1; /* optional downconvert on delivery */
+ #endif
} address_item_propagated;
/* Bits for the flags field below */
#define af_verify_callout 0x00400000 /* for cached sender verify: callout was specified */
#define af_include_affixes 0x00800000 /* delivered with affixes in RCPT */
#define af_cert_verified 0x01000000 /* delivered with verified TLS cert */
+#define af_pass_message 0x02000000 /* pass message in bounces */
+#define af_bad_reply 0x04000000 /* filter could not generate autoreply */
+#ifndef DISABLE_PRDR
+# define af_prdr_used 0x08000000 /* delivery used SMTP PRDR */
+#endif
+#define af_force_command 0x10000000 /* force_command in pipe transport */
+#ifdef EXPERIMENTAL_DANE
+# define af_dane_verified 0x20000000 /* TLS cert verify done with DANE */
+#endif
+#ifdef EXPERIMENTAL_INTERNATIONAL
+# define af_utf8_downcvt 0x40000000 /* downconvert was done for delivery */
+#endif
/* These flags must be propagated when a child is created */
uschar *local_part; /* points to cc or lc version */
uschar *prefix; /* stripped prefix of local part */
uschar *suffix; /* stripped suffix of local part */
- uschar *domain; /* working domain (lower cased) */
+ const uschar *domain; /* working domain (lower cased) */
uschar *address_retry_key; /* retry key including full address */
uschar *domain_retry_key; /* retry key for domain only */
#ifdef SUPPORT_TLS
uschar *cipher; /* Cipher used for transport */
+ void *ourcert; /* Certificate offered to peer, binary */
+ void *peercert; /* Certificate from peer, binary */
uschar *peerdn; /* DN of server's certificate */
+ int ocsp; /* OCSP status of peer cert */
#endif
+ uschar *authenticator; /* auth driver name used by transport */
+ uschar *auth_id; /* auth "login" name used by transport */
+ uschar *auth_sndr; /* AUTH arg to SMTP MAIL, used by transport */
+
+ uschar *dsn_orcpt; /* DSN orcpt value */
+ int dsn_flags; /* DSN flags */
+ int dsn_aware; /* DSN aware flag */
+
uid_t uid; /* uid for transporting */
gid_t gid; /* gid for transporting */
/* ( also */
/* ( contains verify rc in sender verify cache */
short int transport_return; /* result of delivery attempt */
- address_item_propagated p; /* fields that are propagated to children */
+ address_item_propagated prop; /* fields that are propagated to children */
} address_item;
/* The table of header names consists of items of this type */
typedef struct error_block {
struct error_block *next;
- uschar *text1;
+ const uschar *text1;
uschar *text2;
} error_block;
/* Structure for passing arguments to check_host() */
typedef struct check_host_block {
- uschar *host_name;
- uschar *host_address;
- uschar *host_ipv4;
+ const uschar *host_name;
+ const uschar *host_address;
+ const uschar *host_ipv4;
BOOL negative;
} check_host_block;
/* Structure for holding data for an entry in a named list */
typedef struct namedlist_block {
- uschar *string; /* the list string */
+ const uschar *string; /* the list string */
namedlist_cacheblock *cache_data; /* cached domain_data or localpart_data */
int number; /* the number of the list for caching */
} namedlist_block;
int type;
union {
BOOL negated;
- int varnumber;
+ uschar *varname;
} u;
} acl_condition_block;
int verb;
} acl_block;
+/* smtp transport calc outbound_ip */
+typedef BOOL (*oicf) (uschar *message_id, void *data);
+
/* End of structs.h */