forked from MirrorHub/synapse
Don't bother requesting PDUs with bad signatures from the same server
This commit is contained in:
parent
941f59101b
commit
40c6fe1b81
1 changed files with 16 additions and 15 deletions
|
@ -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")
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue