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]

Reply via email to