[gnome-keyring/gck-work] [gck] Add methods for listing and initializing registered modules.
- From: Stefan Walter <stefw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-keyring/gck-work] [gck] Add methods for listing and initializing registered modules.
- Date: Sun, 1 Aug 2010 10:03:58 +0000 (UTC)
commit cea36adf672a4b26a632362c8559d9db2785d66e
Author: Stef Walter <stef memberwebs com>
Date: Sun Aug 1 12:02:56 2010 +0200
[gck] Add methods for listing and initializing registered modules.
* We use the concept of a PKCS #11 registry as outlined here:
http://wiki.cacert.org/Pkcs11TaskForce
gck/Makefile.am | 3 +-
gck/gck-modules.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++
gck/gck.h | 4 +++
3 files changed, 71 insertions(+), 1 deletions(-)
---
diff --git a/gck/Makefile.am b/gck/Makefile.am
index b6ed66d..a860f71 100644
--- a/gck/Makefile.am
+++ b/gck/Makefile.am
@@ -8,7 +8,8 @@ INCLUDES = \
-I$(top_srcdir) \
$(GOBJECT_CFLAGS) \
$(GTHREAD_CFLAGS) \
- $(GLIB_CFLAGS)
+ $(GLIB_CFLAGS) \
+ -DPKCS11_REGISTRY_DIR=\"$(libdir)/pkcs11\"
BUILT_SOURCES = \
gck-marshal.c gck-marshal.h
diff --git a/gck/gck-modules.c b/gck/gck-modules.c
index bf13de1..c27062d 100644
--- a/gck/gck-modules.c
+++ b/gck/gck-modules.c
@@ -37,6 +37,71 @@
* Xxxxx
*/
+gchar**
+gck_modules_list_registered_paths (GError **err)
+{
+ const gchar *name;
+ gchar *path;
+ GDir *dir;
+ GArray *paths;
+
+ g_return_val_if_fail (!err || !*err, NULL);
+
+ dir = g_dir_open (PKCS11_REGISTRY_DIR, 0, err);
+ if (dir == NULL)
+ return NULL;
+
+ paths = g_array_new (TRUE, TRUE, sizeof (gchar*));
+
+ for (;;) {
+ name = g_dir_read_name (dir);
+ if (!name)
+ break;
+
+ path = g_build_filename (PKCS11_REGISTRY_DIR, name, NULL);
+ if (g_file_test (path, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR))
+ g_array_append_val (paths, path);
+ else
+ g_free (path);
+ }
+
+ g_dir_close (dir);
+
+ return (gchar**)g_array_free (paths, FALSE);
+}
+
+GList*
+gck_modules_initialize_registered (guint options)
+{
+ GError *err = NULL;
+ gchar **paths, **p;
+ GckModule *module;
+ GList *results = NULL;
+
+ paths = gck_modules_list_registered_paths (&err);
+ if (!paths && err) {
+ g_warning ("couldn't list registered PKCS#11 module paths: %s",
+ err && err->message ? err->message : "");
+ g_clear_error (&err);
+ return NULL;
+ }
+
+ for (p = paths; *p; ++p) {
+ module = gck_module_initialize (*p, NULL, 0, &err);
+ if (module) {
+ results = g_list_prepend (results, module);
+
+ } else {
+ g_warning ("couldn't load PKCS#11 module: %s: %s",
+ *p, err && err->message ? err->message : "");
+ g_clear_error (&err);
+ }
+ }
+
+ g_strfreev (paths);
+ return results;
+}
+
GList*
gck_modules_get_slots (GList *modules, gboolean token_present)
{
diff --git a/gck/gck.h b/gck/gck.h
index f4a2fc4..d804071 100644
--- a/gck/gck.h
+++ b/gck/gck.h
@@ -299,6 +299,10 @@ GList* gck_module_get_slots (GckModule *self,
guint gck_module_get_options (GckModule *self);
+gchar** gck_modules_list_registered_paths (GError **err);
+
+GList* gck_modules_initialize_registered (guint options);
+
GList* gck_modules_get_slots (GList *modules,
gboolean token_present);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]