ldap: fix the build for systems with ldap_url_parse()
Make sure that the custom struct fields are only used by code that
doesn't use a struct defintion from the outside.
Attempts to fix the problem introduced in 3dc6fc42bf
This commit is contained in:
Родитель
6d9cddc513
Коммит
857f999353
33
lib/ldap.c
33
lib/ldap.c
|
@ -84,7 +84,9 @@ typedef struct {
|
||||||
int lud_scope;
|
int lud_scope;
|
||||||
char *lud_filter;
|
char *lud_filter;
|
||||||
char **lud_exts;
|
char **lud_exts;
|
||||||
char **lud_attrs_dup; /* gets each entry malloc'ed */
|
size lud_attrs_dups; /* how many were dup'ed, this field is not in the
|
||||||
|
"real" struct so can only be used in code without
|
||||||
|
HAVE_LDAP_URL_PARSE defined */
|
||||||
} CURL_LDAPURLDesc;
|
} CURL_LDAPURLDesc;
|
||||||
|
|
||||||
#undef LDAPURLDesc
|
#undef LDAPURLDesc
|
||||||
|
@ -365,7 +367,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = ldap_search_s(server, ludp->lud_dn, ludp->lud_scope,
|
rc = ldap_search_s(server, ludp->lud_dn, ludp->lud_scope,
|
||||||
ludp->lud_filter, ludp->lud_attrs_dup, 0, &result);
|
ludp->lud_filter, ludp->lud_attrs, 0, &result);
|
||||||
|
|
||||||
if(rc != 0 && rc != LDAP_SIZELIMIT_EXCEEDED) {
|
if(rc != 0 && rc != LDAP_SIZELIMIT_EXCEEDED) {
|
||||||
failf(data, "LDAP remote: %s", ldap_err2string(rc));
|
failf(data, "LDAP remote: %s", ldap_err2string(rc));
|
||||||
|
@ -540,14 +542,15 @@ static bool unescape_elements (void *data, LDAPURLDesc *ludp)
|
||||||
if(ludp->lud_filter) {
|
if(ludp->lud_filter) {
|
||||||
ludp->lud_filter = curl_easy_unescape(data, ludp->lud_filter, 0, NULL);
|
ludp->lud_filter = curl_easy_unescape(data, ludp->lud_filter, 0, NULL);
|
||||||
if(!ludp->lud_filter)
|
if(!ludp->lud_filter)
|
||||||
return (FALSE);
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(i = 0; ludp->lud_attrs && ludp->lud_attrs[i]; i++) {
|
for(i = 0; ludp->lud_attrs && ludp->lud_attrs[i]; i++) {
|
||||||
ludp->lud_attrs_dup[i] = curl_easy_unescape(data, ludp->lud_attrs[i],
|
ludp->lud_attrs[i] = curl_easy_unescape(data, ludp->lud_attrs[i],
|
||||||
0, NULL);
|
0, NULL);
|
||||||
if(!ludp->lud_attrs_dup[i])
|
if(!ludp->lud_attrs[i])
|
||||||
return (FALSE);
|
return FALSE;
|
||||||
|
ludp->lud_attrs_dups++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ludp->lud_dn) {
|
if(ludp->lud_dn) {
|
||||||
|
@ -619,11 +622,6 @@ static int _ldap_url_parse2 (const struct connectdata *conn, LDAPURLDesc *ludp)
|
||||||
|
|
||||||
for(i = 0; ludp->lud_attrs[i]; i++)
|
for(i = 0; ludp->lud_attrs[i]; i++)
|
||||||
LDAP_TRACE (("attr[%d] '%s'\n", i, ludp->lud_attrs[i]));
|
LDAP_TRACE (("attr[%d] '%s'\n", i, ludp->lud_attrs[i]));
|
||||||
|
|
||||||
/* allocate the array to receive the unescaped attributes */
|
|
||||||
ludp->lud_attrs_dup = calloc(i+1, sizeof(char*));
|
|
||||||
if(!ludp->lud_attrs_dup)
|
|
||||||
return LDAP_NO_MEMORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
p = q;
|
p = q;
|
||||||
|
@ -699,15 +697,8 @@ static void _ldap_free_urldesc (LDAPURLDesc *ludp)
|
||||||
free(ludp->lud_filter);
|
free(ludp->lud_filter);
|
||||||
|
|
||||||
if(ludp->lud_attrs) {
|
if(ludp->lud_attrs) {
|
||||||
if(ludp->lud_attrs_dup) {
|
for(i = 0; i < ludp->lud_attrs_dups; i++)
|
||||||
for(i = 0; ludp->lud_attrs_dup[i]; i++) {
|
free(ludp->lud_attrs[i]);
|
||||||
if(!ludp->lud_attrs_dup[i])
|
|
||||||
/* abort loop on first NULL */
|
|
||||||
break;
|
|
||||||
free(ludp->lud_attrs_dup[i]);
|
|
||||||
}
|
|
||||||
free(ludp->lud_attrs_dup);
|
|
||||||
}
|
|
||||||
free(ludp->lud_attrs);
|
free(ludp->lud_attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче