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 /lib | |
parent | 0f26148423d19874f56f8a814edea6c9bee3e8aa (diff) |
ldap: Fixed Unicode user and password in Win32 bind calls
Diffstat (limited to 'lib')
-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 |