static void on_parser_parsed (GcrParser *parser, gpointer user_data) { GcrSimpleCollection *collection = user_data; GcrSimpleCollection *testcol; GcrRenderer *renderer; gchar *group; renderer = gcr_renderer_create (gcr_parser_get_parsed_label (parser), gcr_parser_get_parsed_attributes (parser)); if (renderer == NULL) return; if (GCR_IS_CERTIFICATE (renderer)) group = gcr_certificate_get_subject_part (GCR_CERTIFICATE (renderer), "O"); else group = g_strdup (G_OBJECT_TYPE_NAME (renderer)); testcol = test_collection_instance (group); if (!gcr_simple_collection_contains (collection, G_OBJECT (testcol))) gcr_simple_collection_add (collection, G_OBJECT (testcol)); gcr_simple_collection_add (GCR_SIMPLE_COLLECTION (testcol), G_OBJECT (renderer)); g_object_unref (renderer); g_object_unref (testcol); g_free (group); }
static void on_search_message_complete (SoupSession *session, SoupMessage *message, gpointer user_data) { GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); source_search_closure *closure = g_simple_async_result_get_op_res_gpointer (res); GError *error = NULL; GList *keys, *l; seahorse_progress_end (closure->cancellable, message); if (hkp_message_propagate_error (closure->source, message, &error)) { g_simple_async_result_take_error (res, error); } else { keys = parse_hkp_index (message->response_body->data); for (l = keys; l; l = g_list_next (l)) { g_object_set (l->data, "place", closure->source, NULL); gcr_simple_collection_add (closure->results, l->data); } g_list_free_full (keys, g_object_unref); } g_simple_async_result_complete_in_idle (res); g_object_unref (res); }
static void on_search_message_complete (SoupSession *session, SoupMessage *message, gpointer user_data) { g_autoptr(GTask) task = G_TASK (user_data); source_search_closure *closure = g_task_get_task_data (task); g_autoptr(GError) error = NULL; GList *keys, *l; seahorse_progress_end (closure->cancellable, message); if (hkp_message_propagate_error (closure->source, message, &error)) { g_task_return_error (task, g_steal_pointer (&error)); return; } keys = parse_hkp_index (message->response_body->data); for (l = keys; l; l = g_list_next (l)) { g_object_set (l->data, "place", closure->source, NULL); gcr_simple_collection_add (closure->results, l->data); } g_list_free_full (keys, g_object_unref); g_task_return_boolean (task, TRUE); }
/* Add a key to the key source from an LDAP entry */ static void search_parse_key_from_ldap_entry (SeahorseLDAPSource *self, GcrSimpleCollection *results, LDAP *ldap, LDAPMessage *res) { const gchar *algo; long int timestamp; long int expires; gchar *fpr, *fingerprint; gchar *uidstr; gboolean revoked; gboolean disabled; int length; g_return_if_fail (ldap_msgtype (res) == LDAP_RES_SEARCH_ENTRY); fpr = get_string_attribute (ldap, res, "pgpcertid"); uidstr = get_string_attribute (ldap, res, "pgpuserid"); revoked = get_boolean_attribute (ldap, res, "pgprevoked"); disabled = get_boolean_attribute (ldap, res, "pgpdisabled"); timestamp = get_date_attribute (ldap, res, "pgpkeycreatetime"); expires = get_date_attribute (ldap, res, "pgpkeyexpiretime"); algo = get_algo_attribute (ldap, res, "pgpkeytype"); length = get_int_attribute (ldap, res, "pgpkeysize"); if (fpr && uidstr) { SeahorsePgpSubkey *subkey; SeahorsePgpKey *key; SeahorsePgpUid *uid; GList *list; guint flags; /* Build up a subkey */ subkey = seahorse_pgp_subkey_new (); seahorse_pgp_subkey_set_keyid (subkey, fpr); fingerprint = seahorse_pgp_subkey_calc_fingerprint (fpr); seahorse_pgp_subkey_set_fingerprint (subkey, fingerprint); g_free (fingerprint); seahorse_pgp_subkey_set_created (subkey, timestamp); seahorse_pgp_subkey_set_expires (subkey, expires); seahorse_pgp_subkey_set_algorithm (subkey, algo); seahorse_pgp_subkey_set_length (subkey, length); flags = SEAHORSE_FLAG_EXPORTABLE; if (revoked) flags |= SEAHORSE_FLAG_REVOKED; if (disabled) flags |= SEAHORSE_FLAG_DISABLED; seahorse_pgp_subkey_set_flags (subkey, flags); key = seahorse_pgp_key_new (); /* Build up a uid */ uid = seahorse_pgp_uid_new (key, uidstr); if (revoked) seahorse_pgp_uid_set_validity (uid, SEAHORSE_VALIDITY_REVOKED); /* Now build them into a key */ list = g_list_prepend (NULL, uid); seahorse_pgp_key_set_uids (key, list); seahorse_object_list_free (list); list = g_list_prepend (NULL, subkey); seahorse_pgp_key_set_subkeys (key, list); seahorse_object_list_free (list); g_object_set (key, "object-flags", flags, "place", self, NULL); seahorse_pgp_key_realize (key); gcr_simple_collection_add (results, G_OBJECT (key)); g_object_unref (key); } g_free (fpr); g_free (uidstr); }