Hmm ok, I removed it because I had some problems with emails that was send from cron daemons (system reports). Maybe we should just higher the limit on data
WDYTH ? Bye, Norman 2010/2/19 Stefano Bagnara <[email protected]>: > 2010/2/18 <[email protected]>: >> 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 > > Hi Norman, as far as I know the 1000 bytes limit per row in the RFC is > valid also in the DATA command and also for 8BITMIME. The only > extension breaking this limit is BINARY, not 8BITMIME. > > Here is an excerpt from rfc: > ---- > Finally, although the > content body contains arbitrary lines of octet-aligned material, the > length of each line (number of octets between two CR-LF pairs), is > still subject to SMTP server line length restrictions (which may > allow as few as 1000 octets on a single line). > > Read more: http://www.faqs.org/rfcs/rfc1652.html#ixzz0fxKhlkGx > ----- > > If we use a line based processor we also have to enforce a line length > limit everywhere or we'll go OOM on very long lines. > > Stefano > >> 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] >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
