diff options
| author | Steve Holme <steve_holme@hotmail.com> | 2016-04-08 18:59:33 +0100 | 
|---|---|---|
| committer | Steve Holme <steve_holme@hotmail.com> | 2016-04-08 18:59:33 +0100 | 
| commit | 9d89a038729b6b393784bea54cc90fd635fe2885 (patch) | |
| tree | 4ddaf00a4ce990f141e813f44eaab11c7cb94e27 /lib | |
| parent | 39d68b47e19c9dc42d578a923cb842f061eac165 (diff) | |
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.c | 12 | ||||
| -rw-r--r-- | lib/krb5.c | 7 | 
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; | 
