aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Holme <steve_holme@hotmail.com>2012-05-31 23:11:54 +0100
committerSteve Holme <steve_holme@hotmail.com>2012-05-31 23:11:54 +0100
commit54d484e136d43b50934cc906804662e780adc3fa (patch)
tree2d895f748df6a9fcfe47c9a2b7f5597f3f87300f
parentcb3d0ce2cb5097d906c9e7b9d5bb1de2eb4bbb93 (diff)
sasl: Moved login authentication message creation from smtp.c
Moved the login message creation from smtp.c into the sasl module to allow for use by other modules such as pop3.
-rw-r--r--lib/curl_sasl.c36
-rw-r--r--lib/curl_sasl.h8
-rw-r--r--lib/smtp.c28
3 files changed, 49 insertions, 23 deletions
diff --git a/lib/curl_sasl.c b/lib/curl_sasl.c
index e2e1e3e7a..50baea97a 100644
--- a/lib/curl_sasl.c
+++ b/lib/curl_sasl.c
@@ -77,3 +77,39 @@ CURLcode Curl_sasl_create_plain_message(struct SessionHandle *data,
return Curl_base64_encode(data, plainauth, 2 * ulen + plen + 2, outptr,
outlen);
}
+
+/*
+ * Curl_sasl_create_login_message()
+ *
+ * This is used to generate an already encoded login message containing the
+ * user name or password ready for sending to the recipient.
+ *
+ * Parameters:
+ *
+ * data [in] - The session handle.
+ * userp [in] - The user name.
+ * 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.
+ *
+ * Returns CURLE_OK on success.
+ */
+CURLcode Curl_sasl_create_login_message(struct SessionHandle *data,
+ const char* valuep, char **outptr,
+ size_t *outlen)
+{
+ size_t vlen = strlen(valuep);
+
+ if(!vlen) {
+ *outptr = strdup("=");
+ if(*outptr) {
+ *outlen = (size_t) 1;
+ return CURLE_OK;
+ }
+
+ *outlen = 0;
+ return CURLE_OUT_OF_MEMORY;
+ }
+
+ return Curl_base64_encode(data, valuep, vlen, outptr, outlen);
+}
diff --git a/lib/curl_sasl.h b/lib/curl_sasl.h
index 236645657..dfe69ceda 100644
--- a/lib/curl_sasl.h
+++ b/lib/curl_sasl.h
@@ -33,10 +33,16 @@
#define SASL_AUTH_EXTERNAL 0x0020
#define SASL_AUTH_NTLM 0x0040
-/* This is to generate a base64 encoded plain authentication message */
+/* This is used to generate a base64 encoded plain authentication message */
CURLcode Curl_sasl_create_plain_message(struct SessionHandle *data,
const char* userp,
const char* passwdp,
char **outptr, size_t *outlen);
+/* This is used to generate a base64 encoded login authentication message
+ containing either the user name or password details */
+CURLcode Curl_sasl_create_login_message(struct SessionHandle *data,
+ const char* valuep, char **outptr,
+ size_t *outlen);
+
#endif /* HEADER_CURL_SASL_H */
diff --git a/lib/smtp.c b/lib/smtp.c
index f202fd6a7..06cf2a5a2 100644
--- a/lib/smtp.c
+++ b/lib/smtp.c
@@ -383,25 +383,6 @@ static CURLcode smtp_state_helo(struct connectdata *conn)
return CURLE_OK;
}
-static CURLcode smtp_auth_login(struct connectdata *conn, const char *valuep,
- char **outptr, size_t *outlen)
-{
- size_t vlen = strlen(valuep);
-
- if(!vlen) {
- *outptr = strdup("=");
- if(*outptr) {
- *outlen = (size_t) 1;
- return CURLE_OK;
- }
-
- *outlen = 0;
- return CURLE_OUT_OF_MEMORY;
- }
-
- return Curl_base64_encode(conn->data, valuep, vlen, outptr, outlen);
-}
-
#ifdef USE_NTLM
static CURLcode smtp_auth_ntlm_type1_message(struct connectdata *conn,
char **outptr, size_t *outlen)
@@ -459,7 +440,8 @@ static CURLcode smtp_authenticate(struct connectdata *conn)
state1 = SMTP_AUTHLOGIN;
state2 = SMTP_AUTHPASSWD;
smtpc->authused = SASL_AUTH_LOGIN;
- result = smtp_auth_login(conn, conn->user, &initresp, &len);
+ result = Curl_sasl_create_login_message(conn->data, conn->user,
+ &initresp, &len);
}
else if(smtpc->authmechs & SASL_AUTH_PLAIN) {
mech = "PLAIN";
@@ -685,7 +667,8 @@ static CURLcode smtp_state_authlogin_resp(struct connectdata *conn,
result = CURLE_LOGIN_DENIED;
}
else {
- result = smtp_auth_login(conn, conn->user, &authuser, &len);
+ result = Curl_sasl_create_login_message(conn->data, conn->user,
+ &authuser, &len);
if(!result) {
if(authuser) {
@@ -718,7 +701,8 @@ static CURLcode smtp_state_authpasswd_resp(struct connectdata *conn,
result = CURLE_LOGIN_DENIED;
}
else {
- result = smtp_auth_login(conn, conn->passwd, &authpasswd, &len);
+ result = Curl_sasl_create_login_message(conn->data, conn->passwd,
+ &authpasswd, &len);
if(!result) {
if(authpasswd) {