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]
