X-Git-Url: https://git.donarmstrong.com/?p=dak.git;a=blobdiff_plain;f=daklib%2Fchecks.py;h=b7931f2f6d8e60a2b893f6a304b357fe88cefd31;hp=dce112b878ed77cfeba890f0263d37e2993e3359;hb=206fb80997ed8e3aa8ee317d454a3fb9470b7ffc;hpb=57470d3ae2c4e01fb7d285e1860e06504721495d diff --git a/daklib/checks.py b/daklib/checks.py index dce112b8..b7931f2f 100644 --- a/daklib/checks.py +++ b/daklib/checks.py @@ -109,6 +109,18 @@ class Check(object): return False class SignatureAndHashesCheck(Check): + def check_replay(self, upload): + # Use private session as we want to remember having seen the .changes + # in all cases. + session = DBConn().session() + history = SignatureHistory.from_signed_file(upload.changes) + r = history.query(session) + if r is not None: + raise Reject('Signature for changes file was already seen at {0}'.format(r.seen)) + session.add(history) + session.commit() + return True + """Check signature of changes and dsc file (if included in upload) Make sure the signature is valid and done by a known user. @@ -117,6 +129,7 @@ class SignatureAndHashesCheck(Check): changes = upload.changes if not changes.valid_signature: raise Reject("Signature for .changes not valid.") + self.check_replay(upload) self._check_hashes(upload, changes.filename, changes.files.itervalues()) source = None