** Fix for bug #547308
2008-08-12 Milan Crha <mcrha@redhat.com> ** Fix for bug #547308 * gui/component/addressbook.c: (load_source_auth_cb): Do not try to authenticate to the server more than twice when knows the password and it didn't fail because of wrong user name/password. * gui/widgets/eab-gui-util.c: (const char *status_to_string[]): New string for new status code. * gui/widgets/eab-gui-util.c: (eab_load_error_dialog): Include detailed error in generic failure error, if available and is not a repository offline error. svn path=/trunk/; revision=35964
This commit is contained in:
@ -1,3 +1,16 @@
|
||||
2008-08-12 Milan Crha <mcrha@redhat.com>
|
||||
|
||||
** Fix for bug #547308
|
||||
|
||||
* gui/component/addressbook.c: (load_source_auth_cb):
|
||||
Do not try to authenticate to the server more than twice when knows
|
||||
the password and it didn't fail because of wrong user name/password.
|
||||
* gui/widgets/eab-gui-util.c: (const char *status_to_string[]):
|
||||
New string for new status code.
|
||||
* gui/widgets/eab-gui-util.c: (eab_load_error_dialog):
|
||||
Include detailed error in generic failure error, if available and is
|
||||
not a repository offline error.
|
||||
|
||||
2008-08-11 Matthew Barnes <mbarnes@redhat.com>
|
||||
|
||||
** Fixes part of bug #546892
|
||||
|
||||
@ -73,6 +73,9 @@ static void
|
||||
load_source_auth_cb (EBook *book, EBookStatus status, gpointer closure)
|
||||
{
|
||||
LoadSourceData *data = closure;
|
||||
gboolean was_in = g_object_get_data (G_OBJECT (book), "authenticated") != NULL;
|
||||
|
||||
g_object_set_data (G_OBJECT (book), "authenticated", NULL);
|
||||
|
||||
if (data->cancelled) {
|
||||
free_load_source_data (data);
|
||||
@ -99,38 +102,42 @@ load_source_auth_cb (EBook *book, EBookStatus status, gpointer closure)
|
||||
"%s", _("Accessing LDAP Server anonymously"));
|
||||
g_signal_connect (dialog, "response", G_CALLBACK(gtk_widget_destroy), NULL);
|
||||
gtk_widget_show (dialog);
|
||||
if (data->cb)
|
||||
data->cb (book, E_BOOK_ERROR_OK, data->closure);
|
||||
free_load_source_data (data);
|
||||
return;
|
||||
status = E_BOOK_ERROR_OK;
|
||||
|
||||
goto done;
|
||||
}
|
||||
} else if (status == E_BOOK_ERROR_INVALID_SERVER_VERSION) {
|
||||
e_error_run (NULL, "addressbook:server-version", NULL);
|
||||
status = E_BOOK_ERROR_OK;
|
||||
if (data->cb)
|
||||
data->cb (book, status, data->closure);
|
||||
free_load_source_data (data);
|
||||
return;
|
||||
|
||||
goto done;
|
||||
} else if (status == E_BOOK_ERROR_UNSUPPORTED_AUTHENTICATION_METHOD) {
|
||||
goto done;
|
||||
} else {
|
||||
const gchar *uri = e_book_get_uri (book);
|
||||
gchar *stripped_uri = remove_parameters_from_uri (uri);
|
||||
const gchar *auth_domain = e_source_get_property (data->source, "auth-domain");
|
||||
const gchar *component_name;
|
||||
|
||||
component_name = auth_domain ? auth_domain : "Addressbook";
|
||||
|
||||
if (status == E_BOOK_ERROR_AUTHENTICATION_FAILED) {
|
||||
const gchar *uri = e_book_get_uri (book);
|
||||
gchar *stripped_uri = remove_parameters_from_uri (uri);
|
||||
const gchar *auth_domain = e_source_get_property (data->source, "auth-domain");
|
||||
const gchar *component_name;
|
||||
|
||||
component_name = auth_domain ? auth_domain : "Addressbook";
|
||||
|
||||
e_passwords_forget_password (component_name, stripped_uri);
|
||||
|
||||
g_free (stripped_uri);
|
||||
} else if (was_in) {
|
||||
/* We already tried to authenticate to the server, and it failed with
|
||||
other reason than with E_BOOK_ERROR_AUTHENTICATION_FAILED, thus stop
|
||||
poking with the server and report error to the user. */
|
||||
goto done;
|
||||
}
|
||||
|
||||
g_object_set_data (G_OBJECT (book), "authenticated", GINT_TO_POINTER (1));
|
||||
addressbook_authenticate (book, TRUE, data->source, load_source_auth_cb, closure);
|
||||
|
||||
g_free (stripped_uri);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
if (data->cb)
|
||||
data->cb (book, status, data->closure);
|
||||
|
||||
|
||||
@ -75,7 +75,8 @@ static const char *status_to_string[] = {
|
||||
/* E_BOOK_ERROR_NO_SUCH_SOURCE */ N_("No such source"),
|
||||
/* E_BOOK_ERROR_OFFLINE_UNAVAILABLE */ N_("Not available in offline mode"),
|
||||
/* E_BOOK_ERROR_OTHER_ERROR */ N_("Other error"),
|
||||
/* E_BOOK_ERROR_INVALID_SERVER_VERSION */ N_("Invalid server version")
|
||||
/* E_BOOK_ERROR_INVALID_SERVER_VERSION */ N_("Invalid server version"),
|
||||
/* E_BOOK_ERROR_UNSUPPORTED_AUTHENTICATION_METHOD */ N_("Unsupported authentication method")
|
||||
};
|
||||
|
||||
void
|
||||
@ -131,6 +132,12 @@ eab_load_error_dialog (GtkWidget *parent, ESource *source, EBookStatus status)
|
||||
_("We were unable to open this addressbook. This either "
|
||||
"means you have entered an incorrect URI, or the server "
|
||||
"is unreachable.");
|
||||
|
||||
/* do not show repository offline message, it's kind of generic error */
|
||||
if (status != E_BOOK_ERROR_REPOSITORY_OFFLINE && status > 0 && status < G_N_ELEMENTS (status_to_string) && status_to_string [status]) {
|
||||
label = g_strconcat (label_string, "\n\n", _("Detailed error:"), " ", _(status_to_string [status]), NULL);
|
||||
label_string = label;
|
||||
}
|
||||
}
|
||||
|
||||
dialog = e_error_new ((GtkWindow *) parent, "addressbook:load-error", label_string, NULL);
|
||||
|
||||
Reference in New Issue
Block a user