static GckSlot* calculate_secrets_slot (void) { GckSlot *slot = NULL; GckModule *module; GList *modules; GError *err = NULL; CK_FUNCTION_LIST_PTR funcs; /* TODO: Should we be handling just one module here? */ funcs = gkd_pkcs11_get_functions (); g_return_val_if_fail (funcs != NULL, NULL); module = gck_module_new (funcs); g_return_val_if_fail (module, NULL); modules = g_list_prepend (NULL, module); slot = gck_modules_token_for_uri (modules, "pkcs11:token=Secret%20Store", &err); if (!slot && err) { g_warning ("couldn't find secret store: %s", egg_error_message (err)); g_clear_error (&err); } gck_list_unref_free (modules); return slot; }
gboolean gkd_gpg_agent_initialize_with_module (GckModule *module) { GckSession *session = NULL; GckSlot *slot; GError *error = NULL; GList *modules; g_assert (GCK_IS_MODULE (module)); /* * Find the right slot. */ modules = g_list_append (NULL, module); slot = gck_modules_token_for_uri (modules, "pkcs11:token=Secret%20Store", &error); g_list_free (modules); if (!slot) { g_warning ("couldn't find secret store module: %s", egg_error_message (error)); g_clear_error (&error); return FALSE; } /* Try and open a session */ session = gck_slot_open_session (slot, GCK_SESSION_READ_WRITE | GCK_SESSION_AUTHENTICATE, NULL, &error); g_object_unref (slot); if (!session) { g_warning ("couldn't select a usable pkcs#11 slot for the gpg agent to use"); g_clear_error (&error); return FALSE; } pkcs11_module = g_object_ref (module); pkcs11_main_mutex = g_mutex_new (); pkcs11_main_cond = g_cond_new (); pkcs11_main_checked = FALSE; pkcs11_main_session = session; cache_settings = g_settings_new ("org.mate.crypto.cache"); return TRUE; }
static GckSession* lookup_login_session (GList *modules) { GckSlot *slot = NULL; GError *error = NULL; GckSession *session; slot = gck_modules_token_for_uri (modules, "pkcs11:token=Secret%20Store", &error); if (!slot) { g_warning ("couldn't find secret store module: %s", egg_error_message (error)); return NULL; } session = open_and_login_session (slot, CKU_USER, &error); if (error) { g_warning ("couldn't open pkcs11 session for login: %s", egg_error_message (error)); g_clear_error (&error); } g_object_unref (slot); return session; }