int
-ldap_url_parse( LDAP_CONST char *url_in, LDAPURLDesc **ludpp )
+ldap_url_parse_ext( LDAP_CONST char *url_in, LDAPURLDesc **ludpp )
{
/*
* Pick apart the pieces of an LDAP URL.
const char *url_tmp;
char *url;
- if( url_in == NULL && ludpp == NULL ) {
+ if( url_in == NULL || ludpp == NULL ) {
return LDAP_URL_ERR_PARAM;
}
* because a call to LDAP_INT_GLOBAL_OPT() will try to allocate
* the options and cause infinite recursion
*/
- Debug( LDAP_DEBUG_TRACE, "ldap_url_parse(%s)\n", url_in, 0, 0 );
+ Debug( LDAP_DEBUG_TRACE, "ldap_url_parse_ext(%s)\n", url_in, 0, 0 );
#endif
*ludpp = NULL; /* pessimistic */
ludp->lud_dn = NULL;
ludp->lud_attrs = NULL;
ludp->lud_filter = NULL;
- ludp->lud_scope = LDAP_SCOPE_BASE;
+ ludp->lud_scope = LDAP_SCOPE_DEFAULT;
ludp->lud_filter = NULL;
+ ludp->lud_exts = NULL;
ludp->lud_scheme = LDAP_STRDUP( scheme );
for( i=0; ludp->lud_exts[i] != NULL; i++ ) {
ldap_pvt_hex_unescape( ludp->lud_exts[i] );
+
+ if( *ludp->lud_exts[i] == '!' ) {
+ /* count the number of critical extensions */
+ ludp->lud_crit_exts++;
+ }
}
if( i == 0 ) {
/* must have 1 or more */
- ldap_charray_free( ludp->lud_exts );
LDAP_FREE( url );
ldap_free_urldesc( ludp );
return LDAP_URL_ERR_BADEXTS;
return LDAP_URL_SUCCESS;
}
+int
+ldap_url_parse( LDAP_CONST char *url_in, LDAPURLDesc **ludpp )
+{
+ int rc = ldap_url_parse_ext( url_in, ludpp );
+
+ if( rc != LDAP_URL_SUCCESS ) {
+ return rc;
+ }
+
+ if ((*ludpp)->lud_scope == LDAP_SCOPE_DEFAULT) {
+ (*ludpp)->lud_scope = LDAP_SCOPE_BASE;
+ }
+
+ if ((*ludpp)->lud_host != NULL && *(*ludpp)->lud_host == '\0') {
+ LDAP_FREE( (*ludpp)->lud_host );
+ (*ludpp)->lud_host = NULL;
+ }
+
+ return rc;
+}
+
LDAPURLDesc *
ldap_url_dup ( LDAPURLDesc *ludp )
{
return( -1 );
}
+ if( ludp->lud_crit_exts ) {
+ /* we don't support any extension (yet) */
+ ld->ld_errno = LDAP_NOT_SUPPORTED;
+ return( -1 );
+ }
+
ber = ldap_build_search_req( ld, ludp->lud_dn, ludp->lud_scope,
ludp->lud_filter, ludp->lud_attrs, attrsonly, NULL, NULL,
-1, -1 );