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