--- servers/slapd/saslauthz.c 2004/04/27 09:23:40 1.88.2.14 +++ servers/slapd/saslauthz.c 2004/06/04 03:39:43 1.88.2.16 @@ -1,4 +1,4 @@ -/* $OpenLDAP: pkg/ldap/servers/slapd/saslauthz.c,v 1.88.2.13 2004/04/13 22:35:20 kurt Exp $ */ +/* $OpenLDAP: pkg/ldap/servers/slapd/saslauthz.c,v 1.88.2.15 2004/05/13 20:55:02 ando Exp $ */ /* This work is part of OpenLDAP Software . * * Copyright 1998-2004 The OpenLDAP Foundation. @@ -211,35 +211,36 @@ static int slap_parseURI( Operation *op, bv.bv_val++; if ( !strncasecmp( bv.bv_val, "exact:", sizeof( "exact:" ) - 1 ) ) { - bv.bv_val += sizeof( "exact" ) - 1; + bv.bv_val += sizeof( "exact:" ) - 1; *scope = LDAP_X_SCOPE_EXACT; } else if ( !strncasecmp( bv.bv_val, "regex:", sizeof( "regex:" ) - 1 ) ) { - bv.bv_val += sizeof( "regex" ) - 1; + bv.bv_val += sizeof( "regex:" ) - 1; *scope = LDAP_X_SCOPE_REGEX; } else if ( !strncasecmp( bv.bv_val, "children:", sizeof( "chldren:" ) - 1 ) ) { - bv.bv_val += sizeof( "children" ) - 1; + bv.bv_val += sizeof( "children:" ) - 1; *scope = LDAP_X_SCOPE_CHILDREN; } else if ( !strncasecmp( bv.bv_val, "subtree:", sizeof( "subtree:" ) - 1 ) ) { - bv.bv_val += sizeof( "subtree" ) - 1; + bv.bv_val += sizeof( "subtree:" ) - 1; *scope = LDAP_X_SCOPE_SUBTREE; } else if ( !strncasecmp( bv.bv_val, "onelevel:", sizeof( "onelevel:" ) - 1 ) ) { - bv.bv_val += sizeof( "onelevel" ) - 1; + bv.bv_val += sizeof( "onelevel:" ) - 1; *scope = LDAP_X_SCOPE_ONELEVEL; } else { return LDAP_PROTOCOL_ERROR; } + } else { + if ( bv.bv_val[ 0 ] != ':' ) { + return LDAP_PROTOCOL_ERROR; + } + *scope = LDAP_X_SCOPE_EXACT; + bv.bv_val++; } - if ( bv.bv_val[ 0 ] != ':' ) { - return LDAP_PROTOCOL_ERROR; - } - bv.bv_val++; - bv.bv_val += strspn( bv.bv_val, " " ); /* jump here in case no type specification was present * and uir was not an URI... HEADS-UP: assuming EXACT */ @@ -632,9 +633,7 @@ int slap_sasl_match( Operation *opx, str &op.ors_filterstr ); if( rc != LDAP_SUCCESS ) goto CONCLUDED; - /* Massive shortcut: search scope == base */ switch ( op.oq_search.rs_scope ) { - case LDAP_SCOPE_BASE: case LDAP_X_SCOPE_EXACT: exact_match: if ( dn_match( &op.o_req_ndn, assertDN ) ) { @@ -885,9 +884,7 @@ void slap_sasl2dn( Operation *opx, /* Must do an internal search */ op.o_bd = select_backend( &op.o_req_ndn, 0, 1 ); - /* Massive shortcut: search scope == base */ switch ( op.oq_search.rs_scope ) { - case LDAP_SCOPE_BASE: case LDAP_X_SCOPE_EXACT: *sasldn = op.o_req_ndn; op.o_req_ndn.bv_len = 0; @@ -901,6 +898,7 @@ void slap_sasl2dn( Operation *opx, /* correctly parsed, but illegal */ goto FINISHED; + case LDAP_SCOPE_BASE: case LDAP_SCOPE_ONELEVEL: case LDAP_SCOPE_SUBTREE: #ifdef LDAP_SCOPE_SUBORDINATE