1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-21 23:58:49 -05:00

ldap: Convert attribute output to UTF-8 when Unicode

This commit is contained in:
Steve Holme 2015-01-07 19:45:24 +00:00
parent 4e420600c1
commit f7d5ecec9c

View File

@ -490,18 +490,32 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
for(attribute = ldap_first_attribute(server, entryIterator, &ber); for(attribute = ldap_first_attribute(server, entryIterator, &ber);
attribute; attribute;
attribute = ldap_next_attribute(server, entryIterator, ber)) { attribute = ldap_next_attribute(server, entryIterator, ber)) {
BerValue **vals;
size_t attr_len;
#if defined(CURL_LDAP_WIN) #if defined(CURL_LDAP_WIN)
size_t attr_len = _tcslen(attribute); char *attr = Curl_convert_tchar_to_UTF8(attribute);
#else if(!attr) {
size_t attr_len = strlen(attribute); if(ber)
#endif ber_free(ber, 0);
BerValue **vals = ldap_get_values_len(server, entryIterator, attribute);
result = CURLE_OUT_OF_MEMORY;
goto quit;
}
#else
char *attr = attribute;
#endif
attr_len = strlen(attr);
vals = ldap_get_values_len(server, entryIterator, attribute);
if(vals != NULL) { if(vals != NULL) {
for(i = 0; (vals[i] != NULL); i++) { for(i = 0; (vals[i] != NULL); i++) {
result = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\t", 1); result = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\t", 1);
if(result) { if(result) {
ldap_value_free_len(vals); ldap_value_free_len(vals);
#if defined(CURL_LDAP_WIN)
Curl_unicodefree(attr);
#endif
ldap_memfree(attribute); ldap_memfree(attribute);
if(ber) if(ber)
ber_free(ber, 0); ber_free(ber, 0);
@ -510,9 +524,12 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
} }
result = Curl_client_write(conn, CLIENTWRITE_BODY, result = Curl_client_write(conn, CLIENTWRITE_BODY,
(char *)attribute, attr_len); (char *) attr, attr_len);
if(result) { if(result) {
ldap_value_free_len(vals); ldap_value_free_len(vals);
#if defined(CURL_LDAP_WIN)
Curl_unicodefree(attr);
#endif
ldap_memfree(attribute); ldap_memfree(attribute);
if(ber) if(ber)
ber_free(ber, 0); ber_free(ber, 0);
@ -523,6 +540,9 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
result = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)": ", 2); result = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)": ", 2);
if(result) { if(result) {
ldap_value_free_len(vals); ldap_value_free_len(vals);
#if defined(CURL_LDAP_WIN)
Curl_unicodefree(attr);
#endif
ldap_memfree(attribute); ldap_memfree(attribute);
if(ber) if(ber)
ber_free(ber, 0); ber_free(ber, 0);
@ -533,7 +553,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
dlsize += attr_len + 3; dlsize += attr_len + 3;
if((attr_len > 7) && if((attr_len > 7) &&
(strcmp(";binary", (char *) attribute + (attr_len - 7)) == 0)) { (strcmp(";binary", (char *) attr + (attr_len - 7)) == 0)) {
/* Binary attribute, encode to base64. */ /* Binary attribute, encode to base64. */
result = Curl_base64_encode(data, result = Curl_base64_encode(data,
vals[i]->bv_val, vals[i]->bv_val,
@ -542,6 +562,9 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
&val_b64_sz); &val_b64_sz);
if(result) { if(result) {
ldap_value_free_len(vals); ldap_value_free_len(vals);
#if defined(CURL_LDAP_WIN)
Curl_unicodefree(attr);
#endif
ldap_memfree(attribute); ldap_memfree(attribute);
if(ber) if(ber)
ber_free(ber, 0); ber_free(ber, 0);
@ -555,6 +578,9 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
free(val_b64); free(val_b64);
if(result) { if(result) {
ldap_value_free_len(vals); ldap_value_free_len(vals);
#if defined(CURL_LDAP_WIN)
Curl_unicodefree(attr);
#endif
ldap_memfree(attribute); ldap_memfree(attribute);
if(ber) if(ber)
ber_free(ber, 0); ber_free(ber, 0);
@ -570,6 +596,9 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
vals[i]->bv_len); vals[i]->bv_len);
if(result) { if(result) {
ldap_value_free_len(vals); ldap_value_free_len(vals);
#if defined(CURL_LDAP_WIN)
Curl_unicodefree(attr);
#endif
ldap_memfree(attribute); ldap_memfree(attribute);
if(ber) if(ber)
ber_free(ber, 0); ber_free(ber, 0);
@ -583,6 +612,9 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
result = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 1); result = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 1);
if(result) { if(result) {
ldap_value_free_len(vals); ldap_value_free_len(vals);
#if defined(CURL_LDAP_WIN)
Curl_unicodefree(attr);
#endif
ldap_memfree(attribute); ldap_memfree(attribute);
if(ber) if(ber)
ber_free(ber, 0); ber_free(ber, 0);
@ -598,6 +630,9 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
} }
/* Free the attribute as we are done with it */ /* Free the attribute as we are done with it */
#if defined(CURL_LDAP_WIN)
Curl_unicodefree(attr);
#endif
ldap_memfree(attribute); ldap_memfree(attribute);
result = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 1); result = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 1);