aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Dolbec <dolsen@gentoo.org>2015-01-09 13:04:04 -0800
committerBrian Dolbec <dolsen@gentoo.org>2015-04-20 10:49:44 -0700
commit8afad8720eea5e69c9247fe207c9cd8e20a2a0e6 (patch)
tree516974ee3ed9f3a71c28c4260371567ca21f5a19
parentgkeyldap/actions.py: Ignore 'undefined' for the keyid,longkeyid fields. (diff)
downloadgentoo-keys-8afad872.tar.gz
gentoo-keys-8afad872.tar.bz2
gentoo-keys-8afad872.zip
gkeys: remove-key refactoring
Update the remove-key action to use the proper installed db. Populate the del_key, del_keydir functions in lib.py
-rw-r--r--gkeys/gkeys/actions.py27
-rw-r--r--gkeys/gkeys/lib.py35
2 files changed, 42 insertions, 20 deletions
diff --git a/gkeys/gkeys/actions.py b/gkeys/gkeys/actions.py
index cfe69ee..22d660f 100644
--- a/gkeys/gkeys/actions.py
+++ b/gkeys/gkeys/actions.py
@@ -25,7 +25,6 @@ else:
from collections import defaultdict
from json import load
-from shutil import rmtree
from gkeys.lib import GkeysGPG
from gkeys.seedhandler import SeedHandler
@@ -551,7 +550,7 @@ class Actions(object):
keyresults = seeds.list(**kwargs)
self.output('', '\n Removing keys...')
success = True
- print(keyresults)
+ #print(keyresults)
for gkey in sorted(keyresults):
if kwargs['nick'] != '*' and kwargs['nick'] not in gkey.nick:
messages.append(_unicode("%s does not seem to be a valid key.")
@@ -569,22 +568,22 @@ class Actions(object):
if ans in ["no", "n"]:
messages.append("Key removal aborted... Nothing to be done.")
else:
- ## This next code is total crap now
- ## re-write it from scratch
- ## there could be multiple keys installed in one keyring
- ## this code just rm's everything.
keyring = self.config.get_key('keyring')
catdir = os.path.join(keyring, args.category)
- rm_candidate = os.path.join(catdir, gkey.nick)
self.logger.debug(_unicode("ACTIONS: removekey; catdir = %s")
% catdir)
- if args.category:
- try:
- rmtree(rm_candidate)
- messages.append(_unicode("Done removing %s key.") % kwargs['nick'])
- except OSError:
- messages.append(_unicode("%s directory does not exist.") % rm_candidate)
- success = False
+ self.gpg = GkeysGPG(self.config, catdir, self.logger)
+ if len(gkey.keys) == 1 or args.keys == gkey.keys:
+ success, msgs = self.gpg.del_keydir(gkey)
+ messages.extend(msgs)
+ elif args.keys:
+ for key in args.keys:
+ success, msgs = self.gpg.del_key(gkey, key)
+ msgs.extend(msgs)
+ else:
+ for key in gkey.keys:
+ success, msgs = self.gpg.del_key(gkey, key)
+ msgs.extend(msgs)
return (success, messages)
diff --git a/gkeys/gkeys/lib.py b/gkeys/gkeys/lib.py
index 9687c24..3eb267c 100644
--- a/gkeys/gkeys/lib.py
+++ b/gkeys/gkeys/lib.py
@@ -19,9 +19,10 @@ with gentoo-keys specific convienience functions.
# for py 2.6 compatibility
from __future__ import print_function
-
+import os
from os.path import abspath, pardir
from os.path import join as pjoin
+from shutil import rmtree
from pyGPG.gpg import GPG
from gkeys.checks import KeyChecks
@@ -165,18 +166,40 @@ class GkeysGPG(GPG):
return results
- def del_key(self, gkey, keydir):
- '''Delete the specified key in the specified keydir
+ def del_key(self, gkey, key):
+ '''Delete the specified key
@param gkey: GKEY namedtuple with (name, nick, keydir, fingerprint)
+ @param key: Fingerprint of the primary key to delete
'''
- return []
+ self.set_keydir(gkey.keydir, 'del-key', reset=True)
+ self.set_keyring('pubring.gpg', 'del-key', reset=False)
+ self.set_keyseedfile(refresh=True)
+ self.logger.debug("LIB: del_key, gkey: %s" % str(gkey))
+ self.logger.debug("LIB: del_key, key: %s" % key)
+ self.logger.debug("** Calling runGPG with: 'gpg %s --delete-keys' for: %s"
+ % (' '.join(self.config.get_key('tasks', 'delete-keys')), str(gkey)))
+ result = self.runGPG(task='delete-keys', inputfile=key)
+ self.logger.info('GPG return code: ' + str(result.returncode))
+ self.update_gkey(gkey, save=True)
+ return (False, [])
- def del_keydir(self, keydir):
+ def del_keydir(self, gkey):
'''Delete the specified keydir
+
+ @param gkey: GKEY namedtuple with (name, nick, keydir, fingerprint)
'''
- return []
+ rm_candidate = os.path.join(self.basedir, gkey.keydir)
+ success = False
+ messages = []
+ try:
+ rmtree(rm_candidate)
+ messages.append("Done removing %s key." % gkey.nick)
+ success = True
+ except OSError:
+ messages.append("%s directory does not exist or is a symbolic link." % rm_candidate)
+ return (success, messages)
def refresh_key(self, gkey):