/* search.c - ldbm backend search function */
/* $OpenLDAP$ */
/*
- * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
int slimit,
int tlimit,
Filter *filter,
- const char *filterstr,
+ struct berval *filterstr,
AttributeName *attrs,
int attrsonly )
{
ID_BLOCK *candidates;
ID id, cursor;
Entry *e;
- struct berval **v2refs = NULL;
+ BVarray v2refs = NULL;
Entry *matched = NULL;
struct berval realbase = { 0, NULL };
int nentries = 0;
}
if ( e == NULL ) {
- struct berval *matched_dn = NULL;
- struct berval **refs = NULL;
+ struct berval matched_dn = { 0, NULL };
+ BVarray refs = NULL;
if ( matched != NULL ) {
- struct berval **erefs;
- matched_dn = ber_bvdup( &matched->e_name );
+ BVarray erefs;
+ ber_dupbv( &matched_dn, &matched->e_name );
erefs = is_entry_referral( matched )
? get_entry_referrals( be, conn, op, matched )
cache_return_entry_r( &li->li_cache, matched );
if( erefs ) {
- refs = referral_rewrite( erefs, matched_dn,
+ refs = referral_rewrite( erefs, &matched_dn,
base, scope );
- ber_bvecfree( erefs );
+ bvarray_free( erefs );
}
} else {
NULL, base, scope );
}
- send_ldap_result( conn, op, err,
- matched_dn ? matched_dn->bv_val : NULL,
+ send_ldap_result( conn, op, err, matched_dn.bv_val,
text, refs, NULL );
- ber_bvecfree( refs );
- ber_bvfree( matched_dn );
+ bvarray_free( refs );
+ ber_memfree( matched_dn.bv_val );
return 1;
}
if (!manageDSAit && is_entry_referral( e ) ) {
/* entry is a referral, don't allow add */
- struct berval *matched_dn = ber_bvdup( &e->e_name );
- struct berval **erefs = get_entry_referrals( be,
- conn, op, e );
- struct berval **refs = NULL;
+ struct berval matched_dn;
+ BVarray erefs;
+ BVarray refs;
+
+ ber_dupbv( &matched_dn, &e->e_name );
+ erefs = get_entry_referrals( be, conn, op, e );
+ refs = NULL;
cache_return_entry_r( &li->li_cache, e );
#endif
if( erefs ) {
- refs = referral_rewrite( erefs, matched_dn,
+ refs = referral_rewrite( erefs, &matched_dn,
base, scope );
- ber_bvecfree( erefs );
+ bvarray_free( erefs );
}
if( refs ) {
send_ldap_result( conn, op, LDAP_REFERRAL,
- matched_dn->bv_val, NULL, refs, NULL );
- ber_bvecfree( refs );
+ matched_dn.bv_val, NULL, refs, NULL );
+ bvarray_free( refs );
} else {
send_ldap_result( conn, op, LDAP_OTHER,
- matched_dn->bv_val,
+ matched_dn.bv_val,
"bad referral object", NULL, NULL );
}
- ber_bvfree( matched_dn );
+ ber_memfree( matched_dn.bv_val );
return 1;
}
}
if( scopeok ) {
- struct berval **erefs = get_entry_referrals(
+ BVarray erefs = get_entry_referrals(
be, conn, op, e );
- struct berval **refs = referral_rewrite( erefs,
+ BVarray refs = referral_rewrite( erefs,
&e->e_name, NULL,
scope == LDAP_SCOPE_SUBTREE
? LDAP_SCOPE_SUBTREE
send_search_reference( be, conn, op,
e, refs, NULL, &v2refs );
- ber_bvecfree( refs );
+ bvarray_free( refs );
} else {
#ifdef NEW_LOGGING
if( candidates != NULL )
idl_free( candidates );
- if( v2refs ) ber_bvecfree( v2refs );
+ if( v2refs ) bvarray_free( v2refs );
if( realbase.bv_val ) free( realbase.bv_val );
return rc;