From c20ef53129fb0e24e2c3deb4d35aa2e897be120b Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Tue, 17 Jan 2006 20:37:19 +0000 Subject: [PATCH] Ready for release --- CHANGES | 2 +- build/version.var | 8 ++++---- servers/slapd/add.c | 6 +++--- servers/slapd/back-ldap/chain.c | 21 ++++++++++++++++++++- servers/slapd/bind.c | 5 +++-- servers/slapd/compare.c | 5 +++-- servers/slapd/delete.c | 9 +++------ servers/slapd/modify.c | 8 +++----- servers/slapd/modrdn.c | 8 +++----- servers/slapd/search.c | 5 +++-- 10 files changed, 46 insertions(+), 31 deletions(-) diff --git a/CHANGES b/CHANGES index 83f21cc515..cfc10f8492 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,6 @@ OpenLDAP 2.3 Change Log -OpenLDAP 2.3.18 Engineering +OpenLDAP 2.3.18 Release Fixed slapd syncrepl variable used before set bug (ITS#4331) Updated slapd-meta retry capabiltiies (ITS#4328) Fixed slapo-pcache attrsets issues (ITS#4316) diff --git a/build/version.var b/build/version.var index c107677653..edbf26f859 100644 --- a/build/version.var +++ b/build/version.var @@ -15,9 +15,9 @@ ol_package=OpenLDAP ol_major=2 ol_minor=3 -ol_patch=X -ol_api_inc=20317 +ol_patch=18 +ol_api_inc=20318 ol_api_current=2 -ol_api_revision=5 +ol_api_revision=6 ol_api_age=2 -ol_release_date="2006/01/10" +ol_release_date="2006/01/17" diff --git a/servers/slapd/add.c b/servers/slapd/add.c index bc1889d4e0..16e1656553 100644 --- a/servers/slapd/add.c +++ b/servers/slapd/add.c @@ -217,7 +217,7 @@ fe_op_add( Operation *op, SlapReply *rs ) Modifications *modlist = op->ora_modlist; Modifications **modtail = &modlist; int rc = 0; - BackendDB *op_be; + BackendDB *op_be, *bd = op->o_bd; char textbuf[ SLAP_TEXT_BUFLEN ]; size_t textlen = sizeof( textbuf ); @@ -230,14 +230,13 @@ fe_op_add( Operation *op, SlapReply *rs ) */ op->o_bd = select_backend( &op->ora_e->e_nname, manageDSAit, 1 ); if ( op->o_bd == NULL ) { + op->o_bd = bd; rs->sr_ref = referral_rewrite( default_referral, NULL, &op->ora_e->e_name, LDAP_SCOPE_DEFAULT ); if ( !rs->sr_ref ) rs->sr_ref = default_referral; if ( rs->sr_ref ) { rs->sr_err = LDAP_REFERRAL; - op->o_bd = frontendDB; send_ldap_result( op, rs ); - op->o_bd = NULL; if ( rs->sr_ref != default_referral ) { ber_bvarray_free( rs->sr_ref ); @@ -379,6 +378,7 @@ fe_op_add( Operation *op, SlapReply *rs ) } done:; + op->o_bd = bd; return rc; } diff --git a/servers/slapd/back-ldap/chain.c b/servers/slapd/back-ldap/chain.c index 29ee510a9e..5b7816584e 100644 --- a/servers/slapd/back-ldap/chain.c +++ b/servers/slapd/back-ldap/chain.c @@ -748,7 +748,16 @@ cleanup:; } } else { - rc = ldap_chain_op( op, rs, lback->bi_op_search, ref ); + /* we might get here before any database actually + * performed a search; in those cases, we need + * to check limits, to make sure safe defaults + * are in place */ + if ( op->ors_limit != NULL || limits_check( op, rs ) == 0 ) { + rc = ldap_chain_op( op, rs, lback->bi_op_search, ref ); + + } else { + rc = SLAP_CB_CONTINUE; + } } break; @@ -1491,6 +1500,9 @@ static int ldap_chain_db_open( BackendDB *be ) { + slap_overinst *on = (slap_overinst *) be->bd_info; + ldap_chain_t *lc = (ldap_chain_t *)on->on_bi.bi_private; + #ifdef LDAP_CONTROL_X_CHAINING_BEHAVIOR int rc = 0; @@ -1500,6 +1512,13 @@ ldap_chain_db_open( } #endif /* LDAP_CONTROL_X_CHAINING_BEHAVIOR */ + if ( lc->lc_common_li == NULL ) { + void *be_private = be->be_private; + ldap_chain_db_init_common( be ); + lc->lc_common_li = lc->lc_cfg_li = (ldapinfo_t *)be->be_private; + be->be_private = be_private; + } + return ldap_chain_db_func( be, db_open ); } diff --git a/servers/slapd/bind.c b/servers/slapd/bind.c index e9eee9cace..8c261489e8 100644 --- a/servers/slapd/bind.c +++ b/servers/slapd/bind.c @@ -223,6 +223,7 @@ int fe_op_bind( Operation *op, SlapReply *rs ) { struct berval mech = op->orb_tmp_mech; + BackendDB *bd = op->o_bd; /* check for inappropriate controls */ if( get_manageDSAit( op ) == SLAP_CONTROL_CRITICAL ) { @@ -387,9 +388,8 @@ fe_op_bind( Operation *op, SlapReply *rs ) /* don't return referral for bind requests */ /* noSuchObject is not allowed to be returned by bind */ rs->sr_err = LDAP_INVALID_CREDENTIALS; - op->o_bd = frontendDB; + op->o_bd = bd; send_ldap_result( op, rs ); - op->o_bd = NULL; goto cleanup; } @@ -452,6 +452,7 @@ fe_op_bind( Operation *op, SlapReply *rs ) } cleanup:; + op->o_bd = bd; return rs->sr_err; } diff --git a/servers/slapd/compare.c b/servers/slapd/compare.c index 2dd0b169eb..41034b732d 100644 --- a/servers/slapd/compare.c +++ b/servers/slapd/compare.c @@ -138,6 +138,7 @@ fe_op_compare( Operation *op, SlapReply *rs ) Entry *entry = NULL; int manageDSAit; AttributeAssertion ava = *op->orc_ava; + BackendDB *bd = op->o_bd; if( strcasecmp( op->o_req_ndn.bv_val, LDAP_ROOT_DSE ) == 0 ) { Debug( LDAP_DEBUG_ARGS, @@ -214,9 +215,8 @@ fe_op_compare( Operation *op, SlapReply *rs ) rs->sr_err = LDAP_REFERRAL; if (!rs->sr_ref) rs->sr_ref = default_referral; - op->o_bd = frontendDB; + op->o_bd = bd; send_ldap_result( op, rs ); - op->o_bd = NULL; if (rs->sr_ref != default_referral) ber_bvarray_free( rs->sr_ref ); rs->sr_err = 0; @@ -369,6 +369,7 @@ fe_op_compare( Operation *op, SlapReply *rs ) } cleanup:; + op->o_bd = bd; return rs->sr_err; } diff --git a/servers/slapd/delete.c b/servers/slapd/delete.c index 544ab964af..a6a6a9708f 100644 --- a/servers/slapd/delete.c +++ b/servers/slapd/delete.c @@ -101,7 +101,7 @@ fe_op_delete( Operation *op, SlapReply *rs ) { struct berval pdn = BER_BVNULL; int manageDSAit; - BackendDB *op_be; + BackendDB *op_be, *bd = op->o_bd; manageDSAit = get_manageDSAit( op ); @@ -112,23 +112,19 @@ fe_op_delete( Operation *op, SlapReply *rs ) */ op->o_bd = select_backend( &op->o_req_ndn, manageDSAit, 1 ); if ( op->o_bd == NULL ) { + op->o_bd = bd; rs->sr_ref = referral_rewrite( default_referral, NULL, &op->o_req_dn, LDAP_SCOPE_DEFAULT ); if (!rs->sr_ref) rs->sr_ref = default_referral; if ( rs->sr_ref != NULL ) { rs->sr_err = LDAP_REFERRAL; - - op->o_bd = frontendDB; send_ldap_result( op, rs ); - op->o_bd = NULL; if (rs->sr_ref != default_referral) ber_bvarray_free( rs->sr_ref ); } else { - op->o_bd = frontendDB; send_ldap_error( op, rs, LDAP_UNWILLING_TO_PERFORM, "no global superior knowledge" ); - op->o_bd = NULL; } goto cleanup; } @@ -243,5 +239,6 @@ fe_op_delete( Operation *op, SlapReply *rs ) } cleanup:; + op->o_bd = bd; return rs->sr_err; } diff --git a/servers/slapd/modify.c b/servers/slapd/modify.c index d94f4d0d6d..6d1aa6f67f 100644 --- a/servers/slapd/modify.c +++ b/servers/slapd/modify.c @@ -216,7 +216,7 @@ fe_op_modify( Operation *op, SlapReply *rs ) int manageDSAit; Modifications *modlist = op->orm_modlist; int increment = op->orm_increment; - BackendDB *op_be; + BackendDB *op_be, *bd = op->o_bd; char textbuf[ SLAP_TEXT_BUFLEN ]; size_t textlen = sizeof( textbuf ); @@ -304,22 +304,19 @@ fe_op_modify( Operation *op, SlapReply *rs ) */ op->o_bd = select_backend( &op->o_req_ndn, manageDSAit, 1 ); if ( op->o_bd == NULL ) { + op->o_bd = bd; rs->sr_ref = referral_rewrite( default_referral, NULL, &op->o_req_dn, LDAP_SCOPE_DEFAULT ); if (!rs->sr_ref) rs->sr_ref = default_referral; if (rs->sr_ref != NULL ) { rs->sr_err = LDAP_REFERRAL; - op->o_bd = frontendDB; send_ldap_result( op, rs ); - op->o_bd = NULL; if (rs->sr_ref != default_referral) ber_bvarray_free( rs->sr_ref ); } else { - op->o_bd = frontendDB; send_ldap_error( op, rs, LDAP_UNWILLING_TO_PERFORM, "no global superior knowledge" ); - op->o_bd = NULL; } goto cleanup; } @@ -429,6 +426,7 @@ fe_op_modify( Operation *op, SlapReply *rs ) } cleanup:; + op->o_bd = bd; return rs->sr_err; } diff --git a/servers/slapd/modrdn.c b/servers/slapd/modrdn.c index 3288f710bd..3284a5f0f0 100644 --- a/servers/slapd/modrdn.c +++ b/servers/slapd/modrdn.c @@ -198,7 +198,7 @@ fe_op_modrdn( Operation *op, SlapReply *rs ) Backend *newSuperior_be = NULL; int manageDSAit; struct berval pdn = BER_BVNULL; - BackendDB *op_be; + BackendDB *op_be, *bd = op->o_bd; if( op->o_req_ndn.bv_len == 0 ) { Debug( LDAP_DEBUG_ANY, "do_modrdn: root dse!\n", 0, 0, 0 ); @@ -228,22 +228,19 @@ fe_op_modrdn( Operation *op, SlapReply *rs ) */ op->o_bd = select_backend( &op->o_req_ndn, manageDSAit, 1 ); if ( op->o_bd == NULL ) { + op->o_bd = bd; rs->sr_ref = referral_rewrite( default_referral, NULL, &op->o_req_dn, LDAP_SCOPE_DEFAULT ); if (!rs->sr_ref) rs->sr_ref = default_referral; if ( rs->sr_ref != NULL ) { rs->sr_err = LDAP_REFERRAL; - op->o_bd = frontendDB; send_ldap_result( op, rs ); - op->o_bd = NULL; if (rs->sr_ref != default_referral) ber_bvarray_free( rs->sr_ref ); } else { - op->o_bd = frontendDB; send_ldap_error( op, rs, LDAP_UNWILLING_TO_PERFORM, "no global superior knowledge" ); - op->o_bd = NULL; } goto cleanup; } @@ -371,6 +368,7 @@ fe_op_modrdn( Operation *op, SlapReply *rs ) } cleanup:; + op->o_bd = bd; return rs->sr_err; } diff --git a/servers/slapd/search.c b/servers/slapd/search.c index 8604281df6..6942cc21db 100644 --- a/servers/slapd/search.c +++ b/servers/slapd/search.c @@ -241,6 +241,7 @@ fe_op_search( Operation *op, SlapReply *rs ) { int manageDSAit; int be_manageDSAit; + BackendDB *bd = op->o_bd; manageDSAit = get_manageDSAit( op ); @@ -328,9 +329,8 @@ fe_op_search( Operation *op, SlapReply *rs ) if (!rs->sr_ref) rs->sr_ref = default_referral; rs->sr_err = LDAP_REFERRAL; - op->o_bd = frontendDB; + op->o_bd = bd; send_ldap_result( op, rs ); - op->o_bd = NULL; if (rs->sr_ref != default_referral) ber_bvarray_free( rs->sr_ref ); @@ -362,6 +362,7 @@ fe_op_search( Operation *op, SlapReply *rs ) } return_results:; + op->o_bd = bd; return rs->sr_err; } -- 2.39.5