You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2021/09/08 03:12:04 UTC

[james-project] branch master updated: PROTOCOLS-118 Fixed continuation request not getting recognised by some clients (#640)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new be80c44  PROTOCOLS-118 Fixed continuation request not getting recognised by some clients (#640)
be80c44 is described below

commit be80c442e5c406bb8a963c3aa98f5e1569279479
Author: Benoit TELLIER <bt...@linagora.com>
AuthorDate: Wed Sep 8 10:12:01 2021 +0700

    PROTOCOLS-118 Fixed continuation request not getting recognised by some clients (#640)
    
    Some clients dont recognise the continuation, unless it is followed by text (eg Nginx reverse proxy)
---
 .../java/org/apache/james/mpt/helper/ByteBufferOutputStream.java     | 4 +---
 .../src/main/java/org/apache/james/mpt/protocol/ProtocolSession.java | 4 ++--
 .../java/org/apache/james/mpt/protocol/ProtocolSessionBuilder.java   | 4 ++--
 .../src/main/resources/org/apache/james/imap/scripts/Annotation.test | 2 +-
 .../org/apache/james/imap/scripts/AnnotationWithBinaryData.test      | 2 +-
 .../org/apache/james/imap/scripts/AnnotationWithLimitation.test      | 2 +-
 .../src/main/resources/org/apache/james/imap/scripts/Append.test     | 2 +-
 .../resources/org/apache/james/imap/scripts/AppendToSelected.test    | 2 +-
 .../core/src/main/resources/org/apache/james/imap/scripts/Quota.test | 2 +-
 .../main/resources/org/apache/james/imap/scripts/SelectAppend.test   | 4 ++--
 .../main/resources/org/apache/james/imap/scripts/SelectUnseen.test   | 4 ++--
 .../src/main/resources/org/apache/james/imap/scripts/StringArgs.test | 2 +-
 .../org/apache/james/imap/decode/ImapRequestStreamLineReader.java    | 2 +-
 .../org/apache/james/imap/encode/AuthenticateResponseEncoder.java    | 2 +-
 .../james/imapserver/netty/AbstractNettyImapRequestLineReader.java   | 5 ++---
 15 files changed, 20 insertions(+), 23 deletions(-)

diff --git a/mpt/core/src/main/java/org/apache/james/mpt/helper/ByteBufferOutputStream.java b/mpt/core/src/main/java/org/apache/james/mpt/helper/ByteBufferOutputStream.java
index bb51dc9..049d658 100644
--- a/mpt/core/src/main/java/org/apache/james/mpt/helper/ByteBufferOutputStream.java
+++ b/mpt/core/src/main/java/org/apache/james/mpt/helper/ByteBufferOutputStream.java
@@ -47,7 +47,7 @@ public class ByteBufferOutputStream extends OutputStream {
     @Override
     public void write(int b) throws IOException {
         buffer.put((byte) b);
-        if (b == '\n' && matchPlus && matchCR && matchLF) {
+        if (matchPlus &&  matchLF) {
             matchPlus = false;
             matchCR = false;
             matchLF = false;
@@ -59,8 +59,6 @@ public class ByteBufferOutputStream extends OutputStream {
         } else if (b == '+' && matchLF) {
             matchPlus = true;
             matchCR = false;
-        } else if (b == '\r' && matchPlus && matchLF) {
-            matchCR = true;
         } else {
             matchPlus = false;
             matchCR = false;
diff --git a/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSession.java b/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSession.java
index fa034ad..a2788c6 100644
--- a/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSession.java
+++ b/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSession.java
@@ -483,8 +483,8 @@ public class ProtocolSession implements ProtocolInteractor {
             continuationExpected = true;
             continued = false;
             String testLine = session.readLine();
-            if (!"+".equals(testLine) || !continued) {
-                final String message = "Expected continuation";
+            if (!testLine.startsWith("+") || !continued) {
+                final String message = String.format("Expected continuation, got '%s'", testLine);
                 handleFailure(continueAfterFailure, message);
             }
             continuationExpected = false;
diff --git a/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSessionBuilder.java b/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSessionBuilder.java
index 22efdaa..f2ac719 100644
--- a/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSessionBuilder.java
+++ b/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSessionBuilder.java
@@ -43,7 +43,7 @@ public class ProtocolSessionBuilder {
 
     public static final String WAIT = "WAIT";
 
-    public static final String SERVER_CONTINUATION_TAG = "S: \\+";
+    public static final String SERVER_CONTINUATION_TAG = "S: \\+ Ok";
 
     public static final String CLIENT_TAG = "C:";
 
@@ -184,7 +184,7 @@ public class ProtocolSessionBuilder {
         while ((line = reader.readLine()) != null) {
             line = substituteVariables(line);
             String location = scriptName + ":" + lineNumber;
-            if (SERVER_CONTINUATION_TAG.equals(line)) {
+            if (line.startsWith("\\+")) {
                 session.cont(sessionNumber);
             } else if (line.startsWith(CLIENT_TAG)) {
                 String clientMsg = "";
diff --git a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Annotation.test b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Annotation.test
index 4114b1a..a6bbb4a 100644
--- a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Annotation.test
+++ b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Annotation.test
@@ -34,7 +34,7 @@ C: a3 SETMETADATA INBOX (/private/comment NIL)
 S: a3 OK SETMETADATA completed.
 
 C: a4 SETMETADATA INBOX (/private/comment {33}
-S: \+
+S: \+ Ok
 C: My new comment across
 C: two lines. )
 S: a4 OK SETMETADATA completed.
diff --git a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AnnotationWithBinaryData.test b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AnnotationWithBinaryData.test
index b16a81d..a97634e 100644
--- a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AnnotationWithBinaryData.test
+++ b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AnnotationWithBinaryData.test
@@ -21,7 +21,7 @@ S: \* CAPABILITY .* ANNOTATION .*
 S: a0 OK CAPABILITY completed.
 
 C: a1 SETMETADATA INBOX (/private/comment {169}
-S: \+
+S: \+ Ok
 C: Content-Type: image/jpeg
 C: Content-Transfer-Encoding: base64
 C: R0lGODlhMQL1APAAAAAAAAAAACH5BAEAAAEALAAAAAAxAvUAAAL-jI-py-0PF5gUxIuz3rz7D4biSJbmiabqqlZuxcbyTNf2jef6zkfvT-kJ)
diff --git a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AnnotationWithLimitation.test b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AnnotationWithLimitation.test
index d0173d6..dbf7808 100644
--- a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AnnotationWithLimitation.test
+++ b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AnnotationWithLimitation.test
@@ -21,7 +21,7 @@ S: \* CAPABILITY .* ANNOTATION .*
 S: a0 OK CAPABILITY completed.
 
 C: a1 SETMETADATA INBOX (/private/comment {1025}
-S: \+
+S: \+ Ok
 C: AnyValueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 C: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 C: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Append.test b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Append.test
index 1a2c5bb..58279ad 100644
--- a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Append.test
+++ b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Append.test
@@ -21,7 +21,7 @@ S: a1 OK CREATE completed.
 
 C: A003 APPEND appendBox {310}
 # Use command continuation request
-S: \+
+S: \+ Ok
 C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
 C: From: Fred Foobar <fo...@Blurdybloop.COM>
 C: Subject: afternoon meeting 2
diff --git a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AppendToSelected.test b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AppendToSelected.test
index 6d1720a..c195060 100644
--- a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AppendToSelected.test
+++ b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AppendToSelected.test
@@ -21,7 +21,7 @@ S: a1 OK CREATE completed.
 
 C: A003 APPEND appendBox {310}
 # Use command continuation request
-S: \+
+S: \+ Ok
 C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
 C: From: Fred Foobar <fo...@Blurdybloop.COM>
 C: Subject: afternoon meeting 2
diff --git a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Quota.test b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Quota.test
index b8c8b22..a5037a0 100644
--- a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Quota.test
+++ b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Quota.test
@@ -32,7 +32,7 @@ S: A002 OK \[READ-WRITE\] SELECT completed\.
 
 C: A003 APPEND #private.imapuser.test {310}
 # Use command continuation request
-S: \+
+S: \+ Ok
 C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
 C: From: Fred Foobar <fo...@Blurdybloop.COM>
 C: Subject: afternoon meeting 2
diff --git a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SelectAppend.test b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SelectAppend.test
index 7098717..0bd0cd2 100644
--- a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SelectAppend.test
+++ b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SelectAppend.test
@@ -31,7 +31,7 @@ S: 10 OK \[READ-WRITE\] SELECT completed.
 
 C: A003 APPEND selectappend {310}
 # Use command continuation request
-S: \+
+S: \+ Ok
 C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
 C: From: Fred Foobar <fo...@Blurdybloop.COM>
 C: Subject: afternoon meeting 2
@@ -48,7 +48,7 @@ S: A003 OK (\[.+\] )?APPEND completed.
 
 C: A009 APPEND selectappend {310}
 # Use command continuation request
-S: \+
+S: \+ Ok
 C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
 C: From: Fred Foobar <fo...@Blurdybloop.COM>
 C: Subject: afternoon meeting 2
diff --git a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SelectUnseen.test b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SelectUnseen.test
index a616bd7..c7acc42 100644
--- a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SelectUnseen.test
+++ b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SelectUnseen.test
@@ -34,7 +34,7 @@ S: 10 OK \[READ-WRITE\] SELECT completed.
 
 C: A003 APPEND selectappend {310}
 # Use command continuation request
-S: \+
+S: \+ Ok
 C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
 C: From: Fred Foobar <fo...@Blurdybloop.COM>
 C: Subject: afternoon meeting 2
@@ -51,7 +51,7 @@ S: A003 OK (\[.+\] )?APPEND completed.
 
 C: A009 APPEND selectappend {310}
 # Use command continuation request
-S: \+
+S: \+ Ok
 C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
 C: From: Fred Foobar <fo...@Blurdybloop.COM>
 C: Subject: afternoon meeting 2
diff --git a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/StringArgs.test b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/StringArgs.test
index 220a42c..57dbb17 100644
--- a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/StringArgs.test
+++ b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/StringArgs.test
@@ -53,7 +53,7 @@ S: a001 OK STATUS completed.
 
 # non-synchronized literal
 C: a001 STATUS {11}
-S: \+
+S: \+ Ok
 C: atomMailbox (MESSAGES)
 S: \* STATUS \"atomMailbox\" \(MESSAGES \d+\)
 S: a001 OK STATUS completed.
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/decode/ImapRequestStreamLineReader.java b/protocols/imap/src/main/java/org/apache/james/imap/decode/ImapRequestStreamLineReader.java
index 4aa3320..b14fe1d 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/decode/ImapRequestStreamLineReader.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/decode/ImapRequestStreamLineReader.java
@@ -96,7 +96,7 @@ public class ImapRequestStreamLineReader extends ImapRequestLineReader implement
     @Override
     protected void commandContinuationRequest() throws DecodingException {
         try {
-            output.write('+');
+            output.write("+ Ok".getBytes());
             output.write('\r');
             output.write('\n');
             output.flush();
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/AuthenticateResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/AuthenticateResponseEncoder.java
index 13f9511..b787a92 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/encode/AuthenticateResponseEncoder.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/AuthenticateResponseEncoder.java
@@ -30,6 +30,6 @@ public class AuthenticateResponseEncoder implements ImapResponseEncoder<Authenti
 
     @Override
     public void encode(AuthenticateResponse message, ImapResponseComposer composer) throws IOException {
-        composer.continuationResponse("");
+        composer.continuationResponse("Ok");
     }
 }
diff --git a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/AbstractNettyImapRequestLineReader.java b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/AbstractNettyImapRequestLineReader.java
index d489d44..38905ed 100644
--- a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/AbstractNettyImapRequestLineReader.java
+++ b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/AbstractNettyImapRequestLineReader.java
@@ -18,7 +18,6 @@
  ****************************************************************/
 package org.apache.james.imapserver.netty;
 
-import org.apache.james.imap.decode.DecodingException;
 import org.apache.james.imap.decode.ImapRequestLineReader;
 import org.jboss.netty.buffer.ChannelBuffer;
 import org.jboss.netty.buffer.ChannelBuffers;
@@ -26,7 +25,7 @@ import org.jboss.netty.channel.Channel;
 
 public abstract class AbstractNettyImapRequestLineReader extends ImapRequestLineReader {
     private final Channel channel;
-    private final ChannelBuffer cRequest = ChannelBuffers.wrappedBuffer("+\r\n".getBytes());
+    private final ChannelBuffer cRequest = ChannelBuffers.wrappedBuffer("+ Ok\r\n".getBytes());
     private final boolean retry;
 
     public AbstractNettyImapRequestLineReader(Channel channel, boolean retry) {
@@ -36,7 +35,7 @@ public abstract class AbstractNettyImapRequestLineReader extends ImapRequestLine
     }
 
     @Override
-    protected void commandContinuationRequest() throws DecodingException {
+    protected void commandContinuationRequest() {
         // only write the request out if this is not a retry to process the
         // request..
 

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