[libcryptui] daemon: Add a hack to find subkeys identities
- From: Stefan Walter <stefw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libcryptui] daemon: Add a hack to find subkeys identities
- Date: Thu, 12 Jan 2017 12:29:00 +0000 (UTC)
commit bdd2fd518bac805e379ab6b23cc450d257d524fa
Author: Colomban Wendling <ban herbesfolles org>
Date: Wed Nov 16 22:39:53 2016 +0100
daemon: Add a hack to find subkeys identities
The SeahorseContext does not contain PGP subkeys IDs, so is unable to
find the object corresponding to them. This is problematic for
example for finding the identity corresponding to a signing key if
that key ID is a subkey of the primary PGP key.
For the moment, add a hack to search through all PGP keys and check
whether they have a corresponding ID when the normal hash table lookup
failed.
A better solution might be registering the subkey IDs in the context's
hash table so that the normal lookup would find the corresponding key.
However, such a change is not trivial as each module is not responsible
for registering with a specific ID but only for reporting one single ID
corresponding to the key to add.
Also, registering subkey IDs might have more deep incidence on other
code, which makes it a riskier change when not being familiar with the
code base.
https://bugzilla.gnome.org/show_bug.cgi?id=774611
daemon/seahorse-context.c | 26 ++++++++++++++++++++++++++
1 files changed, 26 insertions(+), 0 deletions(-)
---
diff --git a/daemon/seahorse-context.c b/daemon/seahorse-context.c
index 0601c07..78eb676 100644
--- a/daemon/seahorse-context.c
+++ b/daemon/seahorse-context.c
@@ -850,6 +850,13 @@ seahorse_context_get_objects (SeahorseContext *self, SeahorseSource *source)
return seahorse_context_find_objects_full (self, &pred);
}
+static gboolean
+predicate_pgp_subkey (SeahorseObject *obj, void *user_data)
+{
+ return (SEAHORSE_IS_PGP_KEY (obj) &&
+ seahorse_pgp_key_has_keyid ((SeahorsePgpKey *) obj, user_data));
+}
+
/**
* seahorse_context_find_object:
* @sctx: The #SeahorseContext to work with (can be NULL)
@@ -871,6 +878,25 @@ seahorse_context_find_object (SeahorseContext *sctx, GQuark id, SeahorseLocation
g_return_val_if_fail (SEAHORSE_IS_CONTEXT (sctx), NULL);
sobj = (SeahorseObject*)g_hash_table_lookup (sctx->pv->objects_by_type, GUINT_TO_POINTER (id));
+ /* FIXME: hack for PGP subkeys: we just search all PGP keys and look for a
+ * matching subkey. Ugly, but meh. */
+ if (! sobj) {
+ SeahorseObjectPredicate pred = { 0 };
+
+ pred.custom = predicate_pgp_subkey;
+ pred.custom_target = (gpointer) g_quark_to_string (id);
+ if (g_str_has_prefix (pred.custom_target, "openpgp:")) {
+ GList *objects;
+
+ pred.custom_target += 8; /* strip "openpgp:" prefix */
+ objects = seahorse_context_find_objects_full (sctx, &pred);
+ if (objects) {
+ sobj = objects->data;
+ g_warn_if_fail (objects->next == NULL);
+ g_list_free (objects);
+ }
+ }
+ }
while (sobj) {
/* If at the end and no more objects in list, return */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]