From 9cdd2c2037a73ef34959047dfab7e351de49c92f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Julio=20S=C3=A1nchez=20Fern=C3=A1ndez?= Date: Fri, 23 Jul 1999 20:36:11 +0000 Subject: [PATCH] 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... --- libraries/libldap/url.c | 60 +++++++++++++---------------------------- 1 file changed, 19 insertions(+), 41 deletions(-) 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, '?' ); -- 2.39.5