Don't bother requesting PDUs with bad signatures from the same server

This commit is contained in:
Erik Johnston 2015-02-02 17:06:37 +00:00
parent 941f59101b
commit 40c6fe1b81

View file

@ -225,11 +225,11 @@ class FederationClient(object):
] ]
signed_pdus = yield self._check_sigs_and_hash_and_fetch( 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( 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) 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( 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) 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( 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( 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) 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( 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) signed_auth.sort(key=lambda e: e.depth)
@ -378,7 +378,7 @@ class FederationClient(object):
return event return event
@defer.inlineCallbacks @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 """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 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 the database and if not then request if from the originating server of
@ -414,15 +414,16 @@ class FederationClient(object):
continue continue
# Check pdu.origin # Check pdu.origin
new_pdu = yield self.get_pdu( if pdu.origin != origin:
destinations=[pdu.origin], new_pdu = yield self.get_pdu(
event_id=pdu.event_id, destinations=[pdu.origin],
outlier=outlier, event_id=pdu.event_id,
) outlier=outlier,
)
if new_pdu: if new_pdu:
signed_pdus.append(new_pdu) signed_pdus.append(new_pdu)
continue continue
logger.warn("Failed to find copy of %s with valid signature") logger.warn("Failed to find copy of %s with valid signature")