/** * g_tls_password_get_value: * @password: a #GTlsPassword object * @length: (allow-none): location to place the length of the password. * * Get the password value. If @length is not %NULL then it will be filled * in with the length of the password value. * * Returns: The password value owned by the password object. * * Since: 2.30 */ const guchar * g_tls_password_get_value (GTlsPassword *password, gsize *length) { g_return_val_if_fail (G_IS_TLS_PASSWORD (password), NULL); return G_TLS_PASSWORD_GET_CLASS (password)->get_value (password, length); }
/** * g_tls_interaction_ask_password_async: * @interaction: a #GTlsInteraction object * @password: a #GTlsPassword object * @cancellable: an optional #GCancellable cancellation object * @callback: (allow-none): will be called when the interaction completes * @user_data: (allow-none): data to pass to the @callback * * Run asynchronous interaction to ask the user for a password. In general, * g_tls_interaction_invoke_ask_password() should be used instead of this * function. * * Derived subclasses usually implement a password prompt, although they may * also choose to provide a password from elsewhere. The @password value will * be filled in and then @callback will be called. Alternatively the user may * abort this password request, which will usually abort the TLS connection. * * If the interaction is cancelled by the cancellation object, or by the * user then %G_TLS_INTERACTION_FAILED will be returned with an error that * contains a %G_IO_ERROR_CANCELLED error code. Certain implementations may * not support immediate cancellation. * * Certain implementations may not support immediate cancellation. * * Since: 2.30 */ void g_tls_interaction_ask_password_async (GTlsInteraction *interaction, GTlsPassword *password, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { GTlsInteractionClass *klass; GSimpleAsyncResult *res; g_return_if_fail (G_IS_TLS_INTERACTION (interaction)); g_return_if_fail (G_IS_TLS_PASSWORD (password)); g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); klass = G_TLS_INTERACTION_GET_CLASS (interaction); if (klass->ask_password_async) { g_return_if_fail (klass->ask_password_finish); (klass->ask_password_async) (interaction, password, cancellable, callback, user_data); } else { res = g_simple_async_result_new (G_OBJECT (interaction), callback, user_data, g_tls_interaction_ask_password_async); g_simple_async_result_complete_in_idle (res); g_object_unref (res); } }
/** * g_tls_interaction_ask_password_async: * @interaction: a #GTlsInteraction object * @password: a #GTlsPassword object * @cancellable: an optional #GCancellable cancellation object * @callback: (allow-none): will be called when the interaction completes * @user_data: (allow-none): data to pass to the @callback * * Run asynchronous interaction to ask the user for a password. In general, * g_tls_interaction_invoke_ask_password() should be used instead of this * function. * * Derived subclasses usually implement a password prompt, although they may * also choose to provide a password from elsewhere. The @password value will * be filled in and then @callback will be called. Alternatively the user may * abort this password request, which will usually abort the TLS connection. * * If the interaction is cancelled by the cancellation object, or by the * user then %G_TLS_INTERACTION_FAILED will be returned with an error that * contains a %G_IO_ERROR_CANCELLED error code. Certain implementations may * not support immediate cancellation. * * Certain implementations may not support immediate cancellation. * * Since: 2.30 */ void g_tls_interaction_ask_password_async (GTlsInteraction *interaction, GTlsPassword *password, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { GTlsInteractionClass *klass; GTask *task; g_return_if_fail (G_IS_TLS_INTERACTION (interaction)); g_return_if_fail (G_IS_TLS_PASSWORD (password)); g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); klass = G_TLS_INTERACTION_GET_CLASS (interaction); if (klass->ask_password_async) { g_return_if_fail (klass->ask_password_finish); (klass->ask_password_async) (interaction, password, cancellable, callback, user_data); } else { task = g_task_new (interaction, cancellable, callback, user_data); g_task_set_source_tag (task, g_tls_interaction_ask_password_async); g_task_return_int (task, G_TLS_INTERACTION_UNHANDLED); g_object_unref (task); } }
static void setup_pin (TestPin *test, gconstpointer unused) { test->pin = g_pkcs11_pin_new (G_TLS_PASSWORD_RETRY, "Test description"); g_assert (G_IS_PKCS11_PIN (test->pin)); g_assert (G_IS_TLS_PASSWORD (test->pin)); }
/** * g_tls_password_get_warning: * @password: a #GTlsPassword object * * Get a user readable translated warning. Usually this warning is a * representation of the password flags returned from * g_tls_password_get_flags(). * * Return value: The warning. * * Since: 2.30 */ const gchar * g_tls_password_get_warning (GTlsPassword *password) { g_return_val_if_fail (G_IS_TLS_PASSWORD (password), NULL); if (password->priv->warning == NULL) return G_TLS_PASSWORD_GET_CLASS (password)->get_default_warning (password); return password->priv->warning; }
/** * g_tls_password_set_flags: * @password: a #GTlsPassword object * @flags: The flags about the password * * Set flags about the password. * * Since: 2.30 */ void g_tls_password_set_flags (GTlsPassword *password, GTlsPasswordFlags flags) { g_return_if_fail (G_IS_TLS_PASSWORD (password)); password->priv->flags = flags; g_object_notify (G_OBJECT (password), "flags"); }
/** * g_tls_password_set_value_full: * @password: a #GTlsPassword object * @value: the value for the password * @length: the length of the password, or -1 * @destroy: (allow-none): a function to use to free the password. * * Provide the value for this password. * * The @value will be owned by the password object, and later freed using * the @destroy function callback. * * Specify the @length, for a non-null-terminated password. Pass -1 as * @length if using a null-terminated password, and @length will be calculated * automatically. * * Virtual: set_value * Since: 2.30 */ void g_tls_password_set_value_full (GTlsPassword *password, guchar *value, gssize length, GDestroyNotify destroy) { g_return_if_fail (G_IS_TLS_PASSWORD (password)); G_TLS_PASSWORD_GET_CLASS (password)->set_value (password, value, length, destroy); }
/** * g_tls_password_set_value: * @password: a #GTlsPassword object * @value: the new password value * @length: the length of the password, or -1 * * Set the value for this password. The @value will be copied by the password * object. * * Specify the @length, for a non-null-terminated password. Pass -1 as * @length if using a null-terminated password, and @length will be calculated * automatically. * * Since: 2.30 */ void g_tls_password_set_value (GTlsPassword *password, const guchar *value, gssize length) { g_return_if_fail (G_IS_TLS_PASSWORD (password)); if (length < 0) length = strlen ((gchar *)value); g_tls_password_set_value_full (password, g_memdup (value, length), length, g_free); }
/** * g_tls_password_set_warning: * @password: a #GTlsPassword object * @warning: The user readable warning * * Set a user readable translated warning. Usually this warning is a * representation of the password flags returned from * g_tls_password_get_flags(). * * Since: 2.30 */ void g_tls_password_set_warning (GTlsPassword *password, const gchar *warning) { gchar *copy; g_return_if_fail (G_IS_TLS_PASSWORD (password)); copy = g_strdup (warning); g_free (password->priv->warning); password->priv->warning = copy; g_object_notify (G_OBJECT (password), "warning"); }
/** * g_tls_password_set_description: * @password: a #GTlsPassword object * @description: The description of the password * * Set a description string about what the password will be used for. * * Since: 2.30 */ void g_tls_password_set_description (GTlsPassword *password, const gchar *description) { gchar *copy; g_return_if_fail (G_IS_TLS_PASSWORD (password)); copy = g_strdup (description); g_free (password->priv->description); password->priv->description = copy; g_object_notify (G_OBJECT (password), "description"); }
/** * g_tls_interaction_ask_password: * @interaction: a #GTlsInteraction object * @password: a #GTlsPassword object * @cancellable: an optional #GCancellable cancellation object * @error: an optional location to place an error on failure * * Run synchronous interaction to ask the user for a password. In general, * g_tls_interaction_invoke_ask_password() should be used instead of this * function. * * Derived subclasses usually implement a password prompt, although they may * also choose to provide a password from elsewhere. The @password value will * be filled in and then @callback will be called. Alternatively the user may * abort this password request, which will usually abort the TLS connection. * * If the interaction is cancelled by the cancellation object, or by the * user then %G_TLS_INTERACTION_FAILED will be returned with an error that * contains a %G_IO_ERROR_CANCELLED error code. Certain implementations may * not support immediate cancellation. * * Returns: The status of the ask password interaction. * * Since: 2.30 */ GTlsInteractionResult g_tls_interaction_ask_password (GTlsInteraction *interaction, GTlsPassword *password, GCancellable *cancellable, GError **error) { GTlsInteractionClass *klass; g_return_val_if_fail (G_IS_TLS_INTERACTION (interaction), G_TLS_INTERACTION_UNHANDLED); g_return_val_if_fail (G_IS_TLS_PASSWORD (password), G_TLS_INTERACTION_UNHANDLED); g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), G_TLS_INTERACTION_UNHANDLED); klass = G_TLS_INTERACTION_GET_CLASS (interaction); if (klass->ask_password) return (klass->ask_password) (interaction, password, cancellable, error); else return G_TLS_INTERACTION_UNHANDLED; }
/** * g_tls_password_get_description: * @password: a #GTlsPassword object * * Get a description string about what the password will be used for. * * Return value: The description of the password. * * Since: 2.30 */ const gchar* g_tls_password_get_description (GTlsPassword *password) { g_return_val_if_fail (G_IS_TLS_PASSWORD (password), NULL); return password->priv->description; }
/** * g_tls_password_get_flags: * @password: a #GTlsPassword object * * Get flags about the password. * * Return value: The flags about the password. * * Since: 2.30 */ GTlsPasswordFlags g_tls_password_get_flags (GTlsPassword *password) { g_return_val_if_fail (G_IS_TLS_PASSWORD (password), G_TLS_PASSWORD_NONE); return password->priv->flags; }
/** * g_tls_interaction_invoke_ask_password: * @interaction: a #GTlsInteraction object * @password: a #GTlsPassword object * @cancellable: an optional #GCancellable cancellation object * @error: an optional location to place an error on failure * * Invoke the interaction to ask the user for a password. It invokes this * interaction in the main loop, specifically the #GMainContext returned by * g_main_context_get_thread_default() when the interaction is created. This * is called by called by #GTlsConnection or #GTlsDatabase to ask the user * for a password. * * Derived subclasses usually implement a password prompt, although they may * also choose to provide a password from elsewhere. The @password value will * be filled in and then @callback will be called. Alternatively the user may * abort this password request, which will usually abort the TLS connection. * * The implementation can either be a synchronous (eg: modal dialog) or an * asynchronous one (eg: modeless dialog). This function will take care of * calling which ever one correctly. * * If the interaction is cancelled by the cancellation object, or by the * user then %G_TLS_INTERACTION_FAILED will be returned with an error that * contains a %G_IO_ERROR_CANCELLED error code. Certain implementations may * not support immediate cancellation. * * Returns: The status of the ask password interaction. * * Since: 2.30 */ GTlsInteractionResult g_tls_interaction_invoke_ask_password (GTlsInteraction *interaction, GTlsPassword *password, GCancellable *cancellable, GError **error) { GTlsInteractionResult result; InvokeClosure *closure; GTlsInteractionClass *klass; g_return_val_if_fail (G_IS_TLS_INTERACTION (interaction), G_TLS_INTERACTION_UNHANDLED); g_return_val_if_fail (G_IS_TLS_PASSWORD (password), G_TLS_INTERACTION_UNHANDLED); g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), G_TLS_INTERACTION_UNHANDLED); closure = invoke_closure_new (interaction, G_OBJECT (password), cancellable); klass = G_TLS_INTERACTION_GET_CLASS (interaction); if (klass->ask_password) { g_main_context_invoke (interaction->priv->context, on_invoke_ask_password_sync, closure); result = invoke_closure_wait_and_free (closure, error); } else if (klass->ask_password_async) { g_return_val_if_fail (klass->ask_password_finish, G_TLS_INTERACTION_UNHANDLED); g_main_context_invoke (interaction->priv->context, on_invoke_ask_password_async_as_sync, closure); /* * Handle the case where we've been called from within the main context * or in the case where the main context is not running. This approximates * the behavior of a modal dialog. */ if (g_main_context_acquire (interaction->priv->context)) { while (!closure->complete) { g_mutex_unlock (closure->mutex); g_main_context_iteration (interaction->priv->context, TRUE); g_mutex_lock (closure->mutex); } g_main_context_release (interaction->priv->context); if (closure->error) { g_propagate_error (error, closure->error); closure->error = NULL; } result = closure->result; invoke_closure_free (closure); } /* * Handle the case where we're in a different thread than the main * context and a main loop is running. */ else { result = invoke_closure_wait_and_free (closure, error); } } else { result = G_TLS_INTERACTION_UNHANDLED; invoke_closure_free (closure); } return result; }