X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=daklib%2Fchecks.py;h=c5a3f35dc6cdad45e3dca0438f9017acfc081283;hb=934c6eaee7864ecaaffaa8a85afa5464f7884268;hp=c7c4a16f23f03c8b482df3f1ee07792f74008764;hpb=0fe78641fc8c73a0fd40b83dba90a12d3ae1f0b5;p=dak.git diff --git a/daklib/checks.py b/daklib/checks.py index c7c4a16f..c5a3f35d 100644 --- a/daklib/checks.py +++ b/daklib/checks.py @@ -36,6 +36,7 @@ import daklib.upload import apt_inst import apt_pkg from apt_pkg import version_compare +import datetime import errno import os import subprocess @@ -167,6 +168,25 @@ class SignatureAndHashesCheck(Check): except daklib.upload.UploadException as e: raise Reject('{0}: {1}'.format(filename, unicode(e))) +class SignatureTimestampCheck(Check): + """Check timestamp of .changes signature""" + def check(self, upload): + changes = upload.changes + + now = datetime.datetime.utcnow() + timestamp = changes.signature_timestamp + age = now - timestamp + + age_max = datetime.timedelta(days=365) + age_min = datetime.timedelta(days=-7) + + if age > age_max: + raise Reject('{0}: Signature from {1} is too old (maximum age is {2} days)'.format(changes.filename, timestamp, age_max.days)) + if age < age_min: + raise Reject('{0}: Signature from {1} is too far in the future (tolerance is {2} days)'.format(changes.filename, timestamp, abs(age_min.days))) + + return True + class ChangesCheck(Check): """Check changes file for syntax errors.""" def check(self, upload): @@ -280,7 +300,7 @@ class BinaryCheck(Check): fn = binary.hashed_file.filename control = binary.control - for field in ('Package', 'Architecture', 'Version', 'Description'): + for field in ('Package', 'Architecture', 'Version', 'Description', 'Section'): if field not in control: raise Reject('{0}: Missing mandatory field {0}.'.format(fn, field))