X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=daklib%2Fchecks.py;h=c7c4a16f23f03c8b482df3f1ee07792f74008764;hb=0fe78641fc8c73a0fd40b83dba90a12d3ae1f0b5;hp=dce112b878ed77cfeba890f0263d37e2993e3359;hpb=5c903326aaf0db9191d58691d38d7198684f41ce;p=dak.git diff --git a/daklib/checks.py b/daklib/checks.py index dce112b8..c7c4a16f 100644 --- a/daklib/checks.py +++ b/daklib/checks.py @@ -31,7 +31,7 @@ from daklib.regexes import * from daklib.textutils import fix_maintainer, ParseMaintError import daklib.lintian as lintian import daklib.utils as utils -from daklib.upload import InvalidHashException +import daklib.upload import apt_inst import apt_pkg @@ -109,6 +109,16 @@ 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 = upload.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}.\nPlease refresh the signature of the changes file if you want to upload it again.'.format(r.seen)) + 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 +127,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 @@ -149,13 +160,11 @@ class SignatureAndHashesCheck(Check): try: for f in files: f.check(upload.directory) - except IOError as e: - if e.errno == errno.ENOENT: - raise Reject('{0} refers to non-existing file: {1}\n' - 'Perhaps you need to include it in your upload?' - .format(filename, os.path.basename(e.filename))) - raise - except InvalidHashException as e: + except daklib.upload.FileDoesNotExist as e: + raise Reject('{0}: {1}\n' + 'Perhaps you need to include the file in your upload?' + .format(filename, unicode(e))) + except daklib.upload.UploadException as e: raise Reject('{0}: {1}'.format(filename, unicode(e))) class ChangesCheck(Check):