Author: norman
Date: Thu Feb 18 18:19:52 2010
New Revision: 911507
URL: http://svn.apache.org/viewvc?rev=911507&view=rev
Log:
Make sure to only check for max line length while processing not the DATA
command
Modified:
james/server/trunk/mina-socket/src/main/java/org/apache/james/socket/mina/codec/CRLFTerminatedLineDecoder.java
james/server/trunk/mina-socket/src/main/java/org/apache/james/socket/mina/codec/JamesProtocolCodecFactory.java
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/mina/SMTPSessionImpl.java
Modified:
james/server/trunk/mina-socket/src/main/java/org/apache/james/socket/mina/codec/CRLFTerminatedLineDecoder.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/mina-socket/src/main/java/org/apache/james/socket/mina/codec/CRLFTerminatedLineDecoder.java?rev=911507&r1=911506&r2=911507&view=diff
==============================================================================
---
james/server/trunk/mina-socket/src/main/java/org/apache/james/socket/mina/codec/CRLFTerminatedLineDecoder.java
(original)
+++
james/server/trunk/mina-socket/src/main/java/org/apache/james/socket/mina/codec/CRLFTerminatedLineDecoder.java
Thu Feb 18 18:19:52 2010
@@ -33,6 +33,8 @@
public class CRLFTerminatedLineDecoder extends CumulativeProtocolDecoder {
private int maxLineLength;
+
+ private boolean check = true;
public static int DEFAULT_MAX_LINE_LENTH = 2048;
@@ -52,7 +54,11 @@
public CRLFTerminatedLineDecoder() {
this(DEFAULT_MAX_LINE_LENTH);
}
+
+ public synchronized void checkLineLengthLimit(boolean check) {
+ this.check = check;
+ }
/*
* (non-Javadoc)
@@ -69,7 +75,7 @@
// Now find the first CRLF in the buffer.
byte previous = 0;
- if (maxLineLength != -1 && in.remaining() > maxLineLength) {
+ if (check && maxLineLength != -1 && in.remaining() > maxLineLength) {
// clear the buffer before throw exception
in.clear();
Modified:
james/server/trunk/mina-socket/src/main/java/org/apache/james/socket/mina/codec/JamesProtocolCodecFactory.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/mina-socket/src/main/java/org/apache/james/socket/mina/codec/JamesProtocolCodecFactory.java?rev=911507&r1=911506&r2=911507&view=diff
==============================================================================
---
james/server/trunk/mina-socket/src/main/java/org/apache/james/socket/mina/codec/JamesProtocolCodecFactory.java
(original)
+++
james/server/trunk/mina-socket/src/main/java/org/apache/james/socket/mina/codec/JamesProtocolCodecFactory.java
Thu Feb 18 18:19:52 2010
@@ -21,6 +21,7 @@
import java.nio.charset.Charset;
+import org.apache.mina.core.session.AttributeKey;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFactory;
import org.apache.mina.filter.codec.ProtocolDecoder;
@@ -34,7 +35,9 @@
*
*/
public class JamesProtocolCodecFactory implements ProtocolCodecFactory {
-
+ public static final AttributeKey DECODER_KEY = new
AttributeKey(CRLFTerminatedLineDecoder.class,"decoder");
+ public static final AttributeKey ENCODER_KEY = new
AttributeKey(TextLineEncoder.class,"encoder");
+
private final ProtocolEncoder encoder = new
TextLineEncoder(Charset.forName("US-ASCII"), LineDelimiter.CRLF);
private final ProtocolDecoder decoder = new CRLFTerminatedLineDecoder();
@@ -43,6 +46,8 @@
* @see
org.apache.mina.filter.codec.ProtocolCodecFactory#getEncoder(org.apache.mina.core.session.IoSession)
*/
public ProtocolEncoder getEncoder(IoSession arg0) throws Exception {
+ arg0.setAttribute(ENCODER_KEY,encoder);
+
return encoder;
}
@@ -51,6 +56,7 @@
* @see
org.apache.mina.filter.codec.ProtocolCodecFactory#getDecoder(org.apache.mina.core.session.IoSession)
*/
public ProtocolDecoder getDecoder(IoSession arg0) throws Exception {
+ arg0.setAttribute(DECODER_KEY,decoder);
return decoder;
}
}
Modified:
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/mina/SMTPSessionImpl.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/mina/SMTPSessionImpl.java?rev=911507&r1=911506&r2=911507&view=diff
==============================================================================
---
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/mina/SMTPSessionImpl.java
(original)
+++
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/mina/SMTPSessionImpl.java
Thu Feb 18 18:19:52 2010
@@ -33,6 +33,8 @@
import org.apache.james.smtpserver.mina.filter.SMTPResponseFilter;
import org.apache.james.smtpserver.mina.filter.TarpitFilter;
import org.apache.james.socket.mina.AbstractMINASession;
+import org.apache.james.socket.mina.codec.CRLFTerminatedLineDecoder;
+import org.apache.james.socket.mina.codec.JamesProtocolCodecFactory;
import org.apache.james.socket.mina.filter.FilterLineHandlerAdapter;
import org.apache.mina.core.session.IoSession;
@@ -113,6 +115,7 @@
if (currentHeloMode != null) {
getState().put(CURRENT_HELO_MODE, currentHeloMode);
}
+
}
/**
@@ -122,6 +125,9 @@
getIoSession().getFilterChain()
.remove("lineHandler" + lineHandlerCount);
lineHandlerCount--;
+ if (lineHandlerCount == 0) {
+
((CRLFTerminatedLineDecoder)getIoSession().getAttribute(JamesProtocolCodecFactory.DECODER_KEY)).checkLineLengthLimit(true);
+ }
}
/**
@@ -132,6 +138,10 @@
getIoSession().getFilterChain().addAfter(SMTPResponseFilter.NAME,
"lineHandler" + lineHandlerCount,
new
FilterLineHandlerAdapter<SMTPSession>(overrideCommandHandler,SMTP_SESSION));
+ // disable the line length limit because we are processing the data
+ // not sure if this is the right place todo this
+
((CRLFTerminatedLineDecoder)getIoSession().getAttribute(JamesProtocolCodecFactory.DECODER_KEY)).checkLineLengthLimit(false);
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]