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

pull/47/head
Erik Johnston 2015-02-02 17:06:37 +00:00
parent 941f59101b
commit 40c6fe1b81
1 changed files with 16 additions and 15 deletions

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