]> git.decadent.org.uk Git - dak.git/commitdiff
convert daklib.dbconn from os.popen to subprocess
authorHelmut Grohne <helmut@subdivi.de>
Sat, 17 May 2014 19:31:47 +0000 (21:31 +0200)
committerHelmut Grohne <helmut@subdivi.de>
Sat, 17 May 2014 19:31:47 +0000 (21:31 +0200)
It now explicitly closes the filedescriptors opened (by calling wait)
and checks the return code of gpg.

daklib/dbconn.py

index eee7a4ea7bf2966c35b530605db1ed980753414c..1bf82931577f0fb5c1918371821cec945dca9c33 100644 (file)
@@ -1155,9 +1155,6 @@ def get_ldap_name(entry):
 ################################################################################
 
 class Keyring(object):
-    gpg_invocation = "gpg --no-default-keyring --keyring %s" +\
-                     " --with-colons --fingerprint --fingerprint"
-
     keys = {}
     fpr_lookup = {}
 
@@ -1187,11 +1184,14 @@ class Keyring(object):
         if not self.keyring_id:
             raise Exception('Must be initialized with database information')
 
-        k = os.popen(self.gpg_invocation % keyring, "r")
+        cmd = ["gpg", "--no-default-keyring", "--keyring", keyring,
+               "--with-colons", "--fingerprint", "--fingerprint"]
+        p = daklib.daksubprocess.Popen(cmd, stdout=subprocess.PIPE)
+
         key = None
         need_fingerprint = False
 
-        for line in k:
+        for line in p.stdout:
             field = line.split(":")
             if field[0] == "pub":
                 key = field[4]
@@ -1211,6 +1211,10 @@ class Keyring(object):
                 self.fpr_lookup[field[9]] = key
                 need_fingerprint = False
 
+        r = p.wait()
+        if r != 0:
+            raise subprocess.CalledProcessError(r, cmd)
+
     def import_users_from_ldap(self, session):
         import ldap
         cnf = Config()