static ETrustPromptResponse e_trust_prompt_run_with_dialog_ready_callback (GtkWindow *parent, const gchar *source_extension, const gchar *source_display_name, const gchar *host, const gchar *certificate_pem, GTlsCertificateFlags certificate_errors, const gchar *error_text, void (* dialog_ready_cb) (GtkDialog *dialog, gpointer user_data), gpointer user_data) { ETrustPromptResponse response = E_TRUST_PROMPT_RESPONSE_UNKNOWN; GcrParser *parser; GcrParsed *parsed = NULL; GError *local_error = NULL; if (parent) g_return_val_if_fail (GTK_IS_WINDOW (parent), E_TRUST_PROMPT_RESPONSE_UNKNOWN); g_return_val_if_fail (host != NULL, E_TRUST_PROMPT_RESPONSE_UNKNOWN); g_return_val_if_fail (certificate_pem != NULL, E_TRUST_PROMPT_RESPONSE_UNKNOWN); /* Continue even if PKCS#11 module registration fails. * Certificate details won't display correctly but the * user can still respond to the prompt. */ gcr_pkcs11_initialize (NULL, &local_error); if (local_error != NULL) { g_warning ("%s: gcr_pkcs11_initialize() call failed: %s", G_STRFUNC, local_error->message); g_clear_error (&local_error); } parser = gcr_parser_new (); g_signal_connect ( parser, "parsed", G_CALLBACK (trust_prompt_parser_parsed_cb), &parsed); gcr_parser_parse_data (parser, (const guchar *) certificate_pem, strlen (certificate_pem), &local_error); g_object_unref (parser); /* Sanity check. */ g_warn_if_fail ( ((parsed != NULL) && (local_error == NULL)) || ((parsed == NULL) && (local_error != NULL))); if (parsed != NULL) { gchar *reason; reason = e_trust_prompt_describe_certificate_errors (certificate_errors); response = trust_prompt_show (parent, source_extension, source_display_name, host, error_text, parsed, reason, dialog_ready_cb, user_data); gcr_parsed_unref (parsed); g_free (reason); } g_clear_error (&local_error); return response; }
int main (int argc, char *argv[]) { GcrCollection *collection; GcrTreeSelector *selector; GtkDialog *dialog; GcrParser *parser; GtkWidget *scroll; GList *selected, *l; int i; gtk_init (&argc, &argv); dialog = GTK_DIALOG (gtk_dialog_new ()); g_object_ref_sink (dialog); collection = gcr_simple_collection_new (); selector = gcr_tree_selector_new (collection, GCR_CERTIFICATE_COLUMNS); scroll = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), GTK_SHADOW_ETCHED_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (scroll), GTK_WIDGET (selector)); gtk_widget_show_all (scroll); gtk_widget_show (GTK_WIDGET (selector)); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (dialog)), GTK_WIDGET (scroll), TRUE, TRUE, 0); gtk_window_set_default_size (GTK_WINDOW (dialog), 550, 400); gtk_container_set_border_width (GTK_CONTAINER (dialog), 20); parser = gcr_parser_new (); g_signal_connect (parser, "parsed", G_CALLBACK (on_parser_parsed), collection); if (argc == 1) { add_to_selector (parser, SRCDIR "/ui/fixtures/ca-certificates.crt"); } else { for (i = 1; i < argc; ++i) add_to_selector (parser, argv[i]); } g_object_unref (parser); g_object_unref (collection); gtk_dialog_run (dialog); selected = gcr_tree_selector_get_selected (selector); for (l = selected; l; l = g_list_next (l)) { gchar *label; g_object_get (l->data, "label", &label, NULL); g_print ("selected: %s\n", label); g_free (label); } g_list_free (selected); gtk_widget_destroy (GTK_WIDGET (dialog)); g_object_unref (dialog); return 0; }
static void test_request (const gchar *path) { GcrParser *parser; GError *err = NULL; guchar *data; gsize n_data; GtkWidget *dialog; GBytes *bytes; if (!g_file_get_contents (path, (gchar**)&data, &n_data, NULL)) g_error ("couldn't read file: %s", path); dialog = gtk_dialog_new (); g_object_ref_sink (dialog); parser = gcr_parser_new (); g_signal_connect (parser, "parsed", G_CALLBACK (on_parser_parsed), dialog); bytes = g_bytes_new_take (data, n_data); if (!gcr_parser_parse_data (parser, data, n_data, &err)) g_error ("couldn't parse data: %s", err->message); g_object_unref (parser); g_bytes_unref (bytes); gtk_widget_show (dialog); g_signal_connect (dialog, "delete-event", G_CALLBACK (gtk_main_quit), NULL); gtk_main (); g_object_unref (dialog); }
GcrParser* gcr_importer_get_parser (GcrImporter *self) { g_return_val_if_fail (GCR_IS_IMPORTER (self), NULL); if (!self->pv->parser) self->pv->parser = gcr_parser_new (); return self->pv->parser; }
static void test_certificate (const gchar *path) { GcrParser *parser; GError *err = NULL; guchar *data; gsize n_data; if (!g_file_get_contents (path, (gchar**)&data, &n_data, NULL)) g_error ("couldn't read file: %s", path); parser = gcr_parser_new (); g_signal_connect (parser, "parsed", G_CALLBACK (on_parser_parsed), NULL); if (!gcr_parser_parse_data (parser, data, n_data, &err)) g_error ("couldn't parse data: %s", err->message); g_object_unref (parser); g_free (data); }
int gkr_tool_import (int argc, char *argv[]) { GcrParser *parser; GError *error = NULL; GInputStream *input; ImportClosure *closure; GFile *file; gchar **imp; int ret = 0; GList *l; ret = gkr_tool_parse_options (&argc, &argv, import_entries); if (ret != 0) return ret; if(!import_files || !*import_files) { gkr_tool_handle_error (NULL, "specify files to import"); return 2; } if (!gcr_pkcs11_initialize (NULL, &error)) { gkr_tool_handle_error (&error, "couldn't initialize pkcs11 modules"); return 1; } parser = gcr_parser_new (); closure = g_new0 (ImportClosure, 1); g_signal_connect (parser, "parsed", G_CALLBACK (on_parser_parsed), closure); for (imp = import_files; *imp; ++imp) { file = g_file_new_for_commandline_arg (*imp); input = G_INPUT_STREAM (g_file_read (file, NULL, &error)); g_object_unref (file); if (input == NULL) { gkr_tool_handle_error (&error, "couldn't read file: %s", *imp); ret = 1; } else { if (!gcr_parser_parse_stream (parser, input, NULL, &error)) { if (error->code != GCR_ERROR_CANCELLED) gkr_tool_handle_error (&error, "couldn't parse: %s", *imp); ret = 1; } g_object_unref (input); } } if (closure->importers == NULL) { gkr_tool_handle_error (NULL, "couldn't find any place to import files"); ret = 1; } for (l = closure->importers; l != NULL; l = g_list_next (l)) { if (gcr_importer_import (l->data, NULL, &error)) { if (!gkr_tool_mode_quiet) imported_display (l->data); } else { if (error->code != GCR_ERROR_CANCELLED) gkr_tool_handle_error (&error, "couldn't import"); ret = 1; } } gck_list_unref_free (closure->importers); g_free (closure); g_object_unref (parser); return ret; }