You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by rc...@apache.org on 2020/06/08 03:12:26 UTC

[james-project] 05/16: JAMES-3196 Carry other SMTP context on DATA hooks

This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit deef423282310b32de237bf7dc3186b7f4e55ed5
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu May 28 15:56:16 2020 +0700

    JAMES-3196 Carry other SMTP context on DATA hooks
    
    These hooks are executed on a separate thread thus context is lost
---
 .../protocols/netty/ProtocolMDCContextFactory.java     | 12 ++++++++----
 .../protocols/smtp/core/SMTPMDCContextFactory.java     | 18 ++++++++++++++----
 .../smtpserver/DataLineJamesMessageHookHandler.java    |  4 +++-
 3 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/protocols/netty/src/main/java/org/apache/james/protocols/netty/ProtocolMDCContextFactory.java b/protocols/netty/src/main/java/org/apache/james/protocols/netty/ProtocolMDCContextFactory.java
index 7501530..17a34cc 100644
--- a/protocols/netty/src/main/java/org/apache/james/protocols/netty/ProtocolMDCContextFactory.java
+++ b/protocols/netty/src/main/java/org/apache/james/protocols/netty/ProtocolMDCContextFactory.java
@@ -69,11 +69,15 @@ public interface ProtocolMDCContextFactory {
         return Optional.ofNullable(o)
             .filter(object -> object instanceof ProtocolSession)
             .map(object -> (ProtocolSession) object)
-            .map(protocolSession -> MDCBuilder.create()
-                .addContext(MDCBuilder.SESSION_ID, protocolSession.getSessionID())
-                .addContext(MDCBuilder.CHARSET, protocolSession.getCharset().displayName())
-                .addContext(MDCBuilder.USER, protocolSession.getUsername()))
+            .map(ProtocolMDCContextFactory::forSession)
             .orElse(MDCBuilder.create());
     }
 
+    static MDCBuilder forSession(ProtocolSession protocolSession) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.SESSION_ID, protocolSession.getSessionID())
+            .addContext(MDCBuilder.CHARSET, protocolSession.getCharset().displayName())
+            .addContext(MDCBuilder.USER, protocolSession.getUsername());
+    }
+
 }
diff --git a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/SMTPMDCContextFactory.java b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/SMTPMDCContextFactory.java
index cec99ae..87f7d94 100644
--- a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/SMTPMDCContextFactory.java
+++ b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/SMTPMDCContextFactory.java
@@ -38,14 +38,24 @@ public class SMTPMDCContextFactory implements ProtocolMDCContextFactory {
             .build();
     }
 
+    public static MDCBuilder forSession(SMTPSession smtpSession) {
+        return MDCBuilder.create()
+            .addContext(ProtocolMDCContextFactory.forSession(smtpSession))
+            .addContext(forSMTPSession(smtpSession));
+    }
+
     private MDCBuilder from(Object o) {
         return Optional.ofNullable(o)
             .filter(object -> object instanceof SMTPSession)
             .map(object -> (SMTPSession) object)
-            .map(protocolSession -> MDCBuilder.create()
-                .addContext("ehlo", protocolSession.getAttachment(SMTPSession.CURRENT_HELO_NAME, ProtocolSession.State.Connection))
-                .addContext("sender", protocolSession.getAttachment(SMTPSession.SENDER, ProtocolSession.State.Transaction))
-                .addContext("recipients", protocolSession.getAttachment(SMTPSession.RCPT_LIST, ProtocolSession.State.Transaction)))
+            .map(SMTPMDCContextFactory::forSMTPSession)
             .orElse(MDCBuilder.create());
     }
+
+    private static MDCBuilder forSMTPSession(SMTPSession smtpSession) {
+        return MDCBuilder.create()
+            .addContext("ehlo", smtpSession.getAttachment(SMTPSession.CURRENT_HELO_NAME, ProtocolSession.State.Connection))
+            .addContext("sender", smtpSession.getAttachment(SMTPSession.SENDER, ProtocolSession.State.Transaction))
+            .addContext("recipients", smtpSession.getAttachment(SMTPSession.RCPT_LIST, ProtocolSession.State.Transaction));
+    }
 }
diff --git a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/DataLineJamesMessageHookHandler.java b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/DataLineJamesMessageHookHandler.java
index fe3ac7c..4da0261 100644
--- a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/DataLineJamesMessageHookHandler.java
+++ b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/DataLineJamesMessageHookHandler.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.smtpserver;
 
+import java.io.Closeable;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -42,6 +43,7 @@ import org.apache.james.protocols.smtp.SMTPRetCode;
 import org.apache.james.protocols.smtp.SMTPSession;
 import org.apache.james.protocols.smtp.core.AbstractHookableCmdHandler;
 import org.apache.james.protocols.smtp.core.DataLineFilter;
+import org.apache.james.protocols.smtp.core.SMTPMDCContextFactory;
 import org.apache.james.protocols.smtp.dsn.DSNStatus;
 import org.apache.james.protocols.smtp.hook.HookResult;
 import org.apache.james.protocols.smtp.hook.HookResultHook;
@@ -77,7 +79,7 @@ public class DataLineJamesMessageHookHandler implements DataLineFilter, Extensib
         MimeMessageInputStreamSource mmiss = session.getAttachment(SMTPConstants.DATA_MIMEMESSAGE_STREAMSOURCE, State.Transaction)
             .orElseThrow(() -> new RuntimeException("'" + SMTPConstants.DATA_MIMEMESSAGE_STREAMSOURCE.asString() + "' has not been filled."));
 
-        try {
+        try (Closeable closeable = SMTPMDCContextFactory.forSession(session).build()) {
             OutputStream out = mmiss.getWritableOutputStream();
 
             // 46 is "."


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org