]> git.ipfire.org Git - pakfire.git/commitdiff
libpakfire: Support deleting keys
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 24 Nov 2017 12:15:10 +0000 (13:15 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 24 Nov 2017 12:15:10 +0000 (13:15 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/key.c
src/libpakfire/include/pakfire/key.h
src/libpakfire/key.c
src/libpakfire/libpakfire.sym
src/pakfire/cli.py

index 165716f8754b91bbc9f31985bd73b7585dc45c89..6e2c1ddb162299032dd8a27f2a39789fdd1ed4a1 100644 (file)
@@ -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 },
 };
 
index 2eae40bfec2dbf232faf35e974de880c8b8c5ede..8bb8de1701e1617ed3c49fd28c905498a975fa74 100644 (file)
@@ -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);
index 2a7725def5d6565ad18f668da07ae1613a11097d..5fdbd4c71b641af9dff6d5be8e324c674a8ef203 100644 (file)
@@ -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;
 }
index dbbae8a9d68933dd7b34c44d2f9f52e83147c9ba..ddcfa19d1d7bc4532b7114072ef4190b11954b23 100644 (file)
@@ -71,6 +71,7 @@ global:
 
        # key
        pakfire_key_create;
+       pakfire_key_delete;
        pakfire_key_dump;
        pakfire_key_export;
        pakfire_key_generate;
index 9f8115f40ddb0d599b4272c0277ad6d943b07ec3..f7ea6bcd49630056c17b468d436bb2ed52ffdc45 100644 (file)
@@ -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