summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaiki Ueno <dueno@src.gnome.org>2023-01-10 14:58:52 +0900
committerDaiki Ueno <dueno@redhat.com>2023-01-17 05:37:55 +0900
commitca815e40536f684409ca43ca7a32bbbcc1fb3137 (patch)
treef2ce7230bfe8715d7eb2b20be5201ab6670f6763
parentfd2fb3805a947436aa4d3f4a87958b85f8a99b71 (diff)
downloadgcr-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.c27
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);