]> granicus.if.org Git - curl/commitdiff
smtp: Added support for disabling the SASL initial response
authorSteve Holme <steve_holme@hotmail.com>
Sat, 27 Apr 2013 10:59:17 +0000 (11:59 +0100)
committerSteve Holme <steve_holme@hotmail.com>
Sat, 27 Apr 2013 11:09:15 +0000 (12:09 +0100)
Updated the default behaviour of sending the client's initial response in the AUTH
command to not send it and added support for CURLOPT_SASL_IR to allow the user to
specify including the response.

Related Bug: http://curl.haxx.se/mail/lib-2012-03/0114.html
Reported-by: Gokhan Sengun
lib/smtp.c

index 79ec5f787aae468e897aa5f2b850ddada60108f8..3e8441953944c8439c69ee7f8026131fc79011b8 100644 (file)
@@ -448,6 +448,7 @@ static CURLcode smtp_perform_upgrade_tls(struct connectdata *conn)
 static CURLcode smtp_perform_authenticate(struct connectdata *conn)
 {
   CURLcode result = CURLE_OK;
+  struct SessionHandle *data = conn->data;
   struct smtp_conn *smtpc = &conn->proto.smtpc;
   const char *mech = NULL;
   char *initresp = NULL;
@@ -487,10 +488,12 @@ static CURLcode smtp_perform_authenticate(struct connectdata *conn)
     state1 = SMTP_AUTH_NTLM;
     state2 = SMTP_AUTH_NTLM_TYPE2MSG;
     smtpc->authused = SASL_MECH_NTLM;
-    result = Curl_sasl_create_ntlm_type1_message(conn->user, conn->passwd,
-                                                 &conn->ntlm,
-                                                 &initresp, &len);
-  }
+
+    if(data->set.sasl_ir)
+      result = Curl_sasl_create_ntlm_type1_message(conn->user, conn->passwd,
+                                                   &conn->ntlm,
+                                                   &initresp, &len);
+    }
   else
 #endif
   if((smtpc->authmechs & SASL_MECH_LOGIN) &&
@@ -499,8 +502,10 @@ static CURLcode smtp_perform_authenticate(struct connectdata *conn)
     state1 = SMTP_AUTH_LOGIN;
     state2 = SMTP_AUTH_LOGIN_PASSWD;
     smtpc->authused = SASL_MECH_LOGIN;
-    result = Curl_sasl_create_login_message(conn->data, conn->user,
-                                            &initresp, &len);
+
+    if(data->set.sasl_ir)
+      result = Curl_sasl_create_login_message(conn->data, conn->user,
+                                              &initresp, &len);
   }
   else if((smtpc->authmechs & SASL_MECH_PLAIN) &&
           (smtpc->prefmech & SASL_MECH_PLAIN)) {
@@ -508,8 +513,10 @@ static CURLcode smtp_perform_authenticate(struct connectdata *conn)
     state1 = SMTP_AUTH_PLAIN;
     state2 = SMTP_AUTH_FINAL;
     smtpc->authused = SASL_MECH_PLAIN;
-    result = Curl_sasl_create_plain_message(conn->data, conn->user,
-                                            conn->passwd, &initresp, &len);
+
+    if(data->set.sasl_ir)
+      result = Curl_sasl_create_plain_message(conn->data, conn->user,
+                                              conn->passwd, &initresp, &len);
   }
   else {
     /* Other mechanisms not supported */