From: Pierangelo Masarati Date: Mon, 12 Nov 2001 17:12:43 +0000 (+0000) Subject: Fixes ITS#1433 X-Git-Tag: LDBM_PRE_GIANT_RWLOCK~880 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=afd0037eda581f6a4af250e9bdf4d743e772fbf5;p=openldap Fixes ITS#1433 --- diff --git a/servers/slapd/back-bdb/search.c b/servers/slapd/back-bdb/search.c index e8ac773f35..5b32d71135 100644 --- a/servers/slapd/back-bdb/search.c +++ b/servers/slapd/back-bdb/search.c @@ -163,60 +163,64 @@ bdb_search( * the request is not honored only because of time/size constraints */ /* if no time limit requested, use soft limit (unless root!) */ - if ( tlimit <= 0 ) { - if ( isroot ) { + if ( isroot ) { + if ( tlimit == 0 ) { tlimit = -1; /* allow root to set no limit */ - } else { - tlimit = limit->lms_t_soft; } - /* if requested limit higher than hard limit, abort */ - } else if ( tlimit > limit->lms_t_hard ) { - /* no hard limit means use soft instead */ - if ( limit->lms_t_hard == 0 ) { + if ( slimit == 0 ) { + slimit = -1; + } + + } else { + /* if no limit is required, use soft limit */ + if ( tlimit <= 0 ) { tlimit = limit->lms_t_soft; - /* positive hard limit means abort */ - } else if ( limit->lms_t_hard > 0 ) { - send_search_result( conn, op, - LDAP_UNWILLING_TO_PERFORM, - NULL, NULL, NULL, NULL, 0 ); - rc = 0; - goto done; - } + /* if requested limit higher than hard limit, abort */ + } else if ( tlimit > limit->lms_t_hard ) { + /* no hard limit means use soft instead */ + if ( limit->lms_t_hard == 0 ) { + tlimit = limit->lms_t_soft; + + /* positive hard limit means abort */ + } else if ( limit->lms_t_hard > 0 ) { + send_search_result( conn, op, + LDAP_UNWILLING_TO_PERFORM, + NULL, NULL, NULL, NULL, 0 ); + rc = 0; + goto done; + } - /* negative hard limit means no limit */ - } - - /* compute it anyway; root does not use it */ - stoptime = op->o_time + tlimit; - - /* if no size limit requested, use soft limit (unless root!) */ - if ( slimit == 0 ) { - if ( isroot ) { - slimit = -1; /* allow root to set no limit */ - } else { - slimit = limit->lms_s_soft; + /* negative hard limit means no limit */ } - - /* if requested limit higher than hard limit, abort */ - } else if ( slimit > limit->lms_s_hard ) { - /* no hard limit means use soft instead */ - if ( limit->lms_s_hard == 0 ) { + + /* if no limit is required, use soft limit */ + if ( slimit <= 0 ) { slimit = limit->lms_s_soft; - /* positive hard limit means abort */ - } else if ( limit->lms_s_hard > 0 ) { - send_search_result( conn, op, - LDAP_UNWILLING_TO_PERFORM, - NULL, NULL, NULL, NULL, 0 ); - rc = 0; - goto done; + /* if requested limit higher than hard limit, abort */ + } else if ( slimit > limit->lms_s_hard ) { + /* no hard limit means use soft instead */ + if ( limit->lms_s_hard == 0 ) { + slimit = limit->lms_s_soft; + + /* positive hard limit means abort */ + } else if ( limit->lms_s_hard > 0 ) { + send_search_result( conn, op, + LDAP_UNWILLING_TO_PERFORM, + NULL, NULL, NULL, NULL, 0 ); + rc = 0; + goto done; + } + + /* negative hard limit means no limit */ } - - /* negative hard limit means no limit */ } + /* compute it anyway; root does not use it */ + stoptime = op->o_time + tlimit; + /* select candidates */ if ( scope == LDAP_SCOPE_BASE ) { rc = base_candidate( be, e, candidates ); diff --git a/servers/slapd/back-ldbm/search.c b/servers/slapd/back-ldbm/search.c index ef0b4ab268..1b95248dd6 100644 --- a/servers/slapd/back-ldbm/search.c +++ b/servers/slapd/back-ldbm/search.c @@ -223,59 +223,65 @@ searchit: } } - /* if no time limit requested, use soft limit (unless root!) */ - if ( tlimit <= 0 ) { - if ( isroot ) { - tlimit = -1; /* allow root to set no limit */ - } else { - tlimit = limit->lms_t_soft; - } - - /* if requested limit higher than hard limit, abort */ - } else if ( tlimit > limit->lms_t_hard ) { - /* no hard limit means use soft instead */ - if ( limit->lms_t_hard == 0 ) { - tlimit = limit->lms_t_soft; - - /* positive hard limit means abort */ - } else if ( limit->lms_t_hard > 0 ) { - send_search_result( conn, op, LDAP_UNWILLING_TO_PERFORM, - NULL, NULL, NULL, NULL, 0 ); - rc = 0; - goto done; + /* if root an no specific limit is required, allow unlimited search */ + if ( isroot ) { + if ( tlimit == 0 ) { + tlimit = -1; } - /* negative hard limit means no limit */ - } + if ( slimit == 0 ) { + slimit = -1; + } - /* compute it anyway; root does not use it */ - stoptime = op->o_time + tlimit; + } else { + /* if no limit is required, use soft limit */ + if ( tlimit <= 0 ) { + tlimit = limit->lms_t_soft; + + /* if requested limit higher than hard limit, abort */ + } else if ( tlimit > limit->lms_t_hard ) { + /* no hard limit means use soft instead */ + if ( limit->lms_t_hard == 0 ) { + tlimit = limit->lms_t_soft; + + /* positive hard limit means abort */ + } else if ( limit->lms_t_hard > 0 ) { + send_search_result( conn, op, + LDAP_UNWILLING_TO_PERFORM, + NULL, NULL, NULL, NULL, 0 ); + rc = 0; + goto done; + } - /* if no size limit requested, use soft limit (unless root!) */ - if ( slimit == 0 ) { - if ( isroot ) { - slimit = -1; /* allow root to set no limit */ - } else { - slimit = limit->lms_s_soft; + /* negative hard limit means no limit */ } - - /* if requested limit higher than hard limit, abort */ - } else if ( slimit > limit->lms_s_hard ) { - /* no hard limit means use soft instead */ - if ( limit->lms_s_hard == 0 ) { + + /* if no limit is required, use soft limit */ + if ( slimit <= 0 ) { slimit = limit->lms_s_soft; - /* positive hard limit means abort */ - } else if ( limit->lms_s_hard > 0 ) { - send_search_result( conn, op, LDAP_UNWILLING_TO_PERFORM, - NULL, NULL, NULL, NULL, 0 ); - rc = 0; - goto done; - } + /* if requested limit higher than hard limit, abort */ + } else if ( slimit > limit->lms_s_hard ) { + /* no hard limit means use soft instead */ + if ( limit->lms_s_hard == 0 ) { + slimit = limit->lms_s_soft; + + /* positive hard limit means abort */ + } else if ( limit->lms_s_hard > 0 ) { + send_search_result( conn, op, + LDAP_UNWILLING_TO_PERFORM, + NULL, NULL, NULL, NULL, 0 ); + rc = 0; + goto done; + } - /* negative hard limit means no limit */ + /* negative hard limit means no limit */ + } } + /* compute it anyway; root does not use it */ + stoptime = op->o_time + tlimit; + for ( id = idl_firstid( candidates, &cursor ); id != NOID; id = idl_nextid( candidates, &cursor ) ) {