summary refs log tree commit diff
path: root/synapse/handlers
diff options
context:
space:
mode:
authorRichard van der Hoff <richard@matrix.org>2017-04-03 16:23:23 +0100
committerRichard van der Hoff <richard@matrix.org>2017-04-03 16:23:23 +0100
commit2d05eb3cf580753ba643410225e883e4d83ecf23 (patch)
tree1c466950d045657c5440da3fa796e7849a3a29b6 /synapse/handlers
parentMerge branch 'release-v0.20.0' of github.com:matrix-org/synapse into develop (diff)
parentMerge pull request #2094 from matrix-org/rav/fix_federation_join (diff)
downloadsynapse-2d05eb3cf580753ba643410225e883e4d83ecf23.tar.xz
Merge remote-tracking branch 'origin/release-v0.20.0' into develop
Diffstat (limited to 'synapse/handlers')
-rw-r--r--synapse/handlers/federation.py16
1 files changed, 13 insertions, 3 deletions
diff --git a/synapse/handlers/federation.py b/synapse/handlers/federation.py
index 888dd01240..2ecc0087b8 100644
--- a/synapse/handlers/federation.py
+++ b/synapse/handlers/federation.py
@@ -1004,9 +1004,19 @@ class FederationHandler(BaseHandler):
         )
 
         event.internal_metadata.outlier = False
-        # Send this event on behalf of the origin server since they may not
-        # have an up to data view of the state of the room at this event so
-        # will not know which servers to send the event to.
+        # Send this event on behalf of the origin server.
+        #
+        # The reasons we have the destination server rather than the origin
+        # server send it are slightly mysterious: the origin server should have
+        # all the neccessary state once it gets the response to the send_join,
+        # so it could send the event itself if it wanted to. It may be that
+        # doing it this way reduces failure modes, or avoids certain attacks
+        # where a new server selectively tells a subset of the federation that
+        # it has joined.
+        #
+        # The fact is that, as of the current writing, Synapse doesn't send out
+        # the join event over federation after joining, and changing it now
+        # would introduce the danger of backwards-compatibility problems.
         event.internal_metadata.send_on_behalf_of = origin
 
         context, event_stream_id, max_stream_id = yield self._handle_new_event(