-/* $Cambridge: exim/src/src/smtp_in.c,v 1.1 2004/10/07 10:39:01 ph10 Exp $ */
+/* $Cambridge: exim/src/src/smtp_in.c,v 1.6 2004/12/16 15:11:47 tom Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
#define CMD_LIST_STARTTLS 4
static uschar *protocols[] = {
- US"local-smtp",
- US"local-esmtp",
- US"local-esmtpa",
- US"local-esmtps",
- US"local-esmtpsa"
+ US"local-smtp", /* HELO */
+ US"local-smtps", /* The rare case EHLO->STARTTLS->HELO */
+ US"local-esmtp", /* EHLO */
+ US"local-esmtps", /* EHLO->STARTTLS->EHLO */
+ US"local-esmtpa", /* EHLO->AUTH */
+ US"local-esmtpsa" /* EHLO->STARTTLS->EHLO->AUTH */
};
#define pnormal 0
-#define pextend 1
-#define pauthed 1 /* added to pextend */
-#define pcrpted 2 /* added to pextend */
+#define pextend 2
+#define pcrpted 1 /* added to pextend or pnormal */
+#define pauthed 2 /* added to pextend */
#define pnlocal 6 /* offset to remove "local" */
/* When reading SMTP from a remote host, we have to use our own versions of the
message_size = -1;
acl_warn_headers = NULL;
queue_only_policy = FALSE;
-deliver_freeze = FALSE; /* Can be set by ACL */
-submission_mode = FALSE; /* Can be set by ACL */
+deliver_freeze = FALSE; /* Can be set by ACL */
+#ifdef WITH_CONTENT_SCAN
+fake_reject = FALSE; /* Can be set by ACL */
+no_mbox_unspool = FALSE; /* Can be set by ACL */
+#endif
+submission_mode = FALSE; /* Can be set by ACL */
+active_local_from_check = local_from_check; /* Can be set by ACL */
+active_local_sender_retain = local_sender_retain; /* Can be set by ACL */
sender_address = NULL;
raw_sender = NULL; /* After SMTP rewrite, before qualifying */
sender_address_unrewritten = NULL; /* Set only after verify rewrite */
memset(sender_address_cache, 0, sizeof(sender_address_cache));
memset(sender_domain_cache, 0, sizeof(sender_domain_cache));
authenticated_sender = NULL;
+#ifdef EXPERIMENTAL_BRIGHTMAIL
+bmi_run = 0;
+bmi_verdicts = NULL;
+#endif
+#ifdef EXPERIMENTAL_SPF
+spf_header_comment = NULL;
+spf_received = NULL;
+spf_result = NULL;
+spf_smtp_comment = NULL;
+#endif
body_linecount = body_zerocount = 0;
for (i = 0; i < ACL_M_MAX; i++) acl_var[ACL_C_MAX + i] = NULL;
uschar *lognl;
uschar *sender_info = US"";
uschar *what = (where == ACL_WHERE_PREDATA)? US"DATA" :
+#ifdef WITH_CONTENT_SCAN
+ (where == ACL_WHERE_MIME)? US"during MIME ACL checks" :
+#endif
(where == ACL_WHERE_DATA)? US"after DATA" :
string_sprintf("%s %s", acl_wherenames[where], smtp_data);
this is what should be logged, so I've changed to logging the unrewritten
address to retain backward compatibility. */
+#ifndef WITH_CONTENT_SCAN
if (where == ACL_WHERE_RCPT || where == ACL_WHERE_DATA)
+#else
+if (where == ACL_WHERE_RCPT || where == ACL_WHERE_DATA || where == ACL_WHERE_MIME)
+#endif
{
sender_info = string_sprintf("F=<%s> ", (sender_address_unrewritten != NULL)?
sender_address_unrewritten : sender_address);
}
}
+#ifdef EXPERIMENTAL_SPF
+ /* set up SPF context */
+ spf_init(sender_helo_name, sender_host_address);
+#endif
+
/* Apply an ACL check if one is defined */
if (acl_smtp_helo != NULL)
((sender_host_authenticated != NULL)? pauthed : 0) +
((tls_active >= 0)? pcrpted : 0)]
:
- protocols[pnormal])
+ protocols[pnormal + ((tls_active >= 0)? pcrpted : 0)])
+
((sender_host_address != NULL)? pnlocal : 0);
smtp_printf("554 Too many recipients\r\n");
break;
}
-
- rc = (acl_smtp_predata == NULL)? OK :
- acl_check(ACL_WHERE_PREDATA, NULL, acl_smtp_predata, &user_msg, &log_msg);
+
+ if (acl_smtp_predata == NULL) rc = OK; else
+ {
+ enable_dollar_recipients = TRUE;
+ rc = acl_check(ACL_WHERE_PREDATA, NULL, acl_smtp_predata, &user_msg,
+ &log_msg);
+ enable_dollar_recipients = FALSE;
+ }
if (rc == OK)
{
{
address_item *addr = deliver_make_addr(address, FALSE);
switch(verify_address(addr, NULL, vopt_is_recipient | vopt_qualify, -1,
- -1, NULL, NULL, NULL))
+ -1, -1, NULL, NULL, NULL))
{
case OK:
s = string_sprintf("250 <%s> is deliverable", address);
BOOL save_log_testing_mode = log_testing_mode;
address_test_mode = log_testing_mode = TRUE;
(void) verify_address(deliver_make_addr(smtp_data, FALSE), smtp_out,
- vopt_is_recipient | vopt_qualify | vopt_expn, -1, -1, NULL, NULL, NULL);
+ vopt_is_recipient | vopt_qualify | vopt_expn, -1, -1, -1, NULL, NULL,
+ NULL);
address_test_mode = FALSE;
log_testing_mode = save_log_testing_mode; /* true for -bh */
}
protocols[pextend + pcrpted +
((sender_host_authenticated != NULL)? pauthed : 0)]
:
- protocols[pnormal])
+ protocols[pnormal + pcrpted])
+
((sender_host_address != NULL)? pnlocal : 0);