[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[dak/master] remove per-fingerprint ACLs that are identical to keyring ACL



With the changes in 707a89a3b86961755a99cb9e1a0a5f23690f9529 dak uses
the keyring acl if there is no acl for the fingerprint. Also
import_keyring.py stopped updating the fingerprint acl. This caused
problems for old fingerprints (with an acl set) that move between
keyrings as they would continue to use the old acl.

This update sets the acl to NULL for fingerprints using the keyring acl
to avoid these issues.
---
 dak/dakdb/update92.py |   58 +++++++++++++++++++++++++++++++++++++++++++++++++
 dak/update_db.py      |    2 +-
 2 files changed, 59 insertions(+), 1 deletions(-)
 create mode 100644 dak/dakdb/update92.py

diff --git a/dak/dakdb/update92.py b/dak/dakdb/update92.py
new file mode 100644
index 0000000..db88277
--- /dev/null
+++ b/dak/dakdb/update92.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+remove per-fingerprint ACLs that are identical to keyring ACL
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2012 Ansgar Burchardt <ansgar@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+from daklib.config import Config
+
+statements = [
+"""
+UPDATE fingerprint f
+   SET acl_id = NULL
+  FROM keyrings k
+ WHERE (f.keyring = k.id AND f.acl_id = k.acl_id)
+    OR f.keyring IS NULL
+""",
+]
+
+################################################################################
+def do_update(self):
+    print __doc__
+    try:
+        cnf = Config()
+
+        c = self.db.cursor()
+
+        for stmt in statements:
+            c.execute(stmt)
+
+        c.execute("UPDATE config SET value = '92' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError as msg:
+        self.db.rollback()
+        raise DBUpdateError('Unable to apply sick update 92, rollback issued. Error message: {0}'.format(msg))
diff --git a/dak/update_db.py b/dak/update_db.py
index cddb4c2..7d9cd07 100755
--- a/dak/update_db.py
+++ b/dak/update_db.py
@@ -46,7 +46,7 @@ from daklib.daklog import Logger
 ################################################################################
 
 Cnf = None
-required_database_schema = 91
+required_database_schema = 92
 
 ################################################################################
 
-- 
1.7.2.5



Reply to: