Skip to content

Ignore received EDUs if origin server in room ACL - #18475

Merged
MadLittleMods merged 14 commits into
developfrom
devon/acl-edus
Apr 25, 2026
Merged

Ignore received EDUs if origin server in room ACL#18475
MadLittleMods merged 14 commits into
developfrom
devon/acl-edus

Conversation

@devonh

@devonh devonh commented May 23, 2025

Copy link
Copy Markdown
Member

Implements: MSC4163: Make ACLs apply to EDUs

Part of #18118 to declare support for Matrix v1.13

Complement PR: matrix-org/complement#783 -> matrix-org/complement#862

Pull Request Checklist

  • Pull request is based on the develop branch
  • Pull request includes a changelog file. The entry should:
    • Be a short description of your change which makes sense to users. "Fixed a bug that prevented receiving messages from other servers." instead of "Moved X method from EventStore to EventWorkerStore.".
    • Use markdown where necessary, mostly for code blocks.
    • End with either a period (.) or an exclamation mark (!).
    • Start with a capital letter.
    • Feel free to credit yourself, by adding a sentence "Contributed by @github_username." or "Contributed by [Your Name]." to the end of the entry.
  • Code style is correct (run the linters)

@devonh
devonh requested a review from a team as a code owner May 23, 2025 21:59
Comment thread changelog.d/18475.feature Outdated
Comment thread changelog.d/18475.feature Outdated
Co-authored-by: Eric Eastwood <erice@element.io>
Comment thread synapse/federation/federation_server.py Outdated
Comment thread synapse/federation/federation_server.py Outdated
Comment thread synapse/federation/federation_server.py Outdated
Comment thread synapse/federation/federation_server.py Outdated
Comment thread synapse/federation/federation_server.py
Comment thread synapse/federation/federation_server.py Outdated
@devonh
devonh requested a review from MadLittleMods November 14, 2025 00:13

@MadLittleMods MadLittleMods left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good assuming Complement tests are ready to ship alongside and the tests pass here.

destination=self.server_name,
edu_type=edu_dict["edu_type"],
content=edu_dict["content"],
content=copy.deepcopy(edu_dict["content"]),

@MadLittleMods MadLittleMods Nov 14, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Previous discussion

Add a comment about copying because we mutate it below

@FrenchGithubUser

Copy link
Copy Markdown
Contributor

Hey, I'd be interested in taking over this PR to finish what has to be done. Is this ok for you @sandhose and @devonh ? :)

Comment thread changelog.d/18475.feature

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey, I'd be interested in taking over this PR to finish what has to be done. Is this ok for you [...] ? :)

-- @FrenchGithubUser, #18475 (comment)

This PR appears close as-is (just needs one comment added) so I don't think creating a new PR is that useful. Getting the Complement side sorted sounds good as that's the main blocker here. Once the Complement tests are merged, we can just wrap up this PR ⏩

(better to comment on the diff so we can thread the discussion)

Comment thread changelog.d/18475.feature

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tested to make sure COMPLEMENT_DIR=../complement ./scripts-dev/complement.sh -run TestACLsForEDUs (test from matrix-org/complement#862) passes with this PR and fails on develop as expected

Comment thread changelog.d/18475.feature

@MadLittleMods MadLittleMods Apr 24, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Complement failing with panic: BUG: Empty package name encountered.

For some reason, the Complement CI is failing with:

panic: BUG: Empty package name encountered.

goroutine 8 [running]:
github.com/gotesttools/gotestfmt/v2/parser.(*packageTracker).ensurePackage(...)
	/home/runner/go/pkg/mod/github.com/gotesttools/gotestfmt/v2@v2.5.0/parser/parse.go:220
github.com/gotesttools/gotestfmt/v2/parser.(*packageTracker).AddOutput(0xc000198dc0?, {0x0?, 0x2e?}, {0x0?, 0x0?}, {0xc00001f500?, 0x0?, 0x0?})
	/home/runner/go/pkg/mod/github.com/gotesttools/gotestfmt/v2@v2.5.0/parser/parse.go:192 +0x43c
github.com/gotesttools/gotestfmt/v2/parser.parse(0xc00001c380, 0xc00001c3f0, 0xc00001c460, 0xc00001c4d0, 0xc00001c540)
	/home/runner/go/pkg/mod/github.com/gotesttools/gotestfmt/v2@v2.5.0/parser/parse.go:133 +0x69f
created by github.com/gotesttools/gotestfmt/v2/parser.Parse in goroutine 1
	/home/runner/go/pkg/mod/github.com/gotesttools/gotestfmt/v2@v2.5.0/parser/parse.go:26 +0xea
cat: write error: Broken pipe

This is because the first lines of the output don't include "Package":"..." like the rest of the lines and gotestfmt chokes on parsing it.

{"ImportPath":"./tests/msc4222","Action":"build-output","Output":"# ./tests/msc4222\n"}
{"ImportPath":"./tests/msc4222","Action":"build-output","Output":"stat /home/runner/work/synapse/synapse/complement/tests/msc4222: directory not found\n"}
{"ImportPath":"./tests/msc4222","Action":"build-fail"}

Archive: 18475-72962188961-job-log.txt

If you download the archive, you can reproduce this locally by running: sed -n '3379,15707p' ~/Downloads/18475-72962188961-job-log.txt | sed 's/^[^ ]* //' | go run github.com/gotesttools/gotestfmt/v2/cmd/gotestfmt@v2.5.0 -hide "successful-downloads,successful-tests,empty-packages"

And if you skip those first 3 lines, things work: sed -n '3382,15707p' ~/Downloads/18475-72962188961-job-log.txt | sed 's/^[^ ]* //' | go run github.com/gotesttools/gotestfmt/v2/cmd/gotestfmt@v2.5.0 -hide "successful-downloads,successful-tests,empty-packages"

Why are we seeing /home/runner/work/synapse/synapse/complement/tests/msc4222: directory not found?

Not sure, matrix-org/complement -> tests/msc4222 on main still exists 🤔

Doesn't feel like it's anything related to this PR but it's consistent across runs and we're not seeing the same problem on develop

I bet this is because matrix-org/complement#783 existed with the same branch devon/acl-edus but that Complement branch is outdated and doesn't include tests/msc4222. We probably just need to delete that branch ⏩

This started failing because I merged in the latest develop here which brings in this update to include ./tests/msc4222 as a test package:

./tests/msc4222

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CI passed after deleting the devon/acl-edus branch in the Complement repo ✅

@MadLittleMods
MadLittleMods merged commit 3a26806 into develop Apr 25, 2026
46 checks passed
@MadLittleMods
MadLittleMods deleted the devon/acl-edus branch April 25, 2026 00:31
MadLittleMods pushed a commit to matrix-org/complement that referenced this pull request Apr 25, 2026
FrenchGithubUser pushed a commit to famedly/synapse-upstreaming that referenced this pull request Jun 12, 2026
…hq#18475)

Implements: [MSC4163: Make ACLs apply to
EDUs](matrix-org/matrix-spec-proposals#4163)

Part of element-hq#18118 to declare support for Matrix v1.13

Complement PR: ~~matrix-org/complement#783 ->
matrix-org/complement#862


---------

Co-authored-by: Eric Eastwood <erice@element.io>
Co-authored-by: Quentin Gliech <quenting@element.io>
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Jul 7, 2026
Tested on NetBSD 10 amd64 with 2026Q2 environment.

# Synapse 1.156.0 (2026-07-07)

## Features

- Expose [MSC4354 Sticky Events](matrix-org/matrix-spec-proposals#4354) over [MSC4186 (Simplified) Sliding Sync](matrix-org/matrix-spec-proposals#4186). ([\#19591](element-hq/synapse#19591))
- Stabilize support for sending ephemeral events to application services, as per [MSC2409](matrix-org/matrix-spec-proposals#2409). Contributed by @jason-famedly @ Famedly. ([\#19758](element-hq/synapse#19758))
- Include `allowed_room_ids` in the `/summary` client-server API response for rooms with restricted join rules, as required by Matrix 1.15.
  Contributed by @FrenchGithubUser @famedly. ([\#19762](element-hq/synapse#19762))
- [MSC4140: Cancellable delayed events](matrix-org/matrix-spec-proposals#4140): Allow authentication on delayed event management endpoints (such as `/restart`) to bypass ratelimits for unauthenticated requests based on the client IP address. ([\#19794](element-hq/synapse#19794))
- Add new metric `synapse_non_deactivated_user_count` which tracks the number of non-deactivated users in the database, split by `app_service`. ([\#19848](element-hq/synapse#19848))
- The `GET /_matrix/client/unstable/org.matrix.msc1763/retention/configuration` endpoint is now provided when retention
  is enabled and `experimental_features.msc1763_enabled` is enabled, based on
  [MSC1763](matrix-org/matrix-spec-proposals#1763). ([\#19853](element-hq/synapse#19853))
- Add experimental support for [MSC4491: Invite reasons in room creation](matrix-org/matrix-spec-proposals#4491). ([\#19874](element-hq/synapse#19874))


# Synapse 1.155.0 (2026-06-16)


# Synapse 1.154.0 (2026-06-04)

## Features

- Add support for [MSC4452: Preview URL capabilities API](matrix-org/matrix-spec-proposals#4452) which exposes a `io.element.msc4452.preview_url` capability.
  If `experimental_features.msc4452_enabled` is `true`, the `/_matrix/(client/v1/media|media/v3)/preview_url` endpoint
  now responds with a 403 status code when the capability is disabled. ([\#19715](element-hq/synapse#19715))


# Synapse 1.153.0 (2026-05-19)

## Features

- Make ACLs apply to EDUs per [MSC4163](matrix-org/matrix-spec-proposals#4163). ([\#18475](element-hq/synapse#18475))
- Stabilize [MSC3266: Room summary API](matrix-org/matrix-spec-proposals#3266), removing the experimental config flag `msc3266_enabled`. Contributed by @dasha-uwu. ([\#19720](element-hq/synapse#19720))
- Partial [MSC4311](matrix-org/matrix-spec-proposals#4311) implementation: `m.room.create` is now a required part of stripped `invite_state`/`knock_state` . Contributed by @FrenchGithubUser @famedly. ([\#19722](element-hq/synapse#19722))
- Expose `tombstoned` and `replacement_room` in room details on admin API endpoint `GET /_synapse/admin/v1/rooms/<room_id>`. Contributed by Noah Markert. ([\#19737](element-hq/synapse#19737))


# Synapse 1.152.1 (2026-05-07)


# Synapse 1.152.0 (2026-04-28)

## Features

- Add a ["Listing quarantined media changes" Admin API](https://element-hq.github.io/synapse/latest/admin_api/media_admin_api.html#listing-quarantined-media-changes) for retrieving a paginated record of when media became (un)quarantined. ([\#19558](element-hq/synapse#19558), [\#19677](element-hq/synapse#19677), [\#19694](element-hq/synapse#19694))
- Advertise [MSC4445](matrix-org/matrix-spec-proposals#4445) sync timeline order in `unstable_features`. ([\#19642](element-hq/synapse#19642))
- Report the Rust compiler version used in the Prometheus metrics. Contributed by Noah Markert. ([\#19643](element-hq/synapse#19643))
- Passthrough 'article' and 'profile' OpenGraph metadata on URL preview requests. ([\#19659](element-hq/synapse#19659))
- Add a way to re-sign local events with a new signing key. ([\#19668](element-hq/synapse#19668))
- Support [MSC4450: Identity Provider selection for User-Interactive Authentication with Legacy Single Sign-On](matrix-org/matrix-spec-proposals#4450). ([\#19693](element-hq/synapse#19693))
- Add experimental support for [MSC4242](matrix-org/matrix-spec-proposals#4242): State DAGs. Excludes federation support. ([\#19424](element-hq/synapse#19424))
- Adds [Admin API](https://element-hq.github.io/synapse/latest/usage/administration/admin_api/index.html) endpoints to
  list, fetch and delete user reports. ([\#19657](element-hq/synapse#19657))
- Reduce database disk space usage by pruning old rows from `device_lists_changes_in_room`. ([\#19473](element-hq/synapse#19473), [\#19709](element-hq/synapse#19709))


# Synapse 1.151.0 (2026-04-07)

## Features

- Add stable support for [MSC4284](matrix-org/matrix-spec-proposals#4284) Policy Servers. ([\#19503](element-hq/synapse#19503))
- Update and stabilize support for [MSC2666](matrix-org/matrix-spec-proposals#2666): Get rooms in common with another user. Contributed by @tulir @ Beeper. ([\#19511](element-hq/synapse#19511))
- Updated experimental support for [MSC4388: Secure out-of-band channel for sign in with QR](matrix-org/matrix-spec-proposals#4388). ([\#19573](element-hq/synapse#19573))
- Stabilize `room_version` and `encryption` fields in the space/room `/hierarchy` API (part of [MSC3266](matrix-org/matrix-spec-proposals#3266)). ([\#19576](element-hq/synapse#19576))
- Introduce a [configuration option](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#matrix_authentication_service) to allow using HTTP/2 over plaintext when Synapse connects to Matrix Authentication Service. ([\#19586](element-hq/synapse#19586))

## Deprecations and Removals

- Remove support for [MSC3852: Expose user agent information on Device](matrix-org/matrix-spec-proposals#3852) as the MSC was closed. ([\#19430](element-hq/synapse#19430))


# Synapse 1.150.0 (2026-03-24)

## Features

- Add experimental support for the [MSC4370](matrix-org/matrix-spec-proposals#4370) Federation API `GET /extremities` endpoint. ([\#19314](element-hq/synapse#19314))
- [MSC4140: Cancellable delayed events](matrix-org/matrix-spec-proposals#4140): When persisting a delayed event to the timeline, include its `delay_id` in the event's `unsigned` section in `/sync` responses to the event sender. ([\#19479](element-hq/synapse#19479))
- Expose [MSC4354 Sticky Events](matrix-org/matrix-spec-proposals#4354) over the legacy (v3) /sync API. ([\#19487](element-hq/synapse#19487))
- When Matrix Authentication Service (MAS) integration is enabled, allow MAS to set the user locked status in Synapse. ([\#19554](element-hq/synapse#19554))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants