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:
parent
4e420600c1
commit
f7d5ecec9c
49
lib/ldap.c
49
lib/ldap.c
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user