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 no...@apache.org on 2011/02/04 13:38:19 UTC
svn commit: r1067166 -
/james/server/trunk/imapserver/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java
Author: norman
Date: Fri Feb 4 12:38:18 2011
New Revision: 1067166
URL: http://svn.apache.org/viewvc?rev=1067166&view=rev
Log:
Write a BAD response if the max command line length is exceeded. This is related to JAMES-1190
Modified:
james/server/trunk/imapserver/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java
Modified: james/server/trunk/imapserver/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imapserver/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java?rev=1067166&r1=1067165&r2=1067166&view=diff
==============================================================================
--- james/server/trunk/imapserver/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java (original)
+++ james/server/trunk/imapserver/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java Fri Feb 4 12:38:18 2011
@@ -24,6 +24,7 @@ import java.net.InetSocketAddress;
import javax.net.ssl.SSLContext;
import org.apache.commons.logging.Log;
+import org.apache.james.imap.api.ImapConstants;
import org.apache.james.imap.api.ImapMessage;
import org.apache.james.imap.api.ImapSessionState;
import org.apache.james.imap.api.process.ImapProcessor;
@@ -40,6 +41,7 @@ import org.jboss.netty.channel.ChannelSt
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
+import org.jboss.netty.handler.codec.frame.TooLongFrameException;
/**
* {@link SimpleChannelUpstreamHandler} which handles IMAP
@@ -121,14 +123,32 @@ public class ImapChannelUpstreamHandler
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception {
getLogger(ctx.getChannel()).debug("Error while processing imap request" ,e.getCause());
- // logout on error not sure if that is the best way to handle it
- final ImapSession imapSession = (ImapSession) attributes.get(ctx.getChannel());
- if (imapSession != null) imapSession.logout();
+ if (e.getCause() instanceof TooLongFrameException) {
+
+
+ // Max line length exceeded
+ // See RFC 2683 section 3.2.1
+ //
+ // "For its part, a server should allow for a command line of at least
+ // 8000 octets. This provides plenty of leeway for accepting reasonable
+ // length commands from clients. The server should send a BAD response
+ // to a command that does not end within the server's maximum accepted
+ // command length."
+ //
+ // See also JAMES-1190
+ ImapResponseComposer composer = (ImapResponseComposer) ctx.getAttachment();
+ composer.untaggedResponse(ImapConstants.BAD + " failed. Maximum command line length exceeded");
+ } else {
+ // logout on error not sure if that is the best way to handle it
+ final ImapSession imapSession = (ImapSession) attributes.get(ctx.getChannel());
+ if (imapSession != null) imapSession.logout();
+
+ // just close the channel now!
+ ctx.getChannel().close();
+
+ super.exceptionCaught(ctx, e);
+ }
- // just close the channel now!
- ctx.getChannel().close();
-
- super.exceptionCaught(ctx, e);
}
@Override
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org