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

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

commit 7d4cc8c82bac3dc7fc1406dded6ab31e31e2f192
Author: Quan Tran <[email protected]>
AuthorDate: Thu Aug 13 09:44:25 2026 +0700

    JAMES-4210 Adapt ManageSieve MPT to shared SASL
    
    Build the MPT ManageSieve host with the shared PLAIN mechanism and 
authenticator. Update protocol scripts to expect RFC 5804 challenge framing and 
the generic unknown-mechanism response.
---
 mpt/impl/managesieve/core/pom.xml                  |  8 ++++++++
 .../james/mpt/host/JamesManageSieveHostSystem.java | 22 +++++++++++++++++++++-
 .../apache/james/mpt/host/ManageSieveSession.java  |  1 +
 .../james/managesieve/scripts/authenticate.test    | 10 +++++-----
 .../james/managesieve/scripts/capability.test      |  2 +-
 .../james/managesieve/scripts/checkscript.test     |  2 +-
 .../james/managesieve/scripts/deletescript.test    |  2 +-
 .../james/managesieve/scripts/getscript.test       |  2 +-
 .../james/managesieve/scripts/havespace.test       |  2 +-
 .../james/managesieve/scripts/listscripts.test     |  2 +-
 .../james/managesieve/scripts/putscript.test       |  2 +-
 .../james/managesieve/scripts/renamescript.test    |  2 +-
 .../james/managesieve/scripts/setactive.test       |  2 +-
 .../apache/james/managesieve/scripts/starttls.test |  2 +-
 .../james/managesieve/scripts/unauthenticate.test  |  2 +-
 15 files changed, 46 insertions(+), 17 deletions(-)

diff --git a/mpt/impl/managesieve/core/pom.xml 
b/mpt/impl/managesieve/core/pom.xml
index c55082bfd5..f5778891b0 100644
--- a/mpt/impl/managesieve/core/pom.xml
+++ b/mpt/impl/managesieve/core/pom.xml
@@ -30,6 +30,10 @@
     <name>Apache James :: MPT :: ManageSieve :: Core</name>
 
     <dependencies>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mpt-core</artifactId>
@@ -47,6 +51,10 @@
             <groupId>${james.protocols.groupId}</groupId>
             <artifactId>protocols-managesieve</artifactId>
         </dependency>
+        <dependency>
+            <groupId>${james.protocols.groupId}</groupId>
+            <artifactId>protocols-sasl</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.junit.jupiter</groupId>
             <artifactId>junit-jupiter-engine</artifactId>
diff --git 
a/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/JamesManageSieveHostSystem.java
 
b/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/JamesManageSieveHostSystem.java
index b8f747a96d..7bbbf834f3 100644
--- 
a/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/JamesManageSieveHostSystem.java
+++ 
b/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/JamesManageSieveHostSystem.java
@@ -21,16 +21,25 @@ package org.apache.james.mpt.host;
 
 import org.apache.james.core.Username;
 import org.apache.james.core.quota.QuotaSizeLimit;
+import org.apache.james.mailbox.Authenticator;
+import org.apache.james.mailbox.Authorizator;
+import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.managesieve.core.CoreProcessor;
 import org.apache.james.managesieve.jsieve.Parser;
 import org.apache.james.managesieve.transcode.ArgumentParser;
 import org.apache.james.managesieve.transcode.ManageSieveProcessor;
 import org.apache.james.mpt.api.Continuation;
 import org.apache.james.mpt.api.Session;
+import org.apache.james.protocols.api.sasl.SaslMechanism;
+import org.apache.james.protocols.sasl.JamesSaslAuthenticator;
+import org.apache.james.protocols.sasl.plain.PlainSaslMechanism;
 import org.apache.james.sieverepository.api.SieveRepository;
 import org.apache.james.user.api.UsersRepository;
+import org.apache.james.user.api.UsersRepositoryException;
 import org.apache.jsieve.ConfigurationManager;
 
+import com.google.common.collect.ImmutableList;
+
 public abstract class JamesManageSieveHostSystem implements 
ManageSieveHostSystem {
 
     private UsersRepository usersRepository;
@@ -41,7 +50,18 @@ public abstract class JamesManageSieveHostSystem implements 
ManageSieveHostSyste
     public void beforeTest() throws Exception {
         this.usersRepository = createUsersRepository();
         this.sieveRepository = createSieveRepository();
-        this.processor = new ManageSieveProcessor(new ArgumentParser(new 
CoreProcessor(sieveRepository, usersRepository, new Parser(new 
ConfigurationManager()))));
+        ImmutableList<SaslMechanism> saslMechanisms = ImmutableList.of(new 
PlainSaslMechanism(true, false));
+        Authenticator authenticator = (username, password) -> {
+            try {
+                return usersRepository.test(username, password.toString());
+            } catch (UsersRepositoryException e) {
+                throw new MailboxException("Unable to access users 
repository", e);
+            }
+        };
+        this.processor = new ManageSieveProcessor(
+            new ArgumentParser(new CoreProcessor(sieveRepository, new 
Parser(new ConfigurationManager()), saslMechanisms)),
+            saslMechanisms,
+            new JamesSaslAuthenticator(authenticator, (user, otherUser) -> 
Authorizator.AuthorizationState.FORBIDDEN));
     }
 
     @Override
diff --git 
a/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
 
b/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
index 9e8033d9c7..0303384e03 100644
--- 
a/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
+++ 
b/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
@@ -48,6 +48,7 @@ public class ManageSieveSession implements Session {
         this.out = new ByteBufferOutputStream(continuation);
         this.in = new ByteBufferInputStream();
         this.settableSession = new SettableSession();
+        this.settableSession.setStartTlsSupported(true);
     }
 
     @Override
diff --git 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/authenticate.test
 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/authenticate.test
index 1b03d55e31..bc946a333c 100644
--- 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/authenticate.test
+++ 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/authenticate.test
@@ -21,24 +21,24 @@ C: AUTHENTICATE
 S: NO "ManageSieve syntax is incorrect: quoted SASL mechanism must be supplied"
 
 C: AUTHENTICATE "UNKNOWN"
-S: NO "Unknown SASL mechanism UNKNOWN"
+S: NO "Unknown SASL mechanism"
 
 C: AUTHENTICATE "PLAIN"
-S: \+ ""
+S: ""
 C: GETSCRIPT toto.sieve
 S: NO "Authentication failed with: Verification of credentials failed"
 
 C: AUTHENTICATE "PLAIN"
-S: \+ ""
+S: ""
 C:
 S: NO "ManageSieve syntax is incorrect: authentication data must be supplied"
 
 C: AUTHENTICATE "PLAIN"
-S: \+ ""
+S: ""
 C: tin password
 S: NO "Authentication failed with: Verification of credentials failed"
 
 C: AUTHENTICATE "PLAIN"
-S: \+ ""
+S: ""
 C: user password
 S: OK
diff --git 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/capability.test
 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/capability.test
index ae8c08f533..fdcbe16138 100644
--- 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/capability.test
+++ 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/capability.test
@@ -38,7 +38,7 @@ S: "VERSION" "1.0"
 S: OK
 
 C: AUTHENTICATE "PLAIN"
-S: \+ ""
+S: ""
 C: user password
 S: OK
 
diff --git 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/checkscript.test
 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/checkscript.test
index b2df42bd63..9ee71a8b21 100644
--- 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/checkscript.test
+++ 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/checkscript.test
@@ -34,7 +34,7 @@ C:
 S: NO
 
 C: AUTHENTICATE "PLAIN"
-S: \+ ""
+S: ""
 C: user password
 S: OK
 
diff --git 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/deletescript.test
 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/deletescript.test
index 6fc30c9620..517d2702cc 100644
--- 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/deletescript.test
+++ 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/deletescript.test
@@ -24,7 +24,7 @@ C: DELETESCRIPT "foo"
 S: NO
 
 C: AUTHENTICATE "PLAIN"
-S: \+ ""
+S: ""
 C: user password
 S: OK
 
diff --git 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/getscript.test
 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/getscript.test
index 9042c1d925..ee6205b500 100644
--- 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/getscript.test
+++ 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/getscript.test
@@ -24,7 +24,7 @@ C: GETSCRIPT "foo"
 S: NO
 
 C: AUTHENTICATE "PLAIN"
-S: \+ ""
+S: ""
 C: user password
 S: OK
 
diff --git 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/havespace.test
 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/havespace.test
index 2e742f9912..8743a929cf 100644
--- 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/havespace.test
+++ 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/havespace.test
@@ -27,7 +27,7 @@ C: HAVESPACE "scriptname" 49
 S: NO
 
 C: AUTHENTICATE "PLAIN"
-S: \+ ""
+S: ""
 C: user password
 S: OK
 
diff --git 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/listscripts.test
 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/listscripts.test
index f470c37fc0..65c8d4d3f3 100644
--- 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/listscripts.test
+++ 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/listscripts.test
@@ -21,7 +21,7 @@ C: LISTSCRIPTS
 S: NO
 
 C: AUTHENTICATE "PLAIN"
-S: \+ ""
+S: ""
 C: user password
 S: OK
 
diff --git 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/putscript.test
 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/putscript.test
index e481bfe634..c233f6b6f6 100644
--- 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/putscript.test
+++ 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/putscript.test
@@ -39,7 +39,7 @@ C:
 S: NO
 
 C: AUTHENTICATE "PLAIN"
-S: \+ ""
+S: ""
 C: user password
 S: OK
 
diff --git 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/renamescript.test
 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/renamescript.test
index 2472f3b81c..76cbbe12e7 100644
--- 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/renamescript.test
+++ 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/renamescript.test
@@ -27,7 +27,7 @@ C: RENAMESCRIPT "foo" "bar"
 S: NO
 
 C: AUTHENTICATE "PLAIN"
-S: \+ ""
+S: ""
 C: user password
 S: OK
 
diff --git 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/setactive.test
 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/setactive.test
index e232ef0d60..089b56fb54 100644
--- 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/setactive.test
+++ 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/setactive.test
@@ -24,7 +24,7 @@ C: SETACTIVE "foo"
 S: NO
 
 C: AUTHENTICATE "PLAIN"
-S: \+ ""
+S: ""
 C: user password
 S: OK
 
diff --git 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/starttls.test
 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/starttls.test
index 6e1526c13d..336b0f7487 100644
--- 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/starttls.test
+++ 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/starttls.test
@@ -24,7 +24,7 @@ C: STARTTLS
 S: NO You can't enable two time SSL encryption
 
 C: AUTHENTICATE "PLAIN"
-S: \+ ""
+S: ""
 C: user password
 S: OK
 
diff --git 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/unauthenticate.test
 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/unauthenticate.test
index b2da7480c0..ef8e65e625 100644
--- 
a/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/unauthenticate.test
+++ 
b/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/unauthenticate.test
@@ -27,7 +27,7 @@ C: UNAUTHENTICATE
 S: NO UNAUTHENTICATE command must be issued in authenticated state
 
 C: AUTHENTICATE "PLAIN"
-S: \+ ""
+S: ""
 C: user password
 S: OK
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to