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:25 UTC
[james-project] 04/16: JAMES-3196 Add sender/rcpt/helo to SMTP logs
context
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 fafbcd9770fe6b734531802fd108e589943724af
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu May 28 12:07:25 2020 +0700
JAMES-3196 Add sender/rcpt/helo to SMTP logs context
---
.../netty/BasicChannelUpstreamHandler.java | 21 +++++-----
.../apache/james/protocols/netty/NettyServer.java | 2 +-
...Context.java => ProtocolMDCContextFactory.java} | 16 ++++++--
.../smtp/core/SMTPMDCContextFactory.java} | 46 ++++++----------------
.../apache/james/pop3server/netty/POP3Server.java | 3 +-
.../netty/SMTPChannelUpstreamHandler.java | 5 ++-
6 files changed, 43 insertions(+), 50 deletions(-)
diff --git a/protocols/netty/src/main/java/org/apache/james/protocols/netty/BasicChannelUpstreamHandler.java b/protocols/netty/src/main/java/org/apache/james/protocols/netty/BasicChannelUpstreamHandler.java
index b3246ab..0adcb0c 100644
--- a/protocols/netty/src/main/java/org/apache/james/protocols/netty/BasicChannelUpstreamHandler.java
+++ b/protocols/netty/src/main/java/org/apache/james/protocols/netty/BasicChannelUpstreamHandler.java
@@ -55,15 +55,18 @@ import org.slf4j.LoggerFactory;
@Sharable
public class BasicChannelUpstreamHandler extends SimpleChannelUpstreamHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(BasicChannelUpstreamHandler.class);
+
+ private final ProtocolMDCContextFactory mdcContextFactory;
protected final Protocol protocol;
protected final ProtocolHandlerChain chain;
protected final Encryption secure;
- public BasicChannelUpstreamHandler(Protocol protocol) {
- this(protocol, null);
+ public BasicChannelUpstreamHandler(ProtocolMDCContextFactory mdcContextFactory, Protocol protocol) {
+ this(mdcContextFactory, protocol, null);
}
- public BasicChannelUpstreamHandler(Protocol protocol, Encryption secure) {
+ public BasicChannelUpstreamHandler(ProtocolMDCContextFactory mdcContextFactory, Protocol protocol, Encryption secure) {
+ this.mdcContextFactory = mdcContextFactory;
this.protocol = protocol;
this.chain = protocol.getProtocolChain();
this.secure = secure;
@@ -72,7 +75,7 @@ public class BasicChannelUpstreamHandler extends SimpleChannelUpstreamHandler {
@Override
public void channelBound(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
- try (Closeable closeable = ProtocolMDCContext.from(protocol, ctx)) {
+ try (Closeable closeable = mdcContextFactory.from(protocol, ctx)) {
ctx.setAttachment(createSession(ctx));
super.channelBound(ctx, e);
}
@@ -86,7 +89,7 @@ public class BasicChannelUpstreamHandler extends SimpleChannelUpstreamHandler {
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
- try (Closeable closeable = ProtocolMDCContext.from(protocol, ctx)) {
+ try (Closeable closeable = mdcContextFactory.from(protocol, ctx)) {
List<ConnectHandler> connectHandlers = chain.getHandlers(ConnectHandler.class);
List<ProtocolHandlerResultHandler> resultHandlers = chain.getHandlers(ProtocolHandlerResultHandler.class);
ProtocolSession session = (ProtocolSession) ctx.getAttachment();
@@ -116,7 +119,7 @@ public class BasicChannelUpstreamHandler extends SimpleChannelUpstreamHandler {
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
- try (Closeable closeable = ProtocolMDCContext.from(protocol, ctx)) {
+ try (Closeable closeable = mdcContextFactory.from(protocol, ctx)) {
List<DisconnectHandler> connectHandlers = chain.getHandlers(DisconnectHandler.class);
ProtocolSession session = (ProtocolSession) ctx.getAttachment();
if (connectHandlers != null) {
@@ -135,7 +138,7 @@ public class BasicChannelUpstreamHandler extends SimpleChannelUpstreamHandler {
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
- try (Closeable closeable = ProtocolMDCContext.from(protocol, ctx)) {
+ try (Closeable closeable = mdcContextFactory.from(protocol, ctx)) {
ProtocolSession pSession = (ProtocolSession) ctx.getAttachment();
LinkedList<LineHandler> lineHandlers = chain.getHandlers(LineHandler.class);
LinkedList<ProtocolHandlerResultHandler> resultHandlers = chain.getHandlers(ProtocolHandlerResultHandler.class);
@@ -166,7 +169,7 @@ public class BasicChannelUpstreamHandler extends SimpleChannelUpstreamHandler {
@Override
public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
- try (Closeable closeable = ProtocolMDCContext.from(protocol, ctx)) {
+ try (Closeable closeable = mdcContextFactory.from(protocol, ctx)) {
ProtocolSession session = (ProtocolSession) ctx.getAttachment();
LOGGER.info("Connection closed for {}", session.getRemoteAddress().getAddress().getHostAddress());
cleanup(ctx);
@@ -203,7 +206,7 @@ public class BasicChannelUpstreamHandler extends SimpleChannelUpstreamHandler {
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception {
- try (Closeable closeable = ProtocolMDCContext.from(protocol, ctx)) {
+ try (Closeable closeable = mdcContextFactory.from(protocol, ctx)) {
Channel channel = ctx.getChannel();
ProtocolSession session = (ProtocolSession) ctx.getAttachment();
if (e.getCause() instanceof TooLongFrameException && session != null) {
diff --git a/protocols/netty/src/main/java/org/apache/james/protocols/netty/NettyServer.java b/protocols/netty/src/main/java/org/apache/james/protocols/netty/NettyServer.java
index a523660..27ca9a8 100644
--- a/protocols/netty/src/main/java/org/apache/james/protocols/netty/NettyServer.java
+++ b/protocols/netty/src/main/java/org/apache/james/protocols/netty/NettyServer.java
@@ -100,7 +100,7 @@ public class NettyServer extends AbstractAsyncServer {
}
protected ChannelUpstreamHandler createCoreHandler() {
- return new BasicChannelUpstreamHandler(protocol, secure);
+ return new BasicChannelUpstreamHandler(new ProtocolMDCContextFactory.Standard(), protocol, secure);
}
@Override
diff --git a/protocols/netty/src/main/java/org/apache/james/protocols/netty/ProtocolMDCContext.java b/protocols/netty/src/main/java/org/apache/james/protocols/netty/ProtocolMDCContextFactory.java
similarity index 87%
copy from protocols/netty/src/main/java/org/apache/james/protocols/netty/ProtocolMDCContext.java
copy to protocols/netty/src/main/java/org/apache/james/protocols/netty/ProtocolMDCContextFactory.java
index 810a448..7501530 100644
--- a/protocols/netty/src/main/java/org/apache/james/protocols/netty/ProtocolMDCContext.java
+++ b/protocols/netty/src/main/java/org/apache/james/protocols/netty/ProtocolMDCContextFactory.java
@@ -29,14 +29,22 @@ import org.apache.james.protocols.api.ProtocolSession;
import org.apache.james.util.MDCBuilder;
import org.jboss.netty.channel.ChannelHandlerContext;
-public class ProtocolMDCContext {
- public static Closeable from(Protocol protocol, ChannelHandlerContext ctx) {
+public interface ProtocolMDCContextFactory {
+ class Standard implements ProtocolMDCContextFactory {
+ @Override
+ public Closeable from(Protocol protocol, ChannelHandlerContext ctx) {
+ return mdcContext(protocol, ctx).build();
+ }
+ }
+
+ Closeable from(Protocol protocol, ChannelHandlerContext ctx);
+
+ static MDCBuilder mdcContext(Protocol protocol, ChannelHandlerContext ctx) {
return MDCBuilder.create()
.addContext(from(ctx.getAttachment()))
.addContext(MDCBuilder.PROTOCOL, protocol.getName())
.addContext(MDCBuilder.IP, retrieveIp(ctx))
- .addContext(MDCBuilder.HOST, retrieveHost(ctx))
- .build();
+ .addContext(MDCBuilder.HOST, retrieveHost(ctx));
}
private static String retrieveIp(ChannelHandlerContext ctx) {
diff --git a/protocols/netty/src/main/java/org/apache/james/protocols/netty/ProtocolMDCContext.java b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/SMTPMDCContextFactory.java
similarity index 51%
rename from protocols/netty/src/main/java/org/apache/james/protocols/netty/ProtocolMDCContext.java
rename to protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/SMTPMDCContextFactory.java
index 810a448..cec99ae 100644
--- a/protocols/netty/src/main/java/org/apache/james/protocols/netty/ProtocolMDCContext.java
+++ b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/SMTPMDCContextFactory.java
@@ -17,55 +17,35 @@
* under the License. *
****************************************************************/
-package org.apache.james.protocols.netty;
+package org.apache.james.protocols.smtp.core;
import java.io.Closeable;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
import java.util.Optional;
import org.apache.james.protocols.api.Protocol;
import org.apache.james.protocols.api.ProtocolSession;
+import org.apache.james.protocols.netty.ProtocolMDCContextFactory;
+import org.apache.james.protocols.smtp.SMTPSession;
import org.apache.james.util.MDCBuilder;
import org.jboss.netty.channel.ChannelHandlerContext;
-public class ProtocolMDCContext {
- public static Closeable from(Protocol protocol, ChannelHandlerContext ctx) {
+public class SMTPMDCContextFactory implements ProtocolMDCContextFactory {
+
+ public Closeable from(Protocol protocol, ChannelHandlerContext ctx) {
return MDCBuilder.create()
+ .addContext(ProtocolMDCContextFactory.mdcContext(protocol, ctx))
.addContext(from(ctx.getAttachment()))
- .addContext(MDCBuilder.PROTOCOL, protocol.getName())
- .addContext(MDCBuilder.IP, retrieveIp(ctx))
- .addContext(MDCBuilder.HOST, retrieveHost(ctx))
.build();
}
- private static String retrieveIp(ChannelHandlerContext ctx) {
- SocketAddress remoteAddress = ctx.getChannel().getRemoteAddress();
- if (remoteAddress instanceof InetSocketAddress) {
- InetSocketAddress address = (InetSocketAddress) remoteAddress;
- return address.getAddress().getHostAddress();
- }
- return remoteAddress.toString();
- }
-
- private static String retrieveHost(ChannelHandlerContext ctx) {
- SocketAddress remoteAddress = ctx.getChannel().getRemoteAddress();
- if (remoteAddress instanceof InetSocketAddress) {
- InetSocketAddress address = (InetSocketAddress) remoteAddress;
- return address.getHostName();
- }
- return remoteAddress.toString();
- }
-
- private static MDCBuilder from(Object o) {
+ private MDCBuilder from(Object o) {
return Optional.ofNullable(o)
- .filter(object -> object instanceof ProtocolSession)
- .map(object -> (ProtocolSession) object)
+ .filter(object -> object instanceof SMTPSession)
+ .map(object -> (SMTPSession) object)
.map(protocolSession -> MDCBuilder.create()
- .addContext(MDCBuilder.SESSION_ID, protocolSession.getSessionID())
- .addContext(MDCBuilder.CHARSET, protocolSession.getCharset().displayName())
- .addContext(MDCBuilder.USER, protocolSession.getUsername()))
+ .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)))
.orElse(MDCBuilder.create());
}
-
}
diff --git a/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/netty/POP3Server.java b/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/netty/POP3Server.java
index cd4f4f5..bd235ec 100644
--- a/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/netty/POP3Server.java
+++ b/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/netty/POP3Server.java
@@ -27,6 +27,7 @@ import org.apache.james.protocols.netty.AbstractChannelPipelineFactory;
import org.apache.james.protocols.netty.BasicChannelUpstreamHandler;
import org.apache.james.protocols.netty.ChannelHandlerFactory;
import org.apache.james.protocols.netty.LineDelimiterBasedChannelHandlerFactory;
+import org.apache.james.protocols.netty.ProtocolMDCContextFactory;
import org.apache.james.protocols.pop3.POP3Protocol;
import org.jboss.netty.channel.ChannelUpstreamHandler;
@@ -75,7 +76,7 @@ public class POP3Server extends AbstractProtocolAsyncServer implements POP3Serve
protected void preInit() throws Exception {
super.preInit();
POP3Protocol protocol = new POP3Protocol(getProtocolHandlerChain(), theConfigData);
- coreHandler = new BasicChannelUpstreamHandler(protocol, getEncryption());
+ coreHandler = new BasicChannelUpstreamHandler(new ProtocolMDCContextFactory.Standard(), protocol, getEncryption());
}
@Override
diff --git a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPChannelUpstreamHandler.java b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPChannelUpstreamHandler.java
index 6933c2b..fbfcf55 100644
--- a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPChannelUpstreamHandler.java
+++ b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPChannelUpstreamHandler.java
@@ -24,6 +24,7 @@ import org.apache.james.protocols.api.Protocol;
import org.apache.james.protocols.api.ProtocolSession.State;
import org.apache.james.protocols.netty.BasicChannelUpstreamHandler;
import org.apache.james.protocols.smtp.SMTPSession;
+import org.apache.james.protocols.smtp.core.SMTPMDCContextFactory;
import org.apache.james.smtpserver.SMTPConstants;
import org.jboss.netty.channel.ChannelHandler.Sharable;
import org.jboss.netty.channel.ChannelHandlerContext;
@@ -40,12 +41,12 @@ public class SMTPChannelUpstreamHandler extends BasicChannelUpstreamHandler {
private final SmtpMetrics smtpMetrics;
public SMTPChannelUpstreamHandler(Protocol protocol, Encryption encryption, SmtpMetrics smtpMetrics) {
- super(protocol, encryption);
+ super(new SMTPMDCContextFactory(), protocol, encryption);
this.smtpMetrics = smtpMetrics;
}
public SMTPChannelUpstreamHandler(Protocol protocol, SmtpMetrics smtpMetrics) {
- super(protocol);
+ super(new SMTPMDCContextFactory(), protocol);
this.smtpMetrics = smtpMetrics;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org