static gboolean log_into_pkcs11_session (GckSession *session, GError **error) { GckSessionInfo *sess; GckTokenInfo *info; GckSlot *slot; gboolean login; /* Perform the necessary 'user' login to secrets token. Doesn't unlock anything */ slot = gck_session_get_slot (session); info = gck_slot_get_token_info (slot); login = info && (info->flags & CKF_LOGIN_REQUIRED); gck_token_info_free (info); g_object_unref (slot); if (login) { sess = gck_session_get_info (session); if (sess->state == CKS_RO_USER_FUNCTIONS || sess->state == CKS_RW_USER_FUNCTIONS) login = FALSE; gck_session_info_free (sess); } if (login && !gck_session_login (session, CKU_USER, NULL, 0, NULL, error)) return FALSE; return TRUE; }
gboolean _gck_module_fire_authenticate_object (GckModule *self, GckObject *object, gchar *label, gchar **password) { GckTokenInfo *info; GckSession *session; GckSlot *slot; gboolean ret; g_assert (GCK_IS_MODULE (self)); g_assert (GCK_IS_OBJECT (object)); g_assert (password); session = gck_object_get_session (object); slot = gck_session_get_slot (session); g_object_unref (session); info = gck_slot_get_token_info (slot); g_object_unref (slot); if (info != NULL) { if (info->flags & CKF_PROTECTED_AUTHENTICATION_PATH) { gck_token_info_free (info); *password = NULL; return TRUE; } gck_token_info_free (info); } g_signal_emit (self, signals[AUTHENTICATE_OBJECT], 0, object, label, password, &ret); return ret; }