aboutsummaryrefslogtreecommitdiffstats
path: root/camel/providers/pop3
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@ximian.com>2003-02-15 04:11:53 +0800
committerJeffrey Stedfast <fejj@src.gnome.org>2003-02-15 04:11:53 +0800
commit6545e80191916bea8705e0d4feb0e00192b36905 (patch)
tree51179e91f5a910f964e8db861e626d76e1bb2c5d /camel/providers/pop3
parent4d98f14113b8cdf72226361d6904a6829a15f0e7 (diff)
downloadgsoc2013-evolution-6545e80191916bea8705e0d4feb0e00192b36905.tar
gsoc2013-evolution-6545e80191916bea8705e0d4feb0e00192b36905.tar.gz
gsoc2013-evolution-6545e80191916bea8705e0d4feb0e00192b36905.tar.bz2
gsoc2013-evolution-6545e80191916bea8705e0d4feb0e00192b36905.tar.lz
gsoc2013-evolution-6545e80191916bea8705e0d4feb0e00192b36905.tar.xz
gsoc2013-evolution-6545e80191916bea8705e0d4feb0e00192b36905.tar.zst
gsoc2013-evolution-6545e80191916bea8705e0d4feb0e00192b36905.zip
Same as the gpg and pkcs7 contexts.
2003-02-14 Jeffrey Stedfast <fejj@ximian.com> * camel-smime-context.c (smime_get_password): Same as the gpg and pkcs7 contexts. * camel-sasl-popb4smtp.c (popb4smtp_challenge): Updated for camel_session_get_password(). * camel-pkcs7-context.c (get_password): Same as the gpg code. * camel-gpg-context.c (gpg_ctx_parse_status): Updated for camel_session_get_password(). * providers/smtp/camel-smtp-transport.c (smtp_connect): No need to set USER_CANCEL exception here as it is done by camel_session_get_password(). Also updated for the new get_password() API change. * providers/imap/camel-imap-store.c (imap_auth_loop): Updated for camel_session_get_password() changes. We don't need to play the "bad passwd" game here too, do we? Bah, probably should but I don't feel like it for now. Maybe when we rewrite the IMAP provider. * camel-session.c (camel_session_get_password): Now takes a 'reprompt' argument that will force user-input to be given even if we have the passwd cached. * providers/pop3/camel-pop3-store.c (pop3_connect): Instead of uncaching the passwd after we receive a -ERR from the POP server, set 'reprompt' to TRUE to force user-input for the next password prompt (ie, make sure the front-end knows not to just return the cached value). The front-end can then decide to fill-in the user-input field with the last passwd that the user supplied. (pop3_try_authenticate): Now takes a reprompt argument which we pass into camel_session_get_password(). svn path=/trunk/; revision=19912
Diffstat (limited to 'camel/providers/pop3')
-rw-r--r--camel/providers/pop3/camel-pop3-store.c38
1 files changed, 19 insertions, 19 deletions
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);