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