static void join_show_prompt (GisAccountPageEnterprise *page, GError *error) { GisAccountPageEnterprisePrivate *priv = gis_account_page_enterprise_get_instance_private (page); UmRealmKerberosMembership *membership; UmRealmKerberos *kerberos; gchar hostname[128]; const gchar *name; gtk_entry_set_text (GTK_ENTRY (priv->join_password), ""); gtk_widget_grab_focus (GTK_WIDGET (priv->join_password)); kerberos = um_realm_object_get_kerberos (priv->realm); membership = um_realm_object_get_kerberos_membership (priv->realm); gtk_label_set_text (GTK_LABEL (priv->join_domain), um_realm_kerberos_get_domain_name (kerberos)); if (gethostname (hostname, sizeof (hostname)) == 0) gtk_entry_set_text (GTK_ENTRY (priv->join_computer), hostname); clear_entry_validation_error (GTK_ENTRY (priv->join_name)); clear_entry_validation_error (GTK_ENTRY (priv->join_password)); if (!priv->join_prompted) { name = um_realm_kerberos_membership_get_suggested_administrator (membership); if (name && !g_str_equal (name, "")) { g_debug ("Suggesting admin user: %s", name); gtk_entry_set_text (GTK_ENTRY (priv->join_name), name); } else { gtk_widget_grab_focus (GTK_WIDGET (priv->join_name)); } } else if (g_error_matches (error, UM_REALM_ERROR, UM_REALM_ERROR_BAD_HOSTNAME)) { g_debug ("Bad host name: %s", error->message); set_entry_validation_error (GTK_ENTRY (priv->join_computer), error->message); } else if (g_error_matches (error, UM_REALM_ERROR, UM_REALM_ERROR_BAD_PASSWORD)) { g_debug ("Bad admin password: %s", error->message); set_entry_validation_error (GTK_ENTRY (priv->join_password), error->message); } else { g_debug ("Admin login failure: %s", error->message); g_dbus_error_strip_remote_error (error); set_entry_validation_error (GTK_ENTRY (priv->join_name), error->message); } g_debug ("Showing admin password dialog"); gtk_window_set_transient_for (GTK_WINDOW (priv->join_dialog), GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (page)))); gtk_window_set_modal (GTK_WINDOW (priv->join_dialog), TRUE); gtk_window_present (GTK_WINDOW (priv->join_dialog)); priv->join_prompted = TRUE; g_object_unref (kerberos); g_object_unref (membership); /* And now we wait for on_join_response() */ }
static void join_show_prompt (UmAccountDialog *self, GError *error) { UmRealmKerberosMembership *membership; UmRealmKerberos *kerberos; const gchar *name; gtk_entry_set_text (self->join_password, ""); gtk_widget_grab_focus (GTK_WIDGET (self->join_password)); kerberos = um_realm_object_get_kerberos (self->selected_realm); membership = um_realm_object_get_kerberos_membership (self->selected_realm); gtk_label_set_text (self->join_domain, um_realm_kerberos_get_domain_name (kerberos)); clear_entry_validation_error (self->join_name); clear_entry_validation_error (self->join_password); if (!self->join_prompted) { name = um_realm_kerberos_membership_get_suggested_administrator (membership); if (name && !g_str_equal (name, "")) { g_debug ("Suggesting admin user: %s", name); gtk_entry_set_text (self->join_name, name); } else { gtk_widget_grab_focus (GTK_WIDGET (self->join_name)); } } else if (g_error_matches (error, UM_REALM_ERROR, UM_REALM_ERROR_BAD_PASSWORD)) { g_debug ("Bad admin password: %s", error->message); set_entry_validation_error (self->join_password, error->message); } else { g_debug ("Admin login failure: %s", error->message); g_dbus_error_strip_remote_error (error); set_entry_validation_error (self->join_name, error->message); } g_debug ("Showing admin password dialog"); gtk_window_set_transient_for (GTK_WINDOW (self->join_dialog), GTK_WINDOW (self)); gtk_window_set_modal (GTK_WINDOW (self->join_dialog), TRUE); gtk_window_present (GTK_WINDOW (self->join_dialog)); self->join_prompted = TRUE; g_object_unref (kerberos); g_object_unref (membership); /* And now we wait for on_join_response() */ }
void um_realm_login (UmRealmObject *realm, const gchar *user, const gchar *password, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { GTask *task; LoginClosure *login; UmRealmKerberos *kerberos; g_return_if_fail (UM_REALM_IS_OBJECT (realm)); g_return_if_fail (user != NULL); g_return_if_fail (password != NULL); g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); kerberos = um_realm_object_get_kerberos (realm); g_return_if_fail (kerberos != NULL); task = g_task_new (realm, cancellable, callback, user_data); login = g_slice_new0 (LoginClosure); login->domain = g_strdup (um_realm_kerberos_get_domain_name (kerberos)); login->realm = g_strdup (um_realm_kerberos_get_realm_name (kerberos)); login->user = g_strdup (user); login->password = g_strdup (password); g_task_set_task_data (task, login, login_closure_free); g_task_set_check_cancellable (task, TRUE); g_task_set_return_on_cancel (task, TRUE); g_task_run_in_thread (task, kinit_thread_func); g_object_unref (task); g_object_unref (kerberos); }