summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorSteve Holme <steve_holme@hotmail.com>2016-04-08 18:59:33 +0100
committerSteve Holme <steve_holme@hotmail.com>2016-04-08 18:59:33 +0100
commit9d89a038729b6b393784bea54cc90fd635fe2885 (patch)
tree4ddaf00a4ce990f141e813f44eaab11c7cb94e27 /lib
parent39d68b47e19c9dc42d578a923cb842f061eac165 (diff)
downloadcurl-9d89a038729b6b393784bea54cc90fd635fe2885.tar.gz
ftp/imap/pop3/smtp: Allow the service name to be overridden
Allow the service name to be overridden for DIGIST-MD5 and Kerberos 5 authentication in FTP, IMAP, POP3 and SMTP.
Diffstat (limited to 'lib')
-rw-r--r--lib/curl_sasl.c12
-rw-r--r--lib/krb5.c7
2 files changed, 14 insertions, 5 deletions
diff --git a/lib/curl_sasl.c b/lib/curl_sasl.c
index 13cf4e954..08beda2b9 100644
--- a/lib/curl_sasl.c
+++ b/lib/curl_sasl.c
@@ -265,6 +265,9 @@ CURLcode Curl_sasl_start(struct SASL *sasl, struct connectdata *conn,
size_t len = 0;
saslstate state1 = SASL_STOP;
saslstate state2 = SASL_FINAL;
+ const char* service = data->set.str[STRING_SERVICE_NAME] ?
+ data->set.str[STRING_SERVICE_NAME] :
+ sasl->params->service;
sasl->force_ir = force_ir; /* Latch for future use */
sasl->authused = 0; /* No mechanism used yet */
@@ -294,7 +297,7 @@ CURLcode Curl_sasl_start(struct SASL *sasl, struct connectdata *conn,
if(force_ir || data->set.sasl_ir)
result = Curl_auth_create_gssapi_user_message(data, conn->user,
conn->passwd,
- sasl->params->service,
+ service,
data->easy_conn->
host.name,
sasl->mutual_auth,
@@ -410,6 +413,9 @@ CURLcode Curl_sasl_continue(struct SASL *sasl, struct connectdata *conn,
size_t chlglen = 0;
#endif
size_t len = 0;
+ const char *service = data->set.str[STRING_SERVICE_NAME] ?
+ data->set.str[STRING_SERVICE_NAME] :
+ sasl->params->service;
*progress = SASL_INPROGRESS;
@@ -461,7 +467,7 @@ CURLcode Curl_sasl_continue(struct SASL *sasl, struct connectdata *conn,
sasl->params->getmessage(data->state.buffer, &serverdata);
result = Curl_auth_create_digest_md5_message(data, serverdata,
conn->user, conn->passwd,
- sasl->params->service,
+ service,
&resp, &len);
newstate = SASL_DIGESTMD5_RESP;
break;
@@ -495,7 +501,7 @@ CURLcode Curl_sasl_continue(struct SASL *sasl, struct connectdata *conn,
case SASL_GSSAPI:
result = Curl_auth_create_gssapi_user_message(data, conn->user,
conn->passwd,
- sasl->params->service,
+ service,
data->easy_conn->host.name,
sasl->mutual_auth, NULL,
&conn->krb5,
diff --git a/lib/krb5.c b/lib/krb5.c
index 65869c99d..992da5456 100644
--- a/lib/krb5.c
+++ b/lib/krb5.c
@@ -152,7 +152,10 @@ krb5_auth(void *app_data, struct connectdata *conn)
curl_socklen_t l = sizeof(conn->local_addr);
struct SessionHandle *data = conn->data;
CURLcode result;
- const char *service = "ftp", *srv_host = "host";
+ const char *service = data->set.str[STRING_SERVICE_NAME] ?
+ data->set.str[STRING_SERVICE_NAME] :
+ "ftp";
+ const char *srv_host = "host";
gss_buffer_desc input_buffer, output_buffer, _gssresp, *gssresp;
OM_uint32 maj, min;
gss_name_t gssname;
@@ -180,9 +183,9 @@ krb5_auth(void *app_data, struct connectdata *conn)
/* this really shouldn't be repeated here, but can't help it */
if(service == srv_host) {
result = Curl_ftpsendf(conn, "AUTH GSSAPI");
-
if(result)
return -2;
+
if(Curl_GetFTPResponse(&nread, conn, NULL))
return -1;