aboutsummaryrefslogtreecommitdiffstats
path: root/camel/providers
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@ximian.com>2002-05-07 06:35:47 +0800
committerJeffrey Stedfast <fejj@src.gnome.org>2002-05-07 06:35:47 +0800
commit1acd03710d50072259f91bae1a9e2395c6bdfac7 (patch)
tree6b4fd73c9fad9446e0d93ba7c5de5b72089388be /camel/providers
parent04576b92e0a2d2c2a8ceb83e78cf80eefff06e53 (diff)
downloadgsoc2013-evolution-1acd03710d50072259f91bae1a9e2395c6bdfac7.tar
gsoc2013-evolution-1acd03710d50072259f91bae1a9e2395c6bdfac7.tar.gz
gsoc2013-evolution-1acd03710d50072259f91bae1a9e2395c6bdfac7.tar.bz2
gsoc2013-evolution-1acd03710d50072259f91bae1a9e2395c6bdfac7.tar.lz
gsoc2013-evolution-1acd03710d50072259f91bae1a9e2395c6bdfac7.tar.xz
gsoc2013-evolution-1acd03710d50072259f91bae1a9e2395c6bdfac7.tar.zst
gsoc2013-evolution-1acd03710d50072259f91bae1a9e2395c6bdfac7.zip
If the pop3 command status is -1, then we probably have a TCP error (?) so
2002-05-06 Jeffrey Stedfast <fejj@ximian.com> * providers/pop3/camel-pop3-store.c (pop3_try_authenticate): If the pop3 command status is -1, then we probably have a TCP error (?) so set a SYSTEM exception so our caller can distinguish between a "bad password" and a "tcp error". (pop3_connect): Only uncache the password on "bad password" errors. svn path=/trunk/; revision=16700
Diffstat (limited to 'camel/providers')
-rw-r--r--camel/providers/pop3/camel-pop3-engine.c1
-rw-r--r--camel/providers/pop3/camel-pop3-store.c36
2 files changed, 22 insertions, 15 deletions
diff --git a/camel/providers/pop3/camel-pop3-engine.c b/camel/providers/pop3/camel-pop3-engine.c
index 1783520b7c..a76df8f9bc 100644
--- a/camel/providers/pop3/camel-pop3-engine.c
+++ b/camel/providers/pop3/camel-pop3-engine.c
@@ -315,7 +315,6 @@ camel_pop3_engine_iterate(CamelPOP3Engine *pe, CamelPOP3Command *pcwait)
e_dlist_remove((EDListNode *)pw);
-
pe->sentlen += strlen(pw->data);
pw->state = CAMEL_POP3_COMMAND_DISPATCHED;
diff --git a/camel/providers/pop3/camel-pop3-store.c b/camel/providers/pop3/camel-pop3-store.c
index dcdeefb392..ebf55ccd10 100644
--- a/camel/providers/pop3/camel-pop3-store.c
+++ b/camel/providers/pop3/camel-pop3-store.c
@@ -439,9 +439,9 @@ pop3_try_authenticate (CamelService *service, const char *errmsg,
CamelException *ex)
{
CamelPOP3Store *store = (CamelPOP3Store *)service;
- int status;
CamelPOP3Command *pcu = NULL, *pcp = NULL;
-
+ int status;
+
/* override, testing only */
/*printf("Forcing authmech to 'login'\n");
service->url->authmech = g_strdup("LOGIN");*/
@@ -494,14 +494,19 @@ pop3_try_authenticate (CamelService *service, const char *errmsg,
"authentication mechanism."));
return FALSE;
}
-
- while (camel_pop3_engine_iterate(store->engine, pcp) > 0)
+
+ while ((status = camel_pop3_engine_iterate(store->engine, pcp)) > 0)
;
- status = pcp->state != CAMEL_POP3_COMMAND_OK;
- if (status) {
- camel_exception_setv(ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
- _("Unable to connect to POP server.\nError sending password: %s"),
- store->engine->line);
+
+ if (status != CAMEL_POP3_COMMAND_OK) {
+ if (status == CAMEL_POP3_COMMAND_ERR)
+ camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
+ _("Unable to connect to POP server.\nError sending password: %s"),
+ store->engine->line);
+ else
+ camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
+ _("Unable to connect to POP server.\nError sending password: %s"),
+ errno ? g_strerror (errno) : _("Unknown error"));
}
camel_pop3_engine_command_free(store->engine, pcp);
@@ -542,11 +547,14 @@ pop3_connect (CamelService *service, CamelException *ex)
errbuf = g_strdup_printf ("%s\n\n", camel_exception_get_description (ex));
camel_exception_clear (ex);
- /* Uncache the password before prompting again. */
- camel_session_forget_password (camel_service_get_session (service),
- service, "password", ex);
- g_free (service->url->passwd);
- service->url->passwd = NULL;
+ /* don't forget the password if we encountered an unknown error */
+ if (camel_exception_get_id (ex) == CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE) {
+ /* Uncache the password before prompting again. */
+ camel_session_forget_password (camel_service_get_session (service),
+ service, "password", ex);
+ g_free (service->url->passwd);
+ service->url->passwd = NULL;
+ }
}
tryagain = pop3_try_authenticate (service, errbuf, ex);