]> granicus.if.org Git - curl/commitdiff
sasl: Added service parameter to Curl_sasl_create_digest_md5_message()
authorSteve Holme <steve_holme@hotmail.com>
Mon, 4 Jun 2012 19:22:06 +0000 (20:22 +0100)
committerSteve Holme <steve_holme@hotmail.com>
Mon, 4 Jun 2012 19:22:06 +0000 (20:22 +0100)
Added a service type parameter to Curl_sasl_create_digest_md5_message()
to allow the function to be used by different services rather than being
hard coded to "smtp".

lib/curl_sasl.c
lib/curl_sasl.h
lib/smtp.c

index 18c2782bcf6bb8a1353712bf418d32ad0a8e7eea..9f5fe95fb98bcda6657f34f8d9dc676cb0b870e2 100644 (file)
@@ -240,6 +240,7 @@ CURLcode Curl_sasl_create_cram_md5_message(struct SessionHandle *data,
  * chlg64  [in]     - Pointer to the input buffer.
  * userp   [in]     - The user name.
  * passdwp [in]     - The user's password.
+ * service [in]     - The service type such as www, smtp or pop
  * outptr  [in/out] - The address where a pointer to newly allocated memory
  *                    holding the result will be stored upon completion.
  * outlen  [out]    - The length of the output message.
@@ -250,6 +251,7 @@ CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
                                              const char* chlg64,
                                              const char* userp,
                                              const char* passwdp,
+                                             const char* service,
                                              char **outptr, size_t *outlen)
 {
   static const char table16[] = "0123456789abcdef";
@@ -271,7 +273,7 @@ CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
   char cnonce[]     = "12345678"; /* will be changed */
   char method[]     = "AUTHENTICATE";
   char qop[]        = "auth";
-  char uri[128]     = "smtp/";
+  char uri[128];
   char response[512];
 
   result = Curl_base64_decode(chlg64, &chlg, &chlglen);
@@ -341,7 +343,9 @@ CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
   for(i = 0; i < MD5_DIGEST_LEN; i++)
     snprintf(&HA1_hex[2 * i], 3, "%02x", digest[i]);
 
-  /* Orepare URL string, append realm to the protocol */
+  /* Prepare the URL string */
+  strcpy(uri, service);
+  strcat(uri, "/");
   strcat(uri, realm);
 
   /* Calculate H(A2) */
index 892da81ec7e322a06f467e20be07ec52ab0b39f1..97e9bcd755a01794eac5d437c347f3f69b6ac7eb 100644 (file)
@@ -58,6 +58,7 @@ CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
                                              const char* chlg64,
                                              const char* user,
                                              const char* passwdp,
+                                             const char* service,
                                              char **outptr, size_t *outlen);
 #endif
 
index fc952481babd37d1cb1e178315a8f8b16c655a3c..c251e50f554be9b1bd879521bdefb3517766f8e2 100644 (file)
@@ -752,7 +752,8 @@ static CURLcode smtp_state_authdigest_resp(struct connectdata *conn,
     ;
 
   result = Curl_sasl_create_digest_md5_message(data, chlg64, conn->user,
-                                               conn->passwd, &rplyb64, &len);
+                                               conn->passwd, "smtp",
+                                               &rplyb64, &len);
 
   if(!result) {
     if(rplyb64) {