aboutsummaryrefslogtreecommitdiffstats
path: root/camel/providers
diff options
context:
space:
mode:
Diffstat (limited to 'camel/providers')
-rw-r--r--camel/providers/imap/camel-imap-store.c8
-rw-r--r--camel/providers/pop3/camel-pop3-store.c38
-rw-r--r--camel/providers/smtp/camel-smtp-transport.c6
3 files changed, 24 insertions, 28 deletions
diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c
index 0107356427..0537eaf0d9 100644
--- a/camel/providers/imap/camel-imap-store.c
+++ b/camel/providers/imap/camel-imap-store.c
@@ -1094,8 +1094,7 @@ imap_auth_loop (CamelService *service, CamelException *ex)
while (!authenticated) {
if (errbuf) {
/* We need to un-cache the password before prompting again */
- camel_session_forget_password (
- session, service, "password", ex);
+ camel_session_forget_password (session, service, "password", ex);
g_free (service->url->passwd);
service->url->passwd = NULL;
}
@@ -1109,9 +1108,8 @@ imap_auth_loop (CamelService *service, CamelException *ex)
service->url->user,
service->url->host);
service->url->passwd =
- camel_session_get_password (
- session, prompt, TRUE,
- service, "password", ex);
+ camel_session_get_password (session, prompt, FALSE, TRUE,
+ service, "password", ex);
g_free (prompt);
g_free (errbuf);
errbuf = NULL;
diff --git a/camel/providers/pop3/camel-pop3-store.c b/camel/providers/pop3/camel-pop3-store.c
index 6452cb6a47..566d57c9ba 100644
--- a/camel/providers/pop3/camel-pop3-store.c
+++ b/camel/providers/pop3/camel-pop3-store.c
@@ -445,8 +445,7 @@ try_sasl(CamelPOP3Store *store, const char *mech, CamelException *ex)
}
static int
-pop3_try_authenticate (CamelService *service, const char *errmsg,
- CamelException *ex)
+pop3_try_authenticate (CamelService *service, gboolean reprompt, const char *errmsg, CamelException *ex)
{
CamelPOP3Store *store = (CamelPOP3Store *)service;
CamelPOP3Command *pcu = NULL, *pcp = NULL;
@@ -455,7 +454,7 @@ pop3_try_authenticate (CamelService *service, const char *errmsg,
/* override, testing only */
/*printf("Forcing authmech to 'login'\n");
service->url->authmech = g_strdup("LOGIN");*/
-
+
if (!service->url->passwd) {
char *prompt;
@@ -464,7 +463,7 @@ pop3_try_authenticate (CamelService *service, const char *errmsg,
service->url->user,
service->url->host);
service->url->passwd = camel_session_get_password (camel_service_get_session (service),
- prompt, TRUE, service, "password", ex);
+ prompt, reprompt, TRUE, service, "password", ex);
g_free (prompt);
if (!service->url->passwd)
return FALSE;
@@ -478,7 +477,7 @@ pop3_try_authenticate (CamelService *service, const char *errmsg,
char *secret, md5asc[33], *d;
unsigned char md5sum[16], *s;
- secret = alloca(strlen(store->engine->apop)+strlen(service->url->passwd)+1);
+ secret = g_alloca(strlen(store->engine->apop)+strlen(service->url->passwd)+1);
sprintf(secret, "%s%s", store->engine->apop, service->url->passwd);
md5_get_digest(secret, strlen (secret), md5sum);
@@ -534,14 +533,18 @@ pop3_try_authenticate (CamelService *service, const char *errmsg,
static gboolean
pop3_connect (CamelService *service, CamelException *ex)
{
+ CamelPOP3Store *store = (CamelPOP3Store *)service;
+ gboolean reprompt = FALSE;
+ CamelSession *session;
char *errbuf = NULL;
int status;
- CamelPOP3Store *store = (CamelPOP3Store *)service;
+
+ session = camel_service_get_session (service);
if (store->cache == NULL) {
char *root;
- root = camel_session_get_storage_path(service->session, service, ex);
+ root = camel_session_get_storage_path (session, service, ex);
if (root) {
store->cache = camel_data_cache_new(root, 0, ex);
g_free(root);
@@ -557,24 +560,21 @@ pop3_connect (CamelService *service, CamelException *ex)
return FALSE;
do {
- camel_exception_clear(ex);
- status = pop3_try_authenticate(service, errbuf, ex);
- g_free(errbuf);
+ camel_exception_clear (ex);
+ status = pop3_try_authenticate (service, reprompt, errbuf, ex);
+ g_free (errbuf);
errbuf = NULL;
/* we only re-prompt if we failed to authenticate, any other error and we just abort */
if (camel_exception_get_id (ex) == CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE) {
- errbuf = g_strdup_printf("%s\n\n", camel_exception_get_description(ex));
-
- /* Uncache the password before prompting again. */
- camel_session_forget_password(camel_service_get_session (service),
- service, "password", NULL);
- g_free(service->url->passwd);
+ errbuf = g_strdup_printf ("%s\n\n", camel_exception_get_description (ex));
+ g_free (service->url->passwd);
service->url->passwd = NULL;
+ reprompt = TRUE;
}
- } while(status != -1 && ex->id == CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE);
-
- g_free(errbuf);
+ } while (status != -1 && ex->id == CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE);
+
+ g_free (errbuf);
if (status == -1 || camel_exception_is_set(ex)) {
camel_service_disconnect(service, TRUE, ex);
diff --git a/camel/providers/smtp/camel-smtp-transport.c b/camel/providers/smtp/camel-smtp-transport.c
index bb27c632bc..6361dcd7a8 100644
--- a/camel/providers/smtp/camel-smtp-transport.c
+++ b/camel/providers/smtp/camel-smtp-transport.c
@@ -499,7 +499,7 @@ smtp_connect (CamelService *service, CamelException *ex)
while (!authenticated) {
if (errbuf) {
/* We need to un-cache the password before prompting again */
- camel_session_forget_password (session, service, "password", ex);
+ camel_session_forget_password (session, service, "password", NULL);
g_free (service->url->passwd);
service->url->passwd = NULL;
}
@@ -511,7 +511,7 @@ smtp_connect (CamelService *service, CamelException *ex)
errbuf ? errbuf : "", service->url->user,
service->url->host);
- service->url->passwd = camel_session_get_password (session, prompt, TRUE,
+ service->url->passwd = camel_session_get_password (session, prompt, FALSE, TRUE,
service, "password", ex);
g_free (prompt);
@@ -519,8 +519,6 @@ smtp_connect (CamelService *service, CamelException *ex)
errbuf = NULL;
if (!service->url->passwd) {
- camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL,
- _("You didn't enter a password."));
camel_service_disconnect (service, TRUE, NULL);
return FALSE;
}