diff options
author | Erik Johnston <erik@matrix.org> | 2019-01-29 16:09:29 +0000 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2019-01-29 16:15:00 +0000 |
commit | 770b8234450cae5a89173e9269deac9793059aa5 (patch) | |
tree | 92633cde2502864ae0ea79721447c941810fd0a4 | |
parent | Merge pull request #4481 from matrix-org/erikj/event_builder (diff) | |
download | synapse-770b8234450cae5a89173e9269deac9793059aa5.tar.xz |
Only check event IDs domain signed event for V1 and V2
Since newer versions of events don't have the same format for event ID.
-rw-r--r-- | synapse/event_auth.py | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/synapse/event_auth.py b/synapse/event_auth.py index 9adedbbb02..9199a6055f 100644 --- a/synapse/event_auth.py +++ b/synapse/event_auth.py @@ -20,7 +20,13 @@ from signedjson.key import decode_verify_key_bytes from signedjson.sign import SignatureVerifyException, verify_signed_json from unpaddedbase64 import decode_base64 -from synapse.api.constants import KNOWN_ROOM_VERSIONS, EventTypes, JoinRules, Membership +from synapse.api.constants import ( + KNOWN_ROOM_VERSIONS, + EventTypes, + JoinRules, + Membership, + RoomVersions, +) from synapse.api.errors import AuthError, EventSizeError, SynapseError from synapse.types import UserID, get_domain_from_id @@ -49,7 +55,6 @@ def check(room_version, event, auth_events, do_sig_check=True, do_size_check=Tru if do_sig_check: sender_domain = get_domain_from_id(event.sender) - event_id_domain = get_domain_from_id(event.event_id) is_invite_via_3pid = ( event.type == EventTypes.Member @@ -66,9 +71,13 @@ def check(room_version, event, auth_events, do_sig_check=True, do_size_check=Tru if not is_invite_via_3pid: raise AuthError(403, "Event not signed by sender's server") - # Check the event_id's domain has signed the event - if not event.signatures.get(event_id_domain): - raise AuthError(403, "Event not signed by sending server") + if event.format_version in (RoomVersions.V1, RoomVersions.V2): + # Only older room versions have event IDs to check. + event_id_domain = get_domain_from_id(event.event_id) + + # Check the origin domain has signed the event + if not event.signatures.get(event_id_domain): + raise AuthError(403, "Event not signed by sending server") if auth_events is None: # Oh, we don't know what the state of the room was, so we |