From: Julio Sánchez Fernández Date: Fri, 23 Jul 1999 20:36:11 +0000 (+0000) Subject: ldap_url_parse was fundamentally broken. It would quit before X-Git-Tag: OPENLDAP_REL_ENG_2_BP~51 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=9cdd2c2037a73ef34959047dfab7e351de49c92f;p=openldap 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... --- diff --git a/libraries/libldap/url.c b/libraries/libldap/url.c index aa5b27645f..b0420043d4 100644 --- a/libraries/libldap/url.c +++ b/libraries/libldap/url.c @@ -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, '?' );