summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--synapse/federation/federation_client.py33
1 files changed, 17 insertions, 16 deletions
diff --git a/synapse/federation/federation_client.py b/synapse/federation/federation_client.py
index b809e935a0..f87e84db73 100644
--- a/synapse/federation/federation_client.py
+++ b/synapse/federation/federation_client.py
@@ -225,11 +225,11 @@ class FederationClient(object):
         ]
 
         signed_pdus = yield self._check_sigs_and_hash_and_fetch(
-            pdus, outlier=True
+            destination, pdus, outlier=True
         )
 
         signed_auth = yield self._check_sigs_and_hash_and_fetch(
-            auth_chain, outlier=True
+            destination, auth_chain, outlier=True
         )
 
         signed_auth.sort(key=lambda e: e.depth)
@@ -249,7 +249,7 @@ class FederationClient(object):
         ]
 
         signed_auth = yield self._check_sigs_and_hash_and_fetch(
-            auth_chain, outlier=True
+            destination, auth_chain, outlier=True
         )
 
         signed_auth.sort(key=lambda e: e.depth)
@@ -291,11 +291,11 @@ class FederationClient(object):
         ]
 
         signed_state = yield self._check_sigs_and_hash_and_fetch(
-            state, outlier=True
+            destination, state, outlier=True
         )
 
         signed_auth = yield self._check_sigs_and_hash_and_fetch(
-            auth_chain, outlier=True
+            destination, auth_chain, outlier=True
         )
 
         auth_chain.sort(key=lambda e: e.depth)
@@ -355,7 +355,7 @@ class FederationClient(object):
         ]
 
         signed_auth = yield self._check_sigs_and_hash_and_fetch(
-            auth_chain, outlier=True
+            destination, auth_chain, outlier=True
         )
 
         signed_auth.sort(key=lambda e: e.depth)
@@ -378,7 +378,7 @@ class FederationClient(object):
         return event
 
     @defer.inlineCallbacks
-    def _check_sigs_and_hash_and_fetch(self, pdus, outlier=False):
+    def _check_sigs_and_hash_and_fetch(self, origin, pdus, outlier=False):
         """Takes a list of PDUs and checks the signatures and hashs of each
         one. If a PDU fails its signature check then we check if we have it in
         the database and if not then request if from the originating server of
@@ -414,15 +414,16 @@ class FederationClient(object):
                     continue
 
                 # Check pdu.origin
-                new_pdu = yield self.get_pdu(
-                    destinations=[pdu.origin],
-                    event_id=pdu.event_id,
-                    outlier=outlier,
-                )
-
-                if new_pdu:
-                    signed_pdus.append(new_pdu)
-                    continue
+                if pdu.origin != origin:
+                    new_pdu = yield self.get_pdu(
+                        destinations=[pdu.origin],
+                        event_id=pdu.event_id,
+                        outlier=outlier,
+                    )
+
+                    if new_pdu:
+                        signed_pdus.append(new_pdu)
+                        continue
 
                 logger.warn("Failed to find copy of %s with valid signature")