time_t stoptime;
int manageDSAit;
int tentries = 0;
+ int admincheck = 0;
IdScopes isc;
MDB_cursor *mci, *mcd;
ww_ctx wwctx;
rs->sr_err = search_candidates( op, rs, base,
&isc, mci, candidates, stack );
- if ( rs->sr_err == LDAP_ADMINLIMIT_EXCEEDED )
- goto adminlimit;
+ if ( rs->sr_err == LDAP_ADMINLIMIT_EXCEEDED ) {
+adminlimit:
+ rs->sr_err = LDAP_ADMINLIMIT_EXCEEDED;
+ send_ldap_result( op, rs );
+ rs->sr_err = LDAP_SUCCESS;
+ goto done;
+ }
ncand = MDB_IDL_N( candidates );
if ( !base->e_id || ncand == NOID ) {
op->ors_limit->lms_s_unchecked != -1 &&
ncand > (unsigned) op->ors_limit->lms_s_unchecked )
{
- rs->sr_err = LDAP_ADMINLIMIT_EXCEEDED;
-adminlimit:
- send_ldap_result( op, rs );
- rs->sr_err = LDAP_SUCCESS;
- goto done;
+ admincheck = 1;
}
if ( op->ors_limit == NULL /* isroot == TRUE */ ||
send_ldap_result( op, rs );
goto done;
}
+
+ if ( admincheck )
+ goto adminlimit;
+
id = mdb_idl_first( candidates, &cursor );
if ( id == NOID ) {
Debug( LDAP_DEBUG_TRACE,
if ( nsubs < ncand ) {
int rc;
/* Do scope-based search */
+ if ( nsubs > (unsigned) op->ors_limit->lms_s_unchecked )
+ goto adminlimit;
/* if any alias scopes were set, save them */
if (scopes[0].mid > 1) {
id = isc.id;
cscope = 0;
} else {
+ if ( admincheck )
+ goto adminlimit;
id = mdb_idl_first( candidates, &cursor );
}