]> git.decadent.org.uk Git - dak.git/blobdiff - dak/acl.py
Debug suites might also miss the source package
[dak.git] / dak / acl.py
index 568e21e46b6c28990c24e6e54f1eb8335068d5ae..a6fdddd953c041d13bd74a348bc9aec3fb7d8975 100644 (file)
@@ -20,7 +20,7 @@ import apt_pkg
 import sys
 
 from daklib.config import Config
-from daklib.dbconn import DBConn, Fingerprint, Uid, ACL
+from daklib.dbconn import DBConn, Fingerprint, Keyring, Uid, ACL
 
 def usage():
     print """Usage:
@@ -44,6 +44,7 @@ def get_fingerprint(entry, session):
         uid:<uid>
         name:<name>
         fpr:<fingerprint>
+        keyring:<keyring-name>
 
     @type  entry: string
     @param entry: ACL entry
@@ -54,7 +55,7 @@ def get_fingerprint(entry, session):
     @return: fingerprint for the entry
     """
     field, value = entry.split(":", 1)
-    q = session.query(Fingerprint)
+    q = session.query(Fingerprint).join(Fingerprint.keyring).filter(Keyring.active == True)
 
     if field == 'uid':
         q = q.join(Fingerprint.uid).filter(Uid.uid == value)
@@ -62,6 +63,10 @@ def get_fingerprint(entry, session):
         q = q.join(Fingerprint.uid).filter(Uid.name == value)
     elif field == 'fpr':
         q = q.filter(Fingerprint.fingerprint == value)
+    elif field == 'keyring':
+        q = q.filter(Keyring.keyring_name == value)
+    else:
+        raise Exception('Unknown selector "{0}".'.format(field))
 
     return q.all()
 
@@ -72,6 +77,9 @@ def acl_set_fingerprints(acl_name, entries):
     acl.fingerprints.clear()
     for entry in entries:
         entry = entry.strip()
+        if entry.startswith('#') or len(entry) == 0:
+            continue
+
         fps = get_fingerprint(entry, session)
         if len(fps) == 0:
             print "Unknown key for '{0}'".format(entry)
@@ -84,14 +92,17 @@ def acl_export_per_source(acl_name):
     session = DBConn().session()
     acl = session.query(ACL).filter_by(name=acl_name).one()
 
-    query = """
+    query = r"""
       SELECT
         f.fingerprint,
         (SELECT COALESCE(u.name, '') || ' <' || u.uid || '>'
            FROM uid u
            JOIN fingerprint f2 ON u.id = f2.uid
           WHERE f2.id = f.id) AS name,
-        STRING_AGG(a.source, ' ' ORDER BY a.source)
+        STRING_AGG(
+          a.source
+          || COALESCE(' (' || (SELECT fingerprint FROM fingerprint WHERE id = a.created_by_id) || ')', ''),
+          E',\n ' ORDER BY a.source)
       FROM acl_per_source a
       JOIN fingerprint f ON a.fingerprint_id = f.id
       LEFT JOIN uid u ON f.uid = u.id