static void set_unlock_options_on_prompt (GkmWrapPrompt *self, CK_ATTRIBUTE_PTR options, CK_ULONG n_options) { const gchar *choice; gboolean have_ttl = FALSE; gboolean bval; gulong uval; guint ttl = 0; g_assert (GKM_WRAP_IS_PROMPT (self)); g_assert (options || !n_options); if (gkm_attributes_find_boolean (options, n_options, CKA_MATE_TRANSIENT, &bval)) { choice = bval ? GCR_UNLOCK_OPTION_SESSION : GCR_UNLOCK_OPTION_ALWAYS; } if (gkm_attributes_find_ulong (options, n_options, CKA_G_DESTRUCT_IDLE, &uval) && uval) { choice = GCR_UNLOCK_OPTION_IDLE; have_ttl = TRUE; ttl = uval; } if (gkm_attributes_find_ulong (options, n_options, CKA_G_DESTRUCT_AFTER, &uval) && uval) { choice = GCR_UNLOCK_OPTION_TIMEOUT; have_ttl = TRUE; ttl = uval; } gku_prompt_set_unlock_choice (GKU_PROMPT (self), choice); if (have_ttl) gku_prompt_set_unlock_ttl (GKU_PROMPT (self), ttl); }
static gboolean is_login_keyring (CK_ATTRIBUTE_PTR attrs, CK_ULONG n_attrs) { gboolean is_login = FALSE; if (!gkm_attributes_find_boolean (attrs, n_attrs, CKA_G_LOGIN_COLLECTION, &is_login)) return FALSE; return is_login; }
static GkmObject* factory_create_item (GkmSession *session, GkmTransaction *transaction, CK_ATTRIBUTE_PTR attrs, CK_ULONG n_attrs) { GkmSecretCollection *collection = NULL; GkmSecretItem *item; GkmManager *m_manager; GkmManager *s_manager; CK_ATTRIBUTE *attr; gboolean is_token; gchar *identifier; g_return_val_if_fail (GKM_IS_TRANSACTION (transaction), NULL); g_return_val_if_fail (attrs || !n_attrs, NULL); /* See if a collection attribute was specified */ attr = gkm_attributes_find (attrs, n_attrs, CKA_G_COLLECTION); if (attr == NULL) { gkm_transaction_fail (transaction, CKR_TEMPLATE_INCOMPLETE); return NULL; } m_manager = gkm_module_get_manager (gkm_session_get_module (session)); s_manager = gkm_session_get_manager (session); gkm_attribute_consume (attr); if (!gkm_attributes_find_boolean (attrs, n_attrs, CKA_TOKEN, &is_token)) collection = gkm_secret_collection_find (session, attr, m_manager, s_manager, NULL); else if (is_token) collection = gkm_secret_collection_find (session, attr, m_manager, NULL); else collection = gkm_secret_collection_find (session, attr, s_manager, NULL); if (!collection) { gkm_transaction_fail (transaction, CKR_TEMPLATE_INCONSISTENT); return NULL; } /* If an ID was specified, then try and see if that ID already exists */ if (gkm_attributes_find_string (attrs, n_attrs, CKA_ID, &identifier)) { item = gkm_secret_collection_get_item (collection, identifier); if (item == NULL) { gkm_transaction_fail (transaction, CKR_TEMPLATE_INCONSISTENT); return NULL; } else { gkm_session_complete_object_creation (session, transaction, GKM_OBJECT (item), FALSE, attrs, n_attrs); return g_object_ref (item); } } /* Create a new collection which will own the item */ item = gkm_secret_collection_create_item (collection, transaction); gkm_session_complete_object_creation (session, transaction, GKM_OBJECT (item), TRUE, attrs, n_attrs); return g_object_ref (item); }
static void set_unlock_options_on_prompt (GkmWrapPrompt *self, CK_ATTRIBUTE_PTR options, CK_ULONG n_options) { gboolean chosen = FALSE; gboolean bval; g_assert (GKM_IS_WRAP_PROMPT (self)); g_assert (options || !n_options); if (gkm_attributes_find_boolean (options, n_options, CKA_GNOME_TRANSIENT, &bval)) chosen = bval; gcr_prompt_set_choice_chosen (GCR_PROMPT (self), chosen); }