X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fimport_keyring.py;h=89c2b755dc5942f56e8b28d42afa530a0ab73ea9;hb=4cbcf2ec05c369e20897afb68770826468b84fdf;hp=e26eb7e54d390d46641a506fba310427262267ee;hpb=f0bfd37e7286156598d79b53501ebe2000bb7924;p=dak.git diff --git a/dak/import_keyring.py b/dak/import_keyring.py index e26eb7e5..89c2b755 100755 --- a/dak/import_keyring.py +++ b/dak/import_keyring.py @@ -48,13 +48,30 @@ def get_fingerprint_info(session): fins[fingerprint] = (uid, fingerprint_id, keyring) return fins +def list_uids(session, pattern): + sql_pattern = "%%%s%%" % pattern + message = "List UIDs matching pattern %s" % sql_pattern + message += "\n" + ("=" * len(message)) + print message + uid_query = session.query(Uid).filter(Uid.uid.ilike(sql_pattern)) + for uid in uid_query.all(): + print "\nuid %s" % uid.uid + for fp in uid.fingerprint: + print " fingerprint %s" % fp.fingerprint + keyring = "unknown" + if fp.keyring: + keyring = fp.keyring.keyring_name + print " keyring %s" % keyring + ################################################################################ def usage (exit_code=0): print """Usage: dak import-keyring [OPTION]... [KEYRING] -h, --help show this help and exit. -L, --import-ldap-users generate uid entries for keyring from LDAP - -U, --generate-users FMT generate uid entries from keyring as FMT""" + -U, --generate-users FMT generate uid entries from keyring as FMT + -l, --list-uids STRING list all uids matching *STRING* + -n, --no-action don't change database""" sys.exit(exit_code) @@ -67,30 +84,37 @@ def main(): Arguments = [('h',"help","Import-Keyring::Options::Help"), ('L',"import-ldap-users","Import-Keyring::Options::Import-Ldap-Users"), ('U',"generate-users","Import-Keyring::Options::Generate-Users", "HasArg"), + ('l',"list-uids","Import-Keyring::Options::List-UIDs", "HasArg"), + ('n',"no-action","Import-Keyring::Options::No-Action"), ] - for i in [ "help", "report-changes", "generate-users", "import-ldap-users" ]: + for i in [ "help", "report-changes", "generate-users", + "import-ldap-users", "list-uids", "no-action" ]: if not cnf.has_key("Import-Keyring::Options::%s" % (i)): cnf["Import-Keyring::Options::%s" % (i)] = "" - keyring_names = apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv) + keyring_names = apt_pkg.parse_commandline(cnf.Cnf, Arguments, sys.argv) ### Parse options - Options = cnf.SubTree("Import-Keyring::Options") + Options = cnf.subtree("Import-Keyring::Options") if Options["Help"]: usage() + ### Initialise + session = DBConn().session() + + if Options["List-UIDs"]: + list_uids(session, Options["List-UIDs"]) + sys.exit(0) + if len(keyring_names) != 1: usage(1) ### Keep track of changes made changes = [] # (uid, changes strings) - ### Initialise - session = DBConn().session() - ### Cache all the existing fingerprint entries db_fin_info = get_fingerprint_info(session) @@ -198,14 +222,9 @@ def main(): session.flush() else: - if newuid and olduid != newuid: - if olduid != -1: - changes.append((newuiduid, "Linked key: %s" % f)) - changes.append((newuiduid, " (formerly belonging to %s)" % (db_uid_byid[olduid][0]))) - else: - changes.append((newuiduid, "Linked key: %s" % f)) - changes.append((newuiduid, " (formerly unowned)")) - + if newuid and olduid != newuid and olduid == -1: + changes.append((newuiduid, "Linked key: %s" % f)) + changes.append((newuiduid, " (formerly unowned)")) session.execute("UPDATE fingerprint SET uid = :uid WHERE id = :fpr", {'uid': newuid, 'fpr': oldfid}) @@ -250,11 +269,15 @@ def main(): session.flush() else: - print "Key %s exists in both %s and %s keyrings. Not demoting." % (oldkeyring.keyring_name, + print "Key %s exists in both %s and %s keyrings. Not demoting." % (f, + oldkeyring.keyring_name, keyring.keyring_name) # All done! - session.commit() + if Options["No-Action"]: + session.rollback() + else: + session.commit() # Print a summary changesd = {}