SMTP: MTA hook only runs if sieve script, milter or rewrite is configured (fixes #2317)
This commit is contained in:
@@ -88,13 +88,10 @@ impl<T: SessionStream> Session<T> {
|
||||
self.data.rcpt_to.push(rcpt);
|
||||
|
||||
// Address rewriting and Sieve filtering
|
||||
let rcpt_config = &self.server.core.smtp.session.rcpt;
|
||||
let rcpt_script = self
|
||||
.server
|
||||
.eval_if::<String, _>(
|
||||
&self.server.core.smtp.session.rcpt.script,
|
||||
self,
|
||||
self.data.session_id,
|
||||
)
|
||||
.eval_if::<String, _>(&rcpt_config.script, self, self.data.session_id)
|
||||
.await
|
||||
.and_then(|name| {
|
||||
self.server
|
||||
@@ -102,16 +99,17 @@ impl<T: SessionStream> Session<T> {
|
||||
.map(|s| (s.clone(), name))
|
||||
});
|
||||
|
||||
let session_config = &self.server.core.smtp.session;
|
||||
if rcpt_script.is_some()
|
||||
|| !self.server.core.smtp.session.rcpt.rewrite.is_empty()
|
||||
|| self
|
||||
.server
|
||||
.core
|
||||
.smtp
|
||||
.session
|
||||
|| !rcpt_config.rewrite.is_empty()
|
||||
|| session_config
|
||||
.milters
|
||||
.iter()
|
||||
.any(|m| m.run_on_stage.contains(&Stage::Rcpt))
|
||||
|| session_config
|
||||
.hooks
|
||||
.iter()
|
||||
.any(|h| h.run_on_stage.contains(&Stage::Rcpt))
|
||||
{
|
||||
// Sieve filtering
|
||||
if let Some((script, script_id)) = rcpt_script {
|
||||
@@ -157,11 +155,7 @@ impl<T: SessionStream> Session<T> {
|
||||
// Address rewriting
|
||||
if let Some(new_address) = self
|
||||
.server
|
||||
.eval_if::<String, _>(
|
||||
&self.server.core.smtp.session.rcpt.rewrite,
|
||||
self,
|
||||
self.data.session_id,
|
||||
)
|
||||
.eval_if::<String, _>(&rcpt_config.rewrite, self, self.data.session_id)
|
||||
.await
|
||||
{
|
||||
let rcpt = self.data.rcpt_to.last_mut().unwrap();
|
||||
@@ -199,11 +193,7 @@ impl<T: SessionStream> Session<T> {
|
||||
let mut rcpt_members = None;
|
||||
if let Some(directory) = self
|
||||
.server
|
||||
.eval_if::<String, _>(
|
||||
&self.server.core.smtp.session.rcpt.directory,
|
||||
self,
|
||||
self.data.session_id,
|
||||
)
|
||||
.eval_if::<String, _>(&rcpt_config.directory, self, self.data.session_id)
|
||||
.await
|
||||
.and_then(|name| self.server.get_directory(&name))
|
||||
{
|
||||
@@ -247,11 +237,7 @@ impl<T: SessionStream> Session<T> {
|
||||
Ok(false) => {
|
||||
if !self
|
||||
.server
|
||||
.eval_if(
|
||||
&self.server.core.smtp.session.rcpt.relay,
|
||||
self,
|
||||
self.data.session_id,
|
||||
)
|
||||
.eval_if(&rcpt_config.relay, self, self.data.session_id)
|
||||
.await
|
||||
.unwrap_or(false)
|
||||
{
|
||||
@@ -282,11 +268,7 @@ impl<T: SessionStream> Session<T> {
|
||||
}
|
||||
} else if !self
|
||||
.server
|
||||
.eval_if(
|
||||
&self.server.core.smtp.session.rcpt.relay,
|
||||
self,
|
||||
self.data.session_id,
|
||||
)
|
||||
.eval_if(&rcpt_config.relay, self, self.data.session_id)
|
||||
.await
|
||||
.unwrap_or(false)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user