From: Michael Tremer Date: Fri, 24 Nov 2017 12:15:10 +0000 (+0100) Subject: libpakfire: Support deleting keys X-Git-Tag: 0.9.28~1285^2~1287 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b9b6a13eed22e53d1bdf60472e00adf139361f44;p=pakfire.git libpakfire: Support deleting keys Signed-off-by: Michael Tremer --- diff --git a/src/_pakfire/key.c b/src/_pakfire/key.c index 165716f87..6e2c1ddb1 100644 --- a/src/_pakfire/key.c +++ b/src/_pakfire/key.c @@ -113,8 +113,27 @@ static PyObject* Key_export(KeyObject* self, PyObject* args) { return object; } +static PyObject* Key_delete(KeyObject* self) { + int r = pakfire_key_delete(self->key); + if (r == 0) + Py_RETURN_TRUE; + + return NULL; +} + static struct PyMethodDef Key_methods[] = { - {"export", (PyCFunction)Key_export, METH_VARARGS, NULL}, + { + "delete", + (PyCFunction)Key_delete, + METH_NOARGS, + NULL + }, + { + "export", + (PyCFunction)Key_export, + METH_VARARGS, + NULL + }, { NULL }, }; diff --git a/src/libpakfire/include/pakfire/key.h b/src/libpakfire/include/pakfire/key.h index 2eae40bfe..8bb8de170 100644 --- a/src/libpakfire/include/pakfire/key.h +++ b/src/libpakfire/include/pakfire/key.h @@ -38,6 +38,7 @@ PakfireKey pakfire_key_ref(PakfireKey key); void pakfire_key_unref(PakfireKey key); PakfireKey pakfire_key_get(Pakfire pakfire, const char* fingerprint); +int pakfire_key_delete(PakfireKey key); // Access key properties const char* pakfire_key_get_fingerprint(PakfireKey key); diff --git a/src/libpakfire/key.c b/src/libpakfire/key.c index 2a7725def..5fdbd4c71 100644 --- a/src/libpakfire/key.c +++ b/src/libpakfire/key.c @@ -164,6 +164,17 @@ PakfireKey pakfire_key_get(Pakfire pakfire, const char* fingerprint) { return key; } +int pakfire_key_delete(PakfireKey key) { + gpgme_ctx_t gpgctx = pakfire_get_gpgctx(key->pakfire); + assert(gpgctx); + + gpgme_error_t error = gpgme_op_delete(gpgctx, key->gpgkey, 1); + if (error == GPG_ERR_NO_ERROR) + return 0; + + return 1; +} + const char* pakfire_key_get_fingerprint(PakfireKey key) { return key->gpgkey->fpr; } diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index dbbae8a9d..ddcfa19d1 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -71,6 +71,7 @@ global: # key pakfire_key_create; + pakfire_key_delete; pakfire_key_dump; pakfire_key_export; pakfire_key_generate; diff --git a/src/pakfire/cli.py b/src/pakfire/cli.py index 9f8115f40..f7ea6bcd4 100644 --- a/src/pakfire/cli.py +++ b/src/pakfire/cli.py @@ -775,6 +775,11 @@ class CliKey(Cli): # Add common arguments self._add_common_arguments(parser) + # delete + delete = subparsers.add_parser("delete", help=_("Delete a key from the local keyring")) + delete.add_argument("fingerprint", nargs="+", help=_("The fingerprint of the key to delete")) + delete.set_defaults(func=self.handle_delete) + # export export = subparsers.add_parser("export", help=_("Export a key to a file")) export.add_argument("fingerprint", nargs=1, @@ -803,14 +808,6 @@ class CliKey(Cli): return parser.parse_args() - def parse_command_delete(self): - # Parse "delete" command. - sub_del = self.sub_commands.add_parser("delete", - help=_("Delete a key from the local keyring.")) - sub_del.add_argument("keyid", nargs=1, - help=_("The ID of the key to delete.")) - sub_del.add_argument("action", action="store_const", const="delete") - def parse_command_sign(self): # Implement the "sign" command. sub_sign = self.sub_commands.add_parser("sign", @@ -872,11 +869,13 @@ class CliKey(Cli): key = p.import_key(data) print(key) - def handle_delete(self): - keyid = self.args.keyid[0] + def handle_delete(self, ns): + p = self.pakfire(ns) - p = self.create_pakfire() - p.keyring.delete_key(keyid) + for fingerprint in ns.fingerprint: + key = p.get_key(fingerprint) + if key: + key.delete() def handle_sign(self): # Get the files from the command line options