Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 5957372

Browse files
committed
Return errors from send_join etc if the event is rejected
Rather than accepting unauthed events via `send_join` and friends, raise a 403 if someone tries to pull a fast one.
1 parent 630184b commit 5957372

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

synapse/handlers/federation.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1991,6 +1991,11 @@ async def on_send_membership_event(
19911991
event.internal_metadata.send_on_behalf_of = origin
19921992

19931993
context = await self.state_handler.compute_event_context(event)
1994+
context = await self._check_event_auth(origin, event, context)
1995+
if context.rejected:
1996+
raise SynapseError(
1997+
403, f"{event.membership} event was rejected", Codes.FORBIDDEN
1998+
)
19941999

19952000
# for joins, we need to check the restrictions of restricted rooms
19962001
if event.membership == Membership.JOIN:
@@ -2008,8 +2013,8 @@ async def on_send_membership_event(
20082013
403, "This event is not allowed in this context", Codes.FORBIDDEN
20092014
)
20102015

2011-
await self._auth_and_persist_event(origin, event, context)
2012-
2016+
# all looks good, we can persist the event.
2017+
await self._run_push_actions_and_persist_event(event, context)
20132018
return context
20142019

20152020
async def _check_join_restrictions(
@@ -2504,9 +2509,9 @@ async def _check_event_auth(
25042509
origin: str,
25052510
event: EventBase,
25062511
context: EventContext,
2507-
state: Optional[Iterable[EventBase]],
2508-
auth_events: Optional[MutableStateMap[EventBase]],
2509-
backfilled: bool,
2512+
state: Optional[Iterable[EventBase]] = None,
2513+
auth_events: Optional[MutableStateMap[EventBase]] = None,
2514+
backfilled: bool = False,
25102515
) -> EventContext:
25112516
"""
25122517
Checks whether an event should be rejected (for failing auth checks).

tests/federation/transport/test_knocking.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,7 @@ async def approve_all_signature_checking(_, pdu):
205205

206206
# Have this homeserver skip event auth checks. This is necessary due to
207207
# event auth checks ensuring that events were signed by the sender's homeserver.
208-
async def _check_event_auth(
209-
origin, event, context, state, auth_events, backfilled
210-
):
208+
async def _check_event_auth(origin, event, context, *args, **kwargs):
211209
return context
212210

213211
homeserver.get_federation_handler()._check_event_auth = _check_event_auth

0 commit comments

Comments
 (0)