diff options
author | Daiki Ueno <dueno@src.gnome.org> | 2023-01-10 14:58:52 +0900 |
---|---|---|
committer | Daiki Ueno <dueno@redhat.com> | 2023-01-17 05:37:55 +0900 |
commit | ca815e40536f684409ca43ca7a32bbbcc1fb3137 (patch) | |
tree | f2ce7230bfe8715d7eb2b20be5201ab6670f6763 | |
parent | fd2fb3805a947436aa4d3f4a87958b85f8a99b71 (diff) | |
download | gcr-ca815e40536f684409ca43ca7a32bbbcc1fb3137.tar.gz |
gcr-viewer: Support certificates read from PKCS#11 store
This enables gcr-viewer to display certificates loaded from PKCS#11
trust store, when a PKCS#11 URI is supplied as a command-line argument.
-rw-r--r-- | tools/viewer/viewer.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/tools/viewer/viewer.c b/tools/viewer/viewer.c index 3e3d65e..9098e05 100644 --- a/tools/viewer/viewer.c +++ b/tools/viewer/viewer.c @@ -46,7 +46,7 @@ on_parser_parsed (GcrParser *parser, *cert = gcr_simple_certificate_new (attr->value, attr->length); } -GcrCertificate * +static GcrCertificate * simple_certificate_new_from_file (GFile *file, GCancellable *cancellable, GError **error) @@ -78,6 +78,26 @@ simple_certificate_new_from_file (GFile *file, return cert; } +static GcrCertificate * +simple_certificate_new_from_commandline_arg (const gchar *arg, + GCancellable *cancellable, + GError **error) +{ + GcrCertificate *cert; + + if (g_str_has_prefix (arg, "pkcs11:")) { + cert = gcr_pkcs11_certificate_new_from_uri (arg, cancellable, error); + } else { + GFile *file; + + file = g_file_new_for_commandline_arg (arg); + cert = simple_certificate_new_from_file (file, cancellable, error); + g_object_unref (file); + } + + return cert; +} + static void activate (GtkApplication* app, @@ -100,14 +120,11 @@ activate (GtkApplication* app, if (remaining_args) { for (int i = 0; remaining_args[i] != NULL; ++i) { - GFile *file; GError *error = NULL; GcrCertificate *certificate; GtkWidget *widget; - file = g_file_new_for_commandline_arg (remaining_args[i]); - certificate = simple_certificate_new_from_file (file, cancellable, &error); - g_object_unref (file); + certificate = simple_certificate_new_from_commandline_arg (remaining_args[i], cancellable, &error); widget = gcr_certificate_widget_new (GCR_CERTIFICATE (certificate)); g_object_unref (certificate); gtk_widget_set_halign (widget, GTK_ALIGN_CENTER); |