+enum { VERIFY_REV_HOST_LKUP, VERIFY_CERT, VERIFY_HELO, VERIFY_CSA, VERIFY_HDR_SYNTAX,
+ VERIFY_NOT_BLIND, VERIFY_HDR_SNDR, VERIFY_SNDR, VERIFY_RCPT,
+ VERIFY_HDR_NAMES_ASCII
+ };
+typedef struct {
+ uschar * name;
+ int value;
+ unsigned where_allowed; /* bitmap */
+ BOOL no_options; /* Never has /option(s) following */
+ unsigned alt_opt_sep; /* >0 Non-/ option separator (custom parser) */
+ } verify_type_t;
+static verify_type_t verify_type_list[] = {
+ { US"reverse_host_lookup", VERIFY_REV_HOST_LKUP, ~0, TRUE, 0 },
+ { US"certificate", VERIFY_CERT, ~0, TRUE, 0 },
+ { US"helo", VERIFY_HELO, ~0, TRUE, 0 },
+ { US"csa", VERIFY_CSA, ~0, FALSE, 0 },
+ { US"header_syntax", VERIFY_HDR_SYNTAX, (1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP), TRUE, 0 },
+ { US"not_blind", VERIFY_NOT_BLIND, (1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP), TRUE, 0 },
+ { US"header_sender", VERIFY_HDR_SNDR, (1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP), FALSE, 0 },
+ { US"sender", VERIFY_SNDR, (1<<ACL_WHERE_MAIL)|(1<<ACL_WHERE_RCPT)
+ |(1<<ACL_WHERE_PREDATA)|(1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP),
+ FALSE, 6 },
+ { US"recipient", VERIFY_RCPT, (1<<ACL_WHERE_RCPT), FALSE, 0 },
+ { US"header_names_ascii", VERIFY_HDR_NAMES_ASCII, (1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP), TRUE, 0 }
+ };
+
+
+enum { CALLOUT_DEFER_OK, CALLOUT_NOCACHE, CALLOUT_RANDOM, CALLOUT_USE_SENDER,
+ CALLOUT_USE_POSTMASTER, CALLOUT_POSTMASTER, CALLOUT_FULLPOSTMASTER,
+ CALLOUT_MAILFROM, CALLOUT_POSTMASTER_MAILFROM, CALLOUT_MAXWAIT, CALLOUT_CONNECT,
+ CALLOUT_TIME
+ };
+typedef struct {
+ uschar * name;
+ int value;
+ int flag;
+ BOOL has_option; /* Has =option(s) following */
+ BOOL timeval; /* Has a time value */
+ } callout_opt_t;
+static callout_opt_t callout_opt_list[] = {
+ { US"defer_ok", CALLOUT_DEFER_OK, 0, FALSE, FALSE },
+ { US"no_cache", CALLOUT_NOCACHE, vopt_callout_no_cache, FALSE, FALSE },
+ { US"random", CALLOUT_RANDOM, vopt_callout_random, FALSE, FALSE },
+ { US"use_sender", CALLOUT_USE_SENDER, vopt_callout_recipsender, FALSE, FALSE },
+ { US"use_postmaster", CALLOUT_USE_POSTMASTER,vopt_callout_recippmaster, FALSE, FALSE },
+ { US"postmaster_mailfrom",CALLOUT_POSTMASTER_MAILFROM,0, TRUE, FALSE },
+ { US"postmaster", CALLOUT_POSTMASTER, 0, FALSE, FALSE },
+ { US"fullpostmaster", CALLOUT_FULLPOSTMASTER,vopt_callout_fullpm, FALSE, FALSE },
+ { US"mailfrom", CALLOUT_MAILFROM, 0, TRUE, FALSE },
+ { US"maxwait", CALLOUT_MAXWAIT, 0, TRUE, TRUE },
+ { US"connect", CALLOUT_CONNECT, 0, TRUE, TRUE },
+ { NULL, CALLOUT_TIME, 0, FALSE, TRUE }
+ };
+
+
+