]> granicus.if.org Git - neomutt/commitdiff
Don't send protocol garbage to sasl_decode64 during POP authentication.
authorBrendan Cully <brendan@kublai.com>
Fri, 8 Sep 2006 17:30:33 +0000 (17:30 +0000)
committerBrendan Cully <brendan@kublai.com>
Fri, 8 Sep 2006 17:30:33 +0000 (17:30 +0000)
Also enable SASL plaintext: $foo_authenticators is a more general solution.

mutt_sasl.c
pop_auth.c

index f089dea74dd6227a718ebde79c7854684e750a13..21fa0633818bf0211f0b9a6db653770a746df111 100644 (file)
@@ -221,15 +221,10 @@ int mutt_sasl_client_new (CONNECTION* conn, sasl_conn_t** saslconn)
     return -1;
   }
 
-  /* set security properties. We use NOPLAINTEXT globally, since we can
-   * just fall back to LOGIN in the IMAP case anyway. If that doesn't
-   * work for POP, we can make it a flag or move this code into
-   * imap/auth_sasl.c */
   memset (&secprops, 0, sizeof (secprops));
   /* Work around a casting bug in the SASL krb4 module */
   secprops.max_ssf = 0x7fff;
   secprops.maxbufsize = M_SASL_MAXBUF;
-  secprops.security_flags |= SASL_SEC_NOPLAINTEXT;
   if (sasl_setprop (*saslconn, SASL_SEC_PROPS, &secprops) != SASL_OK)
   {
     dprint (1, (debugfile,
index 8cb40fc04fdd2915a347c6b9112d9d15f59c26a7..930f571344bcdedb2c1746160dfa61f79d4c8f85 100644 (file)
@@ -46,8 +46,7 @@ static pop_auth_res_t pop_auth_sasl (POP_DATA *pop_data, const char *method)
   char inbuf[LONG_STRING];
   const char* mech;
   const char *pc = NULL;
-  unsigned int len, olen;
-  unsigned char client_start;
+  unsigned int len, olen, client_start;
 
   if (mutt_sasl_client_new (pop_data->conn, &saslconn) < 0)
   {
@@ -74,7 +73,7 @@ static pop_auth_res_t pop_auth_sasl (POP_DATA *pop_data, const char *method)
     return POP_A_UNAVAIL;
   }
 
-  client_start = (olen > 0);
+  client_start = olen;
 
   mutt_message _("Authenticating (SASL)...");
 
@@ -93,11 +92,11 @@ static pop_auth_res_t pop_auth_sasl (POP_DATA *pop_data, const char *method)
       return POP_A_SOCKET;
     }
 
-    if (rc != SASL_CONTINUE)
+    if (!client_start && rc != SASL_CONTINUE)
       break;
 
     if (!mutt_strncmp (inbuf, "+ ", 2)
-        && sasl_decode64 (inbuf, strlen (inbuf), buf, LONG_STRING-1, &len) != SASL_OK)
+        && sasl_decode64 (inbuf+2, strlen (inbuf+2), buf, LONG_STRING-1, &len) != SASL_OK)
     {
       dprint (1, (debugfile, "pop_auth_sasl: error base64-decoding server response.\n"));
       goto bail;
@@ -112,7 +111,10 @@ static pop_auth_res_t pop_auth_sasl (POP_DATA *pop_data, const char *method)
        mutt_sasl_interact (interaction);
       }
     else
+    {
+      olen = client_start;
       client_start = 0;
+    }
 
     if (rc != SASL_CONTINUE && (olen == 0 || rc != SASL_OK))
       break;