]> git.decadent.org.uk Git - dak.git/blobdiff - daklib/checks.py
Merge branch 'fix-acl'
[dak.git] / daklib / checks.py
index f073d52fa43bc3d785667b7f15ce355ffd5941f5..5646863995eb9baa3480852dc95eae9cf8cefee9 100644 (file)
@@ -53,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
 
@@ -174,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:
@@ -464,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:
@@ -525,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