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")
|