diff options
| author | Steve Holme <steve_holme@hotmail.com> | 2015-01-03 20:16:26 +0000 | 
|---|---|---|
| committer | Steve Holme <steve_holme@hotmail.com> | 2015-01-04 01:57:09 +0000 | 
| commit | 6416dc998b0054f6c9e76aeb167a029a1c7d3595 (patch) | |
| tree | c16f95f683cdc556e10be09de9ab05d8b12a461c | |
| parent | 0f26148423d19874f56f8a814edea6c9bee3e8aa (diff) | |
ldap: Fixed Unicode user and password in Win32 bind calls
| -rw-r--r-- | lib/ldap.c | 29 | 
1 files changed, 23 insertions, 6 deletions
| diff --git a/lib/ldap.c b/lib/ldap.c index b618cd17c..e4ce503c5 100644 --- a/lib/ldap.c +++ b/lib/ldap.c @@ -188,8 +188,12 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)  #if defined(CURL_LDAP_WIN) && \      (defined(USE_WIN32_IDN) || defined(USE_WINDOWS_SSPI))    TCHAR *host = NULL; +  TCHAR *user = NULL; +  TCHAR *passwd = NULL;  #else    char *host = NULL; +  char *user = NULL; +  char *passwd = NULL;  #endif    *done = TRUE; /* unconditionally */ @@ -222,8 +226,23 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)      goto quit;    } + +  if(conn->bits.user_passwd) { +    user = Curl_convert_UTF8_to_tchar(conn->user); +    passwd = Curl_convert_UTF8_to_tchar(conn->passwd); +    if(!user || !passwd) { +      result = CURLE_OUT_OF_MEMORY; + +      goto quit; +    } +  }  #else    host = conn->host.name; + +  if(conn->bits.user_passwd) { +    user = conn->user; +    passwd = conn->passwd; +  }  #endif  #ifdef LDAP_OPT_NETWORK_TIMEOUT @@ -370,15 +389,11 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)    ldap_set_option(server, LDAP_OPT_PROTOCOL_VERSION, &ldap_proto);  #endif -  rc = ldap_simple_bind_s(server, -                          conn->bits.user_passwd ? conn->user : NULL, -                          conn->bits.user_passwd ? conn->passwd : NULL); +  rc = ldap_simple_bind_s(server, user, passwd);    if(!ldap_ssl && rc != 0) {      ldap_proto = LDAP_VERSION2;      ldap_set_option(server, LDAP_OPT_PROTOCOL_VERSION, &ldap_proto); -    rc = ldap_simple_bind_s(server, -                            conn->bits.user_passwd ? conn->user : NULL, -                            conn->bits.user_passwd ? conn->passwd : NULL); +    rc = ldap_simple_bind_s(server, user, passwd);    }    if(rc != 0) {      failf(data, "LDAP local: ldap_simple_bind_s %s", ldap_err2string(rc)); @@ -572,6 +587,8 @@ quit:  #if defined(CURL_LDAP_WIN) && \      (defined(USE_WIN32_IDN) || defined(USE_WINDOWS_SSPI)) +  Curl_unicodefree(passwd); +  Curl_unicodefree(user);    Curl_unicodefree(host);  #endif | 
