]> git.ipfire.org Git - people/ms/pakfire.git/commitdiff
libpakfire: Drop fetching PGP keys from keyservers
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 30 May 2023 10:03:15 +0000 (10:03 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 1 Jun 2023 12:41:39 +0000 (12:41 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/pakfire.c
src/libpakfire/key.c
src/libpakfire/libpakfire.sym
src/scripts/pakfire.in

index e4c70450393173aa8be18fe08e0db89c3a556461..811206cd3082d56520d085350e02e4ee9a5595ef 100644 (file)
@@ -718,33 +718,6 @@ static PyObject* Pakfire_import_key(PakfireObject* self, PyObject* args) {
        return list;
 }
 
-static PyObject* Pakfire_fetch_key(PakfireObject* self, PyObject* args, PyObject* kwds) {
-       char* kwlist[] = { "userid", "fingerprint", NULL };
-       struct pakfire_key* key = NULL;
-       const char* userid = NULL;
-       const char* fingerprint = NULL;
-
-       if (!PyArg_ParseTupleAndKeywords(args, kwds, "|$zz", kwlist, &userid, &fingerprint))
-               return NULL;
-
-       // Fetch the key
-       int r = pakfire_key_fetch(&key, self->pakfire, userid, fingerprint);
-       if (r) {
-               PyErr_SetFromErrno(PyExc_OSError);
-               return NULL;
-       }
-
-       // Return the result
-       if (key) {
-               PyObject* object = new_key(&KeyType, key);
-               pakfire_key_unref(key);
-
-               return object;
-       }
-
-       Py_RETURN_NONE;
-}
-
 static PyObject* Pakfire_whatprovides(PakfireObject* self, PyObject* args) {
        const char* provides = NULL;
        struct pakfire_packagelist* list = NULL;
@@ -1605,12 +1578,6 @@ static struct PyMethodDef Pakfire_methods[] = {
                METH_VARARGS|METH_KEYWORDS,
                NULL
        },
-       {
-               "fetch_key",
-               (PyCFunction)Pakfire_fetch_key,
-               METH_VARARGS|METH_KEYWORDS,
-               NULL
-       },
        {
                "generate_key",
                (PyCFunction)Pakfire_generate_key,
index 7f515ac780d47f8d9e3387b9baa662498196809f..f10527d34105c9627c270c850b279f28d999b721 100644 (file)
@@ -65,134 +65,6 @@ int pakfire_key_create(struct pakfire_key** key, struct pakfire* pakfire, gpgme_
        return 0;
 }
 
-static int pakfire_key_extract_email(const char* uid, char** email) {
-       if (!uid)
-               return 1;
-
-       // Find a start
-       char* start = strrchr(uid, '<');
-       if (!start)
-               return 1;
-
-       // Find the end
-       char* end = strchr(start, '>');
-       if (!end)
-               return 1;
-
-       // Copy email address to new memory
-       int r = asprintf(email, "%.*s", (int)(end - start - 1), start + 1);
-       if (r < 0)
-               return 1;
-
-       return 0;
-}
-
-static int __pakfire_key_fetch(gpgme_key_t* key, struct pakfire* pakfire,
-               const char* what, gpgme_keylist_mode_t flags) {
-       // Fetch GPGME context
-       gpgme_ctx_t gpgctx = pakfire_get_gpgctx(pakfire);
-       if (!gpgctx)
-               return 1;
-
-       int r = 1;
-
-       // Fetch current keylist mode
-       gpgme_keylist_mode_t mode = gpgme_get_keylist_mode(gpgctx);
-
-       // Set keylist mode
-       gpgme_error_t error = gpgme_set_keylist_mode(gpgctx, (mode|flags) & ~GPGME_KEYLIST_MODE_LOCAL);
-       if (error != GPG_ERR_NO_ERROR) {
-               ERROR(pakfire, "Could not set GPG keylist mode: %s\n",
-                       gpgme_strerror(error));
-               goto ERROR;
-       }
-
-       // Fetch the key
-       error = gpgme_get_key(gpgctx, what, key, 0);
-       switch (gpg_err_code(error)) {
-               case GPG_ERR_NO_ERROR:
-               case GPG_ERR_EOF:
-                       break;
-
-               default:
-                       ERROR(pakfire, "Could not fetch key %s: %s\n", what, gpgme_strerror(error));
-                       r = 1;
-                       goto ERROR;
-       }
-
-       // Success
-       r = 0;
-
-ERROR:
-       if (r && *key)
-               gpgme_key_unref(*key);
-
-       // Reset keylist mode
-       gpgme_set_keylist_mode(gpgctx, mode);
-
-       return r;
-}
-
-static int pakfire_key_fetch_from_wkd(gpgme_key_t* key, struct pakfire* pakfire, const char* email) {
-       return __pakfire_key_fetch(key, pakfire, email, GPGME_KEYLIST_MODE_LOCATE);
-}
-
-static int pakfire_key_fetch_from_keyserver(gpgme_key_t* key, struct pakfire* pakfire, const char* fpr) {
-       return __pakfire_key_fetch(key, pakfire, fpr, GPGME_KEYLIST_MODE_EXTERN);
-}
-
-PAKFIRE_EXPORT int pakfire_key_fetch(struct pakfire_key** key, struct pakfire* pakfire,
-               const char* uid, const char* fingerprint) {
-       // At least one (uid or fingerprint) must be set
-       if (!uid && !fingerprint) {
-               errno = EINVAL;
-               return 1;
-       }
-
-       // Reset key
-       *key = NULL;
-
-       gpgme_key_t gpgkey = NULL;
-       char* email = NULL;
-       int r;
-
-       // Extract email address from uid
-       if (uid) {
-               r = pakfire_key_extract_email(uid, &email);
-               if (r)
-                       goto ERROR;
-       }
-
-       // Try importing the key using Web Key Directory
-       if (email) {
-               r = pakfire_key_fetch_from_wkd(&gpgkey, pakfire, email);
-               if (r)
-                       goto ERROR;
-       }
-
-       // If nothing was found and we have a fingerprint, let's try a keyserver
-       if (!gpgkey && fingerprint) {
-               r = pakfire_key_fetch_from_keyserver(&gpgkey, pakfire, fingerprint);
-               if (r)
-                       goto ERROR;
-       }
-
-       // Create a pakfire_key out of the gpg key object
-       if (gpgkey) {
-               r = pakfire_key_create(key, pakfire, gpgkey);
-               if (r)
-                       goto ERROR;
-       }
-
-ERROR:
-       if (gpgkey)
-               gpgme_key_unref(gpgkey);
-       if (email)
-               free(email);
-
-       return r;
-}
-
 static void pakfire_key_free(struct pakfire_key* key) {
        gpgme_key_unref(key->gpgkey);
        pakfire_unref(key->pakfire);
index 619de92a848b97a3266fe188cf7f3bd0cdc072e1..c5f99922d60fd20c9d2d6db9991bc8fcf1ec0ca1 100644 (file)
@@ -131,7 +131,6 @@ global:
        pakfire_key_delete;
        pakfire_key_dump;
        pakfire_key_export;
-       pakfire_key_fetch;
        pakfire_key_generate;
        pakfire_key_get;
        pakfire_key_get_created;
index 16d179ffd7e24761a4e723b3b0957b42188a3f89..451739d706ae052e3673b2ea3cb55cc8824b0540 100644 (file)
@@ -134,17 +134,6 @@ class Cli(object):
                        help=_("Include the secret key"))
                key_export.set_defaults(func=self._key_export)
 
-               # key fetch
-               key_fetch = key_subparsers.add_parser("fetch",
-                       help=_("Download a key"))
-               key_fetch.add_argument("--userid",
-                       help=_("The name/email address")
-               )
-               key_fetch.add_argument("--fingerprint",
-                       help=_("The fingerprint of the key")
-               )
-               key_fetch.set_defaults(func=self._key_fetch)
-
                # key generate
                key_generate = key_subparsers.add_parser("generate",
                        help=_("Generate a new key"))
@@ -396,13 +385,6 @@ class Cli(object):
                # Export the key
                key.export(args.file, args.secret)
 
-       def _key_fetch(self, p, args):
-               key = p.fetch_key(userid=args.userid, fingerprint=args.fingerprint)
-
-               # Print the key
-               if key:
-                       print(key)
-
        def _key_generate(self, p, args):
                # Generate a new key
                key = p.generate_key(