Skip to content
Snippets Groups Projects
Commit 9cdd2c20 authored by Julio Sánchez Fernández's avatar Julio Sánchez Fernández
Browse files

ldap_url_parse was fundamentally broken. It would quit before

time, skipping the filter, for instance.  Also, we were parsing
twice the scope and the filter.  I think this change is right,
but could use more eyeballs...
parent 646d854c
No related branches found
No related tags found
No related merge requests found
......@@ -285,8 +285,10 @@ ldap_url_parse( LDAP_CONST char *url_in, LDAPURLDesc **ludpp )
p = q;
q = strchr( p, '?' );
if( q == NULL ) {
/* no '?' */
if( q != NULL ) {
*q++ = '\0';
}
if( *p != '\0' ) {
hex_unescape( p );
ludp->lud_attrs = ldap_str2charray( p, "," );
......@@ -295,40 +297,23 @@ ldap_url_parse( LDAP_CONST char *url_in, LDAPURLDesc **ludpp )
ldap_free_urldesc( ludp );
return LDAP_URL_ERR_BADATTRS;
}
}
if ( q == NULL ) {
/* no '?' */
LDAP_FREE( url );
*ludpp = ludp;
return LDAP_URL_SUCCESS;
}
*q++ = '\0';
hex_unescape( p );
ludp->lud_attrs = ldap_str2charray( p, "," );
/* scan forward for '?' that may marks end of scope */
p = q;
q = strchr( p, '?' );
if( q == NULL ) {
/* no '?' */
hex_unescape( p );
ludp->lud_scope = str2scope( p );
if( ludp->lud_scope == -1 ) {
LDAP_FREE( url );
ldap_free_urldesc( ludp );
return LDAP_URL_ERR_BADSCOPE;
}
LDAP_FREE( url );
*ludpp = ludp;
return LDAP_URL_SUCCESS;
if( q != NULL ) {
*q++ = '\0';
}
*q++ = '\0';
hex_unescape( p );
if( *p != '\0' ) {
hex_unescape( p );
ludp->lud_scope = str2scope( p );
if( ludp->lud_scope == -1 ) {
......@@ -336,7 +321,9 @@ ldap_url_parse( LDAP_CONST char *url_in, LDAPURLDesc **ludpp )
ldap_free_urldesc( ludp );
return LDAP_URL_ERR_BADSCOPE;
}
}
if ( q == NULL ) {
/* no '?' */
LDAP_FREE( url );
*ludpp = ludp;
return LDAP_URL_SUCCESS;
......@@ -346,8 +333,10 @@ ldap_url_parse( LDAP_CONST char *url_in, LDAPURLDesc **ludpp )
p = q;
q = strchr( p, '?' );
if( q != NULL ) {
*q++ = '\0';
}
if( *p != '\0' ) {
/* no '?' */
hex_unescape( p );
if( ! *p ) {
......@@ -364,25 +353,14 @@ ldap_url_parse( LDAP_CONST char *url_in, LDAPURLDesc **ludpp )
ldap_free_urldesc( ludp );
return LDAP_URL_ERR_MEM;
}
}
if ( q == NULL ) {
/* no '?' */
LDAP_FREE( url );
*ludpp = ludp;
return LDAP_URL_SUCCESS;
}
*q++ = '\0';
hex_unescape( p );
if( *p != '\0' ) {
ludp->lud_filter = LDAP_STRDUP( p );
if( ludp->lud_filter == NULL ) {
LDAP_FREE( url );
ldap_free_urldesc( ludp );
return LDAP_URL_ERR_MEM;
}
}
/* scan forward for '?' that may marks end of extensions */
p = q;
q = strchr( p, '?' );
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment