static void on_realm_joined (GObject *source, GAsyncResult *result, gpointer user_data) { GisAccountPageEnterprise *page = user_data; GisAccountPageEnterprisePrivate *priv = gis_account_page_enterprise_get_instance_private (page); GError *error = NULL; um_realm_join_finish (priv->realm, result, &error); /* Yay, joined the domain, register the user locally */ if (error == NULL) { g_debug ("Joining realm completed successfully"); enterprise_permit_user_login (page, priv->realm); /* Credential failure while joining domain, prompt for admin creds */ } else if (g_error_matches (error, UM_REALM_ERROR, UM_REALM_ERROR_BAD_LOGIN) || g_error_matches (error, UM_REALM_ERROR, UM_REALM_ERROR_BAD_PASSWORD) || g_error_matches (error, UM_REALM_ERROR, UM_REALM_ERROR_BAD_HOSTNAME)) { g_debug ("Joining realm failed due to credentials or host name"); join_show_prompt (page, error); /* Other failure */ } else { show_error_dialog (page, _("Failed to join domain"), error); g_message ("Failed to join the domain: %s", error->message); apply_complete (page, FALSE); } g_clear_error (&error); }
static void on_join_login (GObject *source, GAsyncResult *result, gpointer user_data) { GisAccountPageEnterprise *page = user_data; GisAccountPageEnterprisePrivate *priv = gis_account_page_enterprise_get_instance_private (page); GError *error = NULL; GBytes *creds; um_realm_login_finish (priv->realm, result, &creds, &error); /* Logged in as admin successfully, use creds to join domain */ if (error == NULL) { if (!um_realm_join_as_admin (priv->realm, gtk_entry_get_text (GTK_ENTRY (priv->join_name)), gtk_entry_get_text (GTK_ENTRY (priv->join_password)), creds, NULL, on_realm_joined, page)) { show_error_dialog (page, _("No supported way to authenticate with this domain"), NULL); g_message ("Authenticating as admin is not supported by the realm"); } g_bytes_unref (creds); /* Couldn't login as admin, show prompt again */ } else { join_show_prompt (page, error); g_message ("Couldn't log in as admin to join domain: %s", error->message); g_error_free (error); } }
static void on_set_static_hostname (GObject *source, GAsyncResult *result, gpointer user_data) { GisAccountPageEnterprise *page = user_data; GisAccountPageEnterprisePrivate *priv = gis_account_page_enterprise_get_instance_private (page); GError *error = NULL; GVariant *retval; retval = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source), result, &error); if (error != NULL) { join_show_prompt (page, error); g_error_free (error); return; } g_variant_unref (retval); /* Prompted for some admin credentials, try to use them to log in */ um_realm_login (priv->realm, gtk_entry_get_text (GTK_ENTRY (priv->join_name)), gtk_entry_get_text (GTK_ENTRY (priv->join_password)), priv->cancellable, on_join_login, page); }
static void on_realm_joined (GObject *source, GAsyncResult *result, gpointer user_data) { UmAccountDialog *self = UM_ACCOUNT_DIALOG (user_data); GError *error = NULL; um_realm_join_finish (self->selected_realm, result, &error); /* Yay, joined the domain, register the user locally */ if (error == NULL) { g_debug ("Joining realm completed successfully"); enterprise_permit_user_login (self); /* Credential failure while joining domain, prompt for admin creds */ } else if (g_error_matches (error, UM_REALM_ERROR, UM_REALM_ERROR_BAD_LOGIN) || g_error_matches (error, UM_REALM_ERROR, UM_REALM_ERROR_BAD_PASSWORD)) { g_debug ("Joining realm failed due to credentials"); join_show_prompt (self, error); /* Other failure */ } else { show_error_dialog (self, _("Failed to join domain"), error); g_message ("Failed to join the domain: %s", error->message); finish_action (self); g_error_free (error); } g_object_unref (self); }
static void on_join_login (GObject *source, GAsyncResult *result, gpointer user_data) { UmAccountDialog *self = UM_ACCOUNT_DIALOG (user_data); GError *error = NULL; GBytes *creds; um_realm_login_finish (result, &creds, &error); /* Logged in as admin successfully, use creds to join domain */ if (error == NULL) { if (!um_realm_join_as_admin (self->selected_realm, gtk_entry_get_text (self->join_name), gtk_entry_get_text (self->join_password), creds, self->cancellable, on_realm_joined, g_object_ref (self))) { show_error_dialog (self, _("No supported way to authenticate with this domain"), NULL); g_message ("Authenticating as admin is not supported by the realm"); finish_action (self); } g_bytes_unref (creds); /* Couldn't login as admin, show prompt again */ } else { join_show_prompt (self, error); g_message ("Couldn't log in as admin to join domain: %s", error->message); g_error_free (error); } g_object_unref (self); }
static void on_realm_login (GObject *source, GAsyncResult *result, gpointer user_data) { UmAccountDialog *self = UM_ACCOUNT_DIALOG (user_data); GError *error = NULL; GBytes *creds; um_realm_login_finish (result, &creds, &error); if (error == NULL) { /* Already joined to the domain, just register this user */ if (um_realm_is_configured (self->selected_realm)) { g_debug ("Already joined to this realm"); enterprise_permit_user_login (self); /* Join the domain, try using the user's creds */ } else if (!um_realm_join_as_user (self->selected_realm, gtk_entry_get_text (self->enterprise_login), gtk_entry_get_text (self->enterprise_password), creds, self->cancellable, on_realm_joined, g_object_ref (self))) { /* If we can't do user auth, try to authenticate as admin */ g_debug ("Cannot join with user credentials"); join_show_prompt (self, NULL); } g_bytes_unref (creds); /* A problem with the user's login name or password */ } else if (g_error_matches (error, UM_REALM_ERROR, UM_REALM_ERROR_BAD_LOGIN)) { g_debug ("Problem with the user's login: %s", error->message); set_entry_validation_error (self->enterprise_login, error->message); finish_action (self); gtk_widget_grab_focus (GTK_WIDGET (self->enterprise_login)); } else if (g_error_matches (error, UM_REALM_ERROR, UM_REALM_ERROR_BAD_PASSWORD)) { g_debug ("Problem with the user's password: %s", error->message); set_entry_validation_error (self->enterprise_password, error->message); finish_action (self); gtk_widget_grab_focus (GTK_WIDGET (self->enterprise_password)); /* Other login failure */ } else { g_dbus_error_strip_remote_error (error); show_error_dialog (self, _("Failed to log into domain"), error); g_message ("Couldn't log in as user: %s", error->message); finish_action (self); } g_clear_error (&error); g_object_unref (self); }
static void on_realm_login (GObject *source, GAsyncResult *result, gpointer user_data) { GisAccountPageEnterprise *page = user_data; GisAccountPageEnterprisePrivate *priv = gis_account_page_enterprise_get_instance_private (page); GError *error = NULL; GBytes *creds = NULL; um_realm_login_finish (priv->realm, result, &creds, &error); /* * User login is valid, but cannot authenticate right now (eg: user needs * to change password at next login etc.) */ if (g_error_matches (error, UM_REALM_ERROR, UM_REALM_ERROR_CANNOT_AUTH)) { g_clear_error (&error); creds = NULL; } if (error == NULL) { /* Already joined to the domain, just register this user */ if (um_realm_is_configured (priv->realm)) { g_debug ("Already joined to this realm"); enterprise_permit_user_login (page, priv->realm); /* Join the domain, try using the user's creds */ } else if (creds == NULL || !um_realm_join_as_user (priv->realm, gtk_entry_get_text (GTK_ENTRY (priv->login)), gtk_entry_get_text (GTK_ENTRY (priv->password)), creds, priv->cancellable, on_realm_joined, page)) { /* If we can't do user auth, try to authenticate as admin */ g_debug ("Cannot join with user credentials"); join_show_prompt (page, error); } g_bytes_unref (creds); /* A problem with the user's login name or password */ } else if (g_error_matches (error, UM_REALM_ERROR, UM_REALM_ERROR_BAD_LOGIN)) { g_debug ("Problem with the user's login: %s", error->message); set_entry_validation_error (GTK_ENTRY (priv->login), error->message); gtk_widget_grab_focus (priv->login); apply_complete (page, FALSE); } else if (g_error_matches (error, UM_REALM_ERROR, UM_REALM_ERROR_BAD_PASSWORD)) { g_debug ("Problem with the user's password: %s", error->message); set_entry_validation_error (GTK_ENTRY (priv->password), error->message); gtk_widget_grab_focus (priv->password); apply_complete (page, FALSE); /* Other login failure */ } else { show_error_dialog (page, _("Failed to log into domain"), error); g_message ("Couldn't log in as user: %s", error->message); apply_complete (page, FALSE); } g_clear_error (&error); }