X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fchecks.py;h=5646863995eb9baa3480852dc95eae9cf8cefee9;hb=a4e40115e7b82033b5fcbf9482b95811bc823eec;hp=7298026208a82a8f231812b253a581f7c9b5d2f0;hpb=c4d894e1b37e4dceb62395fb4b1c30d273b7a2e7;p=dak.git diff --git a/daklib/checks.py b/daklib/checks.py index 72980262..56468639 100644 --- a/daklib/checks.py +++ b/daklib/checks.py @@ -30,6 +30,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 apt_inst import apt_pkg @@ -52,6 +53,15 @@ class RejectStupidMaintainerException(Exception): def __str__(self): return "'%s' has mismatching %s from the external files db ('%s' [current] vs '%s' [external])" % self.args[:4] +class RejectACL(Reject): + """exception raise by failing ACL checks""" + def __init__(self, acl, reason): + self.acl = acl + self.reason = reason + + def __str__(self): + return "ACL {0}: {1}".format(self.acl.name, self.reason) + class Check(object): """base class for checks @@ -173,8 +183,8 @@ class HashesCheck(Check): for f in changes.files.itervalues(): f.check(upload.directory) source = changes.source - what = source.filename if source is not None: + what = source.filename for f in source.files.itervalues(): f.check(upload.directory) except IOError as e: @@ -183,6 +193,8 @@ class HashesCheck(Check): 'Perhaps you need to include it in your upload?' .format(what, os.path.basename(e.filename))) raise + except InvalidHashException as e: + raise Reject('{0}: {1}'.format(what, unicode(e))) class ExternalHashesCheck(Check): """Checks hashes in .changes and .dsc against an external database.""" @@ -461,8 +473,11 @@ class ACLCheck(Check): # XXX: Drop DMUA part here and switch to new implementation. # XXX: Send warning mail once users can set the new DMUA flag dmua_status, dmua_reason = self._check_dmua(upload) - if not dmua_status: - return False, dmua_reason + if acl_per_source is None: + if not dmua_status: + return False, dmua_reason + else: + upload.warn('DM flag not set, but accepted as DMUA was set.') #if acl_per_source is None: # return False, "not allowed to upload source package '{0}'".format(source_name) if acl.deny_per_source and acl_per_source is not None: @@ -522,12 +537,12 @@ class ACLCheck(Check): raise Reject('No ACL for fingerprint {0}'.format(fingerprint.fingerprint)) result, reason = self._check_acl(session, upload, acl) if not result: - raise Reject(reason) + raise RejectACL(acl, reason) for acl in session.query(ACL).filter_by(is_global=True): result, reason = self._check_acl(session, upload, acl) if result == False: - raise Reject(reason) + raise RejectACL(acl, reason) return True