[entropy.security] RepositorySecurity: add get_key_fingerprint()

This commit is contained in:
Fabio Erculiani
2011-07-10 12:43:26 +02:00
parent 736c3ad7be
commit 5e1464a933
+41 -4
View File
@@ -1443,12 +1443,12 @@ class Repository:
del keymap[repoid]
self.__write_keymap(keymap)
def __list_keys(self, secret = False):
def __list_keys(self, secret = False, homedir = None):
which = 'keys'
if secret:
which = 'secret-keys'
args = self.__default_gpg_args() + \
args = self.__default_gpg_args(homedir = homedir) + \
["--list-%s" % (which,), "--fixed-list-mode", "--fingerprint",
"--with-colons"]
@@ -1867,6 +1867,41 @@ class Repository:
pubkey = self.__export_key(fingerprint, key_type = "private")
return pubkey
def get_key_fingerprint(self, key_path):
"""
Return the fingerprint contained in the given key file, if any.
Otherwise return None.
@param key_path: valid path to GPG key file
@type key_path: string
"""
tmp_dir = None
try:
tmp_dir = tempfile.mkdtemp(prefix=".entropy.security.get_fp")
args = self.__default_gpg_args(preserve_perms = False,
homedir = tmp_dir)
args += ["--import", key_path]
proc = subprocess.Popen(args, **self.__default_popen_args())
try:
# wait for process to terminate
proc_rc = proc.wait()
finally:
self.__default_popen_close(proc)
if proc_rc != 0:
return None
now_keys = set([x['fingerprint'] for x in self.__list_keys(
homedir = tmp_dir)])
if not now_keys:
return None
# NOTE: not supporting multiple keys, is this a problem?
return now_keys.pop()
finally:
if tmp_dir is not None:
shutil.rmtree(tmp_dir, True)
def install_key(self, repository_identifier, key_path,
ignore_nothing_imported = False, merge_key = False):
"""
@@ -1953,9 +1988,11 @@ class Repository:
const_setup_perms(self.__keystore, etpConst['entropygid'],
f_perms = 0o660)
def __default_gpg_args(self, preserve_perms = True):
def __default_gpg_args(self, preserve_perms = True, homedir = None):
if homedir is None:
homedir = self.__keystore
args = [Repository._GPG_EXEC, "--no-tty", "--no-permission-warning",
"--no-greeting", "--homedir", self.__keystore]
"--no-greeting", "--homedir", homedir]
if preserve_perms:
args.append("--preserve-permissions")
return args