imap: Added support for SASL-IR extension (Part 1)
authorSteve Holme <steve_holme@hotmail.com>
Thu, 7 Feb 2013 20:02:06 +0000 (20:02 +0000)
committerSteve Holme <steve_holme@hotmail.com>
Thu, 7 Feb 2013 20:02:06 +0000 (20:02 +0000)
Introduced detection of the SASL-IR capability, in order to add support
for sending the initial response with the AUTHENTICATE command, as per
RFC4959.

lib/imap.c
lib/imap.h

index 72774c0..ebf0421 100644 (file)
@@ -24,6 +24,7 @@
  * RFC3501 IMAPv4 protocol
  * RFC4422 Simple Authentication and Security Layer (SASL)
  * RFC4616 PLAIN authentication
+ * RFC4959 IMAP Extension for SASL Initial Client Response
  * RFC5092 IMAP URL Scheme
  *
  ***************************************************************************/
@@ -374,6 +375,10 @@ static int imap_endofresp(struct pingpong *pp, int *resp)
         if(wordlen == 13 && !memcmp(line, "LOGINDISABLED", 13))
           imapc->login_disabled = TRUE;
 
+        /* Does the server support the SASL-IR capability? */
+        else if(wordlen == 7 && !memcmp(line, "SASL-IR", 7))
+          imapc->ir_supported = TRUE;
+
         /* Do we have a SASL based authentication mechanism? */
         else if(wordlen > 5 && !memcmp(line, "AUTH=", 5)) {
           line += 5;
@@ -676,7 +681,7 @@ static CURLcode imap_state_capability_resp(struct connectdata *conn,
   return result;
 }
 
-/* For AUTHENTICATE PLAIN responses */
+/* For AUTHENTICATE PLAIN (without initial response) responses */
 static CURLcode imap_state_auth_plain_resp(struct connectdata *conn,
                                            int imapcode,
                                            imapstate instate)
@@ -713,7 +718,7 @@ static CURLcode imap_state_auth_plain_resp(struct connectdata *conn,
   return result;
 }
 
-/* For AUTHENTICATE LOGIN responses */
+/* For AUTHENTICATE LOGIN (without initial response) responses */
 static CURLcode imap_state_auth_login_resp(struct connectdata *conn,
                                            int imapcode,
                                            imapstate instate)
@@ -910,7 +915,7 @@ static CURLcode imap_state_auth_digest_resp_resp(struct connectdata *conn,
 #endif
 
 #ifdef USE_NTLM
-/* For AUTHENTICATE NTLM responses */
+/* For AUTHENTICATE NTLM (without initial response) responses */
 static CURLcode imap_state_auth_ntlm_resp(struct connectdata *conn,
                                           int imapcode,
                                           imapstate instate)
index 5cbae75..eeedcff 100644 (file)
@@ -63,6 +63,7 @@ struct imap_conn {
   char resptag[5];        /* Response tag to wait for */
   bool ssldone;           /* Is connect() over SSL done? */
   bool login_disabled;    /* LOGIN command explicitly disabled by server */
+  bool ir_supported;      /* Initial response supported by server */
 };
 
 extern const struct Curl_handler Curl_handler_imap;