aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorSteve Holme <steve_holme@hotmail.com>2012-06-04 20:22:06 +0100
committerSteve Holme <steve_holme@hotmail.com>2012-06-04 20:22:06 +0100
commitbf51b8c07af9f6eb16c82673c66ce7402c067172 (patch)
tree2d06ccecea8c25418868a28d74526439a080eb58 /lib
parent04a6f0a1a4e6e22dbedd3db4920ea2f77bd5da11 (diff)
sasl: Added service parameter to Curl_sasl_create_digest_md5_message()
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".
Diffstat (limited to 'lib')
-rw-r--r--lib/curl_sasl.c8
-rw-r--r--lib/curl_sasl.h1
-rw-r--r--lib/smtp.c3
3 files changed, 9 insertions, 3 deletions
diff --git a/lib/curl_sasl.c b/lib/curl_sasl.c
index 18c2782bc..9f5fe95fb 100644
--- a/lib/curl_sasl.c
+++ b/lib/curl_sasl.c
@@ -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) */
diff --git a/lib/curl_sasl.h b/lib/curl_sasl.h
index 892da81ec..97e9bcd75 100644
--- a/lib/curl_sasl.h
+++ b/lib/curl_sasl.h
@@ -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
diff --git a/lib/smtp.c b/lib/smtp.c
index fc952481b..c251e50f5 100644
--- a/lib/smtp.c
+++ b/lib/smtp.c
@@ -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) {