From 3a80457f96c30ce7f6d1714fdbea6370b02bd00d Mon Sep 17 00:00:00 2001 From: hiro Date: Fri, 22 Apr 2005 08:29:24 +0000 Subject: prefer CRAM-MD5 if authentication type is automatic. Don't use LOGIN if CAPABILITY has LOGINDISABLED. git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@231 ee746299-78ed-0310-b773-934348b2243d --- src/imap.c | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) (limited to 'src/imap.c') diff --git a/src/imap.c b/src/imap.c index 064d88f2..5dfb806d 100644 --- a/src/imap.c +++ b/src/imap.c @@ -490,12 +490,32 @@ static gint imap_greeting(IMAPSession *session) static gint imap_auth(IMAPSession *session, const gchar *user, const gchar *pass, IMAPAuthType type) { - gint ok; + gboolean nologin; + gint ok = IMAP_AUTHFAIL; - if (type == 0 || type == IMAP_AUTH_LOGIN) - ok = imap_cmd_login(session, user, pass); - else + nologin = imap_has_capability(session, "LOGINDISABLED"); + + switch (type) { + case 0: + if (imap_has_capability(session, "AUTH=CRAM-MD5")) + ok = imap_cmd_authenticate(session, user, pass, type); + else if (nologin) + log_print(_("IMAP4 server disables LOGIN.\n")); + else + ok = imap_cmd_login(session, user, pass); + break; + case IMAP_AUTH_LOGIN: + if (nologin) + log_warning(_("IMAP4 server disables LOGIN.\n")); + else + ok = imap_cmd_login(session, user, pass); + break; + case IMAP_AUTH_CRAM_MD5: ok = imap_cmd_authenticate(session, user, pass, type); + break; + default: + break; + } if (ok == IMAP_SUCCESS) session->authenticated = TRUE; @@ -2990,7 +3010,8 @@ static gint imap_cmd_authenticate(IMAPSession *session, const gchar *user, gchar *response; gchar *response64; - g_return_val_if_fail(type == IMAP_AUTH_CRAM_MD5, IMAP_ERROR); + g_return_val_if_fail((type == 0 || type == IMAP_AUTH_CRAM_MD5), + IMAP_ERROR); auth_type = "CRAM-MD5"; -- cgit v1.2.3