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 2d7ef20e12 [FIX] Handle Lookup write propagation in complex sharing
scenari
2d7ef20e12 is described below
commit 2d7ef20e12cf7525f6179fba415f6f1971de92bc
Author: Benoit TELLIER <[email protected]>
AuthorDate: Fri Feb 20 18:36:44 2026 +0100
[FIX] Handle Lookup write propagation in complex sharing scenari
Spotted on functional mailboxes
18:12:50.435 [ERROR] o.a.j.e.d.InVmEventDelivery - Error while processing
listener
org.apache.james.jmap.event.PropagateLookupRightListener$PropagateLookupRightListenerGroup@34647f77
org.apache.james.mailbox.exception.InsufficientRightsException: Setting ACL
is only permitted to the owner and admins of the mailbox
at
org.apache.james.mailbox.store.StoreRightManager.assertHaveAccessTo(StoreRightManager.java:285)
at
org.apache.james.mailbox.store.StoreRightManager.lambda$applyRightsCommandReactive$10(StoreRightManager.java:193)
at
com.github.fge.lambdas.consumers.ConsumerChainer.doAccept(ConsumerChainer.java:20)
at
com.github.fge.lambdas.consumers.ThrowingConsumer.accept(ThrowingConsumer.java:22)
---
.../jmap/event/PropagateLookupRightListener.java | 5 ++--
.../event/PropagateLookupRightListenerTest.java | 30 ++++++++++++++++++++++
2 files changed, 33 insertions(+), 2 deletions(-)
diff --git
a/server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
b/server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
index 1b63f169bc..01b9a33e28 100644
---
a/server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
+++
b/server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
@@ -33,6 +33,7 @@ import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageManager;
import org.apache.james.mailbox.RightManager;
import org.apache.james.mailbox.acl.ACLDiff;
+import org.apache.james.mailbox.events.MailboxEvents;
import org.apache.james.mailbox.events.MailboxEvents.MailboxACLUpdated;
import org.apache.james.mailbox.events.MailboxEvents.MailboxRenamed;
import org.apache.james.mailbox.exception.MailboxNotFoundException;
@@ -130,8 +131,8 @@ public class PropagateLookupRightListener implements
EventListener.ReactiveGroup
.then();
}
- private MailboxSession createMailboxSession(Event event) {
- return mailboxManager.createSystemSession(event.getUsername());
+ private MailboxSession createMailboxSession(MailboxEvents.MailboxEvent
event) {
+ return
mailboxManager.createSystemSession(event.getMailboxPath().getUser());
}
private Mono<Void> applyLookupRight(MailboxSession session, MailboxPath
mailboxPath, MailboxACL.EntryKey entryKey) {
diff --git
a/server/protocols/jmap-rfc-8621/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java
b/server/protocols/jmap-rfc-8621/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java
index df9a9a1930..dc3cf1df55 100644
---
a/server/protocols/jmap-rfc-8621/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java
+++
b/server/protocols/jmap-rfc-8621/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java
@@ -46,7 +46,9 @@ import org.junit.Test;
public class PropagateLookupRightListenerTest {
private static final Username OWNER_USER = Username.of("user");
private static final Username SHARED_USER = Username.of("sharee");
+ private static final Username SHARED_USER_2 = Username.of("sharee");
private static final EntryKey SHARED_USER_KEY =
EntryKey.createUserEntryKey(SHARED_USER);
+ private static final EntryKey SHARED_USER_KEY_2 =
EntryKey.createUserEntryKey(SHARED_USER);
private static final MailboxPath PARENT_MAILBOX =
MailboxPath.forUser(OWNER_USER, "shared");
private static final MailboxPath CHILD_MAILBOX =
MailboxPath.forUser(OWNER_USER, "shared.sub1");
@@ -207,6 +209,34 @@ public class PropagateLookupRightListenerTest {
.contains(lookupEntry);
}
+ @Test
+ public void eventShouldUpdateAllParentWhenDelegateUpdateLookupRight()
throws Exception {
+ storeRightManager.setRights(
+ GRAND_CHILD_MAILBOX,
+ new MailboxACL(
+ new Entry(SHARED_USER_KEY, MailboxACL.FULL_RIGHTS)),
+ mailboxSession);
+
+ storeRightManager.setRights(
+ GRAND_CHILD_MAILBOX,
+ new MailboxACL(
+ new Entry(SHARED_USER_KEY_2, new Rfc4314Rights(Right.Lookup))),
+ MailboxSessionUtil.create(SHARED_USER_2));
+
+ MailboxACL actualParentACL =
storeMailboxManager.getMailbox(parentMailboxId, mailboxSession)
+ .getMetaData(IGNORE, mailboxSession,
MessageManager.MailboxMetaData.FetchGroup.NO_COUNT)
+ .getACL();
+
+ MailboxACL actualChildACL =
storeMailboxManager.getMailbox(parentMailboxId, mailboxSession)
+ .getMetaData(IGNORE, mailboxSession,
MessageManager.MailboxMetaData.FetchGroup.NO_COUNT)
+ .getACL();
+
+ assertThat(actualParentACL.getEntries())
+ .contains(lookupEntry);
+ assertThat(actualChildACL.getEntries())
+ .contains(lookupEntry);
+ }
+
@Test
public void eventShouldDoNothingWhenMailboxACLRemoveLookupRight() throws
Exception {
Mailbox grandChildMailbox =
mailboxMapper.getMailboxMapper(mailboxSession).findMailboxById(grandChildMailboxId).block();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]