Enable SASL PLAIN auth mechanism for IMAP accounts.
authorAndrej Kacian <ticho@claws-mail.org>
Fri, 19 Feb 2016 16:13:08 +0000 (17:13 +0100)
committerAndrej Kacian <ticho@claws-mail.org>
Fri, 19 Feb 2016 16:13:08 +0000 (17:13 +0100)
src/imap.c
src/imap.h
src/prefs_account.c

index f40d00274667ec966c08d634722394b3ade95904..241ad0f3506d3b5a3bb81c17eddaea02bf8fdc1f 100644 (file)
@@ -902,6 +902,9 @@ static gint imap_auth(IMAPSession *session, const gchar *user, const gchar *pass
        case IMAP_AUTH_SCRAM_SHA1:
                ok = imap_cmd_login(session, user, pass, "SCRAM-SHA-1");
                break;
+       case IMAP_AUTH_PLAIN:
+               ok = imap_cmd_login(session, user, pass, "PLAIN");
+               break;
        case IMAP_AUTH_LOGIN:
                ok = imap_cmd_login(session, user, pass, "LOGIN");
                break;
@@ -914,12 +917,14 @@ static gint imap_auth(IMAPSession *session, const gchar *user, const gchar *pass
                                "\t CRAM-MD5 %d\n"
                                "\t DIGEST-MD5 %d\n"
                                "\t SCRAM-SHA-1 %d\n"
+                               "\t PLAIN %d\n"
                                "\t LOGIN %d\n"
                                "\t GSSAPI %d\n", 
                        imap_has_capability(session, "ANONYMOUS"),
                        imap_has_capability(session, "CRAM-MD5"),
                        imap_has_capability(session, "DIGEST-MD5"),
                        imap_has_capability(session, "SCRAM-SHA-1"),
+                       imap_has_capability(session, "PLAIN"),
                        imap_has_capability(session, "LOGIN"),
                        imap_has_capability(session, "GSSAPI"));
                if (imap_has_capability(session, "CRAM-MD5"))
@@ -928,6 +933,8 @@ static gint imap_auth(IMAPSession *session, const gchar *user, const gchar *pass
                        ok = imap_cmd_login(session, user, pass, "DIGEST-MD5");
                if (ok == MAILIMAP_ERROR_LOGIN && imap_has_capability(session, "SCRAM-SHA-1"))
                        ok = imap_cmd_login(session, user, pass, "SCRAM-SHA-1");
+               if (ok == MAILIMAP_ERROR_LOGIN && imap_has_capability(session, "PLAIN"))
+                       ok = imap_cmd_login(session, user, pass, "PLAIN");
                if (ok == MAILIMAP_ERROR_LOGIN && imap_has_capability(session, "GSSAPI"))
                        ok = imap_cmd_login(session, user, pass, "GSSAPI");
                if (ok == MAILIMAP_ERROR_LOGIN) /* we always try LOGIN before giving up */
@@ -955,6 +962,12 @@ static gint imap_auth(IMAPSession *session, const gchar *user, const gchar *pass
                                     "SCRAM SASL plugin is installed.");
                }
 
+               if (type == IMAP_AUTH_PLAIN) {
+                       ext_info = _("\n\nPLAIN logins only work if libetpan has been "
+                                    "compiled with SASL support and the "
+                                    "PLAIN SASL plugin is installed.");
+               }
+
                if (time(NULL) - last_login_err > 10) {
                        if (!prefs_common.no_recv_err_panel) {
                                alertpanel_error_log(_("Connection to %s failed: "
index a776867971ad4ae1d68e42da32204ef350053ed9..b7eae6cd7e5a08f165f2ec62ef848b2a4887ce33 100644 (file)
@@ -29,7 +29,8 @@ typedef enum
        IMAP_AUTH_ANON          = 1 << 2,
        IMAP_AUTH_GSSAPI        = 1 << 3,
        IMAP_AUTH_DIGEST_MD5    = 1 << 4,
-       IMAP_AUTH_SCRAM_SHA1    = 1 << 5
+       IMAP_AUTH_SCRAM_SHA1    = 1 << 5,
+       IMAP_AUTH_PLAIN   = 1 << 6
 } IMAPAuthType;
 
 FolderClass *imap_get_class            (void);
index 3fad6cc8c80682adbb35dca30d3138671ff20b45..e57dd216cf1eb256b8af1cfd8c6bc116614365b7 100644 (file)
@@ -1584,6 +1584,7 @@ static void receive_create_widget_func(PrefsPage * _page,
        COMBOBOX_ADD (menu, "GSSAPI", IMAP_AUTH_GSSAPI);
        COMBOBOX_ADD (menu, "DIGEST-MD5", IMAP_AUTH_DIGEST_MD5);
        COMBOBOX_ADD (menu, "SCRAM-SHA-1", IMAP_AUTH_SCRAM_SHA1);
+       COMBOBOX_ADD (menu, "PLAIN", IMAP_AUTH_PLAIN);
 
        hbox1 = gtk_hbox_new (FALSE, 8);
        gtk_widget_show (hbox1);