From 658dc294d7db6206bb30f079781c793fbe107f4b Mon Sep 17 00:00:00 2001 From: eaglegai Date: Tue, 21 Dec 2021 14:35:47 +0800 Subject: [PATCH] update openldap to 2.6.0 --- CVE-2020-15719.patch | 29 - CVE-2020-25692.patch | 29 - CVE-2020-25709.patch | 25 - CVE-2020-25710.patch | 26 - CVE-2020-36221-1.patch | 58 - CVE-2020-36221-2.patch | 25 - CVE-2020-36222-1.patch | 33 - CVE-2020-36222-2.patch | 69 - CVE-2020-36223.patch | 28 - CVE-2020-36224_36225_36226-1.patch | 25 - CVE-2020-36224_36225_36226-2.patch | 25 - CVE-2020-36224_36225_36226-3.patch | 42 - CVE-2020-36224_36225_36226-4.patch | 38 - CVE-2020-36227.patch | 28 - CVE-2020-36228.patch | 25 - CVE-2020-36229.patch | 45 - CVE-2020-36230.patch | 48 - CVE-2021-27212.patch | 28 - ...P_DEVPOLL_SOCK_LX-for-multi-listener.patch | 15 - Fixup-for-binary-config-attrs.patch | 13 - add-ber_sockbuf_io_udp-to-liber.map.patch | 23 + backport-Fix-test-suite.patch | 71 - backport-ITS-9010-More-BDB-HDB-cleanup.patch | 406 - backport-ITS-9010-regenerate-configure.patch | 1783 -- ... => backport-check-password-makefile.patch | 0 ...ord.patch => backport-check-password.patch | 0 backport-delete-back-bdb-back-hdb.patch | 22206 ---------------- ...h => backport-openldap-ai-addrconfig.patch | 0 ...h => backport-openldap-allop-overlay.patch | 0 ....patch => backport-openldap-manpages.patch | 14 +- ...ackport-openldap-reentrant-gethostby.patch | 0 ...> backport-openldap-smbk5pwd-overlay.patch | 0 ..._dlopenadvise-to-get-RTLD_GLOBAL-set.patch | 0 ...ix-Debug-usage-to-follow-RE24-format.patch | 36 - bugfix-openldap-ITS9160-OOM-Handing.patch | 821 - bugfix-openldap-autoconf-pkgconfig-nss.patch | 38 - ...ap-fix-implicit-function-declaration.patch | 30 - ...penldap-nss-ciphers-use-nss-defaults.patch | 22 - ...s-ciphersuite-handle-masks-correctly.patch | 236 - ...enldap-nss-ignore-certdb-type-prefix.patch | 30 - bugfix-openldap-nss-pk11-freeslot.patch | 13 - ...penldap-nss-protocol-version-new-api.patch | 63 - ...ix-openldap-nss-unregister-on-unload.patch | 36 - ...-openldap-nss-update-list-of-ciphers.patch | 257 - bugfix-openldap-ssl-deadlock-revert.patch | 51 - bugfix-openldap-support-tlsv1-and-later.patch | 42 - ...openldap-temporary-ssl-thr-init-race.patch | 35 - openldap-2.4.50.tgz => openldap-2.6.0.tgz | Bin 5712635 -> 6433764 bytes openldap-openssl-allow-ssl3.patch | 24 - openldap.spec | 119 +- 50 files changed, 51 insertions(+), 26959 deletions(-) delete mode 100644 CVE-2020-15719.patch delete mode 100644 CVE-2020-25692.patch delete mode 100644 CVE-2020-25709.patch delete mode 100644 CVE-2020-25710.patch delete mode 100644 CVE-2020-36221-1.patch delete mode 100644 CVE-2020-36221-2.patch delete mode 100644 CVE-2020-36222-1.patch delete mode 100644 CVE-2020-36222-2.patch delete mode 100644 CVE-2020-36223.patch delete mode 100644 CVE-2020-36224_36225_36226-1.patch delete mode 100644 CVE-2020-36224_36225_36226-2.patch delete mode 100644 CVE-2020-36224_36225_36226-3.patch delete mode 100644 CVE-2020-36224_36225_36226-4.patch delete mode 100644 CVE-2020-36227.patch delete mode 100644 CVE-2020-36228.patch delete mode 100644 CVE-2020-36229.patch delete mode 100644 CVE-2020-36230.patch delete mode 100644 CVE-2021-27212.patch delete mode 100644 Fix-calls-to-SLAP_DEVPOLL_SOCK_LX-for-multi-listener.patch delete mode 100644 Fixup-for-binary-config-attrs.patch create mode 100644 add-ber_sockbuf_io_udp-to-liber.map.patch delete mode 100644 backport-Fix-test-suite.patch delete mode 100644 backport-ITS-9010-More-BDB-HDB-cleanup.patch delete mode 100644 backport-ITS-9010-regenerate-configure.patch rename check-password-makefile.patch => backport-check-password-makefile.patch (100%) rename check-password.patch => backport-check-password.patch (100%) delete mode 100644 backport-delete-back-bdb-back-hdb.patch rename openldap-ai-addrconfig.patch => backport-openldap-ai-addrconfig.patch (100%) rename openldap-allop-overlay.patch => backport-openldap-allop-overlay.patch (100%) rename openldap-manpages.patch => backport-openldap-manpages.patch (73%) rename openldap-reentrant-gethostby.patch => backport-openldap-reentrant-gethostby.patch (100%) rename openldap-smbk5pwd-overlay.patch => backport-openldap-smbk5pwd-overlay.patch (100%) rename openldap-switch-to-lt_dlopenadvise-to-get-RTLD_GLOBAL-set.patch => backport-openldap-switch-to-lt_dlopenadvise-to-get-RTLD_GLOBAL-set.patch (100%) delete mode 100644 bugfix-openldap-ITS-8650-Fix-Debug-usage-to-follow-RE24-format.patch delete mode 100644 bugfix-openldap-ITS9160-OOM-Handing.patch delete mode 100644 bugfix-openldap-autoconf-pkgconfig-nss.patch delete mode 100644 bugfix-openldap-fix-implicit-function-declaration.patch delete mode 100644 bugfix-openldap-nss-ciphers-use-nss-defaults.patch delete mode 100644 bugfix-openldap-nss-ciphersuite-handle-masks-correctly.patch delete mode 100644 bugfix-openldap-nss-ignore-certdb-type-prefix.patch delete mode 100644 bugfix-openldap-nss-pk11-freeslot.patch delete mode 100644 bugfix-openldap-nss-protocol-version-new-api.patch delete mode 100644 bugfix-openldap-nss-unregister-on-unload.patch delete mode 100644 bugfix-openldap-nss-update-list-of-ciphers.patch delete mode 100644 bugfix-openldap-ssl-deadlock-revert.patch delete mode 100644 bugfix-openldap-support-tlsv1-and-later.patch delete mode 100644 bugfix-openldap-temporary-ssl-thr-init-race.patch rename openldap-2.4.50.tgz => openldap-2.6.0.tgz (42%) delete mode 100644 openldap-openssl-allow-ssl3.patch diff --git a/CVE-2020-15719.patch b/CVE-2020-15719.patch deleted file mode 100644 index 9fc9b01..0000000 --- a/CVE-2020-15719.patch +++ /dev/null @@ -1,29 +0,0 @@ -Do not check CN when checking SAN failed - -This is to make it compliant with RFC 6125: -https://tools.ietf.org/html/rfc6125#section-6.4.4 - -Author: Matus Honek - -diff --git a/libraries/libldap/tls_o.c b/libraries/libldap/tls_o.c -index 92c708be0..46b48a3fb 100644 ---- a/libraries/libldap/tls_o.c -+++ b/libraries/libldap/tls_o.c -@@ -675,11 +675,16 @@ tlso_session_chkhost( LDAP *ld, tls_session *sess, const char *name_in ) - GENERAL_NAMES_free(alt); - if (i < n) { /* Found a match */ - ret = LDAP_SUCCESS; -+ } else { /* None matched */ -+ Debug( LDAP_DEBUG_ANY, "TLS: hostname (%s) does not match any " -+ "SAN in certificate.\n", -+ name, NULL, NULL ); -+ ret = LDAP_CONNECT_ERROR; - } - } - } - -- if (ret != LDAP_SUCCESS) { -+ if (ret == LDAP_LOCAL_ERROR) { - X509_NAME *xn; - X509_NAME_ENTRY *ne; - ASN1_OBJECT *obj; diff --git a/CVE-2020-25692.patch b/CVE-2020-25692.patch deleted file mode 100644 index b3b489b..0000000 --- a/CVE-2020-25692.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 4c774220a752bf8e3284984890dc0931fe73165d Mon Sep 17 00:00:00 2001 -From: Howard Chu -Date: Mon, 19 Oct 2020 14:03:41 +0100 -Subject: [PATCH] ITS#9370 check for equality rule on old_rdn - -Just skip normalization if there's no equality rule. We accept -DNs without equality rules already. - -Signed-off-by: guoxiaoqi ---- - servers/slapd/modrdn.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/servers/slapd/modrdn.c b/servers/slapd/modrdn.c -index c73dd8d..a229755 100644 ---- a/servers/slapd/modrdn.c -+++ b/servers/slapd/modrdn.c -@@ -505,7 +505,7 @@ slap_modrdn2mods( - mod_tmp->sml_values = ( BerVarray )ch_malloc( 2 * sizeof( struct berval ) ); - ber_dupbv( &mod_tmp->sml_values[0], &old_rdn[d_cnt]->la_value ); - mod_tmp->sml_values[1].bv_val = NULL; -- if( desc->ad_type->sat_equality->smr_normalize) { -+ if( desc->ad_type->sat_equality && desc->ad_type->sat_equality->smr_normalize) { - mod_tmp->sml_nvalues = ( BerVarray )ch_malloc( 2 * sizeof( struct berval ) ); - (void) (*desc->ad_type->sat_equality->smr_normalize)( - SLAP_MR_EQUALITY|SLAP_MR_VALUE_OF_ASSERTION_SYNTAX, --- -1.8.3.1 - diff --git a/CVE-2020-25709.patch b/CVE-2020-25709.patch deleted file mode 100644 index 6aa13ca..0000000 --- a/CVE-2020-25709.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 67670f4544e28fb09eb7319c39f404e1d3229e65 Mon Sep 17 00:00:00 2001 -From: Howard Chu -Date: Mon, 2 Nov 2020 13:12:10 +0000 -Subject: [PATCH] ITS#9383 remove assert in certificateListValidate - ---- - servers/slapd/schema_init.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/servers/slapd/schema_init.c b/servers/slapd/schema_init.c -index ea0d67aa62..28f9e71a16 100644 ---- a/servers/slapd/schema_init.c -+++ b/servers/slapd/schema_init.c -@@ -371,8 +371,7 @@ certificateListValidate( Syntax *syntax, struct berval *in ) - /* Optional version */ - if ( tag == LBER_INTEGER ) { - tag = ber_get_int( ber, &version ); -- assert( tag == LBER_INTEGER ); -- if ( version != SLAP_X509_V2 ) return LDAP_INVALID_SYNTAX; -+ if ( tag != LBER_INTEGER || version != SLAP_X509_V2 ) return LDAP_INVALID_SYNTAX; - } - tag = ber_skip_tag( ber, &len ); /* Signature Algorithm */ - if ( tag != LBER_SEQUENCE ) return LDAP_INVALID_SYNTAX; --- -GitLab diff --git a/CVE-2020-25710.patch b/CVE-2020-25710.patch deleted file mode 100644 index 3edfe42..0000000 --- a/CVE-2020-25710.patch +++ /dev/null @@ -1,26 +0,0 @@ -From bdb0d459187522a6063df13871b82ba8dcc6efe2 Mon Sep 17 00:00:00 2001 -From: Howard Chu -Date: Mon, 2 Nov 2020 16:01:14 +0000 -Subject: [PATCH] ITS#9384 remove assert in obsolete csnNormalize23() - ---- - servers/slapd/schema_init.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/servers/slapd/schema_init.c b/servers/slapd/schema_init.c -index 5812bc4b66..ea0d67aa62 100644 ---- a/servers/slapd/schema_init.c -+++ b/servers/slapd/schema_init.c -@@ -5327,8 +5327,8 @@ csnNormalize23( - } - *ptr = '\0'; - -- assert( ptr == &bv.bv_val[bv.bv_len] ); -- if ( csnValidate( syntax, &bv ) != LDAP_SUCCESS ) { -+ if ( ptr != &bv.bv_val[bv.bv_len] || -+ csnValidate( syntax, &bv ) != LDAP_SUCCESS ) { - return LDAP_INVALID_SYNTAX; - } - --- -GitLab diff --git a/CVE-2020-36221-1.patch b/CVE-2020-36221-1.patch deleted file mode 100644 index b21df63..0000000 --- a/CVE-2020-36221-1.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 38ac838e4150c626bbfa0082b7e2cf3a2bb4df31 Mon Sep 17 00:00:00 2001 -From: Howard Chu -Date: Mon, 23 Nov 2020 17:14:00 +0000 -Subject: [PATCH] ITS#9404 fix serialNumberAndIssuerCheck - -Tighten validity checks ---- - servers/slapd/schema_init.c | 9 ++++++--- - 1 file changed, 6 insertions(+), 3 deletions(-) - -diff --git a/servers/slapd/schema_init.c b/servers/slapd/schema_init.c -index 834f54593..5b577607d 100644 ---- a/servers/slapd/schema_init.c -+++ b/servers/slapd/schema_init.c -@@ -3193,7 +3193,7 @@ serialNumberAndIssuerCheck( - - if( in->bv_len < 3 ) return LDAP_INVALID_SYNTAX; - -- if( in->bv_val[0] != '{' && in->bv_val[in->bv_len-1] != '}' ) { -+ if( in->bv_val[0] != '{' || in->bv_val[in->bv_len-1] != '}' ) { - /* Parse old format */ - is->bv_val = ber_bvchr( in, '$' ); - if( BER_BVISNULL( is ) ) return LDAP_INVALID_SYNTAX; -@@ -3224,7 +3224,7 @@ serialNumberAndIssuerCheck( - HAVE_ALL = ( HAVE_ISSUER | HAVE_SN ) - } have = HAVE_NONE; - -- int numdquotes = 0; -+ int numdquotes = 0, gotquote; - struct berval x = *in; - struct berval ni; - x.bv_val++; -@@ -3266,11 +3266,12 @@ serialNumberAndIssuerCheck( - is->bv_val = x.bv_val; - is->bv_len = 0; - -- for ( ; is->bv_len < x.bv_len; ) { -+ for ( gotquote=0; is->bv_len < x.bv_len; ) { - if ( is->bv_val[is->bv_len] != '"' ) { - is->bv_len++; - continue; - } -+ gotquote = 1; - if ( is->bv_val[is->bv_len+1] == '"' ) { - /* double dquote */ - numdquotes++; -@@ -3279,6 +3280,8 @@ serialNumberAndIssuerCheck( - } - break; - } -+ if ( !gotquote ) return LDAP_INVALID_SYNTAX; -+ - x.bv_val += is->bv_len + 1; - x.bv_len -= is->bv_len + 1; - --- -GitLab - diff --git a/CVE-2020-36221-2.patch b/CVE-2020-36221-2.patch deleted file mode 100644 index c2951b6..0000000 --- a/CVE-2020-36221-2.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 58c1748e81c843c5b6e61648d2a4d1d82b47e842 Mon Sep 17 00:00:00 2001 -From: Howard Chu -Date: Mon, 14 Dec 2020 19:03:27 +0000 -Subject: [PATCH] ITS#9424 fix serialNumberAndIssuerSerialCheck - ---- - servers/slapd/schema_init.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/servers/slapd/schema_init.c b/servers/slapd/schema_init.c -index d697fa108..e035c1a6a 100644 ---- a/servers/slapd/schema_init.c -+++ b/servers/slapd/schema_init.c -@@ -4302,7 +4302,7 @@ serialNumberAndIssuerSerialCheck( - if ( in->bv_len < 3 ) return LDAP_INVALID_SYNTAX; - - /* no old format */ -- if ( in->bv_val[0] != '{' && in->bv_val[in->bv_len-1] != '}' ) return LDAP_INVALID_SYNTAX; -+ if ( in->bv_val[0] != '{' || in->bv_val[in->bv_len-1] != '}' ) return LDAP_INVALID_SYNTAX; - - x.bv_val++; - x.bv_len -= 2; --- -GitLab - diff --git a/CVE-2020-36222-1.patch b/CVE-2020-36222-1.patch deleted file mode 100644 index f7b4055..0000000 --- a/CVE-2020-36222-1.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 02dfc32d658fadc25e4040f78e36592f6e1e1ca0 Mon Sep 17 00:00:00 2001 -From: Howard Chu -Date: Fri, 27 Nov 2020 14:48:26 +0000 -Subject: [PATCH] ITS#9406 fix debug msg - ---- - servers/slapd/saslauthz.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/servers/slapd/saslauthz.c b/servers/slapd/saslauthz.c -index 2e59eb559..982fe3120 100644 ---- a/servers/slapd/saslauthz.c -+++ b/servers/slapd/saslauthz.c -@@ -488,6 +488,7 @@ authzPrettyNormal( - - assert( val != NULL ); - assert( !BER_BVISNULL( val ) ); -+ BER_BVZERO( normalized ); - - /* - * 2) dn[.{exact|children|subtree|onelevel}]:{*|} -@@ -906,7 +907,7 @@ authzPretty( - rc = authzPrettyNormal( val, out, ctx, 0 ); - - Debug( LDAP_DEBUG_TRACE, "<<< authzPretty: <%s> (%d)\n", -- out->bv_val, rc, 0 ); -+ out->bv_val ? out->bv_val : "(null)" , rc, 0 ); - - return rc; - } --- -GitLab - diff --git a/CVE-2020-36222-2.patch b/CVE-2020-36222-2.patch deleted file mode 100644 index 4ae59a0..0000000 --- a/CVE-2020-36222-2.patch +++ /dev/null @@ -1,69 +0,0 @@ -From 6ed057b5b728b50746c869bcc9c1f85d0bbbf6ed Mon Sep 17 00:00:00 2001 -From: Howard Chu -Date: Fri, 27 Nov 2020 14:37:10 +0000 -Subject: [PATCH] ITS#9406, #9407 remove saslauthz asserts - ---- - servers/slapd/saslauthz.c | 19 +++++++++++++------ - 1 file changed, 13 insertions(+), 6 deletions(-) - -diff --git a/servers/slapd/saslauthz.c b/servers/slapd/saslauthz.c -index e05f3f9cf..2e59eb559 100644 ---- a/servers/slapd/saslauthz.c -+++ b/servers/slapd/saslauthz.c -@@ -180,14 +180,16 @@ int slap_parse_user( struct berval *id, struct berval *user, - } - - if ( !BER_BVISNULL( mech ) ) { -- assert( mech->bv_val == id->bv_val + 2 ); -+ if ( mech->bv_val != id->bv_val + 2 ) -+ return LDAP_PROTOCOL_ERROR; - - AC_MEMCPY( mech->bv_val - 2, mech->bv_val, mech->bv_len + 1 ); - mech->bv_val -= 2; - } - - if ( !BER_BVISNULL( realm ) ) { -- assert( realm->bv_val >= id->bv_val + 2 ); -+ if ( realm->bv_val < id->bv_val + 2 ) -+ return LDAP_PROTOCOL_ERROR; - - AC_MEMCPY( realm->bv_val - 2, realm->bv_val, realm->bv_len + 1 ); - realm->bv_val -= 2; -@@ -449,9 +451,12 @@ is_dn: bv.bv_len = in->bv_len - ( bv.bv_val - in->bv_val ); - } - - /* Grab the searchbase */ -- assert( ludp->lud_dn != NULL ); -- ber_str2bv( ludp->lud_dn, 0, 0, &bv ); -- rc = dnValidate( NULL, &bv ); -+ if ( ludp->lud_dn != NULL ) { -+ ber_str2bv( ludp->lud_dn, 0, 0, &bv ); -+ rc = dnValidate( NULL, &bv ); -+ } else { -+ rc = LDAP_INVALID_SYNTAX; -+ } - - done: - ldap_free_urldesc( ludp ); -@@ -813,7 +818,6 @@ is_dn: bv.bv_len = val->bv_len - ( bv.bv_val - val->bv_val ); - } - - /* Grab the searchbase */ -- assert( ludp->lud_dn != NULL ); - if ( ludp->lud_dn ) { - struct berval out = BER_BVNULL; - -@@ -831,6 +835,9 @@ is_dn: bv.bv_len = val->bv_len - ( bv.bv_val - val->bv_val ); - } - - ludp->lud_dn = out.bv_val; -+ } else { -+ rc = LDAP_INVALID_SYNTAX; -+ goto done; - } - - ludp->lud_port = 0; --- -GitLab - diff --git a/CVE-2020-36223.patch b/CVE-2020-36223.patch deleted file mode 100644 index d5b3aac..0000000 --- a/CVE-2020-36223.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 21981053a1195ae1555e23df4d9ac68d34ede9dd Mon Sep 17 00:00:00 2001 -From: Howard Chu -Date: Sat, 28 Nov 2020 15:54:17 +0000 -Subject: [PATCH] ITS#9408 fix vrfilter double-free - ---- - servers/slapd/controls.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/servers/slapd/controls.c b/servers/slapd/controls.c -index 345531940..28fa64eb0 100644 ---- a/servers/slapd/controls.c -+++ b/servers/slapd/controls.c -@@ -1578,7 +1578,10 @@ static int parseValuesReturnFilter ( - } else { - send_ldap_result( op, rs ); - } -- if( op->o_vrFilter != NULL) vrFilter_free( op, op->o_vrFilter ); -+ if( op->o_vrFilter != NULL) { -+ vrFilter_free( op, op->o_vrFilter ); -+ op->o_vrFilter = NULL; -+ } - } - #ifdef LDAP_DEBUG - else { --- -GitLab - diff --git a/CVE-2020-36224_36225_36226-1.patch b/CVE-2020-36224_36225_36226-1.patch deleted file mode 100644 index 8612f0e..0000000 --- a/CVE-2020-36224_36225_36226-1.patch +++ /dev/null @@ -1,25 +0,0 @@ -From c0b61a9486508e5202aa2e0cfb68c9813731b439 Mon Sep 17 00:00:00 2001 -From: Howard Chu -Date: Mon, 30 Nov 2020 11:45:46 +0000 -Subject: [PATCH] ITS#9409 saslauthz: use ch_free on normalized DN - ---- - servers/slapd/saslauthz.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/servers/slapd/saslauthz.c b/servers/slapd/saslauthz.c -index 982fe3120..cc5a292de 100644 ---- a/servers/slapd/saslauthz.c -+++ b/servers/slapd/saslauthz.c -@@ -860,7 +860,7 @@ done: - - if ( lud_dn ) { - if ( ludp->lud_dn != lud_dn ) { -- ber_memfree( ludp->lud_dn ); -+ ch_free( ludp->lud_dn ); - } - ludp->lud_dn = lud_dn; - } --- -GitLab - diff --git a/CVE-2020-36224_36225_36226-2.patch b/CVE-2020-36224_36225_36226-2.patch deleted file mode 100644 index 008daf0..0000000 --- a/CVE-2020-36224_36225_36226-2.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 554dff1927176579d652f2fe60c90e9abbad4c65 Mon Sep 17 00:00:00 2001 -From: Howard Chu -Date: Mon, 30 Nov 2020 16:20:18 +0000 -Subject: [PATCH] ITS#9409 saslauthz: use slap_sl_free in prev commit - ---- - servers/slapd/saslauthz.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/servers/slapd/saslauthz.c b/servers/slapd/saslauthz.c -index cc5a292de..4a9420b37 100644 ---- a/servers/slapd/saslauthz.c -+++ b/servers/slapd/saslauthz.c -@@ -860,7 +860,7 @@ done: - - if ( lud_dn ) { - if ( ludp->lud_dn != lud_dn ) { -- ch_free( ludp->lud_dn ); -+ slap_sl_free( ludp->lud_dn, ctx ); - } - ludp->lud_dn = lud_dn; - } --- -GitLab - diff --git a/CVE-2020-36224_36225_36226-3.patch b/CVE-2020-36224_36225_36226-3.patch deleted file mode 100644 index 995d1c7..0000000 --- a/CVE-2020-36224_36225_36226-3.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 5a2017d4e61a6ddc4dcb4415028e0d08eb6bca26 Mon Sep 17 00:00:00 2001 -From: Howard Chu -Date: Tue, 1 Dec 2020 18:32:35 +0000 -Subject: [PATCH] ITS#9412 fix AVA_Sort on invalid RDN - ---- - servers/slapd/dn.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/servers/slapd/dn.c b/servers/slapd/dn.c -index 06698b089..7a095ba9e 100644 ---- a/servers/slapd/dn.c -+++ b/servers/slapd/dn.c -@@ -233,6 +233,7 @@ AVA_Sort( LDAPRDN rdn, int nAVAs ) - { - LDAPAVA *ava_i; - int i; -+ int rc = LDAP_SUCCESS; - - assert( rdn != NULL ); - -@@ -250,7 +251,7 @@ AVA_Sort( LDAPRDN rdn, int nAVAs ) - /* RFC4512 does not allow multiple AVAs - * with the same attribute type in RDN (ITS#5968) */ - if ( a == 0 ) -- return LDAP_INVALID_DN_SYNTAX; -+ rc = LDAP_INVALID_DN_SYNTAX; - - if ( a > 0 ) - break; -@@ -259,7 +260,7 @@ AVA_Sort( LDAPRDN rdn, int nAVAs ) - } - rdn[ j+1 ] = ava_i; - } -- return LDAP_SUCCESS; -+ return rc; - } - - static int --- -GitLab - diff --git a/CVE-2020-36224_36225_36226-4.patch b/CVE-2020-36224_36225_36226-4.patch deleted file mode 100644 index 704c05b..0000000 --- a/CVE-2020-36224_36225_36226-4.patch +++ /dev/null @@ -1,38 +0,0 @@ -From d169e7958a3e0dc70f59c8374bf8a59833b7bdd8 Mon Sep 17 00:00:00 2001 -From: Howard Chu -Date: Tue, 1 Dec 2020 19:03:24 +0000 -Subject: [PATCH] ITS#9413 fix slap_parse_user - ---- - servers/slapd/saslauthz.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/servers/slapd/saslauthz.c b/servers/slapd/saslauthz.c -index 4a9420b37..b17f34a21 100644 ---- a/servers/slapd/saslauthz.c -+++ b/servers/slapd/saslauthz.c -@@ -156,10 +156,9 @@ int slap_parse_user( struct berval *id, struct berval *user, - user->bv_val++; - user->bv_len = id->bv_len - ( user->bv_val - id->bv_val ); - -- mech->bv_val = ber_bvchr( id, '.' ); -- if ( !BER_BVISNULL( mech ) ) { -- mech->bv_val[ 0 ] = '\0'; -- mech->bv_val++; -+ if ( id->bv_val[1] == '.' ) { -+ id->bv_val[1] = '\0'; -+ mech->bv_val = id->bv_val + 2; - mech->bv_len = user->bv_val - mech->bv_val - 1; - - realm->bv_val = ber_bvchr( mech, '/' ); -@@ -172,6 +171,7 @@ int slap_parse_user( struct berval *id, struct berval *user, - } - - } else { -+ BER_BVZERO( mech ); - BER_BVZERO( realm ); - } - --- -GitLab - diff --git a/CVE-2020-36227.patch b/CVE-2020-36227.patch deleted file mode 100644 index ceea4ce..0000000 --- a/CVE-2020-36227.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 9d0e8485f3113505743baabf1167e01e4558ccf5 Mon Sep 17 00:00:00 2001 -From: Howard Chu -Date: Sun, 20 Dec 2020 21:31:15 +0000 -Subject: [PATCH] ITS#9428 fix cancel exop - ---- - servers/slapd/cancel.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/servers/slapd/cancel.c b/servers/slapd/cancel.c -index 206031290..b972b18fc 100644 ---- a/servers/slapd/cancel.c -+++ b/servers/slapd/cancel.c -@@ -65,6 +65,11 @@ int cancel_extop( Operation *op, SlapReply *rs ) - return LDAP_PROTOCOL_ERROR; - } - -+ if ( opid == op->o_msgid ) { -+ op->o_cancel = SLAP_CANCEL_DONE; -+ return LDAP_SUCCESS; -+ } -+ - ldap_pvt_thread_mutex_lock( &op->o_conn->c_mutex ); - - if ( op->o_abandon ) { --- -GitLab - diff --git a/CVE-2020-36228.patch b/CVE-2020-36228.patch deleted file mode 100644 index 290c405..0000000 --- a/CVE-2020-36228.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 91dccd25c347733b365adc74cb07d074512ed5ad Mon Sep 17 00:00:00 2001 -From: Howard Chu -Date: Wed, 16 Dec 2020 18:52:42 +0000 -Subject: [PATCH] ITS#9427 fix issuerAndThisUpdateCheck - ---- - servers/slapd/schema_init.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/servers/slapd/schema_init.c b/servers/slapd/schema_init.c -index e035c1a6a..cc7c81693 100644 ---- a/servers/slapd/schema_init.c -+++ b/servers/slapd/schema_init.c -@@ -3809,7 +3809,7 @@ issuerAndThisUpdateCheck( - - if ( in->bv_len < STRLENOF( "{issuer \"\",thisUpdate \"YYMMDDhhmmssZ\"}" ) ) return LDAP_INVALID_SYNTAX; - -- if ( in->bv_val[0] != '{' && in->bv_val[in->bv_len-1] != '}' ) { -+ if ( in->bv_val[0] != '{' || in->bv_val[in->bv_len-1] != '}' ) { - return LDAP_INVALID_SYNTAX; - } - --- -GitLab - diff --git a/CVE-2020-36229.patch b/CVE-2020-36229.patch deleted file mode 100644 index ea4e9ee..0000000 --- a/CVE-2020-36229.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 4bdfffd2889c0c5cdf58bebafbdc8fce4bb2bff0 Mon Sep 17 00:00:00 2001 -From: Howard Chu -Date: Mon, 14 Dec 2020 20:05:44 +0000 -Subject: [PATCH] ITS#9425 add more checks to ldap_X509dn2bv - ---- - libraries/libldap/tls2.c | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/libraries/libldap/tls2.c b/libraries/libldap/tls2.c -index e0c82fa9f..193d20fdf 100644 ---- a/libraries/libldap/tls2.c -+++ b/libraries/libldap/tls2.c -@@ -1248,6 +1248,8 @@ ldap_X509dn2bv( void *x509_name, struct berval *bv, LDAPDN_rewrite_func *func, - for ( tag = ber_first_element( ber, &len, &rdn_end ); - tag == LBER_SEQUENCE; - tag = ber_next_element( ber, &len, rdn_end )) { -+ if ( rdn_end > dn_end ) -+ return LDAP_DECODING_ERROR; - tag = ber_skip_tag( ber, &len ); - ber_skip_data( ber, len ); - navas++; -@@ -1257,7 +1259,7 @@ ldap_X509dn2bv( void *x509_name, struct berval *bv, LDAPDN_rewrite_func *func, - /* Rewind and prepare to extract */ - ber_rewind( ber ); - tag = ber_first_element( ber, &len, &dn_end ); -- if ( tag == LBER_DEFAULT ) -+ if ( tag != LBER_SET ) - return LDAP_DECODING_ERROR; - - /* Allocate the DN/RDN/AVA stuff as a single block */ -@@ -1370,6 +1372,10 @@ allocd: - /* X.690 bitString value converted to RFC4517 Bit String */ - rc = der_to_ldap_BitString( &Val, &newAVA->la_value ); - goto allocd; -+ case LBER_DEFAULT: -+ /* decode error */ -+ rc = LDAP_DECODING_ERROR; -+ goto nomem; - default: - /* Not a string type at all */ - newAVA->la_flags = 0; --- -GitLab - diff --git a/CVE-2020-36230.patch b/CVE-2020-36230.patch deleted file mode 100644 index 1d83607..0000000 --- a/CVE-2020-36230.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 8c1d96ee36ed98b32cd0e28b7069c7b8ea09d793 Mon Sep 17 00:00:00 2001 -From: Howard Chu -Date: Sun, 13 Dec 2020 21:48:45 +0000 -Subject: [PATCH] ITS#9423 ldap_X509dn2bv: check for invalid BER after RDN - count - ---- - libraries/libldap/tls2.c | 12 +++++++----- - 1 file changed, 7 insertions(+), 5 deletions(-) - -diff --git a/libraries/libldap/tls2.c b/libraries/libldap/tls2.c -index ca5a44ab0..e0c82fa9f 100644 ---- a/libraries/libldap/tls2.c -+++ b/libraries/libldap/tls2.c -@@ -1254,6 +1254,12 @@ ldap_X509dn2bv( void *x509_name, struct berval *bv, LDAPDN_rewrite_func *func, - } - } - -+ /* Rewind and prepare to extract */ -+ ber_rewind( ber ); -+ tag = ber_first_element( ber, &len, &dn_end ); -+ if ( tag == LBER_DEFAULT ) -+ return LDAP_DECODING_ERROR; -+ - /* Allocate the DN/RDN/AVA stuff as a single block */ - dnsize = sizeof(LDAPRDN) * (nrdns+1); - dnsize += sizeof(LDAPAVA *) * (navas+nrdns); -@@ -1265,16 +1271,12 @@ ldap_X509dn2bv( void *x509_name, struct berval *bv, LDAPDN_rewrite_func *func, - } else { - newDN = (LDAPDN)(char *)ptrs; - } -- -+ - newDN[nrdns] = NULL; - newRDN = (LDAPRDN)(newDN + nrdns+1); - newAVA = (LDAPAVA *)(newRDN + navas + nrdns); - baseAVA = newAVA; - -- /* Rewind and start extracting */ -- ber_rewind( ber ); -- -- tag = ber_first_element( ber, &len, &dn_end ); - for ( i = nrdns - 1; i >= 0; i-- ) { - newDN[i] = newRDN; - --- -GitLab - diff --git a/CVE-2021-27212.patch b/CVE-2021-27212.patch deleted file mode 100644 index 663cae6..0000000 --- a/CVE-2021-27212.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 3539fc33212b528c56b716584f2c2994af7c30b0 Mon Sep 17 00:00:00 2001 -From: Howard Chu -Date: Sat, 6 Feb 2021 20:52:06 +0000 -Subject: [PATCH] ITS#9454 fix issuerAndThisUpdateCheck - -Reference:https://git.openldap.org/openldap/openldap/-/commit/3539fc33212b528c56b716584f2c2994af7c30b0 - ---- - servers/slapd/schema_init.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/servers/slapd/schema_init.c b/servers/slapd/schema_init.c -index 466899625..914df70eb 100644 ---- a/servers/slapd/schema_init.c -+++ b/servers/slapd/schema_init.c -@@ -3975,6 +3975,8 @@ issuerAndThisUpdateCheck( - break; - } - } -+ if ( tu->bv_len < STRLENOF("YYYYmmddHHmmssZ") ) return LDAP_INVALID_SYNTAX; -+ - x.bv_val += tu->bv_len + 1; - x.bv_len -= tu->bv_len + 1; - - --- -GitLab - diff --git a/Fix-calls-to-SLAP_DEVPOLL_SOCK_LX-for-multi-listener.patch b/Fix-calls-to-SLAP_DEVPOLL_SOCK_LX-for-multi-listener.patch deleted file mode 100644 index 4567f32..0000000 --- a/Fix-calls-to-SLAP_DEVPOLL_SOCK_LX-for-multi-listener.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/servers/slapd/daemon.c b/servers/slapd/daemon.c -index a3e8713..329ed6d 100644 ---- a/servers/slapd/daemon.c -+++ b/servers/slapd/daemon.c -@@ -438,8 +438,8 @@ static slap_daemon_st slap_daemon[SLAPD_MAX_DAEMON_THREADS]; - - # define SLAP_EVENT_IS_READ(i) SLAP_DEVPOLL_EVENT_CHK((i), POLLIN) - # define SLAP_EVENT_IS_WRITE(i) SLAP_DEVPOLL_EVENT_CHK((i), POLLOUT) --# define SLAP_EVENT_IS_LISTENER(t,i) SLAP_DEVPOLL_EV_LISTENER(SLAP_DEVPOLL_SOCK_LX(SLAP_EVENT_FD(t,(i)))) --# define SLAP_EVENT_LISTENER(t,i) SLAP_DEVPOLL_SOCK_LX(SLAP_EVENT_FD(t,(i))) -+# define SLAP_EVENT_IS_LISTENER(t,i) SLAP_DEVPOLL_EV_LISTENER(SLAP_DEVPOLL_SOCK_LX(t, SLAP_EVENT_FD(t,(i)))) -+# define SLAP_EVENT_LISTENER(t,i) SLAP_DEVPOLL_SOCK_LX(t, SLAP_EVENT_FD(t,(i))) - - # define SLAP_SOCK_INIT(t) do { \ - slap_daemon[t].sd_pollfd = ch_calloc( 1, \ diff --git a/Fixup-for-binary-config-attrs.patch b/Fixup-for-binary-config-attrs.patch deleted file mode 100644 index c2a320b..0000000 --- a/Fixup-for-binary-config-attrs.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/servers/slapd/bconfig.c b/servers/slapd/bconfig.c -index 250f141..5aabcef 100644 ---- a/servers/slapd/bconfig.c -+++ b/servers/slapd/bconfig.c -@@ -4313,6 +4313,8 @@ config_find_table( ConfigOCs **colst, int nocs, AttributeDescription *ad, - ConfigArgs *ca ) - { - int i, j; -+ if (ad->ad_flags & SLAP_DESC_BINARY) -+ ad = ad->ad_type->sat_ad; - - for (j=0; jco_table[i].name; i++) diff --git a/add-ber_sockbuf_io_udp-to-liber.map.patch b/add-ber_sockbuf_io_udp-to-liber.map.patch new file mode 100644 index 0000000..84518aa --- /dev/null +++ b/add-ber_sockbuf_io_udp-to-liber.map.patch @@ -0,0 +1,23 @@ +From b39ae98eb55281422a391bade3bf648ce6180621 Mon Sep 17 00:00:00 2001 +From: eaglegai +Date: Fri, 17 Dec 2021 17:39:03 +0800 +Subject: [PATCH] add ber_sockbuf_io_udp to liber.map + +--- + libraries/liblber/lber.map | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/libraries/liblber/lber.map b/libraries/liblber/lber.map +index 9a4094b..083cd1f 100644 +--- a/libraries/liblber/lber.map ++++ b/libraries/liblber/lber.map +@@ -121,6 +121,7 @@ OPENLDAP_2.200 + ber_sockbuf_io_fd; + ber_sockbuf_io_readahead; + ber_sockbuf_io_tcp; ++ ber_sockbuf_io_udp; + ber_sockbuf_remove_io; + ber_sos_dump; + ber_start; +-- +2.30.0 \ No newline at end of file diff --git a/backport-Fix-test-suite.patch b/backport-Fix-test-suite.patch deleted file mode 100644 index cc8f72e..0000000 --- a/backport-Fix-test-suite.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 70f87370f99e78ac3874501bfe5124dbb86185a8 Mon Sep 17 00:00:00 2001 -From: zhangqiumiao -Date: Fri, 25 Sep 2020 21:56:43 +0800 -Subject: [PATCH] backport Fix test suite - ---- - tests/data/monitor2.out | 3 --- - tests/scripts/test052-memberof | 2 +- - tests/scripts/test056-monitor | 11 ++--------- - 3 files changed, 3 insertions(+), 13 deletions(-) - -diff --git a/tests/data/monitor2.out b/tests/data/monitor2.out -index 26e9ce9..20209d1 100644 ---- a/tests/data/monitor2.out -+++ b/tests/data/monitor2.out -@@ -10,9 +10,6 @@ structuralObjectClass: monitoredObject - monitorIsShadow: FALSE - namingContexts: o=OpenLDAP Project,l=Internet - readOnly: FALSE --olmBDBEntryCache: 0 --olmBDBDNCache: 0 --olmBDBIDLCache: 0 - entryDN: cn=Database 1,cn=Databases,cn=Monitor - - dn: cn=Database 2,cn=Databases,cn=Monitor -diff --git a/tests/scripts/test052-memberof b/tests/scripts/test052-memberof -index a73a929..1dba946 100755 ---- a/tests/scripts/test052-memberof -+++ b/tests/scripts/test052-memberof -@@ -72,7 +72,7 @@ EOF - fi - fi - --indexInclude="" mainInclude="" " nullExclude="" -+indexInclude="" mainInclude="" nullExclude="" - test $INDEXDB = indexdb || indexInclude="# " - test $MAINDB = maindb || mainInclude="# " - case $BACKEND in -diff --git a/tests/scripts/test056-monitor b/tests/scripts/test056-monitor -index 7a87eaa..0e1ba20 100755 ---- a/tests/scripts/test056-monitor -+++ b/tests/scripts/test056-monitor -@@ -85,7 +85,7 @@ echo "Using ldapsearch to read database monitor entries..." - $LDAPSEARCH -S "" -b "$DATABASESMONITORDN" -h $LOCALHOST -p $PORT1 \ - 'objectclass=*' \ - structuralObjectClass entryDN namingContexts readOnly \ -- monitorIsShadow monitorContext -+ monitorIsShadow monitorContext \ - > $SEARCHOUT 2>&1 - RC=$? - -@@ -98,15 +98,8 @@ fi - echo "Filtering ldapsearch results..." - $LDIFFILTER -b monitor < $SEARCHOUT > $SEARCHFLT - --TMPMONITOROUT2=$MONITOROUT2 --case $BACKEND in --*) -- TMPMONITOROUT2=$TESTDIR/monitor2.out -- ;; --esac -- - echo "Comparing filter output..." --$CMP $SEARCHFLT $TMPMONITOROUT2 > $CMPOUT -+$CMP $SEARCHFLT $MONITOROUT2 > $CMPOUT - - if test $? != 0 ; then - echo "comparison failed - database monitor output is not correct" --- -2.19.1 - diff --git a/backport-ITS-9010-More-BDB-HDB-cleanup.patch b/backport-ITS-9010-More-BDB-HDB-cleanup.patch deleted file mode 100644 index 9739b8c..0000000 --- a/backport-ITS-9010-More-BDB-HDB-cleanup.patch +++ /dev/null @@ -1,406 +0,0 @@ -From ac37a67536d37ae059ed120f00b540429be6b4e0 Mon Sep 17 00:00:00 2001 -From: zhangqiumiao -Date: Sun, 27 Sep 2020 15:01:05 +0800 -Subject: [PATCH] backport ITS#9010 More BDB/HDB cleanup - ---- - doc/guide/admin/aspell.en.pws | 7 - - tests/data/regressions/its4337/config.out | 129 ------------------ - tests/data/regressions/its4337/its4337 | 157 ---------------------- - tests/data/regressions/its4337/slapd.conf | 36 ----- - 4 files changed, 329 deletions(-) - delete mode 100644 tests/data/regressions/its4337/config.out - delete mode 100755 tests/data/regressions/its4337/its4337 - delete mode 100644 tests/data/regressions/its4337/slapd.conf - -diff --git a/doc/guide/admin/aspell.en.pws b/doc/guide/admin/aspell.en.pws -index ae777e2..ec24572 100644 ---- a/doc/guide/admin/aspell.en.pws -+++ b/doc/guide/admin/aspell.en.pws -@@ -220,8 +220,6 @@ AVAs - associatedDomain - organizationalRole - initgroups --olcDbCachesize --olcDbCacheSize - ETCDIR - colaligns - olcReadOnly -@@ -426,10 +424,8 @@ txt - UTR - XER - roomNumber --olcDbIDLcacheSize - namespace - LDAPControl --dbconfig - olcAttributeOptions - dsaparam - searchResult -@@ -965,7 +961,6 @@ unwillingToPerform - PhotoURI - MyCompany - mkdep --idlcachesize - irresponsive - PasswordModify - readOnly -@@ -1183,7 +1178,6 @@ monitorRuntimeConfig - olcAuditlogFile - namingContexts - referralAttrDN --idlecachesize - moddn - calloc - LDFLAGS -@@ -1375,7 +1369,6 @@ spasswd - sprintf - monitorCounterObject - Instanstantiation --olcDbConfig - olcLastMod - vals - param -diff --git a/tests/data/regressions/its4337/config.out b/tests/data/regressions/its4337/config.out -deleted file mode 100644 -index bdcbbe5..0000000 ---- a/tests/data/regressions/its4337/config.out -+++ /dev/null -@@ -1,129 +0,0 @@ --# Searching databases __before__ append... --dn: olcDatabase={-1}frontend,cn=config --objectClass: olcDatabaseConfig --objectClass: olcFrontendConfig --olcDatabase: {-1}frontend --olcAddContentAcl: FALSE --olcLastMod: TRUE --olcMaxDerefDepth: 0 --olcReadOnly: FALSE --olcSchemaDN: cn=Subschema --olcSyncUseSubentry: FALSE --olcMonitoring: FALSE -- --dn: olcDatabase={0}config,cn=config --objectClass: olcDatabaseConfig --olcDatabase: {0}config --olcAccess: {0}to * by * none --olcAddContentAcl: TRUE --olcLastMod: TRUE --olcMaxDerefDepth: 15 --olcReadOnly: FALSE --olcRootDN: cn=config --olcRootPW: config --olcSyncUseSubentry: FALSE --olcMonitoring: FALSE -- --dn: olcDatabase={1}monitor,cn=config --objectClass: olcDatabaseConfig --olcDatabase: {1}monitor --olcAddContentAcl: FALSE --olcLastMod: TRUE --olcMaxDerefDepth: 15 --olcReadOnly: FALSE --olcSyncUseSubentry: FALSE --olcMonitoring: FALSE -- --# Searching databases __after__ append... --dn: olcDatabase={-1}frontend,cn=config --objectClass: olcDatabaseConfig --objectClass: olcFrontendConfig --olcDatabase: {-1}frontend --olcAddContentAcl: FALSE --olcLastMod: TRUE --olcMaxDerefDepth: 0 --olcReadOnly: FALSE --olcSchemaDN: cn=Subschema --olcSyncUseSubentry: FALSE --olcMonitoring: FALSE -- --dn: olcDatabase={0}config,cn=config --objectClass: olcDatabaseConfig --olcDatabase: {0}config --olcAccess: {0}to * by * none --olcAddContentAcl: TRUE --olcLastMod: TRUE --olcMaxDerefDepth: 15 --olcReadOnly: FALSE --olcRootDN: cn=config --olcRootPW: config --olcSyncUseSubentry: FALSE --olcMonitoring: FALSE -- --dn: olcDatabase={1}monitor,cn=config --objectClass: olcDatabaseConfig --olcDatabase: {1}monitor --olcAddContentAcl: FALSE --olcLastMod: TRUE --olcMaxDerefDepth: 15 --olcReadOnly: FALSE --olcSyncUseSubentry: FALSE --olcMonitoring: FALSE -- --dn: olcDatabase={2}bdb,cn=config --objectClass: olcDatabaseConfig --objectClass: olcBdbConfig --olcDatabase: {2}bdb --olcDbDirectory: ./testrun/db.1.a --olcSuffix: dc=com -- --# Searching databases __after__ insert... --dn: olcDatabase={-1}frontend,cn=config --objectClass: olcDatabaseConfig --objectClass: olcFrontendConfig --olcDatabase: {-1}frontend --olcAddContentAcl: FALSE --olcLastMod: TRUE --olcMaxDerefDepth: 0 --olcReadOnly: FALSE --olcSchemaDN: cn=Subschema --olcSyncUseSubentry: FALSE --olcMonitoring: FALSE -- --dn: olcDatabase={0}config,cn=config --objectClass: olcDatabaseConfig --olcDatabase: {0}config --olcAccess: {0}to * by * none --olcAddContentAcl: TRUE --olcLastMod: TRUE --olcMaxDerefDepth: 15 --olcReadOnly: FALSE --olcRootDN: cn=config --olcRootPW: config --olcSyncUseSubentry: FALSE --olcMonitoring: FALSE -- --dn: olcDatabase={1}bdb,cn=config --objectClass: olcDatabaseConfig --objectClass: olcBdbConfig --olcDatabase: {1}bdb --olcDbDirectory: ./testrun/db.2.a --olcSuffix: dc=org -- --dn: olcDatabase={2}monitor,cn=config --objectClass: olcDatabaseConfig --olcDatabase: {2}monitor --olcAddContentAcl: FALSE --olcLastMod: TRUE --olcMaxDerefDepth: 15 --olcReadOnly: FALSE --olcSyncUseSubentry: FALSE --olcMonitoring: FALSE -- --dn: olcDatabase={3}bdb,cn=config --objectClass: olcDatabaseConfig --objectClass: olcBdbConfig --olcDatabase: {3}bdb --olcDbDirectory: ./testrun/db.1.a --olcSuffix: dc=com -- -diff --git a/tests/data/regressions/its4337/its4337 b/tests/data/regressions/its4337/its4337 -deleted file mode 100755 -index 66bc716..0000000 ---- a/tests/data/regressions/its4337/its4337 -+++ /dev/null -@@ -1,157 +0,0 @@ --#! /bin/sh --# $OpenLDAP$ --## This work is part of OpenLDAP Software . --## --## Copyright 1998-2020 The OpenLDAP Foundation. --## All rights reserved. --## --## Redistribution and use in source and binary forms, with or without --## modification, are permitted only as authorized by the OpenLDAP --## Public License. --## --## A copy of this license is available in the file LICENSE in the --## top-level directory of the distribution or, alternatively, at --## . -- --echo "running defines.sh" --. $SRCDIR/scripts/defines.sh -- --if test $BACKEND != "bdb" ; then -- echo "BDB backend not available, test skipped" -- exit 0 --fi -- --mkdir -p $TESTDIR $DBDIR1 $DBDIR2 $DBDIR3 $TESTDIR/slapd.d -- --ITS=4337 --ITSDIR=$DATADIR/regressions/its$ITS -- --echo "Starting slapd on TCP/IP port $PORT1..." --. $CONFFILTER $BACKEND $MONITORDB < $ITSDIR/slapd.conf > $CONF1 --#$SLAPD -f $CONF1 -F $TESTDIR/slapd.d -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & --$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & --PID=$! --if test $WAIT != 0 ; then -- echo PID $PID -- read foo --fi --KILLPIDS="$PID" -- --sleep 1 -- --echo "Using ldapsearch to check that slapd is running..." --for i in 0 1 2 3 4 5; do -- $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \ -- 'objectclass=*' > /dev/null 2>&1 -- RC=$? -- if test $RC = 0 ; then -- break -- fi -- echo "Waiting 5 seconds for slapd to start..." -- sleep 5 --done -- --if test $RC != 0 ; then -- echo "ldapsearch failed ($RC)!" -- test $KILLSERVERS != no && kill -HUP $KILLPIDS -- exit $RC --fi -- --cat /dev/null > $TESTOUT --cat /dev/null > $SEARCHOUT -- --echo "Searching databases..." --echo "# Searching databases __before__ append..." >> $SEARCHOUT --$LDAPSEARCH -h $LOCALHOST -p $PORT1 \ -- -D "cn=config" -w "config" -b "cn=config" \ -- '(objectClass=olcDatabaseConfig)' >> $SEARCHOUT 2>> $TESTOUT --RC=$? --if test $RC != 0 ; then -- echo "ldapsearch failed ($RC)!" -- test $KILLSERVERS != no && kill -HUP $KILLPIDS -- exit $RC --fi -- --echo "Appending a database..." --$LDAPADD -v -D "cn=config" -w "config" -h $LOCALHOST -p $PORT1 \ -- >> $TESTOUT 2>&1 << EOMODS --dn: olcDatabase=bdb,cn=config --objectClass: olcDatabaseConfig --objectClass: olcBdbConfig --olcDatabase: bdb --olcSuffix: dc=com --olcDbDirectory: ./testrun/db.1.a --EOMODS --RC=$? --if test $RC != 0 ; then -- echo "ldapadd failed ($RC)!" -- test $KILLSERVERS != no && kill -HUP $KILLPIDS -- exit $RC --fi -- --echo "Searching databases..." --echo "# Searching databases __after__ append..." >> $SEARCHOUT --$LDAPSEARCH -h $LOCALHOST -p $PORT1 \ -- -D "cn=config" -w "config" -b "cn=config" \ -- '(objectClass=olcDatabaseConfig)' >> $SEARCHOUT 2>> $TESTOUT --RC=$? --if test $RC != 0 ; then -- echo "ldapsearch failed ($RC)!" -- test $KILLSERVERS != no && kill -HUP $KILLPIDS -- exit $RC --fi -- --echo "Inserting a database..." --$LDAPADD -v -D "cn=config" -w "config" -h $LOCALHOST -p $PORT1 \ -- >> $TESTOUT 2>&1 << EOMODS --dn: olcDatabase={1}bdb,cn=config --objectClass: olcDatabaseConfig --objectClass: olcBdbConfig --olcDatabase: {1}bdb --olcSuffix: dc=org --olcDbDirectory: ./testrun/db.2.a --EOMODS --RC=$? --if test $RC != 0 ; then -- echo "ldapadd failed ($RC)!" -- test $KILLSERVERS != no && kill -HUP $KILLPIDS -- if test $RC = 53 ; then -- echo "TODO" -- exit 0 -- fi -- exit $RC --fi -- --echo "Searching databases..." --echo "# Searching databases __after__ insert..." >> $SEARCHOUT --$LDAPSEARCH -h $LOCALHOST -p $PORT1 \ -- -D "cn=config" -w "config" -b "cn=config" \ -- '(objectClass=olcDatabaseConfig)' >> $SEARCHOUT 2>> $TESTOUT --RC=$? --if test $RC != 0 ; then -- echo "ldapsearch failed ($RC)!" -- test $KILLSERVERS != no && kill -HUP $KILLPIDS -- exit $RC --fi -- --test $KILLSERVERS != no && kill -HUP $KILLPIDS -- --LDIF=$ITSDIR/config.out -- --echo "Filtering ldapsearch results..." --$LDIFFILTER < $SEARCHOUT > $SEARCHFLT --echo "Filtering original ldif..." --$LDIFFILTER < $LDIF > $LDIFFLT --echo "Comparing filter output..." --$CMP $SEARCHFLT $LDIFFLT > $CMPOUT -- --if test $? != 0 ; then -- echo "Comparison failed" -- exit 1 --fi -- --echo ">>>>> Test succeeded" -- --test $KILLSERVERS != no && wait -- --exit 0 -diff --git a/tests/data/regressions/its4337/slapd.conf b/tests/data/regressions/its4337/slapd.conf -deleted file mode 100644 -index ee3108a..0000000 ---- a/tests/data/regressions/its4337/slapd.conf -+++ /dev/null -@@ -1,36 +0,0 @@ --# stand-alone slapd config -- for testing (with indexing) --# $OpenLDAP$ --## This work is part of OpenLDAP Software . --## --## Copyright 1998-2020 The OpenLDAP Foundation. --## All rights reserved. --## --## Redistribution and use in source and binary forms, with or without --## modification, are permitted only as authorized by the OpenLDAP --## Public License. --## --## A copy of this license is available in the file LICENSE in the --## top-level directory of the distribution or, alternatively, at --## . -- --include @SCHEMADIR@/core.schema --include @SCHEMADIR@/cosine.schema --include @SCHEMADIR@/inetorgperson.schema --include @SCHEMADIR@/openldap.schema --include @SCHEMADIR@/nis.schema --include @DATADIR@/test.schema -- --# --pidfile @TESTDIR@/slapd.2.pid --argsfile @TESTDIR@/slapd.2.args -- --#mod#modulepath ../servers/slapd/back-@BACKEND@/:../servers/slapd/overlays --#mod#moduleload back_@BACKEND@.la -- --#monitormod#modulepath ../servers/slapd/back-monitor/ --#monitormod#moduleload back_monitor.la -- --database config --rootpw config -- --#monitor#database monitor --- -2.19.1 - diff --git a/backport-ITS-9010-regenerate-configure.patch b/backport-ITS-9010-regenerate-configure.patch deleted file mode 100644 index 1ec1ee1..0000000 --- a/backport-ITS-9010-regenerate-configure.patch +++ /dev/null @@ -1,1783 +0,0 @@ -From 14c7c8f3579a8c0a802aaac72841efed3d01445f Mon Sep 17 00:00:00 2001 -From: zhangqiumiao -Date: Sun, 27 Sep 2020 14:25:21 +0800 -Subject: [PATCH] backport ITS#9010 regenerate configure - ---- - configure | 1565 +++++------------------------------------------------ - 1 file changed, 148 insertions(+), 1417 deletions(-) - -diff --git a/configure b/configure -index 5f05f1c..5c5097a 100755 ---- a/configure -+++ b/configure -@@ -667,7 +667,6 @@ LUTIL_LIBS - LTHREAD_LIBS - SLAPD_NDB_INCS - SLAPD_NDB_LIBS --BDB_LIBS - SLAPD_LIBS - LDAP_LIBS - BUILD_VALSORT -@@ -704,9 +703,7 @@ BUILD_MONITOR - BUILD_META - BUILD_MDB - BUILD_LDAP --BUILD_HDB - BUILD_DNSSRV --BUILD_BDB - SLAPD_SLAPI_DEPEND - BUILD_SLAPI - BUILD_SLAPD -@@ -764,6 +761,7 @@ DLLTOOL - AS - AR - CC -+moduledir - ldap_subdir - top_builddir - OPENLDAP_RELEASE_DATE -@@ -852,6 +850,7 @@ ac_user_opts=' - enable_option_checking - enable_silent_rules - with_subdir -+with_moduledir - enable_debug - enable_dynamic - enable_syslog -@@ -881,9 +880,7 @@ enable_slp - enable_wrappers - enable_xxslapbackends - enable_backends --enable_bdb - enable_dnssrv --enable_hdb - enable_ldap - enable_mdb - enable_meta -@@ -1583,9 +1580,7 @@ SLAPD (Standalone LDAP Daemon) Options: - - SLAPD Backend Options: - --enable-backends enable all available backends no|yes|mod -- --enable-bdb enable Berkeley DB backend no|yes|mod [yes] - --enable-dnssrv enable dnssrv backend no|yes|mod [no] -- --enable-hdb enable Hierarchical DB backend no|yes|mod [yes] - --enable-ldap enable ldap backend no|yes|mod [no] - --enable-mdb enable mdb database backend no|yes|mod [yes] - --enable-meta enable metadirectory backend no|yes|mod [no] -@@ -1637,6 +1632,7 @@ Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-subdir=DIR change default subdirectory used for installs -+ --with-moduledir=DIR change default module subdirectory used for installs - --with-cyrus-sasl with Cyrus SASL support [auto] - --with-fetch with fetch(3) URL support [auto] - --with-threads with threads [auto] -@@ -3570,6 +3566,24 @@ esac - fi - - -+ -+moduledir="openldap" -+ -+ -+# Check whether --with-moduledir was given. -+if test "${with_moduledir+set}" = set; then : -+ withval=$with_moduledir; case "$withval" in -+ no) moduledir="" -+ ;; -+ yes) -+ ;; -+ *) -+ moduledir="$withval" -+ ;; -+esac -+ -+fi -+ - # OpenLDAP --enable-debug - - # Check whether --enable-debug was given. -@@ -4126,9 +4140,7 @@ fi - - # end --enable-wrappers - --Backends="bdb \ -- dnssrv \ -- hdb \ -+Backends="dnssrv \ - ldap \ - mdb \ - meta \ -@@ -4167,27 +4179,6 @@ if test "${enable_backends+set}" = set; then : - fi - - # end --enable-backends --# OpenLDAP --enable-bdb -- -- # Check whether --enable-bdb was given. --if test "${enable_bdb+set}" = set; then : -- enableval=$enable_bdb; -- ol_arg=invalid -- for ol_val in no yes mod ; do -- if test "$enableval" = "$ol_val" ; then -- ol_arg="$ol_val" -- fi -- done -- if test "$ol_arg" = "invalid" ; then -- as_fn_error $? "bad value $enableval for --enable-bdb" "$LINENO" 5 -- fi -- ol_enable_bdb="$ol_arg" -- --else -- ol_enable_bdb=${ol_enable_backends:-yes} --fi -- --# end --enable-bdb - # OpenLDAP --enable-dnssrv - - # Check whether --enable-dnssrv was given. -@@ -4209,27 +4200,6 @@ else - fi - - # end --enable-dnssrv --# OpenLDAP --enable-hdb -- -- # Check whether --enable-hdb was given. --if test "${enable_hdb+set}" = set; then : -- enableval=$enable_hdb; -- ol_arg=invalid -- for ol_val in no yes mod ; do -- if test "$enableval" = "$ol_val" ; then -- ol_arg="$ol_val" -- fi -- done -- if test "$ol_arg" = "invalid" ; then -- as_fn_error $? "bad value $enableval for --enable-hdb" "$LINENO" 5 -- fi -- ol_enable_hdb="$ol_arg" -- --else -- ol_enable_hdb=${ol_enable_backends:-yes} --fi -- --# end --enable-hdb - # OpenLDAP --enable-ldap - - # Check whether --enable-ldap was given. -@@ -5108,9 +5078,7 @@ $as_echo "$as_me: WARNING: slapd disabled, ignoring --enable-$i argument" >&2;} - ol_enable_rewrite=no - - elif test $ol_enable_modules != yes && -- test $ol_enable_bdb = no && - test $ol_enable_dnssrv = no && -- test $ol_enable_hdb = no && - test $ol_enable_ldap = no && - test $ol_enable_mdb = no && - test $ol_enable_meta = no && -@@ -5150,11 +5118,22 @@ if test $ol_enable_spasswd = yes ; then - ol_with_cyrus_sasl=yes - fi - -+ - { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 - $as_echo "done" >&6; } - -+case $moduledir in -+ /*|\\*) -+ ;; -+ *) -+ moduledir=$libexecdir/$moduledir -+ ;; -+esac -+ -+ -+ -+ - LDAP_LIBS= --BDB_LIBS= - SLAPD_NDB_LIBS= - SLAPD_NDB_INCS= - LTHREAD_LIBS= -@@ -5169,9 +5148,7 @@ BUILD_THREAD=no - BUILD_SLAPI=no - SLAPD_SLAPI_DEPEND= - --BUILD_BDB=no - BUILD_DNSSRV=no --BUILD_HDB=no - BUILD_LDAP=no - BUILD_MDB=no - BUILD_META=no -@@ -22937,1388 +22914,178 @@ else - ol_cv_func_gethostbyaddr_r_nargs=0 - fi - --ol_link_bdb=no - --if test $ol_enable_bdb/$ol_enable_hdb != no/no; then -- ol_cv_berkeley_db=no --for ac_header in db.h --do : -- ac_fn_c_check_header_mongrel "$LINENO" "db.h" "ac_cv_header_db_h" "$ac_includes_default" --if test "x$ac_cv_header_db_h" = xyes; then : -- cat >>confdefs.h <<_ACEOF --#define HAVE_DB_H 1 --_ACEOF -- --fi -- --done -- --if test $ac_cv_header_db_h = yes; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB major version in db.h" >&5 --$as_echo_n "checking for Berkeley DB major version in db.h... " >&6; } --if ${ol_cv_bdb_major+:} false; then : -- $as_echo_n "(cached) " >&6 -+if test $ol_enable_dynamic = yes && test $enable_shared = yes ; then -+ BUILD_LIBS_DYNAMIC=shared -+ $as_echo "#define LDAP_LIBS_DYNAMIC 1" >>confdefs.h -+ LTSTATIC="" - else -- -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --#include --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif --__db_version DB_VERSION_MAJOR -- --_ACEOF -- set X `eval "$ac_cpp -P conftest.$ac_ext" | $EGREP __db_version` none none -- ol_cv_bdb_major=${3} -- -+ BUILD_LIBS_DYNAMIC=static -+ LTSTATIC="-static" - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ol_cv_bdb_major" >&5 --$as_echo "$ol_cv_bdb_major" >&6; } --case $ol_cv_bdb_major in [1-9]*) : ;; *) -- as_fn_error $? "Unknown Berkeley DB major version in db.h" "$LINENO" 5 ;; --esac -- --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB minor version in db.h" >&5 --$as_echo_n "checking for Berkeley DB minor version in db.h... " >&6; } --if ${ol_cv_bdb_minor+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --#include --#ifndef DB_VERSION_MINOR --# define DB_VERSION_MINOR 0 --#endif --__db_version DB_VERSION_MINOR - -+if test $ol_enable_wrappers != no ; then -+ for ac_header in tcpd.h -+do : -+ ac_fn_c_check_header_mongrel "$LINENO" "tcpd.h" "ac_cv_header_tcpd_h" "$ac_includes_default" -+if test "x$ac_cv_header_tcpd_h" = x""yes; then : -+ cat >>confdefs.h <<_ACEOF -+#define HAVE_TCPD_H 1 - _ACEOF -- set X `eval "$ac_cpp -P conftest.$ac_ext" | $EGREP __db_version` none none -- ol_cv_bdb_minor=${3} -- --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ol_cv_bdb_minor" >&5 --$as_echo "$ol_cv_bdb_minor" >&6; } --case $ol_cv_bdb_minor in [0-9]*) : ;; *) -- as_fn_error $? "Unknown Berkeley DB minor version in db.h" "$LINENO" 5 ;; --esac - -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Berkeley DB version supported by BDB/HDB backends" >&5 --$as_echo_n "checking if Berkeley DB version supported by BDB/HDB backends... " >&6; } --if ${ol_cv_bdb_compat+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TCP wrappers library" >&5 -+$as_echo_n "checking for TCP wrappers library... " >&6; } -+ save_LIBS="$LIBS" -+ LIBS="$LIBS -lwrap" -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - --#include -+#include -+int allow_severity = 0; -+int deny_severity = 0; - -- /* this check could be improved */ --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif --#ifndef DB_VERSION_MINOR --# define DB_VERSION_MINOR 0 --#endif --#ifndef DB_VERSION_PATCH --# define DB_VERSION_PATCH 0 --#endif -+struct request_info *req; - --#define DB_VERSION_FULL ((DB_VERSION_MAJOR<<16)|(DB_VERSION_MINOR<<8)|DB_VERSION_PATCH) -+int -+main () -+{ - --/* require 4.4 or later, but less than 6.0.20 */ --#if DB_VERSION_FULL >= 0x040400 && DB_VERSION_FULL < 0x060014 -- __db_version_compat --#endif --#if DB_VERSION_FULL >= 0x060014 --#error "BerkeleyDB 6.0.20+ license is incompatible with LDAP" --#endif -+hosts_access(req) - -+ ; -+ return 0; -+} - _ACEOF --if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | -- $EGREP "__db_version_compat" >/dev/null 2>&1; then : -- ol_cv_bdb_compat=yes --else -- ol_cv_bdb_compat=no --fi --rm -f conftest* -- --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ol_cv_bdb_compat" >&5 --$as_echo "$ol_cv_bdb_compat" >&6; } -- -- -- if test $ol_cv_bdb_compat != yes ; then -- as_fn_error $? "BerkeleyDB version incompatible with BDB/HDB backends" "$LINENO" 5 -- fi -- -- ol_cv_lib_db=no -- --if test $ol_cv_bdb_major = 5 ; then -- if test $ol_cv_lib_db = no ; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB link (-ldb-5.$ol_cv_bdb_minor)" >&5 --$as_echo_n "checking for Berkeley DB link (-ldb-5.$ol_cv_bdb_minor)... " >&6; } --if ${ol_cv_db_db_5_dot_m+:} false; then : -- $as_echo_n "(cached) " >&6 -+if ac_fn_c_try_link "$LINENO"; then : -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: -lwrap" >&5 -+$as_echo "-lwrap" >&6; } -+ have_wrappers=yes -+ LIBS="$save_LIBS" - else -- -- ol_DB_LIB=-ldb-5.$ol_cv_bdb_minor -- ol_LIBS=$LIBS -- LIBS="$ol_DB_LIB $LTHREAD_LIBS $LIBS" -- -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ LIBS="$LIBS -lnsl" -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - --#ifdef HAVE_DB_185_H --# include --#else --# include --#endif -- --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif -+#include -+int allow_severity = 0; -+int deny_severity = 0; - --#ifndef NULL --#define NULL ((void*)0) --#endif -+struct request_info *req; - - int - main () - { - --#if DB_VERSION_MAJOR > 2 -- db_env_create( NULL, 0 ); --#elif DB_VERSION_MAJOR > 1 -- db_appexit( NULL ); --#else -- (void) dbopen( NULL, 0, 0, 0, NULL); --#endif -+hosts_access(req) - - ; - return 0; - } - _ACEOF - if ac_fn_c_try_link "$LINENO"; then : -- ol_cv_db_db_5_dot_m=yes -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: -lwrap -lnsl" >&5 -+$as_echo "-lwrap -lnsl" >&6; } -+ have_wrappers=yes -+ LIBS="$save_LIBS -lnsl" - else -- ol_cv_db_db_5_dot_m=no -+ -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+ have_wrappers=no -+ LIBS=$save_LIBS - fi - rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -- -- LIBS="$ol_LIBS" -- - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ol_cv_db_db_5_dot_m" >&5 --$as_echo "$ol_cv_db_db_5_dot_m" >&6; } -- -- if test $ol_cv_db_db_5_dot_m = yes ; then -- ol_cv_lib_db=-ldb-5.$ol_cv_bdb_minor -- fi -+rm -f core conftest.err conftest.$ac_objext \ -+ conftest$ac_exeext conftest.$ac_ext -+else -+ have_wrappers=no - fi - -- if test $ol_cv_lib_db = no ; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB link (-ldb5$ol_cv_bdb_minor)" >&5 --$as_echo_n "checking for Berkeley DB link (-ldb5$ol_cv_bdb_minor)... " >&6; } --if ${ol_cv_db_db5m+:} false; then : -- $as_echo_n "(cached) " >&6 --else -+done - -- ol_DB_LIB=-ldb5$ol_cv_bdb_minor -- ol_LIBS=$LIBS -- LIBS="$ol_DB_LIB $LTHREAD_LIBS $LIBS" - -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -+ if test $have_wrappers = yes ; then - --#ifdef HAVE_DB_185_H --# include --#else --# include --#endif -+$as_echo "#define HAVE_TCPD 1" >>confdefs.h - --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif -+ WRAP_LIBS="-lwrap" -+ elif test $ol_enable_wrappers = yes ; then -+ as_fn_error "could not find TCP wrappers, select appropriate options or disable" "$LINENO" 5 -+ else -+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not find TCP wrappers, support disabled" >&5 -+$as_echo "$as_me: WARNING: could not find TCP wrappers, support disabled" >&2;} -+ WRAP_LIBS="" -+ fi -+fi - --#ifndef NULL --#define NULL ((void*)0) --#endif -+if test $ol_enable_syslog != no ; then -+ ac_fn_c_check_func "$LINENO" "openlog" "ac_cv_func_openlog" -+if test "x$ac_cv_func_openlog" = x""yes; then : - --int --main () --{ -+fi - --#if DB_VERSION_MAJOR > 2 -- db_env_create( NULL, 0 ); --#elif DB_VERSION_MAJOR > 1 -- db_appexit( NULL ); --#else -- (void) dbopen( NULL, 0, 0, 0, NULL); --#endif -+ if test $ac_cv_func_openlog = no && test $ol_enable_syslog = yes; then -+ { as_fn_set_status select appropriate options or disable -+as_fn_error "could not find syslog" "$LINENO" 5; } -+ fi -+ ol_enable_syslog=$ac_cv_func_openlog -+fi - -- ; -- return 0; --} -+ol_link_sql=no -+if test $ol_enable_sql != no ; then -+ for ac_header in sql.h sqlext.h -+do : -+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -+eval as_val=\$$as_ac_Header -+ if test "x$as_val" = x""yes; then : -+ cat >>confdefs.h <<_ACEOF -+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 - _ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- ol_cv_db_db5m=yes -+ - else -- ol_cv_db_db5m=no --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext - -- LIBS="$ol_LIBS" -+ as_fn_error "could not locate SQL headers" "$LINENO" 5 - - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ol_cv_db_db5m" >&5 --$as_echo "$ol_cv_db_db5m" >&6; } - -- if test $ol_cv_db_db5m = yes ; then -- ol_cv_lib_db=-ldb5$ol_cv_bdb_minor -+done -+ -+ -+ sql_LIBS="$LIBS" -+ LIBS="$LTHREAD_LIBS $LIBS" -+ -+ if test $ol_with_odbc = auto ; then -+ ol_with_odbc="iodbc unixodbc odbc32" - fi --fi - -- if test $ol_cv_lib_db = no ; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB link (-ldb-5$ol_cv_bdb_minor)" >&5 --$as_echo_n "checking for Berkeley DB link (-ldb-5$ol_cv_bdb_minor)... " >&6; } --if ${ol_cv_db_db_5m+:} false; then : -+ for odbc in $ol_with_odbc ; do -+ if test $ol_link_sql = no ; then -+ case $odbc in -+ iodbc) -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SQLDriverConnect in -liodbc" >&5 -+$as_echo_n "checking for SQLDriverConnect in -liodbc... " >&6; } -+if test "${ac_cv_lib_iodbc_SQLDriverConnect+set}" = set; then : - $as_echo_n "(cached) " >&6 - else -- -- ol_DB_LIB=-ldb-5$ol_cv_bdb_minor -- ol_LIBS=$LIBS -- LIBS="$ol_DB_LIB $LTHREAD_LIBS $LIBS" -- -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ ac_check_lib_save_LIBS=$LIBS -+LIBS="-liodbc $LIBS" -+cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - --#ifdef HAVE_DB_185_H --# include --#else --# include --#endif -- --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif -- --#ifndef NULL --#define NULL ((void*)0) -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ -+#ifdef __cplusplus -+extern "C" - #endif -- -+char SQLDriverConnect (); - int - main () - { -- --#if DB_VERSION_MAJOR > 2 -- db_env_create( NULL, 0 ); --#elif DB_VERSION_MAJOR > 1 -- db_appexit( NULL ); --#else -- (void) dbopen( NULL, 0, 0, 0, NULL); --#endif -- -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- ol_cv_db_db_5m=yes --else -- ol_cv_db_db_5m=no --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext -- -- LIBS="$ol_LIBS" -- --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ol_cv_db_db_5m" >&5 --$as_echo "$ol_cv_db_db_5m" >&6; } -- -- if test $ol_cv_db_db_5m = yes ; then -- ol_cv_lib_db=-ldb-5$ol_cv_bdb_minor -- fi --fi -- -- if test $ol_cv_lib_db = no ; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB link (-ldb-5-$ol_cv_bdb_minor)" >&5 --$as_echo_n "checking for Berkeley DB link (-ldb-5-$ol_cv_bdb_minor)... " >&6; } --if ${ol_cv_db_db_5_m+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- -- ol_DB_LIB=-ldb-5-$ol_cv_bdb_minor -- ol_LIBS=$LIBS -- LIBS="$ol_DB_LIB $LTHREAD_LIBS $LIBS" -- -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --#ifdef HAVE_DB_185_H --# include --#else --# include --#endif -- --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif -- --#ifndef NULL --#define NULL ((void*)0) --#endif -- --int --main () --{ -- --#if DB_VERSION_MAJOR > 2 -- db_env_create( NULL, 0 ); --#elif DB_VERSION_MAJOR > 1 -- db_appexit( NULL ); --#else -- (void) dbopen( NULL, 0, 0, 0, NULL); --#endif -- -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- ol_cv_db_db_5_m=yes --else -- ol_cv_db_db_5_m=no --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext -- -- LIBS="$ol_LIBS" -- --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ol_cv_db_db_5_m" >&5 --$as_echo "$ol_cv_db_db_5_m" >&6; } -- -- if test $ol_cv_db_db_5_m = yes ; then -- ol_cv_lib_db=-ldb-5-$ol_cv_bdb_minor -- fi --fi -- -- if test $ol_cv_lib_db = no ; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB link (-ldb-5)" >&5 --$as_echo_n "checking for Berkeley DB link (-ldb-5)... " >&6; } --if ${ol_cv_db_db_5+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- -- ol_DB_LIB=-ldb-5 -- ol_LIBS=$LIBS -- LIBS="$ol_DB_LIB $LTHREAD_LIBS $LIBS" -- -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --#ifdef HAVE_DB_185_H --# include --#else --# include --#endif -- --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif -- --#ifndef NULL --#define NULL ((void*)0) --#endif -- --int --main () --{ -- --#if DB_VERSION_MAJOR > 2 -- db_env_create( NULL, 0 ); --#elif DB_VERSION_MAJOR > 1 -- db_appexit( NULL ); --#else -- (void) dbopen( NULL, 0, 0, 0, NULL); --#endif -- -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- ol_cv_db_db_5=yes --else -- ol_cv_db_db_5=no --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext -- -- LIBS="$ol_LIBS" -- --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ol_cv_db_db_5" >&5 --$as_echo "$ol_cv_db_db_5" >&6; } -- -- if test $ol_cv_db_db_5 = yes ; then -- ol_cv_lib_db=-ldb-5 -- fi --fi -- -- if test $ol_cv_lib_db = no ; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB link (-ldb5)" >&5 --$as_echo_n "checking for Berkeley DB link (-ldb5)... " >&6; } --if ${ol_cv_db_db5+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- -- ol_DB_LIB=-ldb5 -- ol_LIBS=$LIBS -- LIBS="$ol_DB_LIB $LTHREAD_LIBS $LIBS" -- -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --#ifdef HAVE_DB_185_H --# include --#else --# include --#endif -- --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif -- --#ifndef NULL --#define NULL ((void*)0) --#endif -- --int --main () --{ -- --#if DB_VERSION_MAJOR > 2 -- db_env_create( NULL, 0 ); --#elif DB_VERSION_MAJOR > 1 -- db_appexit( NULL ); --#else -- (void) dbopen( NULL, 0, 0, 0, NULL); --#endif -- -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- ol_cv_db_db5=yes --else -- ol_cv_db_db5=no --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext -- -- LIBS="$ol_LIBS" -- --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ol_cv_db_db5" >&5 --$as_echo "$ol_cv_db_db5" >&6; } -- -- if test $ol_cv_db_db5 = yes ; then -- ol_cv_lib_db=-ldb5 -- fi --fi -- --elif test $ol_cv_bdb_major = 4 ; then -- if test $ol_cv_lib_db = no ; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB link (-ldb-4.$ol_cv_bdb_minor)" >&5 --$as_echo_n "checking for Berkeley DB link (-ldb-4.$ol_cv_bdb_minor)... " >&6; } --if ${ol_cv_db_db_4_dot_m+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- -- ol_DB_LIB=-ldb-4.$ol_cv_bdb_minor -- ol_LIBS=$LIBS -- LIBS="$ol_DB_LIB $LTHREAD_LIBS $LIBS" -- -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --#ifdef HAVE_DB_185_H --# include --#else --# include --#endif -- --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif -- --#ifndef NULL --#define NULL ((void*)0) --#endif -- --int --main () --{ -- --#if DB_VERSION_MAJOR > 2 -- db_env_create( NULL, 0 ); --#elif DB_VERSION_MAJOR > 1 -- db_appexit( NULL ); --#else -- (void) dbopen( NULL, 0, 0, 0, NULL); --#endif -- -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- ol_cv_db_db_4_dot_m=yes --else -- ol_cv_db_db_4_dot_m=no --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext -- -- LIBS="$ol_LIBS" -- --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ol_cv_db_db_4_dot_m" >&5 --$as_echo "$ol_cv_db_db_4_dot_m" >&6; } -- -- if test $ol_cv_db_db_4_dot_m = yes ; then -- ol_cv_lib_db=-ldb-4.$ol_cv_bdb_minor -- fi --fi -- -- if test $ol_cv_lib_db = no ; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB link (-ldb4$ol_cv_bdb_minor)" >&5 --$as_echo_n "checking for Berkeley DB link (-ldb4$ol_cv_bdb_minor)... " >&6; } --if ${ol_cv_db_db4m+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- -- ol_DB_LIB=-ldb4$ol_cv_bdb_minor -- ol_LIBS=$LIBS -- LIBS="$ol_DB_LIB $LTHREAD_LIBS $LIBS" -- -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --#ifdef HAVE_DB_185_H --# include --#else --# include --#endif -- --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif -- --#ifndef NULL --#define NULL ((void*)0) --#endif -- --int --main () --{ -- --#if DB_VERSION_MAJOR > 2 -- db_env_create( NULL, 0 ); --#elif DB_VERSION_MAJOR > 1 -- db_appexit( NULL ); --#else -- (void) dbopen( NULL, 0, 0, 0, NULL); --#endif -- -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- ol_cv_db_db4m=yes --else -- ol_cv_db_db4m=no --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext -- -- LIBS="$ol_LIBS" -- --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ol_cv_db_db4m" >&5 --$as_echo "$ol_cv_db_db4m" >&6; } -- -- if test $ol_cv_db_db4m = yes ; then -- ol_cv_lib_db=-ldb4$ol_cv_bdb_minor -- fi --fi -- -- if test $ol_cv_lib_db = no ; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB link (-ldb-4$ol_cv_bdb_minor)" >&5 --$as_echo_n "checking for Berkeley DB link (-ldb-4$ol_cv_bdb_minor)... " >&6; } --if ${ol_cv_db_db_4m+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- -- ol_DB_LIB=-ldb-4$ol_cv_bdb_minor -- ol_LIBS=$LIBS -- LIBS="$ol_DB_LIB $LTHREAD_LIBS $LIBS" -- -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --#ifdef HAVE_DB_185_H --# include --#else --# include --#endif -- --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif -- --#ifndef NULL --#define NULL ((void*)0) --#endif -- --int --main () --{ -- --#if DB_VERSION_MAJOR > 2 -- db_env_create( NULL, 0 ); --#elif DB_VERSION_MAJOR > 1 -- db_appexit( NULL ); --#else -- (void) dbopen( NULL, 0, 0, 0, NULL); --#endif -- -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- ol_cv_db_db_4m=yes --else -- ol_cv_db_db_4m=no --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext -- -- LIBS="$ol_LIBS" -- --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ol_cv_db_db_4m" >&5 --$as_echo "$ol_cv_db_db_4m" >&6; } -- -- if test $ol_cv_db_db_4m = yes ; then -- ol_cv_lib_db=-ldb-4$ol_cv_bdb_minor -- fi --fi -- -- if test $ol_cv_lib_db = no ; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB link (-ldb-4-$ol_cv_bdb_minor)" >&5 --$as_echo_n "checking for Berkeley DB link (-ldb-4-$ol_cv_bdb_minor)... " >&6; } --if ${ol_cv_db_db_4_m+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- -- ol_DB_LIB=-ldb-4-$ol_cv_bdb_minor -- ol_LIBS=$LIBS -- LIBS="$ol_DB_LIB $LTHREAD_LIBS $LIBS" -- -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --#ifdef HAVE_DB_185_H --# include --#else --# include --#endif -- --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif -- --#ifndef NULL --#define NULL ((void*)0) --#endif -- --int --main () --{ -- --#if DB_VERSION_MAJOR > 2 -- db_env_create( NULL, 0 ); --#elif DB_VERSION_MAJOR > 1 -- db_appexit( NULL ); --#else -- (void) dbopen( NULL, 0, 0, 0, NULL); --#endif -- -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- ol_cv_db_db_4_m=yes --else -- ol_cv_db_db_4_m=no --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext -- -- LIBS="$ol_LIBS" -- --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ol_cv_db_db_4_m" >&5 --$as_echo "$ol_cv_db_db_4_m" >&6; } -- -- if test $ol_cv_db_db_4_m = yes ; then -- ol_cv_lib_db=-ldb-4-$ol_cv_bdb_minor -- fi --fi -- -- if test $ol_cv_lib_db = no ; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB link (-ldb-4)" >&5 --$as_echo_n "checking for Berkeley DB link (-ldb-4)... " >&6; } --if ${ol_cv_db_db_4+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- -- ol_DB_LIB=-ldb-4 -- ol_LIBS=$LIBS -- LIBS="$ol_DB_LIB $LTHREAD_LIBS $LIBS" -- -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --#ifdef HAVE_DB_185_H --# include --#else --# include --#endif -- --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif -- --#ifndef NULL --#define NULL ((void*)0) --#endif -- --int --main () --{ -- --#if DB_VERSION_MAJOR > 2 -- db_env_create( NULL, 0 ); --#elif DB_VERSION_MAJOR > 1 -- db_appexit( NULL ); --#else -- (void) dbopen( NULL, 0, 0, 0, NULL); --#endif -- -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- ol_cv_db_db_4=yes --else -- ol_cv_db_db_4=no --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext -- -- LIBS="$ol_LIBS" -- --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ol_cv_db_db_4" >&5 --$as_echo "$ol_cv_db_db_4" >&6; } -- -- if test $ol_cv_db_db_4 = yes ; then -- ol_cv_lib_db=-ldb-4 -- fi --fi -- -- if test $ol_cv_lib_db = no ; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB link (-ldb4)" >&5 --$as_echo_n "checking for Berkeley DB link (-ldb4)... " >&6; } --if ${ol_cv_db_db4+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- -- ol_DB_LIB=-ldb4 -- ol_LIBS=$LIBS -- LIBS="$ol_DB_LIB $LTHREAD_LIBS $LIBS" -- -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --#ifdef HAVE_DB_185_H --# include --#else --# include --#endif -- --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif -- --#ifndef NULL --#define NULL ((void*)0) --#endif -- --int --main () --{ -- --#if DB_VERSION_MAJOR > 2 -- db_env_create( NULL, 0 ); --#elif DB_VERSION_MAJOR > 1 -- db_appexit( NULL ); --#else -- (void) dbopen( NULL, 0, 0, 0, NULL); --#endif -- -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- ol_cv_db_db4=yes --else -- ol_cv_db_db4=no --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext -- -- LIBS="$ol_LIBS" -- --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ol_cv_db_db4" >&5 --$as_echo "$ol_cv_db_db4" >&6; } -- -- if test $ol_cv_db_db4 = yes ; then -- ol_cv_lib_db=-ldb4 -- fi --fi -- --fi --if test $ol_cv_lib_db = no ; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB link (-ldb)" >&5 --$as_echo_n "checking for Berkeley DB link (-ldb)... " >&6; } --if ${ol_cv_db_db+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- -- ol_DB_LIB=-ldb -- ol_LIBS=$LIBS -- LIBS="$ol_DB_LIB $LTHREAD_LIBS $LIBS" -- -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --#ifdef HAVE_DB_185_H --# include --#else --# include --#endif -- --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif -- --#ifndef NULL --#define NULL ((void*)0) --#endif -- --int --main () --{ -- --#if DB_VERSION_MAJOR > 2 -- db_env_create( NULL, 0 ); --#elif DB_VERSION_MAJOR > 1 -- db_appexit( NULL ); --#else -- (void) dbopen( NULL, 0, 0, 0, NULL); --#endif -- -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- ol_cv_db_db=yes --else -- ol_cv_db_db=no --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext -- -- LIBS="$ol_LIBS" -- --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ol_cv_db_db" >&5 --$as_echo "$ol_cv_db_db" >&6; } -- -- if test $ol_cv_db_db = yes ; then -- ol_cv_lib_db=-ldb -- fi --fi -- --if test $ol_cv_lib_db = no ; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB link (default)" >&5 --$as_echo_n "checking for Berkeley DB link (default)... " >&6; } --if ${ol_cv_db_none+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- -- ol_DB_LIB= -- ol_LIBS=$LIBS -- LIBS="$ol_DB_LIB $LTHREAD_LIBS $LIBS" -- -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --#ifdef HAVE_DB_185_H --# include --#else --# include --#endif -- --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif -- --#ifndef NULL --#define NULL ((void*)0) --#endif -- --int --main () --{ -- --#if DB_VERSION_MAJOR > 2 -- db_env_create( NULL, 0 ); --#elif DB_VERSION_MAJOR > 1 -- db_appexit( NULL ); --#else -- (void) dbopen( NULL, 0, 0, 0, NULL); --#endif -- -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- ol_cv_db_none=yes --else -- ol_cv_db_none=no --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext -- -- LIBS="$ol_LIBS" -- --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ol_cv_db_none" >&5 --$as_echo "$ol_cv_db_none" >&6; } -- -- if test $ol_cv_db_none = yes ; then -- ol_cv_lib_db=yes -- fi --fi -- -- -- if test "$ol_cv_lib_db" != no ; then -- ol_cv_berkeley_db=yes -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB library and header version match" >&5 --$as_echo_n "checking for Berkeley DB library and header version match... " >&6; } --if ${ol_cv_berkeley_db_version+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- -- ol_LIBS="$LIBS" -- LIBS="$LTHREAD_LIBS $LIBS" -- if test $ol_cv_lib_db != yes ; then -- LIBS="$ol_cv_lib_db $LIBS" -- fi -- -- if test "$cross_compiling" = yes; then : -- ol_cv_berkeley_db_version=cross --else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --#ifdef HAVE_DB_185_H -- choke me; --#else --#include --#endif --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif --#ifndef NULL --#define NULL ((void *)0) --#endif --main() --{ --#if DB_VERSION_MAJOR > 1 -- char *version; -- int major, minor, patch; -- -- version = db_version( &major, &minor, &patch ); -- -- if( major != DB_VERSION_MAJOR || -- minor != DB_VERSION_MINOR || -- patch != DB_VERSION_PATCH ) -- { -- printf("Berkeley DB version mismatch\n" -- "\theader: %s\n\tlibrary: %s\n", -- DB_VERSION_STRING, version); -- return 1; -- } --#endif -- -- return 0; --} --_ACEOF --if ac_fn_c_try_run "$LINENO"; then : -- ol_cv_berkeley_db_version=yes --else -- ol_cv_berkeley_db_version=no --fi --rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ -- conftest.$ac_objext conftest.beam conftest.$ac_ext --fi -- -- -- LIBS="$ol_LIBS" -- --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ol_cv_berkeley_db_version" >&5 --$as_echo "$ol_cv_berkeley_db_version" >&6; } -- -- if test $ol_cv_berkeley_db_version = no ; then -- as_fn_error $? "Berkeley DB version mismatch" "$LINENO" 5 -- fi -- -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB thread support" >&5 --$as_echo_n "checking for Berkeley DB thread support... " >&6; } --if ${ol_cv_berkeley_db_thread+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- -- ol_LIBS="$LIBS" -- LIBS="$LTHREAD_LIBS $LIBS" -- if test $ol_cv_lib_db != yes ; then -- LIBS="$ol_cv_lib_db $LIBS" -- fi -- -- if test "$cross_compiling" = yes; then : -- ol_cv_berkeley_db_thread=cross --else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --#ifdef HAVE_DB_185_H -- choke me; --#else --#include --#endif --#ifndef NULL --#define NULL ((void *)0) --#endif --main() --{ -- int rc; -- u_int32_t flags = DB_CREATE | --#ifdef DB_PRIVATE -- DB_PRIVATE | --#endif -- DB_THREAD; -- --#if DB_VERSION_MAJOR > 2 -- DB_ENV *env = NULL; -- -- rc = db_env_create( &env, 0 ); -- -- flags |= DB_INIT_MPOOL; --#ifdef DB_MPOOL_PRIVATE -- flags |= DB_MPOOL_PRIVATE; --#endif -- -- if( rc ) { -- printf("BerkeleyDB: %s\n", db_strerror(rc) ); -- return rc; -- } -- --#if (DB_VERSION_MAJOR > 3) || (DB_VERSION_MINOR >= 1) -- rc = (env->open)( env, NULL, flags, 0 ); --#else -- rc = (env->open)( env, NULL, NULL, flags, 0 ); --#endif -- -- if ( rc == 0 ) { -- rc = env->close( env, 0 ); -- } -- -- if( rc ) { -- printf("BerkeleyDB: %s\n", db_strerror(rc) ); -- return rc; -- } -- --#else -- DB_ENV env; -- memset( &env, '\0', sizeof(env) ); -- -- rc = db_appinit( NULL, NULL, &env, flags ); -- -- if( rc == 0 ) { -- db_appexit( &env ); -- } -- -- unlink("__db_mpool.share"); -- unlink("__db_lock.share"); --#endif -- -- return rc; --} --_ACEOF --if ac_fn_c_try_run "$LINENO"; then : -- ol_cv_berkeley_db_thread=yes --else -- ol_cv_berkeley_db_thread=no --fi --rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ -- conftest.$ac_objext conftest.beam conftest.$ac_ext --fi -- -- -- LIBS="$ol_LIBS" -- --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ol_cv_berkeley_db_thread" >&5 --$as_echo "$ol_cv_berkeley_db_thread" >&6; } -- -- if test $ol_cv_berkeley_db_thread != no ; then -- --$as_echo "#define HAVE_BERKELEY_DB_THREAD 1" >>confdefs.h -- -- fi -- -- fi --fi -- -- -- if test $ol_cv_berkeley_db = no ; then -- as_fn_error $? "BDB/HDB: BerkeleyDB not available" "$LINENO" 5 -- fi -- -- --$as_echo "#define HAVE_BERKELEY_DB 1" >>confdefs.h -- -- -- if test $ol_cv_lib_db != yes ; then -- BDB_LIBS="$BDB_LIBS $ol_cv_lib_db" -- fi -- -- if test $ol_enable_bdb/$ol_enable_hdb != mod/mod ; then -- if test $ol_enable_bdb = yes -o $ol_enable_hdb = yes ; then -- SLAPD_LIBS="$SLAPD_LIBS \$(BDB_LIBS)" -- fi -- fi -- -- ol_link_bdb=yes --fi -- -- --if test $ol_enable_dynamic = yes && test $enable_shared = yes ; then -- BUILD_LIBS_DYNAMIC=shared -- --$as_echo "#define LDAP_LIBS_DYNAMIC 1" >>confdefs.h -- -- LTSTATIC="" --else -- BUILD_LIBS_DYNAMIC=static -- LTSTATIC="-static" --fi -- --if test $ol_enable_wrappers != no ; then -- for ac_header in tcpd.h --do : -- ac_fn_c_check_header_mongrel "$LINENO" "tcpd.h" "ac_cv_header_tcpd_h" "$ac_includes_default" --if test "x$ac_cv_header_tcpd_h" = xyes; then : -- cat >>confdefs.h <<_ACEOF --#define HAVE_TCPD_H 1 --_ACEOF -- -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TCP wrappers library" >&5 --$as_echo_n "checking for TCP wrappers library... " >&6; } -- save_LIBS="$LIBS" -- LIBS="$LIBS -lwrap" -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --#include --int allow_severity = 0; --int deny_severity = 0; -- --struct request_info *req; -- --int --main () --{ -- --hosts_access(req) -- -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: -lwrap" >&5 --$as_echo "-lwrap" >&6; } -- have_wrappers=yes -- LIBS="$save_LIBS" --else -- -- LIBS="$LIBS -lnsl" -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --#include --int allow_severity = 0; --int deny_severity = 0; -- --struct request_info *req; -- --int --main () --{ -- --hosts_access(req) -- -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: -lwrap -lnsl" >&5 --$as_echo "-lwrap -lnsl" >&6; } -- have_wrappers=yes -- LIBS="$save_LIBS -lnsl" --else -- -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 --$as_echo "no" >&6; } -- have_wrappers=no -- LIBS=$save_LIBS --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --else -- have_wrappers=no --fi -- --done -- -- -- if test $have_wrappers = yes ; then -- --$as_echo "#define HAVE_TCPD 1" >>confdefs.h -- -- WRAP_LIBS="-lwrap" -- elif test $ol_enable_wrappers = yes ; then -- as_fn_error $? "could not find TCP wrappers, select apppropriate options or disable" "$LINENO" 5 -- else -- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not find TCP wrappers, support disabled" >&5 --$as_echo "$as_me: WARNING: could not find TCP wrappers, support disabled" >&2;} -- WRAP_LIBS="" -- fi --fi -- --if test $ol_enable_syslog != no ; then -- ac_fn_c_check_func "$LINENO" "openlog" "ac_cv_func_openlog" --if test "x$ac_cv_func_openlog" = xyes; then : -- --fi -- -- if test $ac_cv_func_openlog = no && test $ol_enable_syslog = yes; then -- as_fn_error select appropriate options or disable "could not find syslog" "$LINENO" 5 -- fi -- ol_enable_syslog=$ac_cv_func_openlog --fi -- --ol_link_sql=no --if test $ol_enable_sql != no ; then -- for ac_header in sql.h sqlext.h --do : -- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` --ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" --if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : -- cat >>confdefs.h <<_ACEOF --#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 --_ACEOF -- --else -- -- as_fn_error $? "could not locate SQL headers" "$LINENO" 5 -- --fi -- --done -- -- -- sql_LIBS="$LIBS" -- LIBS="$LTHREAD_LIBS $LIBS" -- -- if test $ol_with_odbc = auto ; then -- ol_with_odbc="iodbc unixodbc odbc32" -- fi -- -- for odbc in $ol_with_odbc ; do -- if test $ol_link_sql = no ; then -- case $odbc in -- iodbc) -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SQLDriverConnect in -liodbc" >&5 --$as_echo_n "checking for SQLDriverConnect in -liodbc... " >&6; } --if ${ac_cv_lib_iodbc_SQLDriverConnect+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- ac_check_lib_save_LIBS=$LIBS --LIBS="-liodbc $LIBS" --cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --/* Override any GCC internal prototype to avoid an error. -- Use char because int might match the return type of a GCC -- builtin and then its argument prototype would still apply. */ --#ifdef __cplusplus --extern "C" --#endif --char SQLDriverConnect (); --int --main () --{ --return SQLDriverConnect (); -+return SQLDriverConnect (); - ; - return 0; - } -@@ -26763,23 +25530,6 @@ _ACEOF - - fi - --if test "$ol_enable_bdb" != no ; then -- BUILD_SLAPD=yes -- BUILD_BDB=$ol_enable_bdb -- if test "$ol_enable_bdb" = mod ; then -- SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-bdb" -- MFLAG=SLAPD_MOD_DYNAMIC -- else -- SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-bdb" -- MFLAG=SLAPD_MOD_STATIC -- fi -- --cat >>confdefs.h <<_ACEOF --#define SLAPD_BDB $MFLAG --_ACEOF -- --fi -- - if test "$ol_enable_dnssrv" != no ; then - BUILD_SLAPD=yes - BUILD_DNSSRV=$ol_enable_dnssrv -@@ -26797,23 +25547,6 @@ _ACEOF - - fi - --if test "$ol_enable_hdb" != no ; then -- BUILD_SLAPD=yes -- BUILD_HDB=$ol_enable_hdb -- if test "$ol_enable_hdb" = mod ; then -- SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-hdb" -- MFLAG=SLAPD_MOD_DYNAMIC -- else -- SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-hdb" -- MFLAG=SLAPD_MOD_STATIC -- fi -- --cat >>confdefs.h <<_ACEOF --#define SLAPD_HDB $MFLAG --_ACEOF -- --fi -- - if test "$ol_enable_ldap" != no ; then - BUILD_SLAPD=yes - BUILD_LDAP=$ol_enable_ldap -@@ -27447,7 +26180,7 @@ fi - - - --ac_config_files="$ac_config_files Makefile:build/top.mk:Makefile.in:build/dir.mk doc/Makefile:build/top.mk:doc/Makefile.in:build/dir.mk doc/man/Makefile:build/top.mk:doc/man/Makefile.in:build/dir.mk doc/man/man1/Makefile:build/top.mk:doc/man/man1/Makefile.in:build/man.mk doc/man/man3/Makefile:build/top.mk:doc/man/man3/Makefile.in:build/man.mk doc/man/man5/Makefile:build/top.mk:doc/man/man5/Makefile.in:build/man.mk doc/man/man8/Makefile:build/top.mk:doc/man/man8/Makefile.in:build/man.mk clients/Makefile:build/top.mk:clients/Makefile.in:build/dir.mk clients/tools/Makefile:build/top.mk:clients/tools/Makefile.in:build/rules.mk include/Makefile:build/top.mk:include/Makefile.in libraries/Makefile:build/top.mk:libraries/Makefile.in:build/dir.mk libraries/liblber/Makefile:build/top.mk:libraries/liblber/Makefile.in:build/lib.mk:build/lib-shared.mk libraries/libldap/Makefile:build/top.mk:libraries/libldap/Makefile.in:build/lib.mk:build/lib-shared.mk libraries/libldap_r/Makefile:build/top.mk:libraries/libldap_r/Makefile.in:build/lib.mk:build/lib-shared.mk libraries/liblunicode/Makefile:build/top.mk:libraries/liblunicode/Makefile.in:build/lib.mk:build/lib-static.mk libraries/liblutil/Makefile:build/top.mk:libraries/liblutil/Makefile.in:build/lib.mk:build/lib-static.mk libraries/librewrite/Makefile:build/top.mk:libraries/librewrite/Makefile.in:build/lib.mk:build/lib-static.mk servers/Makefile:build/top.mk:servers/Makefile.in:build/dir.mk servers/slapd/Makefile:build/top.mk:servers/slapd/Makefile.in:build/srv.mk servers/slapd/back-bdb/Makefile:build/top.mk:servers/slapd/back-bdb/Makefile.in:build/mod.mk servers/slapd/back-dnssrv/Makefile:build/top.mk:servers/slapd/back-dnssrv/Makefile.in:build/mod.mk servers/slapd/back-hdb/Makefile:build/top.mk:servers/slapd/back-hdb/Makefile.in:build/mod.mk servers/slapd/back-ldap/Makefile:build/top.mk:servers/slapd/back-ldap/Makefile.in:build/mod.mk servers/slapd/back-ldif/Makefile:build/top.mk:servers/slapd/back-ldif/Makefile.in:build/mod.mk servers/slapd/back-mdb/Makefile:build/top.mk:servers/slapd/back-mdb/Makefile.in:build/mod.mk servers/slapd/back-meta/Makefile:build/top.mk:servers/slapd/back-meta/Makefile.in:build/mod.mk servers/slapd/back-monitor/Makefile:build/top.mk:servers/slapd/back-monitor/Makefile.in:build/mod.mk servers/slapd/back-ndb/Makefile:build/top.mk:servers/slapd/back-ndb/Makefile.in:build/mod.mk servers/slapd/back-null/Makefile:build/top.mk:servers/slapd/back-null/Makefile.in:build/mod.mk servers/slapd/back-passwd/Makefile:build/top.mk:servers/slapd/back-passwd/Makefile.in:build/mod.mk servers/slapd/back-perl/Makefile:build/top.mk:servers/slapd/back-perl/Makefile.in:build/mod.mk servers/slapd/back-relay/Makefile:build/top.mk:servers/slapd/back-relay/Makefile.in:build/mod.mk servers/slapd/back-shell/Makefile:build/top.mk:servers/slapd/back-shell/Makefile.in:build/mod.mk servers/slapd/back-sock/Makefile:build/top.mk:servers/slapd/back-sock/Makefile.in:build/mod.mk servers/slapd/back-sql/Makefile:build/top.mk:servers/slapd/back-sql/Makefile.in:build/mod.mk servers/slapd/shell-backends/Makefile:build/top.mk:servers/slapd/shell-backends/Makefile.in:build/srv.mk servers/slapd/slapi/Makefile:build/top.mk:servers/slapd/slapi/Makefile.in:build/lib.mk:build/lib-shared.mk servers/slapd/overlays/Makefile:build/top.mk:servers/slapd/overlays/Makefile.in:build/lib.mk tests/Makefile:build/top.mk:tests/Makefile.in:build/dir.mk tests/run tests/progs/Makefile:build/top.mk:tests/progs/Makefile.in:build/rules.mk" -+ac_config_files="$ac_config_files Makefile:build/top.mk:Makefile.in:build/dir.mk doc/Makefile:build/top.mk:doc/Makefile.in:build/dir.mk doc/man/Makefile:build/top.mk:doc/man/Makefile.in:build/dir.mk doc/man/man1/Makefile:build/top.mk:doc/man/man1/Makefile.in:build/man.mk doc/man/man3/Makefile:build/top.mk:doc/man/man3/Makefile.in:build/man.mk doc/man/man5/Makefile:build/top.mk:doc/man/man5/Makefile.in:build/man.mk doc/man/man8/Makefile:build/top.mk:doc/man/man8/Makefile.in:build/man.mk clients/Makefile:build/top.mk:clients/Makefile.in:build/dir.mk clients/tools/Makefile:build/top.mk:clients/tools/Makefile.in:build/rules.mk include/Makefile:build/top.mk:include/Makefile.in libraries/Makefile:build/top.mk:libraries/Makefile.in:build/dir.mk libraries/liblber/Makefile:build/top.mk:libraries/liblber/Makefile.in:build/lib.mk:build/lib-shared.mk libraries/libldap/Makefile:build/top.mk:libraries/libldap/Makefile.in:build/lib.mk:build/lib-shared.mk libraries/libldap_r/Makefile:build/top.mk:libraries/libldap_r/Makefile.in:build/lib.mk:build/lib-shared.mk libraries/liblunicode/Makefile:build/top.mk:libraries/liblunicode/Makefile.in:build/lib.mk:build/lib-static.mk libraries/liblutil/Makefile:build/top.mk:libraries/liblutil/Makefile.in:build/lib.mk:build/lib-static.mk libraries/librewrite/Makefile:build/top.mk:libraries/librewrite/Makefile.in:build/lib.mk:build/lib-static.mk servers/Makefile:build/top.mk:servers/Makefile.in:build/dir.mk servers/slapd/Makefile:build/top.mk:servers/slapd/Makefile.in:build/srv.mk servers/slapd/back-dnssrv/Makefile:build/top.mk:servers/slapd/back-dnssrv/Makefile.in:build/mod.mk servers/slapd/back-ldap/Makefile:build/top.mk:servers/slapd/back-ldap/Makefile.in:build/mod.mk servers/slapd/back-ldif/Makefile:build/top.mk:servers/slapd/back-ldif/Makefile.in:build/mod.mk servers/slapd/back-mdb/Makefile:build/top.mk:servers/slapd/back-mdb/Makefile.in:build/mod.mk servers/slapd/back-meta/Makefile:build/top.mk:servers/slapd/back-meta/Makefile.in:build/mod.mk servers/slapd/back-monitor/Makefile:build/top.mk:servers/slapd/back-monitor/Makefile.in:build/mod.mk servers/slapd/back-ndb/Makefile:build/top.mk:servers/slapd/back-ndb/Makefile.in:build/mod.mk servers/slapd/back-null/Makefile:build/top.mk:servers/slapd/back-null/Makefile.in:build/mod.mk servers/slapd/back-passwd/Makefile:build/top.mk:servers/slapd/back-passwd/Makefile.in:build/mod.mk servers/slapd/back-perl/Makefile:build/top.mk:servers/slapd/back-perl/Makefile.in:build/mod.mk servers/slapd/back-relay/Makefile:build/top.mk:servers/slapd/back-relay/Makefile.in:build/mod.mk servers/slapd/back-shell/Makefile:build/top.mk:servers/slapd/back-shell/Makefile.in:build/mod.mk servers/slapd/back-sock/Makefile:build/top.mk:servers/slapd/back-sock/Makefile.in:build/mod.mk servers/slapd/back-sql/Makefile:build/top.mk:servers/slapd/back-sql/Makefile.in:build/mod.mk servers/slapd/shell-backends/Makefile:build/top.mk:servers/slapd/shell-backends/Makefile.in:build/srv.mk servers/slapd/slapi/Makefile:build/top.mk:servers/slapd/slapi/Makefile.in:build/lib.mk:build/lib-shared.mk servers/slapd/overlays/Makefile:build/top.mk:servers/slapd/overlays/Makefile.in:build/lib.mk tests/Makefile:build/top.mk:tests/Makefile.in:build/dir.mk tests/run tests/progs/Makefile:build/top.mk:tests/progs/Makefile.in:build/rules.mk" - - - ac_config_commands="$ac_config_commands default" -@@ -28411,9 +27144,7 @@ do - "libraries/librewrite/Makefile") CONFIG_FILES="$CONFIG_FILES libraries/librewrite/Makefile:build/top.mk:libraries/librewrite/Makefile.in:build/lib.mk:build/lib-static.mk" ;; - "servers/Makefile") CONFIG_FILES="$CONFIG_FILES servers/Makefile:build/top.mk:servers/Makefile.in:build/dir.mk" ;; - "servers/slapd/Makefile") CONFIG_FILES="$CONFIG_FILES servers/slapd/Makefile:build/top.mk:servers/slapd/Makefile.in:build/srv.mk" ;; -- "servers/slapd/back-bdb/Makefile") CONFIG_FILES="$CONFIG_FILES servers/slapd/back-bdb/Makefile:build/top.mk:servers/slapd/back-bdb/Makefile.in:build/mod.mk" ;; - "servers/slapd/back-dnssrv/Makefile") CONFIG_FILES="$CONFIG_FILES servers/slapd/back-dnssrv/Makefile:build/top.mk:servers/slapd/back-dnssrv/Makefile.in:build/mod.mk" ;; -- "servers/slapd/back-hdb/Makefile") CONFIG_FILES="$CONFIG_FILES servers/slapd/back-hdb/Makefile:build/top.mk:servers/slapd/back-hdb/Makefile.in:build/mod.mk" ;; - "servers/slapd/back-ldap/Makefile") CONFIG_FILES="$CONFIG_FILES servers/slapd/back-ldap/Makefile:build/top.mk:servers/slapd/back-ldap/Makefile.in:build/mod.mk" ;; - "servers/slapd/back-ldif/Makefile") CONFIG_FILES="$CONFIG_FILES servers/slapd/back-ldif/Makefile:build/top.mk:servers/slapd/back-ldif/Makefile.in:build/mod.mk" ;; - "servers/slapd/back-mdb/Makefile") CONFIG_FILES="$CONFIG_FILES servers/slapd/back-mdb/Makefile:build/top.mk:servers/slapd/back-mdb/Makefile.in:build/mod.mk" ;; --- -2.19.1 - diff --git a/check-password-makefile.patch b/backport-check-password-makefile.patch similarity index 100% rename from check-password-makefile.patch rename to backport-check-password-makefile.patch diff --git a/check-password.patch b/backport-check-password.patch similarity index 100% rename from check-password.patch rename to backport-check-password.patch diff --git a/backport-delete-back-bdb-back-hdb.patch b/backport-delete-back-bdb-back-hdb.patch deleted file mode 100644 index 6eb148b..0000000 --- a/backport-delete-back-bdb-back-hdb.patch +++ /dev/null @@ -1,22206 +0,0 @@ -From 8897fff4f352923b91e776bf9bc0bf8dbd636e85 Mon Sep 17 00:00:00 2001 -From: zhangqiumiao -Date: Fri, 25 Sep 2020 21:54:05 +0800 -Subject: [PATCH] backport delete back-bdb/back-hdb - ---- - INSTALL | 3 - - build/openldap.m4 | 292 --- - build/top.mk | 1 - - configure.in | 74 +- - contrib/slapd-modules/allowed/allowed.c | 2 +- - contrib/slapd-modules/nssov/README | 4 +- - contrib/slapd-modules/nssov/slapo-nssov.5 | 2 +- - doc/guide/admin/appendix-changes.sdf | 27 +- - doc/guide/admin/appendix-common-errors.sdf | 10 +- - doc/guide/admin/aspell.en.pws | 7 - - doc/guide/admin/backends.sdf | 47 +- - doc/guide/admin/install.sdf | 17 - - doc/guide/admin/intro.sdf | 12 +- - doc/guide/admin/maintenance.sdf | 86 +- - doc/guide/admin/monitoringslapd.sdf | 25 +- - doc/guide/admin/overlays.sdf | 6 +- - doc/guide/admin/replication.sdf | 12 +- - doc/guide/admin/slapdconf2.sdf | 237 +-- - doc/guide/admin/slapdconfig.sdf | 218 ++- - doc/guide/admin/tuning.sdf | 175 +- - doc/guide/preamble.sdf | 2 - - doc/guide/release/install.sdf | 2 +- - doc/man/man5/slapd-bdb.5 | 286 --- - doc/man/man5/slapd-bdb.5.links | 1 - - doc/man/man5/slapd-config.5 | 8 +- - doc/man/man5/slapd-mdb.5 | 7 +- - doc/man/man5/slapd-sql.5 | 2 +- - doc/man/man5/slapd.access.5 | 9 +- - doc/man/man5/slapd.backends.5 | 35 +- - doc/man/man5/slapd.conf.5 | 7 +- - doc/man/man5/slapd.overlays.5 | 6 +- - doc/man/man8/slapcat.8 | 2 - - doc/man/man8/slapschema.8 | 3 +- - include/portable.hin | 12 - - servers/slapd/DB_CONFIG | 28 - - servers/slapd/Makefile.in | 12 +- - servers/slapd/alock.c | 718 ------- - servers/slapd/alock.h | 74 - - servers/slapd/back-bdb/Makefile.in | 53 - - servers/slapd/back-bdb/add.c | 547 ------ - servers/slapd/back-bdb/attr.c | 441 ----- - servers/slapd/back-bdb/back-bdb.h | 377 ---- - servers/slapd/back-bdb/bind.c | 166 -- - servers/slapd/back-bdb/cache.c | 1692 ----------------- - servers/slapd/back-bdb/compare.c | 143 -- - servers/slapd/back-bdb/config.c | 951 --------- - servers/slapd/back-bdb/dbcache.c | 210 -- - servers/slapd/back-bdb/delete.c | 605 ------ - servers/slapd/back-bdb/dn2entry.c | 84 - - servers/slapd/back-bdb/dn2id.c | 1215 ------------ - servers/slapd/back-bdb/error.c | 62 - - servers/slapd/back-bdb/extended.c | 54 - - servers/slapd/back-bdb/filterindex.c | 1183 ------------ - servers/slapd/back-bdb/id2entry.c | 446 ----- - servers/slapd/back-bdb/idl.c | 1570 --------------- - servers/slapd/back-bdb/idl.h | 75 - - servers/slapd/back-bdb/index.c | 574 ------ - servers/slapd/back-bdb/init.c | 874 --------- - servers/slapd/back-bdb/key.c | 104 - - servers/slapd/back-bdb/modify.c | 835 -------- - servers/slapd/back-bdb/modrdn.c | 842 -------- - servers/slapd/back-bdb/monitor.c | 724 ------- - servers/slapd/back-bdb/nextid.c | 80 - - servers/slapd/back-bdb/operational.c | 151 -- - servers/slapd/back-bdb/proto-bdb.h | 678 ------- - servers/slapd/back-bdb/referral.c | 152 -- - servers/slapd/back-bdb/search.c | 1388 -------------- - servers/slapd/back-bdb/tools.c | 1327 ------------- - servers/slapd/back-bdb/trans.c | 56 - - servers/slapd/back-hdb/Makefile.in | 70 - - servers/slapd/back-hdb/back-bdb.h | 31 - - servers/slapd/back-monitor/init.c | 8 +- - servers/slapd/bconfig.c | 2 +- - servers/slapd/dn.c | 3 +- - servers/slapd/overlays/pcache.c | 4 +- - servers/slapd/slap.h | 1 - - servers/slapd/slapd.ldif | 3 +- - tests/Makefile.in | 36 - - tests/README | 2 - - tests/data/regressions/its4184/its4184 | 4 - - tests/data/regressions/its4448/its4448 | 16 - - tests/data/slapd-proxyauthz.conf | 4 - - tests/data/slapd-proxycache.conf | 4 - - tests/data/slapd-ref-slave.conf | 2 - - tests/data/slapd.conf | 2 - - tests/run.in | 8 +- - tests/scripts/test023-refint | 97 +- - tests/scripts/test025-limits | 2 +- - tests/scripts/test036-meta-concurrency | 16 - - tests/scripts/test040-subtree-rename | 5 - - tests/scripts/test043-delta-syncrepl | 2 +- - tests/scripts/test052-memberof | 4 +- - tests/scripts/test056-monitor | 6 +- - tests/scripts/test057-memberof-refint | 9 +- - .../test061-syncreplication-initiation | 1 - - 95 files changed, 418 insertions(+), 20054 deletions(-) - delete mode 100644 doc/man/man5/slapd-bdb.5 - delete mode 100644 doc/man/man5/slapd-bdb.5.links - delete mode 100644 servers/slapd/DB_CONFIG - delete mode 100644 servers/slapd/alock.c - delete mode 100644 servers/slapd/alock.h - delete mode 100644 servers/slapd/back-bdb/Makefile.in - delete mode 100644 servers/slapd/back-bdb/add.c - delete mode 100644 servers/slapd/back-bdb/attr.c - delete mode 100644 servers/slapd/back-bdb/back-bdb.h - delete mode 100644 servers/slapd/back-bdb/bind.c - delete mode 100644 servers/slapd/back-bdb/cache.c - delete mode 100644 servers/slapd/back-bdb/compare.c - delete mode 100644 servers/slapd/back-bdb/config.c - delete mode 100644 servers/slapd/back-bdb/dbcache.c - delete mode 100644 servers/slapd/back-bdb/delete.c - delete mode 100644 servers/slapd/back-bdb/dn2entry.c - delete mode 100644 servers/slapd/back-bdb/dn2id.c - delete mode 100644 servers/slapd/back-bdb/error.c - delete mode 100644 servers/slapd/back-bdb/extended.c - delete mode 100644 servers/slapd/back-bdb/filterindex.c - delete mode 100644 servers/slapd/back-bdb/id2entry.c - delete mode 100644 servers/slapd/back-bdb/idl.c - delete mode 100644 servers/slapd/back-bdb/idl.h - delete mode 100644 servers/slapd/back-bdb/index.c - delete mode 100644 servers/slapd/back-bdb/init.c - delete mode 100644 servers/slapd/back-bdb/key.c - delete mode 100644 servers/slapd/back-bdb/modify.c - delete mode 100644 servers/slapd/back-bdb/modrdn.c - delete mode 100644 servers/slapd/back-bdb/monitor.c - delete mode 100644 servers/slapd/back-bdb/nextid.c - delete mode 100644 servers/slapd/back-bdb/operational.c - delete mode 100644 servers/slapd/back-bdb/proto-bdb.h - delete mode 100644 servers/slapd/back-bdb/referral.c - delete mode 100644 servers/slapd/back-bdb/search.c - delete mode 100644 servers/slapd/back-bdb/tools.c - delete mode 100644 servers/slapd/back-bdb/trans.c - delete mode 100644 servers/slapd/back-hdb/Makefile.in - delete mode 100644 servers/slapd/back-hdb/back-bdb.h - -diff --git a/INSTALL b/INSTALL -index e8a4fb3..0805e1c 100644 ---- a/INSTALL -+++ b/INSTALL -@@ -73,9 +73,6 @@ Making and Installing the OpenLDAP Distribution - - 6. Test the standalone system: - -- This step requires the standalone LDAP server, slapd(8), with HDB -- and/or BDB support. -- - % make test - - If all goes well, the system has been built as configured. If -diff --git a/build/openldap.m4 b/build/openldap.m4 -index 80fda16..fd768aa 100644 ---- a/build/openldap.m4 -+++ b/build/openldap.m4 -@@ -243,298 +243,6 @@ OL_RESOLVER_TRY(ol_cv_resolver_none) - OL_RESOLVER_TRY(ol_cv_resolver_resolv,[-lresolv]) - OL_RESOLVER_TRY(ol_cv_resolver_bind,[-lbind]) - ]) --dnl --dnl ==================================================================== --dnl Berkeley DB macros --dnl --dnl -------------------------------------------------------------------- --dnl Try to link --AC_DEFUN([OL_BERKELEY_DB_TRY], --[if test $ol_cv_lib_db = no ; then -- AC_CACHE_CHECK([for Berkeley DB link (]ifelse($2,,default,$2)[)],[$1], --[ -- ol_DB_LIB=ifelse($2,,,$2) -- ol_LIBS=$LIBS -- LIBS="$ol_DB_LIB $LTHREAD_LIBS $LIBS" -- -- AC_LINK_IFELSE([AC_LANG_PROGRAM([[ --#ifdef HAVE_DB_185_H --# include --#else --# include --#endif -- --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif -- --#ifndef NULL --#define NULL ((void*)0) --#endif --]], [[ --#if DB_VERSION_MAJOR > 2 -- db_env_create( NULL, 0 ); --#elif DB_VERSION_MAJOR > 1 -- db_appexit( NULL ); --#else -- (void) dbopen( NULL, 0, 0, 0, NULL); --#endif --]])],[$1=yes],[$1=no]) -- -- LIBS="$ol_LIBS" --]) -- -- if test $$1 = yes ; then -- ol_cv_lib_db=ifelse($2,,yes,$2) -- fi --fi --]) --dnl --dnl -------------------------------------------------------------------- --dnl Get major and minor version from --AC_DEFUN([OL_BDB_HEADER_VERSION], --[AC_CACHE_CHECK([for Berkeley DB major version in db.h], [ol_cv_bdb_major],[ -- AC_LANG_CONFTEST([ --#include --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif --__db_version DB_VERSION_MAJOR --]) -- set X `eval "$ac_cpp -P conftest.$ac_ext" | $EGREP __db_version` none none -- ol_cv_bdb_major=${3} --]) --case $ol_cv_bdb_major in [[1-9]]*) : ;; *) -- AC_MSG_ERROR([Unknown Berkeley DB major version in db.h]) ;; --esac -- --dnl Determine minor version --AC_CACHE_CHECK([for Berkeley DB minor version in db.h], [ol_cv_bdb_minor],[ -- AC_LANG_CONFTEST([ --#include --#ifndef DB_VERSION_MINOR --# define DB_VERSION_MINOR 0 --#endif --__db_version DB_VERSION_MINOR --]) -- set X `eval "$ac_cpp -P conftest.$ac_ext" | $EGREP __db_version` none none -- ol_cv_bdb_minor=${3} --]) --case $ol_cv_bdb_minor in [[0-9]]*) : ;; *) -- AC_MSG_ERROR([Unknown Berkeley DB minor version in db.h]) ;; --esac --]) --dnl --dnl -------------------------------------------------------------------- --dnl Try to locate appropriate library --AC_DEFUN([OL_BERKELEY_DB_LINK], --[ol_cv_lib_db=no -- --if test $ol_cv_bdb_major = 5 ; then -- OL_BERKELEY_DB_TRY(ol_cv_db_db_5_dot_m,[-ldb-5.$ol_cv_bdb_minor]) -- OL_BERKELEY_DB_TRY(ol_cv_db_db5m,[-ldb5$ol_cv_bdb_minor]) -- OL_BERKELEY_DB_TRY(ol_cv_db_db_5m,[-ldb-5$ol_cv_bdb_minor]) -- OL_BERKELEY_DB_TRY(ol_cv_db_db_5_m,[-ldb-5-$ol_cv_bdb_minor]) -- OL_BERKELEY_DB_TRY(ol_cv_db_db_5,[-ldb-5]) -- OL_BERKELEY_DB_TRY(ol_cv_db_db5,[-ldb5]) --elif test $ol_cv_bdb_major = 4 ; then -- OL_BERKELEY_DB_TRY(ol_cv_db_db_4_dot_m,[-ldb-4.$ol_cv_bdb_minor]) -- OL_BERKELEY_DB_TRY(ol_cv_db_db4m,[-ldb4$ol_cv_bdb_minor]) -- OL_BERKELEY_DB_TRY(ol_cv_db_db_4m,[-ldb-4$ol_cv_bdb_minor]) -- OL_BERKELEY_DB_TRY(ol_cv_db_db_4_m,[-ldb-4-$ol_cv_bdb_minor]) -- OL_BERKELEY_DB_TRY(ol_cv_db_db_4,[-ldb-4]) -- OL_BERKELEY_DB_TRY(ol_cv_db_db4,[-ldb4]) --fi --OL_BERKELEY_DB_TRY(ol_cv_db_db,[-ldb]) --OL_BERKELEY_DB_TRY(ol_cv_db_none) --]) --dnl --dnl -------------------------------------------------------------------- --dnl Check if Berkeley DB version --AC_DEFUN([OL_BERKELEY_DB_VERSION], --[AC_CACHE_CHECK([for Berkeley DB library and header version match], [ol_cv_berkeley_db_version], [ -- ol_LIBS="$LIBS" -- LIBS="$LTHREAD_LIBS $LIBS" -- if test $ol_cv_lib_db != yes ; then -- LIBS="$ol_cv_lib_db $LIBS" -- fi -- -- AC_RUN_IFELSE([AC_LANG_SOURCE([[ --#ifdef HAVE_DB_185_H -- choke me; --#else --#include --#endif --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif --#ifndef NULL --#define NULL ((void *)0) --#endif --main() --{ --#if DB_VERSION_MAJOR > 1 -- char *version; -- int major, minor, patch; -- -- version = db_version( &major, &minor, &patch ); -- -- if( major != DB_VERSION_MAJOR || -- minor != DB_VERSION_MINOR || -- patch != DB_VERSION_PATCH ) -- { -- printf("Berkeley DB version mismatch\n" -- "\theader: %s\n\tlibrary: %s\n", -- DB_VERSION_STRING, version); -- return 1; -- } --#endif -- -- return 0; --}]])],[ol_cv_berkeley_db_version=yes],[ol_cv_berkeley_db_version=no],[ol_cv_berkeley_db_version=cross]) -- -- LIBS="$ol_LIBS" --]) -- -- if test $ol_cv_berkeley_db_version = no ; then -- AC_MSG_ERROR([Berkeley DB version mismatch]) -- fi --])dnl --dnl --dnl -------------------------------------------------------------------- --dnl Check if Berkeley DB supports DB_THREAD --AC_DEFUN([OL_BERKELEY_DB_THREAD], --[AC_CACHE_CHECK([for Berkeley DB thread support], [ol_cv_berkeley_db_thread], [ -- ol_LIBS="$LIBS" -- LIBS="$LTHREAD_LIBS $LIBS" -- if test $ol_cv_lib_db != yes ; then -- LIBS="$ol_cv_lib_db $LIBS" -- fi -- -- AC_RUN_IFELSE([AC_LANG_SOURCE([[ --#ifdef HAVE_DB_185_H -- choke me; --#else --#include --#endif --#ifndef NULL --#define NULL ((void *)0) --#endif --main() --{ -- int rc; -- u_int32_t flags = DB_CREATE | --#ifdef DB_PRIVATE -- DB_PRIVATE | --#endif -- DB_THREAD; -- --#if DB_VERSION_MAJOR > 2 -- DB_ENV *env = NULL; -- -- rc = db_env_create( &env, 0 ); -- -- flags |= DB_INIT_MPOOL; --#ifdef DB_MPOOL_PRIVATE -- flags |= DB_MPOOL_PRIVATE; --#endif -- -- if( rc ) { -- printf("BerkeleyDB: %s\n", db_strerror(rc) ); -- return rc; -- } -- --#if (DB_VERSION_MAJOR > 3) || (DB_VERSION_MINOR >= 1) -- rc = (env->open)( env, NULL, flags, 0 ); --#else -- rc = (env->open)( env, NULL, NULL, flags, 0 ); --#endif -- -- if ( rc == 0 ) { -- rc = env->close( env, 0 ); -- } -- -- if( rc ) { -- printf("BerkeleyDB: %s\n", db_strerror(rc) ); -- return rc; -- } -- --#else -- DB_ENV env; -- memset( &env, '\0', sizeof(env) ); -- -- rc = db_appinit( NULL, NULL, &env, flags ); -- -- if( rc == 0 ) { -- db_appexit( &env ); -- } -- -- unlink("__db_mpool.share"); -- unlink("__db_lock.share"); --#endif -- -- return rc; --}]])],[ol_cv_berkeley_db_thread=yes],[ol_cv_berkeley_db_thread=no],[ol_cv_berkeley_db_thread=cross]) -- -- LIBS="$ol_LIBS" --]) -- -- if test $ol_cv_berkeley_db_thread != no ; then -- AC_DEFINE(HAVE_BERKELEY_DB_THREAD, 1, -- [define if Berkeley DB has DB_THREAD support]) -- fi --])dnl --dnl --dnl -------------------------------------------------------------------- --dnl Find any DB --AC_DEFUN([OL_BERKELEY_DB], --[ol_cv_berkeley_db=no --AC_CHECK_HEADERS(db.h) --if test $ac_cv_header_db_h = yes; then -- OL_BDB_HEADER_VERSION -- OL_BDB_COMPAT -- -- if test $ol_cv_bdb_compat != yes ; then -- AC_MSG_ERROR([BerkeleyDB version incompatible with BDB/HDB backends]) -- fi -- -- OL_BERKELEY_DB_LINK -- if test "$ol_cv_lib_db" != no ; then -- ol_cv_berkeley_db=yes -- OL_BERKELEY_DB_VERSION -- OL_BERKELEY_DB_THREAD -- fi --fi --]) --dnl -------------------------------------------------------------------- --dnl Check for version compatility with back-bdb --AC_DEFUN([OL_BDB_COMPAT], --[AC_CACHE_CHECK([if Berkeley DB version supported by BDB/HDB backends], [ol_cv_bdb_compat],[ -- AC_EGREP_CPP(__db_version_compat,[ --#include -- -- /* this check could be improved */ --#ifndef DB_VERSION_MAJOR --# define DB_VERSION_MAJOR 1 --#endif --#ifndef DB_VERSION_MINOR --# define DB_VERSION_MINOR 0 --#endif --#ifndef DB_VERSION_PATCH --# define DB_VERSION_PATCH 0 --#endif -- --#define DB_VERSION_FULL ((DB_VERSION_MAJOR<<16)|(DB_VERSION_MINOR<<8)|DB_VERSION_PATCH) -- --/* require 4.4 or later, but less than 6.0.20 */ --#if DB_VERSION_FULL >= 0x040400 && DB_VERSION_FULL < 0x060014 -- __db_version_compat --#endif --#if DB_VERSION_FULL >= 0x060014 --#error "BerkeleyDB 6.0.20+ license is incompatible with LDAP" --#endif -- ], [ol_cv_bdb_compat=yes], [ol_cv_bdb_compat=no])]) --]) - - dnl - dnl ==================================================================== -diff --git a/build/top.mk b/build/top.mk -index 6850121..a25c5fc 100644 ---- a/build/top.mk -+++ b/build/top.mk -@@ -159,7 +159,6 @@ LDAP_LIBDIR= $(top_builddir)/libraries - LUTIL_LIBS = @LUTIL_LIBS@ - LTHREAD_LIBS = @LTHREAD_LIBS@ - --BDB_LIBS = @BDB_LIBS@ - SLAPD_NDB_LIBS = @SLAPD_NDB_LIBS@ - - LDAP_LIBLBER_LA = $(LDAP_LIBDIR)/liblber/liblber.la -diff --git a/configure.in b/configure.in -index c70241a..065eae3 100644 ---- a/configure.in -+++ b/configure.in -@@ -282,9 +282,7 @@ OL_ARG_ENABLE(wrappers,[ --enable-wrappers enable tcp wrapper support], no) - - dnl ---------------------------------------------------------------- - dnl SLAPD Backend Options --Backends="bdb \ -- dnssrv \ -- hdb \ -+Backends="dnssrv \ - ldap \ - mdb \ - meta \ -@@ -303,12 +301,8 @@ SLAPD Backend Options:]) - - OL_ARG_ENABLE(backends,[ --enable-backends enable all available backends], - --, [no yes mod])dnl --OL_ARG_ENABLE(bdb,[ --enable-bdb enable Berkeley DB backend], -- yes, [no yes mod], ol_enable_backends)dnl - OL_ARG_ENABLE(dnssrv,[ --enable-dnssrv enable dnssrv backend], - no, [no yes mod], ol_enable_backends)dnl --OL_ARG_ENABLE(hdb,[ --enable-hdb enable Hierarchical DB backend], -- yes, [no yes mod], ol_enable_backends)dnl - OL_ARG_ENABLE(ldap,[ --enable-ldap enable ldap backend], - no, [no yes mod], ol_enable_backends)dnl - OL_ARG_ENABLE(mdb,[ --enable-mdb enable mdb database backend], -@@ -471,9 +465,7 @@ if test $ol_enable_slapd = no ; then - ol_enable_rewrite=no - - elif test $ol_enable_modules != yes && -- test $ol_enable_bdb = no && - test $ol_enable_dnssrv = no && -- test $ol_enable_hdb = no && - test $ol_enable_ldap = no && - test $ol_enable_mdb = no && - test $ol_enable_meta = no && -@@ -518,7 +510,6 @@ AC_MSG_RESULT(done) - dnl ---------------------------------------------------------------- - dnl Initialize vars - LDAP_LIBS= --BDB_LIBS= - SLAPD_NDB_LIBS= - SLAPD_NDB_INCS= - LTHREAD_LIBS= -@@ -533,9 +524,7 @@ BUILD_THREAD=no - BUILD_SLAPI=no - SLAPD_SLAPI_DEPEND= - --BUILD_BDB=no - BUILD_DNSSRV=no --BUILD_HDB=no - BUILD_LDAP=no - BUILD_MDB=no - BUILD_META=no -@@ -1867,36 +1856,6 @@ else - ol_cv_func_gethostbyaddr_r_nargs=0 - fi - --dnl ---------------------------------------------------------------- --ol_link_bdb=no -- --if test $ol_enable_bdb/$ol_enable_hdb != no/no; then -- OL_BERKELEY_DB -- -- if test $ol_cv_berkeley_db = no ; then -- AC_MSG_ERROR(BDB/HDB: BerkeleyDB not available) -- fi -- -- AC_DEFINE(HAVE_BERKELEY_DB,1, -- [define this if Berkeley DB is available]) -- -- dnl $ol_cv_lib_db should be yes or -ldb -- dnl (it could be no, but that would be an error -- if test $ol_cv_lib_db != yes ; then -- BDB_LIBS="$BDB_LIBS $ol_cv_lib_db" -- fi -- -- dnl link BDB library to slapd when there is a -- dnl static BDB based backend in use -- if test $ol_enable_bdb/$ol_enable_hdb != mod/mod ; then -- if test $ol_enable_bdb = yes -o $ol_enable_hdb = yes ; then -- SLAPD_LIBS="$SLAPD_LIBS \$(BDB_LIBS)" -- fi -- fi -- -- ol_link_bdb=yes --fi -- - dnl ---------------------------------------------------------------- - - if test $ol_enable_dynamic = yes && test $enable_shared = yes ; then -@@ -2610,19 +2569,6 @@ if test "$ol_enable_monitor" != no ; then - AC_DEFINE_UNQUOTED(SLAPD_MONITOR,$MFLAG,[define to support cn=Monitor backend]) - fi - --if test "$ol_enable_bdb" != no ; then -- BUILD_SLAPD=yes -- BUILD_BDB=$ol_enable_bdb -- if test "$ol_enable_bdb" = mod ; then -- SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-bdb" -- MFLAG=SLAPD_MOD_DYNAMIC -- else -- SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-bdb" -- MFLAG=SLAPD_MOD_STATIC -- fi -- AC_DEFINE_UNQUOTED(SLAPD_BDB,$MFLAG,[define to support BDB backend]) --fi -- - if test "$ol_enable_dnssrv" != no ; then - BUILD_SLAPD=yes - BUILD_DNSSRV=$ol_enable_dnssrv -@@ -2636,19 +2582,6 @@ if test "$ol_enable_dnssrv" != no ; then - AC_DEFINE_UNQUOTED(SLAPD_DNSSRV,$MFLAG,[define to support DNS SRV backend]) - fi - --if test "$ol_enable_hdb" != no ; then -- BUILD_SLAPD=yes -- BUILD_HDB=$ol_enable_hdb -- if test "$ol_enable_hdb" = mod ; then -- SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-hdb" -- MFLAG=SLAPD_MOD_DYNAMIC -- else -- SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-hdb" -- MFLAG=SLAPD_MOD_STATIC -- fi -- AC_DEFINE_UNQUOTED(SLAPD_HDB,$MFLAG,[define to support HDB backend]) --fi -- - if test "$ol_enable_ldap" != no ; then - BUILD_SLAPD=yes - BUILD_LDAP=$ol_enable_ldap -@@ -3076,9 +3009,7 @@ dnl slapi - AC_SUBST(BUILD_SLAPI) - AC_SUBST(SLAPD_SLAPI_DEPEND) - dnl backends -- AC_SUBST(BUILD_BDB) - AC_SUBST(BUILD_DNSSRV) -- AC_SUBST(BUILD_HDB) - AC_SUBST(BUILD_LDAP) - AC_SUBST(BUILD_MDB) - AC_SUBST(BUILD_META) -@@ -3117,7 +3048,6 @@ dnl overlays - - AC_SUBST(LDAP_LIBS) - AC_SUBST(SLAPD_LIBS) --AC_SUBST(BDB_LIBS) - AC_SUBST(SLAPD_NDB_LIBS) - AC_SUBST(SLAPD_NDB_INCS) - AC_SUBST(LTHREAD_LIBS) -@@ -3181,9 +3111,7 @@ AC_CONFIG_FILES([Makefile:build/top.mk:Makefile.in:build/dir.mk] - [libraries/librewrite/Makefile:build/top.mk:libraries/librewrite/Makefile.in:build/lib.mk:build/lib-static.mk] - [servers/Makefile:build/top.mk:servers/Makefile.in:build/dir.mk] - [servers/slapd/Makefile:build/top.mk:servers/slapd/Makefile.in:build/srv.mk] --[servers/slapd/back-bdb/Makefile:build/top.mk:servers/slapd/back-bdb/Makefile.in:build/mod.mk] - [servers/slapd/back-dnssrv/Makefile:build/top.mk:servers/slapd/back-dnssrv/Makefile.in:build/mod.mk] --[servers/slapd/back-hdb/Makefile:build/top.mk:servers/slapd/back-hdb/Makefile.in:build/mod.mk] - [servers/slapd/back-ldap/Makefile:build/top.mk:servers/slapd/back-ldap/Makefile.in:build/mod.mk] - [servers/slapd/back-ldif/Makefile:build/top.mk:servers/slapd/back-ldif/Makefile.in:build/mod.mk] - [servers/slapd/back-mdb/Makefile:build/top.mk:servers/slapd/back-mdb/Makefile.in:build/mod.mk] -diff --git a/contrib/slapd-modules/allowed/allowed.c b/contrib/slapd-modules/allowed/allowed.c -index 5f2810f..8ca0889 100644 ---- a/contrib/slapd-modules/allowed/allowed.c -+++ b/contrib/slapd-modules/allowed/allowed.c -@@ -27,7 +27,7 @@ - * Caveats: - * - right now, the overlay assumes that all values of the objectClass - * attribute will be returned in rs->sr_entry; this may not be true -- * in general, but it usually is for back-bdb/back-hdb. To generalize, -+ * in general, but it usually is for back-mdb. To generalize, - * the search request should be analyzed, and if allowedAttributes or - * allowedAttributesEffective are requested, add objectClass to the - * requested attributes -diff --git a/contrib/slapd-modules/nssov/README b/contrib/slapd-modules/nssov/README -index ced3872..f8538f9 100644 ---- a/contrib/slapd-modules/nssov/README -+++ b/contrib/slapd-modules/nssov/README -@@ -21,7 +21,7 @@ To use the overlay, add: - moduleload nssov.so - ... - -- database hdb -+ database mdb - ... - overlay nssov - -@@ -65,7 +65,7 @@ See the nss-ldapd/README for the original attribute names used in this code. - The overlay also supports dynamic configuration in cn=config. The layout - of the config entry is - -- dn: olcOverlay={0}nssov,ocDatabase={1}hdb,cn=config -+ dn: olcOverlay={0}nssov,ocDatabase={1}mdb,cn=config - objectClass: olcOverlayConfig - objectClass: olcNssOvConfig - olcOverlay: {0}nssov -diff --git a/contrib/slapd-modules/nssov/slapo-nssov.5 b/contrib/slapd-modules/nssov/slapo-nssov.5 -index 816b661..83621bd 100644 ---- a/contrib/slapd-modules/nssov/slapo-nssov.5 -+++ b/contrib/slapd-modules/nssov/slapo-nssov.5 -@@ -278,7 +278,7 @@ of the config entry is - .LP - .RS - .nf -- dn: olcOverlay={0}nssov,ocDatabase={1}hdb,cn=config -+ dn: olcOverlay={0}nssov,ocDatabase={1}mdb,cn=config - objectClass: olcOverlayConfig - objectClass: olcNssOvConfig - olcOverlay: {0}nssov -diff --git a/doc/guide/admin/appendix-changes.sdf b/doc/guide/admin/appendix-changes.sdf -index 5006672..7fe91d1 100644 ---- a/doc/guide/admin/appendix-changes.sdf -+++ b/doc/guide/admin/appendix-changes.sdf -@@ -147,11 +147,6 @@ search over 500 thousand entries per second. The search was on an unindexed - attribute using a filter that would not match any entry, forcing slapd to examine - every entry in the DB, testing the filter for a match. - --Essentially the slapd entry cache in back-bdb/back-hdb is so efficient the search --processing time is almost invisible; the runtime is limited only by the memory --bandwidth of the machine. (The search data rate corresponds to about 3.5GB/sec; --the memory bandwidth on the machine is only about 4GB/sec due to ECC and register latency.) -- - H3: New overlays - - * slapo-constraint (Attribute value constraints) -@@ -199,21 +194,13 @@ H3: New build options - * Support for building against GnuTLS - - --H2: Obsolete Features Removed From 2.4 -- --These features were strongly deprecated in 2.3 and removed in 2.4. -- --H3: Slurpd -+H2: Obsolete Features Removed From 2.5 - --Please read the {{SECT:Replication}} section as to why this is no longer in --OpenLDAP -+These features were strongly deprecated in 2.4 and removed in 2.5. - --H3: back-ldbm -+H3: back-bdb and back-hdb - --back-ldbm was both slow and unreliable. Its byzantine indexing code was --prone to spontaneous corruption, as were the underlying database libraries --that were commonly used (e.g. GDBM or NDBM). back-bdb and back-hdb are --superior in every aspect, with simplified indexing to avoid index corruption, --fine-grained locking for greater concurrency, hierarchical caching for --greater performance, streamlined on-disk format for greater efficiency --and portability, and full transaction support for greater reliability. -+back-bdb and back-hdb were signficantly slower than back-mdb and -+required significant tuning of multiple parameters to maximize -+performance. back-mdb requires no tuning and provides all the -+functionality previously provided via back-bdb and back-hdb. -diff --git a/doc/guide/admin/appendix-common-errors.sdf b/doc/guide/admin/appendix-common-errors.sdf -index 23eef9b..5ead0e1 100644 ---- a/doc/guide/admin/appendix-common-errors.sdf -+++ b/doc/guide/admin/appendix-common-errors.sdf -@@ -636,7 +636,7 @@ values of . - - H3: ldap_*: Internal (implementation specific) error (80) - additional info: entry index delete failed - --This seems to be related with wrong ownership of the BDB's dir (/var/lib/ldap) -+This seems to be related with wrong ownership of the MDB's dir (/var/lib/ldap) - and files. The files must be owned by the user that slapd runs as. - - > chown -R ldap:ldap /var/lib/ldap -@@ -652,11 +652,3 @@ immediately and client gets an error : - > SASL/GSSAPI authentication started ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1) - - Then check the slapd service, it stopped. -- --This may come from incompatible of using different versions of BerkeleyDB for --installing of SASL and installing of OpenLDAP. The problem arises in case of --using multiple version of BerkeleyDB. Solution: - Check which version of --BerkeleyDB when install Cyrus SASL. -- --Reinstall OpenLDAP with the version of BerkeleyDB above. -- -diff --git a/doc/guide/admin/aspell.en.pws b/doc/guide/admin/aspell.en.pws -index f486703..ae777e2 100644 ---- a/doc/guide/admin/aspell.en.pws -+++ b/doc/guide/admin/aspell.en.pws -@@ -102,7 +102,6 @@ NOSYNC - env - pagedResultsControl - dup --hdb - LDIFv - syslog - monitorTimestamp -@@ -887,7 +886,6 @@ proxyAttrSet - proxyAttrset - mary - crlcheck --olcBdbConfig - kadmin - mech - slapcat -@@ -1190,7 +1188,6 @@ moddn - calloc - LDFLAGS - attributeOrValueExists --olcHdbConfig - bsize - auditObject - dnssrv -@@ -1492,7 +1489,6 @@ ghenry - odbcinst - reqType - slapover --BerkeleyDB's - attributename - lwrap - reqStart -@@ -1628,7 +1624,6 @@ DSAIT - olcHidden - mySNMP - metainformation --BerkeleyDB - ldapuri - auditAbandon - RANDFILE -@@ -1662,7 +1657,6 @@ olcPasswordHash - ldapc - loopback - ldapi --BDB's - GETREALM - functionalities - noplain -@@ -1670,7 +1664,6 @@ NOECHOPROMPT - AES - ldaps - notoc --bdb - LDAPv - IPsec - olcServerID -diff --git a/doc/guide/admin/backends.sdf b/doc/guide/admin/backends.sdf -index 38e9ae2..6e005a6 100644 ---- a/doc/guide/admin/backends.sdf -+++ b/doc/guide/admin/backends.sdf -@@ -14,38 +14,9 @@ name of the module for a backend is usually of the form: - - > back_.la - --So for example, if you need to load the {{hdb}} backend, you would configure -+So for example, if you need to load the {{mdb}} backend, you would configure - --> moduleload back_hdb.la -- --H2: Berkeley DB Backends -- -- --H3: Overview -- --The {{hdb}} backend to {{slapd}}(8) is a backend for a --normal {{slapd}} database. It uses the Oracle Berkeley DB ({{TERM:BDB}}) --package to store data. It makes extensive use of indexing and caching --(see the {{SECT:Tuning}} section) to speed data access. -- --{{hdb}} is a variant of the original {{bdb}} backend which was first written for use with BDB. --{{hdb}} uses a hierarchical database layout which supports subtree renames. --It is otherwise identical to the {{bdb}} --behavior, and all the same configuration options apply. -- --Note: An {{hdb}} database needs a large {{idlcachesize}} for good search performance, --typically three times the {{cachesize}} (entry cache size) or larger. -- --Note: The {{hdb}} backend has superseded the {{bdb}} backend, and both will --soon be deprecated in favor of the new {{mdb}} backend. See below. -- --H3: back-bdb/back-hdb Configuration -- --MORE LATER -- --H3: Further Information -- --{{slapd-bdb}}(5) -+ moduleload back_mdb.la - - H2: LDAP - -@@ -199,16 +170,16 @@ H3: Overview - The {{mdb}} backend to {{slapd}}(8) is the recommended primary backend for a - normal {{slapd}} database. It uses OpenLDAP's own - Lightning Memory-Mapped Database ({{TERM:LMDB}}) --library to store data and is intended to replace the Berkeley DB backends. -+library to store data and replace the BerkeleyDB backends used in older -+OpenLDAP releases. - --It supports indexing like the BDB backends, but it uses no caching and requires --no tuning to deliver maximum search performance. Like {{hdb}}, it is also --fully hierarchical and supports subtree renames in constant time. -+It supports indexing, it uses no caching and requires no tuning to deliver -+maximum search performance. It is fully hierarchical and supports subtree -+renames in constant time. - - H3: back-mdb Configuration - --Unlike the BDB backends, the {{mdb}} backend can be instantiated with very few --configuration lines: -+The {{mdb}} backend can be instantiated with very few configuration lines: - - > include ./schema/core.schema - > -@@ -490,7 +461,7 @@ distribute information between different sites/applications that use RDBMSes - and/or LDAP. Or whatever else... - - It is {{B:NOT}} designed as a general-purpose backend that uses RDBMS instead of --BerkeleyDB (as the standard BDB backend does), though it can be used as such with -+LMDB (as the standard back-mdb backend does), though it can be used as such with - several limitations. Please see {{SECT: LDAP vs RDBMS}} for discussion. - - The idea is to use some meta-information to translate LDAP queries to SQL queries, -diff --git a/doc/guide/admin/install.sdf b/doc/guide/admin/install.sdf -index 9c47b24..4b4e85e 100644 ---- a/doc/guide/admin/install.sdf -+++ b/doc/guide/admin/install.sdf -@@ -118,23 +118,6 @@ OpenLDAP's {{slapd}}(8) {{TERM:MDB}} primary database backend uses the {{TERM:LM - software included with the OpenLDAP source. There is no need to download any - additional software to have {{MDB}} support. - --OpenLDAP's {{slapd}}(8) {{TERM:BDB}} and {{TERM:HDB}} deprecated database backends --require {{ORG[expand]Oracle}}'s Berkeley DB. --If not available at configure time, you will not be able to build --{{slapd}}(8) with these deprecated database backends. -- --Your operating system may provide a supported version of --Berkeley DB in the base system or as an optional --software component. If not, you'll have to obtain and --install it yourself. Berkeley DB is available from --{{ORG[expand]Oracle}}'s Berkeley DB download page if required. -- --There are several versions available from {{ORG[expand]Oracle}}. --Berkeley DB version 6.0.20 and later uses a software license that is --incompatible with LDAP technology and should not be used with OpenLDAP. -- --Note: Please see {{SECT:Recommended OpenLDAP Software Dependency Versions}} for --more information. - - - H3: Threads -diff --git a/doc/guide/admin/intro.sdf b/doc/guide/admin/intro.sdf -index c3dd92f..6aa2149 100644 ---- a/doc/guide/admin/intro.sdf -+++ b/doc/guide/admin/intro.sdf -@@ -346,7 +346,7 @@ really have a "directory". - - Existing commercial LDAP server implementations that use a relational database - are either from the first kind or the third. I don't know of any implementation --that uses a relational database to do inefficiently what BDB does efficiently. -+that uses a relational database to do inefficiently what LMDB does efficiently. - For those who are interested in "third way" (exposing EXISTING data from RDBMS - as LDAP tree, having some limitations compared to classic LDAP model, but making - it possible to interoperate between LDAP and SQL applications): -@@ -403,15 +403,9 @@ tags. - {{B:Choice of database backends}}: {{slapd}} comes with a variety - of different database backends you can choose from. They include - {{TERM:MDB}}, a hierarchical high-performance transactional database backend; --{{TERM:BDB}}, a high-performance transactional database backend (deprecated); --{{TERM:HDB}}, a hierarchical high-performance transactional --backend (deprecated); {{SHELL}}, a backend interface to arbitrary shell scripts; -+{{SHELL}}, a backend interface to arbitrary shell scripts; - and PASSWD, a simple backend interface to the {{passwd}}(5) file. --The MDB backend utilizes {{TERM:LMDB}}, a high performance replacement --for {{ORG[expand]Oracle}}'s Berkeley DB. --The BDB and HDB backends utilize {{ORG[expand]Oracle}} Berkeley DB. These --backends have been deprecated as LMDB provides significantly higher read --and write throughput and data reliability. -+The MDB backend utilizes {{TERM:LMDB}}. - - {{B:Multiple database instances}}: {{slapd}} can be configured to - serve multiple databases at the same time. This means that a single -diff --git a/doc/guide/admin/maintenance.sdf b/doc/guide/admin/maintenance.sdf -index deb14b9..3b7503f 100644 ---- a/doc/guide/admin/maintenance.sdf -+++ b/doc/guide/admin/maintenance.sdf -@@ -14,23 +14,7 @@ Backup strategies largely depend on the amount of change in the database - and how much of that change an administrator might be willing to lose in a - catastrophic failure. There are two basic methods that can be used: - --1. Backup the Berkeley database itself and periodically back up the transaction --log files: -- --Berkeley DB produces transaction logs that can be used to reconstruct --changes from a given point in time. For example, if an administrator were willing to only --lose one hour's worth of changes, they could take down the server in --the middle of the night, copy the Berkeley database files offsite, and bring --the server back online. Then, on an hourly basis, they could force a --database checkpoint, capture the log files that have been generated in the --past hour, and copy them offsite. The accumulated log files, in combination --with the previous database backup, could be used with db_recover to --reconstruct the database up to the time the last collection of log files was --copied offsite. This method affords good protection, with minimal space --overhead. -- -- --2. Periodically run slapcat and back up the LDIF file: -+1. Periodically run slapcat and back up the LDIF file: - - Slapcat can be run while slapd is active. However, one runs the risk of an - inconsistent database- not from the point of slapd, but from the point of -@@ -46,73 +30,11 @@ files can be rather large and the accumulation of the day's backups could - add up to a substantial amount of space. - - You can use {{slapcat}}(8) to generate an LDIF file for each of your {{slapd}}(8) --back-bdb or back-hdb databases. -+back-mdb databases. - - > slapcat -f slapd.conf -b "dc=example,dc=com" - --For back-bdb and back-hdb, this command may be ran while slapd(8) is running. -- --MORE on actual Berkeley DB backups later covering db_recover etc. -- --H2: Berkeley DB Logs -- --Berkeley DB log files grow, and the administrator has to deal with it. The --procedure is known as log file archival or log file rotation. -- --Note: The actual log file rotation is handled by the Berkeley DB engine. -- --Logs of current transactions need to be stored into files so that the database --can be recovered in the event of an application crash. Administrators can change --the size limit of a single log file (by default 10MB), and have old log files --removed automatically, by setting up DB environment (see below). The reason --Berkeley DB never deletes any log files by default is that the administrator --may wish to backup the log files before removal to make database recovery --possible even after a catastrophic failure, such as file system corruption. -- --Log file names are {{F:log.XXXXXXXXXX}} (X is a digit). By default the log files --are located in the BDB backend directory. The {{F:db_archive}} tool knows what --log files are used in current transactions, and what are not. Administrators can --move unused log files to a backup media, and delete them. To have them removed --automatically, place set_flags {{DB_LOG_AUTOREMOVE}} directive in {{F:DB_CONFIG}}. -- --Note: If the log files are removed automatically, recovery after a catastrophic --failure is likely to be impossible. -- --The files with names {{F:__db.001}}, {{F:__db.002}}, etc are just shared memory --regions (or whatever). These ARE NOT 'logs', they must be left alone. Don't be --afraid of them, they do not grow like logs do. -- --To understand the {{F:db_archive}} interface, the reader should refer to --chapter 9 of the Berkeley DB guide. In particular, the following chapters are --recommended: -- --* Database and log file archival - {{URL:http://www.oracle.com/technology/documentation/berkeley-db/db/ref/transapp/archival.html}} --* Log file removal - {{URL:http://www.oracle.com/technology/documentation/berkeley-db/db/ref/transapp/logfile.html}} --* Recovery procedures - {{URL:http://www.oracle.com/technology/documentation/berkeley-db/db/ref/transapp/recovery.html}} --* Hot failover - {{URL:http://www.oracle.com/technology/documentation/berkeley-db/db/ref/transapp/hotfail.html}} --* Complete list of Berkeley DB flags - {{URL:http://www.oracle.com/technology/documentation/berkeley-db/db/api_c/env_set_flags.html}} -- --Advanced installations can use special environment settings to fine-tune some --Berkeley DB options (change the log file limit, etc). This can be done by using --the {{F:DB_CONFIG}} file. This magic file can be created in BDB backend directory --set up by {{slapd.conf}}(5). More information on this file can be found in File --naming chapter. Specific directives can be found in C Interface, look for --{{DB_ENV->set_XXXX}} calls. -- --Note: options set in {{F:DB_CONFIG}} file override options set by OpenLDAP. --Use them with extreme caution. Do not use them unless You know what You are doing. -- --The advantages of {{F:DB_CONFIG}} usage can be the following: -- --* to keep data files and log files on different mediums (i.e. disks) to improve -- performance and/or reliability; --* to fine-tune some specific options (such as shared memory region sizes); --* to set the log file limit (please read Log file limits before doing this). -- --To figure out the best-practice BDB backup scenario, the reader is highly --recommended to read the whole Chapter 9: Berkeley DB Transactional Data Store Applications. --This chapter is a set of small pages with examples in C language. Non-programming --people can skip these examples without loss of knowledge. -+For back-mdb this command may be ran while slapd(8) is running. - - - H2: Checkpointing -@@ -148,7 +70,7 @@ type are: - +{{B: slapcat the current data out}} - - .{{S: }} --+{{B: Clear out the current data directory (/usr/local/var/openldap-data/) leaving DB_CONFIG in place}} -++{{B: Clear out the current data directory (/usr/local/var/openldap-data/)}} - - .{{S: }} - +{{B: Perform the software upgrades}} -diff --git a/doc/guide/admin/monitoringslapd.sdf b/doc/guide/admin/monitoringslapd.sdf -index 2781e47..bca2ec5 100644 ---- a/doc/guide/admin/monitoringslapd.sdf -+++ b/doc/guide/admin/monitoringslapd.sdf -@@ -214,11 +214,10 @@ backends, as well as backends loaded by modules. For example: - > monitoredInfo: config - > monitoredInfo: ldif - > monitoredInfo: monitor --> monitoredInfo: bdb --> monitoredInfo: hdb -+> monitoredInfo: mdb - --This indicates the {{config}}, {{ldif}}, {{monitor}}, {{bdb}}, --and {{hdb}} backends are available. -+This indicates the {{config}}, {{ldif}}, {{monitor}}, -+and {{mdb}} backends are available. - - The {{EX:cn=Backends,cn=Monitor}} object is also a container - for available backend objects. Each available backend object -@@ -242,21 +241,7 @@ contains information about a particular backend. For example: - > seeAlso: cn=Database 2,cn=Databases,cn=Monitor - > - > dn: cn=Backend 3,cn=Backends,cn=Monitor --> monitoredInfo: bdb --> monitorRuntimeConfig: TRUE --> supportedControl: 1.3.6.1.1.12 --> supportedControl: 2.16.840.1.113730.3.4.2 --> supportedControl: 1.3.6.1.4.1.4203.666.5.2 --> supportedControl: 1.2.840.113556.1.4.319 --> supportedControl: 1.3.6.1.1.13.1 --> supportedControl: 1.3.6.1.1.13.2 --> supportedControl: 1.3.6.1.4.1.4203.1.10.1 --> supportedControl: 1.2.840.113556.1.4.1413 --> supportedControl: 1.3.6.1.4.1.4203.666.11.7.2 --> seeAlso: cn=Database 1,cn=Databases,cn=Monitor --> --> dn: cn=Backend 4,cn=Backends,cn=Monitor --> monitoredInfo: hdb -+> monitoredInfo: mdb - > monitorRuntimeConfig: TRUE - > supportedControl: 1.3.6.1.1.12 - > supportedControl: 2.16.840.1.113730.3.4.2 -@@ -271,7 +256,7 @@ contains information about a particular backend. For example: - For each of these objects, monitorInfo indicates which backend the - information in the object is about. For instance, the {{EX:cn=Backend - 3,cn=Backends,cn=Monitor}} object contains (in the example) information --about the {{bdb}} backend. -+about the {{mdb}} backend. - - !block table - Attribute|Description -diff --git a/doc/guide/admin/overlays.sdf b/doc/guide/admin/overlays.sdf -index 2eb115b..712cd1b 100644 ---- a/doc/guide/admin/overlays.sdf -+++ b/doc/guide/admin/overlays.sdf -@@ -743,9 +743,9 @@ H4: Setting cache parameters - This directive enables proxy caching and sets general cache - parameters. The parameter specifies which underlying database - is to be used to hold cached entries. It should be set to --{{EX:mdb}}, {{EX:hdb}}, or {{EX:bdb}}. The parameter --specifies the total number of entries which may be held in the cache. --The parameter specifies the total number of attribute sets -+{{EX:mdb}}. The parameter specifies the -+total number of entries which may be held in the cache. The -+ parameter specifies the total number of attribute sets - (as specified by the {{EX:pcacheAttrset}} directive) that may be - defined. The parameter specifies the maximum number of - entries in a cacheable query. The specifies the consistency -diff --git a/doc/guide/admin/replication.sdf b/doc/guide/admin/replication.sdf -index 87139b5..bbc91e4 100644 ---- a/doc/guide/admin/replication.sdf -+++ b/doc/guide/admin/replication.sdf -@@ -225,8 +225,8 @@ in the replication context. - - The syncrepl engine, which is a consumer-side replication engine, - can work with any backends. The LDAP Sync provider can be configured --as an overlay on any backend, but works best with the {{back-bdb}}, --{{back-hdb}}, or {{back-mdb}} backends. -+as an overlay on any backend, but works best with the {{back-mdb}}, -+backends. - - The LDAP Sync provider maintains a {{EX:contextCSN}} for each - database as the current synchronization state indicator of the -@@ -423,9 +423,6 @@ writes have to go to just one of the mirror nodes at a time - server (slapd in proxy mode) or device (hardware load balancer) - is needed to manage which provider is currently active - * Backups are managed slightly differently --- If backing up the Berkeley database itself and periodically backing up the --transaction log files, then the same member of the mirror pair needs to be --used to collect logfiles until the next database backup is taken - - For configuration, please see the {{SECT:MirrorMode}} section below - -@@ -762,10 +759,7 @@ H4: Delta-syncrepl Consumer configuration - - - The above configuration assumes that you have a replicator identity defined --in your database that can be used to bind to the provider. In addition, --all of the databases (primary, replica, and the accesslog --storage database) should also have properly tuned {{DB_CONFIG}} files that meet --your needs. -+in your database that can be used to bind to the provider. - - Note: An accesslog database is unique to a given master. It should - never be replicated. -diff --git a/doc/guide/admin/slapdconf2.sdf b/doc/guide/admin/slapdconf2.sdf -index cb51d88..8a3e969 100644 ---- a/doc/guide/admin/slapdconf2.sdf -+++ b/doc/guide/admin/slapdconf2.sdf -@@ -69,7 +69,7 @@ used to configure the software. - the schema that is hard-coded in slapd). - .. Child entries of {{EX:cn=schema,cn=config}} contain user schema as - loaded from config files or added at runtime. --* Backend-specific configuration -+* Backend-specific configuration - * Database-specific configuration - .. Overlays are defined in children of the Database entry. - .. Databases and Overlays may also have other miscellaneous children. -@@ -207,7 +207,7 @@ Level Keyword Description - !endblock - - The desired log level can be input as a single integer that --combines the (ORed) desired levels, both in decimal or in hexadecimal -+combines the (ORed) desired levels, both in decimal or in hexadecimal - notation, as a list of integers (that are ORed internally), or as a list of the names that are shown between brackets, such that - - > olcLogLevel 129 -@@ -364,10 +364,8 @@ supported backend types listed in Table 5.2. - !block table; align=Center; coltags="EX,N"; \ - title="Table 5.2: Database Backends" - Types Description --bdb Berkeley DB transactional backend (deprecated) - config Slapd configuration backend - dnssrv DNS SRV backend --hdb Hierarchical variant of bdb backend (deprecated) - ldap Lightweight Directory Access Protocol (Proxy) backend - ldif Lightweight Data Interchange Format backend - mdb Memory-Mapped DB backend -@@ -381,7 +379,7 @@ sql SQL Programmable backend - - \Example: - --> olcBackend: bdb -+> olcBackend: mdb - - There are no other directives defined for this entry. Specific backend - types may define additional attributes for their particular use but so -@@ -391,9 +389,9 @@ not appear in any actual configurations. - - H4: Sample Entry - --> dn: olcBackend=bdb,cn=config -+> dn: olcBackend=mdb,cn=config - > objectClass: olcBackendConfig --> olcBackend: bdb -+> olcBackend: mdb - - - H3: Database-specific Directives -@@ -421,9 +419,9 @@ databases. - - \Example: - --> olcDatabase: bdb -+> olcDatabase: mdb - --This marks the beginning of a new {{TERM:BDB}} database instance. -+This marks the beginning of a new {{TERM:MDB}} database instance. - - - H4: olcAccess: to [ by [] [] ]+ -@@ -642,7 +640,7 @@ schema conformance. The default is off. - The {{EX:binddn}} parameter gives the DN to bind as for the - syncrepl searches to the provider slapd. It should be a DN - which has read access to the replication content in the --master database. -+master database. - - The {{EX:bindmethod}} is {{EX:simple}} or {{EX:sasl}}, - depending on whether simple password-based authentication or -@@ -683,8 +681,8 @@ conforms to the obsolete {{changelog}} format. If the {{EX:syncdata}} - parameter is omitted or set to {{EX:"default"}} then the log - parameters are ignored. - --The {{syncrepl}} replication mechanism is supported by the {{bdb}}, --{{hdb}}, and {{mdb}} backends. -+The {{syncrepl}} replication mechanism is supported by the {{mdb}} -+backend. - - See the {{SECT:LDAP Sync Replication}} chapter of this guide for - more information on how to use this directive. -@@ -731,21 +729,20 @@ H4: Sample Entries - >olcRootDN: cn=Manager,dc=example,dc=com - - --H3: BDB and HDB Database Directives -+H3: MDB Database Directives - --Directives in this category apply to both the {{TERM:BDB}} --and the {{TERM:HDB}} database. -+Directives in this category apply to the {{TERM:MDB}} -+database backend. - They are used in an olcDatabase entry in addition to the generic - database directives defined above. For a complete reference --of BDB/HDB configuration directives, see {{slapd-bdb}}(5). In --addition to the {{EX:olcDatabaseConfig}} objectClass, BDB and HDB --database entries must have the {{EX:olcBdbConfig}} and --{{EX:olcHdbConfig}} objectClass, respectively. -+of MDB configuration directives, see {{slapd-mdb}}(5). In -+addition to the {{EX:olcDatabaseConfig}} objectClass, MDB -+database entries must have the {{EX:olcMdbConfig}} objectClass. - - - H4: olcDbDirectory: - --This directive specifies the directory where the BDB files -+This directive specifies the directory where the MDB files - containing the database and associated indices live. - - \Default: -@@ -753,98 +750,48 @@ containing the database and associated indices live. - > olcDbDirectory: /usr/local/var/openldap-data - - --H4: olcDbCachesize: -- --This directive specifies the size in entries of the in-memory --cache maintained by the BDB backend database instance. -- --\Default: -- --> olcDbCachesize: 1000 -- -- - H4: olcDbCheckpoint: - --This directive specifies how often to checkpoint the BDB transaction log. --A checkpoint operation flushes the database buffers to disk and writes a --checkpoint record in the log. -+This directive specifies the frequency for flushing the database disk -+buffers. This directive is only needed if the {{olcDbNoSync}} option is -+{{EX:TRUE}}. - The checkpoint will occur if either data has been written or - minutes have passed since the last checkpoint. Both arguments default - to zero, in which case they are ignored. When the argument is - non-zero, an internal task will run every minutes to perform the --checkpoint. See the Berkeley DB reference guide for more details. -+checkpoint. Note: currently the _kbyte_ setting is unimplemented. - - \Example: - - > olcDbCheckpoint: 1024 10 - - --H4: olcDbConfig: -+H4: olcDbEnvFlags: {nosync,nometasync,writemap,mapasync,nordahead} - --This attribute specifies a configuration directive to be placed in the --{{EX:DB_CONFIG}} file of the database directory. At server startup time, if --no such file exists yet, the {{EX:DB_CONFIG}} file will be created and the --settings in this attribute will be written to it. If the file exists, --its contents will be read and displayed in this attribute. The attribute --is multi-valued, to accommodate multiple configuration directives. No default --is provided, but it is essential to use proper settings here to get the --best server performance. -+This option specifies flags for finer-grained control of the LMDB library's -+operation. - --Any changes made to this attribute will be written to the {{EX:DB_CONFIG}} --file and will cause the database environment to be reset so the changes --can take immediate effect. If the environment cache is large and has not --been recently checkpointed, this reset operation may take a long time. It --may be advisable to manually perform a single checkpoint using the Berkeley DB --{{db_checkpoint}} utility before using LDAP Modify to change this --attribute. -+* {{F:nosync}}: This is exactly the same as the dbnosync directive. - --\Example: -+* {{F:nometasync}}: Flush the data on a commit, but skip the sync of the meta -+page. This mode is slightly faster than doing a full sync, but can -+potentially lose the last committed transaction if the operating system -+crashes. If both nometasync and nosync are set, the nosync flag takes -+precedence. - --> olcDbConfig: set_cachesize 0 10485760 0 --> olcDbConfig: set_lg_bsize 2097512 --> olcDbConfig: set_lg_dir /var/tmp/bdb-log --> olcDbConfig: set_flags DB_LOG_AUTOREMOVE -- --In this example, the BDB cache is set to 10MB, the BDB transaction log --buffer size is set to 2MB, and the transaction log files are to be stored --in the /var/tmp/bdb-log directory. Also a flag is set to tell BDB to --delete transaction log files as soon as their contents have been --checkpointed and they are no longer needed. Without this setting the --transaction log files will continue to accumulate until some other --cleanup procedure removes them. See the Berkeley DB documentation for the --{{EX:db_archive}} command for details. For a complete list of Berkeley DB --flags please see - {{URL:http://www.oracle.com/technology/documentation/berkeley-db/db/api_c/env_set_flags.html}} -- --Ideally the BDB cache must be --at least as large as the working set of the database, the log buffer size --should be large enough to accommodate most transactions without overflowing, --and the log directory must be on a separate physical disk from the main --database files. And both the database directory and the log directory --should be separate from disks used for regular system activities such as --the root, boot, or swap filesystems. See the FAQ-o-Matic and the Berkeley DB --documentation for more details. -+* {{F:writemap}}: Use a writable memory map instead of just read-only. This -+speeds up write operations but makes the database vulnerable to corruption in -+case any bugs in slapd cause stray writes into the mmap region. - -+* {{F:mapasync}}: When using a writable memory map and performing flushes on -+each commit, use an asynchronous flush instead of a synchronous flush (the -+default). This option has no effect if writemap has not been set. It also has -+no effect if nosync is set. - --H4: olcDbNosync: { TRUE | FALSE } -- --This option causes on-disk database contents to not be immediately --synchronized with in memory changes upon change. Setting this option --to {{EX:TRUE}} may improve performance at the expense of data integrity. This --directive has the same effect as using --> olcDbConfig: set_flags DB_TXN_NOSYNC -- -- --H4: olcDbIDLcacheSize: -- --Specify the size of the in-memory index cache, in index slots. The --default is zero. A larger value will speed up frequent searches of --indexed entries. The optimal size will depend on the data and search --characteristics of the database, but using a number three times --the entry cache size is a good starting point. -- --\Example: -- --> olcDbIDLcacheSize: 3000 -+* {{F:nordahead}}: Turn off file readahead. Usually the OS performs readahead -+on every read request. This usually boosts read performance but can be -+harmful to random access read performance if the system's memory is full and -+the DB is larger than RAM. This option is not implemented on Windows. - - - H4: olcDbIndex: { | default} [pres,eq,approx,sub,none] -@@ -874,7 +821,7 @@ matches do not use an index. However, some attributes do support - indexing for inequality matches, based on the equality index. - - A substring index can be more explicitly specified as {{EX:subinitial}}, --{{EX:subany}}, or {{EX:subfinal}}, corresponding to the three -+{{EX:subany}}, or {{EX:subfinal}}, corresponding to the three - possible components - of a substring match filter. A subinitial index only indexes - substrings that appear at the beginning of an attribute value. -@@ -890,7 +837,7 @@ attribute that inherits from {{EX:name}} to be indexed. - By default, no indices are maintained. It is generally advised - that minimally an equality index upon objectClass be maintained. - --> olcDbindex: objectClass eq -+> olcDbIndex: objectClass eq - - Additional indices should be configured corresponding to the - most common searches that are used on the database. -@@ -907,18 +854,24 @@ stopped before the index task completes, indexing will have to be - manually completed using the slapindex tool. - - --H4: olcDbLinearIndex: { TRUE | FALSE } -+H4: olcDbMaxReaders: -+ -+This directive specifies the maximum number of threads that may have -+concurrent read access to the database. Tools such as slapcat count as a -+single thread, in addition to threads in any active slapd processes. The -+default is 126. -+ - --If this setting is {{EX:TRUE}} slapindex will index one attribute --at a time. The default settings is {{EX:FALSE}} in which case all --indexed attributes of an entry are processed at the same time. When --enabled, each indexed attribute is processed individually, using --multiple passes through the entire database. This option improves --slapindex performance when the database size exceeds the BDB cache --size. When the BDB cache is large enough, this option is not needed --and will decrease performance. Also by default, slapadd performs --full indexing and so a separate slapindex run is not needed. With --this option, slapadd does no indexing and slapindex must be used. -+H4: olcDbMaxSize: -+ -+This directive specifies the maximum size of the database in bytes. A memory -+map of this size is allocated at startup time and the database will not be -+allowed to grow beyond this size. The default is 10485760 bytes (10MB). This -+setting may be changed upward if the configured limit needs to be increased. -+ -+Note: It is important to set this to as large a value as possible, (relative -+to anticipated growth of the actual data over time) since growing the size -+later may not be practical when the system is under heavy load. - - - H4: olcDbMode: { | } -@@ -932,6 +885,18 @@ created database index files should have. This can be in the form - > olcDbMode: 0600 - - -+H4: olcDbRtxnsize: -+ -+This directive specifies the maximum number of entries to process in a single -+read transaction when executing a large search. Long-lived read transactions -+prevent old database pages from being reused in write transactions, and so -+can cause significant growth of the database file when there is heavy write -+traffic. This setting causes the read transaction in large searches to be -+released and reacquired after the given number of entries has been read, to -+give writers the opportunity to reclaim old database pages. The default is -+10000. -+ -+ - H4: olcDbSearchStack: - - Specify the depth of the stack used for search filter evaluation. -@@ -955,33 +920,21 @@ to take effect. - > olcDbSearchStack: 16 - - --H4: olcDbShmKey: -- --Specify a key for a shared memory BDB environment. By default the BDB --environment uses memory mapped files. If a non-zero value is specified, --it will be used as the key to identify a shared memory region that will --house the environment. -- --\Example: -+H4: olcDbNosync: { TRUE | FALSE } - --> olcDbShmKey: 42 -+This directive causes on-disk database contents to not be immediately -+synchronized with in memory changes upon change. Setting this option -+to {{EX:TRUE}} may improve performance at the expense of data integrity. - - - H4: Sample Entry - -->dn: olcDatabase=hdb,cn=config -+>dn: olcDatabase=mdb,cn=config - >objectClass: olcDatabaseConfig -->objectClass: olcHdbConfig -->olcDatabase: hdb -+>objectClass: olcMdbConfig -+>olcDatabase: mdb - >olcSuffix: dc=example,dc=com - >olcDbDirectory: /usr/local/var/openldap-data -->olcDbCacheSize: 1000 -->olcDbCheckpoint: 1024 10 -->olcDbConfig: set_cachesize 0 10485760 0 -->olcDbConfig: set_lg_bsize 2097152 -->olcDbConfig: set_lg_dir /var/tmp/bdb-log -->olcDbConfig: set_flags DB_LOG_AUTOREMOVE -->olcDbIDLcacheSize: 3000 - >olcDbIndex: objectClass eq - - -@@ -989,7 +942,7 @@ H2: Configuration Example - - The following is an example configuration, interspersed - with explanatory text. It defines two databases to handle --different parts of the {{TERM:X.500}} tree; both are {{TERM:BDB}} -+different parts of the {{TERM:X.500}} tree; both are {{TERM:MDB}} - database instances. The line numbers shown are provided for - reference only and are not included in the actual file. First, the - global configuration section: -@@ -999,7 +952,7 @@ E: 2. dn: cn=config - E: 3. objectClass: olcGlobal - E: 4. cn: config - E: 5. olcReferral: ldap://root.openldap.org --E: 6. -+E: 6. - - Line 1 is a comment. Lines 2-4 identify this as the global - configuration entry. -@@ -1013,7 +966,7 @@ E: 7. # internal schema - E: 8. dn: cn=schema,cn=config - E: 9. objectClass: olcSchemaConfig - E: 10. cn: schema --E: 11. -+E: 11. - - Line 7 is a comment. Lines 8-10 identify this as the root of - the schema subtree. The actual schema definitions in this entry -@@ -1022,7 +975,7 @@ Line 11 is a blank line, indicating the end of this entry. - - E: 12. # include the core schema - E: 13. include: file:///usr/local/etc/openldap/schema/core.ldif --E: 14. -+E: 14. - - Line 12 is a comment. Line 13 is an LDIF include directive which - accesses the {{core}} schema definitions in LDIF format. Line 14 -@@ -1037,7 +990,7 @@ E: 16. dn: olcDatabase=frontend,cn=config - E: 17. objectClass: olcDatabaseConfig - E: 18. olcDatabase: frontend - E: 19. olcAccess: to * by * read --E: 20. -+E: 20. - - Line 15 is a comment. Lines 16-18 identify this entry as the global - database entry. Line 19 is a global access control. It applies to all -@@ -1066,16 +1019,16 @@ inaccessible.) - - Line 28 is a blank line. - --The next entry defines a BDB backend that will handle queries for things -+The next entry defines an MDB backend that will handle queries for things - in the "dc=example,dc=com" portion of the tree. Indices are to be maintained - for several attributes, and the {{EX:userPassword}} attribute is to be - protected from unauthorized access. - --E: 29. # BDB definition for example.com --E: 30. dn: olcDatabase=bdb,cn=config -+E: 29. # MDB definition for example.com -+E: 30. dn: olcDatabase=mdb,cn=config - E: 31. objectClass: olcDatabaseConfig --E: 32. objectClass: olcBdbConfig --E: 33. olcDatabase: bdb -+E: 32. objectClass: olcMdbConfig -+E: 33. olcDatabase: mdb - E: 34. olcSuffix: dc=example,dc=com - E: 35. olcDbDirectory: /usr/local/var/openldap-data - E: 36. olcRootDN: cn=Manager,dc=example,dc=com -@@ -1092,7 +1045,7 @@ E: 46. olcAccess: to * - E: 47. by self write - E: 48. by dn.base="cn=Admin,dc=example,dc=com" write - E: 49. by * read --E: 50. -+E: 50. - - Line 29 is a comment. Lines 30-33 identify this entry as a BDB database - configuration entry. Line 34 specifies the DN suffix -@@ -1116,16 +1069,16 @@ entry, but may be read by all users (authenticated or not). - Line 50 is a blank line, indicating the end of this entry. - - The next entry defines another --BDB database. This one handles queries involving the -+MDB database. This one handles queries involving the - {{EX:dc=example,dc=net}} subtree but is managed by the same entity - as the first database. Note that without line 60, the read access - would be allowed due to the global access rule at line 19. - --E: 51. # BDB definition for example.net --E: 52. dn: olcDatabase=bdb,cn=config -+E: 51. # MDB definition for example.net -+E: 52. dn: olcDatabase=mdb,cn=config - E: 53. objectClass: olcDatabaseConfig --E: 54. objectClass: olcBdbConfig --E: 55. olcDatabase: bdb -+E: 54. objectClass: olcMdbConfig -+E: 55. olcDatabase: mdb - E: 56. olcSuffix: dc=example,dc=net - E: 57. olcDbDirectory: /usr/local/var/openldap-data-net - E: 58. olcRootDN: cn=Manager,dc=example,dc=com -diff --git a/doc/guide/admin/slapdconfig.sdf b/doc/guide/admin/slapdconfig.sdf -index d943eb9..8b1162c 100644 ---- a/doc/guide/admin/slapdconfig.sdf -+++ b/doc/guide/admin/slapdconfig.sdf -@@ -90,7 +90,7 @@ H4: access to [ by [] [] ]+ - - This directive grants access (specified by ) to a set - of entries and/or attributes (specified by ) by one or more --requestors (specified by ). See the {{SECT:Access Control}} section of -+requestors (specified by ). See the {{SECT:Access Control}} section of - this guide for basic usage. - - !if 0 -@@ -162,7 +162,7 @@ Level Keyword Description - !endblock - - The desired log level can be input as a single integer that --combines the (ORed) desired levels, both in decimal or in hexadecimal -+combines the (ORed) desired levels, both in decimal or in hexadecimal - notation, as a list of integers (that are ORed internally), or as a list of the names that are shown between brackets, such that - - > loglevel 129 -@@ -264,9 +264,7 @@ supported backend types listed in Table 6.2. - !block table; align=Center; coltags="EX,N"; \ - title="Table 6.2: Database Backends" - Types Description --bdb Berkeley DB transactional backend (deprecated) - dnssrv DNS SRV backend --hdb Hierarchical variant of bdb backend (deprecated) - ldap Lightweight Directory Access Protocol (Proxy) backend - mdb Memory-Mapped DB backend - meta Meta Directory backend -@@ -507,7 +505,7 @@ defaults for these parameters come from {{ldap.conf}}(5). - The {{EX:binddn}} parameter gives the DN to bind as for the - syncrepl searches to the provider slapd. It should be a DN - which has read access to the replication content in the --master database. -+master database. - - The {{EX:bindmethod}} is {{EX:simple}} or {{EX:sasl}}, - depending on whether simple password-based authentication or -@@ -564,8 +562,7 @@ conforms to the obsolete {{changelog}} format. If the {{EX:syncdata}} - parameter is omitted or set to {{EX:"default"}} then the log - parameters are ignored. - --The {{syncrepl}} replication mechanism is supported by the {{bdb}}, --{{hdb}}, and {{mdb}} backends. -+The {{syncrepl}} replication mechanism is supported by the {{mdb}} backends. - - See the {{SECT:LDAP Sync Replication}} chapter of this guide for - more information on how to use this directive. -@@ -584,19 +581,18 @@ If specified multiple times, each {{TERM:URL}} is provided. - > updateref ldap://master.example.net - - --H3: BDB and HDB Database Directives -+H3: MDB Database Directives - --Directives in this category only apply to both the {{TERM:BDB}} --and the {{TERM:HDB}} database. --That is, they must follow a "database bdb" or "database hdb" line --and come before any --subsequent "backend" or "database" line. For a complete reference --of BDB/HDB configuration directives, see {{slapd-bdb}}(5). -+Directives in this category only apply to the {{TERM:MDB}} -+database backend. -+That is, they must follow a "database mdb" line -+and come before any subsequent "backend" or "database" lines. -+For a complete reference of MDB configuration directives, see {{slapd-mdb}}(5). - - - H4: directory - --This directive specifies the directory where the BDB files -+This directive specifies the directory where the MDB files - containing the database and associated indices live. - - \Default: -@@ -604,11 +600,189 @@ containing the database and associated indices live. - > directory /usr/local/var/openldap-data - - -+H4: checkpoint -+ -+This directive specifies the frequency for flushing the database disk -+buffers. This directive is only needed if the {{dbnosync}} option is -+{{EX:TRUE}}. -+The checkpoint will occur if either data has been written or -+ minutes have passed since the last checkpoint. Both arguments default -+to zero, in which case they are ignored. When the argument is -+non-zero, an internal task will run every minutes to perform the -+checkpoint. Note: currently the _kbyte_ setting is unimplemented. -+ -+\Example: -+ -+> checkpoint: 1024 10 -+ -+H4: dbnosync: { TRUE | FALSE } -+ -+This directive causes on-disk database contents to not be immediately -+synchronized with in memory changes upon change. Setting this option -+to {{EX:TRUE}} may improve performance at the expense of data integrity. -+ -+ -+H4: envflags: {nosync,nometasync,writemap,mapasync,nordahead} -+ -+This option specifies flags for finer-grained control of the LMDB library's -+operation. -+ -+* {{F:nosync}}: This is exactly the same as the dbnosync directive. -+ -+* {{F:nometasync}}: Flush the data on a commit, but skip the sync of the meta -+page. This mode is slightly faster than doing a full sync, but can -+potentially lose the last committed transaction if the operating system -+crashes. If both nometasync and nosync are set, the nosync flag takes -+precedence. -+ -+* {{F:writemap}}: Use a writable memory map instead of just read-only. This -+speeds up write operations but makes the database vulnerable to corruption in -+case any bugs in slapd cause stray writes into the mmap region. -+ -+* {{F:mapasync}}: When using a writable memory map and performing flushes on -+each commit, use an asynchronous flush instead of a synchronous flush (the -+default). This option has no effect if writemap has not been set. It also has -+no effect if nosync is set. -+ -+* {{F:nordahead}}: Turn off file readahead. Usually the OS performs readahead -+on every read request. This usually boosts read performance but can be -+harmful to random access read performance if the system's memory is full and -+the DB is larger than RAM. This option is not implemented on Windows. -+ -+ -+H4: index: { | default} [pres,eq,approx,sub,none] -+ -+This directive specifies the indices to maintain for the given -+attribute. If only an {{EX:}} is given, the default -+indices are maintained. The index keywords correspond to the -+common types of matches that may be used in an LDAP search filter. -+ -+\Example: -+ -+> index: default pres,eq -+> index: uid -+> index: cn,sn pres,eq,sub -+> index: objectClass eq -+ -+The first line sets the default set of indices to maintain to -+present and equality. The second line causes the default (pres,eq) -+set of indices to be maintained for the {{EX:uid}} attribute type. -+The third line causes present, equality, and substring indices to -+be maintained for {{EX:cn}} and {{EX:sn}} attribute types. The -+fourth line causes an equality index for the {{EX:objectClass}} -+attribute type. -+ -+There is no index keyword for inequality matches. Generally these -+matches do not use an index. However, some attributes do support -+indexing for inequality matches, based on the equality index. -+ -+A substring index can be more explicitly specified as {{EX:subinitial}}, -+{{EX:subany}}, or {{EX:subfinal}}, corresponding to the three -+possible components -+of a substring match filter. A subinitial index only indexes -+substrings that appear at the beginning of an attribute value. -+A subfinal index only indexes substrings that appear at the end -+of an attribute value, while subany indexes substrings that occur -+anywhere in a value. -+ -+Note that by default, setting an index for an attribute also -+affects every subtype of that attribute. E.g., setting an equality -+index on the {{EX:name}} attribute causes {{EX:cn}}, {{EX:sn}}, and every other -+attribute that inherits from {{EX:name}} to be indexed. -+ -+By default, no indices are maintained. It is generally advised -+that minimally an equality index upon objectClass be maintained. -+ -+> index: objectClass eq -+ -+Additional indices should be configured corresponding to the -+most common searches that are used on the database. -+Presence indexing should not be configured for an attribute -+unless the attribute occurs very rarely in the database, and -+presence searches on the attribute occur very frequently during -+normal use of the directory. Most applications don't use presence -+searches, so usually presence indexing is not very useful. -+ -+ -+H4: maxreaders: -+ -+This directive specifies the maximum number of threads that may have -+concurrent read access to the database. Tools such as slapcat count as a -+single thread, in addition to threads in any active slapd processes. The -+default is 126. -+ -+ -+H4: maxsize: -+ -+This directive specifies the maximum size of the database in bytes. A memory -+map of this size is allocated at startup time and the database will not be -+allowed to grow beyond this size. The default is 10485760 bytes (10MB). This -+setting may be changed upward if the configured limit needs to be increased. -+ -+Note: It is important to set this to as large a value as possible, (relative -+to anticipated growth of the actual data over time) since growing the size -+later may not be practical when the system is under heavy load. -+ -+ -+H4: mode: { | } -+ -+This directive specifies the file protection mode that newly -+created database index files should have. This can be in the form -+{{EX:0600}} or {{EX:-rw-------}} -+ -+\Default: -+ -+> mode: 0600 -+ -+ -+H4: rtxnsize: -+ -+This directive specifies the maximum number of entries to process in a single -+read transaction when executing a large search. Long-lived read transactions -+prevent old database pages from being reused in write transactions, and so -+can cause significant growth of the database file when there is heavy write -+traffic. This setting causes the read transaction in large searches to be -+released and reacquired after the given number of entries has been read, to -+give writers the opportunity to reclaim old database pages. The default is -+10000. -+ -+ -+H4: searchstack: -+ -+Specify the depth of the stack used for search filter evaluation. -+Search filters are evaluated on a stack to accommodate nested {{EX:AND}} / -+{{EX:OR}} clauses. An individual stack is allocated for each server thread. -+The depth of the stack determines how complex a filter can be evaluated -+without requiring any additional memory allocation. Filters that are -+nested deeper than the search stack depth will cause a separate stack to -+be allocated for that particular search operation. These separate allocations -+can have a major negative impact on server performance, but specifying -+too much stack will also consume a great deal of memory. Each search -+uses 512K bytes per level on a 32-bit machine, or 1024K bytes per level -+on a 64-bit machine. The default stack depth is 16, thus 8MB or 16MB -+per thread is used on 32 and 64 bit machines, respectively. Also the -+512KB size of a single stack slot is set by a compile-time constant which -+may be changed if needed; the code must be recompiled for the change -+to take effect. -+ -+\Default: -+ -+> searchstack: 16 -+ -+ -+H4: Sample Entry -+ -+>database mdb -+>suffix: "dc=example,dc=com" -+>directory: /usr/local/var/openldap-data -+>index: objectClass eq -+ -+ - H2: Configuration File Example - - The following is an example configuration file, interspersed - with explanatory text. It defines two databases to handle --different parts of the {{TERM:X.500}} tree; both are {{TERM:BDB}} -+different parts of the {{TERM:X.500}} tree; both are {{TERM:MDB}} - database instances. The line numbers shown are provided for - reference only and are not included in the actual file. First, the - global configuration section: -@@ -617,7 +791,7 @@ E: 1. # example config file - global configuration section - E: 2. include /usr/local/etc/schema/core.schema - E: 3. referral ldap://root.openldap.org - E: 4. access to * by * read -- -+ - Line 1 is a comment. Line 2 includes another config file - which contains {{core}} schema definitions. - The {{EX:referral}} directive on line 3 -@@ -629,7 +803,7 @@ Line 4 is a global access control. It applies to all - entries (after any applicable database-specific access - controls). - --The next section of the configuration file defines a BDB -+The next section of the configuration file defines a MDB - backend that will handle queries for things in the - "dc=example,dc=com" portion of the tree. The - database is to be replicated to two slave slapds, one on -@@ -637,8 +811,8 @@ truelies, the other on judgmentday. Indices are to be - maintained for several attributes, and the {{EX:userPassword}} - attribute is to be protected from unauthorized access. - --E: 5. # BDB definition for the example.com --E: 6. database bdb -+E: 5. # MDB definition for the example.com -+E: 6. database mdb - E: 7. suffix "dc=example,dc=com" - E: 8. directory /usr/local/var/openldap-data - E: 9. rootdn "cn=Manager,dc=example,dc=com" -@@ -683,8 +857,8 @@ BDB database. This one handles queries involving the - as the first database. Note that without line 39, the read access - would be allowed due to the global access rule at line 4. - --E: 33. # BDB definition for example.net --E: 34. database bdb -+E: 33. # MDB definition for example.net -+E: 34. database mdb - E: 35. suffix "dc=example,dc=net" - E: 36. directory /usr/local/var/openldap-data-net - E: 37. rootdn "cn=Manager,dc=example,dc=com" -diff --git a/doc/guide/admin/tuning.sdf b/doc/guide/admin/tuning.sdf -index 7074561..795c5ce 100644 ---- a/doc/guide/admin/tuning.sdf -+++ b/doc/guide/admin/tuning.sdf -@@ -27,10 +27,6 @@ H3: Memory - - Scale your cache to use available memory and increase system memory if you can. - --See {{SECT:Caching}} for BDB cache tuning hints. --Note that LMDB uses no cache of its own and has no tuning options, so the Caching --section can be ignored when using LMDB. -- - - H3: Disks - -@@ -39,15 +35,7 @@ types perform best with your workload. (On our own Linux testing, EXT2 and JFS - tend to provide better write performance than everything else, including - newer filesystems like EXT4, BTRFS, etc.) - --Use fast subsystems. Put each database and logs on separate disks --(for BDB this is configurable via {{DB_CONFIG}}): -- --> # Data Directory --> set_data_dir /data/db --> --> # Transaction Log settings --> set_lg_dir /logs -- -+Use fast subsystems. Put each database on separate disks - - H3: Network Topology - -@@ -131,7 +119,7 @@ H3: What to watch out for - - The most common message you'll see that you should pay attention to is: - --> "<= bdb_equality_candidates: (foo) index_param failed (18)" -+> "<= mdb_equality_candidates: (foo) index_param failed (18)" - - That means that some application tried to use an equality filter ({{foo=}}) - and attribute {{foo}} does not have an equality index. If you see a lot of these -@@ -163,165 +151,6 @@ For syslog-ng, add or modify the following line in {{syslog-ng.conf}}: - where n is the number of lines which will be buffered before a write. - - --H2: Caching -- --We all know what caching is, don't we? -- --In brief, "A cache is a block of memory for temporary storage of data likely --to be used again" - {{URL:http://en.wikipedia.org/wiki/Cache}} -- --There are 3 types of caches, BerkeleyDB's own cache, {{slapd}}(8) --entry cache and {{TERM:IDL}} (IDL) cache. -- -- --H3: Berkeley DB Cache -- --There are two ways to tune for the BDB cachesize: -- --(a) BDB cache size necessary to load the database via slapadd in optimal time -- --(b) BDB cache size necessary to have a high performing running slapd once the data is loaded -- --For (a), the optimal cachesize is the size of the entire database. If you --already have the database loaded, this is simply a -- --> du -c -h *.bdb -- --in the directory containing the OpenLDAP ({{/usr/local/var/openldap-data}}) data. -- --For (b), the optimal cachesize is just the size of the {{id2entry.bdb}} file, --plus about 10% for growth. -- --The tuning of {{DB_CONFIG}} should be done for each BDB type database --instantiated (back-bdb, back-hdb). -- --Note that while the {{TERM:BDB}} cache is just raw chunks of memory and --configured as a memory size, the {{slapd}}(8) entry cache holds parsed entries, --and the size of each entry is variable. -- --There is also an IDL cache which is used for Index Data Lookups. --If you can fit all of your database into slapd's entry cache, and all of your --index lookups fit in the IDL cache, that will provide the maximum throughput. -- --If not, but you can fit the entire database into the BDB cache, then you --should do that and shrink the slapd entry cache as appropriate. -- --Failing that, you should balance the BDB cache against the entry cache. -- --It is worth noting that it is not absolutely necessary to configure a BerkeleyDB --cache equal in size to your entire database. All that you need is a cache --that's large enough for your "working set." -- --That means, large enough to hold all of the most frequently accessed data, --plus a few less-frequently accessed items. -- --For more information, please see: {{URL:http://www.oracle.com/technology/documentation/berkeley-db/db/ref/am_conf/cachesize.html}} -- --H4: Calculating Cachesize -- --The back-bdb database lives in two main files, {{F:dn2id.bdb}} and {{F:id2entry.bdb}}. --These are B-tree databases. We have never documented the back-bdb internal --layout before, because it didn't seem like something anyone should have to worry --about, nor was it necessarily cast in stone. But here's how it works today, --in OpenLDAP 2.4. -- --A B-tree is a balanced tree; it stores data in its leaf nodes and bookkeeping --data in its interior nodes (If you don't know what tree data structures look -- like in general, Google for some references, because that's getting far too --elementary for the purposes of this discussion). -- --For decent performance, you need enough cache memory to contain all the nodes --along the path from the root of the tree down to the particular data item --you're accessing. That's enough cache for a single search. For the general case, --you want enough cache to contain all the internal nodes in the database. -- --> db_stat -d -- --will tell you how many internal pages are present in a database. You should --check this number for both dn2id and id2entry. -- --Also note that {{id2entry}} always uses 16KB per "page", while {{dn2id}} uses whatever --the underlying filesystem uses, typically 4 or 8KB. To avoid thrashing, --your cache must be at least as large as the number of internal pages in both --the {{dn2id}} and {{id2entry}} databases, plus some extra space to accommodate --the actual leaf data pages. -- --For example, in my OpenLDAP 2.4 test database, I have an input LDIF file that's --about 360MB. With the back-hdb backend this creates a {{dn2id.bdb}} that's 68MB, --and an {{id2entry}} that's 800MB. db_stat tells me that {{dn2id}} uses 4KB pages, has --433 internal pages, and 6378 leaf pages. The id2entry uses 16KB pages, has 52 --internal pages, and 45912 leaf pages. In order to efficiently retrieve any --single entry in this database, the cache should be at least -- --> (433+1) * 4KB + (52+1) * 16KB in size: 1736KB + 848KB =~ 2.5MB. -- --This doesn't take into account other library overhead, so this is even lower --than the barest minimum. The default cache size, when nothing is configured, --is only 256KB. -- --This 2.5MB number also doesn't take indexing into account. Each indexed --attribute results in another database file. Earlier versions of OpenLDAP --kept these index databases in Hash format, but from OpenLDAP 2.2 onward --the index databases are in B-tree format so the same procedure can --be used to calculate the necessary amount of cache for each index database. -- --For example, if your only index is for the objectClass attribute and db_stat --reveals that {{objectClass.bdb}} has 339 internal pages and uses 4096 byte --pages, the additional cache needed for just this attribute index is -- --> (339+1) * 4KB =~ 1.3MB. -- --With only this index enabled, I'd figure at least a 4MB cache for this backend. --(Of course you're using a single cache shared among all of the database files, --so the cache pages will most likely get used for something other than what you --accounted for, but this gives you a fighting chance.) -- --With this 4MB cache I can slapcat this entire database on my 1.3GHz PIII in --1 minute, 40 seconds. With the cache doubled to 8MB, it still takes the same 1:40s. --Once you've got enough cache to fit the B-tree internal pages, increasing it --further won't have any effect until the cache really is large enough to hold --100% of the data pages. I don't have enough free RAM to hold all the 800MB --id2entry data, so 4MB is good enough. -- --With back-bdb and back-hdb you can use "db_stat -m" to check how well the --database cache is performing. -- --For more information on {{db_stat}}: {{URL:http://www.oracle.com/technology/documentation/berkeley-db/db/utility/db_stat.html}} -- --H3: {{slapd}}(8) Entry Cache (cachesize) -- --The {{slapd}}(8) entry cache operates on decoded entries. The rationale - entries --in the entry cache can be used directly, giving the fastest response. If an entry --isn't in the entry cache but can be extracted from the BDB page cache, that will --avoid an I/O but it will still require parsing, so this will be slower. -- --If the entry is in neither cache then BDB will have to flush some of its current --cached pages and bring in the needed pages, resulting in a couple of expensive --I/Os as well as parsing. -- --The most optimal value is of course, the entire number of entries in the database. --However, most directory servers don't consistently serve out their entire database, so setting this to a lesser number that more closely matches the believed working set of data is --sufficient. This is the second most important parameter for the DB. -- --As far as balancing the entry cache vs the BDB cache - parsed entries in memory --are generally about twice as large as they are on disk. -- --As we have already mentioned, not having a proper database cache size will --cause performance issues. These issues are not an indication of corruption --occurring in the database. It is merely the fact that the cache is thrashing --itself that causes performance/response time to slowdown. -- -- --H3: {{TERM:IDL}} Cache (idlcachesize) -- --Each IDL holds the search results from a given query, so the IDL cache will --end up holding the most frequently requested search results. For back-bdb, --it is generally recommended to match the "cachesize" setting. For back-hdb, --it is generally recommended to be 3x"cachesize". -- --{NOTE: The idlcachesize setting directly affects search performance} -- -- - H2: {{slapd}}(8) Threads - - {{slapd}}(8) can process requests via a configurable number of threads, which -diff --git a/doc/guide/preamble.sdf b/doc/guide/preamble.sdf -index b4cc0dd..aa84f9b 100644 ---- a/doc/guide/preamble.sdf -+++ b/doc/guide/preamble.sdf -@@ -167,7 +167,6 @@ AuthcId|Authentication Identity - AuthzDN|Authorization DN - AuthzId|Authorization Identity - BCP|Best Current Practice --BDB|Berkeley DB (Backend) - BER|Basic Encoding Rules - BNF|Backus-Naur Form - C|The C Programming Language -@@ -201,7 +200,6 @@ FYI|For Your Information - GSER|Generic String Encoding Rules - GSS-API|Generic Security Service Application Program Interface - GSSAPI|SASL Kerberos V GSS-API Authentication Mechanism --HDB|Hierarchical Database (Backend) - I-D|Internet-Draft - IA5|International Alphabet 5 - IDNA|Internationalized Domain Names in Applications -diff --git a/doc/guide/release/install.sdf b/doc/guide/release/install.sdf -index 6770e6a..83c95ae 100644 ---- a/doc/guide/release/install.sdf -+++ b/doc/guide/release/install.sdf -@@ -84,7 +84,7 @@ if you have not done so already. - + Test the standalone system: - - .This step requires the standalone LDAP server, {{slapd}}(8), --with {{HDB}} and/or {{BDB}} support. -+with {{MDB}} support. - - E: % make test - -diff --git a/doc/man/man5/slapd-bdb.5 b/doc/man/man5/slapd-bdb.5 -deleted file mode 100644 -index 3c8ad9c..0000000 ---- a/doc/man/man5/slapd-bdb.5 -+++ /dev/null -@@ -1,286 +0,0 @@ --.TH SLAPD-BDB 5 "RELEASEDATE" "OpenLDAP LDVERSION" --.\" Copyright 1998-2020 The OpenLDAP Foundation All Rights Reserved. --.\" Copying restrictions apply. See COPYRIGHT/LICENSE. --.\" $OpenLDAP$ --.SH NAME --slapd\-bdb, slapd\-hdb \- Berkeley DB backends to slapd --.SH SYNOPSIS --.B ETCDIR/slapd.conf --.SH DESCRIPTION --The \fBbdb\fP backend to --.BR slapd (8) --uses the Oracle Berkeley DB (BDB) package to store data. --It makes extensive use of indexing and caching to speed data access. --.LP --Note that BDB is deprecated and support will be dropped in future --OpenLDAP releases. Installations should use the \fBmdb\fP --backend instead. --.LP --\fBhdb\fP is a variant of --the \fBbdb\fP backend that uses a hierarchical database layout which --supports subtree renames. It is both more space-efficient and more --execution-efficient than the \fBbdb\fP backend. It is otherwise identical --to the \fBbdb\fP behavior, and all the same configuration options apply. --.LP --It is noted that these options are intended to complement --Berkeley DB configuration options set in the environment's --.B DB_CONFIG --file. See Berkeley DB documentation for details on --.B DB_CONFIG --configuration options. --Where there is overlap, settings in --.B DB_CONFIG --take precedence. --.SH CONFIGURATION --These --.B slapd.conf --options apply to the \fBbdb\fP and \fBhdb\fP backend database. --That is, they must follow a "database bdb" or "database hdb" line and --come before any subsequent "backend" or "database" lines. --Other database options are described in the --.BR slapd.conf (5) --manual page. --.TP --.BI cachesize \ --Specify the size in entries of the in-memory entry cache maintained --by the \fBbdb\fP or \fBhdb\fP backend database instance. --The default is 1000 entries. --.TP --.BI cachefree \ --Specify the number of entries to free from the entry cache when the --cache reaches the \fBcachesize\fP limit. --The default is 1 entry. --.TP --.BI checkpoint \ \ --Specify the frequency for checkpointing the database transaction log. --A checkpoint operation flushes the database buffers to disk and writes --a checkpoint record in the log. --The checkpoint will occur if either \fI\fP data has been written or --\fI\fP minutes have passed since the last checkpoint. --Both arguments default to zero, in which case they are ignored. When --the \fI\fP argument is non-zero, an internal task will run every --\fI\fP minutes to perform the checkpoint. --See the Berkeley DB reference guide for more details. --.TP --.B checksum --Enable checksum validation of DB pages whenever they are read from disk. --This setting can only be configured before any database files are created. --.TP --.BI cryptfile \ --Specify the pathname of a file containing an encryption key to use for --encrypting the database. Encryption is performed using Berkeley DB's --implementation of AES. Note that encryption can only be configured before --any database files are created, and changing the key can only be done --after destroying the current database and recreating it. Encryption is --not enabled by default, and some distributions of Berkeley DB do not --support encryption. --.TP --.BI cryptkey \ --Specify an encryption key to use for encrypting the database. This option --may be used when a separate --.I cryptfile --is not desired. Only one of --.B cryptkey --or --.B cryptfile --may be configured. --.TP --.BI dbconfig \ --Specify a configuration directive to be placed in the --.B DB_CONFIG --file of the database directory. The --.B dbconfig --directive is just a convenience --to allow all necessary configuration to be set in the --.B slapd.conf --file. --The options set using this directive will only be written to the --.B DB_CONFIG --file if no such file existed at server startup time, otherwise --they are completely ignored. This allows one --to set initial values without overwriting/destroying a --.B DB_CONFIG --file that was already customized through other means. --This directive may be specified multiple times, as needed. --For example: --.RS --.nf -- dbconfig set_cachesize 0 1048576 0 -- dbconfig set_lg_bsize 2097152 --.fi --.RE --.TP --.B dbnosync --Specify that on-disk database contents should not be immediately --synchronized with in memory changes. --Enabling this option may improve performance at the expense of data --security. --See the Berkeley DB reference guide for more details. --.TP --\fBdbpagesize \fR \fI \fR --Specify the page size to use for a particular database file, in units --of 1024 bytes. The default for the --.B id2entry --file is 16, the default for all other files depends on the size of the --underlying filesystem's block size (typically 4 or 8). --The maximum that BerkeleyDB supports is 64. This --setting usually should not need to be changed, but if BerkeleyDB's --"db_stat \-d" shows a large amount of overflow pages in use in a file, --setting a larger size may increase performance at the expense of --data integrity. This setting only takes effect when a database is --being newly created. See the Berkeley DB reference guide for more details. --.TP --.BI directory \ --Specify the directory where the BDB files containing this database and --associated indexes live. --A separate directory must be specified for each database. --The default is --.BR LOCALSTATEDIR/openldap\-data . --.TP --.B dirtyread --Allow reads of modified but not yet committed data. --Usually transactions are isolated to prevent other operations from --accessing uncommitted data. --This option may improve performance, but may also return inconsistent --results if the data comes from a transaction that is later aborted. --In this case, the modified data is discarded and a subsequent search --will return a different result. --.TP --.BI dncachesize \ --Specify the maximum number of DNs in the in-memory DN cache. --Ideally this cache should be --large enough to contain the DNs of every entry in the database. If --set to a smaller value than the \fBcachesize\fP it will be silently --increased to equal the \fBcachesize\fP. The default value is 0 which --means unlimited, i.e. the DN cache will grow without bound. -- --It should be noted that the \fBDN cache\fP is allowed to temporarily --grow beyond the configured size. It does this if many entries are --locked when it tries to do a purge, because that means they're --legitimately in use. Also, the \fBDN cache\fP never purges entries --that have cached children, so depending on the shape of the DIT, it --could have lots of cached DNs over the defined limit. --.TP --.BI idlcachesize \ --Specify the size of the in-memory index cache, in index slots. The --default is zero. A larger value will speed up frequent searches of --indexed entries. An \fBhdb\fP database needs a large \fBidlcachesize\fP --for good search performance, typically three times the --.B cachesize --(entry cache size) --or larger. --.TP --\fBindex \fR{\fI\fR|\fBdefault\fR} [\fBpres\fR,\fBeq\fR,\fBapprox\fR,\fBsub\fR,\fI\fR] --Specify the indexes to maintain for the given attribute (or --list of attributes). --Some attributes only support a subset of indexes. --If only an \fI\fP is given, the indices specified for \fBdefault\fR --are maintained. --Note that setting a default does not imply that all attributes will be --indexed. Also, for best performance, an --.B eq --index should always be configured for the --.B objectClass --attribute. -- --A number of special index parameters may be specified. --The index type --.B sub --can be decomposed into --.BR subinitial , --.BR subany ,\ and --.B subfinal --indices. --The special type --.B nolang --may be specified to disallow use of this index by language subtypes. --The special type --.B nosubtypes --may be specified to disallow use of this index by named subtypes. --Note: changing \fBindex\fP settings in --.BR slapd.conf (5) --requires rebuilding indices, see --.BR slapindex (8); --changing \fBindex\fP settings --dynamically by LDAPModifying "cn=config" automatically causes rebuilding --of the indices online in a background task. --.TP --.B linearindex --Tell --.B slapindex --to index one attribute at a time. By default, all indexed --attributes in an entry are processed at the same time. With this option, --each indexed attribute is processed individually, using multiple passes --through the entire database. This option improves --.B slapindex --performance --when the database size exceeds the \fBdbcache\fP size. When the \fBdbcache\fP is --large enough, this option is not needed and will decrease performance. --Also by default, --.B slapadd --performs full indexing and so a separate --.B slapindex --run is not needed. With this option, --.B slapadd --does no indexing and --.B slapindex --must be used. --.TP --.BR lockdetect \ { oldest | youngest | fewest | random | default } --Specify which transaction to abort when a deadlock is detected. --The default is --.BR random . --.TP --.BI mode \ --Specify the file protection mode that newly created database --index files should have. --The default is 0600. --.TP --.BI searchstack \ --Specify the depth of the stack used for search filter evaluation. --Search filters are evaluated on a stack to accommodate nested AND / OR --clauses. An individual stack is assigned to each server thread. --The depth of the stack determines how complex a filter can be --evaluated without requiring any additional memory allocation. Filters that --are nested deeper than the search stack depth will cause a separate --stack to be allocated for that particular search operation. These --allocations can have a major negative impact on server performance, --but specifying too much stack will also consume a great deal of memory. --Each search stack uses 512K bytes per level. The default stack depth --is 16, thus 8MB per thread is used. --.TP --.BI shm_key \ --Specify a key for a shared memory BDB environment. By default the --BDB environment uses memory mapped files. If a non-zero value is --specified, it will be used as the key to identify a shared memory --region that will house the environment. --.SH ACCESS CONTROL --The --.B bdb --and --.B hdb --backends honor access control semantics as indicated in --.BR slapd.access (5). --.SH FILES --.TP --.B ETCDIR/slapd.conf --default --.B slapd --configuration file --.TP --.B DB_CONFIG --Berkeley DB configuration file --.SH SEE ALSO --.BR slapd.conf (5), --.BR slapd\-config (5), --.BR slapd\-mdb (5), --.BR slapd (8), --.BR slapadd (8), --.BR slapcat (8), --.BR slapindex (8), --Berkeley DB documentation. --.SH ACKNOWLEDGEMENTS --.so ../Project --Originally begun by Kurt Zeilenga. Caching mechanisms originally designed --by Jong-Hyuk Choi. Completion and subsequent work, as well as --back-hdb, by Howard Chu. -diff --git a/doc/man/man5/slapd-bdb.5.links b/doc/man/man5/slapd-bdb.5.links -deleted file mode 100644 -index 3bc8c40..0000000 ---- a/doc/man/man5/slapd-bdb.5.links -+++ /dev/null -@@ -1 +0,0 @@ --slapd-hdb.5 -diff --git a/doc/man/man5/slapd-config.5 b/doc/man/man5/slapd-config.5 -index 5753292..3061dcf 100644 ---- a/doc/man/man5/slapd-config.5 -+++ b/doc/man/man5/slapd-config.5 -@@ -1123,10 +1123,8 @@ The entry must be named - and must have the olcBackendConfig objectClass. - - should be one of --.BR bdb , - .BR config , - .BR dnssrv , --.BR hdb , - .BR ldap , - .BR ldif , - .BR mdb , -@@ -2059,10 +2057,10 @@ olcDatabase: config - olcRootPW: {SSHA}XKYnrjvGT3wZFQrDD5040US592LxsdLy - olcAccess: to * by * none - --dn: olcDatabase=bdb,cn=config -+dn: olcDatabase=mdb,cn=config - objectClass: olcDatabaseConfig --objectClass: olcBdbConfig --olcDatabase: bdb -+objectClass: olcMdbConfig -+olcDatabase: mdb - olcSuffix: "dc=our\-domain,dc=com" - # The database directory MUST exist prior to - # running slapd AND should only be accessible -diff --git a/doc/man/man5/slapd-mdb.5 b/doc/man/man5/slapd-mdb.5 -index 62146b0..8955bbb 100644 ---- a/doc/man/man5/slapd-mdb.5 -+++ b/doc/man/man5/slapd-mdb.5 -@@ -14,11 +14,8 @@ It relies completely on the underlying operating system for memory - management and does no caching of its own. It is the recommended - primary database backend. - .LP --The \fBmdb\fP backend is similar to the \fBhdb\fP backend in that --it uses a hierarchical database layout which --supports subtree renames. It is both more space-efficient and more --execution-efficient than the \fBbdb\fP backend, while being overall --much simpler to manage. -+The \fBmdb\fP backend uses a hierarchical database layout which -+supports subtree renames. - .SH CONFIGURATION - These - .B slapd.conf -diff --git a/doc/man/man5/slapd-sql.5 b/doc/man/man5/slapd-sql.5 -index 8492553..ccfa3a4 100644 ---- a/doc/man/man5/slapd-sql.5 -+++ b/doc/man/man5/slapd-sql.5 -@@ -19,7 +19,7 @@ sites/applications that use RDBMSes and/or LDAP. - Or whatever else... - .LP - It is NOT designed as a general-purpose backend that uses RDBMS instead --of BerkeleyDB (as the standard BDB backend does), though it can be -+of MDB (as the standard MDB backend does), though it can be - used as such with several limitations. - You can take a look at - .B http://www.openldap.org/faq/index.cgi?file=378 -diff --git a/doc/man/man5/slapd.access.5 b/doc/man/man5/slapd.access.5 -index c62158b..ebad05a 100644 ---- a/doc/man/man5/slapd.access.5 -+++ b/doc/man/man5/slapd.access.5 -@@ -920,9 +920,8 @@ identity, control is passed straight to the subsequent rules. - - .SH OPERATION REQUIREMENTS - Operations require different privileges on different portions of entries. --The following summary applies to primary MDB database backend and the --deprecated BDB and HDB backends. Requirements for other backends may --(and often do) differ. -+The following summary applies to primary MDB database backend. Requirements -+for other backends may (and often do) differ. - - .LP - The -@@ -1085,9 +1084,7 @@ Access control to search entries is checked by the frontend, - so it is fully honored by all backends; for all other operations - and for the discovery phase of the search operation, - full ACL semantics is only supported by the primary backends, i.e. --.BR back\-bdb (5), --and --.BR back\-hdb (5). -+.BR back\-mdb (5). - - Some other backend, like - .BR back\-sql (5), -diff --git a/doc/man/man5/slapd.backends.5 b/doc/man/man5/slapd.backends.5 -index b9f9190..25a70e6 100644 ---- a/doc/man/man5/slapd.backends.5 -+++ b/doc/man/man5/slapd.backends.5 -@@ -19,14 +19,6 @@ corresponding - .BR slapd\- (5) - manual pages. - .TP --.B bdb --This was the recommended primary backend through OpenLDAP 2.3, but it has --since been superseded by the --.BR mdb --backend. It takes care to configure it properly. --It uses the transactional database interface of the Oracle Berkeley --DB (BDB) package to store data. --.TP - .B config - This backend is used to manage the configuration of slapd at run-time. - Unlike other backends, only a single instance of the -@@ -41,22 +33,6 @@ This backend is experimental. - It serves up referrals based upon SRV resource records held in the - Domain Name System. - .TP --.B hdb --This was the recommended primary backend through OpenLDAP 2.4.40 but it has --since been superseded by the --.BR mdb --backend. It takes care to configure it properly. --.B hdb --is a variant of the --.B bdb --backend that uses a hierarchical database --layout. --This layout stores entry DNs more efficiently than the --.B bdb --backend, --using less space and requiring less work to create, delete, and rename --entries. It is also one of the few backends to support subtree renames. --.TP - .B ldap - This backend acts as a proxy to forward incoming requests to another - LDAP server. -@@ -68,14 +44,9 @@ Its usage should be limited to very simple databases, where performance - is not a requirement. This backend also supports subtree renames. - .TP - .B mdb --This is the recommended primary backend, superseding --.BR hdb . -+This is the recommended primary backend. - This backend uses OpenLDAP's own MDB transactional database --library. It is extremely compact and extremely efficient, delivering --much higher performance than the Berkeley DB backends while using --significantly less memory. Also, unlike Berkeley DB, MDB is crash proof, --and requires no special tuning or maintenance. --This backend also supports subtree renames. -+library. This backend also supports subtree renames. - .TP - .B meta - This backend performs basic LDAP proxying with respect to a set of -@@ -138,10 +109,8 @@ ETCDIR/slapd.d - default slapd configuration directory - .SH SEE ALSO - .BR ldap (3), --.BR slapd\-bdb (5), - .BR slapd\-config (5), - .BR slapd\-dnssrv (5), --.BR slapd\-hdb (5), - .BR slapd\-ldap (5), - .BR slapd\-ldif (5), - .BR slapd\-mdb (5), -diff --git a/doc/man/man5/slapd.conf.5 b/doc/man/man5/slapd.conf.5 -index 78b2415..0fa62ce 100644 ---- a/doc/man/man5/slapd.conf.5 -+++ b/doc/man/man5/slapd.conf.5 -@@ -1250,10 +1250,8 @@ type of backend. - .B backend - Mark the beginning of a backend definition. - should be one of --.BR bdb , - .BR config , - .BR dnssrv , --.BR hdb , - .BR ldap , - .BR ldif , - .BR mdb , -@@ -1280,10 +1278,8 @@ option are mandatory for each database. - .B database - Mark the beginning of a new database instance definition. - should be one of --.BR bdb , - .BR config , - .BR dnssrv , --.BR hdb , - .BR ldap , - .BR ldif , - .BR mdb , -@@ -1593,8 +1589,7 @@ By default, mirrormode is off. - This option enables database-specific monitoring in the entry related - to the current database in the "cn=Databases,cn=Monitor" subtree - of the monitor database, if the monitor database is enabled. --Currently, only the BDB and the HDB databases provide database-specific --monitoring. -+Currently, only the MDB databases provide database-specific monitoring. - The default depends on the backend type. - .TP - .B overlay -diff --git a/doc/man/man5/slapd.overlays.5 b/doc/man/man5/slapd.overlays.5 -index 2345d81..8ca9783 100644 ---- a/doc/man/man5/slapd.overlays.5 -+++ b/doc/man/man5/slapd.overlays.5 -@@ -91,7 +91,7 @@ password resets, etc. - .B refint - Referential Integrity. - This overlay can be used with a backend database such as --.BR slapd\-bdb (5) -+.BR slapd\-mdb (5) - to maintain the cohesiveness of a schema which utilizes reference - attributes. - .TP -@@ -121,7 +121,7 @@ replication, including persistent search functionality. - .B translucent - Translucent Proxy. - This overlay can be used with a backend database such as --.BR slapd\-bdb (5) -+.BR slapd\-mdb (5) - to create a "translucent proxy". - Content of entries retrieved from a remote LDAP server can be partially - overridden by the database. -@@ -129,7 +129,7 @@ overridden by the database. - .B unique - Attribute Uniqueness. - This overlay can be used with a backend database such as --.BR slapd\-bdb (5) -+.BR slapd\-mdb (5) - to enforce the uniqueness of some or all attributes within a subtree. - .TP - .B valsort -diff --git a/doc/man/man8/slapcat.8 b/doc/man/man8/slapcat.8 -index bd22637..a80ad36 100644 ---- a/doc/man/man8/slapcat.8 -+++ b/doc/man/man8/slapcat.8 -@@ -177,8 +177,6 @@ mode) when you do this to ensure consistency of the database. It is - always safe to run - .B slapcat - with the --.BR slapd\-bdb (5), --.BR slapd\-hdb (5), - .BR slapd\-mdb (5), - and - .BR slapd\-null (5) -diff --git a/doc/man/man8/slapschema.8 b/doc/man/man8/slapschema.8 -index 704ab0c..f4ea0cd 100644 ---- a/doc/man/man8/slapschema.8 -+++ b/doc/man/man8/slapschema.8 -@@ -168,8 +168,7 @@ mode) when you do this to ensure consistency of the database. It is - always safe to run - .B slapschema - with the --.BR slapd\-bdb (5), --.BR slapd\-hdb (5), -+.BR slapd\-mdb (5), - and - .BR slapd\-null (5) - backends. -diff --git a/include/portable.hin b/include/portable.hin -index 3169f03..1b1be1a 100644 ---- a/include/portable.hin -+++ b/include/portable.hin -@@ -99,12 +99,6 @@ - /* Define to 1 if you have the `bcopy' function. */ - #undef HAVE_BCOPY - --/* define this if Berkeley DB is available */ --#undef HAVE_BERKELEY_DB -- --/* define if Berkeley DB has DB_THREAD support */ --#undef HAVE_BERKELEY_DB_THREAD -- - /* Define to 1 if you have the header file. */ - #undef HAVE_BITS_TYPES_H - -@@ -924,9 +918,6 @@ - /* define to support per-object ACIs */ - #undef SLAPD_ACI_ENABLED - --/* define to support BDB backend */ --#undef SLAPD_BDB -- - /* define to support cleartext passwords */ - #undef SLAPD_CLEARTEXT - -@@ -936,9 +927,6 @@ - /* define to support DNS SRV backend */ - #undef SLAPD_DNSSRV - --/* define to support HDB backend */ --#undef SLAPD_HDB -- - /* define to support LDAP backend */ - #undef SLAPD_LDAP - -diff --git a/servers/slapd/DB_CONFIG b/servers/slapd/DB_CONFIG -deleted file mode 100644 -index d0f2c68..0000000 ---- a/servers/slapd/DB_CONFIG -+++ /dev/null -@@ -1,28 +0,0 @@ --# $OpenLDAP$ --# Example DB_CONFIG file for use with slapd(8) BDB/HDB databases. --# --# See the Oracle Berkeley DB documentation --# --# for detail description of DB_CONFIG syntax and semantics. --# --# Hints can also be found in the OpenLDAP Software FAQ --# --# in particular: --# -- --# Note: most DB_CONFIG settings will take effect only upon rebuilding --# the DB environment. -- --# one 0.25 GB cache --set_cachesize 0 268435456 1 -- --# Data Directory --#set_data_dir db -- --# Transaction Log settings --set_lg_regionmax 262144 --set_lg_bsize 2097152 --#set_lg_dir logs -- --# Note: special DB_CONFIG flags are no longer needed for "quick" --# slapadd(8) or slapindex(8) access (see their -q option). -diff --git a/servers/slapd/Makefile.in b/servers/slapd/Makefile.in -index b20564d..9a9f589 100644 ---- a/servers/slapd/Makefile.in -+++ b/servers/slapd/Makefile.in -@@ -38,7 +38,7 @@ SRCS = main.c globals.c bconfig.c config.c daemon.c \ - backglue.c backover.c ctxcsn.c ldapsync.c frontend.c \ - slapadd.c slapcat.c slapcommon.c slapdn.c slapindex.c \ - slappasswd.c slaptest.c slapauth.c slapacl.c component.c \ -- aci.c alock.c txn.c slapschema.c \ -+ aci.c txn.c slapschema.c \ - $(@PLAT@_SRCS) - - OBJS = main.o globals.o bconfig.o config.o daemon.o \ -@@ -56,7 +56,7 @@ OBJS = main.o globals.o bconfig.o config.o daemon.o \ - backglue.o backover.o ctxcsn.o ldapsync.o frontend.o \ - slapadd.o slapcat.o slapcommon.o slapdn.o slapindex.o \ - slappasswd.o slaptest.o slapauth.o slapacl.o component.o \ -- aci.o alock.o txn.o slapschema.o \ -+ aci.o txn.o slapschema.o \ - $(@PLAT@_OBJS) - - LDAP_INCDIR= ../../include -I$(srcdir) -I$(srcdir)/slapi -I. -@@ -366,14 +366,8 @@ veryclean-local-srv: FORCE - fi; \ - done - --install-dbc-maybe: install-dbc-@BUILD_BDB@ install-dbc-@BUILD_HDB@ -- --install-dbc-yes: install-db-config --install-dbc-mod: install-db-config --install-dbc-no: -- - install-local-srv: install-slapd install-tools \ -- install-conf install-dbc-maybe install-schema install-tools -+ install-conf install-schema install-tools - - install-slapd: FORCE - -$(MKDIR) $(DESTDIR)$(libexecdir) -diff --git a/servers/slapd/alock.c b/servers/slapd/alock.c -deleted file mode 100644 -index 4e85fad..0000000 ---- a/servers/slapd/alock.c -+++ /dev/null -@@ -1,718 +0,0 @@ --/* alock.c - access lock library */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2005-2020 The OpenLDAP Foundation. -- * Portions Copyright 2004-2005 Symas Corporation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ --/* ACKNOWLEDGEMENTS: -- * This work was initially developed by Emily Backes at Symas -- * Corporation for inclusion in OpenLDAP Software. -- */ -- --#include "portable.h" -- --#if SLAPD_BDB || SLAPD_HDB -- --#include --#include "alock.h" --#include "lutil.h" -- --#include --#include --#include --#include --#include --#include --#include --#ifdef HAVE_SYS_FILE_H --#include --#endif --#include -- --#ifdef _WIN32 --#include --#include --#include --#endif -- -- --static int --alock_grab_lock ( int fd, int slot ) --{ -- int res; -- --#if defined( HAVE_LOCKF ) -- res = lseek (fd, (off_t) (ALOCK_SLOT_SIZE * slot), SEEK_SET); -- if (res == -1) return -1; -- res = lockf (fd, F_LOCK, (off_t) ALOCK_SLOT_SIZE); --#elif defined( HAVE_FCNTL ) -- struct flock lock_info; -- (void) memset ((void *) &lock_info, 0, sizeof (struct flock)); -- -- lock_info.l_type = F_WRLCK; -- lock_info.l_whence = SEEK_SET; -- lock_info.l_start = (off_t) (ALOCK_SLOT_SIZE * slot); -- lock_info.l_len = (off_t) ALOCK_SLOT_SIZE; -- -- res = fcntl (fd, F_SETLKW, &lock_info); --#elif defined( _WIN32 ) -- OVERLAPPED ov; -- HANDLE hh = _get_osfhandle ( fd ); -- ov.hEvent = 0; -- ov.Offset = ALOCK_SLOT_SIZE*slot; -- ov.OffsetHigh = 0; -- res = LockFileEx( hh, LOCKFILE_EXCLUSIVE_LOCK, 0, -- ALOCK_SLOT_SIZE, 0, &ov ) ? 0 : -1; --#else --# error alock needs lockf, fcntl, or LockFile[Ex] --#endif -- if (res == -1) { -- assert (errno != EDEADLK); -- return -1; -- } -- return 0; --} -- --static int --alock_release_lock ( int fd, int slot ) --{ -- int res; -- --#if defined( HAVE_LOCKF ) -- res = lseek (fd, (off_t) (ALOCK_SLOT_SIZE * slot), SEEK_SET); -- if (res == -1) return -1; -- res = lockf (fd, F_ULOCK, (off_t) ALOCK_SLOT_SIZE); -- if (res == -1) return -1; --#elif defined ( HAVE_FCNTL ) -- struct flock lock_info; -- (void) memset ((void *) &lock_info, 0, sizeof (struct flock)); -- -- lock_info.l_type = F_UNLCK; -- lock_info.l_whence = SEEK_SET; -- lock_info.l_start = (off_t) (ALOCK_SLOT_SIZE * slot); -- lock_info.l_len = (off_t) ALOCK_SLOT_SIZE; -- -- res = fcntl (fd, F_SETLKW, &lock_info); -- if (res == -1) return -1; --#elif defined( _WIN32 ) -- HANDLE hh = _get_osfhandle ( fd ); -- if ( !UnlockFile ( hh, ALOCK_SLOT_SIZE*slot, 0, -- ALOCK_SLOT_SIZE, 0 )) -- return -1; --#else --# error alock needs lockf, fcntl, or LockFile[Ex] --#endif -- -- return 0; --} -- --static int --alock_share_lock ( int fd, int slot ) --{ -- int res; -- --#if defined( HAVE_LOCKF ) -- res = 0; /* lockf has no shared locks */ --#elif defined ( HAVE_FCNTL ) -- struct flock lock_info; -- (void) memset ((void *) &lock_info, 0, sizeof (struct flock)); -- -- /* The shared lock replaces the existing lock */ -- lock_info.l_type = F_RDLCK; -- lock_info.l_whence = SEEK_SET; -- lock_info.l_start = (off_t) (ALOCK_SLOT_SIZE * slot); -- lock_info.l_len = (off_t) ALOCK_SLOT_SIZE; -- -- res = fcntl (fd, F_SETLK, &lock_info); -- if (res == -1) return -1; --#elif defined( _WIN32 ) -- OVERLAPPED ov; -- HANDLE hh = _get_osfhandle ( fd ); -- -- /* Windows locks are mandatory, not advisory. -- * We must downgrade the lock to allow future -- * callers to read the slot data. -- * -- * First acquire a shared lock. Unlock will -- * release the existing exclusive lock. -- */ -- ov.hEvent = 0; -- ov.Offset = ALOCK_SLOT_SIZE*slot; -- ov.OffsetHigh = 0; -- LockFileEx (hh, 0, 0, ALOCK_SLOT_SIZE, 0, &ov); -- UnlockFile (hh, ALOCK_SLOT_SIZE*slot, 0, ALOCK_SLOT_SIZE, 0); --#else --# error alock needs lockf, fcntl, or LockFile[Ex] --#endif -- -- return 0; --} -- --static int --alock_test_lock ( int fd, int slot ) --{ -- int res; -- --#if defined( HAVE_LOCKF ) -- res = lseek (fd, (off_t) (ALOCK_SLOT_SIZE * slot), SEEK_SET); -- if (res == -1) return -1; -- -- res = lockf (fd, F_TEST, (off_t) ALOCK_SLOT_SIZE); -- if (res == -1) { -- if (errno == EACCES || errno == EAGAIN) { -- return ALOCK_LOCKED; -- } else { -- return -1; -- } -- } --#elif defined( HAVE_FCNTL ) -- struct flock lock_info; -- (void) memset ((void *) &lock_info, 0, sizeof (struct flock)); -- -- lock_info.l_type = F_WRLCK; -- lock_info.l_whence = SEEK_SET; -- lock_info.l_start = (off_t) (ALOCK_SLOT_SIZE * slot); -- lock_info.l_len = (off_t) ALOCK_SLOT_SIZE; -- -- res = fcntl (fd, F_GETLK, &lock_info); -- if (res == -1) return -1; -- -- if (lock_info.l_type != F_UNLCK) return ALOCK_LOCKED; --#elif defined( _WIN32 ) -- OVERLAPPED ov; -- HANDLE hh = _get_osfhandle ( fd ); -- ov.hEvent = 0; -- ov.Offset = ALOCK_SLOT_SIZE*slot; -- ov.OffsetHigh = 0; -- if( !LockFileEx( hh, -- LOCKFILE_EXCLUSIVE_LOCK|LOCKFILE_FAIL_IMMEDIATELY, 0, -- ALOCK_SLOT_SIZE, 0, &ov )) { -- int err = GetLastError(); -- if ( err == ERROR_LOCK_VIOLATION ) -- return ALOCK_LOCKED; -- else -- return -1; -- } --#else --# error alock needs lockf, fcntl, or LockFile --#endif -- -- return 0; --} -- --/* Read a 64bit LE value */ --static unsigned long int --alock_read_iattr ( unsigned char * bufptr ) --{ -- unsigned long int val = 0; -- int count; -- -- assert (bufptr != NULL); -- -- bufptr += sizeof (unsigned long int); -- for (count=0; count <= (int) sizeof (unsigned long int); ++count) { -- val <<= 8; -- val += (unsigned long int) *bufptr--; -- } -- -- return val; --} -- --/* Write a 64bit LE value */ --static void --alock_write_iattr ( unsigned char * bufptr, -- unsigned long int val ) --{ -- int count; -- -- assert (bufptr != NULL); -- -- for (count=0; count < 8; ++count) { -- *bufptr++ = (unsigned char) (val & 0xff); -- val >>= 8; -- } --} -- --static int --alock_read_slot ( alock_info_t * info, -- alock_slot_t * slot_data ) --{ -- unsigned char slotbuf [ALOCK_SLOT_SIZE]; -- int res, size, size_total, err; -- -- assert (info != NULL); -- assert (slot_data != NULL); -- assert (info->al_slot > 0); -- -- res = lseek (info->al_fd, -- (off_t) (ALOCK_SLOT_SIZE * info->al_slot), -- SEEK_SET); -- if (res == -1) return -1; -- -- size_total = 0; -- while (size_total < ALOCK_SLOT_SIZE) { -- size = read (info->al_fd, -- slotbuf + size_total, -- ALOCK_SLOT_SIZE - size_total); -- if (size == 0) return -1; -- if (size < 0) { -- err = errno; -- if (err != EINTR && err != EAGAIN) return -1; -- } else { -- size_total += size; -- } -- } -- -- if (alock_read_iattr (slotbuf) != ALOCK_MAGIC) { -- return -1; -- } -- slot_data->al_lock = alock_read_iattr (slotbuf+8); -- slot_data->al_stamp = alock_read_iattr (slotbuf+16); -- slot_data->al_pid = alock_read_iattr (slotbuf+24); -- -- if (slot_data->al_appname) ber_memfree (slot_data->al_appname); -- slot_data->al_appname = ber_memcalloc (1, ALOCK_MAX_APPNAME); -- if (slot_data->al_appname == NULL) { -- return -1; -- } -- strncpy (slot_data->al_appname, (char *)slotbuf+32, ALOCK_MAX_APPNAME-1); -- (slot_data->al_appname) [ALOCK_MAX_APPNAME-1] = '\0'; -- -- return 0; --} -- --static int --alock_write_slot ( alock_info_t * info, -- alock_slot_t * slot_data ) --{ -- unsigned char slotbuf [ALOCK_SLOT_SIZE]; -- int res, size, size_total, err; -- -- assert (info != NULL); -- assert (slot_data != NULL); -- assert (info->al_slot > 0); -- -- (void) memset ((void *) slotbuf, 0, ALOCK_SLOT_SIZE); -- -- alock_write_iattr (slotbuf, ALOCK_MAGIC); -- assert (alock_read_iattr (slotbuf) == ALOCK_MAGIC); -- alock_write_iattr (slotbuf+8, slot_data->al_lock); -- alock_write_iattr (slotbuf+16, slot_data->al_stamp); -- alock_write_iattr (slotbuf+24, slot_data->al_pid); -- -- if (slot_data->al_appname) -- strncpy ((char *)slotbuf+32, slot_data->al_appname, ALOCK_MAX_APPNAME-1); -- slotbuf[ALOCK_SLOT_SIZE-1] = '\0'; -- -- res = lseek (info->al_fd, -- (off_t) (ALOCK_SLOT_SIZE * info->al_slot), -- SEEK_SET); -- if (res == -1) return -1; -- -- size_total = 0; -- while (size_total < ALOCK_SLOT_SIZE) { -- size = write (info->al_fd, -- slotbuf + size_total, -- ALOCK_SLOT_SIZE - size_total); -- if (size == 0) return -1; -- if (size < 0) { -- err = errno; -- if (err != EINTR && err != EAGAIN) return -1; -- } else { -- size_total += size; -- } -- } -- -- return 0; --} -- --static int --alock_query_slot ( alock_info_t * info ) --{ -- int res, nosave; -- alock_slot_t slot_data; -- -- assert (info != NULL); -- assert (info->al_slot > 0); -- -- (void) memset ((void *) &slot_data, 0, sizeof (alock_slot_t)); -- alock_read_slot (info, &slot_data); -- -- if (slot_data.al_appname != NULL) ber_memfree (slot_data.al_appname); -- slot_data.al_appname = NULL; -- -- nosave = slot_data.al_lock & ALOCK_NOSAVE; -- -- if ((slot_data.al_lock & ALOCK_SMASK) == ALOCK_UNLOCKED) -- return slot_data.al_lock; -- -- res = alock_test_lock (info->al_fd, info->al_slot); -- if (res < 0) return -1; -- if (res > 0) { -- if ((slot_data.al_lock & ALOCK_SMASK) == ALOCK_UNIQUE) { -- return slot_data.al_lock; -- } else { -- return ALOCK_LOCKED | nosave; -- } -- } -- -- return ALOCK_DIRTY | nosave; --} -- --int --alock_open ( alock_info_t * info, -- const char * appname, -- const char * envdir, -- int locktype ) --{ -- struct stat statbuf; -- alock_info_t scan_info; -- alock_slot_t slot_data; -- char * filename; -- int res, max_slot; -- int dirty_count, live_count, nosave; -- char *ptr; -- -- assert (info != NULL); -- assert (appname != NULL); -- assert (envdir != NULL); -- assert ((locktype & ALOCK_SMASK) >= 1 && (locktype & ALOCK_SMASK) <= 2); -- -- slot_data.al_lock = locktype; -- slot_data.al_stamp = time(NULL); -- slot_data.al_pid = getpid(); -- slot_data.al_appname = ber_memcalloc (1, ALOCK_MAX_APPNAME); -- if (slot_data.al_appname == NULL) { -- return ALOCK_UNSTABLE; -- } -- strncpy (slot_data.al_appname, appname, ALOCK_MAX_APPNAME-1); -- slot_data.al_appname [ALOCK_MAX_APPNAME-1] = '\0'; -- -- filename = ber_memcalloc (1, strlen (envdir) + strlen ("/alock") + 1); -- if (filename == NULL ) { -- ber_memfree (slot_data.al_appname); -- return ALOCK_UNSTABLE; -- } -- ptr = lutil_strcopy(filename, envdir); -- lutil_strcopy(ptr, "/alock"); --#ifdef _WIN32 -- { HANDLE handle = CreateFile (filename, GENERIC_READ|GENERIC_WRITE, -- FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, -- FILE_ATTRIBUTE_NORMAL, NULL); -- info->al_fd = _open_osfhandle (handle, 0); -- } --#else -- info->al_fd = open (filename, O_CREAT|O_RDWR, 0666); --#endif -- ber_memfree (filename); -- if (info->al_fd < 0) { -- ber_memfree (slot_data.al_appname); -- return ALOCK_UNSTABLE; -- } -- info->al_slot = 0; -- -- res = alock_grab_lock (info->al_fd, 0); -- if (res == -1) { -- close (info->al_fd); -- ber_memfree (slot_data.al_appname); -- return ALOCK_UNSTABLE; -- } -- -- res = fstat (info->al_fd, &statbuf); -- if (res == -1) { -- close (info->al_fd); -- ber_memfree (slot_data.al_appname); -- return ALOCK_UNSTABLE; -- } -- -- max_slot = (statbuf.st_size + ALOCK_SLOT_SIZE - 1) / ALOCK_SLOT_SIZE; -- dirty_count = 0; -- live_count = 0; -- nosave = 0; -- scan_info.al_fd = info->al_fd; -- for (scan_info.al_slot = 1; -- scan_info.al_slot < max_slot; -- ++ scan_info.al_slot) { -- if (scan_info.al_slot != info->al_slot) { -- res = alock_query_slot (&scan_info); -- -- if (res & ALOCK_NOSAVE) { -- nosave = ALOCK_NOSAVE; -- res ^= ALOCK_NOSAVE; -- } -- if (res == ALOCK_UNLOCKED -- && info->al_slot == 0) { -- info->al_slot = scan_info.al_slot; -- -- } else if (res == ALOCK_LOCKED) { -- ++live_count; -- -- } else if (res == ALOCK_UNIQUE -- && (( locktype & ALOCK_SMASK ) == ALOCK_UNIQUE -- || nosave )) { -- close (info->al_fd); -- ber_memfree (slot_data.al_appname); -- return ALOCK_BUSY; -- -- } else if (res == ALOCK_DIRTY) { -- ++dirty_count; -- -- } else if (res == -1) { -- close (info->al_fd); -- ber_memfree (slot_data.al_appname); -- return ALOCK_UNSTABLE; -- -- } -- } -- } -- -- if (dirty_count && live_count) { -- close (info->al_fd); -- ber_memfree (slot_data.al_appname); -- return ALOCK_UNSTABLE; -- } -- -- if (info->al_slot == 0) info->al_slot = max_slot + 1; -- res = alock_grab_lock (info->al_fd, -- info->al_slot); -- if (res == -1) { -- close (info->al_fd); -- ber_memfree (slot_data.al_appname); -- return ALOCK_UNSTABLE; -- } -- res = alock_write_slot (info, &slot_data); -- ber_memfree (slot_data.al_appname); -- if (res == -1) { -- close (info->al_fd); -- return ALOCK_UNSTABLE; -- } -- alock_share_lock (info->al_fd, info->al_slot); -- -- res = alock_release_lock (info->al_fd, 0); -- if (res == -1) { -- close (info->al_fd); -- return ALOCK_UNSTABLE; -- } -- -- if (dirty_count) return ALOCK_RECOVER | nosave; -- return ALOCK_CLEAN | nosave; --} -- --int --alock_scan ( alock_info_t * info ) --{ -- struct stat statbuf; -- alock_info_t scan_info; -- int res, max_slot; -- int dirty_count, live_count, nosave; -- -- assert (info != NULL); -- -- scan_info.al_fd = info->al_fd; -- -- res = alock_grab_lock (info->al_fd, 0); -- if (res == -1) { -- close (info->al_fd); -- return ALOCK_UNSTABLE; -- } -- -- res = fstat (info->al_fd, &statbuf); -- if (res == -1) { -- close (info->al_fd); -- return ALOCK_UNSTABLE; -- } -- -- max_slot = (statbuf.st_size + ALOCK_SLOT_SIZE - 1) / ALOCK_SLOT_SIZE; -- dirty_count = 0; -- live_count = 0; -- nosave = 0; -- for (scan_info.al_slot = 1; -- scan_info.al_slot < max_slot; -- ++ scan_info.al_slot) { -- if (scan_info.al_slot != info->al_slot) { -- res = alock_query_slot (&scan_info); -- -- if (res & ALOCK_NOSAVE) { -- nosave = ALOCK_NOSAVE; -- res ^= ALOCK_NOSAVE; -- } -- -- if (res == ALOCK_LOCKED) { -- ++live_count; -- -- } else if (res == ALOCK_DIRTY) { -- ++dirty_count; -- -- } else if (res == -1) { -- close (info->al_fd); -- return ALOCK_UNSTABLE; -- -- } -- } -- } -- -- res = alock_release_lock (info->al_fd, 0); -- if (res == -1) { -- close (info->al_fd); -- return ALOCK_UNSTABLE; -- } -- -- if (dirty_count) { -- if (live_count) { -- close (info->al_fd); -- return ALOCK_UNSTABLE; -- } else { -- return ALOCK_RECOVER | nosave; -- } -- } -- -- return ALOCK_CLEAN | nosave; --} -- --int --alock_close ( alock_info_t * info, int nosave ) --{ -- alock_slot_t slot_data; -- int res; -- -- if ( !info->al_slot ) -- return ALOCK_CLEAN; -- -- (void) memset ((void *) &slot_data, 0, sizeof(alock_slot_t)); -- -- res = alock_grab_lock (info->al_fd, 0); -- if (res == -1) { --fail: -- /* Windows doesn't clean up locks immediately when a process exits. -- * Make sure we release our locks, to prevent stale locks from -- * hanging around. -- */ -- alock_release_lock (info->al_fd, 0); -- close (info->al_fd); -- return ALOCK_UNSTABLE; -- } -- -- /* mark our slot as clean */ -- res = alock_read_slot (info, &slot_data); -- if (res == -1) { -- if (slot_data.al_appname != NULL) -- ber_memfree (slot_data.al_appname); -- goto fail; -- } -- slot_data.al_lock = ALOCK_UNLOCKED; -- if ( nosave ) -- slot_data.al_lock |= ALOCK_NOSAVE; -- /* since we have slot 0 locked, we don't need our slot lock */ -- res = alock_release_lock (info->al_fd, info->al_slot); -- if (res == -1) { -- goto fail; -- } -- res = alock_write_slot (info, &slot_data); -- if (res == -1) { -- if (slot_data.al_appname != NULL) -- ber_memfree (slot_data.al_appname); -- goto fail; -- } -- if (slot_data.al_appname != NULL) { -- ber_memfree (slot_data.al_appname); -- slot_data.al_appname = NULL; -- } -- -- res = alock_release_lock (info->al_fd, 0); -- if (res == -1) { -- close (info->al_fd); -- return ALOCK_UNSTABLE; -- } -- -- res = close (info->al_fd); -- if (res == -1) return ALOCK_UNSTABLE; -- -- return ALOCK_CLEAN; --} -- --int --alock_recover ( alock_info_t * info ) --{ -- struct stat statbuf; -- alock_slot_t slot_data; -- alock_info_t scan_info; -- int res, max_slot; -- -- assert (info != NULL); -- -- scan_info.al_fd = info->al_fd; -- -- (void) memset ((void *) &slot_data, 0, sizeof(alock_slot_t)); -- -- res = alock_grab_lock (info->al_fd, 0); -- if (res == -1) { -- goto fail; -- } -- -- res = fstat (info->al_fd, &statbuf); -- if (res == -1) { -- goto fail; -- } -- -- max_slot = (statbuf.st_size + ALOCK_SLOT_SIZE - 1) / ALOCK_SLOT_SIZE; -- for (scan_info.al_slot = 1; -- scan_info.al_slot < max_slot; -- ++ scan_info.al_slot) { -- if (scan_info.al_slot != info->al_slot) { -- res = alock_query_slot (&scan_info) & ~ALOCK_NOSAVE; -- -- if (res == ALOCK_LOCKED -- || res == ALOCK_UNIQUE) { -- /* recovery attempt on an active db? */ -- goto fail; -- -- } else if (res == ALOCK_DIRTY) { -- /* mark it clean */ -- res = alock_read_slot (&scan_info, &slot_data); -- if (res == -1) { -- goto fail; -- } -- slot_data.al_lock = ALOCK_UNLOCKED; -- res = alock_write_slot (&scan_info, &slot_data); -- if (res == -1) { -- if (slot_data.al_appname != NULL) -- ber_memfree (slot_data.al_appname); -- goto fail; -- } -- if (slot_data.al_appname != NULL) { -- ber_memfree (slot_data.al_appname); -- slot_data.al_appname = NULL; -- } -- -- } else if (res == -1) { -- goto fail; -- -- } -- } -- } -- -- res = alock_release_lock (info->al_fd, 0); -- if (res == -1) { -- close (info->al_fd); -- return ALOCK_UNSTABLE; -- } -- -- return ALOCK_CLEAN; -- --fail: -- alock_release_lock (info->al_fd, 0); -- close (info->al_fd); -- return ALOCK_UNSTABLE; --} -- --#endif /* SLAPD_BDB || SLAPD_HDB */ -diff --git a/servers/slapd/alock.h b/servers/slapd/alock.h -deleted file mode 100644 -index 56f03d8..0000000 ---- a/servers/slapd/alock.h -+++ /dev/null -@@ -1,74 +0,0 @@ --/* alock.h - access lock header */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2005-2020 The OpenLDAP Foundation. -- * Portions Copyright 2004-2005 Symas Corporation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ --/* ACKNOWLEDGEMENTS: -- * This work was initially developed by Emily Backes at Symas -- * Corporation for inclusion in OpenLDAP Software. -- */ -- --#ifndef _ALOCK_H_ --#define _ALOCK_H_ -- --#include "portable.h" --#include --#include -- --/* environment states (all the slots together) */ --#define ALOCK_CLEAN (0) --#define ALOCK_RECOVER (1) --#define ALOCK_BUSY (2) --#define ALOCK_UNSTABLE (3) -- --/* lock user types and states */ --#define ALOCK_UNLOCKED (0) --#define ALOCK_LOCKED (1) --#define ALOCK_UNIQUE (2) --#define ALOCK_DIRTY (3) -- --#define ALOCK_SMASK 3 -- --/* lock/state where recovery is not available */ --#define ALOCK_NOSAVE 4 -- --/* constants */ --#define ALOCK_SLOT_SIZE (1024) --#define ALOCK_SLOT_IATTRS (4) --#define ALOCK_MAX_APPNAME (ALOCK_SLOT_SIZE - 8 * ALOCK_SLOT_IATTRS) --#define ALOCK_MAGIC (0x12345678) -- --LDAP_BEGIN_DECL -- --typedef struct alock_info { -- int al_fd; -- int al_slot; --} alock_info_t; -- --typedef struct alock_slot { -- unsigned int al_lock; -- time_t al_stamp; -- pid_t al_pid; -- char * al_appname; --} alock_slot_t; -- --LDAP_SLAPD_F (int) alock_open LDAP_P(( alock_info_t * info, const char * appname, -- const char * envdir, int locktype )); --LDAP_SLAPD_F (int) alock_scan LDAP_P(( alock_info_t * info )); --LDAP_SLAPD_F (int) alock_close LDAP_P(( alock_info_t * info, int nosave )); --LDAP_SLAPD_F (int) alock_recover LDAP_P(( alock_info_t * info )); -- --LDAP_END_DECL -- --#endif -diff --git a/servers/slapd/back-bdb/Makefile.in b/servers/slapd/back-bdb/Makefile.in -deleted file mode 100644 -index 8529202..0000000 ---- a/servers/slapd/back-bdb/Makefile.in -+++ /dev/null -@@ -1,53 +0,0 @@ --# Makefile.in for back-bdb --# $OpenLDAP$ --## This work is part of OpenLDAP Software . --## --## Copyright 1998-2020 The OpenLDAP Foundation. --## All rights reserved. --## --## Redistribution and use in source and binary forms, with or without --## modification, are permitted only as authorized by the OpenLDAP --## Public License. --## --## A copy of this license is available in the file LICENSE in the --## top-level directory of the distribution or, alternatively, at --## . -- --SRCS = init.c tools.c config.c \ -- add.c bind.c compare.c delete.c modify.c modrdn.c search.c \ -- extended.c referral.c operational.c \ -- attr.c index.c key.c dbcache.c filterindex.c \ -- dn2entry.c dn2id.c error.c id2entry.c idl.c \ -- nextid.c cache.c trans.c monitor.c -- --OBJS = init.lo tools.lo config.lo \ -- add.lo bind.lo compare.lo delete.lo modify.lo modrdn.lo search.lo \ -- extended.lo referral.lo operational.lo \ -- attr.lo index.lo key.lo dbcache.lo filterindex.lo \ -- dn2entry.lo dn2id.lo error.lo id2entry.lo idl.lo \ -- nextid.lo cache.lo trans.lo monitor.lo -- --LDAP_INCDIR= ../../../include --LDAP_LIBDIR= ../../../libraries -- --BUILD_OPT = "--enable-bdb" --BUILD_MOD = @BUILD_BDB@ -- --mod_DEFS = -DSLAPD_IMPORT --MOD_DEFS = $(@BUILD_BDB@_DEFS) --MOD_LIBS = $(BDB_LIBS) -- --shared_LDAP_LIBS = $(LDAP_LIBLDAP_R_LA) $(LDAP_LIBLBER_LA) --NT_LINK_LIBS = -L.. -lslapd $(@BUILD_LIBS_DYNAMIC@_LDAP_LIBS) --UNIX_LINK_LIBS = $(@BUILD_LIBS_DYNAMIC@_LDAP_LIBS) -- --LIBBASE = back_bdb -- --XINCPATH = -I.. -I$(srcdir)/.. --XDEFS = $(MODULES_CPPFLAGS) -- --all-local-lib: ../.backend -- --../.backend: lib$(LIBBASE).a -- @touch $@ -- -diff --git a/servers/slapd/back-bdb/add.c b/servers/slapd/back-bdb/add.c -deleted file mode 100644 -index d842b55..0000000 ---- a/servers/slapd/back-bdb/add.c -+++ /dev/null -@@ -1,547 +0,0 @@ --/* add.c - ldap BerkeleyDB back-end add routine */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include --#include -- --#include "back-bdb.h" -- --int --bdb_add(Operation *op, SlapReply *rs ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- struct berval pdn; -- Entry *p = NULL, *oe = op->ora_e; -- EntryInfo *ei; -- char textbuf[SLAP_TEXT_BUFLEN]; -- size_t textlen = sizeof textbuf; -- AttributeDescription *children = slap_schema.si_ad_children; -- AttributeDescription *entry = slap_schema.si_ad_entry; -- DB_TXN *ltid = NULL, *lt2; -- ID eid = NOID; -- struct bdb_op_info opinfo = {{{ 0 }}}; -- int subentry; -- DB_LOCK lock; -- -- int num_retries = 0; -- int success; -- -- LDAPControl **postread_ctrl = NULL; -- LDAPControl *ctrls[SLAP_MAX_RESPONSE_CONTROLS]; -- int num_ctrls = 0; -- --#ifdef LDAP_X_TXN -- int settle = 0; --#endif -- -- Debug(LDAP_DEBUG_ARGS, "==> " LDAP_XSTRING(bdb_add) ": %s\n", -- op->ora_e->e_name.bv_val, 0, 0); -- --#ifdef LDAP_X_TXN -- if( op->o_txnSpec ) { -- /* acquire connection lock */ -- ldap_pvt_thread_mutex_lock( &op->o_conn->c_mutex ); -- if( op->o_conn->c_txn == CONN_TXN_INACTIVE ) { -- rs->sr_text = "invalid transaction identifier"; -- rs->sr_err = LDAP_X_TXN_ID_INVALID; -- goto txnReturn; -- } else if( op->o_conn->c_txn == CONN_TXN_SETTLE ) { -- settle=1; -- goto txnReturn; -- } -- -- if( op->o_conn->c_txn_backend == NULL ) { -- op->o_conn->c_txn_backend = op->o_bd; -- -- } else if( op->o_conn->c_txn_backend != op->o_bd ) { -- rs->sr_text = "transaction cannot span multiple database contexts"; -- rs->sr_err = LDAP_AFFECTS_MULTIPLE_DSAS; -- goto txnReturn; -- } -- -- /* insert operation into transaction */ -- -- rs->sr_text = "transaction specified"; -- rs->sr_err = LDAP_X_TXN_SPECIFY_OKAY; -- --txnReturn: -- /* release connection lock */ -- ldap_pvt_thread_mutex_unlock( &op->o_conn->c_mutex ); -- -- if( !settle ) { -- send_ldap_result( op, rs ); -- return rs->sr_err; -- } -- } --#endif -- -- ctrls[num_ctrls] = 0; -- -- /* check entry's schema */ -- rs->sr_err = entry_schema_check( op, op->ora_e, NULL, -- get_relax(op), 1, NULL, &rs->sr_text, textbuf, textlen ); -- if ( rs->sr_err != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_add) ": entry failed schema check: " -- "%s (%d)\n", rs->sr_text, rs->sr_err, 0 ); -- goto return_results; -- } -- -- /* add opattrs to shadow as well, only missing attrs will actually -- * be added; helps compatibility with older OL versions */ -- rs->sr_err = slap_add_opattrs( op, &rs->sr_text, textbuf, textlen, 1 ); -- if ( rs->sr_err != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_add) ": entry failed op attrs add: " -- "%s (%d)\n", rs->sr_text, rs->sr_err, 0 ); -- goto return_results; -- } -- -- if ( get_assert( op ) && -- ( test_filter( op, op->ora_e, get_assertion( op )) != LDAP_COMPARE_TRUE )) -- { -- rs->sr_err = LDAP_ASSERTION_FAILED; -- goto return_results; -- } -- -- subentry = is_entry_subentry( op->ora_e ); -- -- if( 0 ) { --retry: /* transaction retry */ -- if( p ) { -- /* free parent and reader lock */ -- if ( p != (Entry *)&slap_entry_root ) { -- bdb_unlocked_cache_return_entry_r( bdb, p ); -- } -- p = NULL; -- } -- rs->sr_err = TXN_ABORT( ltid ); -- ltid = NULL; -- LDAP_SLIST_REMOVE( &op->o_extra, &opinfo.boi_oe, OpExtra, oe_next ); -- opinfo.boi_oe.oe_key = NULL; -- op->o_do_not_cache = opinfo.boi_acl_cache; -- if( rs->sr_err != 0 ) { -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- if ( op->o_abandon ) { -- rs->sr_err = SLAPD_ABANDON; -- goto return_results; -- } -- bdb_trans_backoff( ++num_retries ); -- } -- -- /* begin transaction */ -- rs->sr_err = TXN_BEGIN( bdb->bi_dbenv, NULL, <id, -- bdb->bi_db_opflags ); -- rs->sr_text = NULL; -- if( rs->sr_err != 0 ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_add) ": txn_begin failed: %s (%d)\n", -- db_strerror(rs->sr_err), rs->sr_err, 0 ); -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_add) ": txn1 id: %x\n", -- ltid->id(ltid), 0, 0 ); -- -- opinfo.boi_oe.oe_key = bdb; -- opinfo.boi_txn = ltid; -- opinfo.boi_err = 0; -- opinfo.boi_acl_cache = op->o_do_not_cache; -- LDAP_SLIST_INSERT_HEAD( &op->o_extra, &opinfo.boi_oe, oe_next ); -- -- /* -- * Get the parent dn and see if the corresponding entry exists. -- */ -- if ( be_issuffix( op->o_bd, &op->ora_e->e_nname ) ) { -- pdn = slap_empty_bv; -- } else { -- dnParent( &op->ora_e->e_nname, &pdn ); -- } -- -- /* get entry or parent */ -- rs->sr_err = bdb_dn2entry( op, ltid, &op->ora_e->e_nname, &ei, -- 1, &lock ); -- switch( rs->sr_err ) { -- case 0: -- rs->sr_err = LDAP_ALREADY_EXISTS; -- goto return_results; -- case DB_NOTFOUND: -- break; -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- case LDAP_BUSY: -- rs->sr_text = "ldap server busy"; -- goto return_results; -- default: -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- -- p = ei->bei_e; -- if ( !p ) -- p = (Entry *)&slap_entry_root; -- -- if ( !bvmatch( &pdn, &p->e_nname ) ) { -- rs->sr_matched = ber_strdup_x( p->e_name.bv_val, -- op->o_tmpmemctx ); -- rs->sr_ref = is_entry_referral( p ) -- ? get_entry_referrals( op, p ) -- : NULL; -- if ( p != (Entry *)&slap_entry_root ) -- bdb_unlocked_cache_return_entry_r( bdb, p ); -- p = NULL; -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_add) ": parent " -- "does not exist\n", 0, 0, 0 ); -- -- rs->sr_err = LDAP_REFERRAL; -- rs->sr_flags = REP_MATCHED_MUSTBEFREED | REP_REF_MUSTBEFREED; -- goto return_results; -- } -- -- rs->sr_err = access_allowed( op, p, -- children, NULL, ACL_WADD, NULL ); -- -- if ( ! rs->sr_err ) { -- switch( opinfo.boi_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- -- if ( p != (Entry *)&slap_entry_root ) -- bdb_unlocked_cache_return_entry_r( bdb, p ); -- p = NULL; -- -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_add) ": no write access to parent\n", -- 0, 0, 0 ); -- rs->sr_err = LDAP_INSUFFICIENT_ACCESS; -- rs->sr_text = "no write access to parent"; -- goto return_results;; -- } -- -- if ( p != (Entry *)&slap_entry_root ) { -- if ( is_entry_subentry( p ) ) { -- bdb_unlocked_cache_return_entry_r( bdb, p ); -- p = NULL; -- /* parent is a subentry, don't allow add */ -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_add) ": parent is subentry\n", -- 0, 0, 0 ); -- rs->sr_err = LDAP_OBJECT_CLASS_VIOLATION; -- rs->sr_text = "parent is a subentry"; -- goto return_results;; -- } -- -- if ( is_entry_alias( p ) ) { -- bdb_unlocked_cache_return_entry_r( bdb, p ); -- p = NULL; -- /* parent is an alias, don't allow add */ -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_add) ": parent is alias\n", -- 0, 0, 0 ); -- rs->sr_err = LDAP_ALIAS_PROBLEM; -- rs->sr_text = "parent is an alias"; -- goto return_results;; -- } -- -- if ( is_entry_referral( p ) ) { -- /* parent is a referral, don't allow add */ -- rs->sr_matched = ber_strdup_x( p->e_name.bv_val, -- op->o_tmpmemctx ); -- rs->sr_ref = get_entry_referrals( op, p ); -- bdb_unlocked_cache_return_entry_r( bdb, p ); -- p = NULL; -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_add) ": parent is referral\n", -- 0, 0, 0 ); -- -- rs->sr_err = LDAP_REFERRAL; -- rs->sr_flags = REP_MATCHED_MUSTBEFREED | REP_REF_MUSTBEFREED; -- goto return_results; -- } -- -- } -- -- if ( subentry ) { -- /* FIXME: */ -- /* parent must be an administrative point of the required kind */ -- } -- -- /* free parent and reader lock */ -- if ( p != (Entry *)&slap_entry_root ) { -- if ( p->e_nname.bv_len ) { -- struct berval ppdn; -- -- /* ITS#5326: use parent's DN if differs from provided one */ -- dnParent( &op->ora_e->e_name, &ppdn ); -- if ( !dn_match( &p->e_name, &ppdn ) ) { -- struct berval rdn; -- struct berval newdn; -- -- dnRdn( &op->ora_e->e_name, &rdn ); -- -- build_new_dn( &newdn, &p->e_name, &rdn, NULL ); -- if ( op->ora_e->e_name.bv_val != op->o_req_dn.bv_val ) -- ber_memfree( op->ora_e->e_name.bv_val ); -- op->ora_e->e_name = newdn; -- -- /* FIXME: should check whether -- * dnNormalize(newdn) == e->e_nname ... */ -- } -- } -- -- bdb_unlocked_cache_return_entry_r( bdb, p ); -- } -- p = NULL; -- -- rs->sr_err = access_allowed( op, op->ora_e, -- entry, NULL, ACL_WADD, NULL ); -- -- if ( ! rs->sr_err ) { -- switch( opinfo.boi_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_add) ": no write access to entry\n", -- 0, 0, 0 ); -- rs->sr_err = LDAP_INSUFFICIENT_ACCESS; -- rs->sr_text = "no write access to entry"; -- goto return_results;; -- } -- -- /* -- * Check ACL for attribute write access -- */ -- if (!acl_check_modlist(op, oe, op->ora_modlist)) { -- switch( opinfo.boi_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_add) ": no write access to attribute\n", -- 0, 0, 0 ); -- rs->sr_err = LDAP_INSUFFICIENT_ACCESS; -- rs->sr_text = "no write access to attribute"; -- goto return_results;; -- } -- -- if ( eid == NOID ) { -- rs->sr_err = bdb_next_id( op->o_bd, &eid ); -- if( rs->sr_err != 0 ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_add) ": next_id failed (%d)\n", -- rs->sr_err, 0, 0 ); -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- op->ora_e->e_id = eid; -- } -- -- /* nested transaction */ -- rs->sr_err = TXN_BEGIN( bdb->bi_dbenv, ltid, <2, -- bdb->bi_db_opflags ); -- rs->sr_text = NULL; -- if( rs->sr_err != 0 ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_add) ": txn_begin(2) failed: " -- "%s (%d)\n", db_strerror(rs->sr_err), rs->sr_err, 0 ); -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_add) ": txn2 id: %x\n", -- lt2->id(lt2), 0, 0 ); -- -- /* dn2id index */ -- rs->sr_err = bdb_dn2id_add( op, lt2, ei, op->ora_e ); -- if ( rs->sr_err != 0 ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_add) ": dn2id_add failed: %s (%d)\n", -- db_strerror(rs->sr_err), rs->sr_err, 0 ); -- -- switch( rs->sr_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- case DB_KEYEXIST: -- rs->sr_err = LDAP_ALREADY_EXISTS; -- break; -- default: -- rs->sr_err = LDAP_OTHER; -- } -- goto return_results; -- } -- -- /* attribute indexes */ -- rs->sr_err = bdb_index_entry_add( op, lt2, op->ora_e ); -- if ( rs->sr_err != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_add) ": index_entry_add failed\n", -- 0, 0, 0 ); -- switch( rs->sr_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- default: -- rs->sr_err = LDAP_OTHER; -- } -- rs->sr_text = "index generation failed"; -- goto return_results; -- } -- -- /* id2entry index */ -- rs->sr_err = bdb_id2entry_add( op->o_bd, lt2, op->ora_e ); -- if ( rs->sr_err != 0 ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_add) ": id2entry_add failed\n", -- 0, 0, 0 ); -- switch( rs->sr_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- default: -- rs->sr_err = LDAP_OTHER; -- } -- rs->sr_text = "entry store failed"; -- goto return_results; -- } -- -- if ( TXN_COMMIT( lt2, 0 ) != 0 ) { -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "txn_commit(2) failed"; -- goto return_results; -- } -- -- /* post-read */ -- if( op->o_postread ) { -- if( postread_ctrl == NULL ) { -- postread_ctrl = &ctrls[num_ctrls++]; -- ctrls[num_ctrls] = NULL; -- } -- if ( slap_read_controls( op, rs, op->ora_e, -- &slap_post_read_bv, postread_ctrl ) ) -- { -- Debug( LDAP_DEBUG_TRACE, -- "<=- " LDAP_XSTRING(bdb_add) ": post-read " -- "failed!\n", 0, 0, 0 ); -- if ( op->o_postread & SLAP_CONTROL_CRITICAL ) { -- /* FIXME: is it correct to abort -- * operation if control fails? */ -- goto return_results; -- } -- } -- } -- -- if ( op->o_noop ) { -- if (( rs->sr_err=TXN_ABORT( ltid )) != 0 ) { -- rs->sr_text = "txn_abort (no-op) failed"; -- } else { -- rs->sr_err = LDAP_X_NO_OPERATION; -- ltid = NULL; -- goto return_results; -- } -- -- } else { -- struct berval nrdn; -- -- /* pick the RDN if not suffix; otherwise pick the entire DN */ -- if (pdn.bv_len) { -- nrdn.bv_val = op->ora_e->e_nname.bv_val; -- nrdn.bv_len = pdn.bv_val - op->ora_e->e_nname.bv_val - 1; -- } else { -- nrdn = op->ora_e->e_nname; -- } -- -- bdb_cache_add( bdb, ei, op->ora_e, &nrdn, ltid, &lock ); -- -- if(( rs->sr_err=TXN_COMMIT( ltid, 0 )) != 0 ) { -- rs->sr_text = "txn_commit failed"; -- } else { -- rs->sr_err = LDAP_SUCCESS; -- } -- } -- -- ltid = NULL; -- LDAP_SLIST_REMOVE( &op->o_extra, &opinfo.boi_oe, OpExtra, oe_next ); -- opinfo.boi_oe.oe_key = NULL; -- -- if ( rs->sr_err != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_add) ": %s : %s (%d)\n", -- rs->sr_text, db_strerror(rs->sr_err), rs->sr_err ); -- rs->sr_err = LDAP_OTHER; -- goto return_results; -- } -- -- Debug(LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_add) ": added%s id=%08lx dn=\"%s\"\n", -- op->o_noop ? " (no-op)" : "", -- op->ora_e->e_id, op->ora_e->e_dn ); -- -- rs->sr_text = NULL; -- if( num_ctrls ) rs->sr_ctrls = ctrls; -- --return_results: -- success = rs->sr_err; -- send_ldap_result( op, rs ); -- -- if( ltid != NULL ) { -- TXN_ABORT( ltid ); -- } -- if ( opinfo.boi_oe.oe_key ) { -- LDAP_SLIST_REMOVE( &op->o_extra, &opinfo.boi_oe, OpExtra, oe_next ); -- } -- -- if( success == LDAP_SUCCESS ) { -- /* We own the entry now, and it can be purged at will -- * Check to make sure it's the same entry we entered with. -- * Possibly a callback may have mucked with it, although -- * in general callbacks should treat the entry as read-only. -- */ -- bdb_cache_deref( oe->e_private ); -- if ( op->ora_e == oe ) -- op->ora_e = NULL; -- -- if ( bdb->bi_txn_cp_kbyte ) { -- TXN_CHECKPOINT( bdb->bi_dbenv, -- bdb->bi_txn_cp_kbyte, bdb->bi_txn_cp_min, 0 ); -- } -- } -- -- slap_graduate_commit_csn( op ); -- -- if( postread_ctrl != NULL && (*postread_ctrl) != NULL ) { -- slap_sl_free( (*postread_ctrl)->ldctl_value.bv_val, op->o_tmpmemctx ); -- slap_sl_free( *postread_ctrl, op->o_tmpmemctx ); -- } -- return rs->sr_err; --} -diff --git a/servers/slapd/back-bdb/attr.c b/servers/slapd/back-bdb/attr.c -deleted file mode 100644 -index 5d9990d..0000000 ---- a/servers/slapd/back-bdb/attr.c -+++ /dev/null -@@ -1,441 +0,0 @@ --/* attr.c - backend routines for dealing with attributes */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include -- --#include --#include -- --#include "slap.h" --#include "back-bdb.h" --#include "config.h" --#include "lutil.h" -- --/* Find the ad, return -1 if not found, -- * set point for insertion if ins is non-NULL -- */ --int --bdb_attr_slot( struct bdb_info *bdb, AttributeDescription *ad, int *ins ) --{ -- unsigned base = 0, cursor = 0; -- unsigned n = bdb->bi_nattrs; -- int val = 0; -- -- while ( 0 < n ) { -- unsigned pivot = n >> 1; -- cursor = base + pivot; -- -- val = SLAP_PTRCMP( ad, bdb->bi_attrs[cursor]->ai_desc ); -- if ( val < 0 ) { -- n = pivot; -- } else if ( val > 0 ) { -- base = cursor + 1; -- n -= pivot + 1; -- } else { -- return cursor; -- } -- } -- if ( ins ) { -- if ( val > 0 ) -- ++cursor; -- *ins = cursor; -- } -- return -1; --} -- --static int --ainfo_insert( struct bdb_info *bdb, AttrInfo *a ) --{ -- int x; -- int i = bdb_attr_slot( bdb, a->ai_desc, &x ); -- -- /* Is it a dup? */ -- if ( i >= 0 ) -- return -1; -- -- bdb->bi_attrs = ch_realloc( bdb->bi_attrs, ( bdb->bi_nattrs+1 ) * -- sizeof( AttrInfo * )); -- if ( x < bdb->bi_nattrs ) -- AC_MEMCPY( &bdb->bi_attrs[x+1], &bdb->bi_attrs[x], -- ( bdb->bi_nattrs - x ) * sizeof( AttrInfo *)); -- bdb->bi_attrs[x] = a; -- bdb->bi_nattrs++; -- return 0; --} -- --AttrInfo * --bdb_attr_mask( -- struct bdb_info *bdb, -- AttributeDescription *desc ) --{ -- int i = bdb_attr_slot( bdb, desc, NULL ); -- return i < 0 ? NULL : bdb->bi_attrs[i]; --} -- --int --bdb_attr_index_config( -- struct bdb_info *bdb, -- const char *fname, -- int lineno, -- int argc, -- char **argv, -- struct config_reply_s *c_reply) --{ -- int rc = 0; -- int i; -- slap_mask_t mask; -- char **attrs; -- char **indexes = NULL; -- -- attrs = ldap_str2charray( argv[0], "," ); -- -- if( attrs == NULL ) { -- fprintf( stderr, "%s: line %d: " -- "no attributes specified: %s\n", -- fname, lineno, argv[0] ); -- return LDAP_PARAM_ERROR; -- } -- -- if ( argc > 1 ) { -- indexes = ldap_str2charray( argv[1], "," ); -- -- if( indexes == NULL ) { -- fprintf( stderr, "%s: line %d: " -- "no indexes specified: %s\n", -- fname, lineno, argv[1] ); -- rc = LDAP_PARAM_ERROR; -- goto done; -- } -- } -- -- if( indexes == NULL ) { -- mask = bdb->bi_defaultmask; -- -- } else { -- mask = 0; -- -- for ( i = 0; indexes[i] != NULL; i++ ) { -- slap_mask_t index; -- rc = slap_str2index( indexes[i], &index ); -- -- if( rc != LDAP_SUCCESS ) { -- if ( c_reply ) -- { -- snprintf(c_reply->msg, sizeof(c_reply->msg), -- "index type \"%s\" undefined", indexes[i] ); -- -- fprintf( stderr, "%s: line %d: %s\n", -- fname, lineno, c_reply->msg ); -- } -- rc = LDAP_PARAM_ERROR; -- goto done; -- } -- -- mask |= index; -- } -- } -- -- if( !mask ) { -- if ( c_reply ) -- { -- snprintf(c_reply->msg, sizeof(c_reply->msg), -- "no indexes selected" ); -- fprintf( stderr, "%s: line %d: %s\n", -- fname, lineno, c_reply->msg ); -- } -- rc = LDAP_PARAM_ERROR; -- goto done; -- } -- -- for ( i = 0; attrs[i] != NULL; i++ ) { -- AttrInfo *a; -- AttributeDescription *ad; -- const char *text; --#ifdef LDAP_COMP_MATCH -- ComponentReference* cr = NULL; -- AttrInfo *a_cr = NULL; --#endif -- -- if( strcasecmp( attrs[i], "default" ) == 0 ) { -- bdb->bi_defaultmask |= mask; -- continue; -- } -- --#ifdef LDAP_COMP_MATCH -- if ( is_component_reference( attrs[i] ) ) { -- rc = extract_component_reference( attrs[i], &cr ); -- if ( rc != LDAP_SUCCESS ) { -- if ( c_reply ) -- { -- snprintf(c_reply->msg, sizeof(c_reply->msg), -- "index component reference\"%s\" undefined", -- attrs[i] ); -- fprintf( stderr, "%s: line %d: %s\n", -- fname, lineno, c_reply->msg ); -- } -- goto done; -- } -- cr->cr_indexmask = mask; -- /* -- * After extracting a component reference -- * only the name of a attribute will be remaining -- */ -- } else { -- cr = NULL; -- } --#endif -- ad = NULL; -- rc = slap_str2ad( attrs[i], &ad, &text ); -- -- if( rc != LDAP_SUCCESS ) { -- if ( c_reply ) -- { -- snprintf(c_reply->msg, sizeof(c_reply->msg), -- "index attribute \"%s\" undefined", -- attrs[i] ); -- -- fprintf( stderr, "%s: line %d: %s\n", -- fname, lineno, c_reply->msg ); -- } -- goto done; -- } -- -- if( ad == slap_schema.si_ad_entryDN || slap_ad_is_binary( ad ) ) { -- if (c_reply) { -- snprintf(c_reply->msg, sizeof(c_reply->msg), -- "index of attribute \"%s\" disallowed", attrs[i] ); -- fprintf( stderr, "%s: line %d: %s\n", -- fname, lineno, c_reply->msg ); -- } -- rc = LDAP_UNWILLING_TO_PERFORM; -- goto done; -- } -- -- if( IS_SLAP_INDEX( mask, SLAP_INDEX_APPROX ) && !( -- ad->ad_type->sat_approx -- && ad->ad_type->sat_approx->smr_indexer -- && ad->ad_type->sat_approx->smr_filter ) ) -- { -- if (c_reply) { -- snprintf(c_reply->msg, sizeof(c_reply->msg), -- "approx index of attribute \"%s\" disallowed", attrs[i] ); -- fprintf( stderr, "%s: line %d: %s\n", -- fname, lineno, c_reply->msg ); -- } -- rc = LDAP_INAPPROPRIATE_MATCHING; -- goto done; -- } -- -- if( IS_SLAP_INDEX( mask, SLAP_INDEX_EQUALITY ) && !( -- ad->ad_type->sat_equality -- && ad->ad_type->sat_equality->smr_indexer -- && ad->ad_type->sat_equality->smr_filter ) ) -- { -- if (c_reply) { -- snprintf(c_reply->msg, sizeof(c_reply->msg), -- "equality index of attribute \"%s\" disallowed", attrs[i] ); -- fprintf( stderr, "%s: line %d: %s\n", -- fname, lineno, c_reply->msg ); -- } -- rc = LDAP_INAPPROPRIATE_MATCHING; -- goto done; -- } -- -- if( IS_SLAP_INDEX( mask, SLAP_INDEX_SUBSTR ) && !( -- ad->ad_type->sat_substr -- && ad->ad_type->sat_substr->smr_indexer -- && ad->ad_type->sat_substr->smr_filter ) ) -- { -- if (c_reply) { -- snprintf(c_reply->msg, sizeof(c_reply->msg), -- "substr index of attribute \"%s\" disallowed", attrs[i] ); -- fprintf( stderr, "%s: line %d: %s\n", -- fname, lineno, c_reply->msg ); -- } -- rc = LDAP_INAPPROPRIATE_MATCHING; -- goto done; -- } -- -- Debug( LDAP_DEBUG_CONFIG, "index %s 0x%04lx\n", -- ad->ad_cname.bv_val, mask, 0 ); -- -- a = (AttrInfo *) ch_malloc( sizeof(AttrInfo) ); -- --#ifdef LDAP_COMP_MATCH -- a->ai_cr = NULL; --#endif -- a->ai_desc = ad; -- -- if ( bdb->bi_flags & BDB_IS_OPEN ) { -- a->ai_indexmask = 0; -- a->ai_newmask = mask; -- } else { -- a->ai_indexmask = mask; -- a->ai_newmask = 0; -- } -- --#ifdef LDAP_COMP_MATCH -- if ( cr ) { -- a_cr = bdb_attr_mask( bdb, ad ); -- if ( a_cr ) { -- /* -- * AttrInfo is already in AVL -- * just add the extracted component reference -- * in the AttrInfo -- */ -- rc = insert_component_reference( cr, &a_cr->ai_cr ); -- if ( rc != LDAP_SUCCESS) { -- fprintf( stderr, " error during inserting component reference in %s ", attrs[i]); -- rc = LDAP_PARAM_ERROR; -- goto done; -- } -- continue; -- } else { -- rc = insert_component_reference( cr, &a->ai_cr ); -- if ( rc != LDAP_SUCCESS) { -- fprintf( stderr, " error during inserting component reference in %s ", attrs[i]); -- rc = LDAP_PARAM_ERROR; -- goto done; -- } -- } -- } --#endif -- rc = ainfo_insert( bdb, a ); -- if( rc ) { -- if ( bdb->bi_flags & BDB_IS_OPEN ) { -- AttrInfo *b = bdb_attr_mask( bdb, ad ); -- /* If there is already an index defined for this attribute -- * it must be replaced. Otherwise we end up with multiple -- * olcIndex values for the same attribute */ -- if ( b->ai_indexmask & BDB_INDEX_DELETING ) { -- /* If we were editing this attr, reset it */ -- b->ai_indexmask &= ~BDB_INDEX_DELETING; -- /* If this is leftover from a previous add, commit it */ -- if ( b->ai_newmask ) -- b->ai_indexmask = b->ai_newmask; -- b->ai_newmask = a->ai_newmask; -- ch_free( a ); -- rc = 0; -- continue; -- } -- } -- if (c_reply) { -- snprintf(c_reply->msg, sizeof(c_reply->msg), -- "duplicate index definition for attr \"%s\"", -- attrs[i] ); -- fprintf( stderr, "%s: line %d: %s\n", -- fname, lineno, c_reply->msg ); -- } -- -- rc = LDAP_PARAM_ERROR; -- goto done; -- } -- } -- --done: -- ldap_charray_free( attrs ); -- if ( indexes != NULL ) ldap_charray_free( indexes ); -- -- return rc; --} -- --static int --bdb_attr_index_unparser( void *v1, void *v2 ) --{ -- AttrInfo *ai = v1; -- BerVarray *bva = v2; -- struct berval bv; -- char *ptr; -- -- slap_index2bvlen( ai->ai_indexmask, &bv ); -- if ( bv.bv_len ) { -- bv.bv_len += ai->ai_desc->ad_cname.bv_len + 1; -- ptr = ch_malloc( bv.bv_len+1 ); -- bv.bv_val = lutil_strcopy( ptr, ai->ai_desc->ad_cname.bv_val ); -- *bv.bv_val++ = ' '; -- slap_index2bv( ai->ai_indexmask, &bv ); -- bv.bv_val = ptr; -- ber_bvarray_add( bva, &bv ); -- } -- return 0; --} -- --static AttributeDescription addef = { NULL, NULL, BER_BVC("default") }; --static AttrInfo aidef = { &addef }; -- --void --bdb_attr_index_unparse( struct bdb_info *bdb, BerVarray *bva ) --{ -- int i; -- -- if ( bdb->bi_defaultmask ) { -- aidef.ai_indexmask = bdb->bi_defaultmask; -- bdb_attr_index_unparser( &aidef, bva ); -- } -- for ( i=0; ibi_nattrs; i++ ) -- bdb_attr_index_unparser( bdb->bi_attrs[i], bva ); --} -- --void --bdb_attr_info_free( AttrInfo *ai ) --{ --#ifdef LDAP_COMP_MATCH -- free( ai->ai_cr ); --#endif -- free( ai ); --} -- --void --bdb_attr_index_destroy( struct bdb_info *bdb ) --{ -- int i; -- -- for ( i=0; ibi_nattrs; i++ ) -- bdb_attr_info_free( bdb->bi_attrs[i] ); -- -- free( bdb->bi_attrs ); --} -- --void bdb_attr_index_free( struct bdb_info *bdb, AttributeDescription *ad ) --{ -- int i; -- -- i = bdb_attr_slot( bdb, ad, NULL ); -- if ( i >= 0 ) { -- bdb_attr_info_free( bdb->bi_attrs[i] ); -- bdb->bi_nattrs--; -- for (; ibi_nattrs; i++) -- bdb->bi_attrs[i] = bdb->bi_attrs[i+1]; -- } --} -- --void bdb_attr_flush( struct bdb_info *bdb ) --{ -- int i; -- -- for ( i=0; ibi_nattrs; i++ ) { -- if ( bdb->bi_attrs[i]->ai_indexmask & BDB_INDEX_DELETING ) { -- int j; -- bdb_attr_info_free( bdb->bi_attrs[i] ); -- bdb->bi_nattrs--; -- for (j=i; jbi_nattrs; j++) -- bdb->bi_attrs[j] = bdb->bi_attrs[j+1]; -- i--; -- } -- } --} -diff --git a/servers/slapd/back-bdb/back-bdb.h b/servers/slapd/back-bdb/back-bdb.h -deleted file mode 100644 -index 84897cd..0000000 ---- a/servers/slapd/back-bdb/back-bdb.h -+++ /dev/null -@@ -1,377 +0,0 @@ --/* back-bdb.h - bdb back-end header file */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#ifndef _BACK_BDB_H_ --#define _BACK_BDB_H_ -- --#include --#include "slap.h" --#include --#include "alock.h" -- --LDAP_BEGIN_DECL -- --#define DB_VERSION_FULL ((DB_VERSION_MAJOR << 24) | (DB_VERSION_MINOR << 16) | DB_VERSION_PATCH) -- --#define DN_BASE_PREFIX SLAP_INDEX_EQUALITY_PREFIX --#define DN_ONE_PREFIX '%' --#define DN_SUBTREE_PREFIX '@' -- --#define DBTzero(t) (memset((t), 0, sizeof(DBT))) --#define DBT2bv(t,bv) ((bv)->bv_val = (t)->data, \ -- (bv)->bv_len = (t)->size) --#define bv2DBT(bv,t) ((t)->data = (bv)->bv_val, \ -- (t)->size = (bv)->bv_len ) -- --#define BDB_TXN_RETRIES 16 -- --#define BDB_MAX_ADD_LOOP 30 -- --#define BDB_SUFFIX ".bdb" --#define BDB_ID2ENTRY 0 --#define BDB_DN2ID 1 --#define BDB_NDB 2 -- --/* The bdb on-disk entry format is pretty space-inefficient. Average -- * sized user entries are 3-4K each. You need at least two entries to -- * fit into a single database page, more is better. 64K is BDB's -- * upper bound. Smaller pages are better for concurrency. -- */ --#ifndef BDB_ID2ENTRY_PAGESIZE --#define BDB_ID2ENTRY_PAGESIZE 16384 --#endif -- --#define DEFAULT_CACHE_SIZE 1000 -- --/* The default search IDL stack cache depth */ --#define DEFAULT_SEARCH_STACK_DEPTH 16 -- --/* The minimum we can function with */ --#define MINIMUM_SEARCH_STACK_DEPTH 8 -- --typedef struct bdb_idl_cache_entry_s { -- struct berval kstr; -- ID *idl; -- DB *db; -- int idl_flags; -- struct bdb_idl_cache_entry_s* idl_lru_prev; -- struct bdb_idl_cache_entry_s* idl_lru_next; --} bdb_idl_cache_entry_t; -- --/* BDB backend specific entry info */ --typedef struct bdb_entry_info { -- struct bdb_entry_info *bei_parent; -- ID bei_id; -- -- /* we use the bei_id as a lockobj, but we need to make the size != 4 -- * to avoid conflicting with BDB's internal locks. So add a byte here -- * that is always zero. -- */ -- short bei_lockpad; -- -- short bei_state; --#define CACHE_ENTRY_DELETED 1 --#define CACHE_ENTRY_NO_KIDS 2 --#define CACHE_ENTRY_NOT_LINKED 4 --#define CACHE_ENTRY_NO_GRANDKIDS 8 --#define CACHE_ENTRY_LOADING 0x10 --#define CACHE_ENTRY_WALKING 0x20 --#define CACHE_ENTRY_ONELEVEL 0x40 --#define CACHE_ENTRY_REFERENCED 0x80 --#define CACHE_ENTRY_NOT_CACHED 0x100 -- int bei_finders; -- -- /* -- * remaining fields require backend cache lock to access -- */ -- struct berval bei_nrdn; --#ifdef BDB_HIER -- struct berval bei_rdn; -- int bei_modrdns; /* track renames */ -- int bei_ckids; /* number of kids cached */ -- int bei_dkids; /* number of kids on-disk, plus 1 */ --#endif -- Entry *bei_e; -- Avlnode *bei_kids; --#ifdef SLAP_ZONE_ALLOC -- struct bdb_info *bei_bdb; -- int bei_zseq; --#endif -- ldap_pvt_thread_mutex_t bei_kids_mutex; -- -- struct bdb_entry_info *bei_lrunext; /* for cache lru list */ -- struct bdb_entry_info *bei_lruprev; --} EntryInfo; --#undef BEI --#define BEI(e) ((EntryInfo *) ((e)->e_private)) -- --/* for the in-core cache of entries */ --typedef struct bdb_cache { -- EntryInfo *c_eifree; /* free list */ -- Avlnode *c_idtree; -- EntryInfo *c_lruhead; /* lru - add accessed entries here */ -- EntryInfo *c_lrutail; /* lru - rem lru entries from here */ -- EntryInfo c_dntree; -- ID c_maxsize; -- ID c_cursize; -- ID c_minfree; -- ID c_eimax; -- ID c_eiused; /* EntryInfo's in use */ -- ID c_leaves; /* EntryInfo leaf nodes */ -- int c_purging; -- DB_TXN *c_txn; /* used by lru cleaner */ -- ldap_pvt_thread_rdwr_t c_rwlock; -- ldap_pvt_thread_mutex_t c_lru_mutex; -- ldap_pvt_thread_mutex_t c_count_mutex; -- ldap_pvt_thread_mutex_t c_eifree_mutex; --#ifdef SLAP_ZONE_ALLOC -- void *c_zctx; --#endif --} Cache; -- --#define CACHE_READ_LOCK 0 --#define CACHE_WRITE_LOCK 1 -- --#define BDB_INDICES 128 -- --struct bdb_db_info { -- struct berval bdi_name; -- DB *bdi_db; --}; -- --struct bdb_db_pgsize { -- struct bdb_db_pgsize *bdp_next; -- struct berval bdp_name; -- int bdp_size; --}; -- --#ifdef LDAP_DEVEL --#define BDB_MONITOR_IDX --#endif /* LDAP_DEVEL */ -- --typedef struct bdb_monitor_t { -- void *bdm_cb; -- struct berval bdm_ndn; --} bdb_monitor_t; -- --/* From ldap_rq.h */ --struct re_s; -- --struct bdb_info { -- DB_ENV *bi_dbenv; -- -- /* DB_ENV parameters */ -- /* The DB_ENV can be tuned via DB_CONFIG */ -- char *bi_dbenv_home; -- u_int32_t bi_dbenv_xflags; /* extra flags */ -- int bi_dbenv_mode; -- -- int bi_ndatabases; -- int bi_db_opflags; /* db-specific flags */ -- struct bdb_db_info **bi_databases; -- ldap_pvt_thread_mutex_t bi_database_mutex; -- struct bdb_db_pgsize *bi_pagesizes; -- -- slap_mask_t bi_defaultmask; -- Cache bi_cache; -- struct bdb_attrinfo **bi_attrs; -- int bi_nattrs; -- void *bi_search_stack; -- int bi_search_stack_depth; -- int bi_linear_index; -- -- int bi_txn_cp; -- u_int32_t bi_txn_cp_min; -- u_int32_t bi_txn_cp_kbyte; -- struct re_s *bi_txn_cp_task; -- struct re_s *bi_index_task; -- -- u_int32_t bi_lock_detect; -- long bi_shm_key; -- -- ID bi_lastid; -- ldap_pvt_thread_mutex_t bi_lastid_mutex; -- ID bi_idl_cache_max_size; -- ID bi_idl_cache_size; -- Avlnode *bi_idl_tree; -- bdb_idl_cache_entry_t *bi_idl_lru_head; -- bdb_idl_cache_entry_t *bi_idl_lru_tail; -- ldap_pvt_thread_rdwr_t bi_idl_tree_rwlock; -- ldap_pvt_thread_mutex_t bi_idl_tree_lrulock; -- alock_info_t bi_alock_info; -- char *bi_db_config_path; -- BerVarray bi_db_config; -- char *bi_db_crypt_file; -- struct berval bi_db_crypt_key; -- bdb_monitor_t bi_monitor; -- --#ifdef BDB_MONITOR_IDX -- ldap_pvt_thread_mutex_t bi_idx_mutex; -- Avlnode *bi_idx; --#endif /* BDB_MONITOR_IDX */ -- -- int bi_flags; --#define BDB_IS_OPEN 0x01 --#define BDB_HAS_CONFIG 0x02 --#define BDB_UPD_CONFIG 0x04 --#define BDB_DEL_INDEX 0x08 --#define BDB_RE_OPEN 0x10 --#define BDB_CHKSUM 0x20 --#ifdef BDB_HIER -- int bi_modrdns; /* number of modrdns completed */ -- ldap_pvt_thread_mutex_t bi_modrdns_mutex; --#endif --}; -- --#define bi_id2entry bi_databases[BDB_ID2ENTRY] --#define bi_dn2id bi_databases[BDB_DN2ID] -- -- --struct bdb_lock_info { -- struct bdb_lock_info *bli_next; -- DB_LOCK bli_lock; -- ID bli_id; -- int bli_flag; --}; --#define BLI_DONTFREE 1 -- --struct bdb_op_info { -- OpExtra boi_oe; -- DB_TXN* boi_txn; -- struct bdb_lock_info *boi_locks; /* used when no txn */ -- u_int32_t boi_err; -- char boi_acl_cache; -- char boi_flag; --}; --#define BOI_DONTFREE 1 -- --#define DB_OPEN(db, file, name, type, flags, mode) \ -- ((db)->open)(db, file, name, type, flags, mode) -- --#if DB_VERSION_MAJOR < 4 --#define LOCK_DETECT(env,f,t,a) lock_detect(env, f, t, a) --#define LOCK_GET(env,i,f,o,m,l) lock_get(env, i, f, o, m, l) --#define LOCK_PUT(env,l) lock_put(env, l) --#define TXN_CHECKPOINT(env,k,m,f) txn_checkpoint(env, k, m, f) --#define TXN_BEGIN(env,p,t,f) txn_begin((env), p, t, f) --#define TXN_PREPARE(txn,gid) txn_prepare((txn), (gid)) --#define TXN_COMMIT(txn,f) txn_commit((txn), (f)) --#define TXN_ABORT(txn) txn_abort((txn)) --#define TXN_ID(txn) txn_id(txn) --#define XLOCK_ID(env, locker) lock_id(env, locker) --#define XLOCK_ID_FREE(env, locker) lock_id_free(env, locker) --#else --#define LOCK_DETECT(env,f,t,a) (env)->lock_detect(env, f, t, a) --#define LOCK_GET(env,i,f,o,m,l) (env)->lock_get(env, i, f, o, m, l) --#define LOCK_PUT(env,l) (env)->lock_put(env, l) --#define TXN_CHECKPOINT(env,k,m,f) (env)->txn_checkpoint(env, k, m, f) --#define TXN_BEGIN(env,p,t,f) (env)->txn_begin((env), p, t, f) --#define TXN_PREPARE(txn,g) (txn)->prepare((txn), (g)) --#define TXN_COMMIT(txn,f) (txn)->commit((txn), (f)) --#define TXN_ABORT(txn) (txn)->abort((txn)) --#define TXN_ID(txn) (txn)->id(txn) --#define XLOCK_ID(env, locker) (env)->lock_id(env, locker) --#define XLOCK_ID_FREE(env, locker) (env)->lock_id_free(env, locker) -- --/* BDB 4.1.17 adds txn arg to db->open */ --#if DB_VERSION_FULL >= 0x04010011 --#undef DB_OPEN --#define DB_OPEN(db, file, name, type, flags, mode) \ -- ((db)->open)(db, NULL, file, name, type, flags, mode) --#endif -- --/* #undef BDB_LOG_DEBUG */ -- --#ifdef BDB_LOG_DEBUG -- --/* env->log_printf appeared in 4.4 */ --#if DB_VERSION_FULL >= 0x04040000 --#define BDB_LOG_PRINTF(env,txn,fmt,...) (env)->log_printf((env),(txn),(fmt),__VA_ARGS__) --#else --extern int __db_logmsg(const DB_ENV *env, DB_TXN *txn, const char *op, u_int32_t flags, -- const char *fmt,...); --#define BDB_LOG_PRINTF(env,txn,fmt,...) __db_logmsg((env),(txn),"DIAGNOSTIC",0,(fmt),__VA_ARGS__) --#endif -- --/* !BDB_LOG_DEBUG */ --#elif (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ -- (defined(__GNUC__) && __GNUC__ >= 3 && !defined(__STRICT_ANSI__)) --#define BDB_LOG_PRINTF(a,b,c,...) --#else --#define BDB_LOG_PRINTF (void) /* will evaluate and discard the arguments */ -- --#endif /* BDB_LOG_DEBUG */ -- --#endif -- --#ifndef DB_BUFFER_SMALL --#define DB_BUFFER_SMALL ENOMEM --#endif -- --#define BDB_CSN_COMMIT 0 --#define BDB_CSN_ABORT 1 --#define BDB_CSN_RETRY 2 -- --/* Copy an ID "src" to pointer "dst" in big-endian byte order */ --#define BDB_ID2DISK( src, dst ) \ -- do { int i0; ID tmp; unsigned char *_p; \ -- tmp = (src); _p = (unsigned char *)(dst); \ -- for ( i0=sizeof(ID)-1; i0>=0; i0-- ) { \ -- _p[i0] = tmp & 0xff; tmp >>= 8; \ -- } \ -- } while(0) -- --/* Copy a pointer "src" to a pointer "dst" from big-endian to native order */ --#define BDB_DISK2ID( src, dst ) \ -- do { unsigned i0; ID tmp = 0; unsigned char *_p; \ -- _p = (unsigned char *)(src); \ -- for ( i0=0; i0. -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include --#include --#include -- --#include "back-bdb.h" -- --int --bdb_bind( Operation *op, SlapReply *rs ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- Entry *e; -- Attribute *a; -- EntryInfo *ei; -- -- AttributeDescription *password = slap_schema.si_ad_userPassword; -- -- DB_TXN *rtxn; -- DB_LOCK lock; -- -- Debug( LDAP_DEBUG_ARGS, -- "==> " LDAP_XSTRING(bdb_bind) ": dn: %s\n", -- op->o_req_dn.bv_val, 0, 0); -- -- /* allow noauth binds */ -- switch ( be_rootdn_bind( op, NULL ) ) { -- case LDAP_SUCCESS: -- /* frontend will send result */ -- return rs->sr_err = LDAP_SUCCESS; -- -- default: -- /* give the database a chance */ -- /* NOTE: this behavior departs from that of other backends, -- * since the others, in case of password checking failure -- * do not give the database a chance. If an entry with -- * rootdn's name does not exist in the database the result -- * will be the same. See ITS#4962 for discussion. */ -- break; -- } -- -- rs->sr_err = bdb_reader_get(op, bdb->bi_dbenv, &rtxn); -- switch(rs->sr_err) { -- case 0: -- break; -- default: -- rs->sr_text = "internal error"; -- send_ldap_result( op, rs ); -- return rs->sr_err; -- } -- --dn2entry_retry: -- /* get entry with reader lock */ -- rs->sr_err = bdb_dn2entry( op, rtxn, &op->o_req_ndn, &ei, 1, -- &lock ); -- -- switch(rs->sr_err) { -- case DB_NOTFOUND: -- case 0: -- break; -- case LDAP_BUSY: -- send_ldap_error( op, rs, LDAP_BUSY, "ldap_server_busy" ); -- return LDAP_BUSY; -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto dn2entry_retry; -- default: -- send_ldap_error( op, rs, LDAP_OTHER, "internal error" ); -- return rs->sr_err; -- } -- -- e = ei->bei_e; -- if ( rs->sr_err == DB_NOTFOUND ) { -- if( e != NULL ) { -- bdb_cache_return_entry_r( bdb, e, &lock ); -- e = NULL; -- } -- -- rs->sr_err = LDAP_INVALID_CREDENTIALS; -- send_ldap_result( op, rs ); -- -- return rs->sr_err; -- } -- -- ber_dupbv( &op->oq_bind.rb_edn, &e->e_name ); -- -- /* check for deleted */ -- if ( is_entry_subentry( e ) ) { -- /* entry is an subentry, don't allow bind */ -- Debug( LDAP_DEBUG_TRACE, "entry is subentry\n", 0, -- 0, 0 ); -- rs->sr_err = LDAP_INVALID_CREDENTIALS; -- goto done; -- } -- -- if ( is_entry_alias( e ) ) { -- /* entry is an alias, don't allow bind */ -- Debug( LDAP_DEBUG_TRACE, "entry is alias\n", 0, 0, 0 ); -- rs->sr_err = LDAP_INVALID_CREDENTIALS; -- goto done; -- } -- -- if ( is_entry_referral( e ) ) { -- Debug( LDAP_DEBUG_TRACE, "entry is referral\n", 0, -- 0, 0 ); -- rs->sr_err = LDAP_INVALID_CREDENTIALS; -- goto done; -- } -- -- switch ( op->oq_bind.rb_method ) { -- case LDAP_AUTH_SIMPLE: -- a = attr_find( e->e_attrs, password ); -- if ( a == NULL ) { -- rs->sr_err = LDAP_INVALID_CREDENTIALS; -- goto done; -- } -- -- if ( slap_passwd_check( op, e, a, &op->oq_bind.rb_cred, -- &rs->sr_text ) != 0 ) -- { -- /* failure; stop front end from sending result */ -- rs->sr_err = LDAP_INVALID_CREDENTIALS; -- goto done; -- } -- -- rs->sr_err = 0; -- break; -- -- default: -- assert( 0 ); /* should not be reachable */ -- rs->sr_err = LDAP_STRONG_AUTH_NOT_SUPPORTED; -- rs->sr_text = "authentication method not supported"; -- } -- --done: -- /* free entry and reader lock */ -- if( e != NULL ) { -- bdb_cache_return_entry_r( bdb, e, &lock ); -- } -- -- if ( rs->sr_err ) { -- send_ldap_result( op, rs ); -- if ( rs->sr_ref ) { -- ber_bvarray_free( rs->sr_ref ); -- rs->sr_ref = NULL; -- } -- } -- /* front end will send result on success (rs->sr_err==0) */ -- return rs->sr_err; --} -diff --git a/servers/slapd/back-bdb/cache.c b/servers/slapd/back-bdb/cache.c -deleted file mode 100644 -index 51161fe..0000000 ---- a/servers/slapd/back-bdb/cache.c -+++ /dev/null -@@ -1,1692 +0,0 @@ --/* cache.c - routines to maintain an in-core cache of entries */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include -- --#include --#include --#include -- --#include "slap.h" -- --#include "back-bdb.h" -- --#include "ldap_rq.h" -- --#ifdef BDB_HIER --#define bdb_cache_lru_purge hdb_cache_lru_purge --#endif --static void bdb_cache_lru_purge( struct bdb_info *bdb ); -- --static int bdb_cache_delete_internal(Cache *cache, EntryInfo *e, int decr); --#ifdef LDAP_DEBUG --#define SLAPD_UNUSED --#ifdef SLAPD_UNUSED --static void bdb_lru_print(Cache *cache); --static void bdb_idtree_print(Cache *cache); --#endif --#endif -- --/* For concurrency experiments only! */ --#if 0 --#define ldap_pvt_thread_rdwr_wlock(a) 0 --#define ldap_pvt_thread_rdwr_wunlock(a) 0 --#define ldap_pvt_thread_rdwr_rlock(a) 0 --#define ldap_pvt_thread_rdwr_runlock(a) 0 --#endif -- --#if 0 --#define ldap_pvt_thread_mutex_trylock(a) 0 --#endif -- --static EntryInfo * --bdb_cache_entryinfo_new( Cache *cache ) --{ -- EntryInfo *ei = NULL; -- -- if ( cache->c_eifree ) { -- ldap_pvt_thread_mutex_lock( &cache->c_eifree_mutex ); -- if ( cache->c_eifree ) { -- ei = cache->c_eifree; -- cache->c_eifree = ei->bei_lrunext; -- ei->bei_finders = 0; -- ei->bei_lrunext = NULL; -- } -- ldap_pvt_thread_mutex_unlock( &cache->c_eifree_mutex ); -- } -- if ( !ei ) { -- ei = ch_calloc(1, sizeof(EntryInfo)); -- ldap_pvt_thread_mutex_init( &ei->bei_kids_mutex ); -- } -- -- ei->bei_state = CACHE_ENTRY_REFERENCED; -- -- return ei; --} -- --static void --bdb_cache_entryinfo_free( Cache *cache, EntryInfo *ei ) --{ -- free( ei->bei_nrdn.bv_val ); -- BER_BVZERO( &ei->bei_nrdn ); --#ifdef BDB_HIER -- free( ei->bei_rdn.bv_val ); -- BER_BVZERO( &ei->bei_rdn ); -- ei->bei_modrdns = 0; -- ei->bei_ckids = 0; -- ei->bei_dkids = 0; --#endif -- ei->bei_parent = NULL; -- ei->bei_kids = NULL; -- ei->bei_lruprev = NULL; -- --#if 0 -- ldap_pvt_thread_mutex_lock( &cache->c_eifree_mutex ); -- ei->bei_lrunext = cache->c_eifree; -- cache->c_eifree = ei; -- ldap_pvt_thread_mutex_unlock( &cache->c_eifree_mutex ); --#else -- ldap_pvt_thread_mutex_destroy( &ei->bei_kids_mutex ); -- ch_free( ei ); --#endif --} -- --#define LRU_DEL( c, e ) do { \ -- if ( e == e->bei_lruprev ) { \ -- (c)->c_lruhead = (c)->c_lrutail = NULL; \ -- } else { \ -- if ( e == (c)->c_lruhead ) (c)->c_lruhead = e->bei_lruprev; \ -- if ( e == (c)->c_lrutail ) (c)->c_lrutail = e->bei_lruprev; \ -- e->bei_lrunext->bei_lruprev = e->bei_lruprev; \ -- e->bei_lruprev->bei_lrunext = e->bei_lrunext; \ -- } \ -- e->bei_lruprev = NULL; \ --} while ( 0 ) -- --/* Note - we now use a Second-Chance / Clock algorithm instead of -- * Least-Recently-Used. This tremendously improves concurrency -- * because we no longer need to manipulate the lists every time an -- * entry is touched. We only need to lock the lists when adding -- * or deleting an entry. It's now a circular doubly-linked list. -- * We always append to the tail, but the head traverses the circle -- * during a purge operation. -- */ --static void --bdb_cache_lru_link( struct bdb_info *bdb, EntryInfo *ei ) --{ -- -- /* Already linked, ignore */ -- if ( ei->bei_lruprev ) -- return; -- -- /* Insert into circular LRU list */ -- ldap_pvt_thread_mutex_lock( &bdb->bi_cache.c_lru_mutex ); -- -- ei->bei_lruprev = bdb->bi_cache.c_lrutail; -- if ( bdb->bi_cache.c_lrutail ) { -- ei->bei_lrunext = bdb->bi_cache.c_lrutail->bei_lrunext; -- bdb->bi_cache.c_lrutail->bei_lrunext = ei; -- if ( ei->bei_lrunext ) -- ei->bei_lrunext->bei_lruprev = ei; -- } else { -- ei->bei_lrunext = ei->bei_lruprev = ei; -- bdb->bi_cache.c_lruhead = ei; -- } -- bdb->bi_cache.c_lrutail = ei; -- ldap_pvt_thread_mutex_unlock( &bdb->bi_cache.c_lru_mutex ); --} -- --#ifdef NO_THREADS --#define NO_DB_LOCK --#endif -- --/* #define NO_DB_LOCK 1 */ --/* Note: The BerkeleyDB locks are much slower than regular -- * mutexes or rdwr locks. But the BDB implementation has the -- * advantage of using a fixed size lock table, instead of -- * allocating a lock object per entry in the DB. That's a -- * key benefit for scaling. It also frees us from worrying -- * about undetectable deadlocks between BDB activity and our -- * own cache activity. It's still worth exploring faster -- * alternatives though. -- */ -- --/* Atomically release and reacquire a lock */ --int --bdb_cache_entry_db_relock( -- struct bdb_info *bdb, -- DB_TXN *txn, -- EntryInfo *ei, -- int rw, -- int tryOnly, -- DB_LOCK *lock ) --{ --#ifdef NO_DB_LOCK -- return 0; --#else -- int rc; -- DBT lockobj; -- DB_LOCKREQ list[2]; -- -- if ( !lock ) return 0; -- -- DBTzero( &lockobj ); -- lockobj.data = &ei->bei_id; -- lockobj.size = sizeof(ei->bei_id) + 1; -- -- list[0].op = DB_LOCK_PUT; -- list[0].lock = *lock; -- list[1].op = DB_LOCK_GET; -- list[1].lock = *lock; -- list[1].mode = rw ? DB_LOCK_WRITE : DB_LOCK_READ; -- list[1].obj = &lockobj; -- rc = bdb->bi_dbenv->lock_vec(bdb->bi_dbenv, TXN_ID(txn), tryOnly ? DB_LOCK_NOWAIT : 0, -- list, 2, NULL ); -- -- if (rc && !tryOnly) { -- Debug( LDAP_DEBUG_TRACE, -- "bdb_cache_entry_db_relock: entry %ld, rw %d, rc %d\n", -- ei->bei_id, rw, rc ); -- } else { -- *lock = list[1].lock; -- } -- return rc; --#endif --} -- --static int --bdb_cache_entry_db_lock( struct bdb_info *bdb, DB_TXN *txn, EntryInfo *ei, -- int rw, int tryOnly, DB_LOCK *lock ) --{ --#ifdef NO_DB_LOCK -- return 0; --#else -- int rc; -- DBT lockobj; -- int db_rw; -- -- if ( !lock ) return 0; -- -- if (rw) -- db_rw = DB_LOCK_WRITE; -- else -- db_rw = DB_LOCK_READ; -- -- DBTzero( &lockobj ); -- lockobj.data = &ei->bei_id; -- lockobj.size = sizeof(ei->bei_id) + 1; -- -- rc = LOCK_GET(bdb->bi_dbenv, TXN_ID(txn), tryOnly ? DB_LOCK_NOWAIT : 0, -- &lockobj, db_rw, lock); -- if (rc && !tryOnly) { -- Debug( LDAP_DEBUG_TRACE, -- "bdb_cache_entry_db_lock: entry %ld, rw %d, rc %d\n", -- ei->bei_id, rw, rc ); -- } -- return rc; --#endif /* NO_DB_LOCK */ --} -- --int --bdb_cache_entry_db_unlock ( struct bdb_info *bdb, DB_LOCK *lock ) --{ --#ifdef NO_DB_LOCK -- return 0; --#else -- int rc; -- -- if ( !lock || lock->mode == DB_LOCK_NG ) return 0; -- -- rc = LOCK_PUT ( bdb->bi_dbenv, lock ); -- return rc; --#endif --} -- --void --bdb_cache_return_entry_rw( struct bdb_info *bdb, Entry *e, -- int rw, DB_LOCK *lock ) --{ -- EntryInfo *ei; -- int free = 0; -- -- ei = e->e_private; -- if ( ei && ( ei->bei_state & CACHE_ENTRY_NOT_CACHED )) { -- bdb_cache_entryinfo_lock( ei ); -- if ( ei->bei_state & CACHE_ENTRY_NOT_CACHED ) { -- /* Releasing the entry can only be done when -- * we know that nobody else is using it, i.e we -- * should have an entry_db writelock. But the -- * flag is only set by the thread that loads the -- * entry, and only if no other threads has found -- * it while it was working. All other threads -- * clear the flag, which mean that we should be -- * the only thread using the entry if the flag -- * is set here. -- */ -- ei->bei_e = NULL; -- ei->bei_state ^= CACHE_ENTRY_NOT_CACHED; -- free = 1; -- } -- bdb_cache_entryinfo_unlock( ei ); -- } -- bdb_cache_entry_db_unlock( bdb, lock ); -- if ( free ) { -- e->e_private = NULL; -- bdb_entry_return( e ); -- } --} -- --static int --bdb_cache_entryinfo_destroy( EntryInfo *e ) --{ -- ldap_pvt_thread_mutex_destroy( &e->bei_kids_mutex ); -- free( e->bei_nrdn.bv_val ); --#ifdef BDB_HIER -- free( e->bei_rdn.bv_val ); --#endif -- free( e ); -- return 0; --} -- --/* Do a length-ordered sort on normalized RDNs */ --static int --bdb_rdn_cmp( const void *v_e1, const void *v_e2 ) --{ -- const EntryInfo *e1 = v_e1, *e2 = v_e2; -- int rc = e1->bei_nrdn.bv_len - e2->bei_nrdn.bv_len; -- if (rc == 0) { -- rc = strncmp( e1->bei_nrdn.bv_val, e2->bei_nrdn.bv_val, -- e1->bei_nrdn.bv_len ); -- } -- return rc; --} -- --static int --bdb_id_cmp( const void *v_e1, const void *v_e2 ) --{ -- const EntryInfo *e1 = v_e1, *e2 = v_e2; -- return e1->bei_id - e2->bei_id; --} -- --static int --bdb_id_dup_err( void *v1, void *v2 ) --{ -- EntryInfo *e2 = v2; -- e2->bei_lrunext = v1; -- return -1; --} -- --/* Create an entryinfo in the cache. Caller must release the locks later. -- */ --static int --bdb_entryinfo_add_internal( -- struct bdb_info *bdb, -- EntryInfo *ei, -- EntryInfo **res ) --{ -- EntryInfo *ei2 = NULL; -- -- *res = NULL; -- -- ei2 = bdb_cache_entryinfo_new( &bdb->bi_cache ); -- -- bdb_cache_entryinfo_lock( ei->bei_parent ); -- ldap_pvt_thread_rdwr_wlock( &bdb->bi_cache.c_rwlock ); -- -- ei2->bei_id = ei->bei_id; -- ei2->bei_parent = ei->bei_parent; --#ifdef BDB_HIER -- ei2->bei_rdn = ei->bei_rdn; --#endif --#ifdef SLAP_ZONE_ALLOC -- ei2->bei_bdb = bdb; --#endif -- -- /* Add to cache ID tree */ -- if (avl_insert( &bdb->bi_cache.c_idtree, ei2, bdb_id_cmp, -- bdb_id_dup_err )) { -- EntryInfo *eix = ei2->bei_lrunext; -- bdb_cache_entryinfo_free( &bdb->bi_cache, ei2 ); -- ei2 = eix; --#ifdef BDB_HIER -- /* It got freed above because its value was -- * assigned to ei2. -- */ -- ei->bei_rdn.bv_val = NULL; --#endif -- } else { -- int rc; -- -- bdb->bi_cache.c_eiused++; -- ber_dupbv( &ei2->bei_nrdn, &ei->bei_nrdn ); -- -- /* This is a new leaf node. But if parent had no kids, then it was -- * a leaf and we would be decrementing that. So, only increment if -- * the parent already has kids. -- */ -- if ( ei->bei_parent->bei_kids || !ei->bei_parent->bei_id ) -- bdb->bi_cache.c_leaves++; -- rc = avl_insert( &ei->bei_parent->bei_kids, ei2, bdb_rdn_cmp, -- avl_dup_error ); --#ifdef BDB_HIER -- /* it's possible for hdb_cache_find_parent to beat us to it */ -- if ( !rc ) { -- ei->bei_parent->bei_ckids++; -- } --#endif -- } -- -- *res = ei2; -- return 0; --} -- --/* Find the EntryInfo for the requested DN. If the DN cannot be found, return -- * the info for its closest ancestor. *res should be NULL to process a -- * complete DN starting from the tree root. Otherwise *res must be the -- * immediate parent of the requested DN, and only the RDN will be searched. -- * The EntryInfo is locked upon return and must be unlocked by the caller. -- */ --int --bdb_cache_find_ndn( -- Operation *op, -- DB_TXN *txn, -- struct berval *ndn, -- EntryInfo **res ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- EntryInfo ei, *eip, *ei2; -- int rc = 0; -- char *ptr; -- -- /* this function is always called with normalized DN */ -- if ( *res ) { -- /* we're doing a onelevel search for an RDN */ -- ei.bei_nrdn.bv_val = ndn->bv_val; -- ei.bei_nrdn.bv_len = dn_rdnlen( op->o_bd, ndn ); -- eip = *res; -- } else { -- /* we're searching a full DN from the root */ -- ptr = ndn->bv_val + ndn->bv_len - op->o_bd->be_nsuffix[0].bv_len; -- ei.bei_nrdn.bv_val = ptr; -- ei.bei_nrdn.bv_len = op->o_bd->be_nsuffix[0].bv_len; -- /* Skip to next rdn if suffix is empty */ -- if ( ei.bei_nrdn.bv_len == 0 ) { -- for (ptr = ei.bei_nrdn.bv_val - 2; ptr > ndn->bv_val -- && !DN_SEPARATOR(*ptr); ptr--) /* empty */; -- if ( ptr >= ndn->bv_val ) { -- if (DN_SEPARATOR(*ptr)) ptr++; -- ei.bei_nrdn.bv_len = ei.bei_nrdn.bv_val - ptr; -- ei.bei_nrdn.bv_val = ptr; -- } -- } -- eip = &bdb->bi_cache.c_dntree; -- } -- -- for ( bdb_cache_entryinfo_lock( eip ); eip; ) { -- eip->bei_state |= CACHE_ENTRY_REFERENCED; -- ei.bei_parent = eip; -- ei2 = (EntryInfo *)avl_find( eip->bei_kids, &ei, bdb_rdn_cmp ); -- if ( !ei2 ) { -- DBC *cursor; -- int len = ei.bei_nrdn.bv_len; -- -- if ( BER_BVISEMPTY( ndn )) { -- *res = eip; -- return LDAP_SUCCESS; -- } -- -- ei.bei_nrdn.bv_len = ndn->bv_len - -- (ei.bei_nrdn.bv_val - ndn->bv_val); -- eip->bei_finders++; -- bdb_cache_entryinfo_unlock( eip ); -- -- BDB_LOG_PRINTF( bdb->bi_dbenv, NULL, "slapd Reading %s", -- ei.bei_nrdn.bv_val ); -- -- cursor = NULL; -- rc = bdb_dn2id( op, &ei.bei_nrdn, &ei, txn, &cursor ); -- if (rc) { -- bdb_cache_entryinfo_lock( eip ); -- eip->bei_finders--; -- if ( cursor ) cursor->c_close( cursor ); -- *res = eip; -- return rc; -- } -- -- BDB_LOG_PRINTF( bdb->bi_dbenv, NULL, "slapd Read got %s(%d)", -- ei.bei_nrdn.bv_val, ei.bei_id ); -- -- /* DN exists but needs to be added to cache */ -- ei.bei_nrdn.bv_len = len; -- rc = bdb_entryinfo_add_internal( bdb, &ei, &ei2 ); -- /* add_internal left eip and c_rwlock locked */ -- eip->bei_finders--; -- ldap_pvt_thread_rdwr_wunlock( &bdb->bi_cache.c_rwlock ); -- if ( cursor ) cursor->c_close( cursor ); -- if ( rc ) { -- *res = eip; -- return rc; -- } -- } -- bdb_cache_entryinfo_lock( ei2 ); -- if ( ei2->bei_state & CACHE_ENTRY_DELETED ) { -- /* In the midst of deleting? Give it a chance to -- * complete. -- */ -- bdb_cache_entryinfo_unlock( ei2 ); -- bdb_cache_entryinfo_unlock( eip ); -- ldap_pvt_thread_yield(); -- bdb_cache_entryinfo_lock( eip ); -- *res = eip; -- return DB_NOTFOUND; -- } -- bdb_cache_entryinfo_unlock( eip ); -- -- eip = ei2; -- -- /* Advance to next lower RDN */ -- for (ptr = ei.bei_nrdn.bv_val - 2; ptr > ndn->bv_val -- && !DN_SEPARATOR(*ptr); ptr--) /* empty */; -- if ( ptr >= ndn->bv_val ) { -- if (DN_SEPARATOR(*ptr)) ptr++; -- ei.bei_nrdn.bv_len = ei.bei_nrdn.bv_val - ptr - 1; -- ei.bei_nrdn.bv_val = ptr; -- } -- if ( ptr < ndn->bv_val ) { -- *res = eip; -- break; -- } -- } -- -- return rc; --} -- --#ifdef BDB_HIER --/* Walk up the tree from a child node, looking for an ID that's already -- * been linked into the cache. -- */ --int --hdb_cache_find_parent( -- Operation *op, -- DB_TXN *txn, -- ID id, -- EntryInfo **res ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- EntryInfo ei, eip, *ei2 = NULL, *ein = NULL, *eir = NULL; -- int rc, add; -- -- ei.bei_id = id; -- ei.bei_kids = NULL; -- ei.bei_ckids = 0; -- -- for (;;) { -- rc = hdb_dn2id_parent( op, txn, &ei, &eip.bei_id ); -- if ( rc ) break; -- -- /* Save the previous node, if any */ -- ei2 = ein; -- -- /* Create a new node for the current ID */ -- ein = bdb_cache_entryinfo_new( &bdb->bi_cache ); -- ein->bei_id = ei.bei_id; -- ein->bei_kids = ei.bei_kids; -- ein->bei_nrdn = ei.bei_nrdn; -- ein->bei_rdn = ei.bei_rdn; -- ein->bei_ckids = ei.bei_ckids; --#ifdef SLAP_ZONE_ALLOC -- ein->bei_bdb = bdb; --#endif -- ei.bei_ckids = 0; -- add = 1; -- -- /* This node is not fully connected yet */ -- ein->bei_state |= CACHE_ENTRY_NOT_LINKED; -- -- /* If this is the first time, save this node -- * to be returned later. -- */ -- if ( eir == NULL ) { -- eir = ein; -- ein->bei_finders++; -- } -- --again: -- /* Insert this node into the ID tree */ -- ldap_pvt_thread_rdwr_wlock( &bdb->bi_cache.c_rwlock ); -- if ( avl_insert( &bdb->bi_cache.c_idtree, (caddr_t)ein, -- bdb_id_cmp, bdb_id_dup_err ) ) { -- EntryInfo *eix = ein->bei_lrunext; -- -- if ( bdb_cache_entryinfo_trylock( eix )) { -- ldap_pvt_thread_rdwr_wunlock( &bdb->bi_cache.c_rwlock ); -- ldap_pvt_thread_yield(); -- goto again; -- } -- ldap_pvt_thread_rdwr_wunlock( &bdb->bi_cache.c_rwlock ); -- -- /* Someone else created this node just before us. -- * Free our new copy and use the existing one. -- */ -- bdb_cache_entryinfo_free( &bdb->bi_cache, ein ); -- -- /* if it was the node we were looking for, just return it */ -- if ( eir == ein ) { -- *res = eix; -- rc = 0; -- break; -- } -- -- ein = ei2; -- ei2 = eix; -- add = 0; -- -- /* otherwise, link up what we have and return */ -- goto gotparent; -- } -- -- /* If there was a previous node, link it to this one */ -- if ( ei2 ) ei2->bei_parent = ein; -- -- /* Look for this node's parent */ --par2: -- if ( eip.bei_id ) { -- ei2 = (EntryInfo *) avl_find( bdb->bi_cache.c_idtree, -- (caddr_t) &eip, bdb_id_cmp ); -- } else { -- ei2 = &bdb->bi_cache.c_dntree; -- } -- if ( ei2 && bdb_cache_entryinfo_trylock( ei2 )) { -- ldap_pvt_thread_rdwr_wunlock( &bdb->bi_cache.c_rwlock ); -- ldap_pvt_thread_yield(); -- ldap_pvt_thread_rdwr_wlock( &bdb->bi_cache.c_rwlock ); -- goto par2; -- } -- if ( add ) -- bdb->bi_cache.c_eiused++; -- if ( ei2 && ( ei2->bei_kids || !ei2->bei_id )) -- bdb->bi_cache.c_leaves++; -- ldap_pvt_thread_rdwr_wunlock( &bdb->bi_cache.c_rwlock ); -- --gotparent: -- /* Got the parent, link in and we're done. */ -- if ( ei2 ) { -- bdb_cache_entryinfo_lock( eir ); -- ein->bei_parent = ei2; -- -- if ( avl_insert( &ei2->bei_kids, (caddr_t)ein, bdb_rdn_cmp, -- avl_dup_error) == 0 ) -- ei2->bei_ckids++; -- -- /* Reset all the state info */ -- for (ein = eir; ein != ei2; ein=ein->bei_parent) -- ein->bei_state &= ~CACHE_ENTRY_NOT_LINKED; -- -- bdb_cache_entryinfo_unlock( ei2 ); -- eir->bei_finders--; -- -- *res = eir; -- break; -- } -- ei.bei_kids = NULL; -- ei.bei_id = eip.bei_id; -- ei.bei_ckids = 1; -- avl_insert( &ei.bei_kids, (caddr_t)ein, bdb_rdn_cmp, -- avl_dup_error ); -- } -- return rc; --} -- --/* Used by hdb_dn2idl when loading the EntryInfo for all the children -- * of a given node -- */ --int hdb_cache_load( -- struct bdb_info *bdb, -- EntryInfo *ei, -- EntryInfo **res ) --{ -- EntryInfo *ei2; -- int rc; -- -- /* See if we already have this one */ -- bdb_cache_entryinfo_lock( ei->bei_parent ); -- ei2 = (EntryInfo *)avl_find( ei->bei_parent->bei_kids, ei, bdb_rdn_cmp ); -- bdb_cache_entryinfo_unlock( ei->bei_parent ); -- -- if ( !ei2 ) { -- /* Not found, add it */ -- struct berval bv; -- -- /* bei_rdn was not malloc'd before, do it now */ -- ber_dupbv( &bv, &ei->bei_rdn ); -- ei->bei_rdn = bv; -- -- rc = bdb_entryinfo_add_internal( bdb, ei, res ); -- bdb_cache_entryinfo_unlock( ei->bei_parent ); -- ldap_pvt_thread_rdwr_wunlock( &bdb->bi_cache.c_rwlock ); -- } else { -- /* Found, return it */ -- *res = ei2; -- return 0; -- } -- return rc; --} --#endif -- --/* This is best-effort only. If all entries in the cache are -- * busy, they will all be kept. This is unlikely to happen -- * unless the cache is very much smaller than the working set. -- */ --static void --bdb_cache_lru_purge( struct bdb_info *bdb ) --{ -- DB_LOCK lock, *lockp; -- EntryInfo *elru, *elnext = NULL; -- int islocked; -- ID eicount, ecount; -- ID count, efree, eifree = 0; --#ifdef LDAP_DEBUG -- int iter; --#endif -- -- /* Wait for the mutex; we're the only one trying to purge. */ -- ldap_pvt_thread_mutex_lock( &bdb->bi_cache.c_lru_mutex ); -- -- if ( bdb->bi_cache.c_cursize > bdb->bi_cache.c_maxsize ) { -- efree = bdb->bi_cache.c_cursize - bdb->bi_cache.c_maxsize; -- efree += bdb->bi_cache.c_minfree; -- } else { -- efree = 0; -- } -- -- /* maximum number of EntryInfo leaves to cache. In slapcat -- * we always free all leaf nodes. -- */ -- -- if ( slapMode & SLAP_TOOL_READONLY ) { -- eifree = bdb->bi_cache.c_leaves; -- } else if ( bdb->bi_cache.c_eimax && -- bdb->bi_cache.c_leaves > bdb->bi_cache.c_eimax ) { -- eifree = bdb->bi_cache.c_minfree * 10; -- if ( eifree >= bdb->bi_cache.c_leaves ) -- eifree /= 2; -- } -- -- if ( !efree && !eifree ) { -- ldap_pvt_thread_mutex_unlock( &bdb->bi_cache.c_lru_mutex ); -- bdb->bi_cache.c_purging = 0; -- return; -- } -- -- if ( bdb->bi_cache.c_txn ) { -- lockp = &lock; -- } else { -- lockp = NULL; -- } -- -- count = 0; -- eicount = 0; -- ecount = 0; --#ifdef LDAP_DEBUG -- iter = 0; --#endif -- -- /* Look for an unused entry to remove */ -- for ( elru = bdb->bi_cache.c_lruhead; elru; elru = elnext ) { -- elnext = elru->bei_lrunext; -- -- if ( bdb_cache_entryinfo_trylock( elru )) -- goto bottom; -- -- /* This flag implements the clock replacement behavior */ -- if ( elru->bei_state & ( CACHE_ENTRY_REFERENCED )) { -- elru->bei_state &= ~CACHE_ENTRY_REFERENCED; -- bdb_cache_entryinfo_unlock( elru ); -- goto bottom; -- } -- -- /* If this node is in the process of linking into the cache, -- * or this node is being deleted, skip it. -- */ -- if (( elru->bei_state & ( CACHE_ENTRY_NOT_LINKED | -- CACHE_ENTRY_DELETED | CACHE_ENTRY_LOADING | -- CACHE_ENTRY_ONELEVEL )) || -- elru->bei_finders > 0 ) { -- bdb_cache_entryinfo_unlock( elru ); -- goto bottom; -- } -- -- if ( bdb_cache_entryinfo_trylock( elru->bei_parent )) { -- bdb_cache_entryinfo_unlock( elru ); -- goto bottom; -- } -- -- /* entryinfo is locked */ -- islocked = 1; -- -- /* If we can successfully writelock it, then -- * the object is idle. -- */ -- if ( bdb_cache_entry_db_lock( bdb, -- bdb->bi_cache.c_txn, elru, 1, 1, lockp ) == 0 ) { -- -- /* Free entry for this node if it's present */ -- if ( elru->bei_e ) { -- ecount++; -- -- /* the cache may have gone over the limit while we -- * weren't looking, so double check. -- */ -- if ( !efree && ecount > bdb->bi_cache.c_maxsize ) -- efree = bdb->bi_cache.c_minfree; -- -- if ( count < efree ) { -- elru->bei_e->e_private = NULL; --#ifdef SLAP_ZONE_ALLOC -- bdb_entry_return( bdb, elru->bei_e, elru->bei_zseq ); --#else -- bdb_entry_return( elru->bei_e ); --#endif -- elru->bei_e = NULL; -- count++; -- } else { -- /* Keep this node cached, skip to next */ -- bdb_cache_entry_db_unlock( bdb, lockp ); -- goto next; -- } -- } -- bdb_cache_entry_db_unlock( bdb, lockp ); -- -- /* -- * If it is a leaf node, and we're over the limit, free it. -- */ -- if ( elru->bei_kids ) { -- /* Drop from list, we ignore it... */ -- LRU_DEL( &bdb->bi_cache, elru ); -- } else if ( eicount < eifree ) { -- /* Too many leaf nodes, free this one */ -- bdb_cache_delete_internal( &bdb->bi_cache, elru, 0 ); -- bdb_cache_delete_cleanup( &bdb->bi_cache, elru ); -- islocked = 0; -- eicount++; -- } /* Leave on list until we need to free it */ -- } -- --next: -- if ( islocked ) { -- bdb_cache_entryinfo_unlock( elru ); -- bdb_cache_entryinfo_unlock( elru->bei_parent ); -- } -- -- if ( count >= efree && eicount >= eifree ) -- break; --bottom: -- if ( elnext == bdb->bi_cache.c_lruhead ) -- break; --#ifdef LDAP_DEBUG -- iter++; --#endif -- } -- -- if ( count || ecount > bdb->bi_cache.c_cursize ) { -- ldap_pvt_thread_mutex_lock( &bdb->bi_cache.c_count_mutex ); -- /* HACK: we seem to be losing track, fix up now */ -- if ( ecount > bdb->bi_cache.c_cursize ) -- bdb->bi_cache.c_cursize = ecount; -- bdb->bi_cache.c_cursize -= count; -- ldap_pvt_thread_mutex_unlock( &bdb->bi_cache.c_count_mutex ); -- } -- bdb->bi_cache.c_lruhead = elnext; -- ldap_pvt_thread_mutex_unlock( &bdb->bi_cache.c_lru_mutex ); -- bdb->bi_cache.c_purging = 0; --} -- --/* -- * cache_find_id - find an entry in the cache, given id. -- * The entry is locked for Read upon return. Call with flag ID_LOCKED if -- * the supplied *eip was already locked. -- */ -- --int --bdb_cache_find_id( -- Operation *op, -- DB_TXN *tid, -- ID id, -- EntryInfo **eip, -- int flag, -- DB_LOCK *lock ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- Entry *ep = NULL; -- int rc = 0, load = 0; -- EntryInfo ei = { 0 }; -- -- ei.bei_id = id; -- --#ifdef SLAP_ZONE_ALLOC -- slap_zh_rlock(bdb->bi_cache.c_zctx); --#endif -- /* If we weren't given any info, see if we have it already cached */ -- if ( !*eip ) { --again: ldap_pvt_thread_rdwr_rlock( &bdb->bi_cache.c_rwlock ); -- *eip = (EntryInfo *) avl_find( bdb->bi_cache.c_idtree, -- (caddr_t) &ei, bdb_id_cmp ); -- if ( *eip ) { -- /* If the lock attempt fails, the info is in use */ -- if ( bdb_cache_entryinfo_trylock( *eip )) { -- int del = (*eip)->bei_state & CACHE_ENTRY_DELETED; -- ldap_pvt_thread_rdwr_runlock( &bdb->bi_cache.c_rwlock ); -- /* If this node is being deleted, treat -- * as if the delete has already finished -- */ -- if ( del ) { -- return DB_NOTFOUND; -- } -- /* otherwise, wait for the info to free up */ -- ldap_pvt_thread_yield(); -- goto again; -- } -- /* If this info isn't hooked up to its parent yet, -- * unlock and wait for it to be fully initialized -- */ -- if ( (*eip)->bei_state & CACHE_ENTRY_NOT_LINKED ) { -- bdb_cache_entryinfo_unlock( *eip ); -- ldap_pvt_thread_rdwr_runlock( &bdb->bi_cache.c_rwlock ); -- ldap_pvt_thread_yield(); -- goto again; -- } -- flag |= ID_LOCKED; -- } -- ldap_pvt_thread_rdwr_runlock( &bdb->bi_cache.c_rwlock ); -- } -- -- /* See if the ID exists in the database; add it to the cache if so */ -- if ( !*eip ) { --#ifndef BDB_HIER -- rc = bdb_id2entry( op->o_bd, tid, id, &ep ); -- if ( rc == 0 ) { -- rc = bdb_cache_find_ndn( op, tid, -- &ep->e_nname, eip ); -- if ( *eip ) flag |= ID_LOCKED; -- if ( rc ) { -- ep->e_private = NULL; --#ifdef SLAP_ZONE_ALLOC -- bdb_entry_return( bdb, ep, (*eip)->bei_zseq ); --#else -- bdb_entry_return( ep ); --#endif -- ep = NULL; -- } -- } --#else -- rc = hdb_cache_find_parent(op, tid, id, eip ); -- if ( rc == 0 ) flag |= ID_LOCKED; --#endif -- } -- -- /* Ok, we found the info, do we have the entry? */ -- if ( rc == 0 ) { -- if ( !( flag & ID_LOCKED )) { -- bdb_cache_entryinfo_lock( *eip ); -- flag |= ID_LOCKED; -- } -- -- if ( (*eip)->bei_state & CACHE_ENTRY_DELETED ) { -- rc = DB_NOTFOUND; -- } else { -- (*eip)->bei_finders++; -- (*eip)->bei_state |= CACHE_ENTRY_REFERENCED; -- if ( flag & ID_NOENTRY ) { -- bdb_cache_entryinfo_unlock( *eip ); -- return 0; -- } -- /* Make sure only one thread tries to load the entry */ --load1: --#ifdef SLAP_ZONE_ALLOC -- if ((*eip)->bei_e && !slap_zn_validate( -- bdb->bi_cache.c_zctx, (*eip)->bei_e, (*eip)->bei_zseq)) { -- (*eip)->bei_e = NULL; -- (*eip)->bei_zseq = 0; -- } --#endif -- if ( !(*eip)->bei_e && !((*eip)->bei_state & CACHE_ENTRY_LOADING)) { -- load = 1; -- (*eip)->bei_state |= CACHE_ENTRY_LOADING; -- flag |= ID_CHKPURGE; -- } -- -- if ( !load ) { -- /* Clear the uncached state if we are not -- * loading it, i.e it is already cached or -- * another thread is currently loading it. -- */ -- if ( (*eip)->bei_state & CACHE_ENTRY_NOT_CACHED ) { -- (*eip)->bei_state ^= CACHE_ENTRY_NOT_CACHED; -- flag |= ID_CHKPURGE; -- } -- } -- -- if ( flag & ID_LOCKED ) { -- bdb_cache_entryinfo_unlock( *eip ); -- flag ^= ID_LOCKED; -- } -- rc = bdb_cache_entry_db_lock( bdb, tid, *eip, load, 0, lock ); -- if ( (*eip)->bei_state & CACHE_ENTRY_DELETED ) { -- rc = DB_NOTFOUND; -- bdb_cache_entry_db_unlock( bdb, lock ); -- bdb_cache_entryinfo_lock( *eip ); -- (*eip)->bei_finders--; -- bdb_cache_entryinfo_unlock( *eip ); -- } else if ( rc == 0 ) { -- if ( load ) { -- if ( !ep) { -- rc = bdb_id2entry( op->o_bd, tid, id, &ep ); -- } -- if ( rc == 0 ) { -- ep->e_private = *eip; --#ifdef BDB_HIER -- while ( (*eip)->bei_state & CACHE_ENTRY_NOT_LINKED ) -- ldap_pvt_thread_yield(); -- bdb_fix_dn( ep, 0 ); --#endif -- bdb_cache_entryinfo_lock( *eip ); -- -- (*eip)->bei_e = ep; --#ifdef SLAP_ZONE_ALLOC -- (*eip)->bei_zseq = *((ber_len_t *)ep - 2); --#endif -- ep = NULL; -- if ( flag & ID_NOCACHE ) { -- /* Set the cached state only if no other thread -- * found the info while we were loading the entry. -- */ -- if ( (*eip)->bei_finders == 1 ) { -- (*eip)->bei_state |= CACHE_ENTRY_NOT_CACHED; -- flag ^= ID_CHKPURGE; -- } -- } -- bdb_cache_entryinfo_unlock( *eip ); -- bdb_cache_lru_link( bdb, *eip ); -- } -- if ( rc == 0 ) { -- /* If we succeeded, downgrade back to a readlock. */ -- rc = bdb_cache_entry_db_relock( bdb, tid, -- *eip, 0, 0, lock ); -- } else { -- /* Otherwise, release the lock. */ -- bdb_cache_entry_db_unlock( bdb, lock ); -- } -- } else if ( !(*eip)->bei_e ) { -- /* Some other thread is trying to load the entry, -- * wait for it to finish. -- */ -- bdb_cache_entry_db_unlock( bdb, lock ); -- bdb_cache_entryinfo_lock( *eip ); -- flag |= ID_LOCKED; -- goto load1; --#ifdef BDB_HIER -- } else { -- /* Check for subtree renames -- */ -- rc = bdb_fix_dn( (*eip)->bei_e, 1 ); -- if ( rc ) { -- bdb_cache_entry_db_relock( bdb, -- tid, *eip, 1, 0, lock ); -- /* check again in case other modifier did it already */ -- if ( bdb_fix_dn( (*eip)->bei_e, 1 ) ) -- rc = bdb_fix_dn( (*eip)->bei_e, 2 ); -- bdb_cache_entry_db_relock( bdb, -- tid, *eip, 0, 0, lock ); -- } --#endif -- } -- bdb_cache_entryinfo_lock( *eip ); -- (*eip)->bei_finders--; -- if ( load ) -- (*eip)->bei_state ^= CACHE_ENTRY_LOADING; -- bdb_cache_entryinfo_unlock( *eip ); -- } -- } -- } -- if ( flag & ID_LOCKED ) { -- bdb_cache_entryinfo_unlock( *eip ); -- } -- if ( ep ) { -- ep->e_private = NULL; --#ifdef SLAP_ZONE_ALLOC -- bdb_entry_return( bdb, ep, (*eip)->bei_zseq ); --#else -- bdb_entry_return( ep ); --#endif -- } -- if ( rc == 0 ) { -- int purge = 0; -- -- if (( flag & ID_CHKPURGE ) || bdb->bi_cache.c_eimax ) { -- ldap_pvt_thread_mutex_lock( &bdb->bi_cache.c_count_mutex ); -- if ( flag & ID_CHKPURGE ) { -- bdb->bi_cache.c_cursize++; -- if ( !bdb->bi_cache.c_purging && bdb->bi_cache.c_cursize > bdb->bi_cache.c_maxsize ) { -- purge = 1; -- bdb->bi_cache.c_purging = 1; -- } -- } else if ( !bdb->bi_cache.c_purging && bdb->bi_cache.c_eimax && bdb->bi_cache.c_leaves > bdb->bi_cache.c_eimax ) { -- purge = 1; -- bdb->bi_cache.c_purging = 1; -- } -- ldap_pvt_thread_mutex_unlock( &bdb->bi_cache.c_count_mutex ); -- } -- if ( purge ) -- bdb_cache_lru_purge( bdb ); -- } -- --#ifdef SLAP_ZONE_ALLOC -- if (rc == 0 && (*eip)->bei_e) { -- slap_zn_rlock(bdb->bi_cache.c_zctx, (*eip)->bei_e); -- } -- slap_zh_runlock(bdb->bi_cache.c_zctx); --#endif -- return rc; --} -- --int --bdb_cache_children( -- Operation *op, -- DB_TXN *txn, -- Entry *e ) --{ -- int rc; -- -- if ( BEI(e)->bei_kids ) { -- return 0; -- } -- if ( BEI(e)->bei_state & CACHE_ENTRY_NO_KIDS ) { -- return DB_NOTFOUND; -- } -- rc = bdb_dn2id_children( op, txn, e ); -- if ( rc == DB_NOTFOUND ) { -- BEI(e)->bei_state |= CACHE_ENTRY_NO_KIDS | CACHE_ENTRY_NO_GRANDKIDS; -- } -- return rc; --} -- --/* Update the cache after a successful database Add. */ --int --bdb_cache_add( -- struct bdb_info *bdb, -- EntryInfo *eip, -- Entry *e, -- struct berval *nrdn, -- DB_TXN *txn, -- DB_LOCK *lock ) --{ -- EntryInfo *new, ei; -- int rc, purge = 0; --#ifdef BDB_HIER -- struct berval rdn = e->e_name; --#endif -- -- ei.bei_id = e->e_id; -- ei.bei_parent = eip; -- ei.bei_nrdn = *nrdn; -- ei.bei_lockpad = 0; -- --#if 0 -- /* Lock this entry so that bdb_add can run to completion. -- * It can only fail if BDB has run out of lock resources. -- */ -- rc = bdb_cache_entry_db_lock( bdb, txn, &ei, 0, 0, lock ); -- if ( rc ) { -- bdb_cache_entryinfo_unlock( eip ); -- return rc; -- } --#endif -- --#ifdef BDB_HIER -- if ( nrdn->bv_len != e->e_nname.bv_len ) { -- char *ptr = ber_bvchr( &rdn, ',' ); -- assert( ptr != NULL ); -- rdn.bv_len = ptr - rdn.bv_val; -- } -- ber_dupbv( &ei.bei_rdn, &rdn ); -- if ( eip->bei_dkids ) eip->bei_dkids++; --#endif -- -- if (eip->bei_parent) { -- bdb_cache_entryinfo_lock( eip->bei_parent ); -- eip->bei_parent->bei_state &= ~CACHE_ENTRY_NO_GRANDKIDS; -- bdb_cache_entryinfo_unlock( eip->bei_parent ); -- } -- -- rc = bdb_entryinfo_add_internal( bdb, &ei, &new ); -- /* bdb_csn_commit can cause this when adding the database root entry */ -- if ( new->bei_e ) { -- new->bei_e->e_private = NULL; --#ifdef SLAP_ZONE_ALLOC -- bdb_entry_return( bdb, new->bei_e, new->bei_zseq ); --#else -- bdb_entry_return( new->bei_e ); --#endif -- } -- new->bei_e = e; -- e->e_private = new; -- new->bei_state |= CACHE_ENTRY_NO_KIDS | CACHE_ENTRY_NO_GRANDKIDS; -- eip->bei_state &= ~CACHE_ENTRY_NO_KIDS; -- bdb_cache_entryinfo_unlock( eip ); -- -- ldap_pvt_thread_rdwr_wunlock( &bdb->bi_cache.c_rwlock ); -- ldap_pvt_thread_mutex_lock( &bdb->bi_cache.c_count_mutex ); -- ++bdb->bi_cache.c_cursize; -- if ( bdb->bi_cache.c_cursize > bdb->bi_cache.c_maxsize && -- !bdb->bi_cache.c_purging ) { -- purge = 1; -- bdb->bi_cache.c_purging = 1; -- } -- ldap_pvt_thread_mutex_unlock( &bdb->bi_cache.c_count_mutex ); -- -- new->bei_finders = 1; -- bdb_cache_lru_link( bdb, new ); -- -- if ( purge ) -- bdb_cache_lru_purge( bdb ); -- -- return rc; --} -- --void bdb_cache_deref( -- EntryInfo *ei -- ) --{ -- bdb_cache_entryinfo_lock( ei ); -- ei->bei_finders--; -- bdb_cache_entryinfo_unlock( ei ); --} -- --int --bdb_cache_modify( -- struct bdb_info *bdb, -- Entry *e, -- Attribute *newAttrs, -- DB_TXN *txn, -- DB_LOCK *lock ) --{ -- EntryInfo *ei = BEI(e); -- int rc; -- /* Get write lock on data */ -- rc = bdb_cache_entry_db_relock( bdb, txn, ei, 1, 0, lock ); -- -- /* If we've done repeated mods on a cached entry, then e_attrs -- * is no longer contiguous with the entry, and must be freed. -- */ -- if ( ! rc ) { -- if ( (void *)e->e_attrs != (void *)(e+1) ) { -- attrs_free( e->e_attrs ); -- } -- e->e_attrs = newAttrs; -- } -- return rc; --} -- --/* -- * Change the rdn in the entryinfo. Also move to a new parent if needed. -- */ --int --bdb_cache_modrdn( -- struct bdb_info *bdb, -- Entry *e, -- struct berval *nrdn, -- Entry *new, -- EntryInfo *ein, -- DB_TXN *txn, -- DB_LOCK *lock ) --{ -- EntryInfo *ei = BEI(e), *pei; -- int rc; --#ifdef BDB_HIER -- struct berval rdn; --#endif -- -- /* Get write lock on data */ -- rc = bdb_cache_entry_db_relock( bdb, txn, ei, 1, 0, lock ); -- if ( rc ) return rc; -- -- /* If we've done repeated mods on a cached entry, then e_attrs -- * is no longer contiguous with the entry, and must be freed. -- */ -- if ( (void *)e->e_attrs != (void *)(e+1) ) { -- attrs_free( e->e_attrs ); -- } -- e->e_attrs = new->e_attrs; -- if( e->e_nname.bv_val < e->e_bv.bv_val || -- e->e_nname.bv_val > e->e_bv.bv_val + e->e_bv.bv_len ) -- { -- ch_free(e->e_name.bv_val); -- ch_free(e->e_nname.bv_val); -- } -- e->e_name = new->e_name; -- e->e_nname = new->e_nname; -- -- /* Lock the parent's kids AVL tree */ -- pei = ei->bei_parent; -- bdb_cache_entryinfo_lock( pei ); -- avl_delete( &pei->bei_kids, (caddr_t) ei, bdb_rdn_cmp ); -- free( ei->bei_nrdn.bv_val ); -- ber_dupbv( &ei->bei_nrdn, nrdn ); -- --#ifdef BDB_HIER -- free( ei->bei_rdn.bv_val ); -- -- rdn = e->e_name; -- if ( nrdn->bv_len != e->e_nname.bv_len ) { -- char *ptr = ber_bvchr(&rdn, ','); -- assert( ptr != NULL ); -- rdn.bv_len = ptr - rdn.bv_val; -- } -- ber_dupbv( &ei->bei_rdn, &rdn ); -- -- /* If new parent, decrement kid counts */ -- if ( ein ) { -- pei->bei_ckids--; -- if ( pei->bei_dkids ) { -- pei->bei_dkids--; -- if ( pei->bei_dkids < 2 ) -- pei->bei_state |= CACHE_ENTRY_NO_KIDS | CACHE_ENTRY_NO_GRANDKIDS; -- } -- } --#endif -- -- if (!ein) { -- ein = ei->bei_parent; -- } else { -- ei->bei_parent = ein; -- bdb_cache_entryinfo_unlock( pei ); -- bdb_cache_entryinfo_lock( ein ); -- -- /* new parent now has kids */ -- if ( ein->bei_state & CACHE_ENTRY_NO_KIDS ) -- ein->bei_state ^= CACHE_ENTRY_NO_KIDS; -- /* grandparent has grandkids */ -- if ( ein->bei_parent ) -- ein->bei_parent->bei_state &= ~CACHE_ENTRY_NO_GRANDKIDS; --#ifdef BDB_HIER -- /* parent might now have grandkids */ -- if ( ein->bei_state & CACHE_ENTRY_NO_GRANDKIDS && -- !(ei->bei_state & CACHE_ENTRY_NO_KIDS)) -- ein->bei_state ^= CACHE_ENTRY_NO_GRANDKIDS; -- -- ein->bei_ckids++; -- if ( ein->bei_dkids ) ein->bei_dkids++; --#endif -- } -- --#ifdef BDB_HIER -- /* Record the generation number of this change */ -- ldap_pvt_thread_mutex_lock( &bdb->bi_modrdns_mutex ); -- bdb->bi_modrdns++; -- ei->bei_modrdns = bdb->bi_modrdns; -- ldap_pvt_thread_mutex_unlock( &bdb->bi_modrdns_mutex ); --#endif -- -- avl_insert( &ein->bei_kids, ei, bdb_rdn_cmp, avl_dup_error ); -- bdb_cache_entryinfo_unlock( ein ); -- return rc; --} --/* -- * cache_delete - delete the entry e from the cache. -- * -- * returns: 0 e was deleted ok -- * 1 e was not in the cache -- * -1 something bad happened -- */ --int --bdb_cache_delete( -- struct bdb_info *bdb, -- Entry *e, -- DB_TXN *txn, -- DB_LOCK *lock ) --{ -- EntryInfo *ei = BEI(e); -- int rc, busy = 0, counter = 0; -- -- assert( e->e_private != NULL ); -- -- /* Lock the entry's info */ -- bdb_cache_entryinfo_lock( ei ); -- -- /* Set this early, warn off any queriers */ -- ei->bei_state |= CACHE_ENTRY_DELETED; -- -- if (( ei->bei_state & ( CACHE_ENTRY_NOT_LINKED | -- CACHE_ENTRY_LOADING | CACHE_ENTRY_ONELEVEL )) || -- ei->bei_finders > 0 ) -- busy = 1; -- -- bdb_cache_entryinfo_unlock( ei ); -- -- while ( busy && counter < 1000) { -- ldap_pvt_thread_yield(); -- busy = 0; -- bdb_cache_entryinfo_lock( ei ); -- if (( ei->bei_state & ( CACHE_ENTRY_NOT_LINKED | -- CACHE_ENTRY_LOADING | CACHE_ENTRY_ONELEVEL )) || -- ei->bei_finders > 0 ) -- busy = 1; -- bdb_cache_entryinfo_unlock( ei ); -- counter ++; -- } -- if( busy ) { -- bdb_cache_entryinfo_lock( ei ); -- ei->bei_state ^= CACHE_ENTRY_DELETED; -- bdb_cache_entryinfo_unlock( ei ); -- return DB_LOCK_DEADLOCK; -- } -- -- /* Get write lock on the data */ -- rc = bdb_cache_entry_db_relock( bdb, txn, ei, 1, 0, lock ); -- if ( rc ) { -- bdb_cache_entryinfo_lock( ei ); -- /* couldn't lock, undo and give up */ -- ei->bei_state ^= CACHE_ENTRY_DELETED; -- bdb_cache_entryinfo_unlock( ei ); -- return rc; -- } -- -- Debug( LDAP_DEBUG_TRACE, "====> bdb_cache_delete( %ld )\n", -- e->e_id, 0, 0 ); -- -- /* set lru mutex */ -- ldap_pvt_thread_mutex_lock( &bdb->bi_cache.c_lru_mutex ); -- -- bdb_cache_entryinfo_lock( ei->bei_parent ); -- bdb_cache_entryinfo_lock( ei ); -- rc = bdb_cache_delete_internal( &bdb->bi_cache, e->e_private, 1 ); -- bdb_cache_entryinfo_unlock( ei ); -- -- /* free lru mutex */ -- ldap_pvt_thread_mutex_unlock( &bdb->bi_cache.c_lru_mutex ); -- -- return( rc ); --} -- --void --bdb_cache_delete_cleanup( -- Cache *cache, -- EntryInfo *ei ) --{ -- /* Enter with ei locked */ -- -- /* already freed? */ -- if ( !ei->bei_parent ) return; -- -- if ( ei->bei_e ) { -- ei->bei_e->e_private = NULL; --#ifdef SLAP_ZONE_ALLOC -- bdb_entry_return( ei->bei_bdb, ei->bei_e, ei->bei_zseq ); --#else -- bdb_entry_return( ei->bei_e ); --#endif -- ei->bei_e = NULL; -- } -- -- bdb_cache_entryinfo_unlock( ei ); -- bdb_cache_entryinfo_free( cache, ei ); --} -- --static int --bdb_cache_delete_internal( -- Cache *cache, -- EntryInfo *e, -- int decr ) --{ -- int rc = 0; /* return code */ -- int decr_leaf = 0; -- -- /* already freed? */ -- if ( !e->bei_parent ) { -- assert(0); -- return -1; -- } -- --#ifdef BDB_HIER -- e->bei_parent->bei_ckids--; -- if ( decr && e->bei_parent->bei_dkids ) e->bei_parent->bei_dkids--; --#endif -- /* dn tree */ -- if ( avl_delete( &e->bei_parent->bei_kids, (caddr_t) e, bdb_rdn_cmp ) -- == NULL ) -- { -- rc = -1; -- assert(0); -- } -- if ( e->bei_parent->bei_kids ) -- decr_leaf = 1; -- -- ldap_pvt_thread_rdwr_wlock( &cache->c_rwlock ); -- /* id tree */ -- if ( avl_delete( &cache->c_idtree, (caddr_t) e, bdb_id_cmp )) { -- cache->c_eiused--; -- if ( decr_leaf ) -- cache->c_leaves--; -- } else { -- rc = -1; -- assert(0); -- } -- ldap_pvt_thread_rdwr_wunlock( &cache->c_rwlock ); -- bdb_cache_entryinfo_unlock( e->bei_parent ); -- -- if ( rc == 0 ){ -- /* lru */ -- LRU_DEL( cache, e ); -- -- if ( e->bei_e ) { -- ldap_pvt_thread_mutex_lock( &cache->c_count_mutex ); -- cache->c_cursize--; -- ldap_pvt_thread_mutex_unlock( &cache->c_count_mutex ); -- } -- } -- -- return( rc ); --} -- --static void --bdb_entryinfo_release( void *data ) --{ -- EntryInfo *ei = (EntryInfo *)data; -- if ( ei->bei_kids ) { -- avl_free( ei->bei_kids, NULL ); -- } -- if ( ei->bei_e ) { -- ei->bei_e->e_private = NULL; --#ifdef SLAP_ZONE_ALLOC -- bdb_entry_return( ei->bei_bdb, ei->bei_e, ei->bei_zseq ); --#else -- bdb_entry_return( ei->bei_e ); --#endif -- } -- bdb_cache_entryinfo_destroy( ei ); --} -- --void --bdb_cache_release_all( Cache *cache ) --{ -- /* set cache write lock */ -- ldap_pvt_thread_rdwr_wlock( &cache->c_rwlock ); -- /* set lru mutex */ -- ldap_pvt_thread_mutex_lock( &cache->c_lru_mutex ); -- -- Debug( LDAP_DEBUG_TRACE, "====> bdb_cache_release_all\n", 0, 0, 0 ); -- -- avl_free( cache->c_dntree.bei_kids, NULL ); -- avl_free( cache->c_idtree, bdb_entryinfo_release ); -- for (;cache->c_eifree;cache->c_eifree = cache->c_lruhead) { -- cache->c_lruhead = cache->c_eifree->bei_lrunext; -- bdb_cache_entryinfo_destroy(cache->c_eifree); -- } -- cache->c_cursize = 0; -- cache->c_eiused = 0; -- cache->c_leaves = 0; -- cache->c_idtree = NULL; -- cache->c_lruhead = NULL; -- cache->c_lrutail = NULL; -- cache->c_dntree.bei_kids = NULL; -- -- /* free lru mutex */ -- ldap_pvt_thread_mutex_unlock( &cache->c_lru_mutex ); -- /* free cache write lock */ -- ldap_pvt_thread_rdwr_wunlock( &cache->c_rwlock ); --} -- --#ifdef LDAP_DEBUG --static void --bdb_lru_count( Cache *cache ) --{ -- EntryInfo *e; -- int ei = 0, ent = 0, nc = 0; -- -- for ( e = cache->c_lrutail; ; ) { -- ei++; -- if ( e->bei_e ) { -- ent++; -- if ( e->bei_state & CACHE_ENTRY_NOT_CACHED ) -- nc++; -- fprintf( stderr, "ei %d entry %p dn %s\n", ei, (void *) e->bei_e, e->bei_e->e_name.bv_val ); -- } -- e = e->bei_lrunext; -- if ( e == cache->c_lrutail ) -- break; -- } -- fprintf( stderr, "counted %d entryInfos and %d entries, %d notcached\n", -- ei, ent, nc ); -- ei = 0; -- for ( e = cache->c_lrutail; ; ) { -- ei++; -- e = e->bei_lruprev; -- if ( e == cache->c_lrutail ) -- break; -- } -- fprintf( stderr, "counted %d entryInfos (on lruprev)\n", ei ); --} -- --#ifdef SLAPD_UNUSED --static void --bdb_lru_print( Cache *cache ) --{ -- EntryInfo *e; -- -- fprintf( stderr, "LRU circle head: %p\n", (void *) cache->c_lruhead ); -- fprintf( stderr, "LRU circle (tail forward):\n" ); -- for ( e = cache->c_lrutail; ; ) { -- fprintf( stderr, "\t%p, %p id %ld rdn \"%s\"\n", -- (void *) e, (void *) e->bei_e, e->bei_id, e->bei_nrdn.bv_val ); -- e = e->bei_lrunext; -- if ( e == cache->c_lrutail ) -- break; -- } -- fprintf( stderr, "LRU circle (tail backward):\n" ); -- for ( e = cache->c_lrutail; ; ) { -- fprintf( stderr, "\t%p, %p id %ld rdn \"%s\"\n", -- (void *) e, (void *) e->bei_e, e->bei_id, e->bei_nrdn.bv_val ); -- e = e->bei_lruprev; -- if ( e == cache->c_lrutail ) -- break; -- } --} -- --static int --bdb_entryinfo_print(void *data, void *arg) --{ -- EntryInfo *e = data; -- fprintf( stderr, "\t%p, %p id %ld rdn \"%s\"\n", -- (void *) e, (void *) e->bei_e, e->bei_id, e->bei_nrdn.bv_val ); -- return 0; --} -- --static void --bdb_idtree_print(Cache *cache) --{ -- avl_apply( cache->c_idtree, bdb_entryinfo_print, NULL, -1, AVL_INORDER ); --} --#endif --#endif -- --static void --bdb_reader_free( void *key, void *data ) --{ -- /* DB_ENV *env = key; */ -- DB_TXN *txn = data; -- -- if ( txn ) TXN_ABORT( txn ); --} -- --/* free up any keys used by the main thread */ --void --bdb_reader_flush( DB_ENV *env ) --{ -- void *data; -- void *ctx = ldap_pvt_thread_pool_context(); -- -- if ( !ldap_pvt_thread_pool_getkey( ctx, env, &data, NULL ) ) { -- ldap_pvt_thread_pool_setkey( ctx, env, NULL, 0, NULL, NULL ); -- bdb_reader_free( env, data ); -- } --} -- --int --bdb_reader_get( Operation *op, DB_ENV *env, DB_TXN **txn ) --{ -- int i, rc; -- void *data; -- void *ctx; -- -- if ( !env || !txn ) return -1; -- -- /* If no op was provided, try to find the ctx anyway... */ -- if ( op ) { -- ctx = op->o_threadctx; -- } else { -- ctx = ldap_pvt_thread_pool_context(); -- } -- -- /* Shouldn't happen unless we're single-threaded */ -- if ( !ctx ) { -- *txn = NULL; -- return 0; -- } -- -- if ( ldap_pvt_thread_pool_getkey( ctx, env, &data, NULL ) ) { -- for ( i=0, rc=1; rc != 0 && i<4; i++ ) { -- rc = TXN_BEGIN( env, NULL, txn, DB_READ_COMMITTED ); -- if (rc) ldap_pvt_thread_yield(); -- } -- if ( rc != 0) { -- return rc; -- } -- data = *txn; -- if ( ( rc = ldap_pvt_thread_pool_setkey( ctx, env, -- data, bdb_reader_free, NULL, NULL ) ) ) { -- TXN_ABORT( *txn ); -- Debug( LDAP_DEBUG_ANY, "bdb_reader_get: err %s(%d)\n", -- db_strerror(rc), rc, 0 ); -- -- return rc; -- } -- } else { -- *txn = data; -- } -- return 0; --} -diff --git a/servers/slapd/back-bdb/compare.c b/servers/slapd/back-bdb/compare.c -deleted file mode 100644 -index 4d7d45f..0000000 ---- a/servers/slapd/back-bdb/compare.c -+++ /dev/null -@@ -1,143 +0,0 @@ --/* compare.c - bdb backend compare routine */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include --#include -- --#include "back-bdb.h" -- --int --bdb_compare( Operation *op, SlapReply *rs ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- Entry *e = NULL; -- EntryInfo *ei; -- int manageDSAit = get_manageDSAit( op ); -- -- DB_TXN *rtxn; -- DB_LOCK lock; -- -- rs->sr_err = bdb_reader_get(op, bdb->bi_dbenv, &rtxn); -- switch(rs->sr_err) { -- case 0: -- break; -- default: -- send_ldap_error( op, rs, LDAP_OTHER, "internal error" ); -- return rs->sr_err; -- } -- --dn2entry_retry: -- /* get entry */ -- rs->sr_err = bdb_dn2entry( op, rtxn, &op->o_req_ndn, &ei, 1, -- &lock ); -- -- switch( rs->sr_err ) { -- case DB_NOTFOUND: -- case 0: -- break; -- case LDAP_BUSY: -- rs->sr_text = "ldap server busy"; -- goto return_results; -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto dn2entry_retry; -- default: -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- -- e = ei->bei_e; -- if ( rs->sr_err == DB_NOTFOUND ) { -- if ( e != NULL ) { -- /* return referral only if "disclose" is granted on the object */ -- if ( ! access_allowed( op, e, slap_schema.si_ad_entry, -- NULL, ACL_DISCLOSE, NULL ) ) -- { -- rs->sr_err = LDAP_NO_SUCH_OBJECT; -- -- } else { -- rs->sr_matched = ch_strdup( e->e_dn ); -- rs->sr_ref = is_entry_referral( e ) -- ? get_entry_referrals( op, e ) -- : NULL; -- rs->sr_err = LDAP_REFERRAL; -- } -- -- bdb_cache_return_entry_r( bdb, e, &lock ); -- e = NULL; -- -- } else { -- rs->sr_ref = referral_rewrite( default_referral, -- NULL, &op->o_req_dn, LDAP_SCOPE_DEFAULT ); -- rs->sr_err = rs->sr_ref ? LDAP_REFERRAL : LDAP_NO_SUCH_OBJECT; -- } -- -- send_ldap_result( op, rs ); -- -- ber_bvarray_free( rs->sr_ref ); -- free( (char *)rs->sr_matched ); -- rs->sr_ref = NULL; -- rs->sr_matched = NULL; -- -- goto done; -- } -- -- if (!manageDSAit && is_entry_referral( e ) ) { -- /* return referral only if "disclose" is granted on the object */ -- if ( !access_allowed( op, e, slap_schema.si_ad_entry, -- NULL, ACL_DISCLOSE, NULL ) ) -- { -- rs->sr_err = LDAP_NO_SUCH_OBJECT; -- } else { -- /* entry is a referral, don't allow compare */ -- rs->sr_ref = get_entry_referrals( op, e ); -- rs->sr_err = LDAP_REFERRAL; -- rs->sr_matched = e->e_name.bv_val; -- } -- -- Debug( LDAP_DEBUG_TRACE, "entry is referral\n", 0, 0, 0 ); -- -- send_ldap_result( op, rs ); -- -- ber_bvarray_free( rs->sr_ref ); -- rs->sr_ref = NULL; -- rs->sr_matched = NULL; -- goto done; -- } -- -- rs->sr_err = slap_compare_entry( op, e, op->orc_ava ); -- --return_results: -- send_ldap_result( op, rs ); -- -- switch ( rs->sr_err ) { -- case LDAP_COMPARE_FALSE: -- case LDAP_COMPARE_TRUE: -- rs->sr_err = LDAP_SUCCESS; -- break; -- } -- --done: -- /* free entry */ -- if ( e != NULL ) { -- bdb_cache_return_entry_r( bdb, e, &lock ); -- } -- -- return rs->sr_err; --} -diff --git a/servers/slapd/back-bdb/config.c b/servers/slapd/back-bdb/config.c -deleted file mode 100644 -index c3c8315..0000000 ---- a/servers/slapd/back-bdb/config.c -+++ /dev/null -@@ -1,951 +0,0 @@ --/* config.c - bdb backend configuration file routine */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include --#include --#include --#include -- --#include "back-bdb.h" -- --#include "config.h" -- --#include "lutil.h" --#include "ldap_rq.h" -- --#ifdef DB_DIRTY_READ --# define SLAP_BDB_ALLOW_DIRTY_READ --#endif -- --#define bdb_cf_gen BDB_SYMBOL(cf_gen) --#define bdb_cf_cleanup BDB_SYMBOL(cf_cleanup) --#define bdb_checkpoint BDB_SYMBOL(checkpoint) --#define bdb_online_index BDB_SYMBOL(online_index) -- --static ConfigDriver bdb_cf_gen; -- --enum { -- BDB_CHKPT = 1, -- BDB_CONFIG, -- BDB_CRYPTFILE, -- BDB_CRYPTKEY, -- BDB_DIRECTORY, -- BDB_NOSYNC, -- BDB_DIRTYR, -- BDB_INDEX, -- BDB_LOCKD, -- BDB_SSTACK, -- BDB_MODE, -- BDB_PGSIZE, -- BDB_CHECKSUM --}; -- --static ConfigTable bdbcfg[] = { -- { "directory", "dir", 2, 2, 0, ARG_STRING|ARG_MAGIC|BDB_DIRECTORY, -- bdb_cf_gen, "( OLcfgDbAt:0.1 NAME 'olcDbDirectory' " -- "DESC 'Directory for database content' " -- "EQUALITY caseIgnoreMatch " -- "SYNTAX OMsDirectoryString SINGLE-VALUE )", NULL, NULL }, -- { "cachefree", "size", 2, 2, 0, ARG_ULONG|ARG_OFFSET, -- (void *)offsetof(struct bdb_info, bi_cache.c_minfree), -- "( OLcfgDbAt:1.11 NAME 'olcDbCacheFree' " -- "DESC 'Number of extra entries to free when max is reached' " -- "SYNTAX OMsInteger SINGLE-VALUE )", NULL, NULL }, -- { "cachesize", "size", 2, 2, 0, ARG_ULONG|ARG_OFFSET, -- (void *)offsetof(struct bdb_info, bi_cache.c_maxsize), -- "( OLcfgDbAt:1.1 NAME 'olcDbCacheSize' " -- "DESC 'Entry cache size in entries' " -- "SYNTAX OMsInteger SINGLE-VALUE )", NULL, NULL }, -- { "checkpoint", "kbyte> <[pres,eq,approx,sub]", 2, 3, 0, ARG_MAGIC|BDB_INDEX, -- bdb_cf_gen, "( OLcfgDbAt:0.2 NAME 'olcDbIndex' " -- "DESC 'Attribute index parameters' " -- "EQUALITY caseIgnoreMatch " -- "SYNTAX OMsDirectoryString )", NULL, NULL }, -- { "linearindex", NULL, 1, 2, 0, ARG_ON_OFF|ARG_OFFSET, -- (void *)offsetof(struct bdb_info, bi_linear_index), -- "( OLcfgDbAt:1.7 NAME 'olcDbLinearIndex' " -- "DESC 'Index attributes one at a time' " -- "SYNTAX OMsBoolean SINGLE-VALUE )", NULL, NULL }, -- { "lockdetect", "policy", 2, 2, 0, ARG_MAGIC|BDB_LOCKD, -- bdb_cf_gen, "( OLcfgDbAt:1.8 NAME 'olcDbLockDetect' " -- "DESC 'Deadlock detection algorithm' " -- "SYNTAX OMsDirectoryString SINGLE-VALUE )", NULL, NULL }, -- { "mode", "mode", 2, 2, 0, ARG_MAGIC|BDB_MODE, -- bdb_cf_gen, "( OLcfgDbAt:0.3 NAME 'olcDbMode' " -- "DESC 'Unix permissions of database files' " -- "SYNTAX OMsDirectoryString SINGLE-VALUE )", NULL, NULL }, -- { "searchstack", "depth", 2, 2, 0, ARG_INT|ARG_MAGIC|BDB_SSTACK, -- bdb_cf_gen, "( OLcfgDbAt:1.9 NAME 'olcDbSearchStack' " -- "DESC 'Depth of search stack in IDLs' " -- "SYNTAX OMsInteger SINGLE-VALUE )", NULL, NULL }, -- { "shm_key", "key", 2, 2, 0, ARG_LONG|ARG_OFFSET, -- (void *)offsetof(struct bdb_info, bi_shm_key), -- "( OLcfgDbAt:1.10 NAME 'olcDbShmKey' " -- "DESC 'Key for shared memory region' " -- "SYNTAX OMsInteger SINGLE-VALUE )", NULL, NULL }, -- { NULL, NULL, 0, 0, 0, ARG_IGNORED, -- NULL, NULL, NULL, NULL } --}; -- --static ConfigOCs bdbocs[] = { -- { --#ifdef BDB_HIER -- "( OLcfgDbOc:1.2 " -- "NAME 'olcHdbConfig' " -- "DESC 'HDB backend configuration' " --#else -- "( OLcfgDbOc:1.1 " -- "NAME 'olcBdbConfig' " -- "DESC 'BDB backend configuration' " --#endif -- "SUP olcDatabaseConfig " -- "MUST olcDbDirectory " -- "MAY ( olcDbCacheSize $ olcDbCheckpoint $ olcDbChecksum $ " -- "olcDbConfig $ olcDbCryptFile $ olcDbCryptKey $ " -- "olcDbNoSync $ olcDbDirtyRead $ olcDbIDLcacheSize $ " -- "olcDbIndex $ olcDbLinearIndex $ olcDbLockDetect $ " -- "olcDbMode $ olcDbSearchStack $ olcDbShmKey $ " -- "olcDbCacheFree $ olcDbDNcacheSize $ olcDbPageSize ) )", -- Cft_Database, bdbcfg }, -- { NULL, 0, NULL } --}; -- --static slap_verbmasks bdb_lockd[] = { -- { BER_BVC("default"), DB_LOCK_DEFAULT }, -- { BER_BVC("oldest"), DB_LOCK_OLDEST }, -- { BER_BVC("random"), DB_LOCK_RANDOM }, -- { BER_BVC("youngest"), DB_LOCK_YOUNGEST }, -- { BER_BVC("fewest"), DB_LOCK_MINLOCKS }, -- { BER_BVNULL, 0 } --}; -- --/* perform periodic checkpoints */ --static void * --bdb_checkpoint( void *ctx, void *arg ) --{ -- struct re_s *rtask = arg; -- struct bdb_info *bdb = rtask->arg; -- -- TXN_CHECKPOINT( bdb->bi_dbenv, bdb->bi_txn_cp_kbyte, -- bdb->bi_txn_cp_min, 0 ); -- ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex ); -- ldap_pvt_runqueue_stoptask( &slapd_rq, rtask ); -- ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex ); -- return NULL; --} -- --/* reindex entries on the fly */ --static void * --bdb_online_index( void *ctx, void *arg ) --{ -- struct re_s *rtask = arg; -- BackendDB *be = rtask->arg; -- struct bdb_info *bdb = be->be_private; -- -- Connection conn = {0}; -- OperationBuffer opbuf; -- Operation *op; -- -- DBC *curs; -- DBT key, data; -- DB_TXN *txn; -- DB_LOCK lock; -- ID id, nid; -- EntryInfo *ei; -- int rc, getnext = 1; -- int i; -- -- connection_fake_init( &conn, &opbuf, ctx ); -- op = &opbuf.ob_op; -- -- op->o_bd = be; -- -- DBTzero( &key ); -- DBTzero( &data ); -- -- id = 1; -- key.data = &nid; -- key.size = key.ulen = sizeof(ID); -- key.flags = DB_DBT_USERMEM; -- -- data.flags = DB_DBT_USERMEM | DB_DBT_PARTIAL; -- data.dlen = data.ulen = 0; -- -- while ( 1 ) { -- if ( slapd_shutdown ) -- break; -- -- rc = TXN_BEGIN( bdb->bi_dbenv, NULL, &txn, bdb->bi_db_opflags ); -- if ( rc ) -- break; -- Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_online_index) ": txn id: %x\n", -- txn->id(txn), 0, 0 ); -- if ( getnext ) { -- getnext = 0; -- BDB_ID2DISK( id, &nid ); -- rc = bdb->bi_id2entry->bdi_db->cursor( -- bdb->bi_id2entry->bdi_db, txn, &curs, bdb->bi_db_opflags ); -- if ( rc ) { -- TXN_ABORT( txn ); -- break; -- } -- rc = curs->c_get( curs, &key, &data, DB_SET_RANGE ); -- curs->c_close( curs ); -- if ( rc ) { -- TXN_ABORT( txn ); -- if ( rc == DB_NOTFOUND ) -- rc = 0; -- if ( rc == DB_LOCK_DEADLOCK ) { -- ldap_pvt_thread_yield(); -- continue; -- } -- break; -- } -- BDB_DISK2ID( &nid, &id ); -- } -- -- ei = NULL; -- rc = bdb_cache_find_id( op, txn, id, &ei, 0, &lock ); -- if ( rc ) { -- TXN_ABORT( txn ); -- if ( rc == DB_LOCK_DEADLOCK ) { -- ldap_pvt_thread_yield(); -- continue; -- } -- if ( rc == DB_NOTFOUND ) { -- id++; -- getnext = 1; -- continue; -- } -- break; -- } -- if ( ei->bei_e ) { -- rc = bdb_index_entry( op, txn, BDB_INDEX_UPDATE_OP, ei->bei_e ); -- if ( rc ) { -- TXN_ABORT( txn ); -- if ( rc == DB_LOCK_DEADLOCK ) { -- ldap_pvt_thread_yield(); -- continue; -- } -- break; -- } -- rc = TXN_COMMIT( txn, 0 ); -- txn = NULL; -- } -- id++; -- getnext = 1; -- } -- -- for ( i = 0; i < bdb->bi_nattrs; i++ ) { -- if ( bdb->bi_attrs[ i ]->ai_indexmask & BDB_INDEX_DELETING -- || bdb->bi_attrs[ i ]->ai_newmask == 0 ) -- { -- continue; -- } -- bdb->bi_attrs[ i ]->ai_indexmask = bdb->bi_attrs[ i ]->ai_newmask; -- bdb->bi_attrs[ i ]->ai_newmask = 0; -- } -- -- ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex ); -- ldap_pvt_runqueue_stoptask( &slapd_rq, rtask ); -- bdb->bi_index_task = NULL; -- ldap_pvt_runqueue_remove( &slapd_rq, rtask ); -- ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex ); -- -- return NULL; --} -- --/* Cleanup loose ends after Modify completes */ --static int --bdb_cf_cleanup( ConfigArgs *c ) --{ -- struct bdb_info *bdb = c->be->be_private; -- int rc = 0; -- BerVarray bva; -- -- if ( bdb->bi_flags & BDB_DEL_INDEX ) { -- bdb_attr_flush( bdb ); -- bdb->bi_flags ^= BDB_DEL_INDEX; -- } -- -- if ( bdb->bi_flags & BDB_RE_OPEN ) { -- bdb->bi_flags ^= BDB_RE_OPEN; -- bva = bdb->bi_db_config; -- bdb->bi_db_config = NULL; -- rc = c->be->bd_info->bi_db_close( c->be, &c->reply ); -- if ( rc == 0 ) { -- if ( bdb->bi_flags & BDB_UPD_CONFIG ) { -- if ( bva ) { -- int i; -- FILE *f = fopen( bdb->bi_db_config_path, "w" ); -- if ( f ) { -- bdb->bi_db_config = bva; -- bva = NULL; -- for (i=0; bdb->bi_db_config[i].bv_val; i++) -- fprintf( f, "%s\n", bdb->bi_db_config[i].bv_val ); -- fclose( f ); -- } else { -- ber_bvarray_free( bva ); -- } -- } else { -- unlink( bdb->bi_db_config_path ); -- } -- bdb->bi_flags ^= BDB_UPD_CONFIG; -- } -- rc = c->be->bd_info->bi_db_open( c->be, &c->reply ); -- } -- /* If this fails, we need to restart */ -- if ( rc ) { -- slapd_shutdown = 2; -- snprintf( c->cr_msg, sizeof( c->cr_msg ), -- "failed to reopen database, rc=%d", rc ); -- Debug( LDAP_DEBUG_ANY, LDAP_XSTRING(bdb_cf_cleanup) -- ": %s\n", c->cr_msg, 0, 0 ); -- rc = LDAP_OTHER; -- } -- } -- return rc; --} -- --static int --bdb_cf_gen( ConfigArgs *c ) --{ -- struct bdb_info *bdb = c->be->be_private; -- int rc; -- -- if ( c->op == SLAP_CONFIG_EMIT ) { -- rc = 0; -- switch( c->type ) { -- case BDB_MODE: { -- char buf[64]; -- struct berval bv; -- bv.bv_len = snprintf( buf, sizeof(buf), "0%o", bdb->bi_dbenv_mode ); -- if ( bv.bv_len > 0 && bv.bv_len < sizeof(buf) ) { -- bv.bv_val = buf; -- value_add_one( &c->rvalue_vals, &bv ); -- } else { -- rc = 1; -- } -- } break; -- -- case BDB_CHKPT: -- if ( bdb->bi_txn_cp ) { -- char buf[64]; -- struct berval bv; -- bv.bv_len = snprintf( buf, sizeof(buf), "%ld %ld", -- (long) bdb->bi_txn_cp_kbyte, (long) bdb->bi_txn_cp_min ); -- if ( bv.bv_len > 0 && bv.bv_len < sizeof(buf) ) { -- bv.bv_val = buf; -- value_add_one( &c->rvalue_vals, &bv ); -- } else { -- rc = 1; -- } -- } else { -- rc = 1; -- } -- break; -- -- case BDB_CRYPTFILE: -- if ( bdb->bi_db_crypt_file ) { -- c->value_string = ch_strdup( bdb->bi_db_crypt_file ); -- } else { -- rc = 1; -- } -- break; -- -- /* If a crypt file has been set, its contents are copied here. -- * But we don't want the key to be incorporated here. -- */ -- case BDB_CRYPTKEY: -- if ( !bdb->bi_db_crypt_file && !BER_BVISNULL( &bdb->bi_db_crypt_key )) { -- value_add_one( &c->rvalue_vals, &bdb->bi_db_crypt_key ); -- } else { -- rc = 1; -- } -- break; -- -- case BDB_DIRECTORY: -- if ( bdb->bi_dbenv_home ) { -- c->value_string = ch_strdup( bdb->bi_dbenv_home ); -- } else { -- rc = 1; -- } -- break; -- -- case BDB_CONFIG: -- if ( !( bdb->bi_flags & BDB_IS_OPEN ) -- && !bdb->bi_db_config ) -- { -- char buf[SLAP_TEXT_BUFLEN]; -- FILE *f = fopen( bdb->bi_db_config_path, "r" ); -- struct berval bv; -- -- if ( f ) { -- bdb->bi_flags |= BDB_HAS_CONFIG; -- while ( fgets( buf, sizeof(buf), f )) { -- ber_str2bv( buf, 0, 1, &bv ); -- if ( bv.bv_len > 0 && bv.bv_val[bv.bv_len-1] == '\n' ) { -- bv.bv_len--; -- bv.bv_val[bv.bv_len] = '\0'; -- } -- /* shouldn't need this, but ... */ -- if ( bv.bv_len > 0 && bv.bv_val[bv.bv_len-1] == '\r' ) { -- bv.bv_len--; -- bv.bv_val[bv.bv_len] = '\0'; -- } -- ber_bvarray_add( &bdb->bi_db_config, &bv ); -- } -- fclose( f ); -- } -- } -- if ( bdb->bi_db_config ) { -- int i; -- struct berval bv; -- -- bv.bv_val = c->log; -- for (i=0; !BER_BVISNULL(&bdb->bi_db_config[i]); i++) { -- bv.bv_len = sprintf( bv.bv_val, "{%d}%s", i, -- bdb->bi_db_config[i].bv_val ); -- value_add_one( &c->rvalue_vals, &bv ); -- } -- } -- if ( !c->rvalue_vals ) rc = 1; -- break; -- -- case BDB_NOSYNC: -- if ( bdb->bi_dbenv_xflags & DB_TXN_NOSYNC ) -- c->value_int = 1; -- break; -- -- case BDB_CHECKSUM: -- if ( bdb->bi_flags & BDB_CHKSUM ) -- c->value_int = 1; -- break; -- -- case BDB_INDEX: -- bdb_attr_index_unparse( bdb, &c->rvalue_vals ); -- if ( !c->rvalue_vals ) rc = 1; -- break; -- -- case BDB_LOCKD: -- rc = 1; -- if ( bdb->bi_lock_detect != DB_LOCK_DEFAULT ) { -- int i; -- for (i=0; !BER_BVISNULL(&bdb_lockd[i].word); i++) { -- if ( bdb->bi_lock_detect == (u_int32_t)bdb_lockd[i].mask ) { -- value_add_one( &c->rvalue_vals, &bdb_lockd[i].word ); -- rc = 0; -- break; -- } -- } -- } -- break; -- -- case BDB_SSTACK: -- c->value_int = bdb->bi_search_stack_depth; -- break; -- -- case BDB_PGSIZE: { -- struct bdb_db_pgsize *ps; -- char buf[SLAP_TEXT_BUFLEN]; -- struct berval bv; -- int rc = 1; -- -- bv.bv_val = buf; -- for ( ps = bdb->bi_pagesizes; ps; ps = ps->bdp_next ) { -- bv.bv_len = sprintf( buf, "%s %d", ps->bdp_name.bv_val, -- ps->bdp_size / 1024 ); -- value_add_one( &c->rvalue_vals, &bv ); -- rc = 0; -- -- } -- break; -- } -- } -- return rc; -- } else if ( c->op == LDAP_MOD_DELETE ) { -- rc = 0; -- switch( c->type ) { -- case BDB_MODE: --#if 0 -- /* FIXME: does it make any sense to change the mode, -- * if we don't exec a chmod()? */ -- bdb->bi_dbenv_mode = SLAPD_DEFAULT_DB_MODE; -- break; --#endif -- -- /* single-valued no-ops */ -- case BDB_LOCKD: -- case BDB_SSTACK: -- break; -- -- case BDB_CHKPT: -- if ( bdb->bi_txn_cp_task ) { -- struct re_s *re = bdb->bi_txn_cp_task; -- bdb->bi_txn_cp_task = NULL; -- ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex ); -- if ( ldap_pvt_runqueue_isrunning( &slapd_rq, re ) ) -- ldap_pvt_runqueue_stoptask( &slapd_rq, re ); -- ldap_pvt_runqueue_remove( &slapd_rq, re ); -- ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex ); -- } -- bdb->bi_txn_cp = 0; -- break; -- case BDB_CONFIG: -- if ( c->valx < 0 ) { -- ber_bvarray_free( bdb->bi_db_config ); -- bdb->bi_db_config = NULL; -- } else { -- int i = c->valx; -- ch_free( bdb->bi_db_config[i].bv_val ); -- for (; bdb->bi_db_config[i].bv_val; i++) -- bdb->bi_db_config[i] = bdb->bi_db_config[i+1]; -- } -- bdb->bi_flags |= BDB_UPD_CONFIG|BDB_RE_OPEN; -- c->cleanup = bdb_cf_cleanup; -- break; -- /* Doesn't really make sense to change these on the fly; -- * the entire DB must be dumped and reloaded -- */ -- case BDB_CRYPTFILE: -- if ( bdb->bi_db_crypt_file ) { -- ch_free( bdb->bi_db_crypt_file ); -- bdb->bi_db_crypt_file = NULL; -- } -- /* FALLTHRU */ -- case BDB_CRYPTKEY: -- if ( !BER_BVISNULL( &bdb->bi_db_crypt_key )) { -- ch_free( bdb->bi_db_crypt_key.bv_val ); -- BER_BVZERO( &bdb->bi_db_crypt_key ); -- } -- break; -- case BDB_DIRECTORY: -- bdb->bi_flags |= BDB_RE_OPEN; -- bdb->bi_flags ^= BDB_HAS_CONFIG; -- ch_free( bdb->bi_dbenv_home ); -- bdb->bi_dbenv_home = NULL; -- ch_free( bdb->bi_db_config_path ); -- bdb->bi_db_config_path = NULL; -- c->cleanup = bdb_cf_cleanup; -- ldap_pvt_thread_pool_purgekey( bdb->bi_dbenv ); -- break; -- case BDB_NOSYNC: -- bdb->bi_dbenv->set_flags( bdb->bi_dbenv, DB_TXN_NOSYNC, 0 ); -- break; -- case BDB_CHECKSUM: -- bdb->bi_flags &= ~BDB_CHKSUM; -- break; -- case BDB_INDEX: -- if ( c->valx == -1 ) { -- int i; -- -- /* delete all */ -- for ( i = 0; i < bdb->bi_nattrs; i++ ) { -- bdb->bi_attrs[i]->ai_indexmask |= BDB_INDEX_DELETING; -- } -- bdb->bi_defaultmask = 0; -- bdb->bi_flags |= BDB_DEL_INDEX; -- c->cleanup = bdb_cf_cleanup; -- -- } else { -- struct berval bv, def = BER_BVC("default"); -- char *ptr; -- -- for (ptr = c->line; !isspace( (unsigned char) *ptr ); ptr++); -- -- bv.bv_val = c->line; -- bv.bv_len = ptr - bv.bv_val; -- if ( bvmatch( &bv, &def )) { -- bdb->bi_defaultmask = 0; -- -- } else { -- int i; -- char **attrs; -- char sep; -- -- sep = bv.bv_val[ bv.bv_len ]; -- bv.bv_val[ bv.bv_len ] = '\0'; -- attrs = ldap_str2charray( bv.bv_val, "," ); -- -- for ( i = 0; attrs[ i ]; i++ ) { -- AttributeDescription *ad = NULL; -- const char *text; -- AttrInfo *ai; -- -- slap_str2ad( attrs[ i ], &ad, &text ); -- /* if we got here... */ -- assert( ad != NULL ); -- -- ai = bdb_attr_mask( bdb, ad ); -- /* if we got here... */ -- assert( ai != NULL ); -- -- ai->ai_indexmask |= BDB_INDEX_DELETING; -- bdb->bi_flags |= BDB_DEL_INDEX; -- c->cleanup = bdb_cf_cleanup; -- } -- -- bv.bv_val[ bv.bv_len ] = sep; -- ldap_charray_free( attrs ); -- } -- } -- break; -- /* doesn't make sense on the fly; the DB file must be -- * recreated -- */ -- case BDB_PGSIZE: { -- struct bdb_db_pgsize *ps, **prev; -- int i; -- -- for ( i = 0, prev = &bdb->bi_pagesizes, ps = *prev; ps; -- prev = &ps->bdp_next, ps = ps->bdp_next, i++ ) { -- if ( c->valx == -1 || i == c->valx ) { -- *prev = ps->bdp_next; -- ch_free( ps ); -- ps = *prev; -- if ( i == c->valx ) break; -- } -- } -- } -- break; -- } -- return rc; -- } -- -- switch( c->type ) { -- case BDB_MODE: -- if ( ASCII_DIGIT( c->argv[1][0] ) ) { -- long mode; -- char *next; -- errno = 0; -- mode = strtol( c->argv[1], &next, 0 ); -- if ( errno != 0 || next == c->argv[1] || next[0] != '\0' ) { -- fprintf( stderr, "%s: " -- "unable to parse mode=\"%s\".\n", -- c->log, c->argv[1] ); -- return 1; -- } -- bdb->bi_dbenv_mode = mode; -- -- } else { -- char *m = c->argv[1]; -- int who, what, mode = 0; -- -- if ( strlen( m ) != STRLENOF("-rwxrwxrwx") ) { -- return 1; -- } -- -- if ( m[0] != '-' ) { -- return 1; -- } -- -- m++; -- for ( who = 0; who < 3; who++ ) { -- for ( what = 0; what < 3; what++, m++ ) { -- if ( m[0] == '-' ) { -- continue; -- } else if ( m[0] != "rwx"[what] ) { -- return 1; -- } -- mode += ((1 << (2 - what)) << 3*(2 - who)); -- } -- } -- bdb->bi_dbenv_mode = mode; -- } -- break; -- case BDB_CHKPT: { -- long l; -- bdb->bi_txn_cp = 1; -- if ( lutil_atolx( &l, c->argv[1], 0 ) != 0 ) { -- fprintf( stderr, "%s: " -- "invalid kbyte \"%s\" in \"checkpoint\".\n", -- c->log, c->argv[1] ); -- return 1; -- } -- bdb->bi_txn_cp_kbyte = l; -- if ( lutil_atolx( &l, c->argv[2], 0 ) != 0 ) { -- fprintf( stderr, "%s: " -- "invalid minutes \"%s\" in \"checkpoint\".\n", -- c->log, c->argv[2] ); -- return 1; -- } -- bdb->bi_txn_cp_min = l; -- /* If we're in server mode and time-based checkpointing is enabled, -- * submit a task to perform periodic checkpoints. -- */ -- if ((slapMode & SLAP_SERVER_MODE) && bdb->bi_txn_cp_min ) { -- struct re_s *re = bdb->bi_txn_cp_task; -- if ( re ) { -- re->interval.tv_sec = bdb->bi_txn_cp_min * 60; -- } else { -- if ( c->be->be_suffix == NULL || BER_BVISNULL( &c->be->be_suffix[0] ) ) { -- fprintf( stderr, "%s: " -- "\"checkpoint\" must occur after \"suffix\".\n", -- c->log ); -- return 1; -- } -- ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex ); -- bdb->bi_txn_cp_task = ldap_pvt_runqueue_insert( &slapd_rq, -- bdb->bi_txn_cp_min * 60, bdb_checkpoint, bdb, -- LDAP_XSTRING(bdb_checkpoint), c->be->be_suffix[0].bv_val ); -- ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex ); -- } -- } -- } break; -- -- case BDB_CONFIG: { -- char *ptr = c->line; -- struct berval bv; -- -- if ( c->op == SLAP_CONFIG_ADD ) { -- ptr += STRLENOF("dbconfig"); -- while (!isspace((unsigned char)*ptr)) ptr++; -- while (isspace((unsigned char)*ptr)) ptr++; -- } -- -- if ( bdb->bi_flags & BDB_IS_OPEN ) { -- bdb->bi_flags |= BDB_UPD_CONFIG|BDB_RE_OPEN; -- c->cleanup = bdb_cf_cleanup; -- } else { -- /* If we're just starting up... -- */ -- FILE *f; -- /* If a DB_CONFIG file exists, or we don't know the path -- * to the DB_CONFIG file, ignore these directives -- */ -- if (( bdb->bi_flags & BDB_HAS_CONFIG ) || !bdb->bi_db_config_path ) -- break; -- f = fopen( bdb->bi_db_config_path, "a" ); -- if ( f ) { -- /* FIXME: EBCDIC probably needs special handling */ -- fprintf( f, "%s\n", ptr ); -- fclose( f ); -- } -- } -- ber_str2bv( ptr, 0, 1, &bv ); -- ber_bvarray_add( &bdb->bi_db_config, &bv ); -- } -- break; -- -- case BDB_CRYPTFILE: -- rc = lutil_get_filed_password( c->value_string, &bdb->bi_db_crypt_key ); -- if ( rc == 0 ) { -- bdb->bi_db_crypt_file = c->value_string; -- } -- break; -- -- /* Cannot set key if file was already set */ -- case BDB_CRYPTKEY: -- if ( bdb->bi_db_crypt_file ) { -- rc = 1; -- } else { -- bdb->bi_db_crypt_key = c->value_bv; -- } -- break; -- -- case BDB_DIRECTORY: { -- FILE *f; -- char *ptr, *testpath; -- int len; -- -- len = strlen( c->value_string ); -- testpath = ch_malloc( len + STRLENOF(LDAP_DIRSEP) + STRLENOF("DUMMY") + 1 ); -- ptr = lutil_strcopy( testpath, c->value_string ); -- *ptr++ = LDAP_DIRSEP[0]; -- strcpy( ptr, "DUMMY" ); -- f = fopen( testpath, "w" ); -- if ( f ) { -- fclose( f ); -- unlink( testpath ); -- } -- ch_free( testpath ); -- if ( !f ) { -- snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s: invalid path: %s", -- c->log, strerror( errno )); -- Debug( LDAP_DEBUG_ANY, "%s\n", c->cr_msg, 0, 0 ); -- return -1; -- } -- -- if ( bdb->bi_dbenv_home ) -- ch_free( bdb->bi_dbenv_home ); -- bdb->bi_dbenv_home = c->value_string; -- -- /* See if a DB_CONFIG file already exists here */ -- if ( bdb->bi_db_config_path ) -- ch_free( bdb->bi_db_config_path ); -- bdb->bi_db_config_path = ch_malloc( len + -- STRLENOF(LDAP_DIRSEP) + STRLENOF("DB_CONFIG") + 1 ); -- ptr = lutil_strcopy( bdb->bi_db_config_path, bdb->bi_dbenv_home ); -- *ptr++ = LDAP_DIRSEP[0]; -- strcpy( ptr, "DB_CONFIG" ); -- -- f = fopen( bdb->bi_db_config_path, "r" ); -- if ( f ) { -- bdb->bi_flags |= BDB_HAS_CONFIG; -- fclose(f); -- } -- } -- break; -- -- case BDB_NOSYNC: -- if ( c->value_int ) -- bdb->bi_dbenv_xflags |= DB_TXN_NOSYNC; -- else -- bdb->bi_dbenv_xflags &= ~DB_TXN_NOSYNC; -- if ( bdb->bi_flags & BDB_IS_OPEN ) { -- bdb->bi_dbenv->set_flags( bdb->bi_dbenv, DB_TXN_NOSYNC, -- c->value_int ); -- } -- break; -- -- case BDB_CHECKSUM: -- if ( c->value_int ) -- bdb->bi_flags |= BDB_CHKSUM; -- else -- bdb->bi_flags &= ~BDB_CHKSUM; -- break; -- -- case BDB_INDEX: -- rc = bdb_attr_index_config( bdb, c->fname, c->lineno, -- c->argc - 1, &c->argv[1], &c->reply); -- -- if( rc != LDAP_SUCCESS ) return 1; -- if (( bdb->bi_flags & BDB_IS_OPEN ) && !bdb->bi_index_task ) { -- /* Start the task as soon as we finish here. Set a long -- * interval (10 hours) so that it only gets scheduled once. -- */ -- if ( c->be->be_suffix == NULL || BER_BVISNULL( &c->be->be_suffix[0] ) ) { -- fprintf( stderr, "%s: " -- "\"index\" must occur after \"suffix\".\n", -- c->log ); -- return 1; -- } -- ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex ); -- bdb->bi_index_task = ldap_pvt_runqueue_insert( &slapd_rq, 36000, -- bdb_online_index, c->be, -- LDAP_XSTRING(bdb_online_index), c->be->be_suffix[0].bv_val ); -- ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex ); -- } -- break; -- -- case BDB_LOCKD: -- rc = verb_to_mask( c->argv[1], bdb_lockd ); -- if ( BER_BVISNULL(&bdb_lockd[rc].word) ) { -- fprintf( stderr, "%s: " -- "bad policy (%s) in \"lockDetect \" line\n", -- c->log, c->argv[1] ); -- return 1; -- } -- bdb->bi_lock_detect = (u_int32_t)rc; -- break; -- -- case BDB_SSTACK: -- if ( c->value_int < MINIMUM_SEARCH_STACK_DEPTH ) { -- fprintf( stderr, -- "%s: depth %d too small, using %d\n", -- c->log, c->value_int, MINIMUM_SEARCH_STACK_DEPTH ); -- c->value_int = MINIMUM_SEARCH_STACK_DEPTH; -- } -- bdb->bi_search_stack_depth = c->value_int; -- break; -- -- case BDB_PGSIZE: { -- struct bdb_db_pgsize *ps, **prev; -- int i, s; -- -- s = atoi(c->argv[2]); -- if ( s < 1 || s > 64 ) { -- snprintf( c->cr_msg, sizeof( c->cr_msg ), -- "%s: size must be > 0 and <= 64: %d", -- c->log, s ); -- Debug( LDAP_DEBUG_ANY, "%s\n", c->cr_msg, 0, 0 ); -- return -1; -- } -- i = strlen(c->argv[1]); -- ps = ch_malloc( sizeof(struct bdb_db_pgsize) + i + 1 ); -- ps->bdp_next = NULL; -- ps->bdp_name.bv_len = i; -- ps->bdp_name.bv_val = (char *)(ps+1); -- strcpy( ps->bdp_name.bv_val, c->argv[1] ); -- ps->bdp_size = s * 1024; -- for ( prev = &bdb->bi_pagesizes; *prev; prev = &(*prev)->bdp_next ) -- ; -- *prev = ps; -- } -- break; -- } -- return 0; --} -- --int bdb_back_init_cf( BackendInfo *bi ) --{ -- int rc; -- bi->bi_cf_ocs = bdbocs; -- -- rc = config_register_schema( bdbcfg, bdbocs ); -- if ( rc ) return rc; -- return 0; --} -diff --git a/servers/slapd/back-bdb/dbcache.c b/servers/slapd/back-bdb/dbcache.c -deleted file mode 100644 -index 9a35b71..0000000 ---- a/servers/slapd/back-bdb/dbcache.c -+++ /dev/null -@@ -1,210 +0,0 @@ --/* dbcache.c - manage cache of open databases */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include -- --#include --#include --#include --#include --#include -- --#include "slap.h" --#include "back-bdb.h" --#include "lutil_hash.h" -- --#ifdef BDB_INDEX_USE_HASH --/* Pass-thru hash function. Since the indexer is already giving us hash -- * values as keys, we don't need BDB to re-hash them. -- */ --static u_int32_t --bdb_db_hash( -- DB *db, -- const void *bytes, -- u_int32_t length --) --{ -- u_int32_t ret = 0; -- unsigned char *dst = (unsigned char *)&ret; -- const unsigned char *src = (const unsigned char *)bytes; -- -- if ( length > sizeof(u_int32_t) ) -- length = sizeof(u_int32_t); -- -- while ( length ) { -- *dst++ = *src++; -- length--; -- } -- return ret; --} --#define BDB_INDEXTYPE DB_HASH --#else --#define BDB_INDEXTYPE DB_BTREE --#endif -- --/* If a configured size is found, return it, otherwise return 0 */ --int --bdb_db_findsize( -- struct bdb_info *bdb, -- struct berval *name --) --{ -- struct bdb_db_pgsize *bp; -- int rc; -- -- for ( bp = bdb->bi_pagesizes; bp; bp=bp->bdp_next ) { -- rc = strncmp( name->bv_val, bp->bdp_name.bv_val, name->bv_len ); -- if ( !rc ) { -- if ( name->bv_len == bp->bdp_name.bv_len ) -- return bp->bdp_size; -- if ( name->bv_len < bp->bdp_name.bv_len && -- bp->bdp_name.bv_val[name->bv_len] == '.' ) -- return bp->bdp_size; -- } -- } -- return 0; --} -- --int --bdb_db_cache( -- Backend *be, -- struct berval *name, -- DB **dbout ) --{ -- int i, flags; -- int rc; -- struct bdb_info *bdb = (struct bdb_info *) be->be_private; -- struct bdb_db_info *db; -- char *file; -- -- *dbout = NULL; -- -- for( i=BDB_NDB; i < bdb->bi_ndatabases; i++ ) { -- if( !ber_bvcmp( &bdb->bi_databases[i]->bdi_name, name) ) { -- *dbout = bdb->bi_databases[i]->bdi_db; -- return 0; -- } -- } -- -- ldap_pvt_thread_mutex_lock( &bdb->bi_database_mutex ); -- -- /* check again! may have been added by another thread */ -- for( i=BDB_NDB; i < bdb->bi_ndatabases; i++ ) { -- if( !ber_bvcmp( &bdb->bi_databases[i]->bdi_name, name) ) { -- *dbout = bdb->bi_databases[i]->bdi_db; -- ldap_pvt_thread_mutex_unlock( &bdb->bi_database_mutex ); -- return 0; -- } -- } -- -- if( i >= BDB_INDICES ) { -- ldap_pvt_thread_mutex_unlock( &bdb->bi_database_mutex ); -- return -1; -- } -- -- db = (struct bdb_db_info *) ch_calloc(1, sizeof(struct bdb_db_info)); -- -- ber_dupbv( &db->bdi_name, name ); -- -- rc = db_create( &db->bdi_db, bdb->bi_dbenv, 0 ); -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, -- "bdb_db_cache: db_create(%s) failed: %s (%d)\n", -- bdb->bi_dbenv_home, db_strerror(rc), rc ); -- ldap_pvt_thread_mutex_unlock( &bdb->bi_database_mutex ); -- ch_free( db ); -- return rc; -- } -- -- if( !BER_BVISNULL( &bdb->bi_db_crypt_key )) { -- rc = db->bdi_db->set_flags( db->bdi_db, DB_ENCRYPT ); -- if ( rc ) { -- Debug( LDAP_DEBUG_ANY, -- "bdb_db_cache: db set_flags(DB_ENCRYPT)(%s) failed: %s (%d)\n", -- bdb->bi_dbenv_home, db_strerror(rc), rc ); -- ldap_pvt_thread_mutex_unlock( &bdb->bi_database_mutex ); -- db->bdi_db->close( db->bdi_db, 0 ); -- ch_free( db ); -- return rc; -- } -- } -- -- if( bdb->bi_flags & BDB_CHKSUM ) { -- rc = db->bdi_db->set_flags( db->bdi_db, DB_CHKSUM ); -- if ( rc ) { -- Debug( LDAP_DEBUG_ANY, -- "bdb_db_cache: db set_flags(DB_CHKSUM)(%s) failed: %s (%d)\n", -- bdb->bi_dbenv_home, db_strerror(rc), rc ); -- ldap_pvt_thread_mutex_unlock( &bdb->bi_database_mutex ); -- db->bdi_db->close( db->bdi_db, 0 ); -- ch_free( db ); -- return rc; -- } -- } -- -- /* If no explicit size set, use the FS default */ -- flags = bdb_db_findsize( bdb, name ); -- if ( flags ) -- rc = db->bdi_db->set_pagesize( db->bdi_db, flags ); -- --#ifdef BDB_INDEX_USE_HASH -- rc = db->bdi_db->set_h_hash( db->bdi_db, bdb_db_hash ); --#endif -- rc = db->bdi_db->set_flags( db->bdi_db, DB_DUP | DB_DUPSORT ); -- -- file = ch_malloc( db->bdi_name.bv_len + sizeof(BDB_SUFFIX) ); -- strcpy( file, db->bdi_name.bv_val ); -- strcpy( file+db->bdi_name.bv_len, BDB_SUFFIX ); -- --#ifdef HAVE_EBCDIC -- __atoe( file ); --#endif -- flags = DB_CREATE | DB_THREAD; --#ifdef DB_AUTO_COMMIT -- if ( !( slapMode & SLAP_TOOL_QUICK )) -- flags |= DB_AUTO_COMMIT; --#endif -- /* Cannot Truncate when Transactions are in use */ -- if ( (slapMode & (SLAP_TOOL_QUICK|SLAP_TRUNCATE_MODE)) == -- (SLAP_TOOL_QUICK|SLAP_TRUNCATE_MODE)) -- flags |= DB_TRUNCATE; -- -- rc = DB_OPEN( db->bdi_db, -- file, NULL /* name */, -- BDB_INDEXTYPE, bdb->bi_db_opflags | flags, bdb->bi_dbenv_mode ); -- -- ch_free( file ); -- -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, -- "bdb_db_cache: db_open(%s) failed: %s (%d)\n", -- name->bv_val, db_strerror(rc), rc ); -- ldap_pvt_thread_mutex_unlock( &bdb->bi_database_mutex ); -- db->bdi_db->close( db->bdi_db, 0 ); -- ch_free( db ); -- return rc; -- } -- -- bdb->bi_databases[i] = db; -- bdb->bi_ndatabases = i+1; -- -- *dbout = db->bdi_db; -- -- ldap_pvt_thread_mutex_unlock( &bdb->bi_database_mutex ); -- return 0; --} -diff --git a/servers/slapd/back-bdb/delete.c b/servers/slapd/back-bdb/delete.c -deleted file mode 100644 -index f4f6e23..0000000 ---- a/servers/slapd/back-bdb/delete.c -+++ /dev/null -@@ -1,605 +0,0 @@ --/* delete.c - bdb backend delete routine */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include --#include -- --#include "lutil.h" --#include "back-bdb.h" -- --int --bdb_delete( Operation *op, SlapReply *rs ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- Entry *matched = NULL; -- struct berval pdn = {0, NULL}; -- Entry *e = NULL; -- Entry *p = NULL; -- EntryInfo *ei = NULL, *eip = NULL; -- int manageDSAit = get_manageDSAit( op ); -- AttributeDescription *children = slap_schema.si_ad_children; -- AttributeDescription *entry = slap_schema.si_ad_entry; -- DB_TXN *ltid = NULL, *lt2; -- struct bdb_op_info opinfo = {{{ 0 }}}; -- ID eid; -- -- DB_LOCK lock, plock; -- -- int num_retries = 0; -- -- int rc; -- -- LDAPControl **preread_ctrl = NULL; -- LDAPControl *ctrls[SLAP_MAX_RESPONSE_CONTROLS]; -- int num_ctrls = 0; -- -- int parent_is_glue = 0; -- int parent_is_leaf = 0; -- --#ifdef LDAP_X_TXN -- int settle = 0; --#endif -- -- Debug( LDAP_DEBUG_ARGS, "==> " LDAP_XSTRING(bdb_delete) ": %s\n", -- op->o_req_dn.bv_val, 0, 0 ); -- --#ifdef LDAP_X_TXN -- if( op->o_txnSpec ) { -- /* acquire connection lock */ -- ldap_pvt_thread_mutex_lock( &op->o_conn->c_mutex ); -- if( op->o_conn->c_txn == CONN_TXN_INACTIVE ) { -- rs->sr_text = "invalid transaction identifier"; -- rs->sr_err = LDAP_X_TXN_ID_INVALID; -- goto txnReturn; -- } else if( op->o_conn->c_txn == CONN_TXN_SETTLE ) { -- settle=1; -- goto txnReturn; -- } -- -- if( op->o_conn->c_txn_backend == NULL ) { -- op->o_conn->c_txn_backend = op->o_bd; -- -- } else if( op->o_conn->c_txn_backend != op->o_bd ) { -- rs->sr_text = "transaction cannot span multiple database contexts"; -- rs->sr_err = LDAP_AFFECTS_MULTIPLE_DSAS; -- goto txnReturn; -- } -- -- /* insert operation into transaction */ -- -- rs->sr_text = "transaction specified"; -- rs->sr_err = LDAP_X_TXN_SPECIFY_OKAY; -- --txnReturn: -- /* release connection lock */ -- ldap_pvt_thread_mutex_unlock( &op->o_conn->c_mutex ); -- -- if( !settle ) { -- send_ldap_result( op, rs ); -- return rs->sr_err; -- } -- } --#endif -- -- ctrls[num_ctrls] = 0; -- -- /* allocate CSN */ -- if ( BER_BVISNULL( &op->o_csn ) ) { -- struct berval csn; -- char csnbuf[LDAP_PVT_CSNSTR_BUFSIZE]; -- -- csn.bv_val = csnbuf; -- csn.bv_len = sizeof(csnbuf); -- slap_get_csn( op, &csn, 1 ); -- } -- -- if( 0 ) { --retry: /* transaction retry */ -- if( e != NULL ) { -- bdb_unlocked_cache_return_entry_w(&bdb->bi_cache, e); -- e = NULL; -- } -- if( p != NULL ) { -- bdb_unlocked_cache_return_entry_r(&bdb->bi_cache, p); -- p = NULL; -- } -- Debug( LDAP_DEBUG_TRACE, -- "==> " LDAP_XSTRING(bdb_delete) ": retrying...\n", -- 0, 0, 0 ); -- rs->sr_err = TXN_ABORT( ltid ); -- ltid = NULL; -- LDAP_SLIST_REMOVE( &op->o_extra, &opinfo.boi_oe, OpExtra, oe_next ); -- opinfo.boi_oe.oe_key = NULL; -- op->o_do_not_cache = opinfo.boi_acl_cache; -- if( rs->sr_err != 0 ) { -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- if ( op->o_abandon ) { -- rs->sr_err = SLAPD_ABANDON; -- goto return_results; -- } -- parent_is_glue = 0; -- parent_is_leaf = 0; -- bdb_trans_backoff( ++num_retries ); -- } -- -- /* begin transaction */ -- rs->sr_err = TXN_BEGIN( bdb->bi_dbenv, NULL, <id, -- bdb->bi_db_opflags ); -- Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_delete) ": txn1 id: %x\n", -- ltid->id(ltid), 0, 0 ); -- rs->sr_text = NULL; -- if( rs->sr_err != 0 ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_delete) ": txn_begin failed: " -- "%s (%d)\n", db_strerror(rs->sr_err), rs->sr_err, 0 ); -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- -- opinfo.boi_oe.oe_key = bdb; -- opinfo.boi_txn = ltid; -- opinfo.boi_err = 0; -- opinfo.boi_acl_cache = op->o_do_not_cache; -- LDAP_SLIST_INSERT_HEAD( &op->o_extra, &opinfo.boi_oe, oe_next ); -- -- if ( !be_issuffix( op->o_bd, &op->o_req_ndn ) ) { -- dnParent( &op->o_req_ndn, &pdn ); -- } -- -- /* get entry */ -- rs->sr_err = bdb_dn2entry( op, ltid, &op->o_req_ndn, &ei, 1, -- &lock ); -- -- switch( rs->sr_err ) { -- case 0: -- case DB_NOTFOUND: -- break; -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- case LDAP_BUSY: -- rs->sr_text = "ldap server busy"; -- goto return_results; -- default: -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- -- if ( rs->sr_err == 0 ) { -- e = ei->bei_e; -- eip = ei->bei_parent; -- } else { -- matched = ei->bei_e; -- } -- -- /* FIXME : dn2entry() should return non-glue entry */ -- if ( e == NULL || ( !manageDSAit && is_entry_glue( e ))) { -- Debug( LDAP_DEBUG_ARGS, -- "<=- " LDAP_XSTRING(bdb_delete) ": no such object %s\n", -- op->o_req_dn.bv_val, 0, 0); -- -- if ( matched != NULL ) { -- rs->sr_matched = ch_strdup( matched->e_dn ); -- rs->sr_ref = is_entry_referral( matched ) -- ? get_entry_referrals( op, matched ) -- : NULL; -- bdb_unlocked_cache_return_entry_r(&bdb->bi_cache, matched); -- matched = NULL; -- -- } else { -- rs->sr_ref = referral_rewrite( default_referral, NULL, -- &op->o_req_dn, LDAP_SCOPE_DEFAULT ); -- } -- -- rs->sr_err = LDAP_REFERRAL; -- rs->sr_flags = REP_MATCHED_MUSTBEFREED | REP_REF_MUSTBEFREED; -- goto return_results; -- } -- -- rc = bdb_cache_find_id( op, ltid, eip->bei_id, &eip, 0, &plock ); -- switch( rc ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- case 0: -- case DB_NOTFOUND: -- break; -- default: -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- if ( eip ) p = eip->bei_e; -- -- if ( pdn.bv_len != 0 ) { -- if( p == NULL || !bvmatch( &pdn, &p->e_nname )) { -- Debug( LDAP_DEBUG_TRACE, -- "<=- " LDAP_XSTRING(bdb_delete) ": parent " -- "does not exist\n", 0, 0, 0 ); -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "could not locate parent of entry"; -- goto return_results; -- } -- -- /* check parent for "children" acl */ -- rs->sr_err = access_allowed( op, p, -- children, NULL, ACL_WDEL, NULL ); -- -- if ( !rs->sr_err ) { -- switch( opinfo.boi_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- -- Debug( LDAP_DEBUG_TRACE, -- "<=- " LDAP_XSTRING(bdb_delete) ": no write " -- "access to parent\n", 0, 0, 0 ); -- rs->sr_err = LDAP_INSUFFICIENT_ACCESS; -- rs->sr_text = "no write access to parent"; -- goto return_results; -- } -- -- } else { -- /* no parent, must be root to delete */ -- if( ! be_isroot( op ) ) { -- if ( be_issuffix( op->o_bd, (struct berval *)&slap_empty_bv ) -- || be_shadow_update( op ) ) { -- p = (Entry *)&slap_entry_root; -- -- /* check parent for "children" acl */ -- rs->sr_err = access_allowed( op, p, -- children, NULL, ACL_WDEL, NULL ); -- -- p = NULL; -- -- if ( !rs->sr_err ) { -- switch( opinfo.boi_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- -- Debug( LDAP_DEBUG_TRACE, -- "<=- " LDAP_XSTRING(bdb_delete) -- ": no access to parent\n", -- 0, 0, 0 ); -- rs->sr_err = LDAP_INSUFFICIENT_ACCESS; -- rs->sr_text = "no write access to parent"; -- goto return_results; -- } -- -- } else { -- Debug( LDAP_DEBUG_TRACE, -- "<=- " LDAP_XSTRING(bdb_delete) -- ": no parent and not root\n", 0, 0, 0 ); -- rs->sr_err = LDAP_INSUFFICIENT_ACCESS; -- goto return_results; -- } -- } -- } -- -- if ( get_assert( op ) && -- ( test_filter( op, e, get_assertion( op )) != LDAP_COMPARE_TRUE )) -- { -- rs->sr_err = LDAP_ASSERTION_FAILED; -- goto return_results; -- } -- -- rs->sr_err = access_allowed( op, e, -- entry, NULL, ACL_WDEL, NULL ); -- -- if ( !rs->sr_err ) { -- switch( opinfo.boi_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- -- Debug( LDAP_DEBUG_TRACE, -- "<=- " LDAP_XSTRING(bdb_delete) ": no write access " -- "to entry\n", 0, 0, 0 ); -- rs->sr_err = LDAP_INSUFFICIENT_ACCESS; -- rs->sr_text = "no write access to entry"; -- goto return_results; -- } -- -- if ( !manageDSAit && is_entry_referral( e ) ) { -- /* entry is a referral, don't allow delete */ -- rs->sr_ref = get_entry_referrals( op, e ); -- -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_delete) ": entry is referral\n", -- 0, 0, 0 ); -- -- rs->sr_err = LDAP_REFERRAL; -- rs->sr_matched = ch_strdup( e->e_name.bv_val ); -- rs->sr_flags = REP_MATCHED_MUSTBEFREED | REP_REF_MUSTBEFREED; -- goto return_results; -- } -- -- /* pre-read */ -- if( op->o_preread ) { -- if( preread_ctrl == NULL ) { -- preread_ctrl = &ctrls[num_ctrls++]; -- ctrls[num_ctrls] = NULL; -- } -- if( slap_read_controls( op, rs, e, -- &slap_pre_read_bv, preread_ctrl ) ) -- { -- Debug( LDAP_DEBUG_TRACE, -- "<=- " LDAP_XSTRING(bdb_delete) ": pre-read " -- "failed!\n", 0, 0, 0 ); -- if ( op->o_preread & SLAP_CONTROL_CRITICAL ) { -- /* FIXME: is it correct to abort -- * operation if control fails? */ -- goto return_results; -- } -- } -- } -- -- /* nested transaction */ -- rs->sr_err = TXN_BEGIN( bdb->bi_dbenv, ltid, <2, -- bdb->bi_db_opflags ); -- rs->sr_text = NULL; -- if( rs->sr_err != 0 ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_delete) ": txn_begin(2) failed: " -- "%s (%d)\n", db_strerror(rs->sr_err), rs->sr_err, 0 ); -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_delete) ": txn2 id: %x\n", -- lt2->id(lt2), 0, 0 ); -- -- BDB_LOG_PRINTF( bdb->bi_dbenv, lt2, "slapd Starting delete %s(%d)", -- e->e_nname.bv_val, e->e_id ); -- -- /* Can't do it if we have kids */ -- rs->sr_err = bdb_cache_children( op, lt2, e ); -- if( rs->sr_err != DB_NOTFOUND ) { -- switch( rs->sr_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- case 0: -- Debug(LDAP_DEBUG_ARGS, -- "<=- " LDAP_XSTRING(bdb_delete) -- ": non-leaf %s\n", -- op->o_req_dn.bv_val, 0, 0); -- rs->sr_err = LDAP_NOT_ALLOWED_ON_NONLEAF; -- rs->sr_text = "subordinate objects must be deleted first"; -- break; -- default: -- Debug(LDAP_DEBUG_ARGS, -- "<=- " LDAP_XSTRING(bdb_delete) -- ": has_children failed: %s (%d)\n", -- db_strerror(rs->sr_err), rs->sr_err, 0 ); -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- } -- goto return_results; -- } -- -- /* delete from dn2id */ -- rs->sr_err = bdb_dn2id_delete( op, lt2, eip, e ); -- if ( rs->sr_err != 0 ) { -- Debug(LDAP_DEBUG_TRACE, -- "<=- " LDAP_XSTRING(bdb_delete) ": dn2id failed: " -- "%s (%d)\n", db_strerror(rs->sr_err), rs->sr_err, 0 ); -- switch( rs->sr_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- rs->sr_text = "DN index delete failed"; -- rs->sr_err = LDAP_OTHER; -- goto return_results; -- } -- -- /* delete indices for old attributes */ -- rs->sr_err = bdb_index_entry_del( op, lt2, e ); -- if ( rs->sr_err != LDAP_SUCCESS ) { -- Debug(LDAP_DEBUG_TRACE, -- "<=- " LDAP_XSTRING(bdb_delete) ": index failed: " -- "%s (%d)\n", db_strerror(rs->sr_err), rs->sr_err, 0 ); -- switch( rs->sr_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- rs->sr_text = "entry index delete failed"; -- rs->sr_err = LDAP_OTHER; -- goto return_results; -- } -- -- /* fixup delete CSN */ -- if ( !SLAP_SHADOW( op->o_bd )) { -- struct berval vals[2]; -- -- assert( !BER_BVISNULL( &op->o_csn ) ); -- vals[0] = op->o_csn; -- BER_BVZERO( &vals[1] ); -- rs->sr_err = bdb_index_values( op, lt2, slap_schema.si_ad_entryCSN, -- vals, 0, SLAP_INDEX_ADD_OP ); -- if ( rs->sr_err != LDAP_SUCCESS ) { -- switch( rs->sr_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- rs->sr_text = "entryCSN index update failed"; -- rs->sr_err = LDAP_OTHER; -- goto return_results; -- } -- } -- -- /* delete from id2entry */ -- rs->sr_err = bdb_id2entry_delete( op->o_bd, lt2, e ); -- if ( rs->sr_err != 0 ) { -- Debug( LDAP_DEBUG_TRACE, -- "<=- " LDAP_XSTRING(bdb_delete) ": id2entry failed: " -- "%s (%d)\n", db_strerror(rs->sr_err), rs->sr_err, 0 ); -- switch( rs->sr_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- rs->sr_text = "entry delete failed"; -- rs->sr_err = LDAP_OTHER; -- goto return_results; -- } -- -- if ( pdn.bv_len != 0 ) { -- parent_is_glue = is_entry_glue(p); -- rs->sr_err = bdb_cache_children( op, lt2, p ); -- if ( rs->sr_err != DB_NOTFOUND ) { -- switch( rs->sr_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- case 0: -- break; -- default: -- Debug(LDAP_DEBUG_ARGS, -- "<=- " LDAP_XSTRING(bdb_delete) -- ": has_children failed: %s (%d)\n", -- db_strerror(rs->sr_err), rs->sr_err, 0 ); -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- parent_is_leaf = 1; -- } -- bdb_unlocked_cache_return_entry_r(&bdb->bi_cache, p); -- p = NULL; -- } -- -- BDB_LOG_PRINTF( bdb->bi_dbenv, lt2, "slapd Commit1 delete %s(%d)", -- e->e_nname.bv_val, e->e_id ); -- -- if ( TXN_COMMIT( lt2, 0 ) != 0 ) { -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "txn_commit(2) failed"; -- goto return_results; -- } -- -- eid = e->e_id; -- --#if 0 /* Do we want to reclaim deleted IDs? */ -- ldap_pvt_thread_mutex_lock( &bdb->bi_lastid_mutex ); -- if ( e->e_id == bdb->bi_lastid ) { -- bdb_last_id( op->o_bd, ltid ); -- } -- ldap_pvt_thread_mutex_unlock( &bdb->bi_lastid_mutex ); --#endif -- -- if( op->o_noop ) { -- if ( ( rs->sr_err = TXN_ABORT( ltid ) ) != 0 ) { -- rs->sr_text = "txn_abort (no-op) failed"; -- } else { -- rs->sr_err = LDAP_X_NO_OPERATION; -- ltid = NULL; -- goto return_results; -- } -- } else { -- -- BDB_LOG_PRINTF( bdb->bi_dbenv, ltid, "slapd Cache delete %s(%d)", -- e->e_nname.bv_val, e->e_id ); -- -- rc = bdb_cache_delete( bdb, e, ltid, &lock ); -- switch( rc ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- -- rs->sr_err = TXN_COMMIT( ltid, 0 ); -- } -- ltid = NULL; -- LDAP_SLIST_REMOVE( &op->o_extra, &opinfo.boi_oe, OpExtra, oe_next ); -- opinfo.boi_oe.oe_key = NULL; -- -- BDB_LOG_PRINTF( bdb->bi_dbenv, NULL, "slapd Committed delete %s(%d)", -- e->e_nname.bv_val, e->e_id ); -- -- if( rs->sr_err != 0 ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_delete) ": txn_%s failed: %s (%d)\n", -- op->o_noop ? "abort (no-op)" : "commit", -- db_strerror(rs->sr_err), rs->sr_err ); -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "commit failed"; -- -- goto return_results; -- } -- -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_delete) ": deleted%s id=%08lx dn=\"%s\"\n", -- op->o_noop ? " (no-op)" : "", -- eid, op->o_req_dn.bv_val ); -- rs->sr_err = LDAP_SUCCESS; -- rs->sr_text = NULL; -- if( num_ctrls ) rs->sr_ctrls = ctrls; -- --return_results: -- if ( rs->sr_err == LDAP_SUCCESS && parent_is_glue && parent_is_leaf ) { -- op->o_delete_glue_parent = 1; -- } -- -- if ( p ) -- bdb_unlocked_cache_return_entry_r(&bdb->bi_cache, p); -- -- /* free entry */ -- if( e != NULL ) { -- if ( rs->sr_err == LDAP_SUCCESS ) { -- /* Free the EntryInfo and the Entry */ -- bdb_cache_entryinfo_lock( BEI(e) ); -- bdb_cache_delete_cleanup( &bdb->bi_cache, BEI(e) ); -- } else { -- bdb_unlocked_cache_return_entry_w(&bdb->bi_cache, e); -- } -- } -- -- if( ltid != NULL ) { -- TXN_ABORT( ltid ); -- } -- if ( opinfo.boi_oe.oe_key ) { -- LDAP_SLIST_REMOVE( &op->o_extra, &opinfo.boi_oe, OpExtra, oe_next ); -- } -- -- send_ldap_result( op, rs ); -- slap_graduate_commit_csn( op ); -- -- if( preread_ctrl != NULL && (*preread_ctrl) != NULL ) { -- slap_sl_free( (*preread_ctrl)->ldctl_value.bv_val, op->o_tmpmemctx ); -- slap_sl_free( *preread_ctrl, op->o_tmpmemctx ); -- } -- -- if( rs->sr_err == LDAP_SUCCESS && bdb->bi_txn_cp_kbyte ) { -- TXN_CHECKPOINT( bdb->bi_dbenv, -- bdb->bi_txn_cp_kbyte, bdb->bi_txn_cp_min, 0 ); -- } -- return rs->sr_err; --} -diff --git a/servers/slapd/back-bdb/dn2entry.c b/servers/slapd/back-bdb/dn2entry.c -deleted file mode 100644 -index 41d1dc9..0000000 ---- a/servers/slapd/back-bdb/dn2entry.c -+++ /dev/null -@@ -1,84 +0,0 @@ --/* dn2entry.c - routines to deal with the dn2id / id2entry glue */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include --#include -- --#include "back-bdb.h" -- --/* -- * dn2entry - look up dn in the cache/indexes and return the corresponding -- * entry. If the requested DN is not found and matched is TRUE, return info -- * for the closest ancestor of the DN. Otherwise e is NULL. -- */ -- --int --bdb_dn2entry( -- Operation *op, -- DB_TXN *tid, -- struct berval *dn, -- EntryInfo **e, -- int matched, -- DB_LOCK *lock ) --{ -- EntryInfo *ei = NULL; -- int rc, rc2; -- -- Debug(LDAP_DEBUG_TRACE, "bdb_dn2entry(\"%s\")\n", -- dn->bv_val, 0, 0 ); -- -- *e = NULL; -- -- rc = bdb_cache_find_ndn( op, tid, dn, &ei ); -- if ( rc ) { -- if ( matched && rc == DB_NOTFOUND ) { -- /* Set the return value, whether we have its entry -- * or not. -- */ -- *e = ei; -- if ( ei && ei->bei_id ) { -- rc2 = bdb_cache_find_id( op, tid, ei->bei_id, -- &ei, ID_LOCKED, lock ); -- if ( rc2 ) rc = rc2; -- } else if ( ei ) { -- bdb_cache_entryinfo_unlock( ei ); -- memset( lock, 0, sizeof( *lock )); -- lock->mode = DB_LOCK_NG; -- } -- } else if ( ei ) { -- bdb_cache_entryinfo_unlock( ei ); -- } -- } else { -- rc = bdb_cache_find_id( op, tid, ei->bei_id, &ei, ID_LOCKED, -- lock ); -- if ( rc == 0 ) { -- *e = ei; -- } else if ( matched && rc == DB_NOTFOUND ) { -- /* always return EntryInfo */ -- if ( ei->bei_parent ) { -- ei = ei->bei_parent; -- rc2 = bdb_cache_find_id( op, tid, ei->bei_id, &ei, 0, -- lock ); -- if ( rc2 ) rc = rc2; -- } -- *e = ei; -- } -- } -- -- return rc; --} -diff --git a/servers/slapd/back-bdb/dn2id.c b/servers/slapd/back-bdb/dn2id.c -deleted file mode 100644 -index 7b54024..0000000 ---- a/servers/slapd/back-bdb/dn2id.c -+++ /dev/null -@@ -1,1215 +0,0 @@ --/* dn2id.c - routines to deal with the dn2id index */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include --#include -- --#include "back-bdb.h" --#include "idl.h" --#include "lutil.h" -- --#ifndef BDB_HIER --int --bdb_dn2id_add( -- Operation *op, -- DB_TXN *txn, -- EntryInfo *eip, -- Entry *e ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- DB *db = bdb->bi_dn2id->bdi_db; -- int rc; -- DBT key, data; -- ID nid; -- char *buf; -- struct berval ptr, pdn; -- -- Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2id_add 0x%lx: \"%s\"\n", -- e->e_id, e->e_ndn, 0 ); -- assert( e->e_id != NOID ); -- -- DBTzero( &key ); -- key.size = e->e_nname.bv_len + 2; -- key.ulen = key.size; -- key.flags = DB_DBT_USERMEM; -- buf = op->o_tmpalloc( key.size, op->o_tmpmemctx ); -- key.data = buf; -- buf[0] = DN_BASE_PREFIX; -- ptr.bv_val = buf + 1; -- ptr.bv_len = e->e_nname.bv_len; -- AC_MEMCPY( ptr.bv_val, e->e_nname.bv_val, e->e_nname.bv_len ); -- ptr.bv_val[ptr.bv_len] = '\0'; -- -- DBTzero( &data ); -- data.data = &nid; -- data.size = sizeof( nid ); -- BDB_ID2DISK( e->e_id, &nid ); -- -- /* store it -- don't override */ -- rc = db->put( db, txn, &key, &data, DB_NOOVERWRITE ); -- if( rc != 0 ) { -- char buf[ SLAP_TEXT_BUFLEN ]; -- snprintf( buf, sizeof( buf ), "%s => bdb_dn2id_add dn=\"%s\" ID=0x%lx", -- op->o_log_prefix, e->e_name.bv_val, e->e_id ); -- Debug( LDAP_DEBUG_ANY, "%s: put failed: %s %d\n", -- buf, db_strerror(rc), rc ); -- goto done; -- } -- --#ifndef BDB_MULTIPLE_SUFFIXES -- if( !be_issuffix( op->o_bd, &ptr )) --#endif -- { -- buf[0] = DN_SUBTREE_PREFIX; -- rc = db->put( db, txn, &key, &data, DB_NOOVERWRITE ); -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, -- "=> bdb_dn2id_add 0x%lx: subtree (%s) put failed: %d\n", -- e->e_id, ptr.bv_val, rc ); -- goto done; -- } -- --#ifdef BDB_MULTIPLE_SUFFIXES -- if( !be_issuffix( op->o_bd, &ptr )) --#endif -- { -- dnParent( &ptr, &pdn ); -- -- key.size = pdn.bv_len + 2; -- key.ulen = key.size; -- pdn.bv_val[-1] = DN_ONE_PREFIX; -- key.data = pdn.bv_val-1; -- ptr = pdn; -- -- rc = bdb_idl_insert_key( op->o_bd, db, txn, &key, e->e_id ); -- -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, -- "=> bdb_dn2id_add 0x%lx: parent (%s) insert failed: %d\n", -- e->e_id, ptr.bv_val, rc ); -- goto done; -- } -- } -- --#ifndef BDB_MULTIPLE_SUFFIXES -- while( !be_issuffix( op->o_bd, &ptr )) --#else -- for (;;) --#endif -- { -- ptr.bv_val[-1] = DN_SUBTREE_PREFIX; -- -- rc = bdb_idl_insert_key( op->o_bd, db, txn, &key, e->e_id ); -- -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, -- "=> bdb_dn2id_add 0x%lx: subtree (%s) insert failed: %d\n", -- e->e_id, ptr.bv_val, rc ); -- break; -- } --#ifdef BDB_MULTIPLE_SUFFIXES -- if( be_issuffix( op->o_bd, &ptr )) break; --#endif -- dnParent( &ptr, &pdn ); -- -- key.size = pdn.bv_len + 2; -- key.ulen = key.size; -- key.data = pdn.bv_val - 1; -- ptr = pdn; -- } -- } -- --done: -- op->o_tmpfree( buf, op->o_tmpmemctx ); -- Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id_add 0x%lx: %d\n", e->e_id, rc, 0 ); -- return rc; --} -- --int --bdb_dn2id_delete( -- Operation *op, -- DB_TXN *txn, -- EntryInfo *eip, -- Entry *e ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- DB *db = bdb->bi_dn2id->bdi_db; -- char *buf; -- DBT key; -- struct berval pdn, ptr; -- int rc; -- -- Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2id_delete 0x%lx: \"%s\"\n", -- e->e_id, e->e_ndn, 0 ); -- -- DBTzero( &key ); -- key.size = e->e_nname.bv_len + 2; -- buf = op->o_tmpalloc( key.size, op->o_tmpmemctx ); -- key.data = buf; -- key.flags = DB_DBT_USERMEM; -- buf[0] = DN_BASE_PREFIX; -- ptr.bv_val = buf+1; -- ptr.bv_len = e->e_nname.bv_len; -- AC_MEMCPY( ptr.bv_val, e->e_nname.bv_val, e->e_nname.bv_len ); -- ptr.bv_val[ptr.bv_len] = '\0'; -- -- /* delete it */ -- rc = db->del( db, txn, &key, 0 ); -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, "=> bdb_dn2id_delete 0x%lx: delete failed: %s %d\n", -- e->e_id, db_strerror(rc), rc ); -- goto done; -- } -- --#ifndef BDB_MULTIPLE_SUFFIXES -- if( !be_issuffix( op->o_bd, &ptr )) --#endif -- { -- buf[0] = DN_SUBTREE_PREFIX; -- rc = bdb_idl_delete_key( op->o_bd, db, txn, &key, e->e_id ); -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, -- "=> bdb_dn2id_delete 0x%lx: subtree (%s) delete failed: %d\n", -- e->e_id, ptr.bv_val, rc ); -- goto done; -- } -- --#ifdef BDB_MULTIPLE_SUFFIXES -- if( !be_issuffix( op->o_bd, &ptr )) --#endif -- { -- dnParent( &ptr, &pdn ); -- -- key.size = pdn.bv_len + 2; -- key.ulen = key.size; -- pdn.bv_val[-1] = DN_ONE_PREFIX; -- key.data = pdn.bv_val - 1; -- ptr = pdn; -- -- rc = bdb_idl_delete_key( op->o_bd, db, txn, &key, e->e_id ); -- -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, -- "=> bdb_dn2id_delete 0x%lx: parent (%s) delete failed: %d\n", -- e->e_id, ptr.bv_val, rc ); -- goto done; -- } -- } -- --#ifndef BDB_MULTIPLE_SUFFIXES -- while( !be_issuffix( op->o_bd, &ptr )) --#else -- for (;;) --#endif -- { -- ptr.bv_val[-1] = DN_SUBTREE_PREFIX; -- -- rc = bdb_idl_delete_key( op->o_bd, db, txn, &key, e->e_id ); -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, -- "=> bdb_dn2id_delete 0x%lx: subtree (%s) delete failed: %d\n", -- e->e_id, ptr.bv_val, rc ); -- goto done; -- } --#ifdef BDB_MULTIPLE_SUFFIXES -- if( be_issuffix( op->o_bd, &ptr )) break; --#endif -- dnParent( &ptr, &pdn ); -- -- key.size = pdn.bv_len + 2; -- key.ulen = key.size; -- key.data = pdn.bv_val - 1; -- ptr = pdn; -- } -- } -- --done: -- op->o_tmpfree( buf, op->o_tmpmemctx ); -- Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id_delete 0x%lx: %d\n", e->e_id, rc, 0 ); -- return rc; --} -- --int --bdb_dn2id( -- Operation *op, -- struct berval *dn, -- EntryInfo *ei, -- DB_TXN *txn, -- DBC **cursor ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- DB *db = bdb->bi_dn2id->bdi_db; -- int rc; -- DBT key, data; -- ID nid; -- -- Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2id(\"%s\")\n", dn->bv_val, 0, 0 ); -- -- DBTzero( &key ); -- key.size = dn->bv_len + 2; -- key.data = op->o_tmpalloc( key.size, op->o_tmpmemctx ); -- ((char *)key.data)[0] = DN_BASE_PREFIX; -- AC_MEMCPY( &((char *)key.data)[1], dn->bv_val, key.size - 1 ); -- -- /* store the ID */ -- DBTzero( &data ); -- data.data = &nid; -- data.ulen = sizeof(ID); -- data.flags = DB_DBT_USERMEM; -- -- rc = db->cursor( db, txn, cursor, bdb->bi_db_opflags ); -- -- /* fetch it */ -- if ( !rc ) -- rc = (*cursor)->c_get( *cursor, &key, &data, DB_SET ); -- -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id: get failed: %s (%d)\n", -- db_strerror( rc ), rc, 0 ); -- } else { -- BDB_DISK2ID( &nid, &ei->bei_id ); -- Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id: got id=0x%lx\n", -- ei->bei_id, 0, 0 ); -- } -- op->o_tmpfree( key.data, op->o_tmpmemctx ); -- return rc; --} -- --int --bdb_dn2id_children( -- Operation *op, -- DB_TXN *txn, -- Entry *e ) --{ -- DBT key, data; -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- DB *db = bdb->bi_dn2id->bdi_db; -- ID id; -- int rc; -- -- Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2id_children(\"%s\")\n", -- e->e_nname.bv_val, 0, 0 ); -- DBTzero( &key ); -- key.size = e->e_nname.bv_len + 2; -- key.data = op->o_tmpalloc( key.size, op->o_tmpmemctx ); -- ((char *)key.data)[0] = DN_ONE_PREFIX; -- AC_MEMCPY( &((char *)key.data)[1], e->e_nname.bv_val, key.size - 1 ); -- -- if ( bdb->bi_idl_cache_size ) { -- rc = bdb_idl_cache_get( bdb, db, &key, NULL ); -- if ( rc != LDAP_NO_SUCH_OBJECT ) { -- op->o_tmpfree( key.data, op->o_tmpmemctx ); -- return rc; -- } -- } -- /* we actually could do a empty get... */ -- DBTzero( &data ); -- data.data = &id; -- data.ulen = sizeof(id); -- data.flags = DB_DBT_USERMEM; -- data.doff = 0; -- data.dlen = sizeof(id); -- -- rc = db->get( db, txn, &key, &data, bdb->bi_db_opflags ); -- op->o_tmpfree( key.data, op->o_tmpmemctx ); -- -- Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id_children(\"%s\"): %s (%d)\n", -- e->e_nname.bv_val, -- rc == 0 ? "" : ( rc == DB_NOTFOUND ? "no " : -- db_strerror(rc) ), rc ); -- -- return rc; --} -- --int --bdb_dn2idl( -- Operation *op, -- DB_TXN *txn, -- struct berval *ndn, -- EntryInfo *ei, -- ID *ids, -- ID *stack ) --{ -- int rc; -- DBT key; -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- DB *db = bdb->bi_dn2id->bdi_db; -- int prefix = ( op->ors_scope == LDAP_SCOPE_ONELEVEL ) -- ? DN_ONE_PREFIX : DN_SUBTREE_PREFIX; -- -- Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2idl(\"%s\")\n", -- ndn->bv_val, 0, 0 ); -- --#ifndef BDB_MULTIPLE_SUFFIXES -- if ( prefix == DN_SUBTREE_PREFIX -- && ( ei->bei_id == 0 || -- ( ei->bei_parent->bei_id == 0 && op->o_bd->be_suffix[0].bv_len ))) { -- BDB_IDL_ALL(bdb, ids); -- return 0; -- } --#endif -- -- DBTzero( &key ); -- key.size = ndn->bv_len + 2; -- key.ulen = key.size; -- key.flags = DB_DBT_USERMEM; -- key.data = op->o_tmpalloc( key.size, op->o_tmpmemctx ); -- ((char *)key.data)[0] = prefix; -- AC_MEMCPY( &((char *)key.data)[1], ndn->bv_val, key.size - 1 ); -- -- BDB_IDL_ZERO( ids ); -- rc = bdb_idl_fetch_key( op->o_bd, db, txn, &key, ids, NULL, 0 ); -- -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_dn2idl: get failed: %s (%d)\n", -- db_strerror( rc ), rc, 0 ); -- -- } else { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_dn2idl: id=%ld first=%ld last=%ld\n", -- (long) ids[0], -- (long) BDB_IDL_FIRST( ids ), (long) BDB_IDL_LAST( ids ) ); -- } -- -- op->o_tmpfree( key.data, op->o_tmpmemctx ); -- return rc; --} -- --#else /* BDB_HIER */ --/* Management routines for a hierarchically structured database. -- * -- * Instead of a ldbm-style dn2id database, we use a hierarchical one. Each -- * entry in this database is a struct diskNode, keyed by entryID and with -- * the data containing the RDN and entryID of the node's children. We use -- * a B-Tree with sorted duplicates to store all the children of a node under -- * the same key. Also, the first item under the key contains the entry's own -- * rdn and the ID of the node's parent, to allow bottom-up tree traversal as -- * well as top-down. To keep this info first in the list, the high bit of all -- * subsequent nrdnlen's is always set. This means we can only accomodate -- * RDNs up to length 32767, but that's fine since full DNs are already -- * restricted to 8192. -- * -- * The diskNode is a variable length structure. This definition is not -- * directly usable for in-memory manipulation. -- */ --typedef struct diskNode { -- unsigned char nrdnlen[2]; -- char nrdn[1]; -- char rdn[1]; /* variable placement */ -- unsigned char entryID[sizeof(ID)]; /* variable placement */ --} diskNode; -- --/* Sort function for the sorted duplicate data items of a dn2id key. -- * Sorts based on normalized RDN, in length order. -- */ --int --hdb_dup_compare( -- DB *db, -- const DBT *usrkey, -- const DBT *curkey --) --{ -- diskNode *un, *cn; -- int rc; -- -- un = (diskNode *)usrkey->data; -- cn = (diskNode *)curkey->data; -- -- /* data is not aligned, cannot compare directly */ -- rc = un->nrdnlen[0] - cn->nrdnlen[0]; -- if ( rc ) return rc; -- rc = un->nrdnlen[1] - cn->nrdnlen[1]; -- if ( rc ) return rc; -- -- return strcmp( un->nrdn, cn->nrdn ); --} -- --/* This function constructs a full DN for a given entry. -- */ --int hdb_fix_dn( -- Entry *e, -- int checkit ) --{ -- EntryInfo *ei; -- int rlen = 0, nrlen = 0; -- char *ptr, *nptr; -- int max = 0; -- -- if ( !e->e_id ) -- return 0; -- -- /* count length of all DN components */ -- for ( ei = BEI(e); ei && ei->bei_id; ei=ei->bei_parent ) { -- rlen += ei->bei_rdn.bv_len + 1; -- nrlen += ei->bei_nrdn.bv_len + 1; -- if (ei->bei_modrdns > max) max = ei->bei_modrdns; -- } -- -- /* See if the entry DN was invalidated by a subtree rename */ -- if ( checkit ) { -- if ( BEI(e)->bei_modrdns >= max ) { -- return 0; -- } -- /* We found a mismatch, tell the caller to lock it */ -- if ( checkit == 1 ) { -- return 1; -- } -- /* checkit == 2. do the fix. */ -- free( e->e_name.bv_val ); -- free( e->e_nname.bv_val ); -- } -- -- e->e_name.bv_len = rlen - 1; -- e->e_nname.bv_len = nrlen - 1; -- e->e_name.bv_val = ch_malloc(rlen); -- e->e_nname.bv_val = ch_malloc(nrlen); -- ptr = e->e_name.bv_val; -- nptr = e->e_nname.bv_val; -- for ( ei = BEI(e); ei && ei->bei_id; ei=ei->bei_parent ) { -- ptr = lutil_strcopy(ptr, ei->bei_rdn.bv_val); -- nptr = lutil_strcopy(nptr, ei->bei_nrdn.bv_val); -- if ( ei->bei_parent ) { -- *ptr++ = ','; -- *nptr++ = ','; -- } -- } -- BEI(e)->bei_modrdns = max; -- if ( ptr > e->e_name.bv_val ) ptr[-1] = '\0'; -- if ( nptr > e->e_nname.bv_val ) nptr[-1] = '\0'; -- -- return 0; --} -- --/* We add two elements to the DN2ID database - a data item under the parent's -- * entryID containing the child's RDN and entryID, and an item under the -- * child's entryID containing the parent's entryID. -- */ --int --hdb_dn2id_add( -- Operation *op, -- DB_TXN *txn, -- EntryInfo *eip, -- Entry *e ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- DB *db = bdb->bi_dn2id->bdi_db; -- DBT key, data; -- ID nid; -- int rc, rlen, nrlen; -- diskNode *d; -- char *ptr; -- -- Debug( LDAP_DEBUG_TRACE, "=> hdb_dn2id_add 0x%lx: \"%s\"\n", -- e->e_id, e->e_ndn, 0 ); -- -- nrlen = dn_rdnlen( op->o_bd, &e->e_nname ); -- if (nrlen) { -- rlen = dn_rdnlen( op->o_bd, &e->e_name ); -- } else { -- nrlen = e->e_nname.bv_len; -- rlen = e->e_name.bv_len; -- } -- -- d = op->o_tmpalloc(sizeof(diskNode) + rlen + nrlen, op->o_tmpmemctx); -- d->nrdnlen[1] = nrlen & 0xff; -- d->nrdnlen[0] = (nrlen >> 8) | 0x80; -- ptr = lutil_strncopy( d->nrdn, e->e_nname.bv_val, nrlen ); -- *ptr++ = '\0'; -- ptr = lutil_strncopy( ptr, e->e_name.bv_val, rlen ); -- *ptr++ = '\0'; -- BDB_ID2DISK( e->e_id, ptr ); -- -- DBTzero(&key); -- DBTzero(&data); -- key.size = sizeof(ID); -- key.flags = DB_DBT_USERMEM; -- BDB_ID2DISK( eip->bei_id, &nid ); -- -- key.data = &nid; -- -- /* Need to make dummy root node once. Subsequent attempts -- * will fail harmlessly. -- */ -- if ( eip->bei_id == 0 ) { -- diskNode dummy = {{0, 0}, "", "", ""}; -- data.data = &dummy; -- data.size = sizeof(diskNode); -- data.flags = DB_DBT_USERMEM; -- -- db->put( db, txn, &key, &data, DB_NODUPDATA ); -- } -- -- data.data = d; -- data.size = sizeof(diskNode) + rlen + nrlen; -- data.flags = DB_DBT_USERMEM; -- -- rc = db->put( db, txn, &key, &data, DB_NODUPDATA ); -- -- if (rc == 0) { -- BDB_ID2DISK( e->e_id, &nid ); -- BDB_ID2DISK( eip->bei_id, ptr ); -- d->nrdnlen[0] ^= 0x80; -- -- rc = db->put( db, txn, &key, &data, DB_NODUPDATA ); -- } -- -- /* Update all parents' IDL cache entries */ -- if ( rc == 0 && bdb->bi_idl_cache_size ) { -- ID tmp[2]; -- char *ptr = ((char *)&tmp[1])-1; -- key.data = ptr; -- key.size = sizeof(ID)+1; -- tmp[1] = eip->bei_id; -- *ptr = DN_ONE_PREFIX; -- bdb_idl_cache_add_id( bdb, db, &key, e->e_id ); -- if ( eip->bei_parent ) { -- *ptr = DN_SUBTREE_PREFIX; -- for (; eip && eip->bei_parent->bei_id; eip = eip->bei_parent) { -- tmp[1] = eip->bei_id; -- bdb_idl_cache_add_id( bdb, db, &key, e->e_id ); -- } -- /* Handle DB with empty suffix */ -- if ( !op->o_bd->be_suffix[0].bv_len && eip ) { -- tmp[1] = eip->bei_id; -- bdb_idl_cache_add_id( bdb, db, &key, e->e_id ); -- } -- } -- } -- -- op->o_tmpfree( d, op->o_tmpmemctx ); -- Debug( LDAP_DEBUG_TRACE, "<= hdb_dn2id_add 0x%lx: %d\n", e->e_id, rc, 0 ); -- -- return rc; --} -- --int --hdb_dn2id_delete( -- Operation *op, -- DB_TXN *txn, -- EntryInfo *eip, -- Entry *e ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- DB *db = bdb->bi_dn2id->bdi_db; -- DBT key, data; -- DBC *cursor; -- diskNode *d; -- int rc; -- ID nid; -- unsigned char dlen[2]; -- -- Debug( LDAP_DEBUG_TRACE, "=> hdb_dn2id_delete 0x%lx: \"%s\"\n", -- e->e_id, e->e_ndn, 0 ); -- -- DBTzero(&key); -- key.size = sizeof(ID); -- key.ulen = key.size; -- key.flags = DB_DBT_USERMEM; -- BDB_ID2DISK( eip->bei_id, &nid ); -- -- DBTzero(&data); -- data.size = sizeof(diskNode) + BEI(e)->bei_nrdn.bv_len - sizeof(ID) - 1; -- data.ulen = data.size; -- data.dlen = data.size; -- data.flags = DB_DBT_USERMEM | DB_DBT_PARTIAL; -- -- key.data = &nid; -- -- d = op->o_tmpalloc( data.size, op->o_tmpmemctx ); -- d->nrdnlen[1] = BEI(e)->bei_nrdn.bv_len & 0xff; -- d->nrdnlen[0] = (BEI(e)->bei_nrdn.bv_len >> 8) | 0x80; -- dlen[0] = d->nrdnlen[0]; -- dlen[1] = d->nrdnlen[1]; -- memcpy( d->nrdn, BEI(e)->bei_nrdn.bv_val, BEI(e)->bei_nrdn.bv_len+1 ); -- data.data = d; -- -- rc = db->cursor( db, txn, &cursor, bdb->bi_db_opflags ); -- if ( rc ) goto func_leave; -- -- /* Delete our ID from the parent's list */ -- rc = cursor->c_get( cursor, &key, &data, DB_GET_BOTH_RANGE ); -- if ( rc == 0 ) { -- if ( dlen[1] == d->nrdnlen[1] && dlen[0] == d->nrdnlen[0] && -- !strcmp( d->nrdn, BEI(e)->bei_nrdn.bv_val )) -- rc = cursor->c_del( cursor, 0 ); -- else -- rc = DB_NOTFOUND; -- } -- -- /* Delete our ID from the tree. With sorted duplicates, this -- * will leave any child nodes still hanging around. This is OK -- * for modrdn, which will add our info back in later. -- */ -- if ( rc == 0 ) { -- BDB_ID2DISK( e->e_id, &nid ); -- rc = cursor->c_get( cursor, &key, &data, DB_SET ); -- if ( rc == 0 ) -- rc = cursor->c_del( cursor, 0 ); -- } -- -- cursor->c_close( cursor ); --func_leave: -- op->o_tmpfree( d, op->o_tmpmemctx ); -- -- /* Delete IDL cache entries */ -- if ( rc == 0 && bdb->bi_idl_cache_size ) { -- ID tmp[2]; -- char *ptr = ((char *)&tmp[1])-1; -- key.data = ptr; -- key.size = sizeof(ID)+1; -- tmp[1] = eip->bei_id; -- *ptr = DN_ONE_PREFIX; -- bdb_idl_cache_del_id( bdb, db, &key, e->e_id ); -- if ( eip ->bei_parent ) { -- *ptr = DN_SUBTREE_PREFIX; -- for (; eip && eip->bei_parent->bei_id; eip = eip->bei_parent) { -- tmp[1] = eip->bei_id; -- bdb_idl_cache_del_id( bdb, db, &key, e->e_id ); -- } -- /* Handle DB with empty suffix */ -- if ( !op->o_bd->be_suffix[0].bv_len && eip ) { -- tmp[1] = eip->bei_id; -- bdb_idl_cache_del_id( bdb, db, &key, e->e_id ); -- } -- } -- } -- Debug( LDAP_DEBUG_TRACE, "<= hdb_dn2id_delete 0x%lx: %d\n", e->e_id, rc, 0 ); -- return rc; --} -- -- --int --hdb_dn2id( -- Operation *op, -- struct berval *in, -- EntryInfo *ei, -- DB_TXN *txn, -- DBC **cursor ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- DB *db = bdb->bi_dn2id->bdi_db; -- DBT key, data; -- int rc = 0, nrlen; -- diskNode *d; -- char *ptr; -- unsigned char dlen[2]; -- ID idp, parentID; -- -- Debug( LDAP_DEBUG_TRACE, "=> hdb_dn2id(\"%s\")\n", in->bv_val, 0, 0 ); -- -- nrlen = dn_rdnlen( op->o_bd, in ); -- if (!nrlen) nrlen = in->bv_len; -- -- DBTzero(&key); -- key.size = sizeof(ID); -- key.data = &idp; -- key.ulen = sizeof(ID); -- key.flags = DB_DBT_USERMEM; -- parentID = ( ei->bei_parent != NULL ) ? ei->bei_parent->bei_id : 0; -- BDB_ID2DISK( parentID, &idp ); -- -- DBTzero(&data); -- data.size = sizeof(diskNode) + nrlen - sizeof(ID) - 1; -- data.ulen = data.size * 3; -- data.dlen = data.ulen; -- data.flags = DB_DBT_USERMEM | DB_DBT_PARTIAL; -- -- rc = db->cursor( db, txn, cursor, bdb->bi_db_opflags ); -- if ( rc ) return rc; -- -- d = op->o_tmpalloc( data.size * 3, op->o_tmpmemctx ); -- d->nrdnlen[1] = nrlen & 0xff; -- d->nrdnlen[0] = (nrlen >> 8) | 0x80; -- dlen[0] = d->nrdnlen[0]; -- dlen[1] = d->nrdnlen[1]; -- ptr = lutil_strncopy( d->nrdn, in->bv_val, nrlen ); -- *ptr = '\0'; -- data.data = d; -- -- rc = (*cursor)->c_get( *cursor, &key, &data, DB_GET_BOTH_RANGE ); -- if ( rc == 0 && (dlen[1] != d->nrdnlen[1] || dlen[0] != d->nrdnlen[0] || -- strncmp( d->nrdn, in->bv_val, nrlen ))) { -- rc = DB_NOTFOUND; -- } -- if ( rc == 0 ) { -- ptr = (char *) data.data + data.size - sizeof(ID); -- BDB_DISK2ID( ptr, &ei->bei_id ); -- ei->bei_rdn.bv_len = data.size - sizeof(diskNode) - nrlen; -- ptr = d->nrdn + nrlen + 1; -- ber_str2bv( ptr, ei->bei_rdn.bv_len, 1, &ei->bei_rdn ); -- if ( ei->bei_parent != NULL && !ei->bei_parent->bei_dkids ) { -- db_recno_t dkids; -- /* How many children does the parent have? */ -- /* FIXME: do we need to lock the parent -- * entryinfo? Seems safe... -- */ -- (*cursor)->c_count( *cursor, &dkids, 0 ); -- ei->bei_parent->bei_dkids = dkids; -- } -- } -- -- op->o_tmpfree( d, op->o_tmpmemctx ); -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_TRACE, "<= hdb_dn2id: get failed: %s (%d)\n", -- db_strerror( rc ), rc, 0 ); -- } else { -- Debug( LDAP_DEBUG_TRACE, "<= hdb_dn2id: got id=0x%lx\n", -- ei->bei_id, 0, 0 ); -- } -- -- return rc; --} -- --int --hdb_dn2id_parent( -- Operation *op, -- DB_TXN *txn, -- EntryInfo *ei, -- ID *idp ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- DB *db = bdb->bi_dn2id->bdi_db; -- DBT key, data; -- DBC *cursor; -- int rc = 0; -- diskNode *d; -- char *ptr; -- ID nid; -- -- DBTzero(&key); -- key.size = sizeof(ID); -- key.data = &nid; -- key.ulen = sizeof(ID); -- key.flags = DB_DBT_USERMEM; -- BDB_ID2DISK( ei->bei_id, &nid ); -- -- DBTzero(&data); -- data.flags = DB_DBT_USERMEM; -- -- rc = db->cursor( db, txn, &cursor, bdb->bi_db_opflags ); -- if ( rc ) return rc; -- -- data.ulen = sizeof(diskNode) + (SLAP_LDAPDN_MAXLEN * 2); -- d = op->o_tmpalloc( data.ulen, op->o_tmpmemctx ); -- data.data = d; -- -- rc = cursor->c_get( cursor, &key, &data, DB_SET ); -- if ( rc == 0 ) { -- if (d->nrdnlen[0] & 0x80) { -- rc = LDAP_OTHER; -- } else { -- db_recno_t dkids; -- ptr = (char *) data.data + data.size - sizeof(ID); -- BDB_DISK2ID( ptr, idp ); -- ei->bei_nrdn.bv_len = (d->nrdnlen[0] << 8) | d->nrdnlen[1]; -- ber_str2bv( d->nrdn, ei->bei_nrdn.bv_len, 1, &ei->bei_nrdn ); -- ei->bei_rdn.bv_len = data.size - sizeof(diskNode) - -- ei->bei_nrdn.bv_len; -- ptr = d->nrdn + ei->bei_nrdn.bv_len + 1; -- ber_str2bv( ptr, ei->bei_rdn.bv_len, 1, &ei->bei_rdn ); -- /* How many children does this node have? */ -- cursor->c_count( cursor, &dkids, 0 ); -- ei->bei_dkids = dkids; -- } -- } -- cursor->c_close( cursor ); -- op->o_tmpfree( d, op->o_tmpmemctx ); -- return rc; --} -- --int --hdb_dn2id_children( -- Operation *op, -- DB_TXN *txn, -- Entry *e ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- DB *db = bdb->bi_dn2id->bdi_db; -- DBT key, data; -- DBC *cursor; -- int rc; -- ID id; -- diskNode d; -- -- DBTzero(&key); -- key.size = sizeof(ID); -- key.data = &e->e_id; -- key.flags = DB_DBT_USERMEM; -- BDB_ID2DISK( e->e_id, &id ); -- -- /* IDL cache is in host byte order */ -- if ( bdb->bi_idl_cache_size ) { -- rc = bdb_idl_cache_get( bdb, db, &key, NULL ); -- if ( rc != LDAP_NO_SUCH_OBJECT ) { -- return rc; -- } -- } -- -- key.data = &id; -- DBTzero(&data); -- data.data = &d; -- data.ulen = sizeof(d); -- data.flags = DB_DBT_USERMEM | DB_DBT_PARTIAL; -- data.dlen = sizeof(d); -- -- rc = db->cursor( db, txn, &cursor, bdb->bi_db_opflags ); -- if ( rc ) return rc; -- -- rc = cursor->c_get( cursor, &key, &data, DB_SET ); -- if ( rc == 0 ) { -- db_recno_t dkids; -- rc = cursor->c_count( cursor, &dkids, 0 ); -- if ( rc == 0 ) { -- BEI(e)->bei_dkids = dkids; -- if ( dkids < 2 ) rc = DB_NOTFOUND; -- } -- } -- cursor->c_close( cursor ); -- return rc; --} -- --/* bdb_dn2idl: -- * We can't just use bdb_idl_fetch_key because -- * 1 - our data items are longer than just an entry ID -- * 2 - our data items are sorted alphabetically by nrdn, not by ID. -- * -- * We descend the tree recursively, so we define this cookie -- * to hold our necessary state information. The bdb_dn2idl_internal -- * function uses this cookie when calling itself. -- */ -- --struct dn2id_cookie { -- struct bdb_info *bdb; -- Operation *op; -- DB_TXN *txn; -- EntryInfo *ei; -- ID *ids; -- ID *tmp; -- ID *buf; -- DB *db; -- DBC *dbc; -- DBT key; -- DBT data; -- ID dbuf; -- ID id; -- ID nid; -- int rc; -- int depth; -- char need_sort; -- char prefix; --}; -- --static int --apply_func( -- void *data, -- void *arg ) --{ -- EntryInfo *ei = data; -- ID *idl = arg; -- -- bdb_idl_append_one( idl, ei->bei_id ); -- return 0; --} -- --static int --hdb_dn2idl_internal( -- struct dn2id_cookie *cx --) --{ -- BDB_IDL_ZERO( cx->tmp ); -- -- if ( cx->bdb->bi_idl_cache_size ) { -- char *ptr = ((char *)&cx->id)-1; -- -- cx->key.data = ptr; -- cx->key.size = sizeof(ID)+1; -- if ( cx->prefix == DN_SUBTREE_PREFIX ) { -- ID *ids = cx->depth ? cx->tmp : cx->ids; -- *ptr = cx->prefix; -- cx->rc = bdb_idl_cache_get(cx->bdb, cx->db, &cx->key, ids); -- if ( cx->rc == LDAP_SUCCESS ) { -- if ( cx->depth ) { -- bdb_idl_delete( cx->tmp, cx->id ); /* ITS#6983, drop our own ID */ -- bdb_idl_append( cx->ids, cx->tmp ); -- cx->need_sort = 1; -- } -- return cx->rc; -- } -- } -- *ptr = DN_ONE_PREFIX; -- cx->rc = bdb_idl_cache_get(cx->bdb, cx->db, &cx->key, cx->tmp); -- if ( cx->rc == LDAP_SUCCESS ) { -- goto gotit; -- } -- if ( cx->rc == DB_NOTFOUND ) { -- return cx->rc; -- } -- } -- -- bdb_cache_entryinfo_lock( cx->ei ); -- -- /* If number of kids in the cache differs from on-disk, load -- * up all the kids from the database -- */ -- if ( cx->ei->bei_ckids+1 != cx->ei->bei_dkids ) { -- EntryInfo ei; -- db_recno_t dkids = cx->ei->bei_dkids; -- ei.bei_parent = cx->ei; -- -- /* Only one thread should load the cache */ -- while ( cx->ei->bei_state & CACHE_ENTRY_ONELEVEL ) { -- bdb_cache_entryinfo_unlock( cx->ei ); -- ldap_pvt_thread_yield(); -- bdb_cache_entryinfo_lock( cx->ei ); -- if ( cx->ei->bei_ckids+1 == cx->ei->bei_dkids ) { -- goto synced; -- } -- } -- -- cx->ei->bei_state |= CACHE_ENTRY_ONELEVEL; -- -- bdb_cache_entryinfo_unlock( cx->ei ); -- -- cx->rc = cx->db->cursor( cx->db, NULL, &cx->dbc, -- cx->bdb->bi_db_opflags ); -- if ( cx->rc ) -- goto done_one; -- -- cx->data.data = &cx->dbuf; -- cx->data.ulen = sizeof(ID); -- cx->data.dlen = sizeof(ID); -- cx->data.flags = DB_DBT_USERMEM | DB_DBT_PARTIAL; -- -- /* The first item holds the parent ID. Ignore it. */ -- cx->key.data = &cx->nid; -- cx->key.size = sizeof(ID); -- cx->rc = cx->dbc->c_get( cx->dbc, &cx->key, &cx->data, DB_SET ); -- if ( cx->rc ) { -- cx->dbc->c_close( cx->dbc ); -- goto done_one; -- } -- -- /* If the on-disk count is zero we've never checked it. -- * Count it now. -- */ -- if ( !dkids ) { -- cx->dbc->c_count( cx->dbc, &dkids, 0 ); -- cx->ei->bei_dkids = dkids; -- } -- -- cx->data.data = cx->buf; -- cx->data.ulen = BDB_IDL_UM_SIZE * sizeof(ID); -- cx->data.flags = DB_DBT_USERMEM; -- -- if ( dkids > 1 ) { -- /* Fetch the rest of the IDs in a loop... */ -- while ( (cx->rc = cx->dbc->c_get( cx->dbc, &cx->key, &cx->data, -- DB_MULTIPLE | DB_NEXT_DUP )) == 0 ) { -- u_int8_t *j; -- size_t len; -- void *ptr; -- DB_MULTIPLE_INIT( ptr, &cx->data ); -- while (ptr) { -- DB_MULTIPLE_NEXT( ptr, &cx->data, j, len ); -- if (j) { -- EntryInfo *ei2; -- diskNode *d = (diskNode *)j; -- short nrlen; -- -- BDB_DISK2ID( j + len - sizeof(ID), &ei.bei_id ); -- nrlen = ((d->nrdnlen[0] ^ 0x80) << 8) | d->nrdnlen[1]; -- ei.bei_nrdn.bv_len = nrlen; -- /* nrdn/rdn are set in-place. -- * hdb_cache_load will copy them as needed -- */ -- ei.bei_nrdn.bv_val = d->nrdn; -- ei.bei_rdn.bv_len = len - sizeof(diskNode) -- - ei.bei_nrdn.bv_len; -- ei.bei_rdn.bv_val = d->nrdn + ei.bei_nrdn.bv_len + 1; -- bdb_idl_append_one( cx->tmp, ei.bei_id ); -- hdb_cache_load( cx->bdb, &ei, &ei2 ); -- } -- } -- } -- } -- -- cx->rc = cx->dbc->c_close( cx->dbc ); --done_one: -- bdb_cache_entryinfo_lock( cx->ei ); -- cx->ei->bei_state &= ~CACHE_ENTRY_ONELEVEL; -- bdb_cache_entryinfo_unlock( cx->ei ); -- if ( cx->rc ) -- return cx->rc; -- -- } else { -- /* The in-memory cache is in sync with the on-disk data. -- * do we have any kids? -- */ --synced: -- cx->rc = 0; -- if ( cx->ei->bei_ckids > 0 ) { -- /* Walk the kids tree; order is irrelevant since bdb_idl_sort -- * will sort it later. -- */ -- avl_apply( cx->ei->bei_kids, apply_func, -- cx->tmp, -1, AVL_POSTORDER ); -- } -- bdb_cache_entryinfo_unlock( cx->ei ); -- } -- -- if ( !BDB_IDL_IS_RANGE( cx->tmp ) && cx->tmp[0] > 3 ) -- bdb_idl_sort( cx->tmp, cx->buf ); -- if ( cx->bdb->bi_idl_cache_max_size && !BDB_IDL_IS_ZERO( cx->tmp )) { -- char *ptr = ((char *)&cx->id)-1; -- cx->key.data = ptr; -- cx->key.size = sizeof(ID)+1; -- *ptr = DN_ONE_PREFIX; -- bdb_idl_cache_put( cx->bdb, cx->db, &cx->key, cx->tmp, cx->rc ); -- } -- --gotit: -- if ( !BDB_IDL_IS_ZERO( cx->tmp )) { -- if ( cx->prefix == DN_SUBTREE_PREFIX ) { -- bdb_idl_append( cx->ids, cx->tmp ); -- cx->need_sort = 1; -- if ( !(cx->ei->bei_state & CACHE_ENTRY_NO_GRANDKIDS)) { -- ID *save, idcurs; -- EntryInfo *ei = cx->ei; -- int nokids = 1; -- save = cx->op->o_tmpalloc( BDB_IDL_SIZEOF( cx->tmp ), -- cx->op->o_tmpmemctx ); -- BDB_IDL_CPY( save, cx->tmp ); -- -- idcurs = 0; -- cx->depth++; -- for ( cx->id = bdb_idl_first( save, &idcurs ); -- cx->id != NOID; -- cx->id = bdb_idl_next( save, &idcurs )) { -- EntryInfo *ei2; -- cx->ei = NULL; -- if ( bdb_cache_find_id( cx->op, cx->txn, cx->id, &cx->ei, -- ID_NOENTRY, NULL )) -- continue; -- if ( cx->ei ) { -- ei2 = cx->ei; -- if ( !( ei2->bei_state & CACHE_ENTRY_NO_KIDS )) { -- BDB_ID2DISK( cx->id, &cx->nid ); -- hdb_dn2idl_internal( cx ); -- if ( !BDB_IDL_IS_ZERO( cx->tmp )) -- nokids = 0; -- } -- bdb_cache_entryinfo_lock( ei2 ); -- ei2->bei_finders--; -- bdb_cache_entryinfo_unlock( ei2 ); -- } -- } -- cx->depth--; -- cx->op->o_tmpfree( save, cx->op->o_tmpmemctx ); -- if ( nokids ) { -- bdb_cache_entryinfo_lock( ei ); -- ei->bei_state |= CACHE_ENTRY_NO_GRANDKIDS; -- bdb_cache_entryinfo_unlock( ei ); -- } -- } -- /* Make sure caller knows it had kids! */ -- cx->tmp[0]=1; -- -- cx->rc = 0; -- } else { -- BDB_IDL_CPY( cx->ids, cx->tmp ); -- } -- } -- return cx->rc; --} -- --int --hdb_dn2idl( -- Operation *op, -- DB_TXN *txn, -- struct berval *ndn, -- EntryInfo *ei, -- ID *ids, -- ID *stack ) --{ -- struct bdb_info *bdb = (struct bdb_info *)op->o_bd->be_private; -- struct dn2id_cookie cx; -- -- Debug( LDAP_DEBUG_TRACE, "=> hdb_dn2idl(\"%s\")\n", -- ndn->bv_val, 0, 0 ); -- --#ifndef BDB_MULTIPLE_SUFFIXES -- if ( op->ors_scope != LDAP_SCOPE_ONELEVEL && -- ( ei->bei_id == 0 || -- ( ei->bei_parent->bei_id == 0 && op->o_bd->be_suffix[0].bv_len ))) -- { -- BDB_IDL_ALL( bdb, ids ); -- return 0; -- } --#endif -- -- cx.id = ei->bei_id; -- BDB_ID2DISK( cx.id, &cx.nid ); -- cx.ei = ei; -- cx.bdb = bdb; -- cx.db = cx.bdb->bi_dn2id->bdi_db; -- cx.prefix = (op->ors_scope == LDAP_SCOPE_ONELEVEL) ? -- DN_ONE_PREFIX : DN_SUBTREE_PREFIX; -- cx.ids = ids; -- cx.tmp = stack; -- cx.buf = stack + BDB_IDL_UM_SIZE; -- cx.op = op; -- cx.txn = txn; -- cx.need_sort = 0; -- cx.depth = 0; -- -- if ( cx.prefix == DN_SUBTREE_PREFIX ) { -- ids[0] = 1; -- ids[1] = cx.id; -- } else { -- BDB_IDL_ZERO( ids ); -- } -- if ( cx.ei->bei_state & CACHE_ENTRY_NO_KIDS ) -- return LDAP_SUCCESS; -- -- DBTzero(&cx.key); -- cx.key.ulen = sizeof(ID); -- cx.key.size = sizeof(ID); -- cx.key.flags = DB_DBT_USERMEM; -- -- DBTzero(&cx.data); -- -- hdb_dn2idl_internal(&cx); -- if ( cx.need_sort ) { -- char *ptr = ((char *)&cx.id)-1; -- if ( !BDB_IDL_IS_RANGE( cx.ids ) && cx.ids[0] > 3 ) -- bdb_idl_sort( cx.ids, cx.tmp ); -- cx.key.data = ptr; -- cx.key.size = sizeof(ID)+1; -- *ptr = cx.prefix; -- cx.id = ei->bei_id; -- if ( cx.bdb->bi_idl_cache_max_size ) -- bdb_idl_cache_put( cx.bdb, cx.db, &cx.key, cx.ids, cx.rc ); -- } -- -- if ( cx.rc == DB_NOTFOUND ) -- cx.rc = LDAP_SUCCESS; -- -- return cx.rc; --} --#endif /* BDB_HIER */ -diff --git a/servers/slapd/back-bdb/error.c b/servers/slapd/back-bdb/error.c -deleted file mode 100644 -index cf823ec..0000000 ---- a/servers/slapd/back-bdb/error.c -+++ /dev/null -@@ -1,62 +0,0 @@ --/* error.c - BDB errcall routine */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include --#include -- --#include "slap.h" --#include "back-bdb.h" -- --#if DB_VERSION_FULL < 0x04030000 --void bdb_errcall( const char *pfx, char * msg ) --#else --void bdb_errcall( const DB_ENV *env, const char *pfx, const char * msg ) --#endif --{ --#ifdef HAVE_EBCDIC -- if ( msg[0] > 0x7f ) -- __etoa( msg ); --#endif -- Debug( LDAP_DEBUG_ANY, "bdb(%s): %s\n", pfx, msg, 0 ); --} -- --#if DB_VERSION_FULL >= 0x04030000 --void bdb_msgcall( const DB_ENV *env, const char *msg ) --{ --#ifdef HAVE_EBCDIC -- if ( msg[0] > 0x7f ) -- __etoa( msg ); --#endif -- Debug( LDAP_DEBUG_TRACE, "bdb: %s\n", msg, 0, 0 ); --} --#endif -- --#ifdef HAVE_EBCDIC -- --#undef db_strerror -- --/* Not re-entrant! */ --char *ebcdic_dberror( int rc ) --{ -- static char msg[1024]; -- -- strcpy( msg, db_strerror( rc ) ); -- __etoa( msg ); -- return msg; --} --#endif -diff --git a/servers/slapd/back-bdb/extended.c b/servers/slapd/back-bdb/extended.c -deleted file mode 100644 -index 74d85df..0000000 ---- a/servers/slapd/back-bdb/extended.c -+++ /dev/null -@@ -1,54 +0,0 @@ --/* extended.c - bdb backend extended routines */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include --#include -- --#include "back-bdb.h" --#include "lber_pvt.h" -- --static struct exop { -- struct berval *oid; -- BI_op_extended *extended; --} exop_table[] = { -- { NULL, NULL } --}; -- --int --bdb_extended( Operation *op, SlapReply *rs ) --/* struct berval *reqoid, -- struct berval *reqdata, -- char **rspoid, -- struct berval **rspdata, -- LDAPControl *** rspctrls, -- const char** text, -- BerVarray *refs --) */ --{ -- int i; -- -- for( i=0; exop_table[i].extended != NULL; i++ ) { -- if( ber_bvcmp( exop_table[i].oid, &op->oq_extended.rs_reqoid ) == 0 ) { -- return (exop_table[i].extended)( op, rs ); -- } -- } -- -- rs->sr_text = "not supported within naming context"; -- return rs->sr_err = LDAP_UNWILLING_TO_PERFORM; --} -- -diff --git a/servers/slapd/back-bdb/filterindex.c b/servers/slapd/back-bdb/filterindex.c -deleted file mode 100644 -index c04c68c..0000000 ---- a/servers/slapd/back-bdb/filterindex.c -+++ /dev/null -@@ -1,1183 +0,0 @@ --/* filterindex.c - generate the list of candidate entries from a filter */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include --#include -- --#include "back-bdb.h" --#include "idl.h" --#ifdef LDAP_COMP_MATCH --#include --#endif -- --static int presence_candidates( -- Operation *op, -- DB_TXN *rtxn, -- AttributeDescription *desc, -- ID *ids ); -- --static int equality_candidates( -- Operation *op, -- DB_TXN *rtxn, -- AttributeAssertion *ava, -- ID *ids, -- ID *tmp ); --static int inequality_candidates( -- Operation *op, -- DB_TXN *rtxn, -- AttributeAssertion *ava, -- ID *ids, -- ID *tmp, -- int gtorlt ); --static int approx_candidates( -- Operation *op, -- DB_TXN *rtxn, -- AttributeAssertion *ava, -- ID *ids, -- ID *tmp ); --static int substring_candidates( -- Operation *op, -- DB_TXN *rtxn, -- SubstringsAssertion *sub, -- ID *ids, -- ID *tmp ); -- --static int list_candidates( -- Operation *op, -- DB_TXN *rtxn, -- Filter *flist, -- int ftype, -- ID *ids, -- ID *tmp, -- ID *stack ); -- --static int --ext_candidates( -- Operation *op, -- DB_TXN *rtxn, -- MatchingRuleAssertion *mra, -- ID *ids, -- ID *tmp, -- ID *stack); -- --#ifdef LDAP_COMP_MATCH --static int --comp_candidates ( -- Operation *op, -- DB_TXN *rtxn, -- MatchingRuleAssertion *mra, -- ComponentFilter *f, -- ID *ids, -- ID *tmp, -- ID *stack); -- --static int --ava_comp_candidates ( -- Operation *op, -- DB_TXN *rtxn, -- AttributeAssertion *ava, -- AttributeAliasing *aa, -- ID *ids, -- ID *tmp, -- ID *stack); --#endif -- --int --bdb_filter_candidates( -- Operation *op, -- DB_TXN *rtxn, -- Filter *f, -- ID *ids, -- ID *tmp, -- ID *stack ) --{ -- int rc = 0; --#ifdef LDAP_COMP_MATCH -- AttributeAliasing *aa; --#endif -- Debug( LDAP_DEBUG_FILTER, "=> bdb_filter_candidates\n", 0, 0, 0 ); -- -- if ( f->f_choice & SLAPD_FILTER_UNDEFINED ) { -- BDB_IDL_ZERO( ids ); -- goto out; -- } -- -- switch ( f->f_choice ) { -- case SLAPD_FILTER_COMPUTED: -- switch( f->f_result ) { -- case SLAPD_COMPARE_UNDEFINED: -- /* This technically is not the same as FALSE, but it -- * certainly will produce no matches. -- */ -- /* FALL THRU */ -- case LDAP_COMPARE_FALSE: -- BDB_IDL_ZERO( ids ); -- break; -- case LDAP_COMPARE_TRUE: { -- struct bdb_info *bdb = (struct bdb_info *)op->o_bd->be_private; -- BDB_IDL_ALL( bdb, ids ); -- } break; -- case LDAP_SUCCESS: -- /* this is a pre-computed scope, leave it alone */ -- break; -- } -- break; -- case LDAP_FILTER_PRESENT: -- Debug( LDAP_DEBUG_FILTER, "\tPRESENT\n", 0, 0, 0 ); -- rc = presence_candidates( op, rtxn, f->f_desc, ids ); -- break; -- -- case LDAP_FILTER_EQUALITY: -- Debug( LDAP_DEBUG_FILTER, "\tEQUALITY\n", 0, 0, 0 ); --#ifdef LDAP_COMP_MATCH -- if ( is_aliased_attribute && ( aa = is_aliased_attribute ( f->f_ava->aa_desc ) ) ) { -- rc = ava_comp_candidates ( op, rtxn, f->f_ava, aa, ids, tmp, stack ); -- } -- else --#endif -- { -- rc = equality_candidates( op, rtxn, f->f_ava, ids, tmp ); -- } -- break; -- -- case LDAP_FILTER_APPROX: -- Debug( LDAP_DEBUG_FILTER, "\tAPPROX\n", 0, 0, 0 ); -- rc = approx_candidates( op, rtxn, f->f_ava, ids, tmp ); -- break; -- -- case LDAP_FILTER_SUBSTRINGS: -- Debug( LDAP_DEBUG_FILTER, "\tSUBSTRINGS\n", 0, 0, 0 ); -- rc = substring_candidates( op, rtxn, f->f_sub, ids, tmp ); -- break; -- -- case LDAP_FILTER_GE: -- /* if no GE index, use pres */ -- Debug( LDAP_DEBUG_FILTER, "\tGE\n", 0, 0, 0 ); -- if( f->f_ava->aa_desc->ad_type->sat_ordering && -- ( f->f_ava->aa_desc->ad_type->sat_ordering->smr_usage & SLAP_MR_ORDERED_INDEX ) ) -- rc = inequality_candidates( op, rtxn, f->f_ava, ids, tmp, LDAP_FILTER_GE ); -- else -- rc = presence_candidates( op, rtxn, f->f_ava->aa_desc, ids ); -- break; -- -- case LDAP_FILTER_LE: -- /* if no LE index, use pres */ -- Debug( LDAP_DEBUG_FILTER, "\tLE\n", 0, 0, 0 ); -- if( f->f_ava->aa_desc->ad_type->sat_ordering && -- ( f->f_ava->aa_desc->ad_type->sat_ordering->smr_usage & SLAP_MR_ORDERED_INDEX ) ) -- rc = inequality_candidates( op, rtxn, f->f_ava, ids, tmp, LDAP_FILTER_LE ); -- else -- rc = presence_candidates( op, rtxn, f->f_ava->aa_desc, ids ); -- break; -- -- case LDAP_FILTER_NOT: -- /* no indexing to support NOT filters */ -- Debug( LDAP_DEBUG_FILTER, "\tNOT\n", 0, 0, 0 ); -- { struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- BDB_IDL_ALL( bdb, ids ); -- } -- break; -- -- case LDAP_FILTER_AND: -- Debug( LDAP_DEBUG_FILTER, "\tAND\n", 0, 0, 0 ); -- rc = list_candidates( op, rtxn, -- f->f_and, LDAP_FILTER_AND, ids, tmp, stack ); -- break; -- -- case LDAP_FILTER_OR: -- Debug( LDAP_DEBUG_FILTER, "\tOR\n", 0, 0, 0 ); -- rc = list_candidates( op, rtxn, -- f->f_or, LDAP_FILTER_OR, ids, tmp, stack ); -- break; -- case LDAP_FILTER_EXT: -- Debug( LDAP_DEBUG_FILTER, "\tEXT\n", 0, 0, 0 ); -- rc = ext_candidates( op, rtxn, f->f_mra, ids, tmp, stack ); -- break; -- default: -- Debug( LDAP_DEBUG_FILTER, "\tUNKNOWN %lu\n", -- (unsigned long) f->f_choice, 0, 0 ); -- /* Must not return NULL, otherwise extended filters break */ -- { struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- BDB_IDL_ALL( bdb, ids ); -- } -- } -- --out: -- Debug( LDAP_DEBUG_FILTER, -- "<= bdb_filter_candidates: id=%ld first=%ld last=%ld\n", -- (long) ids[0], -- (long) BDB_IDL_FIRST( ids ), -- (long) BDB_IDL_LAST( ids ) ); -- -- return rc; --} -- --#ifdef LDAP_COMP_MATCH --static int --comp_list_candidates( -- Operation *op, -- DB_TXN *rtxn, -- MatchingRuleAssertion* mra, -- ComponentFilter *flist, -- int ftype, -- ID *ids, -- ID *tmp, -- ID *save ) --{ -- int rc = 0; -- ComponentFilter *f; -- -- Debug( LDAP_DEBUG_FILTER, "=> comp_list_candidates 0x%x\n", ftype, 0, 0 ); -- for ( f = flist; f != NULL; f = f->cf_next ) { -- /* ignore precomputed scopes */ -- if ( f->cf_choice == SLAPD_FILTER_COMPUTED && -- f->cf_result == LDAP_SUCCESS ) { -- continue; -- } -- BDB_IDL_ZERO( save ); -- rc = comp_candidates( op, rtxn, mra, f, save, tmp, save+BDB_IDL_UM_SIZE ); -- -- if ( rc != 0 ) { -- if ( ftype == LDAP_COMP_FILTER_AND ) { -- rc = 0; -- continue; -- } -- break; -- } -- -- if ( ftype == LDAP_COMP_FILTER_AND ) { -- if ( f == flist ) { -- BDB_IDL_CPY( ids, save ); -- } else { -- bdb_idl_intersection( ids, save ); -- } -- if( BDB_IDL_IS_ZERO( ids ) ) -- break; -- } else { -- if ( f == flist ) { -- BDB_IDL_CPY( ids, save ); -- } else { -- bdb_idl_union( ids, save ); -- } -- } -- } -- -- if( rc == LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_FILTER, -- "<= comp_list_candidates: id=%ld first=%ld last=%ld\n", -- (long) ids[0], -- (long) BDB_IDL_FIRST(ids), -- (long) BDB_IDL_LAST(ids) ); -- -- } else { -- Debug( LDAP_DEBUG_FILTER, -- "<= comp_list_candidates: undefined rc=%d\n", -- rc, 0, 0 ); -- } -- -- return rc; --} -- --static int --comp_equality_candidates ( -- Operation *op, -- DB_TXN *rtxn, -- MatchingRuleAssertion *mra, -- ComponentAssertion *ca, -- ID *ids, -- ID *tmp, -- ID *stack) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- DB *db; -- int i; -- int rc; -- slap_mask_t mask; -- struct berval prefix = {0, NULL}; -- struct berval *keys = NULL; -- MatchingRule *mr = mra->ma_rule; -- Syntax *sat_syntax; -- ComponentReference* cr_list, *cr; -- AttrInfo *ai; -- -- BDB_IDL_ALL( bdb, ids ); -- -- if ( !ca->ca_comp_ref ) -- return 0; -- -- ai = bdb_attr_mask( op->o_bd->be_private, mra->ma_desc ); -- if( ai ) { -- cr_list = ai->ai_cr; -- } -- else { -- return 0; -- } -- /* find a component reference to be indexed */ -- sat_syntax = ca->ca_ma_rule->smr_syntax; -- for ( cr = cr_list ; cr ; cr = cr->cr_next ) { -- if ( cr->cr_string.bv_len == ca->ca_comp_ref->cr_string.bv_len && -- strncmp( cr->cr_string.bv_val, ca->ca_comp_ref->cr_string.bv_val,cr->cr_string.bv_len ) == 0 ) -- break; -- } -- -- if ( !cr ) -- return 0; -- -- rc = bdb_index_param( op->o_bd, mra->ma_desc, LDAP_FILTER_EQUALITY, -- &db, &mask, &prefix ); -- -- if( rc != LDAP_SUCCESS ) { -- return 0; -- } -- -- if( !mr ) { -- return 0; -- } -- -- if( !mr->smr_filter ) { -- return 0; -- } -- -- rc = (ca->ca_ma_rule->smr_filter)( -- LDAP_FILTER_EQUALITY, -- cr->cr_indexmask, -- sat_syntax, -- ca->ca_ma_rule, -- &prefix, -- &ca->ca_ma_value, -- &keys, op->o_tmpmemctx ); -- -- if( rc != LDAP_SUCCESS ) { -- return 0; -- } -- -- if( keys == NULL ) { -- return 0; -- } -- for ( i= 0; keys[i].bv_val != NULL; i++ ) { -- rc = bdb_key_read( op->o_bd, db, rtxn, &keys[i], tmp, NULL, 0 ); -- -- if( rc == DB_NOTFOUND ) { -- BDB_IDL_ZERO( ids ); -- rc = 0; -- break; -- } else if( rc != LDAP_SUCCESS ) { -- break; -- } -- -- if( BDB_IDL_IS_ZERO( tmp ) ) { -- BDB_IDL_ZERO( ids ); -- break; -- } -- -- if ( i == 0 ) { -- BDB_IDL_CPY( ids, tmp ); -- } else { -- bdb_idl_intersection( ids, tmp ); -- } -- -- if( BDB_IDL_IS_ZERO( ids ) ) -- break; -- } -- ber_bvarray_free_x( keys, op->o_tmpmemctx ); -- -- Debug( LDAP_DEBUG_TRACE, -- "<= comp_equality_candidates: id=%ld, first=%ld, last=%ld\n", -- (long) ids[0], -- (long) BDB_IDL_FIRST(ids), -- (long) BDB_IDL_LAST(ids) ); -- return( rc ); --} -- --static int --ava_comp_candidates ( -- Operation *op, -- DB_TXN *rtxn, -- AttributeAssertion *ava, -- AttributeAliasing *aa, -- ID *ids, -- ID *tmp, -- ID *stack ) --{ -- MatchingRuleAssertion mra; -- -- mra.ma_rule = ava->aa_desc->ad_type->sat_equality; -- if ( !mra.ma_rule ) { -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- BDB_IDL_ALL( bdb, ids ); -- return 0; -- } -- mra.ma_desc = aa->aa_aliased_ad; -- mra.ma_rule = ava->aa_desc->ad_type->sat_equality; -- -- return comp_candidates ( op, rtxn, &mra, ava->aa_cf, ids, tmp, stack ); --} -- --static int --comp_candidates ( -- Operation *op, -- DB_TXN *rtxn, -- MatchingRuleAssertion *mra, -- ComponentFilter *f, -- ID *ids, -- ID *tmp, -- ID *stack) --{ -- int rc; -- -- if ( !f ) return LDAP_PROTOCOL_ERROR; -- -- Debug( LDAP_DEBUG_FILTER, "comp_candidates\n", 0, 0, 0 ); -- switch ( f->cf_choice ) { -- case SLAPD_FILTER_COMPUTED: -- rc = f->cf_result; -- break; -- case LDAP_COMP_FILTER_AND: -- rc = comp_list_candidates( op, rtxn, mra, f->cf_and, LDAP_COMP_FILTER_AND, ids, tmp, stack ); -- break; -- case LDAP_COMP_FILTER_OR: -- rc = comp_list_candidates( op, rtxn, mra, f->cf_or, LDAP_COMP_FILTER_OR, ids, tmp, stack ); -- break; -- case LDAP_COMP_FILTER_NOT: -- /* No component indexing supported for NOT filter */ -- Debug( LDAP_DEBUG_FILTER, "\tComponent NOT\n", 0, 0, 0 ); -- { -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- BDB_IDL_ALL( bdb, ids ); -- } -- rc = LDAP_PROTOCOL_ERROR; -- break; -- case LDAP_COMP_FILTER_ITEM: -- rc = comp_equality_candidates( op, rtxn, mra, f->cf_ca, ids, tmp, stack ); -- break; -- default: -- { -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- BDB_IDL_ALL( bdb, ids ); -- } -- rc = LDAP_PROTOCOL_ERROR; -- } -- -- return( rc ); --} --#endif -- --static int --ext_candidates( -- Operation *op, -- DB_TXN *rtxn, -- MatchingRuleAssertion *mra, -- ID *ids, -- ID *tmp, -- ID *stack) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- --#ifdef LDAP_COMP_MATCH -- /* -- * Currently Only Component Indexing for componentFilterMatch is supported -- * Indexing for an extensible filter is not supported yet -- */ -- if ( mra->ma_cf ) { -- return comp_candidates ( op, rtxn, mra, mra->ma_cf, ids, tmp, stack); -- } --#endif -- if ( mra->ma_desc == slap_schema.si_ad_entryDN ) { -- int rc; -- EntryInfo *ei; -- -- BDB_IDL_ZERO( ids ); -- if ( mra->ma_rule == slap_schema.si_mr_distinguishedNameMatch ) { -- ei = NULL; -- rc = bdb_cache_find_ndn( op, rtxn, &mra->ma_value, &ei ); -- if ( rc == LDAP_SUCCESS ) -- bdb_idl_insert( ids, ei->bei_id ); -- if ( ei ) -- bdb_cache_entryinfo_unlock( ei ); -- return 0; -- } else if ( mra->ma_rule && mra->ma_rule->smr_match == -- dnRelativeMatch && dnIsSuffix( &mra->ma_value, -- op->o_bd->be_nsuffix )) { -- int scope; -- if ( mra->ma_rule == slap_schema.si_mr_dnSuperiorMatch ) { -- struct berval pdn; -- ei = NULL; -- dnParent( &mra->ma_value, &pdn ); -- bdb_cache_find_ndn( op, rtxn, &pdn, &ei ); -- if ( ei ) { -- bdb_cache_entryinfo_unlock( ei ); -- while ( ei && ei->bei_id ) { -- bdb_idl_insert( ids, ei->bei_id ); -- ei = ei->bei_parent; -- } -- } -- return 0; -- } -- if ( mra->ma_rule == slap_schema.si_mr_dnSubtreeMatch ) -- scope = LDAP_SCOPE_SUBTREE; -- else if ( mra->ma_rule == slap_schema.si_mr_dnOneLevelMatch ) -- scope = LDAP_SCOPE_ONELEVEL; -- else if ( mra->ma_rule == slap_schema.si_mr_dnSubordinateMatch ) -- scope = LDAP_SCOPE_SUBORDINATE; -- else -- scope = LDAP_SCOPE_BASE; -- if ( scope > LDAP_SCOPE_BASE ) { -- ei = NULL; -- rc = bdb_cache_find_ndn( op, rtxn, &mra->ma_value, &ei ); -- if ( ei ) -- bdb_cache_entryinfo_unlock( ei ); -- if ( rc == LDAP_SUCCESS ) { -- int sc = op->ors_scope; -- op->ors_scope = scope; -- rc = bdb_dn2idl( op, rtxn, &mra->ma_value, ei, ids, -- stack ); -- op->ors_scope = sc; -- } -- return 0; -- } -- } -- } -- -- BDB_IDL_ALL( bdb, ids ); -- return 0; --} -- --static int --list_candidates( -- Operation *op, -- DB_TXN *rtxn, -- Filter *flist, -- int ftype, -- ID *ids, -- ID *tmp, -- ID *save ) --{ -- int rc = 0; -- Filter *f; -- -- Debug( LDAP_DEBUG_FILTER, "=> bdb_list_candidates 0x%x\n", ftype, 0, 0 ); -- for ( f = flist; f != NULL; f = f->f_next ) { -- /* ignore precomputed scopes */ -- if ( f->f_choice == SLAPD_FILTER_COMPUTED && -- f->f_result == LDAP_SUCCESS ) { -- continue; -- } -- BDB_IDL_ZERO( save ); -- rc = bdb_filter_candidates( op, rtxn, f, save, tmp, -- save+BDB_IDL_UM_SIZE ); -- -- if ( rc != 0 ) { -- if ( rc == DB_LOCK_DEADLOCK ) -- return rc; -- -- if ( ftype == LDAP_FILTER_AND ) { -- rc = 0; -- continue; -- } -- break; -- } -- -- -- if ( ftype == LDAP_FILTER_AND ) { -- if ( f == flist ) { -- BDB_IDL_CPY( ids, save ); -- } else { -- bdb_idl_intersection( ids, save ); -- } -- if( BDB_IDL_IS_ZERO( ids ) ) -- break; -- } else { -- if ( f == flist ) { -- BDB_IDL_CPY( ids, save ); -- } else { -- bdb_idl_union( ids, save ); -- } -- } -- } -- -- if( rc == LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_FILTER, -- "<= bdb_list_candidates: id=%ld first=%ld last=%ld\n", -- (long) ids[0], -- (long) BDB_IDL_FIRST(ids), -- (long) BDB_IDL_LAST(ids) ); -- -- } else { -- Debug( LDAP_DEBUG_FILTER, -- "<= bdb_list_candidates: undefined rc=%d\n", -- rc, 0, 0 ); -- } -- -- return rc; --} -- --static int --presence_candidates( -- Operation *op, -- DB_TXN *rtxn, -- AttributeDescription *desc, -- ID *ids ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- DB *db; -- int rc; -- slap_mask_t mask; -- struct berval prefix = {0, NULL}; -- -- Debug( LDAP_DEBUG_TRACE, "=> bdb_presence_candidates (%s)\n", -- desc->ad_cname.bv_val, 0, 0 ); -- -- BDB_IDL_ALL( bdb, ids ); -- -- if( desc == slap_schema.si_ad_objectClass ) { -- return 0; -- } -- -- rc = bdb_index_param( op->o_bd, desc, LDAP_FILTER_PRESENT, -- &db, &mask, &prefix ); -- -- if( rc == LDAP_INAPPROPRIATE_MATCHING ) { -- /* not indexed */ -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_presence_candidates: (%s) not indexed\n", -- desc->ad_cname.bv_val, 0, 0 ); -- return 0; -- } -- -- if( rc != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_presence_candidates: (%s) index_param " -- "returned=%d\n", -- desc->ad_cname.bv_val, rc, 0 ); -- return 0; -- } -- -- if( prefix.bv_val == NULL ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_presence_candidates: (%s) no prefix\n", -- desc->ad_cname.bv_val, 0, 0 ); -- return -1; -- } -- -- rc = bdb_key_read( op->o_bd, db, rtxn, &prefix, ids, NULL, 0 ); -- -- if( rc == DB_NOTFOUND ) { -- BDB_IDL_ZERO( ids ); -- rc = 0; -- } else if( rc != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_presense_candidates: (%s) " -- "key read failed (%d)\n", -- desc->ad_cname.bv_val, rc, 0 ); -- goto done; -- } -- -- Debug(LDAP_DEBUG_TRACE, -- "<= bdb_presence_candidates: id=%ld first=%ld last=%ld\n", -- (long) ids[0], -- (long) BDB_IDL_FIRST(ids), -- (long) BDB_IDL_LAST(ids) ); -- --done: -- return rc; --} -- --static int --equality_candidates( -- Operation *op, -- DB_TXN *rtxn, -- AttributeAssertion *ava, -- ID *ids, -- ID *tmp ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- DB *db; -- int i; -- int rc; -- slap_mask_t mask; -- struct berval prefix = {0, NULL}; -- struct berval *keys = NULL; -- MatchingRule *mr; -- -- Debug( LDAP_DEBUG_TRACE, "=> bdb_equality_candidates (%s)\n", -- ava->aa_desc->ad_cname.bv_val, 0, 0 ); -- -- if ( ava->aa_desc == slap_schema.si_ad_entryDN ) { -- EntryInfo *ei = NULL; -- rc = bdb_cache_find_ndn( op, rtxn, &ava->aa_value, &ei ); -- if ( rc == LDAP_SUCCESS ) { -- /* exactly one ID can match */ -- ids[0] = 1; -- ids[1] = ei->bei_id; -- } -- if ( ei ) { -- bdb_cache_entryinfo_unlock( ei ); -- } -- if ( rc == DB_NOTFOUND ) { -- BDB_IDL_ZERO( ids ); -- rc = 0; -- } -- return rc; -- } -- -- BDB_IDL_ALL( bdb, ids ); -- -- rc = bdb_index_param( op->o_bd, ava->aa_desc, LDAP_FILTER_EQUALITY, -- &db, &mask, &prefix ); -- -- if ( rc == LDAP_INAPPROPRIATE_MATCHING ) { -- Debug( LDAP_DEBUG_ANY, -- "<= bdb_equality_candidates: (%s) not indexed\n", -- ava->aa_desc->ad_cname.bv_val, 0, 0 ); -- return 0; -- } -- -- if( rc != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_ANY, -- "<= bdb_equality_candidates: (%s) " -- "index_param failed (%d)\n", -- ava->aa_desc->ad_cname.bv_val, rc, 0 ); -- return 0; -- } -- -- mr = ava->aa_desc->ad_type->sat_equality; -- if( !mr ) { -- return 0; -- } -- -- if( !mr->smr_filter ) { -- return 0; -- } -- -- rc = (mr->smr_filter)( -- LDAP_FILTER_EQUALITY, -- mask, -- ava->aa_desc->ad_type->sat_syntax, -- mr, -- &prefix, -- &ava->aa_value, -- &keys, op->o_tmpmemctx ); -- -- if( rc != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_equality_candidates: (%s, %s) " -- "MR filter failed (%d)\n", -- prefix.bv_val, ava->aa_desc->ad_cname.bv_val, rc ); -- return 0; -- } -- -- if( keys == NULL ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_equality_candidates: (%s) no keys\n", -- ava->aa_desc->ad_cname.bv_val, 0, 0 ); -- return 0; -- } -- -- for ( i= 0; keys[i].bv_val != NULL; i++ ) { -- rc = bdb_key_read( op->o_bd, db, rtxn, &keys[i], tmp, NULL, 0 ); -- -- if( rc == DB_NOTFOUND ) { -- BDB_IDL_ZERO( ids ); -- rc = 0; -- break; -- } else if( rc != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_equality_candidates: (%s) " -- "key read failed (%d)\n", -- ava->aa_desc->ad_cname.bv_val, rc, 0 ); -- break; -- } -- -- if( BDB_IDL_IS_ZERO( tmp ) ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_equality_candidates: (%s) NULL\n", -- ava->aa_desc->ad_cname.bv_val, 0, 0 ); -- BDB_IDL_ZERO( ids ); -- break; -- } -- -- if ( i == 0 ) { -- BDB_IDL_CPY( ids, tmp ); -- } else { -- bdb_idl_intersection( ids, tmp ); -- } -- -- if( BDB_IDL_IS_ZERO( ids ) ) -- break; -- } -- -- ber_bvarray_free_x( keys, op->o_tmpmemctx ); -- -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_equality_candidates: id=%ld, first=%ld, last=%ld\n", -- (long) ids[0], -- (long) BDB_IDL_FIRST(ids), -- (long) BDB_IDL_LAST(ids) ); -- return( rc ); --} -- -- --static int --approx_candidates( -- Operation *op, -- DB_TXN *rtxn, -- AttributeAssertion *ava, -- ID *ids, -- ID *tmp ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- DB *db; -- int i; -- int rc; -- slap_mask_t mask; -- struct berval prefix = {0, NULL}; -- struct berval *keys = NULL; -- MatchingRule *mr; -- -- Debug( LDAP_DEBUG_TRACE, "=> bdb_approx_candidates (%s)\n", -- ava->aa_desc->ad_cname.bv_val, 0, 0 ); -- -- BDB_IDL_ALL( bdb, ids ); -- -- rc = bdb_index_param( op->o_bd, ava->aa_desc, LDAP_FILTER_APPROX, -- &db, &mask, &prefix ); -- -- if ( rc == LDAP_INAPPROPRIATE_MATCHING ) { -- Debug( LDAP_DEBUG_ANY, -- "<= bdb_approx_candidates: (%s) not indexed\n", -- ava->aa_desc->ad_cname.bv_val, 0, 0 ); -- return 0; -- } -- -- if( rc != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_ANY, -- "<= bdb_approx_candidates: (%s) " -- "index_param failed (%d)\n", -- ava->aa_desc->ad_cname.bv_val, rc, 0 ); -- return 0; -- } -- -- mr = ava->aa_desc->ad_type->sat_approx; -- if( !mr ) { -- /* no approx matching rule, try equality matching rule */ -- mr = ava->aa_desc->ad_type->sat_equality; -- } -- -- if( !mr ) { -- return 0; -- } -- -- if( !mr->smr_filter ) { -- return 0; -- } -- -- rc = (mr->smr_filter)( -- LDAP_FILTER_APPROX, -- mask, -- ava->aa_desc->ad_type->sat_syntax, -- mr, -- &prefix, -- &ava->aa_value, -- &keys, op->o_tmpmemctx ); -- -- if( rc != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_approx_candidates: (%s, %s) " -- "MR filter failed (%d)\n", -- prefix.bv_val, ava->aa_desc->ad_cname.bv_val, rc ); -- return 0; -- } -- -- if( keys == NULL ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_approx_candidates: (%s) no keys (%s)\n", -- prefix.bv_val, ava->aa_desc->ad_cname.bv_val, 0 ); -- return 0; -- } -- -- for ( i= 0; keys[i].bv_val != NULL; i++ ) { -- rc = bdb_key_read( op->o_bd, db, rtxn, &keys[i], tmp, NULL, 0 ); -- -- if( rc == DB_NOTFOUND ) { -- BDB_IDL_ZERO( ids ); -- rc = 0; -- break; -- } else if( rc != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_approx_candidates: (%s) " -- "key read failed (%d)\n", -- ava->aa_desc->ad_cname.bv_val, rc, 0 ); -- break; -- } -- -- if( BDB_IDL_IS_ZERO( tmp ) ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_approx_candidates: (%s) NULL\n", -- ava->aa_desc->ad_cname.bv_val, 0, 0 ); -- BDB_IDL_ZERO( ids ); -- break; -- } -- -- if ( i == 0 ) { -- BDB_IDL_CPY( ids, tmp ); -- } else { -- bdb_idl_intersection( ids, tmp ); -- } -- -- if( BDB_IDL_IS_ZERO( ids ) ) -- break; -- } -- -- ber_bvarray_free_x( keys, op->o_tmpmemctx ); -- -- Debug( LDAP_DEBUG_TRACE, "<= bdb_approx_candidates %ld, first=%ld, last=%ld\n", -- (long) ids[0], -- (long) BDB_IDL_FIRST(ids), -- (long) BDB_IDL_LAST(ids) ); -- return( rc ); --} -- --static int --substring_candidates( -- Operation *op, -- DB_TXN *rtxn, -- SubstringsAssertion *sub, -- ID *ids, -- ID *tmp ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- DB *db; -- int i; -- int rc; -- slap_mask_t mask; -- struct berval prefix = {0, NULL}; -- struct berval *keys = NULL; -- MatchingRule *mr; -- -- Debug( LDAP_DEBUG_TRACE, "=> bdb_substring_candidates (%s)\n", -- sub->sa_desc->ad_cname.bv_val, 0, 0 ); -- -- BDB_IDL_ALL( bdb, ids ); -- -- rc = bdb_index_param( op->o_bd, sub->sa_desc, LDAP_FILTER_SUBSTRINGS, -- &db, &mask, &prefix ); -- -- if ( rc == LDAP_INAPPROPRIATE_MATCHING ) { -- Debug( LDAP_DEBUG_ANY, -- "<= bdb_substring_candidates: (%s) not indexed\n", -- sub->sa_desc->ad_cname.bv_val, 0, 0 ); -- return 0; -- } -- -- if( rc != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_ANY, -- "<= bdb_substring_candidates: (%s) " -- "index_param failed (%d)\n", -- sub->sa_desc->ad_cname.bv_val, rc, 0 ); -- return 0; -- } -- -- mr = sub->sa_desc->ad_type->sat_substr; -- -- if( !mr ) { -- return 0; -- } -- -- if( !mr->smr_filter ) { -- return 0; -- } -- -- rc = (mr->smr_filter)( -- LDAP_FILTER_SUBSTRINGS, -- mask, -- sub->sa_desc->ad_type->sat_syntax, -- mr, -- &prefix, -- sub, -- &keys, op->o_tmpmemctx ); -- -- if( rc != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_substring_candidates: (%s) " -- "MR filter failed (%d)\n", -- sub->sa_desc->ad_cname.bv_val, rc, 0 ); -- return 0; -- } -- -- if( keys == NULL ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_substring_candidates: (0x%04lx) no keys (%s)\n", -- mask, sub->sa_desc->ad_cname.bv_val, 0 ); -- return 0; -- } -- -- for ( i= 0; keys[i].bv_val != NULL; i++ ) { -- rc = bdb_key_read( op->o_bd, db, rtxn, &keys[i], tmp, NULL, 0 ); -- -- if( rc == DB_NOTFOUND ) { -- BDB_IDL_ZERO( ids ); -- rc = 0; -- break; -- } else if( rc != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_substring_candidates: (%s) " -- "key read failed (%d)\n", -- sub->sa_desc->ad_cname.bv_val, rc, 0 ); -- break; -- } -- -- if( BDB_IDL_IS_ZERO( tmp ) ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_substring_candidates: (%s) NULL\n", -- sub->sa_desc->ad_cname.bv_val, 0, 0 ); -- BDB_IDL_ZERO( ids ); -- break; -- } -- -- if ( i == 0 ) { -- BDB_IDL_CPY( ids, tmp ); -- } else { -- bdb_idl_intersection( ids, tmp ); -- } -- -- if( BDB_IDL_IS_ZERO( ids ) ) -- break; -- } -- -- ber_bvarray_free_x( keys, op->o_tmpmemctx ); -- -- Debug( LDAP_DEBUG_TRACE, "<= bdb_substring_candidates: %ld, first=%ld, last=%ld\n", -- (long) ids[0], -- (long) BDB_IDL_FIRST(ids), -- (long) BDB_IDL_LAST(ids) ); -- return( rc ); --} -- --static int --inequality_candidates( -- Operation *op, -- DB_TXN *rtxn, -- AttributeAssertion *ava, -- ID *ids, -- ID *tmp, -- int gtorlt ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- DB *db; -- int rc; -- slap_mask_t mask; -- struct berval prefix = {0, NULL}; -- struct berval *keys = NULL; -- MatchingRule *mr; -- DBC * cursor = NULL; -- -- Debug( LDAP_DEBUG_TRACE, "=> bdb_inequality_candidates (%s)\n", -- ava->aa_desc->ad_cname.bv_val, 0, 0 ); -- -- BDB_IDL_ALL( bdb, ids ); -- -- rc = bdb_index_param( op->o_bd, ava->aa_desc, LDAP_FILTER_EQUALITY, -- &db, &mask, &prefix ); -- -- if ( rc == LDAP_INAPPROPRIATE_MATCHING ) { -- Debug( LDAP_DEBUG_ANY, -- "<= bdb_inequality_candidates: (%s) not indexed\n", -- ava->aa_desc->ad_cname.bv_val, 0, 0 ); -- return 0; -- } -- -- if( rc != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_ANY, -- "<= bdb_inequality_candidates: (%s) " -- "index_param failed (%d)\n", -- ava->aa_desc->ad_cname.bv_val, rc, 0 ); -- return 0; -- } -- -- mr = ava->aa_desc->ad_type->sat_equality; -- if( !mr ) { -- return 0; -- } -- -- if( !mr->smr_filter ) { -- return 0; -- } -- -- rc = (mr->smr_filter)( -- LDAP_FILTER_EQUALITY, -- mask, -- ava->aa_desc->ad_type->sat_syntax, -- mr, -- &prefix, -- &ava->aa_value, -- &keys, op->o_tmpmemctx ); -- -- if( rc != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_inequality_candidates: (%s, %s) " -- "MR filter failed (%d)\n", -- prefix.bv_val, ava->aa_desc->ad_cname.bv_val, rc ); -- return 0; -- } -- -- if( keys == NULL ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_inequality_candidates: (%s) no keys\n", -- ava->aa_desc->ad_cname.bv_val, 0, 0 ); -- return 0; -- } -- -- BDB_IDL_ZERO( ids ); -- while(1) { -- rc = bdb_key_read( op->o_bd, db, rtxn, &keys[0], tmp, &cursor, gtorlt ); -- -- if( rc == DB_NOTFOUND ) { -- rc = 0; -- break; -- } else if( rc != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_inequality_candidates: (%s) " -- "key read failed (%d)\n", -- ava->aa_desc->ad_cname.bv_val, rc, 0 ); -- break; -- } -- -- if( BDB_IDL_IS_ZERO( tmp ) ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_inequality_candidates: (%s) NULL\n", -- ava->aa_desc->ad_cname.bv_val, 0, 0 ); -- break; -- } -- -- bdb_idl_union( ids, tmp ); -- -- if( op->ors_limit && op->ors_limit->lms_s_unchecked != -1 && -- BDB_IDL_N( ids ) >= (unsigned) op->ors_limit->lms_s_unchecked ) { -- cursor->c_close( cursor ); -- break; -- } -- } -- ber_bvarray_free_x( keys, op->o_tmpmemctx ); -- -- Debug( LDAP_DEBUG_TRACE, -- "<= bdb_inequality_candidates: id=%ld, first=%ld, last=%ld\n", -- (long) ids[0], -- (long) BDB_IDL_FIRST(ids), -- (long) BDB_IDL_LAST(ids) ); -- return( rc ); --} -diff --git a/servers/slapd/back-bdb/id2entry.c b/servers/slapd/back-bdb/id2entry.c -deleted file mode 100644 -index cc00098..0000000 ---- a/servers/slapd/back-bdb/id2entry.c -+++ /dev/null -@@ -1,446 +0,0 @@ --/* id2entry.c - routines to deal with the id2entry database */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include --#include --#include -- --#include "back-bdb.h" -- --static int bdb_id2entry_put( -- BackendDB *be, -- DB_TXN *tid, -- Entry *e, -- int flag ) --{ -- struct bdb_info *bdb = (struct bdb_info *) be->be_private; -- DB *db = bdb->bi_id2entry->bdi_db; -- DBT key, data; -- struct berval bv; -- int rc; -- ID nid; --#ifdef BDB_HIER -- struct berval odn, ondn; -- -- /* We only store rdns, and they go in the dn2id database. */ -- -- odn = e->e_name; ondn = e->e_nname; -- -- e->e_name = slap_empty_bv; -- e->e_nname = slap_empty_bv; --#endif -- DBTzero( &key ); -- -- /* Store ID in BigEndian format */ -- key.data = &nid; -- key.size = sizeof(ID); -- BDB_ID2DISK( e->e_id, &nid ); -- -- rc = entry_encode( e, &bv ); --#ifdef BDB_HIER -- e->e_name = odn; e->e_nname = ondn; --#endif -- if( rc != LDAP_SUCCESS ) { -- return -1; -- } -- -- DBTzero( &data ); -- bv2DBT( &bv, &data ); -- -- rc = db->put( db, tid, &key, &data, flag ); -- -- free( bv.bv_val ); -- return rc; --} -- --/* -- * This routine adds (or updates) an entry on disk. -- * The cache should be already be updated. -- */ -- -- --int bdb_id2entry_add( -- BackendDB *be, -- DB_TXN *tid, -- Entry *e ) --{ -- return bdb_id2entry_put(be, tid, e, DB_NOOVERWRITE); --} -- --int bdb_id2entry_update( -- BackendDB *be, -- DB_TXN *tid, -- Entry *e ) --{ -- return bdb_id2entry_put(be, tid, e, 0); --} -- --int bdb_id2entry( -- BackendDB *be, -- DB_TXN *tid, -- ID id, -- Entry **e ) --{ -- struct bdb_info *bdb = (struct bdb_info *) be->be_private; -- DB *db = bdb->bi_id2entry->bdi_db; -- DBT key, data; -- DBC *cursor; -- EntryHeader eh; -- char buf[16]; -- int rc = 0, off; -- ID nid; -- -- *e = NULL; -- -- DBTzero( &key ); -- key.data = &nid; -- key.size = sizeof(ID); -- BDB_ID2DISK( id, &nid ); -- -- DBTzero( &data ); -- data.flags = DB_DBT_USERMEM | DB_DBT_PARTIAL; -- -- /* fetch it */ -- rc = db->cursor( db, tid, &cursor, bdb->bi_db_opflags ); -- if ( rc ) return rc; -- -- /* Get the nattrs / nvals counts first */ -- data.ulen = data.dlen = sizeof(buf); -- data.data = buf; -- rc = cursor->c_get( cursor, &key, &data, DB_SET ); -- if ( rc ) goto finish; -- -- -- eh.bv.bv_val = buf; -- eh.bv.bv_len = data.size; -- rc = entry_header( &eh ); -- if ( rc ) goto finish; -- -- if ( eh.nvals ) { -- /* Get the size */ -- data.flags ^= DB_DBT_PARTIAL; -- data.ulen = 0; -- rc = cursor->c_get( cursor, &key, &data, DB_CURRENT ); -- if ( rc != DB_BUFFER_SMALL ) goto finish; -- -- /* Allocate a block and retrieve the data */ -- off = eh.data - eh.bv.bv_val; -- eh.bv.bv_len = eh.nvals * sizeof( struct berval ) + data.size; -- eh.bv.bv_val = ch_malloc( eh.bv.bv_len ); -- eh.data = eh.bv.bv_val + eh.nvals * sizeof( struct berval ); -- data.data = eh.data; -- data.ulen = data.size; -- -- /* skip past already parsed nattr/nvals */ -- eh.data += off; -- -- rc = cursor->c_get( cursor, &key, &data, DB_CURRENT ); -- } -- --finish: -- cursor->c_close( cursor ); -- -- if( rc != 0 ) { -- return rc; -- } -- -- if ( eh.nvals ) { --#ifdef SLAP_ZONE_ALLOC -- rc = entry_decode(&eh, e, bdb->bi_cache.c_zctx); --#else -- rc = entry_decode(&eh, e); --#endif -- } else { -- *e = entry_alloc(); -- } -- -- if( rc == 0 ) { -- (*e)->e_id = id; -- } else { -- /* only free on error. On success, the entry was -- * decoded in place. -- */ --#ifndef SLAP_ZONE_ALLOC -- ch_free(eh.bv.bv_val); --#endif -- } --#ifdef SLAP_ZONE_ALLOC -- ch_free(eh.bv.bv_val); --#endif -- -- return rc; --} -- --int bdb_id2entry_delete( -- BackendDB *be, -- DB_TXN *tid, -- Entry *e ) --{ -- struct bdb_info *bdb = (struct bdb_info *) be->be_private; -- DB *db = bdb->bi_id2entry->bdi_db; -- DBT key; -- int rc; -- ID nid; -- -- DBTzero( &key ); -- key.data = &nid; -- key.size = sizeof(ID); -- BDB_ID2DISK( e->e_id, &nid ); -- -- /* delete from database */ -- rc = db->del( db, tid, &key, 0 ); -- -- return rc; --} -- --int bdb_entry_return( -- Entry *e --) --{ -- /* Our entries are allocated in two blocks; the data comes from -- * the db itself and the Entry structure and associated pointers -- * are allocated in entry_decode. The db data pointer is saved -- * in e_bv. -- */ -- if ( e->e_bv.bv_val ) { -- /* See if the DNs were changed by modrdn */ -- if( e->e_nname.bv_val < e->e_bv.bv_val || e->e_nname.bv_val > -- e->e_bv.bv_val + e->e_bv.bv_len ) { -- ch_free(e->e_name.bv_val); -- ch_free(e->e_nname.bv_val); -- } -- e->e_name.bv_val = NULL; -- e->e_nname.bv_val = NULL; -- /* In tool mode the e_bv buffer is realloc'd, leave it alone */ -- if( !(slapMode & SLAP_TOOL_MODE) ) { -- free( e->e_bv.bv_val ); -- } -- BER_BVZERO( &e->e_bv ); -- } -- entry_free( e ); -- return 0; --} -- --int bdb_entry_release( -- Operation *op, -- Entry *e, -- int rw ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- struct bdb_op_info *boi; -- OpExtra *oex; -- -- /* slapMode : SLAP_SERVER_MODE, SLAP_TOOL_MODE, -- SLAP_TRUNCATE_MODE, SLAP_UNDEFINED_MODE */ -- -- if ( slapMode & SLAP_SERVER_MODE ) { -- /* If not in our cache, just free it */ -- if ( !e->e_private ) { --#ifdef SLAP_ZONE_ALLOC -- return bdb_entry_return( bdb, e, -1 ); --#else -- return bdb_entry_return( e ); --#endif -- } -- /* free entry and reader or writer lock */ -- LDAP_SLIST_FOREACH( oex, &op->o_extra, oe_next ) { -- if ( oex->oe_key == bdb ) break; -- } -- boi = (struct bdb_op_info *)oex; -- -- /* lock is freed with txn */ -- if ( !boi || boi->boi_txn ) { -- bdb_unlocked_cache_return_entry_rw( bdb, e, rw ); -- } else { -- struct bdb_lock_info *bli, *prev; -- for ( prev=(struct bdb_lock_info *)&boi->boi_locks, -- bli = boi->boi_locks; bli; prev=bli, bli=bli->bli_next ) { -- if ( bli->bli_id == e->e_id ) { -- bdb_cache_return_entry_rw( bdb, e, rw, &bli->bli_lock ); -- prev->bli_next = bli->bli_next; -- /* Cleanup, or let caller know we unlocked */ -- if ( bli->bli_flag & BLI_DONTFREE ) -- bli->bli_flag = 0; -- else -- op->o_tmpfree( bli, op->o_tmpmemctx ); -- break; -- } -- } -- if ( !boi->boi_locks ) { -- LDAP_SLIST_REMOVE( &op->o_extra, &boi->boi_oe, OpExtra, oe_next ); -- if ( !(boi->boi_flag & BOI_DONTFREE)) -- op->o_tmpfree( boi, op->o_tmpmemctx ); -- } -- } -- } else { --#ifdef SLAP_ZONE_ALLOC -- int zseq = -1; -- if (e->e_private != NULL) { -- BEI(e)->bei_e = NULL; -- zseq = BEI(e)->bei_zseq; -- } --#else -- if (e->e_private != NULL) -- BEI(e)->bei_e = NULL; --#endif -- e->e_private = NULL; --#ifdef SLAP_ZONE_ALLOC -- bdb_entry_return ( bdb, e, zseq ); --#else -- bdb_entry_return ( e ); --#endif -- } -- -- return 0; --} -- --/* return LDAP_SUCCESS IFF we can retrieve the specified entry. -- */ --int bdb_entry_get( -- Operation *op, -- struct berval *ndn, -- ObjectClass *oc, -- AttributeDescription *at, -- int rw, -- Entry **ent ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- struct bdb_op_info *boi = NULL; -- DB_TXN *txn = NULL; -- Entry *e = NULL; -- EntryInfo *ei; -- int rc; -- const char *at_name = at ? at->ad_cname.bv_val : "(null)"; -- -- DB_LOCK lock; -- -- Debug( LDAP_DEBUG_ARGS, -- "=> bdb_entry_get: ndn: \"%s\"\n", ndn->bv_val, 0, 0 ); -- Debug( LDAP_DEBUG_ARGS, -- "=> bdb_entry_get: oc: \"%s\", at: \"%s\"\n", -- oc ? oc->soc_cname.bv_val : "(null)", at_name, 0); -- -- if( op ) { -- OpExtra *oex; -- LDAP_SLIST_FOREACH( oex, &op->o_extra, oe_next ) { -- if ( oex->oe_key == bdb ) break; -- } -- boi = (struct bdb_op_info *)oex; -- if ( boi ) -- txn = boi->boi_txn; -- } -- -- if ( !txn ) { -- rc = bdb_reader_get( op, bdb->bi_dbenv, &txn ); -- switch(rc) { -- case 0: -- break; -- default: -- return LDAP_OTHER; -- } -- } -- --dn2entry_retry: -- /* can we find entry */ -- rc = bdb_dn2entry( op, txn, ndn, &ei, 0, &lock ); -- switch( rc ) { -- case DB_NOTFOUND: -- case 0: -- break; -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- /* the txn must abort and retry */ -- if ( txn ) { -- if ( boi ) boi->boi_err = rc; -- return LDAP_BUSY; -- } -- ldap_pvt_thread_yield(); -- goto dn2entry_retry; -- default: -- if ( boi ) boi->boi_err = rc; -- return (rc != LDAP_BUSY) ? LDAP_OTHER : LDAP_BUSY; -- } -- if (ei) e = ei->bei_e; -- if (e == NULL) { -- Debug( LDAP_DEBUG_ACL, -- "=> bdb_entry_get: cannot find entry: \"%s\"\n", -- ndn->bv_val, 0, 0 ); -- return LDAP_NO_SUCH_OBJECT; -- } -- -- Debug( LDAP_DEBUG_ACL, -- "=> bdb_entry_get: found entry: \"%s\"\n", -- ndn->bv_val, 0, 0 ); -- -- if ( oc && !is_entry_objectclass( e, oc, 0 )) { -- Debug( LDAP_DEBUG_ACL, -- "<= bdb_entry_get: failed to find objectClass %s\n", -- oc->soc_cname.bv_val, 0, 0 ); -- rc = LDAP_NO_SUCH_ATTRIBUTE; -- goto return_results; -- } -- -- /* NOTE: attr_find() or attrs_find()? */ -- if ( at && attr_find( e->e_attrs, at ) == NULL ) { -- Debug( LDAP_DEBUG_ACL, -- "<= bdb_entry_get: failed to find attribute %s\n", -- at->ad_cname.bv_val, 0, 0 ); -- rc = LDAP_NO_SUCH_ATTRIBUTE; -- goto return_results; -- } -- --return_results: -- if( rc != LDAP_SUCCESS ) { -- /* free entry */ -- bdb_cache_return_entry_rw(bdb, e, rw, &lock); -- -- } else { -- if ( slapMode & SLAP_SERVER_MODE ) { -- *ent = e; -- /* big drag. we need a place to store a read lock so we can -- * release it later?? If we're in a txn, nothing is needed -- * here because the locks will go away with the txn. -- */ -- if ( op ) { -- if ( !boi ) { -- boi = op->o_tmpcalloc(1,sizeof(struct bdb_op_info),op->o_tmpmemctx); -- boi->boi_oe.oe_key = bdb; -- LDAP_SLIST_INSERT_HEAD( &op->o_extra, &boi->boi_oe, oe_next ); -- } -- if ( !boi->boi_txn ) { -- struct bdb_lock_info *bli; -- bli = op->o_tmpalloc( sizeof(struct bdb_lock_info), -- op->o_tmpmemctx ); -- bli->bli_next = boi->boi_locks; -- bli->bli_id = e->e_id; -- bli->bli_flag = 0; -- bli->bli_lock = lock; -- boi->boi_locks = bli; -- } -- } -- } else { -- *ent = entry_dup( e ); -- bdb_cache_return_entry_rw(bdb, e, rw, &lock); -- } -- } -- -- Debug( LDAP_DEBUG_TRACE, -- "bdb_entry_get: rc=%d\n", -- rc, 0, 0 ); -- return(rc); --} -diff --git a/servers/slapd/back-bdb/idl.c b/servers/slapd/back-bdb/idl.c -deleted file mode 100644 -index d0c13a6..0000000 ---- a/servers/slapd/back-bdb/idl.c -+++ /dev/null -@@ -1,1570 +0,0 @@ --/* idl.c - ldap id list handling routines */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include --#include -- --#include "back-bdb.h" --#include "idl.h" -- --#define IDL_MAX(x,y) ( (x) > (y) ? (x) : (y) ) --#define IDL_MIN(x,y) ( (x) < (y) ? (x) : (y) ) --#define IDL_CMP(x,y) ( (x) < (y) ? -1 : (x) > (y) ) -- --#define IDL_LRU_DELETE( bdb, e ) do { \ -- if ( (e) == (bdb)->bi_idl_lru_head ) { \ -- if ( (e)->idl_lru_next == (bdb)->bi_idl_lru_head ) { \ -- (bdb)->bi_idl_lru_head = NULL; \ -- } else { \ -- (bdb)->bi_idl_lru_head = (e)->idl_lru_next; \ -- } \ -- } \ -- if ( (e) == (bdb)->bi_idl_lru_tail ) { \ -- if ( (e)->idl_lru_prev == (bdb)->bi_idl_lru_tail ) { \ -- assert( (bdb)->bi_idl_lru_head == NULL ); \ -- (bdb)->bi_idl_lru_tail = NULL; \ -- } else { \ -- (bdb)->bi_idl_lru_tail = (e)->idl_lru_prev; \ -- } \ -- } \ -- (e)->idl_lru_next->idl_lru_prev = (e)->idl_lru_prev; \ -- (e)->idl_lru_prev->idl_lru_next = (e)->idl_lru_next; \ --} while ( 0 ) -- --static int --bdb_idl_entry_cmp( const void *v_idl1, const void *v_idl2 ) --{ -- const bdb_idl_cache_entry_t *idl1 = v_idl1, *idl2 = v_idl2; -- int rc; -- -- if ((rc = SLAP_PTRCMP( idl1->db, idl2->db ))) return rc; -- if ((rc = idl1->kstr.bv_len - idl2->kstr.bv_len )) return rc; -- return ( memcmp ( idl1->kstr.bv_val, idl2->kstr.bv_val , idl1->kstr.bv_len ) ); --} -- --#if IDL_DEBUG > 0 --static void idl_check( ID *ids ) --{ -- if( BDB_IDL_IS_RANGE( ids ) ) { -- assert( BDB_IDL_RANGE_FIRST(ids) <= BDB_IDL_RANGE_LAST(ids) ); -- } else { -- ID i; -- for( i=1; i < ids[0]; i++ ) { -- assert( ids[i+1] > ids[i] ); -- } -- } --} -- --#if IDL_DEBUG > 1 --static void idl_dump( ID *ids ) --{ -- if( BDB_IDL_IS_RANGE( ids ) ) { -- Debug( LDAP_DEBUG_ANY, -- "IDL: range ( %ld - %ld )\n", -- (long) BDB_IDL_RANGE_FIRST( ids ), -- (long) BDB_IDL_RANGE_LAST( ids ) ); -- -- } else { -- ID i; -- Debug( LDAP_DEBUG_ANY, "IDL: size %ld", (long) ids[0], 0, 0 ); -- -- for( i=1; i<=ids[0]; i++ ) { -- if( i % 16 == 1 ) { -- Debug( LDAP_DEBUG_ANY, "\n", 0, 0, 0 ); -- } -- Debug( LDAP_DEBUG_ANY, " %02lx", (long) ids[i], 0, 0 ); -- } -- -- Debug( LDAP_DEBUG_ANY, "\n", 0, 0, 0 ); -- } -- -- idl_check( ids ); --} --#endif /* IDL_DEBUG > 1 */ --#endif /* IDL_DEBUG > 0 */ -- --unsigned bdb_idl_search( ID *ids, ID id ) --{ --#define IDL_BINARY_SEARCH 1 --#ifdef IDL_BINARY_SEARCH -- /* -- * binary search of id in ids -- * if found, returns position of id -- * if not found, returns first postion greater than id -- */ -- unsigned base = 0; -- unsigned cursor = 1; -- int val = 0; -- unsigned n = ids[0]; -- --#if IDL_DEBUG > 0 -- idl_check( ids ); --#endif -- -- while( 0 < n ) { -- unsigned pivot = n >> 1; -- cursor = base + pivot + 1; -- val = IDL_CMP( id, ids[cursor] ); -- -- if( val < 0 ) { -- n = pivot; -- -- } else if ( val > 0 ) { -- base = cursor; -- n -= pivot + 1; -- -- } else { -- return cursor; -- } -- } -- -- if( val > 0 ) { -- ++cursor; -- } -- return cursor; -- --#else -- /* (reverse) linear search */ -- int i; -- --#if IDL_DEBUG > 0 -- idl_check( ids ); --#endif -- -- for( i=ids[0]; i; i-- ) { -- if( id > ids[i] ) { -- break; -- } -- } -- -- return i+1; --#endif --} -- --int bdb_idl_insert( ID *ids, ID id ) --{ -- unsigned x; -- --#if IDL_DEBUG > 1 -- Debug( LDAP_DEBUG_ANY, "insert: %04lx at %d\n", (long) id, x, 0 ); -- idl_dump( ids ); --#elif IDL_DEBUG > 0 -- idl_check( ids ); --#endif -- -- if (BDB_IDL_IS_RANGE( ids )) { -- /* if already in range, treat as a dup */ -- if (id >= BDB_IDL_RANGE_FIRST(ids) && id <= BDB_IDL_RANGE_LAST(ids)) -- return -1; -- if (id < BDB_IDL_RANGE_FIRST(ids)) -- ids[1] = id; -- else if (id > BDB_IDL_RANGE_LAST(ids)) -- ids[2] = id; -- return 0; -- } -- -- x = bdb_idl_search( ids, id ); -- assert( x > 0 ); -- -- if( x < 1 ) { -- /* internal error */ -- return -2; -- } -- -- if ( x <= ids[0] && ids[x] == id ) { -- /* duplicate */ -- return -1; -- } -- -- if ( ++ids[0] >= BDB_IDL_DB_MAX ) { -- if( id < ids[1] ) { -- ids[1] = id; -- ids[2] = ids[ids[0]-1]; -- } else if ( ids[ids[0]-1] < id ) { -- ids[2] = id; -- } else { -- ids[2] = ids[ids[0]-1]; -- } -- ids[0] = NOID; -- -- } else { -- /* insert id */ -- AC_MEMCPY( &ids[x+1], &ids[x], (ids[0]-x) * sizeof(ID) ); -- ids[x] = id; -- } -- --#if IDL_DEBUG > 1 -- idl_dump( ids ); --#elif IDL_DEBUG > 0 -- idl_check( ids ); --#endif -- -- return 0; --} -- --int bdb_idl_delete( ID *ids, ID id ) --{ -- unsigned x; -- --#if IDL_DEBUG > 1 -- Debug( LDAP_DEBUG_ANY, "delete: %04lx at %d\n", (long) id, x, 0 ); -- idl_dump( ids ); --#elif IDL_DEBUG > 0 -- idl_check( ids ); --#endif -- -- if (BDB_IDL_IS_RANGE( ids )) { -- /* If deleting a range boundary, adjust */ -- if ( ids[1] == id ) -- ids[1]++; -- else if ( ids[2] == id ) -- ids[2]--; -- /* deleting from inside a range is a no-op */ -- -- /* If the range has collapsed, re-adjust */ -- if ( ids[1] > ids[2] ) -- ids[0] = 0; -- else if ( ids[1] == ids[2] ) -- ids[1] = 1; -- return 0; -- } -- -- x = bdb_idl_search( ids, id ); -- assert( x > 0 ); -- -- if( x <= 0 ) { -- /* internal error */ -- return -2; -- } -- -- if( x > ids[0] || ids[x] != id ) { -- /* not found */ -- return -1; -- -- } else if ( --ids[0] == 0 ) { -- if( x != 1 ) { -- return -3; -- } -- -- } else { -- AC_MEMCPY( &ids[x], &ids[x+1], (1+ids[0]-x) * sizeof(ID) ); -- } -- --#if IDL_DEBUG > 1 -- idl_dump( ids ); --#elif IDL_DEBUG > 0 -- idl_check( ids ); --#endif -- -- return 0; --} -- --static char * --bdb_show_key( -- DBT *key, -- char *buf ) --{ -- if ( key->size == 4 /* LUTIL_HASH_BYTES */ ) { -- unsigned char *c = key->data; -- sprintf( buf, "[%02x%02x%02x%02x]", c[0], c[1], c[2], c[3] ); -- return buf; -- } else { -- return key->data; -- } --} -- --/* Find a db/key pair in the IDL cache. If ids is non-NULL, -- * copy the cached IDL into it, otherwise just return the status. -- */ --int --bdb_idl_cache_get( -- struct bdb_info *bdb, -- DB *db, -- DBT *key, -- ID *ids ) --{ -- bdb_idl_cache_entry_t idl_tmp; -- bdb_idl_cache_entry_t *matched_idl_entry; -- int rc = LDAP_NO_SUCH_OBJECT; -- -- DBT2bv( key, &idl_tmp.kstr ); -- idl_tmp.db = db; -- ldap_pvt_thread_rdwr_rlock( &bdb->bi_idl_tree_rwlock ); -- matched_idl_entry = avl_find( bdb->bi_idl_tree, &idl_tmp, -- bdb_idl_entry_cmp ); -- if ( matched_idl_entry != NULL ) { -- if ( matched_idl_entry->idl && ids ) -- BDB_IDL_CPY( ids, matched_idl_entry->idl ); -- matched_idl_entry->idl_flags |= CACHE_ENTRY_REFERENCED; -- if ( matched_idl_entry->idl ) -- rc = LDAP_SUCCESS; -- else -- rc = DB_NOTFOUND; -- } -- ldap_pvt_thread_rdwr_runlock( &bdb->bi_idl_tree_rwlock ); -- -- return rc; --} -- --void --bdb_idl_cache_put( -- struct bdb_info *bdb, -- DB *db, -- DBT *key, -- ID *ids, -- int rc ) --{ -- bdb_idl_cache_entry_t idl_tmp; -- bdb_idl_cache_entry_t *ee, *eprev; -- -- if ( rc == DB_NOTFOUND || BDB_IDL_IS_ZERO( ids )) -- return; -- -- DBT2bv( key, &idl_tmp.kstr ); -- -- ee = (bdb_idl_cache_entry_t *) ch_malloc( -- sizeof( bdb_idl_cache_entry_t ) ); -- ee->db = db; -- ee->idl = (ID*) ch_malloc( BDB_IDL_SIZEOF ( ids ) ); -- BDB_IDL_CPY( ee->idl, ids ); -- -- ee->idl_lru_prev = NULL; -- ee->idl_lru_next = NULL; -- ee->idl_flags = 0; -- ber_dupbv( &ee->kstr, &idl_tmp.kstr ); -- ldap_pvt_thread_rdwr_wlock( &bdb->bi_idl_tree_rwlock ); -- if ( avl_insert( &bdb->bi_idl_tree, (caddr_t) ee, -- bdb_idl_entry_cmp, avl_dup_error )) -- { -- ch_free( ee->kstr.bv_val ); -- ch_free( ee->idl ); -- ch_free( ee ); -- ldap_pvt_thread_rdwr_wunlock( &bdb->bi_idl_tree_rwlock ); -- return; -- } -- ldap_pvt_thread_mutex_lock( &bdb->bi_idl_tree_lrulock ); -- /* LRU_ADD */ -- if ( bdb->bi_idl_lru_head ) { -- assert( bdb->bi_idl_lru_tail != NULL ); -- assert( bdb->bi_idl_lru_head->idl_lru_prev != NULL ); -- assert( bdb->bi_idl_lru_head->idl_lru_next != NULL ); -- -- ee->idl_lru_next = bdb->bi_idl_lru_head; -- ee->idl_lru_prev = bdb->bi_idl_lru_head->idl_lru_prev; -- bdb->bi_idl_lru_head->idl_lru_prev->idl_lru_next = ee; -- bdb->bi_idl_lru_head->idl_lru_prev = ee; -- } else { -- ee->idl_lru_next = ee->idl_lru_prev = ee; -- bdb->bi_idl_lru_tail = ee; -- } -- bdb->bi_idl_lru_head = ee; -- -- if ( bdb->bi_idl_cache_size >= bdb->bi_idl_cache_max_size ) { -- int i; -- eprev = bdb->bi_idl_lru_tail; -- for ( i = 0; (ee = eprev) != NULL && i < 10; i++ ) { -- eprev = ee->idl_lru_prev; -- if ( eprev == ee ) { -- eprev = NULL; -- } -- if ( ee->idl_flags & CACHE_ENTRY_REFERENCED ) { -- ee->idl_flags ^= CACHE_ENTRY_REFERENCED; -- continue; -- } -- if ( avl_delete( &bdb->bi_idl_tree, (caddr_t) ee, -- bdb_idl_entry_cmp ) == NULL ) { -- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_cache_put: " -- "AVL delete failed\n", -- 0, 0, 0 ); -- } -- IDL_LRU_DELETE( bdb, ee ); -- i++; -- --bdb->bi_idl_cache_size; -- ch_free( ee->kstr.bv_val ); -- ch_free( ee->idl ); -- ch_free( ee ); -- } -- bdb->bi_idl_lru_tail = eprev; -- assert( bdb->bi_idl_lru_tail != NULL -- || bdb->bi_idl_lru_head == NULL ); -- } -- bdb->bi_idl_cache_size++; -- ldap_pvt_thread_mutex_unlock( &bdb->bi_idl_tree_lrulock ); -- ldap_pvt_thread_rdwr_wunlock( &bdb->bi_idl_tree_rwlock ); --} -- --void --bdb_idl_cache_del( -- struct bdb_info *bdb, -- DB *db, -- DBT *key ) --{ -- bdb_idl_cache_entry_t *matched_idl_entry, idl_tmp; -- DBT2bv( key, &idl_tmp.kstr ); -- idl_tmp.db = db; -- ldap_pvt_thread_rdwr_wlock( &bdb->bi_idl_tree_rwlock ); -- matched_idl_entry = avl_find( bdb->bi_idl_tree, &idl_tmp, -- bdb_idl_entry_cmp ); -- if ( matched_idl_entry != NULL ) { -- if ( avl_delete( &bdb->bi_idl_tree, (caddr_t) matched_idl_entry, -- bdb_idl_entry_cmp ) == NULL ) { -- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_cache_del: " -- "AVL delete failed\n", -- 0, 0, 0 ); -- } -- --bdb->bi_idl_cache_size; -- ldap_pvt_thread_mutex_lock( &bdb->bi_idl_tree_lrulock ); -- IDL_LRU_DELETE( bdb, matched_idl_entry ); -- ldap_pvt_thread_mutex_unlock( &bdb->bi_idl_tree_lrulock ); -- free( matched_idl_entry->kstr.bv_val ); -- if ( matched_idl_entry->idl ) -- free( matched_idl_entry->idl ); -- free( matched_idl_entry ); -- } -- ldap_pvt_thread_rdwr_wunlock( &bdb->bi_idl_tree_rwlock ); --} -- --void --bdb_idl_cache_add_id( -- struct bdb_info *bdb, -- DB *db, -- DBT *key, -- ID id ) --{ -- bdb_idl_cache_entry_t *cache_entry, idl_tmp; -- DBT2bv( key, &idl_tmp.kstr ); -- idl_tmp.db = db; -- ldap_pvt_thread_rdwr_wlock( &bdb->bi_idl_tree_rwlock ); -- cache_entry = avl_find( bdb->bi_idl_tree, &idl_tmp, -- bdb_idl_entry_cmp ); -- if ( cache_entry != NULL ) { -- if ( !BDB_IDL_IS_RANGE( cache_entry->idl ) && -- cache_entry->idl[0] < BDB_IDL_DB_MAX ) { -- size_t s = BDB_IDL_SIZEOF( cache_entry->idl ) + sizeof(ID); -- cache_entry->idl = ch_realloc( cache_entry->idl, s ); -- } -- bdb_idl_insert( cache_entry->idl, id ); -- } -- ldap_pvt_thread_rdwr_wunlock( &bdb->bi_idl_tree_rwlock ); --} -- --void --bdb_idl_cache_del_id( -- struct bdb_info *bdb, -- DB *db, -- DBT *key, -- ID id ) --{ -- bdb_idl_cache_entry_t *cache_entry, idl_tmp; -- DBT2bv( key, &idl_tmp.kstr ); -- idl_tmp.db = db; -- ldap_pvt_thread_rdwr_wlock( &bdb->bi_idl_tree_rwlock ); -- cache_entry = avl_find( bdb->bi_idl_tree, &idl_tmp, -- bdb_idl_entry_cmp ); -- if ( cache_entry != NULL ) { -- bdb_idl_delete( cache_entry->idl, id ); -- if ( cache_entry->idl[0] == 0 ) { -- if ( avl_delete( &bdb->bi_idl_tree, (caddr_t) cache_entry, -- bdb_idl_entry_cmp ) == NULL ) { -- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_cache_del: " -- "AVL delete failed\n", -- 0, 0, 0 ); -- } -- --bdb->bi_idl_cache_size; -- ldap_pvt_thread_mutex_lock( &bdb->bi_idl_tree_lrulock ); -- IDL_LRU_DELETE( bdb, cache_entry ); -- ldap_pvt_thread_mutex_unlock( &bdb->bi_idl_tree_lrulock ); -- free( cache_entry->kstr.bv_val ); -- free( cache_entry->idl ); -- free( cache_entry ); -- } -- } -- ldap_pvt_thread_rdwr_wunlock( &bdb->bi_idl_tree_rwlock ); --} -- --int --bdb_idl_fetch_key( -- BackendDB *be, -- DB *db, -- DB_TXN *txn, -- DBT *key, -- ID *ids, -- DBC **saved_cursor, -- int get_flag ) --{ -- struct bdb_info *bdb = (struct bdb_info *) be->be_private; -- int rc; -- DBT data, key2, *kptr; -- DBC *cursor; -- ID *i; -- void *ptr; -- size_t len; -- int rc2; -- int flags = bdb->bi_db_opflags | DB_MULTIPLE; -- int opflag; -- -- /* If using BerkeleyDB 4.0, the buf must be large enough to -- * grab the entire IDL in one get(), otherwise BDB will leak -- * resources on subsequent get's. We can safely call get() -- * twice - once for the data, and once to get the DB_NOTFOUND -- * result meaning there's no more data. See ITS#2040 for details. -- * This bug is fixed in BDB 4.1 so a smaller buffer will work if -- * stack space is too limited. -- * -- * configure now requires Berkeley DB 4.1. -- */ --#if DB_VERSION_FULL < 0x04010000 --# define BDB_ENOUGH 5 --#else -- /* We sometimes test with tiny IDLs, and BDB always wants buffers -- * that are at least one page in size. -- */ --# if BDB_IDL_DB_SIZE < 4096 --# define BDB_ENOUGH 2048 --# else --# define BDB_ENOUGH 1 --# endif --#endif -- ID buf[BDB_IDL_DB_SIZE*BDB_ENOUGH]; -- -- char keybuf[16]; -- -- Debug( LDAP_DEBUG_ARGS, -- "bdb_idl_fetch_key: %s\n", -- bdb_show_key( key, keybuf ), 0, 0 ); -- -- assert( ids != NULL ); -- -- if ( saved_cursor && *saved_cursor ) { -- opflag = DB_NEXT; -- } else if ( get_flag == LDAP_FILTER_GE ) { -- opflag = DB_SET_RANGE; -- } else if ( get_flag == LDAP_FILTER_LE ) { -- opflag = DB_FIRST; -- } else { -- opflag = DB_SET; -- } -- -- /* only non-range lookups can use the IDL cache */ -- if ( bdb->bi_idl_cache_size && opflag == DB_SET ) { -- rc = bdb_idl_cache_get( bdb, db, key, ids ); -- if ( rc != LDAP_NO_SUCH_OBJECT ) return rc; -- } -- -- DBTzero( &data ); -- -- data.data = buf; -- data.ulen = sizeof(buf); -- data.flags = DB_DBT_USERMEM; -- -- /* If we're not reusing an existing cursor, get a new one */ -- if( opflag != DB_NEXT ) { -- rc = db->cursor( db, txn, &cursor, bdb->bi_db_opflags ); -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_fetch_key: " -- "cursor failed: %s (%d)\n", db_strerror(rc), rc, 0 ); -- return rc; -- } -- } else { -- cursor = *saved_cursor; -- } -- -- /* If this is a LE lookup, save original key so we can determine -- * when to stop. If this is a GE lookup, save the key since it -- * will be overwritten. -- */ -- if ( get_flag == LDAP_FILTER_LE || get_flag == LDAP_FILTER_GE ) { -- DBTzero( &key2 ); -- key2.flags = DB_DBT_USERMEM; -- key2.ulen = sizeof(keybuf); -- key2.data = keybuf; -- key2.size = key->size; -- AC_MEMCPY( keybuf, key->data, key->size ); -- kptr = &key2; -- } else { -- kptr = key; -- } -- len = key->size; -- rc = cursor->c_get( cursor, kptr, &data, flags | opflag ); -- -- /* skip presence key on range inequality lookups */ -- while (rc == 0 && kptr->size != len) { -- rc = cursor->c_get( cursor, kptr, &data, flags | DB_NEXT_NODUP ); -- } -- /* If we're doing a LE compare and the new key is greater than -- * our search key, we're done -- */ -- if (rc == 0 && get_flag == LDAP_FILTER_LE && memcmp( kptr->data, -- key->data, key->size ) > 0 ) { -- rc = DB_NOTFOUND; -- } -- if (rc == 0) { -- i = ids; -- while (rc == 0) { -- u_int8_t *j; -- -- DB_MULTIPLE_INIT( ptr, &data ); -- while (ptr) { -- DB_MULTIPLE_NEXT(ptr, &data, j, len); -- if (j) { -- ++i; -- BDB_DISK2ID( j, i ); -- } -- } -- rc = cursor->c_get( cursor, key, &data, flags | DB_NEXT_DUP ); -- } -- if ( rc == DB_NOTFOUND ) rc = 0; -- ids[0] = i - ids; -- /* On disk, a range is denoted by 0 in the first element */ -- if (ids[1] == 0) { -- if (ids[0] != BDB_IDL_RANGE_SIZE) { -- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_fetch_key: " -- "range size mismatch: expected %d, got %ld\n", -- BDB_IDL_RANGE_SIZE, ids[0], 0 ); -- cursor->c_close( cursor ); -- return -1; -- } -- BDB_IDL_RANGE( ids, ids[2], ids[3] ); -- } -- data.size = BDB_IDL_SIZEOF(ids); -- } -- -- if ( saved_cursor && rc == 0 ) { -- if ( !*saved_cursor ) -- *saved_cursor = cursor; -- rc2 = 0; -- } -- else -- rc2 = cursor->c_close( cursor ); -- if (rc2) { -- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_fetch_key: " -- "close failed: %s (%d)\n", db_strerror(rc2), rc2, 0 ); -- return rc2; -- } -- -- if( rc == DB_NOTFOUND ) { -- return rc; -- -- } else if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_fetch_key: " -- "get failed: %s (%d)\n", -- db_strerror(rc), rc, 0 ); -- return rc; -- -- } else if ( data.size == 0 || data.size % sizeof( ID ) ) { -- /* size not multiple of ID size */ -- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_fetch_key: " -- "odd size: expected %ld multiple, got %ld\n", -- (long) sizeof( ID ), (long) data.size, 0 ); -- return -1; -- -- } else if ( data.size != BDB_IDL_SIZEOF(ids) ) { -- /* size mismatch */ -- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_fetch_key: " -- "get size mismatch: expected %ld, got %ld\n", -- (long) ((1 + ids[0]) * sizeof( ID )), (long) data.size, 0 ); -- return -1; -- } -- -- if ( bdb->bi_idl_cache_max_size ) { -- bdb_idl_cache_put( bdb, db, key, ids, rc ); -- } -- -- return rc; --} -- -- --int --bdb_idl_insert_key( -- BackendDB *be, -- DB *db, -- DB_TXN *tid, -- DBT *key, -- ID id ) --{ -- struct bdb_info *bdb = (struct bdb_info *) be->be_private; -- int rc; -- DBT data; -- DBC *cursor; -- ID lo, hi, nlo, nhi, nid; -- char *err; -- -- { -- char buf[16]; -- Debug( LDAP_DEBUG_ARGS, -- "bdb_idl_insert_key: %lx %s\n", -- (long) id, bdb_show_key( key, buf ), 0 ); -- } -- -- assert( id != NOID ); -- -- DBTzero( &data ); -- data.size = sizeof( ID ); -- data.ulen = data.size; -- data.flags = DB_DBT_USERMEM; -- -- BDB_ID2DISK( id, &nid ); -- -- rc = db->cursor( db, tid, &cursor, bdb->bi_db_opflags ); -- if ( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_insert_key: " -- "cursor failed: %s (%d)\n", db_strerror(rc), rc, 0 ); -- return rc; -- } -- data.data = &nlo; -- /* Fetch the first data item for this key, to see if it -- * exists and if it's a range. -- */ -- rc = cursor->c_get( cursor, key, &data, DB_SET ); -- err = "c_get"; -- if ( rc == 0 ) { -- if ( nlo != 0 ) { -- /* not a range, count the number of items */ -- db_recno_t count; -- rc = cursor->c_count( cursor, &count, 0 ); -- if ( rc != 0 ) { -- err = "c_count"; -- goto fail; -- } -- if ( count >= BDB_IDL_DB_MAX ) { -- /* No room, convert to a range */ -- DBT key2 = *key; -- db_recno_t i; -- -- key2.dlen = key2.ulen; -- key2.flags |= DB_DBT_PARTIAL; -- -- BDB_DISK2ID( &nlo, &lo ); -- data.data = &nhi; -- -- rc = cursor->c_get( cursor, &key2, &data, DB_NEXT_NODUP ); -- if ( rc != 0 && rc != DB_NOTFOUND ) { -- err = "c_get next_nodup"; -- goto fail; -- } -- if ( rc == DB_NOTFOUND ) { -- rc = cursor->c_get( cursor, key, &data, DB_LAST ); -- if ( rc != 0 ) { -- err = "c_get last"; -- goto fail; -- } -- } else { -- rc = cursor->c_get( cursor, key, &data, DB_PREV ); -- if ( rc != 0 ) { -- err = "c_get prev"; -- goto fail; -- } -- } -- BDB_DISK2ID( &nhi, &hi ); -- /* Update hi/lo if needed, then delete all the items -- * between lo and hi -- */ -- if ( id < lo ) { -- lo = id; -- nlo = nid; -- } else if ( id > hi ) { -- hi = id; -- nhi = nid; -- } -- data.data = &nid; -- /* Don't fetch anything, just position cursor */ -- data.flags = DB_DBT_USERMEM | DB_DBT_PARTIAL; -- data.dlen = data.ulen = 0; -- rc = cursor->c_get( cursor, key, &data, DB_SET ); -- if ( rc != 0 ) { -- err = "c_get 2"; -- goto fail; -- } -- rc = cursor->c_del( cursor, 0 ); -- if ( rc != 0 ) { -- err = "c_del range1"; -- goto fail; -- } -- /* Delete all the records */ -- for ( i=1; ic_get( cursor, &key2, &data, DB_NEXT_DUP ); -- if ( rc != 0 ) { -- err = "c_get next_dup"; -- goto fail; -- } -- rc = cursor->c_del( cursor, 0 ); -- if ( rc != 0 ) { -- err = "c_del range"; -- goto fail; -- } -- } -- /* Store the range marker */ -- data.size = data.ulen = sizeof(ID); -- data.flags = DB_DBT_USERMEM; -- nid = 0; -- rc = cursor->c_put( cursor, key, &data, DB_KEYFIRST ); -- if ( rc != 0 ) { -- err = "c_put range"; -- goto fail; -- } -- nid = nlo; -- rc = cursor->c_put( cursor, key, &data, DB_KEYLAST ); -- if ( rc != 0 ) { -- err = "c_put lo"; -- goto fail; -- } -- nid = nhi; -- rc = cursor->c_put( cursor, key, &data, DB_KEYLAST ); -- if ( rc != 0 ) { -- err = "c_put hi"; -- goto fail; -- } -- } else { -- /* There's room, just store it */ -- goto put1; -- } -- } else { -- /* It's a range, see if we need to rewrite -- * the boundaries -- */ -- hi = id; -- data.data = &nlo; -- rc = cursor->c_get( cursor, key, &data, DB_NEXT_DUP ); -- if ( rc != 0 ) { -- err = "c_get lo"; -- goto fail; -- } -- BDB_DISK2ID( &nlo, &lo ); -- if ( id > lo ) { -- data.data = &nhi; -- rc = cursor->c_get( cursor, key, &data, DB_NEXT_DUP ); -- if ( rc != 0 ) { -- err = "c_get hi"; -- goto fail; -- } -- BDB_DISK2ID( &nhi, &hi ); -- } -- if ( id < lo || id > hi ) { -- /* Delete the current lo/hi */ -- rc = cursor->c_del( cursor, 0 ); -- if ( rc != 0 ) { -- err = "c_del"; -- goto fail; -- } -- data.data = &nid; -- rc = cursor->c_put( cursor, key, &data, DB_KEYFIRST ); -- if ( rc != 0 ) { -- err = "c_put lo/hi"; -- goto fail; -- } -- } -- } -- } else if ( rc == DB_NOTFOUND ) { --put1: data.data = &nid; -- rc = cursor->c_put( cursor, key, &data, DB_NODUPDATA ); -- /* Don't worry if it's already there */ -- if ( rc != 0 && rc != DB_KEYEXIST ) { -- err = "c_put id"; -- goto fail; -- } -- } else { -- /* initial c_get failed, nothing was done */ --fail: -- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_insert_key: " -- "%s failed: %s (%d)\n", err, db_strerror(rc), rc ); -- cursor->c_close( cursor ); -- return rc; -- } -- /* If key was added (didn't already exist) and using IDL cache, -- * update key in IDL cache. -- */ -- if ( !rc && bdb->bi_idl_cache_max_size ) { -- bdb_idl_cache_add_id( bdb, db, key, id ); -- } -- rc = cursor->c_close( cursor ); -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_insert_key: " -- "c_close failed: %s (%d)\n", -- db_strerror(rc), rc, 0 ); -- } -- return rc; --} -- --int --bdb_idl_delete_key( -- BackendDB *be, -- DB *db, -- DB_TXN *tid, -- DBT *key, -- ID id ) --{ -- struct bdb_info *bdb = (struct bdb_info *) be->be_private; -- int rc; -- DBT data; -- DBC *cursor; -- ID lo, hi, tmp, nid, nlo, nhi; -- char *err; -- -- { -- char buf[16]; -- Debug( LDAP_DEBUG_ARGS, -- "bdb_idl_delete_key: %lx %s\n", -- (long) id, bdb_show_key( key, buf ), 0 ); -- } -- assert( id != NOID ); -- -- if ( bdb->bi_idl_cache_size ) { -- bdb_idl_cache_del( bdb, db, key ); -- } -- -- BDB_ID2DISK( id, &nid ); -- -- DBTzero( &data ); -- data.data = &tmp; -- data.size = sizeof( id ); -- data.ulen = data.size; -- data.flags = DB_DBT_USERMEM; -- -- rc = db->cursor( db, tid, &cursor, bdb->bi_db_opflags ); -- if ( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_delete_key: " -- "cursor failed: %s (%d)\n", db_strerror(rc), rc, 0 ); -- return rc; -- } -- /* Fetch the first data item for this key, to see if it -- * exists and if it's a range. -- */ -- rc = cursor->c_get( cursor, key, &data, DB_SET ); -- err = "c_get"; -- if ( rc == 0 ) { -- if ( tmp != 0 ) { -- /* Not a range, just delete it */ -- if (tmp != nid) { -- /* position to correct item */ -- tmp = nid; -- rc = cursor->c_get( cursor, key, &data, DB_GET_BOTH ); -- if ( rc != 0 ) { -- err = "c_get id"; -- goto fail; -- } -- } -- rc = cursor->c_del( cursor, 0 ); -- if ( rc != 0 ) { -- err = "c_del id"; -- goto fail; -- } -- } else { -- /* It's a range, see if we need to rewrite -- * the boundaries -- */ -- data.data = &nlo; -- rc = cursor->c_get( cursor, key, &data, DB_NEXT_DUP ); -- if ( rc != 0 ) { -- err = "c_get lo"; -- goto fail; -- } -- BDB_DISK2ID( &nlo, &lo ); -- data.data = &nhi; -- rc = cursor->c_get( cursor, key, &data, DB_NEXT_DUP ); -- if ( rc != 0 ) { -- err = "c_get hi"; -- goto fail; -- } -- BDB_DISK2ID( &nhi, &hi ); -- if ( id == lo || id == hi ) { -- if ( id == lo ) { -- id++; -- lo = id; -- } else if ( id == hi ) { -- id--; -- hi = id; -- } -- if ( lo >= hi ) { -- /* The range has collapsed... */ -- rc = db->del( db, tid, key, 0 ); -- if ( rc != 0 ) { -- err = "del"; -- goto fail; -- } -- } else { -- if ( id == lo ) { -- /* reposition on lo slot */ -- data.data = &nlo; -- cursor->c_get( cursor, key, &data, DB_PREV ); -- } -- rc = cursor->c_del( cursor, 0 ); -- if ( rc != 0 ) { -- err = "c_del"; -- goto fail; -- } -- } -- if ( lo <= hi ) { -- BDB_ID2DISK( id, &nid ); -- data.data = &nid; -- rc = cursor->c_put( cursor, key, &data, DB_KEYFIRST ); -- if ( rc != 0 ) { -- err = "c_put lo/hi"; -- goto fail; -- } -- } -- } -- } -- } else { -- /* initial c_get failed, nothing was done */ --fail: -- if ( rc != DB_NOTFOUND ) { -- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_delete_key: " -- "%s failed: %s (%d)\n", err, db_strerror(rc), rc ); -- } -- cursor->c_close( cursor ); -- return rc; -- } -- rc = cursor->c_close( cursor ); -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, -- "=> bdb_idl_delete_key: c_close failed: %s (%d)\n", -- db_strerror(rc), rc, 0 ); -- } -- -- return rc; --} -- -- --/* -- * idl_intersection - return a = a intersection b -- */ --int --bdb_idl_intersection( -- ID *a, -- ID *b ) --{ -- ID ida, idb; -- ID idmax, idmin; -- ID cursora = 0, cursorb = 0, cursorc; -- int swap = 0; -- -- if ( BDB_IDL_IS_ZERO( a ) || BDB_IDL_IS_ZERO( b ) ) { -- a[0] = 0; -- return 0; -- } -- -- idmin = IDL_MAX( BDB_IDL_FIRST(a), BDB_IDL_FIRST(b) ); -- idmax = IDL_MIN( BDB_IDL_LAST(a), BDB_IDL_LAST(b) ); -- if ( idmin > idmax ) { -- a[0] = 0; -- return 0; -- } else if ( idmin == idmax ) { -- a[0] = 1; -- a[1] = idmin; -- return 0; -- } -- -- if ( BDB_IDL_IS_RANGE( a ) ) { -- if ( BDB_IDL_IS_RANGE(b) ) { -- /* If both are ranges, just shrink the boundaries */ -- a[1] = idmin; -- a[2] = idmax; -- return 0; -- } else { -- /* Else swap so that b is the range, a is a list */ -- ID *tmp = a; -- a = b; -- b = tmp; -- swap = 1; -- } -- } -- -- /* If a range completely covers the list, the result is -- * just the list. -- */ -- if ( BDB_IDL_IS_RANGE( b ) -- && BDB_IDL_RANGE_FIRST( b ) <= BDB_IDL_FIRST( a ) -- && BDB_IDL_RANGE_LAST( b ) >= BDB_IDL_LLAST( a ) ) { -- goto done; -- } -- -- /* Fine, do the intersection one element at a time. -- * First advance to idmin in both IDLs. -- */ -- cursora = cursorb = idmin; -- ida = bdb_idl_first( a, &cursora ); -- idb = bdb_idl_first( b, &cursorb ); -- cursorc = 0; -- -- while( ida <= idmax || idb <= idmax ) { -- if( ida == idb ) { -- a[++cursorc] = ida; -- ida = bdb_idl_next( a, &cursora ); -- idb = bdb_idl_next( b, &cursorb ); -- } else if ( ida < idb ) { -- ida = bdb_idl_next( a, &cursora ); -- } else { -- idb = bdb_idl_next( b, &cursorb ); -- } -- } -- a[0] = cursorc; --done: -- if (swap) -- BDB_IDL_CPY( b, a ); -- -- return 0; --} -- -- --/* -- * idl_union - return a = a union b -- */ --int --bdb_idl_union( -- ID *a, -- ID *b ) --{ -- ID ida, idb; -- ID cursora = 0, cursorb = 0, cursorc; -- -- if ( BDB_IDL_IS_ZERO( b ) ) { -- return 0; -- } -- -- if ( BDB_IDL_IS_ZERO( a ) ) { -- BDB_IDL_CPY( a, b ); -- return 0; -- } -- -- if ( BDB_IDL_IS_RANGE( a ) || BDB_IDL_IS_RANGE(b) ) { --over: ida = IDL_MIN( BDB_IDL_FIRST(a), BDB_IDL_FIRST(b) ); -- idb = IDL_MAX( BDB_IDL_LAST(a), BDB_IDL_LAST(b) ); -- a[0] = NOID; -- a[1] = ida; -- a[2] = idb; -- return 0; -- } -- -- ida = bdb_idl_first( a, &cursora ); -- idb = bdb_idl_first( b, &cursorb ); -- -- cursorc = b[0]; -- -- /* The distinct elements of a are cat'd to b */ -- while( ida != NOID || idb != NOID ) { -- if ( ida < idb ) { -- if( ++cursorc > BDB_IDL_UM_MAX ) { -- goto over; -- } -- b[cursorc] = ida; -- ida = bdb_idl_next( a, &cursora ); -- -- } else { -- if ( ida == idb ) -- ida = bdb_idl_next( a, &cursora ); -- idb = bdb_idl_next( b, &cursorb ); -- } -- } -- -- /* b is copied back to a in sorted order */ -- a[0] = cursorc; -- cursora = 1; -- cursorb = 1; -- cursorc = b[0]+1; -- while (cursorb <= b[0] || cursorc <= a[0]) { -- if (cursorc > a[0]) -- idb = NOID; -- else -- idb = b[cursorc]; -- if (cursorb <= b[0] && b[cursorb] < idb) -- a[cursora++] = b[cursorb++]; -- else { -- a[cursora++] = idb; -- cursorc++; -- } -- } -- -- return 0; --} -- -- --#if 0 --/* -- * bdb_idl_notin - return a intersection ~b (or a minus b) -- */ --int --bdb_idl_notin( -- ID *a, -- ID *b, -- ID *ids ) --{ -- ID ida, idb; -- ID cursora = 0, cursorb = 0; -- -- if( BDB_IDL_IS_ZERO( a ) || -- BDB_IDL_IS_ZERO( b ) || -- BDB_IDL_IS_RANGE( b ) ) -- { -- BDB_IDL_CPY( ids, a ); -- return 0; -- } -- -- if( BDB_IDL_IS_RANGE( a ) ) { -- BDB_IDL_CPY( ids, a ); -- return 0; -- } -- -- ida = bdb_idl_first( a, &cursora ), -- idb = bdb_idl_first( b, &cursorb ); -- -- ids[0] = 0; -- -- while( ida != NOID ) { -- if ( idb == NOID ) { -- /* we could shortcut this */ -- ids[++ids[0]] = ida; -- ida = bdb_idl_next( a, &cursora ); -- -- } else if ( ida < idb ) { -- ids[++ids[0]] = ida; -- ida = bdb_idl_next( a, &cursora ); -- -- } else if ( ida > idb ) { -- idb = bdb_idl_next( b, &cursorb ); -- -- } else { -- ida = bdb_idl_next( a, &cursora ); -- idb = bdb_idl_next( b, &cursorb ); -- } -- } -- -- return 0; --} --#endif -- --ID bdb_idl_first( ID *ids, ID *cursor ) --{ -- ID pos; -- -- if ( ids[0] == 0 ) { -- *cursor = NOID; -- return NOID; -- } -- -- if ( BDB_IDL_IS_RANGE( ids ) ) { -- if( *cursor < ids[1] ) { -- *cursor = ids[1]; -- } -- return *cursor; -- } -- -- if ( *cursor == 0 ) -- pos = 1; -- else -- pos = bdb_idl_search( ids, *cursor ); -- -- if( pos > ids[0] ) { -- return NOID; -- } -- -- *cursor = pos; -- return ids[pos]; --} -- --ID bdb_idl_next( ID *ids, ID *cursor ) --{ -- if ( BDB_IDL_IS_RANGE( ids ) ) { -- if( ids[2] < ++(*cursor) ) { -- return NOID; -- } -- return *cursor; -- } -- -- if ( ++(*cursor) <= ids[0] ) { -- return ids[*cursor]; -- } -- -- return NOID; --} -- --#ifdef BDB_HIER -- --/* Add one ID to an unsorted list. We ensure that the first element is the -- * minimum and the last element is the maximum, for fast range compaction. -- * this means IDLs up to length 3 are always sorted... -- */ --int bdb_idl_append_one( ID *ids, ID id ) --{ -- if (BDB_IDL_IS_RANGE( ids )) { -- /* if already in range, treat as a dup */ -- if (id >= BDB_IDL_RANGE_FIRST(ids) && id <= BDB_IDL_RANGE_LAST(ids)) -- return -1; -- if (id < BDB_IDL_RANGE_FIRST(ids)) -- ids[1] = id; -- else if (id > BDB_IDL_RANGE_LAST(ids)) -- ids[2] = id; -- return 0; -- } -- if ( ids[0] ) { -- ID tmp; -- -- if (id < ids[1]) { -- tmp = ids[1]; -- ids[1] = id; -- id = tmp; -- } -- if ( ids[0] > 1 && id < ids[ids[0]] ) { -- tmp = ids[ids[0]]; -- ids[ids[0]] = id; -- id = tmp; -- } -- } -- ids[0]++; -- if ( ids[0] >= BDB_IDL_UM_MAX ) { -- ids[0] = NOID; -- ids[2] = id; -- } else { -- ids[ids[0]] = id; -- } -- return 0; --} -- --/* Append sorted list b to sorted list a. The result is unsorted but -- * a[1] is the min of the result and a[a[0]] is the max. -- */ --int bdb_idl_append( ID *a, ID *b ) --{ -- ID ida, idb, tmp, swap = 0; -- -- if ( BDB_IDL_IS_ZERO( b ) ) { -- return 0; -- } -- -- if ( BDB_IDL_IS_ZERO( a ) ) { -- BDB_IDL_CPY( a, b ); -- return 0; -- } -- -- if ( b[0] == 1 ) { -- return bdb_idl_append_one( a, BDB_IDL_FIRST( b )); -- } -- -- ida = BDB_IDL_LAST( a ); -- idb = BDB_IDL_LAST( b ); -- if ( BDB_IDL_IS_RANGE( a ) || BDB_IDL_IS_RANGE(b) || -- a[0] + b[0] >= BDB_IDL_UM_MAX ) { -- a[2] = IDL_MAX( ida, idb ); -- a[1] = IDL_MIN( a[1], b[1] ); -- a[0] = NOID; -- return 0; -- } -- -- if ( ida > idb ) { -- swap = idb; -- a[a[0]] = idb; -- b[b[0]] = ida; -- } -- -- if ( b[1] < a[1] ) { -- tmp = a[1]; -- a[1] = b[1]; -- } else { -- tmp = b[1]; -- } -- a[0]++; -- a[a[0]] = tmp; -- -- { -- int i = b[0] - 1; -- AC_MEMCPY(a+a[0]+1, b+2, i * sizeof(ID)); -- a[0] += i; -- } -- if ( swap ) { -- b[b[0]] = swap; -- } -- return 0; --} -- --#if 1 -- --/* Quicksort + Insertion sort for small arrays */ -- --#define SMALL 8 --#define SWAP(a,b) itmp=(a);(a)=(b);(b)=itmp -- --void --bdb_idl_sort( ID *ids, ID *tmp ) --{ -- int *istack = (int *)tmp; -- int i,j,k,l,ir,jstack; -- ID a, itmp; -- -- if ( BDB_IDL_IS_RANGE( ids )) -- return; -- -- ir = ids[0]; -- l = 1; -- jstack = 0; -- for(;;) { -- if (ir - l < SMALL) { /* Insertion sort */ -- for (j=l+1;j<=ir;j++) { -- a = ids[j]; -- for (i=j-1;i>=1;i--) { -- if (ids[i] <= a) break; -- ids[i+1] = ids[i]; -- } -- ids[i+1] = a; -- } -- if (jstack == 0) break; -- ir = istack[jstack--]; -- l = istack[jstack--]; -- } else { -- k = (l + ir) >> 1; /* Choose median of left, center, right */ -- SWAP(ids[k], ids[l+1]); -- if (ids[l] > ids[ir]) { -- SWAP(ids[l], ids[ir]); -- } -- if (ids[l+1] > ids[ir]) { -- SWAP(ids[l+1], ids[ir]); -- } -- if (ids[l] > ids[l+1]) { -- SWAP(ids[l], ids[l+1]); -- } -- i = l+1; -- j = ir; -- a = ids[l+1]; -- for(;;) { -- do i++; while(ids[i] < a); -- do j--; while(ids[j] > a); -- if (j < i) break; -- SWAP(ids[i],ids[j]); -- } -- ids[l+1] = ids[j]; -- ids[j] = a; -- jstack += 2; -- if (ir-i+1 >= j-1) { -- istack[jstack] = ir; -- istack[jstack-1] = i; -- ir = j-1; -- } else { -- istack[jstack] = j-1; -- istack[jstack-1] = l; -- l = i; -- } -- } -- } --} -- --#else -- --/* 8 bit Radix sort + insertion sort -- * -- * based on code from http://www.cubic.org/docs/radix.htm -- * with improvements by ebackes@symas.com and hyc@symas.com -- * -- * This code is O(n) but has a relatively high constant factor. For lists -- * up to ~50 Quicksort is slightly faster; up to ~100 they are even. -- * Much faster than quicksort for lists longer than ~100. Insertion -- * sort is actually superior for lists <50. -- */ -- --#define BUCKETS (1<<8) --#define SMALL 50 -- --void --bdb_idl_sort( ID *ids, ID *tmp ) --{ -- int count, soft_limit, phase = 0, size = ids[0]; -- ID *idls[2]; -- unsigned char *maxv = (unsigned char *)&ids[size]; -- -- if ( BDB_IDL_IS_RANGE( ids )) -- return; -- -- /* Use insertion sort for small lists */ -- if ( size <= SMALL ) { -- int i,j; -- ID a; -- -- for (j=1;j<=size;j++) { -- a = ids[j]; -- for (i=j-1;i>=1;i--) { -- if (ids[i] <= a) break; -- ids[i+1] = ids[i]; -- } -- ids[i+1] = a; -- } -- return; -- } -- -- tmp[0] = size; -- idls[0] = ids; -- idls[1] = tmp; -- --#if BYTE_ORDER == BIG_ENDIAN -- for (soft_limit = 0; !maxv[soft_limit]; soft_limit++); --#else -- for (soft_limit = sizeof(ID)-1; !maxv[soft_limit]; soft_limit--); --#endif -- -- for ( --#if BYTE_ORDER == BIG_ENDIAN -- count = sizeof(ID)-1; count >= soft_limit; --count --#else -- count = 0; count <= soft_limit; ++count --#endif -- ) { -- unsigned int num[BUCKETS], * np, n, sum; -- int i; -- ID *sp, *source, *dest; -- unsigned char *bp, *source_start; -- -- source = idls[phase]+1; -- dest = idls[phase^1]+1; -- source_start = ((unsigned char *) source) + count; -- -- np = num; -- for ( i = BUCKETS; i > 0; --i ) *np++ = 0; -- -- /* count occurences of every byte value */ -- bp = source_start; -- for ( i = size; i > 0; --i, bp += sizeof(ID) ) -- num[*bp]++; -- -- /* transform count into index by summing elements and storing -- * into same array -- */ -- sum = 0; -- np = num; -- for ( i = BUCKETS; i > 0; --i ) { -- n = *np; -- *np++ = sum; -- sum += n; -- } -- -- /* fill dest with the right values in the right place */ -- bp = source_start; -- sp = source; -- for ( i = size; i > 0; --i, bp += sizeof(ID) ) { -- np = num + *bp; -- dest[*np] = *sp++; -- ++(*np); -- } -- phase ^= 1; -- } -- -- /* copy back from temp if needed */ -- if ( phase ) { -- ids++; tmp++; -- for ( count = 0; count < size; ++count ) -- *ids++ = *tmp++; -- } --} --#endif /* Quick vs Radix */ -- --#endif /* BDB_HIER */ -diff --git a/servers/slapd/back-bdb/idl.h b/servers/slapd/back-bdb/idl.h -deleted file mode 100644 -index 909a43b..0000000 ---- a/servers/slapd/back-bdb/idl.h -+++ /dev/null -@@ -1,75 +0,0 @@ --/* idl.h - ldap bdb back-end ID list header file */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#ifndef _BDB_IDL_H_ --#define _BDB_IDL_H_ -- --/* IDL sizes - likely should be even bigger -- * limiting factors: sizeof(ID), thread stack size -- */ --#define BDB_IDL_LOGN 16 /* DB_SIZE is 2^16, UM_SIZE is 2^17 */ --#define BDB_IDL_DB_SIZE (1<bi_lastid) ) --#define BDB_IDL_ALL( bdb, ids ) BDB_IDL_RANGE( ids, 1, ((bdb)->bi_lastid) ) -- --#define BDB_IDL_FIRST( ids ) ( (ids)[1] ) --#define BDB_IDL_LLAST( ids ) ( (ids)[(ids)[0]] ) --#define BDB_IDL_LAST( ids ) ( BDB_IDL_IS_RANGE(ids) \ -- ? (ids)[2] : (ids)[(ids)[0]] ) -- --#define BDB_IDL_N( ids ) ( BDB_IDL_IS_RANGE(ids) \ -- ? ((ids)[2]-(ids)[1])+1 : (ids)[0] ) -- --LDAP_BEGIN_DECL --LDAP_END_DECL -- --#endif -diff --git a/servers/slapd/back-bdb/index.c b/servers/slapd/back-bdb/index.c -deleted file mode 100644 -index c095641..0000000 ---- a/servers/slapd/back-bdb/index.c -+++ /dev/null -@@ -1,574 +0,0 @@ --/* index.c - routines for dealing with attribute indexes */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include -- --#include --#include -- --#include "slap.h" --#include "back-bdb.h" --#include "lutil_hash.h" -- --static char presence_keyval[] = {0,0}; --static struct berval presence_key = BER_BVC(presence_keyval); -- --AttrInfo *bdb_index_mask( -- Backend *be, -- AttributeDescription *desc, -- struct berval *atname ) --{ -- AttributeType *at; -- AttrInfo *ai = bdb_attr_mask( be->be_private, desc ); -- -- if( ai ) { -- *atname = desc->ad_cname; -- return ai; -- } -- -- /* If there is a tagging option, did we ever index the base -- * type? If so, check for mask, otherwise it's not there. -- */ -- if( slap_ad_is_tagged( desc ) && desc != desc->ad_type->sat_ad ) { -- /* has tagging option */ -- ai = bdb_attr_mask( be->be_private, desc->ad_type->sat_ad ); -- -- if ( ai && !( ai->ai_indexmask & SLAP_INDEX_NOTAGS ) ) { -- *atname = desc->ad_type->sat_cname; -- return ai; -- } -- } -- -- /* see if supertype defined mask for its subtypes */ -- for( at = desc->ad_type; at != NULL ; at = at->sat_sup ) { -- /* If no AD, we've never indexed this type */ -- if ( !at->sat_ad ) continue; -- -- ai = bdb_attr_mask( be->be_private, at->sat_ad ); -- -- if ( ai && !( ai->ai_indexmask & SLAP_INDEX_NOSUBTYPES ) ) { -- *atname = at->sat_cname; -- return ai; -- } -- } -- -- return 0; --} -- --/* This function is only called when evaluating search filters. -- */ --int bdb_index_param( -- Backend *be, -- AttributeDescription *desc, -- int ftype, -- DB **dbp, -- slap_mask_t *maskp, -- struct berval *prefixp ) --{ -- AttrInfo *ai; -- int rc; -- slap_mask_t mask, type = 0; -- DB *db; -- -- ai = bdb_index_mask( be, desc, prefixp ); -- -- if ( !ai ) { --#ifdef BDB_MONITOR_IDX -- switch ( ftype ) { -- case LDAP_FILTER_PRESENT: -- type = SLAP_INDEX_PRESENT; -- break; -- case LDAP_FILTER_APPROX: -- type = SLAP_INDEX_APPROX; -- break; -- case LDAP_FILTER_EQUALITY: -- type = SLAP_INDEX_EQUALITY; -- break; -- case LDAP_FILTER_SUBSTRINGS: -- type = SLAP_INDEX_SUBSTR; -- break; -- default: -- return LDAP_INAPPROPRIATE_MATCHING; -- } -- bdb_monitor_idx_add( be->be_private, desc, type ); --#endif /* BDB_MONITOR_IDX */ -- -- return LDAP_INAPPROPRIATE_MATCHING; -- } -- mask = ai->ai_indexmask; -- -- rc = bdb_db_cache( be, prefixp, &db ); -- -- if( rc != LDAP_SUCCESS ) { -- return rc; -- } -- -- switch( ftype ) { -- case LDAP_FILTER_PRESENT: -- type = SLAP_INDEX_PRESENT; -- if( IS_SLAP_INDEX( mask, SLAP_INDEX_PRESENT ) ) { -- *prefixp = presence_key; -- goto done; -- } -- break; -- -- case LDAP_FILTER_APPROX: -- type = SLAP_INDEX_APPROX; -- if ( desc->ad_type->sat_approx ) { -- if( IS_SLAP_INDEX( mask, SLAP_INDEX_APPROX ) ) { -- goto done; -- } -- break; -- } -- -- /* Use EQUALITY rule and index for approximate match */ -- /* fall thru */ -- -- case LDAP_FILTER_EQUALITY: -- type = SLAP_INDEX_EQUALITY; -- if( IS_SLAP_INDEX( mask, SLAP_INDEX_EQUALITY ) ) { -- goto done; -- } -- break; -- -- case LDAP_FILTER_SUBSTRINGS: -- type = SLAP_INDEX_SUBSTR; -- if( IS_SLAP_INDEX( mask, SLAP_INDEX_SUBSTR ) ) { -- goto done; -- } -- break; -- -- default: -- return LDAP_OTHER; -- } -- --#ifdef BDB_MONITOR_IDX -- bdb_monitor_idx_add( be->be_private, desc, type ); --#endif /* BDB_MONITOR_IDX */ -- -- return LDAP_INAPPROPRIATE_MATCHING; -- --done: -- *dbp = db; -- *maskp = mask; -- return LDAP_SUCCESS; --} -- --static int indexer( -- Operation *op, -- DB_TXN *txn, -- AttributeDescription *ad, -- struct berval *atname, -- BerVarray vals, -- ID id, -- int opid, -- slap_mask_t mask ) --{ -- int rc, i; -- DB *db; -- struct berval *keys; -- -- assert( mask != 0 ); -- -- rc = bdb_db_cache( op->o_bd, atname, &db ); -- -- if ( rc != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_ANY, -- "bdb_index_read: Could not open DB %s\n", -- atname->bv_val, 0, 0 ); -- return LDAP_OTHER; -- } -- -- if( IS_SLAP_INDEX( mask, SLAP_INDEX_PRESENT ) ) { -- rc = bdb_key_change( op->o_bd, db, txn, &presence_key, id, opid ); -- if( rc ) { -- goto done; -- } -- } -- -- if( IS_SLAP_INDEX( mask, SLAP_INDEX_EQUALITY ) ) { -- rc = ad->ad_type->sat_equality->smr_indexer( -- LDAP_FILTER_EQUALITY, -- mask, -- ad->ad_type->sat_syntax, -- ad->ad_type->sat_equality, -- atname, vals, &keys, op->o_tmpmemctx ); -- -- if( rc == LDAP_SUCCESS && keys != NULL ) { -- for( i=0; keys[i].bv_val != NULL; i++ ) { -- rc = bdb_key_change( op->o_bd, db, txn, &keys[i], id, opid ); -- if( rc ) { -- ber_bvarray_free_x( keys, op->o_tmpmemctx ); -- goto done; -- } -- } -- ber_bvarray_free_x( keys, op->o_tmpmemctx ); -- } -- rc = LDAP_SUCCESS; -- } -- -- if( IS_SLAP_INDEX( mask, SLAP_INDEX_APPROX ) ) { -- rc = ad->ad_type->sat_approx->smr_indexer( -- LDAP_FILTER_APPROX, -- mask, -- ad->ad_type->sat_syntax, -- ad->ad_type->sat_approx, -- atname, vals, &keys, op->o_tmpmemctx ); -- -- if( rc == LDAP_SUCCESS && keys != NULL ) { -- for( i=0; keys[i].bv_val != NULL; i++ ) { -- rc = bdb_key_change( op->o_bd, db, txn, &keys[i], id, opid ); -- if( rc ) { -- ber_bvarray_free_x( keys, op->o_tmpmemctx ); -- goto done; -- } -- } -- ber_bvarray_free_x( keys, op->o_tmpmemctx ); -- } -- -- rc = LDAP_SUCCESS; -- } -- -- if( IS_SLAP_INDEX( mask, SLAP_INDEX_SUBSTR ) ) { -- rc = ad->ad_type->sat_substr->smr_indexer( -- LDAP_FILTER_SUBSTRINGS, -- mask, -- ad->ad_type->sat_syntax, -- ad->ad_type->sat_substr, -- atname, vals, &keys, op->o_tmpmemctx ); -- -- if( rc == LDAP_SUCCESS && keys != NULL ) { -- for( i=0; keys[i].bv_val != NULL; i++ ) { -- rc = bdb_key_change( op->o_bd, db, txn, &keys[i], id, opid ); -- if( rc ) { -- ber_bvarray_free_x( keys, op->o_tmpmemctx ); -- goto done; -- } -- } -- ber_bvarray_free_x( keys, op->o_tmpmemctx ); -- } -- -- rc = LDAP_SUCCESS; -- } -- --done: -- switch( rc ) { -- /* The callers all know how to deal with these results */ -- case 0: -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- break; -- /* Anything else is bad news */ -- default: -- rc = LDAP_OTHER; -- } -- return rc; --} -- --static int index_at_values( -- Operation *op, -- DB_TXN *txn, -- AttributeDescription *ad, -- AttributeType *type, -- struct berval *tags, -- BerVarray vals, -- ID id, -- int opid ) --{ -- int rc; -- slap_mask_t mask = 0; -- int ixop = opid; -- AttrInfo *ai = NULL; -- -- if ( opid == BDB_INDEX_UPDATE_OP ) -- ixop = SLAP_INDEX_ADD_OP; -- -- if( type->sat_sup ) { -- /* recurse */ -- rc = index_at_values( op, txn, NULL, -- type->sat_sup, tags, -- vals, id, opid ); -- -- if( rc ) return rc; -- } -- -- /* If this type has no AD, we've never used it before */ -- if( type->sat_ad ) { -- ai = bdb_attr_mask( op->o_bd->be_private, type->sat_ad ); -- if ( ai ) { --#ifdef LDAP_COMP_MATCH -- /* component indexing */ -- if ( ai->ai_cr ) { -- ComponentReference *cr; -- for( cr = ai->ai_cr ; cr ; cr = cr->cr_next ) { -- rc = indexer( op, txn, cr->cr_ad, &type->sat_cname, -- cr->cr_nvals, id, ixop, -- cr->cr_indexmask ); -- } -- } --#endif -- ad = type->sat_ad; -- /* If we're updating the index, just set the new bits that aren't -- * already in the old mask. -- */ -- if ( opid == BDB_INDEX_UPDATE_OP ) -- mask = ai->ai_newmask & ~ai->ai_indexmask; -- else -- /* For regular updates, if there is a newmask use it. Otherwise -- * just use the old mask. -- */ -- mask = ai->ai_newmask ? ai->ai_newmask : ai->ai_indexmask; -- if( mask ) { -- rc = indexer( op, txn, ad, &type->sat_cname, -- vals, id, ixop, mask ); -- -- if( rc ) return rc; -- } -- } -- } -- -- if( tags->bv_len ) { -- AttributeDescription *desc; -- -- desc = ad_find_tags( type, tags ); -- if( desc ) { -- ai = bdb_attr_mask( op->o_bd->be_private, desc ); -- -- if( ai ) { -- if ( opid == BDB_INDEX_UPDATE_OP ) -- mask = ai->ai_newmask & ~ai->ai_indexmask; -- else -- mask = ai->ai_newmask ? ai->ai_newmask : ai->ai_indexmask; -- if ( mask ) { -- rc = indexer( op, txn, desc, &desc->ad_cname, -- vals, id, ixop, mask ); -- -- if( rc ) { -- return rc; -- } -- } -- } -- } -- } -- -- return LDAP_SUCCESS; --} -- --int bdb_index_values( -- Operation *op, -- DB_TXN *txn, -- AttributeDescription *desc, -- BerVarray vals, -- ID id, -- int opid ) --{ -- int rc; -- -- /* Never index ID 0 */ -- if ( id == 0 ) -- return 0; -- -- rc = index_at_values( op, txn, desc, -- desc->ad_type, &desc->ad_tags, -- vals, id, opid ); -- -- return rc; --} -- --/* Get the list of which indices apply to this attr */ --int --bdb_index_recset( -- struct bdb_info *bdb, -- Attribute *a, -- AttributeType *type, -- struct berval *tags, -- IndexRec *ir ) --{ -- int rc, slot; -- AttrList *al; -- -- if( type->sat_sup ) { -- /* recurse */ -- rc = bdb_index_recset( bdb, a, type->sat_sup, tags, ir ); -- if( rc ) return rc; -- } -- /* If this type has no AD, we've never used it before */ -- if( type->sat_ad ) { -- slot = bdb_attr_slot( bdb, type->sat_ad, NULL ); -- if ( slot >= 0 ) { -- ir[slot].ai = bdb->bi_attrs[slot]; -- al = ch_malloc( sizeof( AttrList )); -- al->attr = a; -- al->next = ir[slot].attrs; -- ir[slot].attrs = al; -- } -- } -- if( tags->bv_len ) { -- AttributeDescription *desc; -- -- desc = ad_find_tags( type, tags ); -- if( desc ) { -- slot = bdb_attr_slot( bdb, desc, NULL ); -- if ( slot >= 0 ) { -- ir[slot].ai = bdb->bi_attrs[slot]; -- al = ch_malloc( sizeof( AttrList )); -- al->attr = a; -- al->next = ir[slot].attrs; -- ir[slot].attrs = al; -- } -- } -- } -- return LDAP_SUCCESS; --} -- --/* Apply the indices for the recset */ --int bdb_index_recrun( -- Operation *op, -- struct bdb_info *bdb, -- IndexRec *ir0, -- ID id, -- int base ) --{ -- IndexRec *ir; -- AttrList *al; -- int i, rc = 0; -- -- /* Never index ID 0 */ -- if ( id == 0 ) -- return 0; -- -- for (i=base; ibi_nattrs; i+=slap_tool_thread_max-1) { -- ir = ir0 + i; -- if ( !ir->ai ) continue; -- while (( al = ir->attrs )) { -- ir->attrs = al->next; -- rc = indexer( op, NULL, ir->ai->ai_desc, -- &ir->ai->ai_desc->ad_type->sat_cname, -- al->attr->a_nvals, id, SLAP_INDEX_ADD_OP, -- ir->ai->ai_indexmask ); -- free( al ); -- if ( rc ) break; -- } -- } -- return rc; --} -- --int --bdb_index_entry( -- Operation *op, -- DB_TXN *txn, -- int opid, -- Entry *e ) --{ -- int rc; -- Attribute *ap = e->e_attrs; --#if 0 /* ifdef LDAP_COMP_MATCH */ -- ComponentReference *cr_list = NULL; -- ComponentReference *cr = NULL, *dupped_cr = NULL; -- void* decoded_comp; -- ComponentSyntaxInfo* csi_attr; -- Syntax* syn; -- AttributeType* at; -- int i, num_attr; -- void* mem_op; -- struct berval value = {0}; --#endif -- -- /* Never index ID 0 */ -- if ( e->e_id == 0 ) -- return 0; -- -- Debug( LDAP_DEBUG_TRACE, "=> index_entry_%s( %ld, \"%s\" )\n", -- opid == SLAP_INDEX_DELETE_OP ? "del" : "add", -- (long) e->e_id, e->e_dn ); -- -- /* add each attribute to the indexes */ -- for ( ; ap != NULL; ap = ap->a_next ) { --#if 0 /* ifdef LDAP_COMP_MATCH */ -- AttrInfo *ai; -- /* see if attribute has components to be indexed */ -- ai = bdb_attr_mask( op->o_bd->be_private, ap->a_desc->ad_type->sat_ad ); -- if ( !ai ) continue; -- cr_list = ai->ai_cr; -- if ( attr_converter && cr_list ) { -- syn = ap->a_desc->ad_type->sat_syntax; -- ap->a_comp_data = op->o_tmpalloc( sizeof( ComponentData ), op->o_tmpmemctx ); -- /* Memory chunk(nibble) pre-allocation for decoders */ -- mem_op = nibble_mem_allocator ( 1024*16, 1024*4 ); -- ap->a_comp_data->cd_mem_op = mem_op; -- for( cr = cr_list ; cr ; cr = cr->cr_next ) { -- /* count how many values in an attribute */ -- for( num_attr=0; ap->a_vals[num_attr].bv_val != NULL; num_attr++ ); -- num_attr++; -- cr->cr_nvals = (BerVarray)op->o_tmpalloc( sizeof( struct berval )*num_attr, op->o_tmpmemctx ); -- for( i=0; ap->a_vals[i].bv_val != NULL; i++ ) { -- /* decoding attribute value */ -- decoded_comp = attr_converter ( ap, syn, &ap->a_vals[i] ); -- if ( !decoded_comp ) -- return LDAP_DECODING_ERROR; -- /* extracting the referenced component */ -- dupped_cr = dup_comp_ref( op, cr ); -- csi_attr = ((ComponentSyntaxInfo*)decoded_comp)->csi_comp_desc->cd_extract_i( mem_op, dupped_cr, decoded_comp ); -- if ( !csi_attr ) -- return LDAP_DECODING_ERROR; -- cr->cr_asn_type_id = csi_attr->csi_comp_desc->cd_type_id; -- cr->cr_ad = (AttributeDescription*)get_component_description ( cr->cr_asn_type_id ); -- if ( !cr->cr_ad ) -- return LDAP_INVALID_SYNTAX; -- at = cr->cr_ad->ad_type; -- /* encoding the value of component in GSER */ -- rc = component_encoder( mem_op, csi_attr, &value ); -- if ( rc != LDAP_SUCCESS ) -- return LDAP_ENCODING_ERROR; -- /* Normalize the encoded component values */ -- if ( at->sat_equality && at->sat_equality->smr_normalize ) { -- rc = at->sat_equality->smr_normalize ( -- SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX, -- at->sat_syntax, at->sat_equality, -- &value, &cr->cr_nvals[i], op->o_tmpmemctx ); -- } else { -- cr->cr_nvals[i] = value; -- } -- } -- /* The end of BerVarray */ -- cr->cr_nvals[num_attr-1].bv_val = NULL; -- cr->cr_nvals[num_attr-1].bv_len = 0; -- } -- op->o_tmpfree( ap->a_comp_data, op->o_tmpmemctx ); -- nibble_mem_free ( mem_op ); -- ap->a_comp_data = NULL; -- } --#endif -- rc = bdb_index_values( op, txn, ap->a_desc, -- ap->a_nvals, e->e_id, opid ); -- -- if( rc != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_TRACE, -- "<= index_entry_%s( %ld, \"%s\" ) failure\n", -- opid == SLAP_INDEX_ADD_OP ? "add" : "del", -- (long) e->e_id, e->e_dn ); -- return rc; -- } -- } -- -- Debug( LDAP_DEBUG_TRACE, "<= index_entry_%s( %ld, \"%s\" ) success\n", -- opid == SLAP_INDEX_DELETE_OP ? "del" : "add", -- (long) e->e_id, e->e_dn ); -- -- return LDAP_SUCCESS; --} -diff --git a/servers/slapd/back-bdb/init.c b/servers/slapd/back-bdb/init.c -deleted file mode 100644 -index 6c42d54..0000000 ---- a/servers/slapd/back-bdb/init.c -+++ /dev/null -@@ -1,874 +0,0 @@ --/* init.c - initialize bdb backend */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include --#include --#include --#include --#include --#include --#include "back-bdb.h" --#include --#include --#include "alock.h" --#include "config.h" -- --static const struct bdbi_database { -- char *file; -- struct berval name; -- int type; -- int flags; --} bdbi_databases[] = { -- { "id2entry" BDB_SUFFIX, BER_BVC("id2entry"), DB_BTREE, 0 }, -- { "dn2id" BDB_SUFFIX, BER_BVC("dn2id"), DB_BTREE, 0 }, -- { NULL, BER_BVNULL, 0, 0 } --}; -- --typedef void * db_malloc(size_t); --typedef void * db_realloc(void *, size_t); -- --#define bdb_db_init BDB_SYMBOL(db_init) --#define bdb_db_open BDB_SYMBOL(db_open) --#define bdb_db_close BDB_SYMBOL(db_close) -- --static int --bdb_db_init( BackendDB *be, ConfigReply *cr ) --{ -- struct bdb_info *bdb; -- int rc; -- -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_db_init) ": Initializing " BDB_UCTYPE " database\n", -- 0, 0, 0 ); -- -- /* allocate backend-database-specific stuff */ -- bdb = (struct bdb_info *) ch_calloc( 1, sizeof(struct bdb_info) ); -- -- /* DBEnv parameters */ -- bdb->bi_dbenv_home = ch_strdup( SLAPD_DEFAULT_DB_DIR ); -- bdb->bi_dbenv_xflags = DB_TIME_NOTGRANTED; -- bdb->bi_dbenv_mode = SLAPD_DEFAULT_DB_MODE; -- -- bdb->bi_cache.c_maxsize = DEFAULT_CACHE_SIZE; -- bdb->bi_cache.c_minfree = 1; -- -- bdb->bi_lock_detect = DB_LOCK_DEFAULT; -- bdb->bi_search_stack_depth = DEFAULT_SEARCH_STACK_DEPTH; -- bdb->bi_search_stack = NULL; -- -- ldap_pvt_thread_mutex_init( &bdb->bi_database_mutex ); -- ldap_pvt_thread_mutex_init( &bdb->bi_lastid_mutex ); --#ifdef BDB_HIER -- ldap_pvt_thread_mutex_init( &bdb->bi_modrdns_mutex ); --#endif -- ldap_pvt_thread_mutex_init( &bdb->bi_cache.c_lru_mutex ); -- ldap_pvt_thread_mutex_init( &bdb->bi_cache.c_count_mutex ); -- ldap_pvt_thread_mutex_init( &bdb->bi_cache.c_eifree_mutex ); -- ldap_pvt_thread_mutex_init( &bdb->bi_cache.c_dntree.bei_kids_mutex ); -- ldap_pvt_thread_rdwr_init ( &bdb->bi_cache.c_rwlock ); -- ldap_pvt_thread_rdwr_init( &bdb->bi_idl_tree_rwlock ); -- ldap_pvt_thread_mutex_init( &bdb->bi_idl_tree_lrulock ); -- -- be->be_private = bdb; -- be->be_cf_ocs = be->bd_info->bi_cf_ocs; -- --#ifndef BDB_MULTIPLE_SUFFIXES -- SLAP_DBFLAGS( be ) |= SLAP_DBFLAG_ONE_SUFFIX; --#endif -- -- rc = bdb_monitor_db_init( be ); -- -- return rc; --} -- --static int --bdb_db_close( BackendDB *be, ConfigReply *cr ); -- --static int --bdb_db_open( BackendDB *be, ConfigReply *cr ) --{ -- int rc, i; -- struct bdb_info *bdb = (struct bdb_info *) be->be_private; -- struct stat stat1, stat2; -- u_int32_t flags; -- char path[MAXPATHLEN]; -- char *dbhome; -- Entry *e = NULL; -- int do_recover = 0, do_alock_recover = 0; -- int alockt, quick = 0; -- int do_retry = 1; -- -- if ( be->be_suffix == NULL ) { -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": need suffix.\n", -- 1, 0, 0 ); -- return -1; -- } -- -- Debug( LDAP_DEBUG_ARGS, -- LDAP_XSTRING(bdb_db_open) ": \"%s\"\n", -- be->be_suffix[0].bv_val, 0, 0 ); -- -- /* Check existence of dbenv_home. Any error means trouble */ -- rc = stat( bdb->bi_dbenv_home, &stat1 ); -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": database \"%s\": " -- "cannot access database directory \"%s\" (%d).\n", -- be->be_suffix[0].bv_val, bdb->bi_dbenv_home, errno ); -- return -1; -- } -- -- /* Perform database use arbitration/recovery logic */ -- alockt = (slapMode & SLAP_TOOL_READONLY) ? ALOCK_LOCKED : ALOCK_UNIQUE; -- if ( slapMode & SLAP_TOOL_QUICK ) { -- alockt |= ALOCK_NOSAVE; -- quick = 1; -- } -- -- rc = alock_open( &bdb->bi_alock_info, -- "slapd", -- bdb->bi_dbenv_home, alockt ); -- -- /* alockt is TRUE if the existing environment was created in Quick mode */ -- alockt = (rc & ALOCK_NOSAVE) ? 1 : 0; -- rc &= ~ALOCK_NOSAVE; -- -- if( rc == ALOCK_RECOVER ) { -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": database \"%s\": " -- "unclean shutdown detected; attempting recovery.\n", -- be->be_suffix[0].bv_val, 0, 0 ); -- do_alock_recover = 1; -- do_recover = DB_RECOVER; -- } else if( rc == ALOCK_BUSY ) { -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": database \"%s\": " -- "database already in use.\n", -- be->be_suffix[0].bv_val, 0, 0 ); -- return -1; -- } else if( rc != ALOCK_CLEAN ) { -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": database \"%s\": " -- "alock package is unstable.\n", -- be->be_suffix[0].bv_val, 0, 0 ); -- return -1; -- } -- if ( rc == ALOCK_CLEAN ) -- be->be_flags |= SLAP_DBFLAG_CLEAN; -- -- /* -- * The DB_CONFIG file may have changed. If so, recover the -- * database so that new settings are put into effect. Also -- * note the possible absence of DB_CONFIG in the log. -- */ -- if( stat( bdb->bi_db_config_path, &stat1 ) == 0 ) { -- if ( !do_recover ) { -- char *ptr = lutil_strcopy(path, bdb->bi_dbenv_home); -- *ptr++ = LDAP_DIRSEP[0]; -- strcpy( ptr, "__db.001" ); -- if( stat( path, &stat2 ) == 0 ) { -- if( stat2.st_mtime < stat1.st_mtime ) { -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": DB_CONFIG for suffix \"%s\" has changed.\n", -- be->be_suffix[0].bv_val, 0, 0 ); -- if ( quick ) { -- Debug( LDAP_DEBUG_ANY, -- "Cannot use Quick mode; perform manual recovery first.\n", -- 0, 0, 0 ); -- slapMode ^= SLAP_TOOL_QUICK; -- rc = -1; -- goto fail; -- } else { -- Debug( LDAP_DEBUG_ANY, -- "Performing database recovery to activate new settings.\n", -- 0, 0, 0 ); -- } -- do_recover = DB_RECOVER; -- } -- } -- } -- } -- else { -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": warning - no DB_CONFIG file found " -- "in directory %s: (%d).\n" -- "Expect poor performance for suffix \"%s\".\n", -- bdb->bi_dbenv_home, errno, be->be_suffix[0].bv_val ); -- } -- -- /* Always let slapcat run, regardless of environment state. -- * This can be used to cause a cache flush after an unclean -- * shutdown. -- */ -- if ( do_recover && ( slapMode & SLAP_TOOL_READONLY )) { -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": database \"%s\": " -- "recovery skipped in read-only mode. " -- "Run manual recovery if errors are encountered.\n", -- be->be_suffix[0].bv_val, 0, 0 ); -- do_recover = 0; -- do_alock_recover = 0; -- quick = alockt; -- } -- -- /* An existing environment in Quick mode has nothing to recover. */ -- if ( alockt && do_recover ) { -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": database \"%s\": " -- "cannot recover, database must be reinitialized.\n", -- be->be_suffix[0].bv_val, 0, 0 ); -- rc = -1; -- goto fail; -- } -- -- rc = db_env_create( &bdb->bi_dbenv, 0 ); -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": database \"%s\": " -- "db_env_create failed: %s (%d).\n", -- be->be_suffix[0].bv_val, db_strerror(rc), rc ); -- goto fail; -- } -- --#ifdef HAVE_EBCDIC -- strcpy( path, bdb->bi_dbenv_home ); -- __atoe( path ); -- dbhome = path; --#else -- dbhome = bdb->bi_dbenv_home; --#endif -- -- /* If existing environment is clean but doesn't support -- * currently requested modes, remove it. -- */ -- if ( !do_recover && ( alockt ^ quick )) { --shm_retry: -- rc = bdb->bi_dbenv->remove( bdb->bi_dbenv, dbhome, DB_FORCE ); -- if ( rc ) { -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": database \"%s\": " -- "dbenv remove failed: %s (%d).\n", -- be->be_suffix[0].bv_val, db_strerror(rc), rc ); -- bdb->bi_dbenv = NULL; -- goto fail; -- } -- rc = db_env_create( &bdb->bi_dbenv, 0 ); -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": database \"%s\": " -- "db_env_create failed: %s (%d).\n", -- be->be_suffix[0].bv_val, db_strerror(rc), rc ); -- goto fail; -- } -- } -- -- bdb->bi_dbenv->set_errpfx( bdb->bi_dbenv, be->be_suffix[0].bv_val ); -- bdb->bi_dbenv->set_errcall( bdb->bi_dbenv, bdb_errcall ); -- -- bdb->bi_dbenv->set_lk_detect( bdb->bi_dbenv, bdb->bi_lock_detect ); -- -- if ( !BER_BVISNULL( &bdb->bi_db_crypt_key )) { -- rc = bdb->bi_dbenv->set_encrypt( bdb->bi_dbenv, bdb->bi_db_crypt_key.bv_val, -- DB_ENCRYPT_AES ); -- if ( rc ) { -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": database \"%s\": " -- "dbenv set_encrypt failed: %s (%d).\n", -- be->be_suffix[0].bv_val, db_strerror(rc), rc ); -- goto fail; -- } -- } -- -- /* One long-lived TXN per thread, two TXNs per write op */ -- bdb->bi_dbenv->set_tx_max( bdb->bi_dbenv, connection_pool_max * 3 ); -- -- if( bdb->bi_dbenv_xflags != 0 ) { -- rc = bdb->bi_dbenv->set_flags( bdb->bi_dbenv, -- bdb->bi_dbenv_xflags, 1); -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": database \"%s\": " -- "dbenv_set_flags failed: %s (%d).\n", -- be->be_suffix[0].bv_val, db_strerror(rc), rc ); -- goto fail; -- } -- } -- --#define BDB_TXN_FLAGS (DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_TXN) -- -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_db_open) ": database \"%s\": " -- "dbenv_open(%s).\n", -- be->be_suffix[0].bv_val, bdb->bi_dbenv_home, 0); -- -- flags = DB_INIT_MPOOL | DB_CREATE | DB_THREAD; -- -- if ( !quick ) -- flags |= BDB_TXN_FLAGS; -- -- /* If a key was set, use shared memory for the BDB environment */ -- if ( bdb->bi_shm_key ) { -- bdb->bi_dbenv->set_shm_key( bdb->bi_dbenv, bdb->bi_shm_key ); -- flags |= DB_SYSTEM_MEM; -- } -- rc = (bdb->bi_dbenv->open)( bdb->bi_dbenv, dbhome, -- flags | do_recover, bdb->bi_dbenv_mode ); -- -- if ( rc ) { -- /* Regular open failed, probably a missing shm environment. -- * Start over, do a recovery. -- */ -- if ( !do_recover && bdb->bi_shm_key && do_retry ) { -- bdb->bi_dbenv->close( bdb->bi_dbenv, 0 ); -- rc = db_env_create( &bdb->bi_dbenv, 0 ); -- if( rc == 0 ) { -- Debug( LDAP_DEBUG_ANY, LDAP_XSTRING(bdb_db_open) -- ": database \"%s\": " -- "shared memory env open failed, assuming stale env.\n", -- be->be_suffix[0].bv_val, 0, 0 ); -- do_retry = 0; -- goto shm_retry; -- } -- } -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": database \"%s\" cannot be %s, err %d. " -- "Restore from backup!\n", -- be->be_suffix[0].bv_val, do_recover ? "recovered" : "opened", rc ); -- goto fail; -- } -- -- if ( do_alock_recover && alock_recover (&bdb->bi_alock_info) != 0 ) { -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": database \"%s\": alock_recover failed\n", -- be->be_suffix[0].bv_val, 0, 0 ); -- rc = -1; -- goto fail; -- } -- --#ifdef SLAP_ZONE_ALLOC -- if ( bdb->bi_cache.c_maxsize ) { -- bdb->bi_cache.c_zctx = slap_zn_mem_create( -- SLAP_ZONE_INITSIZE, SLAP_ZONE_MAXSIZE, -- SLAP_ZONE_DELTA, SLAP_ZONE_SIZE); -- } --#endif -- -- /* dncache defaults to 0 == unlimited -- * must be >= entrycache -- */ -- if ( bdb->bi_cache.c_eimax && bdb->bi_cache.c_eimax < bdb->bi_cache.c_maxsize ) { -- bdb->bi_cache.c_eimax = bdb->bi_cache.c_maxsize; -- } -- -- if ( bdb->bi_idl_cache_max_size ) { -- bdb->bi_idl_tree = NULL; -- bdb->bi_idl_cache_size = 0; -- } -- -- flags = DB_THREAD | bdb->bi_db_opflags; -- --#ifdef DB_AUTO_COMMIT -- if ( !quick ) -- flags |= DB_AUTO_COMMIT; --#endif -- -- bdb->bi_databases = (struct bdb_db_info **) ch_malloc( -- BDB_INDICES * sizeof(struct bdb_db_info *) ); -- -- /* open (and create) main database */ -- for( i = 0; bdbi_databases[i].name.bv_val; i++ ) { -- struct bdb_db_info *db; -- -- db = (struct bdb_db_info *) ch_calloc(1, sizeof(struct bdb_db_info)); -- -- rc = db_create( &db->bdi_db, bdb->bi_dbenv, 0 ); -- if( rc != 0 ) { -- snprintf(cr->msg, sizeof(cr->msg), -- "database \"%s\": db_create(%s) failed: %s (%d).", -- be->be_suffix[0].bv_val, -- bdb->bi_dbenv_home, db_strerror(rc), rc ); -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": %s\n", -- cr->msg, 0, 0 ); -- ch_free( db ); -- goto fail; -- } -- -- if( !BER_BVISNULL( &bdb->bi_db_crypt_key )) { -- rc = db->bdi_db->set_flags( db->bdi_db, DB_ENCRYPT ); -- if ( rc ) { -- snprintf(cr->msg, sizeof(cr->msg), -- "database \"%s\": db set_flags(DB_ENCRYPT)(%s) failed: %s (%d).", -- be->be_suffix[0].bv_val, -- bdb->bi_dbenv_home, db_strerror(rc), rc ); -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": %s\n", -- cr->msg, 0, 0 ); -- db->bdi_db->close( db->bdi_db, 0 ); -- ch_free( db ); -- goto fail; -- } -- } -- -- if( bdb->bi_flags & BDB_CHKSUM ) { -- rc = db->bdi_db->set_flags( db->bdi_db, DB_CHKSUM ); -- if ( rc ) { -- snprintf(cr->msg, sizeof(cr->msg), -- "database \"%s\": db set_flags(DB_CHKSUM)(%s) failed: %s (%d).", -- be->be_suffix[0].bv_val, -- bdb->bi_dbenv_home, db_strerror(rc), rc ); -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": %s\n", -- cr->msg, 0, 0 ); -- db->bdi_db->close( db->bdi_db, 0 ); -- ch_free( db ); -- goto fail; -- } -- } -- -- rc = bdb_db_findsize( bdb, (struct berval *)&bdbi_databases[i].name ); -- -- if( i == BDB_ID2ENTRY ) { -- if ( !rc ) rc = BDB_ID2ENTRY_PAGESIZE; -- rc = db->bdi_db->set_pagesize( db->bdi_db, rc ); -- -- if ( slapMode & SLAP_TOOL_MODE ) -- db->bdi_db->mpf->set_priority( db->bdi_db->mpf, -- DB_PRIORITY_VERY_LOW ); -- -- if ( slapMode & SLAP_TOOL_READMAIN ) { -- flags |= DB_RDONLY; -- } else { -- flags |= DB_CREATE; -- } -- } else { -- /* Use FS default size if not configured */ -- if ( rc ) -- rc = db->bdi_db->set_pagesize( db->bdi_db, rc ); -- -- rc = db->bdi_db->set_flags( db->bdi_db, -- DB_DUP | DB_DUPSORT ); --#ifndef BDB_HIER -- if ( slapMode & SLAP_TOOL_READONLY ) { -- flags |= DB_RDONLY; -- } else { -- flags |= DB_CREATE; -- } --#else -- rc = db->bdi_db->set_dup_compare( db->bdi_db, -- bdb_dup_compare ); -- if ( slapMode & (SLAP_TOOL_READONLY|SLAP_TOOL_READMAIN) ) { -- flags |= DB_RDONLY; -- } else { -- flags |= DB_CREATE; -- } --#endif -- } -- --#ifdef HAVE_EBCDIC -- strcpy( path, bdbi_databases[i].file ); -- __atoe( path ); -- rc = DB_OPEN( db->bdi_db, -- path, -- /* bdbi_databases[i].name, */ NULL, -- bdbi_databases[i].type, -- bdbi_databases[i].flags | flags, -- bdb->bi_dbenv_mode ); --#else -- rc = DB_OPEN( db->bdi_db, -- bdbi_databases[i].file, -- /* bdbi_databases[i].name, */ NULL, -- bdbi_databases[i].type, -- bdbi_databases[i].flags | flags, -- bdb->bi_dbenv_mode ); --#endif -- -- if ( rc != 0 ) { -- snprintf( cr->msg, sizeof(cr->msg), "database \"%s\": " -- "db_open(%s/%s) failed: %s (%d).", -- be->be_suffix[0].bv_val, -- bdb->bi_dbenv_home, bdbi_databases[i].file, -- db_strerror(rc), rc ); -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": %s\n", -- cr->msg, 0, 0 ); -- db->bdi_db->close( db->bdi_db, 0 ); -- ch_free( db ); -- goto fail; -- } -- -- flags &= ~(DB_CREATE | DB_RDONLY); -- db->bdi_name = bdbi_databases[i].name; -- bdb->bi_databases[i] = db; -- } -- -- bdb->bi_databases[i] = NULL; -- bdb->bi_ndatabases = i; -- -- /* get nextid */ -- rc = bdb_last_id( be, NULL ); -- if( rc != 0 ) { -- snprintf( cr->msg, sizeof(cr->msg), "database \"%s\": " -- "last_id(%s) failed: %s (%d).", -- be->be_suffix[0].bv_val, bdb->bi_dbenv_home, -- db_strerror(rc), rc ); -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_db_open) ": %s\n", -- cr->msg, 0, 0 ); -- goto fail; -- } -- -- if ( !quick ) { -- int txflag = DB_READ_COMMITTED; -- /* avoid deadlocks in server; tools should -- * wait since they have no deadlock retry mechanism. -- */ -- if ( slapMode & SLAP_SERVER_MODE ) -- txflag |= DB_TXN_NOWAIT; -- TXN_BEGIN(bdb->bi_dbenv, NULL, &bdb->bi_cache.c_txn, txflag); -- } -- -- entry_prealloc( bdb->bi_cache.c_maxsize ); -- attr_prealloc( bdb->bi_cache.c_maxsize * 20 ); -- -- /* setup for empty-DN contexts */ -- if ( BER_BVISEMPTY( &be->be_nsuffix[0] )) { -- rc = bdb_id2entry( be, NULL, 0, &e ); -- } -- if ( !e ) { -- struct berval gluebv = BER_BVC("glue"); -- Operation op = {0}; -- Opheader ohdr = {0}; -- e = entry_alloc(); -- e->e_id = 0; -- ber_dupbv( &e->e_name, (struct berval *)&slap_empty_bv ); -- ber_dupbv( &e->e_nname, (struct berval *)&slap_empty_bv ); -- attr_merge_one( e, slap_schema.si_ad_objectClass, -- &gluebv, NULL ); -- attr_merge_one( e, slap_schema.si_ad_structuralObjectClass, -- &gluebv, NULL ); -- op.o_hdr = &ohdr; -- op.o_bd = be; -- op.ora_e = e; -- op.o_dn = be->be_rootdn; -- op.o_ndn = be->be_rootndn; -- slap_add_opattrs( &op, NULL, NULL, 0, 0 ); -- } -- e->e_ocflags = SLAP_OC_GLUE|SLAP_OC__END; -- e->e_private = &bdb->bi_cache.c_dntree; -- bdb->bi_cache.c_dntree.bei_e = e; -- -- /* monitor setup */ -- rc = bdb_monitor_db_open( be ); -- if ( rc != 0 ) { -- goto fail; -- } -- -- bdb->bi_flags |= BDB_IS_OPEN; -- -- return 0; -- --fail: -- bdb_db_close( be, NULL ); -- return rc; --} -- --static int --bdb_db_close( BackendDB *be, ConfigReply *cr ) --{ -- int rc; -- struct bdb_info *bdb = (struct bdb_info *) be->be_private; -- struct bdb_db_info *db; -- bdb_idl_cache_entry_t *entry, *next_entry; -- -- /* monitor handling */ -- (void)bdb_monitor_db_close( be ); -- -- { -- Entry *e = bdb->bi_cache.c_dntree.bei_e; -- if ( e ) { -- bdb->bi_cache.c_dntree.bei_e = NULL; -- e->e_private = NULL; -- bdb_entry_return( e ); -- } -- } -- -- bdb->bi_flags &= ~BDB_IS_OPEN; -- -- ber_bvarray_free( bdb->bi_db_config ); -- bdb->bi_db_config = NULL; -- -- if( bdb->bi_dbenv ) { -- /* Free cache locker if we enabled locking. -- * TXNs must all be closed before DBs... -- */ -- if ( !( slapMode & SLAP_TOOL_QUICK ) && bdb->bi_cache.c_txn ) { -- TXN_ABORT( bdb->bi_cache.c_txn ); -- bdb->bi_cache.c_txn = NULL; -- } -- bdb_reader_flush( bdb->bi_dbenv ); -- } -- -- while( bdb->bi_databases && bdb->bi_ndatabases-- ) { -- db = bdb->bi_databases[bdb->bi_ndatabases]; -- rc = db->bdi_db->close( db->bdi_db, 0 ); -- /* Lower numbered names are not strdup'd */ -- if( bdb->bi_ndatabases >= BDB_NDB ) -- free( db->bdi_name.bv_val ); -- free( db ); -- } -- free( bdb->bi_databases ); -- bdb->bi_databases = NULL; -- -- bdb_cache_release_all (&bdb->bi_cache); -- -- if ( bdb->bi_idl_cache_size ) { -- avl_free( bdb->bi_idl_tree, NULL ); -- bdb->bi_idl_tree = NULL; -- entry = bdb->bi_idl_lru_head; -- do { -- next_entry = entry->idl_lru_next; -- if ( entry->idl ) -- free( entry->idl ); -- free( entry->kstr.bv_val ); -- free( entry ); -- entry = next_entry; -- } while ( entry != bdb->bi_idl_lru_head ); -- bdb->bi_idl_lru_head = bdb->bi_idl_lru_tail = NULL; -- } -- -- /* close db environment */ -- if( bdb->bi_dbenv ) { -- /* force a checkpoint, but not if we were ReadOnly, -- * and not in Quick mode since there are no transactions there. -- */ -- if ( !( slapMode & ( SLAP_TOOL_QUICK|SLAP_TOOL_READONLY ))) { -- rc = TXN_CHECKPOINT( bdb->bi_dbenv, 0, 0, DB_FORCE ); -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, -- "bdb_db_close: database \"%s\": " -- "txn_checkpoint failed: %s (%d).\n", -- be->be_suffix[0].bv_val, db_strerror(rc), rc ); -- } -- } -- -- rc = bdb->bi_dbenv->close( bdb->bi_dbenv, 0 ); -- bdb->bi_dbenv = NULL; -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, -- "bdb_db_close: database \"%s\": " -- "close failed: %s (%d)\n", -- be->be_suffix[0].bv_val, db_strerror(rc), rc ); -- return rc; -- } -- } -- -- rc = alock_close( &bdb->bi_alock_info, slapMode & SLAP_TOOL_QUICK ); -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, -- "bdb_db_close: database \"%s\": alock_close failed\n", -- be->be_suffix[0].bv_val, 0, 0 ); -- return -1; -- } -- -- return 0; --} -- --static int --bdb_db_destroy( BackendDB *be, ConfigReply *cr ) --{ -- struct bdb_info *bdb = (struct bdb_info *) be->be_private; -- -- /* stop and remove checkpoint task */ -- if ( bdb->bi_txn_cp_task ) { -- struct re_s *re = bdb->bi_txn_cp_task; -- bdb->bi_txn_cp_task = NULL; -- ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex ); -- if ( ldap_pvt_runqueue_isrunning( &slapd_rq, re ) ) -- ldap_pvt_runqueue_stoptask( &slapd_rq, re ); -- ldap_pvt_runqueue_remove( &slapd_rq, re ); -- ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex ); -- } -- -- /* monitor handling */ -- (void)bdb_monitor_db_destroy( be ); -- -- if( bdb->bi_dbenv_home ) ch_free( bdb->bi_dbenv_home ); -- if( bdb->bi_db_config_path ) ch_free( bdb->bi_db_config_path ); -- -- bdb_attr_index_destroy( bdb ); -- -- ldap_pvt_thread_rdwr_destroy ( &bdb->bi_cache.c_rwlock ); -- ldap_pvt_thread_mutex_destroy( &bdb->bi_cache.c_lru_mutex ); -- ldap_pvt_thread_mutex_destroy( &bdb->bi_cache.c_count_mutex ); -- ldap_pvt_thread_mutex_destroy( &bdb->bi_cache.c_eifree_mutex ); -- ldap_pvt_thread_mutex_destroy( &bdb->bi_cache.c_dntree.bei_kids_mutex ); --#ifdef BDB_HIER -- ldap_pvt_thread_mutex_destroy( &bdb->bi_modrdns_mutex ); --#endif -- ldap_pvt_thread_mutex_destroy( &bdb->bi_lastid_mutex ); -- ldap_pvt_thread_mutex_destroy( &bdb->bi_database_mutex ); -- ldap_pvt_thread_rdwr_destroy( &bdb->bi_idl_tree_rwlock ); -- ldap_pvt_thread_mutex_destroy( &bdb->bi_idl_tree_lrulock ); -- -- ch_free( bdb ); -- be->be_private = NULL; -- -- return 0; --} -- --int --bdb_back_initialize( -- BackendInfo *bi ) --{ -- int rc; -- -- static char *controls[] = { -- LDAP_CONTROL_ASSERT, -- LDAP_CONTROL_MANAGEDSAIT, -- LDAP_CONTROL_NOOP, -- LDAP_CONTROL_PAGEDRESULTS, -- LDAP_CONTROL_PRE_READ, -- LDAP_CONTROL_POST_READ, -- LDAP_CONTROL_SUBENTRIES, -- LDAP_CONTROL_X_PERMISSIVE_MODIFY, --#ifdef LDAP_X_TXN -- LDAP_CONTROL_X_TXN_SPEC, --#endif -- NULL -- }; -- -- /* initialize the underlying database system */ -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_back_initialize) ": initialize " -- BDB_UCTYPE " backend\n", 0, 0, 0 ); -- -- bi->bi_flags |= -- SLAP_BFLAG_INCREMENT | -- SLAP_BFLAG_SUBENTRIES | -- SLAP_BFLAG_ALIASES | -- SLAP_BFLAG_REFERRALS; -- -- bi->bi_controls = controls; -- -- { /* version check */ -- int major, minor, patch, ver; -- char *version = db_version( &major, &minor, &patch ); --#ifdef HAVE_EBCDIC -- char v2[1024]; -- -- /* All our stdio does an ASCII to EBCDIC conversion on -- * the output. Strings from the BDB library are already -- * in EBCDIC; we have to go back and forth... -- */ -- strcpy( v2, version ); -- __etoa( v2 ); -- version = v2; --#endif -- -- ver = (major << 24) | (minor << 16) | patch; -- if( ver != DB_VERSION_FULL ) { -- /* fail if a versions don't match */ -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_back_initialize) ": " -- "BDB library version mismatch:" -- " expected " DB_VERSION_STRING "," -- " got %s\n", version, 0, 0 ); -- return -1; -- } -- -- Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_back_initialize) -- ": %s\n", version, 0, 0 ); -- } -- -- db_env_set_func_free( ber_memfree ); -- db_env_set_func_malloc( (db_malloc *)ber_memalloc ); -- db_env_set_func_realloc( (db_realloc *)ber_memrealloc ); --#if !defined(NO_THREAD) && DB_VERSION_FULL <= 0x04070000 -- /* This is a no-op on a NO_THREAD build. Leave the default -- * alone so that BDB will sleep on interprocess conflicts. -- * Don't bother on BDB 4.7... -- */ -- db_env_set_func_yield( ldap_pvt_thread_yield ); --#endif -- -- bi->bi_open = 0; -- bi->bi_close = 0; -- bi->bi_config = 0; -- bi->bi_destroy = 0; -- -- bi->bi_db_init = bdb_db_init; -- bi->bi_db_config = config_generic_wrapper; -- bi->bi_db_open = bdb_db_open; -- bi->bi_db_close = bdb_db_close; -- bi->bi_db_destroy = bdb_db_destroy; -- -- bi->bi_op_add = bdb_add; -- bi->bi_op_bind = bdb_bind; -- bi->bi_op_compare = bdb_compare; -- bi->bi_op_delete = bdb_delete; -- bi->bi_op_modify = bdb_modify; -- bi->bi_op_modrdn = bdb_modrdn; -- bi->bi_op_search = bdb_search; -- -- bi->bi_op_unbind = 0; -- -- bi->bi_extended = bdb_extended; -- -- bi->bi_chk_referrals = bdb_referrals; -- bi->bi_operational = bdb_operational; -- bi->bi_has_subordinates = bdb_hasSubordinates; -- bi->bi_entry_release_rw = bdb_entry_release; -- bi->bi_entry_get_rw = bdb_entry_get; -- -- /* -- * hooks for slap tools -- */ -- bi->bi_tool_entry_open = bdb_tool_entry_open; -- bi->bi_tool_entry_close = bdb_tool_entry_close; -- bi->bi_tool_entry_first = backend_tool_entry_first; -- bi->bi_tool_entry_first_x = bdb_tool_entry_first_x; -- bi->bi_tool_entry_next = bdb_tool_entry_next; -- bi->bi_tool_entry_get = bdb_tool_entry_get; -- bi->bi_tool_entry_put = bdb_tool_entry_put; -- bi->bi_tool_entry_reindex = bdb_tool_entry_reindex; -- bi->bi_tool_sync = 0; -- bi->bi_tool_dn2id_get = bdb_tool_dn2id_get; -- bi->bi_tool_entry_modify = bdb_tool_entry_modify; -- -- bi->bi_connection_init = 0; -- bi->bi_connection_destroy = 0; -- -- rc = bdb_back_init_cf( bi ); -- -- return rc; --} -- --#if (SLAPD_BDB == SLAPD_MOD_DYNAMIC && !defined(BDB_HIER)) || \ -- (SLAPD_HDB == SLAPD_MOD_DYNAMIC && defined(BDB_HIER)) -- --/* conditionally define the init_module() function */ --#ifdef BDB_HIER --SLAP_BACKEND_INIT_MODULE( hdb ) --#else /* !BDB_HIER */ --SLAP_BACKEND_INIT_MODULE( bdb ) --#endif /* !BDB_HIER */ -- --#endif /* SLAPD_[BH]DB == SLAPD_MOD_DYNAMIC */ -- -diff --git a/servers/slapd/back-bdb/key.c b/servers/slapd/back-bdb/key.c -deleted file mode 100644 -index 417ad70..0000000 ---- a/servers/slapd/back-bdb/key.c -+++ /dev/null -@@ -1,104 +0,0 @@ --/* index.c - routines for dealing with attribute indexes */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include -- --#include --#include -- --#include "slap.h" --#include "back-bdb.h" --#include "idl.h" -- --/* read a key */ --int --bdb_key_read( -- Backend *be, -- DB *db, -- DB_TXN *txn, -- struct berval *k, -- ID *ids, -- DBC **saved_cursor, -- int get_flag --) --{ -- int rc; -- DBT key; -- -- Debug( LDAP_DEBUG_TRACE, "=> key_read\n", 0, 0, 0 ); -- -- DBTzero( &key ); -- bv2DBT(k,&key); -- key.ulen = key.size; -- key.flags = DB_DBT_USERMEM; -- -- rc = bdb_idl_fetch_key( be, db, txn, &key, ids, saved_cursor, get_flag ); -- -- if( rc != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_TRACE, "<= bdb_index_read: failed (%d)\n", -- rc, 0, 0 ); -- } else { -- Debug( LDAP_DEBUG_TRACE, "<= bdb_index_read %ld candidates\n", -- (long) BDB_IDL_N(ids), 0, 0 ); -- } -- -- return rc; --} -- --/* Add or remove stuff from index files */ --int --bdb_key_change( -- Backend *be, -- DB *db, -- DB_TXN *txn, -- struct berval *k, -- ID id, -- int op --) --{ -- int rc; -- DBT key; -- -- Debug( LDAP_DEBUG_TRACE, "=> key_change(%s,%lx)\n", -- op == SLAP_INDEX_ADD_OP ? "ADD":"DELETE", (long) id, 0 ); -- -- DBTzero( &key ); -- bv2DBT(k,&key); -- key.ulen = key.size; -- key.flags = DB_DBT_USERMEM; -- -- if (op == SLAP_INDEX_ADD_OP) { -- /* Add values */ -- --#ifdef BDB_TOOL_IDL_CACHING -- if ( slapMode & SLAP_TOOL_QUICK ) -- rc = bdb_tool_idl_add( be, db, txn, &key, id ); -- else --#endif -- rc = bdb_idl_insert_key( be, db, txn, &key, id ); -- if ( rc == DB_KEYEXIST ) rc = 0; -- } else { -- /* Delete values */ -- rc = bdb_idl_delete_key( be, db, txn, &key, id ); -- if ( rc == DB_NOTFOUND ) rc = 0; -- } -- -- Debug( LDAP_DEBUG_TRACE, "<= key_change %d\n", rc, 0, 0 ); -- -- return rc; --} -diff --git a/servers/slapd/back-bdb/modify.c b/servers/slapd/back-bdb/modify.c -deleted file mode 100644 -index fb7dbe3..0000000 ---- a/servers/slapd/back-bdb/modify.c -+++ /dev/null -@@ -1,835 +0,0 @@ --/* modify.c - bdb backend modify routine */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include --#include --#include -- --#include "back-bdb.h" -- --static struct berval scbva[] = { -- BER_BVC("glue"), -- BER_BVNULL --}; -- --static void --bdb_modify_idxflags( -- Operation *op, -- AttributeDescription *desc, -- int got_delete, -- Attribute *newattrs, -- Attribute *oldattrs ) --{ -- struct berval ix_at; -- AttrInfo *ai; -- -- /* check if modified attribute was indexed -- * but not in case of NOOP... */ -- ai = bdb_index_mask( op->o_bd, desc, &ix_at ); -- if ( ai ) { -- if ( got_delete ) { -- Attribute *ap; -- struct berval ix2; -- -- ap = attr_find( oldattrs, desc ); -- if ( ap ) ap->a_flags |= SLAP_ATTR_IXDEL; -- -- /* Find all other attrs that index to same slot */ -- for ( ap = newattrs; ap; ap = ap->a_next ) { -- ai = bdb_index_mask( op->o_bd, ap->a_desc, &ix2 ); -- if ( ai && ix2.bv_val == ix_at.bv_val ) -- ap->a_flags |= SLAP_ATTR_IXADD; -- } -- -- } else { -- Attribute *ap; -- -- ap = attr_find( newattrs, desc ); -- if ( ap ) ap->a_flags |= SLAP_ATTR_IXADD; -- } -- } --} -- --int bdb_modify_internal( -- Operation *op, -- DB_TXN *tid, -- Modifications *modlist, -- Entry *e, -- const char **text, -- char *textbuf, -- size_t textlen ) --{ -- int rc, err; -- Modification *mod; -- Modifications *ml; -- Attribute *save_attrs; -- Attribute *ap; -- int glue_attr_delete = 0; -- int got_delete; -- -- Debug( LDAP_DEBUG_TRACE, "bdb_modify_internal: 0x%08lx: %s\n", -- e->e_id, e->e_dn, 0); -- -- if ( !acl_check_modlist( op, e, modlist )) { -- return LDAP_INSUFFICIENT_ACCESS; -- } -- -- /* save_attrs will be disposed of by bdb_cache_modify */ -- save_attrs = e->e_attrs; -- e->e_attrs = attrs_dup( e->e_attrs ); -- -- for ( ml = modlist; ml != NULL; ml = ml->sml_next ) { -- int match; -- mod = &ml->sml_mod; -- switch( mod->sm_op ) { -- case LDAP_MOD_ADD: -- case LDAP_MOD_REPLACE: -- if ( mod->sm_desc == slap_schema.si_ad_structuralObjectClass ) { -- value_match( &match, slap_schema.si_ad_structuralObjectClass, -- slap_schema.si_ad_structuralObjectClass-> -- ad_type->sat_equality, -- SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX, -- &mod->sm_values[0], &scbva[0], text ); -- if ( !match ) glue_attr_delete = 1; -- } -- } -- if ( glue_attr_delete ) -- break; -- } -- -- if ( glue_attr_delete ) { -- Attribute **app = &e->e_attrs; -- while ( *app != NULL ) { -- if ( !is_at_operational( (*app)->a_desc->ad_type )) { -- Attribute *save = *app; -- *app = (*app)->a_next; -- attr_free( save ); -- continue; -- } -- app = &(*app)->a_next; -- } -- } -- -- for ( ml = modlist; ml != NULL; ml = ml->sml_next ) { -- mod = &ml->sml_mod; -- got_delete = 0; -- -- switch ( mod->sm_op ) { -- case LDAP_MOD_ADD: -- Debug(LDAP_DEBUG_ARGS, -- "bdb_modify_internal: add %s\n", -- mod->sm_desc->ad_cname.bv_val, 0, 0); -- err = modify_add_values( e, mod, get_permissiveModify(op), -- text, textbuf, textlen ); -- if( err != LDAP_SUCCESS ) { -- Debug(LDAP_DEBUG_ARGS, "bdb_modify_internal: %d %s\n", -- err, *text, 0); -- } -- break; -- -- case LDAP_MOD_DELETE: -- if ( glue_attr_delete ) { -- err = LDAP_SUCCESS; -- break; -- } -- -- Debug(LDAP_DEBUG_ARGS, -- "bdb_modify_internal: delete %s\n", -- mod->sm_desc->ad_cname.bv_val, 0, 0); -- err = modify_delete_values( e, mod, get_permissiveModify(op), -- text, textbuf, textlen ); -- if( err != LDAP_SUCCESS ) { -- Debug(LDAP_DEBUG_ARGS, "bdb_modify_internal: %d %s\n", -- err, *text, 0); -- } else { -- got_delete = 1; -- } -- break; -- -- case LDAP_MOD_REPLACE: -- Debug(LDAP_DEBUG_ARGS, -- "bdb_modify_internal: replace %s\n", -- mod->sm_desc->ad_cname.bv_val, 0, 0); -- err = modify_replace_values( e, mod, get_permissiveModify(op), -- text, textbuf, textlen ); -- if( err != LDAP_SUCCESS ) { -- Debug(LDAP_DEBUG_ARGS, "bdb_modify_internal: %d %s\n", -- err, *text, 0); -- } else { -- got_delete = 1; -- } -- break; -- -- case LDAP_MOD_INCREMENT: -- Debug(LDAP_DEBUG_ARGS, -- "bdb_modify_internal: increment %s\n", -- mod->sm_desc->ad_cname.bv_val, 0, 0); -- err = modify_increment_values( e, mod, get_permissiveModify(op), -- text, textbuf, textlen ); -- if( err != LDAP_SUCCESS ) { -- Debug(LDAP_DEBUG_ARGS, -- "bdb_modify_internal: %d %s\n", -- err, *text, 0); -- } else { -- got_delete = 1; -- } -- break; -- -- case SLAP_MOD_SOFTADD: -- Debug(LDAP_DEBUG_ARGS, -- "bdb_modify_internal: softadd %s\n", -- mod->sm_desc->ad_cname.bv_val, 0, 0); -- /* Avoid problems in index_add_mods() -- * We need to add index if necessary. -- */ -- mod->sm_op = LDAP_MOD_ADD; -- -- err = modify_add_values( e, mod, get_permissiveModify(op), -- text, textbuf, textlen ); -- -- mod->sm_op = SLAP_MOD_SOFTADD; -- -- if ( err == LDAP_TYPE_OR_VALUE_EXISTS ) { -- err = LDAP_SUCCESS; -- } -- -- if( err != LDAP_SUCCESS ) { -- Debug(LDAP_DEBUG_ARGS, "bdb_modify_internal: %d %s\n", -- err, *text, 0); -- } -- break; -- -- case SLAP_MOD_SOFTDEL: -- Debug(LDAP_DEBUG_ARGS, -- "bdb_modify_internal: softdel %s\n", -- mod->sm_desc->ad_cname.bv_val, 0, 0); -- /* Avoid problems in index_delete_mods() -- * We need to add index if necessary. -- */ -- mod->sm_op = LDAP_MOD_DELETE; -- -- err = modify_delete_values( e, mod, get_permissiveModify(op), -- text, textbuf, textlen ); -- -- mod->sm_op = SLAP_MOD_SOFTDEL; -- -- if ( err == LDAP_SUCCESS ) { -- got_delete = 1; -- } else if ( err == LDAP_NO_SUCH_ATTRIBUTE ) { -- err = LDAP_SUCCESS; -- } -- -- if( err != LDAP_SUCCESS ) { -- Debug(LDAP_DEBUG_ARGS, "bdb_modify_internal: %d %s\n", -- err, *text, 0); -- } -- break; -- -- case SLAP_MOD_ADD_IF_NOT_PRESENT: -- if ( attr_find( e->e_attrs, mod->sm_desc ) != NULL ) { -- /* skip */ -- err = LDAP_SUCCESS; -- break; -- } -- -- Debug(LDAP_DEBUG_ARGS, -- "bdb_modify_internal: add_if_not_present %s\n", -- mod->sm_desc->ad_cname.bv_val, 0, 0); -- /* Avoid problems in index_add_mods() -- * We need to add index if necessary. -- */ -- mod->sm_op = LDAP_MOD_ADD; -- -- err = modify_add_values( e, mod, get_permissiveModify(op), -- text, textbuf, textlen ); -- -- mod->sm_op = SLAP_MOD_ADD_IF_NOT_PRESENT; -- -- if( err != LDAP_SUCCESS ) { -- Debug(LDAP_DEBUG_ARGS, "bdb_modify_internal: %d %s\n", -- err, *text, 0); -- } -- break; -- -- default: -- Debug(LDAP_DEBUG_ANY, "bdb_modify_internal: invalid op %d\n", -- mod->sm_op, 0, 0); -- *text = "Invalid modify operation"; -- err = LDAP_OTHER; -- Debug(LDAP_DEBUG_ARGS, "bdb_modify_internal: %d %s\n", -- err, *text, 0); -- } -- -- if ( err != LDAP_SUCCESS ) { -- attrs_free( e->e_attrs ); -- e->e_attrs = save_attrs; -- /* unlock entry, delete from cache */ -- return err; -- } -- -- /* If objectClass was modified, reset the flags */ -- if ( mod->sm_desc == slap_schema.si_ad_objectClass ) { -- e->e_ocflags = 0; -- } -- -- if ( glue_attr_delete ) e->e_ocflags = 0; -- -- -- /* check if modified attribute was indexed -- * but not in case of NOOP... */ -- if ( !op->o_noop ) { -- bdb_modify_idxflags( op, mod->sm_desc, got_delete, e->e_attrs, save_attrs ); -- } -- } -- -- /* check that the entry still obeys the schema */ -- ap = NULL; -- rc = entry_schema_check( op, e, save_attrs, get_relax(op), 0, &ap, -- text, textbuf, textlen ); -- if ( rc != LDAP_SUCCESS || op->o_noop ) { -- attrs_free( e->e_attrs ); -- /* clear the indexing flags */ -- for ( ap = save_attrs; ap != NULL; ap = ap->a_next ) { -- ap->a_flags &= ~(SLAP_ATTR_IXADD|SLAP_ATTR_IXDEL); -- } -- e->e_attrs = save_attrs; -- -- if ( rc != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_ANY, -- "entry failed schema check: %s\n", -- *text, 0, 0 ); -- } -- -- /* if NOOP then silently revert to saved attrs */ -- return rc; -- } -- -- /* structuralObjectClass modified! */ -- if ( ap ) { -- assert( ap->a_desc == slap_schema.si_ad_structuralObjectClass ); -- if ( !op->o_noop ) { -- bdb_modify_idxflags( op, slap_schema.si_ad_structuralObjectClass, -- 1, e->e_attrs, save_attrs ); -- } -- } -- -- /* update the indices of the modified attributes */ -- -- /* start with deleting the old index entries */ -- for ( ap = save_attrs; ap != NULL; ap = ap->a_next ) { -- if ( ap->a_flags & SLAP_ATTR_IXDEL ) { -- struct berval *vals; -- Attribute *a2; -- ap->a_flags &= ~SLAP_ATTR_IXDEL; -- a2 = attr_find( e->e_attrs, ap->a_desc ); -- if ( a2 ) { -- /* need to detect which values were deleted */ -- int i, j; -- /* let add know there were deletes */ -- if ( a2->a_flags & SLAP_ATTR_IXADD ) -- a2->a_flags |= SLAP_ATTR_IXDEL; -- vals = op->o_tmpalloc( (ap->a_numvals + 1) * -- sizeof(struct berval), op->o_tmpmemctx ); -- j = 0; -- for ( i=0; i < ap->a_numvals; i++ ) { -- rc = attr_valfind( a2, SLAP_MR_ASSERTED_VALUE_NORMALIZED_MATCH, -- &ap->a_nvals[i], NULL, op->o_tmpmemctx ); -- /* Save deleted values */ -- if ( rc == LDAP_NO_SUCH_ATTRIBUTE ) -- vals[j++] = ap->a_nvals[i]; -- } -- BER_BVZERO(vals+j); -- } else { -- /* attribute was completely deleted */ -- vals = ap->a_nvals; -- } -- rc = 0; -- if ( !BER_BVISNULL( vals )) { -- rc = bdb_index_values( op, tid, ap->a_desc, -- vals, e->e_id, SLAP_INDEX_DELETE_OP ); -- if ( rc != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_ANY, -- "%s: attribute \"%s\" index delete failure\n", -- op->o_log_prefix, ap->a_desc->ad_cname.bv_val, 0 ); -- attrs_free( e->e_attrs ); -- e->e_attrs = save_attrs; -- } -- } -- if ( vals != ap->a_nvals ) -- op->o_tmpfree( vals, op->o_tmpmemctx ); -- if ( rc ) return rc; -- } -- } -- -- /* add the new index entries */ -- for ( ap = e->e_attrs; ap != NULL; ap = ap->a_next ) { -- if (ap->a_flags & SLAP_ATTR_IXADD) { -- ap->a_flags &= ~SLAP_ATTR_IXADD; -- if ( ap->a_flags & SLAP_ATTR_IXDEL ) { -- /* if any values were deleted, we must readd index -- * for all remaining values. -- */ -- ap->a_flags &= ~SLAP_ATTR_IXDEL; -- rc = bdb_index_values( op, tid, ap->a_desc, -- ap->a_nvals, -- e->e_id, SLAP_INDEX_ADD_OP ); -- } else { -- int found = 0; -- /* if this was only an add, we only need to index -- * the added values. -- */ -- for ( ml = modlist; ml != NULL; ml = ml->sml_next ) { -- struct berval *vals; -- if ( ml->sml_desc != ap->a_desc || !ml->sml_numvals ) -- continue; -- found = 1; -- switch( ml->sml_op ) { -- case LDAP_MOD_ADD: -- case LDAP_MOD_REPLACE: -- case LDAP_MOD_INCREMENT: -- case SLAP_MOD_SOFTADD: -- case SLAP_MOD_ADD_IF_NOT_PRESENT: -- if ( ml->sml_op == LDAP_MOD_INCREMENT ) -- vals = ap->a_nvals; -- else if ( ml->sml_nvalues ) -- vals = ml->sml_nvalues; -- else -- vals = ml->sml_values; -- rc = bdb_index_values( op, tid, ap->a_desc, -- vals, e->e_id, SLAP_INDEX_ADD_OP ); -- break; -- } -- if ( rc ) -- break; -- } -- /* This attr was affected by a modify of a subtype, so -- * there was no direct match in the modlist. Just readd -- * all of its values. -- */ -- if ( !found ) { -- rc = bdb_index_values( op, tid, ap->a_desc, -- ap->a_nvals, -- e->e_id, SLAP_INDEX_ADD_OP ); -- } -- } -- if ( rc != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_ANY, -- "%s: attribute \"%s\" index add failure\n", -- op->o_log_prefix, ap->a_desc->ad_cname.bv_val, 0 ); -- attrs_free( e->e_attrs ); -- e->e_attrs = save_attrs; -- return rc; -- } -- } -- } -- -- return rc; --} -- -- --int --bdb_modify( Operation *op, SlapReply *rs ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- Entry *e = NULL; -- EntryInfo *ei = NULL; -- int manageDSAit = get_manageDSAit( op ); -- char textbuf[SLAP_TEXT_BUFLEN]; -- size_t textlen = sizeof textbuf; -- DB_TXN *ltid = NULL, *lt2; -- struct bdb_op_info opinfo = {{{ 0 }}}; -- Entry dummy = {0}; -- -- DB_LOCK lock; -- -- int num_retries = 0; -- -- LDAPControl **preread_ctrl = NULL; -- LDAPControl **postread_ctrl = NULL; -- LDAPControl *ctrls[SLAP_MAX_RESPONSE_CONTROLS]; -- int num_ctrls = 0; -- -- int rc; -- --#ifdef LDAP_X_TXN -- int settle = 0; --#endif -- -- Debug( LDAP_DEBUG_ARGS, LDAP_XSTRING(bdb_modify) ": %s\n", -- op->o_req_dn.bv_val, 0, 0 ); -- --#ifdef LDAP_X_TXN -- if( op->o_txnSpec ) { -- /* acquire connection lock */ -- ldap_pvt_thread_mutex_lock( &op->o_conn->c_mutex ); -- if( op->o_conn->c_txn == CONN_TXN_INACTIVE ) { -- rs->sr_text = "invalid transaction identifier"; -- rs->sr_err = LDAP_X_TXN_ID_INVALID; -- goto txnReturn; -- } else if( op->o_conn->c_txn == CONN_TXN_SETTLE ) { -- settle=1; -- goto txnReturn; -- } -- -- if( op->o_conn->c_txn_backend == NULL ) { -- op->o_conn->c_txn_backend = op->o_bd; -- -- } else if( op->o_conn->c_txn_backend != op->o_bd ) { -- rs->sr_text = "transaction cannot span multiple database contexts"; -- rs->sr_err = LDAP_AFFECTS_MULTIPLE_DSAS; -- goto txnReturn; -- } -- -- /* insert operation into transaction */ -- -- rs->sr_text = "transaction specified"; -- rs->sr_err = LDAP_X_TXN_SPECIFY_OKAY; -- --txnReturn: -- /* release connection lock */ -- ldap_pvt_thread_mutex_unlock( &op->o_conn->c_mutex ); -- -- if( !settle ) { -- send_ldap_result( op, rs ); -- return rs->sr_err; -- } -- } --#endif -- -- ctrls[num_ctrls] = NULL; -- -- /* Don't touch the opattrs, if this is a contextCSN update -- * initiated from updatedn */ -- if ( !be_isupdate(op) || !op->orm_modlist || op->orm_modlist->sml_next || -- op->orm_modlist->sml_desc != slap_schema.si_ad_contextCSN ) { -- -- slap_mods_opattrs( op, &op->orm_modlist, 1 ); -- } -- -- if( 0 ) { --retry: /* transaction retry */ -- if ( dummy.e_attrs ) { -- attrs_free( dummy.e_attrs ); -- dummy.e_attrs = NULL; -- } -- if( e != NULL ) { -- bdb_unlocked_cache_return_entry_w(&bdb->bi_cache, e); -- e = NULL; -- } -- Debug(LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modify) ": retrying...\n", 0, 0, 0); -- -- rs->sr_err = TXN_ABORT( ltid ); -- ltid = NULL; -- LDAP_SLIST_REMOVE( &op->o_extra, &opinfo.boi_oe, OpExtra, oe_next ); -- opinfo.boi_oe.oe_key = NULL; -- op->o_do_not_cache = opinfo.boi_acl_cache; -- if( rs->sr_err != 0 ) { -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- if ( op->o_abandon ) { -- rs->sr_err = SLAPD_ABANDON; -- goto return_results; -- } -- bdb_trans_backoff( ++num_retries ); -- } -- -- /* begin transaction */ -- rs->sr_err = TXN_BEGIN( bdb->bi_dbenv, NULL, <id, -- bdb->bi_db_opflags ); -- rs->sr_text = NULL; -- if( rs->sr_err != 0 ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modify) ": txn_begin failed: " -- "%s (%d)\n", db_strerror(rs->sr_err), rs->sr_err, 0 ); -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_modify) ": txn1 id: %x\n", -- ltid->id(ltid), 0, 0 ); -- -- opinfo.boi_oe.oe_key = bdb; -- opinfo.boi_txn = ltid; -- opinfo.boi_err = 0; -- opinfo.boi_acl_cache = op->o_do_not_cache; -- LDAP_SLIST_INSERT_HEAD( &op->o_extra, &opinfo.boi_oe, oe_next ); -- -- /* get entry or ancestor */ -- rs->sr_err = bdb_dn2entry( op, ltid, &op->o_req_ndn, &ei, 1, -- &lock ); -- -- if ( rs->sr_err != 0 ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modify) ": dn2entry failed (%d)\n", -- rs->sr_err, 0, 0 ); -- switch( rs->sr_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- case DB_NOTFOUND: -- break; -- case LDAP_BUSY: -- rs->sr_text = "ldap server busy"; -- goto return_results; -- default: -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- } -- -- e = ei->bei_e; -- -- /* acquire and lock entry */ -- /* FIXME: dn2entry() should return non-glue entry */ -- if (( rs->sr_err == DB_NOTFOUND ) || -- ( !manageDSAit && e && is_entry_glue( e ))) -- { -- if ( e != NULL ) { -- rs->sr_matched = ch_strdup( e->e_dn ); -- rs->sr_ref = is_entry_referral( e ) -- ? get_entry_referrals( op, e ) -- : NULL; -- bdb_unlocked_cache_return_entry_r (&bdb->bi_cache, e); -- e = NULL; -- -- } else { -- rs->sr_ref = referral_rewrite( default_referral, NULL, -- &op->o_req_dn, LDAP_SCOPE_DEFAULT ); -- } -- -- rs->sr_err = LDAP_REFERRAL; -- send_ldap_result( op, rs ); -- -- if ( rs->sr_ref != default_referral ) { -- ber_bvarray_free( rs->sr_ref ); -- } -- free( (char *)rs->sr_matched ); -- rs->sr_ref = NULL; -- rs->sr_matched = NULL; -- -- goto done; -- } -- -- if ( !manageDSAit && is_entry_referral( e ) ) { -- /* entry is a referral, don't allow modify */ -- rs->sr_ref = get_entry_referrals( op, e ); -- -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modify) ": entry is referral\n", -- 0, 0, 0 ); -- -- rs->sr_err = LDAP_REFERRAL; -- rs->sr_matched = e->e_name.bv_val; -- send_ldap_result( op, rs ); -- -- ber_bvarray_free( rs->sr_ref ); -- rs->sr_ref = NULL; -- rs->sr_matched = NULL; -- goto done; -- } -- -- if ( get_assert( op ) && -- ( test_filter( op, e, get_assertion( op )) != LDAP_COMPARE_TRUE )) -- { -- rs->sr_err = LDAP_ASSERTION_FAILED; -- goto return_results; -- } -- -- if( op->o_preread ) { -- if( preread_ctrl == NULL ) { -- preread_ctrl = &ctrls[num_ctrls++]; -- ctrls[num_ctrls] = NULL; -- } -- if ( slap_read_controls( op, rs, e, -- &slap_pre_read_bv, preread_ctrl ) ) -- { -- Debug( LDAP_DEBUG_TRACE, -- "<=- " LDAP_XSTRING(bdb_modify) ": pre-read " -- "failed!\n", 0, 0, 0 ); -- if ( op->o_preread & SLAP_CONTROL_CRITICAL ) { -- /* FIXME: is it correct to abort -- * operation if control fails? */ -- goto return_results; -- } -- } -- } -- -- /* nested transaction */ -- rs->sr_err = TXN_BEGIN( bdb->bi_dbenv, ltid, <2, bdb->bi_db_opflags ); -- rs->sr_text = NULL; -- if( rs->sr_err != 0 ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modify) ": txn_begin(2) failed: " "%s (%d)\n", -- db_strerror(rs->sr_err), rs->sr_err, 0 ); -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_modify) ": txn2 id: %x\n", -- lt2->id(lt2), 0, 0 ); -- /* Modify the entry */ -- dummy = *e; -- rs->sr_err = bdb_modify_internal( op, lt2, op->orm_modlist, -- &dummy, &rs->sr_text, textbuf, textlen ); -- -- if( rs->sr_err != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modify) ": modify failed (%d)\n", -- rs->sr_err, 0, 0 ); -- if ( (rs->sr_err == LDAP_INSUFFICIENT_ACCESS) && opinfo.boi_err ) { -- rs->sr_err = opinfo.boi_err; -- } -- /* Only free attrs if they were dup'd. */ -- if ( dummy.e_attrs == e->e_attrs ) dummy.e_attrs = NULL; -- switch( rs->sr_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- goto return_results; -- } -- -- /* change the entry itself */ -- rs->sr_err = bdb_id2entry_update( op->o_bd, lt2, &dummy ); -- if ( rs->sr_err != 0 ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modify) ": id2entry update failed " "(%d)\n", -- rs->sr_err, 0, 0 ); -- switch( rs->sr_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- rs->sr_text = "entry update failed"; -- goto return_results; -- } -- -- if ( TXN_COMMIT( lt2, 0 ) != 0 ) { -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "txn_commit(2) failed"; -- goto return_results; -- } -- -- if( op->o_postread ) { -- if( postread_ctrl == NULL ) { -- postread_ctrl = &ctrls[num_ctrls++]; -- ctrls[num_ctrls] = NULL; -- } -- if( slap_read_controls( op, rs, &dummy, -- &slap_post_read_bv, postread_ctrl ) ) -- { -- Debug( LDAP_DEBUG_TRACE, -- "<=- " LDAP_XSTRING(bdb_modify) -- ": post-read failed!\n", 0, 0, 0 ); -- if ( op->o_postread & SLAP_CONTROL_CRITICAL ) { -- /* FIXME: is it correct to abort -- * operation if control fails? */ -- goto return_results; -- } -- } -- } -- -- if( op->o_noop ) { -- if ( ( rs->sr_err = TXN_ABORT( ltid ) ) != 0 ) { -- rs->sr_text = "txn_abort (no-op) failed"; -- } else { -- rs->sr_err = LDAP_X_NO_OPERATION; -- ltid = NULL; -- /* Only free attrs if they were dup'd. */ -- if ( dummy.e_attrs == e->e_attrs ) dummy.e_attrs = NULL; -- goto return_results; -- } -- } else { -- /* may have changed in bdb_modify_internal() */ -- e->e_ocflags = dummy.e_ocflags; -- rc = bdb_cache_modify( bdb, e, dummy.e_attrs, ltid, &lock ); -- switch( rc ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- dummy.e_attrs = NULL; -- -- rs->sr_err = TXN_COMMIT( ltid, 0 ); -- } -- ltid = NULL; -- LDAP_SLIST_REMOVE( &op->o_extra, &opinfo.boi_oe, OpExtra, oe_next ); -- opinfo.boi_oe.oe_key = NULL; -- -- if( rs->sr_err != 0 ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modify) ": txn_%s failed: %s (%d)\n", -- op->o_noop ? "abort (no-op)" : "commit", -- db_strerror(rs->sr_err), rs->sr_err ); -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "commit failed"; -- -- goto return_results; -- } -- -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modify) ": updated%s id=%08lx dn=\"%s\"\n", -- op->o_noop ? " (no-op)" : "", -- dummy.e_id, op->o_req_dn.bv_val ); -- -- rs->sr_err = LDAP_SUCCESS; -- rs->sr_text = NULL; -- if( num_ctrls ) rs->sr_ctrls = ctrls; -- --return_results: -- if( dummy.e_attrs ) { -- attrs_free( dummy.e_attrs ); -- } -- send_ldap_result( op, rs ); -- -- if( rs->sr_err == LDAP_SUCCESS && bdb->bi_txn_cp_kbyte ) { -- TXN_CHECKPOINT( bdb->bi_dbenv, -- bdb->bi_txn_cp_kbyte, bdb->bi_txn_cp_min, 0 ); -- } -- --done: -- slap_graduate_commit_csn( op ); -- -- if( ltid != NULL ) { -- TXN_ABORT( ltid ); -- } -- if ( opinfo.boi_oe.oe_key ) { -- LDAP_SLIST_REMOVE( &op->o_extra, &opinfo.boi_oe, OpExtra, oe_next ); -- } -- -- if( e != NULL ) { -- bdb_unlocked_cache_return_entry_w (&bdb->bi_cache, e); -- } -- -- if( preread_ctrl != NULL && (*preread_ctrl) != NULL ) { -- slap_sl_free( (*preread_ctrl)->ldctl_value.bv_val, op->o_tmpmemctx ); -- slap_sl_free( *preread_ctrl, op->o_tmpmemctx ); -- } -- if( postread_ctrl != NULL && (*postread_ctrl) != NULL ) { -- slap_sl_free( (*postread_ctrl)->ldctl_value.bv_val, op->o_tmpmemctx ); -- slap_sl_free( *postread_ctrl, op->o_tmpmemctx ); -- } -- -- rs->sr_text = NULL; -- -- return rs->sr_err; --} -diff --git a/servers/slapd/back-bdb/modrdn.c b/servers/slapd/back-bdb/modrdn.c -deleted file mode 100644 -index f213b0f..0000000 ---- a/servers/slapd/back-bdb/modrdn.c -+++ /dev/null -@@ -1,842 +0,0 @@ --/* modrdn.c - bdb backend modrdn routine */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include --#include -- --#include "back-bdb.h" -- --int --bdb_modrdn( Operation *op, SlapReply *rs ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- AttributeDescription *children = slap_schema.si_ad_children; -- AttributeDescription *entry = slap_schema.si_ad_entry; -- struct berval p_dn, p_ndn; -- struct berval new_dn = {0, NULL}, new_ndn = {0, NULL}; -- Entry *e = NULL; -- Entry *p = NULL; -- EntryInfo *ei = NULL, *eip = NULL, *nei = NULL, *neip = NULL; -- /* LDAP v2 supporting correct attribute handling. */ -- char textbuf[SLAP_TEXT_BUFLEN]; -- size_t textlen = sizeof textbuf; -- DB_TXN *ltid = NULL, *lt2; -- struct bdb_op_info opinfo = {{{ 0 }}}; -- Entry dummy = {0}; -- -- Entry *np = NULL; /* newSuperior Entry */ -- struct berval *np_dn = NULL; /* newSuperior dn */ -- struct berval *np_ndn = NULL; /* newSuperior ndn */ -- struct berval *new_parent_dn = NULL; /* np_dn, p_dn, or NULL */ -- -- int manageDSAit = get_manageDSAit( op ); -- -- DB_LOCK lock, plock, nplock; -- -- int num_retries = 0; -- -- LDAPControl **preread_ctrl = NULL; -- LDAPControl **postread_ctrl = NULL; -- LDAPControl *ctrls[SLAP_MAX_RESPONSE_CONTROLS]; -- int num_ctrls = 0; -- -- int rc; -- -- int parent_is_glue = 0; -- int parent_is_leaf = 0; -- --#ifdef LDAP_X_TXN -- int settle = 0; --#endif -- -- Debug( LDAP_DEBUG_TRACE, "==>" LDAP_XSTRING(bdb_modrdn) "(%s,%s,%s)\n", -- op->o_req_dn.bv_val,op->oq_modrdn.rs_newrdn.bv_val, -- op->oq_modrdn.rs_newSup ? op->oq_modrdn.rs_newSup->bv_val : "NULL" ); -- --#ifdef LDAP_X_TXN -- if( op->o_txnSpec ) { -- /* acquire connection lock */ -- ldap_pvt_thread_mutex_lock( &op->o_conn->c_mutex ); -- if( op->o_conn->c_txn == CONN_TXN_INACTIVE ) { -- rs->sr_text = "invalid transaction identifier"; -- rs->sr_err = LDAP_X_TXN_ID_INVALID; -- goto txnReturn; -- } else if( op->o_conn->c_txn == CONN_TXN_SETTLE ) { -- settle=1; -- goto txnReturn; -- } -- -- if( op->o_conn->c_txn_backend == NULL ) { -- op->o_conn->c_txn_backend = op->o_bd; -- -- } else if( op->o_conn->c_txn_backend != op->o_bd ) { -- rs->sr_text = "transaction cannot span multiple database contexts"; -- rs->sr_err = LDAP_AFFECTS_MULTIPLE_DSAS; -- goto txnReturn; -- } -- -- /* insert operation into transaction */ -- -- rs->sr_text = "transaction specified"; -- rs->sr_err = LDAP_X_TXN_SPECIFY_OKAY; -- --txnReturn: -- /* release connection lock */ -- ldap_pvt_thread_mutex_unlock( &op->o_conn->c_mutex ); -- -- if( !settle ) { -- send_ldap_result( op, rs ); -- return rs->sr_err; -- } -- } --#endif -- -- ctrls[num_ctrls] = NULL; -- -- slap_mods_opattrs( op, &op->orr_modlist, 1 ); -- -- if( 0 ) { --retry: /* transaction retry */ -- if ( dummy.e_attrs ) { -- attrs_free( dummy.e_attrs ); -- dummy.e_attrs = NULL; -- } -- if (e != NULL) { -- bdb_unlocked_cache_return_entry_w(&bdb->bi_cache, e); -- e = NULL; -- } -- if (p != NULL) { -- bdb_unlocked_cache_return_entry_r(&bdb->bi_cache, p); -- p = NULL; -- } -- if (np != NULL) { -- bdb_unlocked_cache_return_entry_r(&bdb->bi_cache, np); -- np = NULL; -- } -- Debug( LDAP_DEBUG_TRACE, "==>" LDAP_XSTRING(bdb_modrdn) -- ": retrying...\n", 0, 0, 0 ); -- -- rs->sr_err = TXN_ABORT( ltid ); -- ltid = NULL; -- LDAP_SLIST_REMOVE( &op->o_extra, &opinfo.boi_oe, OpExtra, oe_next ); -- opinfo.boi_oe.oe_key = NULL; -- op->o_do_not_cache = opinfo.boi_acl_cache; -- if( rs->sr_err != 0 ) { -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- if ( op->o_abandon ) { -- rs->sr_err = SLAPD_ABANDON; -- goto return_results; -- } -- parent_is_glue = 0; -- parent_is_leaf = 0; -- bdb_trans_backoff( ++num_retries ); -- } -- -- /* begin transaction */ -- rs->sr_err = TXN_BEGIN( bdb->bi_dbenv, NULL, <id, -- bdb->bi_db_opflags ); -- rs->sr_text = NULL; -- if( rs->sr_err != 0 ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modrdn) ": txn_begin failed: " -- "%s (%d)\n", db_strerror(rs->sr_err), rs->sr_err, 0 ); -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_modrdn) ": txn1 id: %x\n", -- ltid->id(ltid), 0, 0 ); -- -- opinfo.boi_oe.oe_key = bdb; -- opinfo.boi_txn = ltid; -- opinfo.boi_err = 0; -- opinfo.boi_acl_cache = op->o_do_not_cache; -- LDAP_SLIST_INSERT_HEAD( &op->o_extra, &opinfo.boi_oe, oe_next ); -- -- /* get entry */ -- rs->sr_err = bdb_dn2entry( op, ltid, &op->o_req_ndn, &ei, 1, -- &lock ); -- -- switch( rs->sr_err ) { -- case 0: -- case DB_NOTFOUND: -- break; -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- case LDAP_BUSY: -- rs->sr_text = "ldap server busy"; -- goto return_results; -- default: -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- -- e = ei->bei_e; -- /* FIXME: dn2entry() should return non-glue entry */ -- if (( rs->sr_err == DB_NOTFOUND ) || -- ( !manageDSAit && e && is_entry_glue( e ))) -- { -- if( e != NULL ) { -- rs->sr_matched = ch_strdup( e->e_dn ); -- rs->sr_ref = is_entry_referral( e ) -- ? get_entry_referrals( op, e ) -- : NULL; -- bdb_unlocked_cache_return_entry_r( &bdb->bi_cache, e); -- e = NULL; -- -- } else { -- rs->sr_ref = referral_rewrite( default_referral, NULL, -- &op->o_req_dn, LDAP_SCOPE_DEFAULT ); -- } -- -- rs->sr_err = LDAP_REFERRAL; -- send_ldap_result( op, rs ); -- -- ber_bvarray_free( rs->sr_ref ); -- free( (char *)rs->sr_matched ); -- rs->sr_ref = NULL; -- rs->sr_matched = NULL; -- -- goto done; -- } -- -- if ( get_assert( op ) && -- ( test_filter( op, e, get_assertion( op )) != LDAP_COMPARE_TRUE )) -- { -- rs->sr_err = LDAP_ASSERTION_FAILED; -- goto return_results; -- } -- -- /* check write on old entry */ -- rs->sr_err = access_allowed( op, e, entry, NULL, ACL_WRITE, NULL ); -- if ( ! rs->sr_err ) { -- switch( opinfo.boi_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- -- Debug( LDAP_DEBUG_TRACE, "no access to entry\n", 0, -- 0, 0 ); -- rs->sr_text = "no write access to old entry"; -- rs->sr_err = LDAP_INSUFFICIENT_ACCESS; -- goto return_results; -- } -- --#ifndef BDB_HIER -- rs->sr_err = bdb_cache_children( op, ltid, e ); -- if ( rs->sr_err != DB_NOTFOUND ) { -- switch( rs->sr_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- case 0: -- Debug(LDAP_DEBUG_ARGS, -- "<=- " LDAP_XSTRING(bdb_modrdn) -- ": non-leaf %s\n", -- op->o_req_dn.bv_val, 0, 0); -- rs->sr_err = LDAP_NOT_ALLOWED_ON_NONLEAF; -- rs->sr_text = "subtree rename not supported"; -- break; -- default: -- Debug(LDAP_DEBUG_ARGS, -- "<=- " LDAP_XSTRING(bdb_modrdn) -- ": has_children failed: %s (%d)\n", -- db_strerror(rs->sr_err), rs->sr_err, 0 ); -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- } -- goto return_results; -- } -- ei->bei_state |= CACHE_ENTRY_NO_KIDS; --#endif -- -- if (!manageDSAit && is_entry_referral( e ) ) { -- /* parent is a referral, don't allow add */ -- rs->sr_ref = get_entry_referrals( op, e ); -- -- Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_modrdn) -- ": entry %s is referral\n", e->e_dn, 0, 0 ); -- -- rs->sr_err = LDAP_REFERRAL, -- rs->sr_matched = e->e_name.bv_val; -- send_ldap_result( op, rs ); -- -- ber_bvarray_free( rs->sr_ref ); -- rs->sr_ref = NULL; -- rs->sr_matched = NULL; -- goto done; -- } -- -- if ( be_issuffix( op->o_bd, &e->e_nname ) ) { --#ifdef BDB_MULTIPLE_SUFFIXES -- /* Allow renaming one suffix entry to another */ -- p_ndn = slap_empty_bv; --#else -- /* There can only be one suffix entry */ -- rs->sr_err = LDAP_NAMING_VIOLATION; -- rs->sr_text = "cannot rename suffix entry"; -- goto return_results; --#endif -- } else { -- dnParent( &e->e_nname, &p_ndn ); -- } -- np_ndn = &p_ndn; -- eip = ei->bei_parent; -- if ( eip && eip->bei_id ) { -- /* Make sure parent entry exist and we can write its -- * children. -- */ -- rs->sr_err = bdb_cache_find_id( op, ltid, -- eip->bei_id, &eip, 0, &plock ); -- -- switch( rs->sr_err ) { -- case 0: -- case DB_NOTFOUND: -- break; -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- case LDAP_BUSY: -- rs->sr_text = "ldap server busy"; -- goto return_results; -- default: -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- -- p = eip->bei_e; -- if( p == NULL) { -- Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_modrdn) -- ": parent does not exist\n", 0, 0, 0); -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "old entry's parent does not exist"; -- goto return_results; -- } -- } else { -- p = (Entry *)&slap_entry_root; -- } -- -- /* check parent for "children" acl */ -- rs->sr_err = access_allowed( op, p, -- children, NULL, -- op->oq_modrdn.rs_newSup == NULL ? -- ACL_WRITE : ACL_WDEL, -- NULL ); -- -- if ( !p_ndn.bv_len ) -- p = NULL; -- -- if ( ! rs->sr_err ) { -- switch( opinfo.boi_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- -- rs->sr_err = LDAP_INSUFFICIENT_ACCESS; -- Debug( LDAP_DEBUG_TRACE, "no access to parent\n", 0, -- 0, 0 ); -- rs->sr_text = "no write access to old parent's children"; -- goto return_results; -- } -- -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modrdn) ": wr to children " -- "of entry %s OK\n", p_ndn.bv_val, 0, 0 ); -- -- if ( p_ndn.bv_val == slap_empty_bv.bv_val ) { -- p_dn = slap_empty_bv; -- } else { -- dnParent( &e->e_name, &p_dn ); -- } -- -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modrdn) ": parent dn=%s\n", -- p_dn.bv_val, 0, 0 ); -- -- new_parent_dn = &p_dn; /* New Parent unless newSuperior given */ -- -- if ( op->oq_modrdn.rs_newSup != NULL ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modrdn) -- ": new parent \"%s\" requested...\n", -- op->oq_modrdn.rs_newSup->bv_val, 0, 0 ); -- -- /* newSuperior == oldParent? */ -- if( dn_match( &p_ndn, op->oq_modrdn.rs_nnewSup ) ) { -- Debug( LDAP_DEBUG_TRACE, "bdb_back_modrdn: " -- "new parent \"%s\" same as the old parent \"%s\"\n", -- op->oq_modrdn.rs_newSup->bv_val, p_dn.bv_val, 0 ); -- op->oq_modrdn.rs_newSup = NULL; /* ignore newSuperior */ -- } -- } -- -- /* There's a BDB_MULTIPLE_SUFFIXES case here that this code doesn't -- * support. E.g., two suffixes dc=foo,dc=com and dc=bar,dc=net. -- * We do not allow modDN -- * dc=foo,dc=com -- * newrdn dc=bar -- * newsup dc=net -- * and we probably should. But since MULTIPLE_SUFFIXES is deprecated -- * I'm ignoring this problem for now. -- */ -- if ( op->oq_modrdn.rs_newSup != NULL ) { -- if ( op->oq_modrdn.rs_newSup->bv_len ) { -- np_dn = op->oq_modrdn.rs_newSup; -- np_ndn = op->oq_modrdn.rs_nnewSup; -- -- /* newSuperior == oldParent? - checked above */ -- /* newSuperior == entry being moved?, if so ==> ERROR */ -- if ( dnIsSuffix( np_ndn, &e->e_nname )) { -- rs->sr_err = LDAP_NO_SUCH_OBJECT; -- rs->sr_text = "new superior not found"; -- goto return_results; -- } -- /* Get Entry with dn=newSuperior. Does newSuperior exist? */ -- -- rs->sr_err = bdb_dn2entry( op, ltid, np_ndn, -- &neip, 0, &nplock ); -- -- switch( rs->sr_err ) { -- case 0: np = neip->bei_e; -- case DB_NOTFOUND: -- break; -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- case LDAP_BUSY: -- rs->sr_text = "ldap server busy"; -- goto return_results; -- default: -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- -- if( np == NULL) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modrdn) -- ": newSup(ndn=%s) not here!\n", -- np_ndn->bv_val, 0, 0); -- rs->sr_text = "new superior not found"; -- rs->sr_err = LDAP_NO_SUCH_OBJECT; -- goto return_results; -- } -- -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modrdn) -- ": wr to new parent OK np=%p, id=%ld\n", -- (void *) np, (long) np->e_id, 0 ); -- -- /* check newSuperior for "children" acl */ -- rs->sr_err = access_allowed( op, np, children, -- NULL, ACL_WADD, NULL ); -- -- if( ! rs->sr_err ) { -- switch( opinfo.boi_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modrdn) -- ": no wr to newSup children\n", -- 0, 0, 0 ); -- rs->sr_text = "no write access to new superior's children"; -- rs->sr_err = LDAP_INSUFFICIENT_ACCESS; -- goto return_results; -- } -- -- if ( is_entry_alias( np ) ) { -- /* parent is an alias, don't allow add */ -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modrdn) -- ": entry is alias\n", -- 0, 0, 0 ); -- rs->sr_text = "new superior is an alias"; -- rs->sr_err = LDAP_ALIAS_PROBLEM; -- goto return_results; -- } -- -- if ( is_entry_referral( np ) ) { -- /* parent is a referral, don't allow add */ -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modrdn) -- ": entry is referral\n", -- 0, 0, 0 ); -- rs->sr_text = "new superior is a referral"; -- rs->sr_err = LDAP_OTHER; -- goto return_results; -- } -- -- } else { -- np_dn = NULL; -- -- /* no parent, modrdn entry directly under root */ -- if ( be_issuffix( op->o_bd, (struct berval *)&slap_empty_bv ) -- || be_isupdate( op ) ) { -- np = (Entry *)&slap_entry_root; -- -- /* check parent for "children" acl */ -- rs->sr_err = access_allowed( op, np, -- children, NULL, ACL_WADD, NULL ); -- -- np = NULL; -- -- if ( ! rs->sr_err ) { -- switch( opinfo.boi_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- -- rs->sr_err = LDAP_INSUFFICIENT_ACCESS; -- Debug( LDAP_DEBUG_TRACE, -- "no access to new superior\n", -- 0, 0, 0 ); -- rs->sr_text = -- "no write access to new superior's children"; -- goto return_results; -- } -- } -- } -- -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modrdn) -- ": wr to new parent's children OK\n", -- 0, 0, 0 ); -- -- new_parent_dn = np_dn; -- } -- -- /* Build target dn and make sure target entry doesn't exist already. */ -- if (!new_dn.bv_val) { -- build_new_dn( &new_dn, new_parent_dn, &op->oq_modrdn.rs_newrdn, NULL ); -- } -- -- if (!new_ndn.bv_val) { -- struct berval bv = {0, NULL}; -- dnNormalize( 0, NULL, NULL, &new_dn, &bv, op->o_tmpmemctx ); -- ber_dupbv( &new_ndn, &bv ); -- /* FIXME: why not call dnNormalize() w/o ctx? */ -- op->o_tmpfree( bv.bv_val, op->o_tmpmemctx ); -- } -- -- Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_modrdn) ": new ndn=%s\n", -- new_ndn.bv_val, 0, 0 ); -- -- /* Shortcut the search */ -- nei = neip ? neip : eip; -- rs->sr_err = bdb_cache_find_ndn ( op, ltid, &new_ndn, &nei ); -- if ( nei ) bdb_cache_entryinfo_unlock( nei ); -- switch( rs->sr_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- case DB_NOTFOUND: -- break; -- case 0: -- /* Allow rename to same DN */ -- if ( nei == ei ) -- break; -- rs->sr_err = LDAP_ALREADY_EXISTS; -- goto return_results; -- default: -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- -- assert( op->orr_modlist != NULL ); -- -- if( op->o_preread ) { -- if( preread_ctrl == NULL ) { -- preread_ctrl = &ctrls[num_ctrls++]; -- ctrls[num_ctrls] = NULL; -- } -- if( slap_read_controls( op, rs, e, -- &slap_pre_read_bv, preread_ctrl ) ) -- { -- Debug( LDAP_DEBUG_TRACE, -- "<=- " LDAP_XSTRING(bdb_modrdn) -- ": pre-read failed!\n", 0, 0, 0 ); -- if ( op->o_preread & SLAP_CONTROL_CRITICAL ) { -- /* FIXME: is it correct to abort -- * operation if control fails? */ -- goto return_results; -- } -- } -- } -- -- /* nested transaction */ -- rs->sr_err = TXN_BEGIN( bdb->bi_dbenv, ltid, <2, bdb->bi_db_opflags ); -- rs->sr_text = NULL; -- if( rs->sr_err != 0 ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modrdn) -- ": txn_begin(2) failed: %s (%d)\n", -- db_strerror(rs->sr_err), rs->sr_err, 0 ); -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_modrdn) ": txn2 id: %x\n", -- lt2->id(lt2), 0, 0 ); -- -- /* delete old DN */ -- rs->sr_err = bdb_dn2id_delete( op, lt2, eip, e ); -- if ( rs->sr_err != 0 ) { -- Debug(LDAP_DEBUG_TRACE, -- "<=- " LDAP_XSTRING(bdb_modrdn) -- ": dn2id del failed: %s (%d)\n", -- db_strerror(rs->sr_err), rs->sr_err, 0 ); -- switch( rs->sr_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "DN index delete fail"; -- goto return_results; -- } -- -- /* copy the entry, then override some fields */ -- dummy = *e; -- dummy.e_name = new_dn; -- dummy.e_nname = new_ndn; -- dummy.e_attrs = NULL; -- -- /* add new DN */ -- rs->sr_err = bdb_dn2id_add( op, lt2, neip ? neip : eip, &dummy ); -- if ( rs->sr_err != 0 ) { -- Debug(LDAP_DEBUG_TRACE, -- "<=- " LDAP_XSTRING(bdb_modrdn) -- ": dn2id add failed: %s (%d)\n", -- db_strerror(rs->sr_err), rs->sr_err, 0 ); -- switch( rs->sr_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "DN index add failed"; -- goto return_results; -- } -- -- dummy.e_attrs = e->e_attrs; -- -- /* modify entry */ -- rs->sr_err = bdb_modify_internal( op, lt2, op->orr_modlist, &dummy, -- &rs->sr_text, textbuf, textlen ); -- if( rs->sr_err != LDAP_SUCCESS ) { -- Debug(LDAP_DEBUG_TRACE, -- "<=- " LDAP_XSTRING(bdb_modrdn) -- ": modify failed: %s (%d)\n", -- db_strerror(rs->sr_err), rs->sr_err, 0 ); -- if ( ( rs->sr_err == LDAP_INSUFFICIENT_ACCESS ) && opinfo.boi_err ) { -- rs->sr_err = opinfo.boi_err; -- } -- if ( dummy.e_attrs == e->e_attrs ) dummy.e_attrs = NULL; -- switch( rs->sr_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- goto return_results; -- } -- -- /* id2entry index */ -- rs->sr_err = bdb_id2entry_update( op->o_bd, lt2, &dummy ); -- if ( rs->sr_err != 0 ) { -- Debug(LDAP_DEBUG_TRACE, -- "<=- " LDAP_XSTRING(bdb_modrdn) -- ": id2entry failed: %s (%d)\n", -- db_strerror(rs->sr_err), rs->sr_err, 0 ); -- switch( rs->sr_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "entry update failed"; -- goto return_results; -- } -- -- if ( p_ndn.bv_len != 0 ) { -- parent_is_glue = is_entry_glue(p); -- rs->sr_err = bdb_cache_children( op, lt2, p ); -- if ( rs->sr_err != DB_NOTFOUND ) { -- switch( rs->sr_err ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- case 0: -- break; -- default: -- Debug(LDAP_DEBUG_ARGS, -- "<=- " LDAP_XSTRING(bdb_modrdn) -- ": has_children failed: %s (%d)\n", -- db_strerror(rs->sr_err), rs->sr_err, 0 ); -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error"; -- goto return_results; -- } -- parent_is_leaf = 1; -- } -- bdb_unlocked_cache_return_entry_r(&bdb->bi_cache, p); -- p = NULL; -- } -- -- if ( TXN_COMMIT( lt2, 0 ) != 0 ) { -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "txn_commit(2) failed"; -- goto return_results; -- } -- -- if( op->o_postread ) { -- if( postread_ctrl == NULL ) { -- postread_ctrl = &ctrls[num_ctrls++]; -- ctrls[num_ctrls] = NULL; -- } -- if( slap_read_controls( op, rs, &dummy, -- &slap_post_read_bv, postread_ctrl ) ) -- { -- Debug( LDAP_DEBUG_TRACE, -- "<=- " LDAP_XSTRING(bdb_modrdn) -- ": post-read failed!\n", 0, 0, 0 ); -- if ( op->o_postread & SLAP_CONTROL_CRITICAL ) { -- /* FIXME: is it correct to abort -- * operation if control fails? */ -- goto return_results; -- } -- } -- } -- -- if( op->o_noop ) { -- if(( rs->sr_err=TXN_ABORT( ltid )) != 0 ) { -- rs->sr_text = "txn_abort (no-op) failed"; -- } else { -- rs->sr_err = LDAP_X_NO_OPERATION; -- ltid = NULL; -- /* Only free attrs if they were dup'd. */ -- if ( dummy.e_attrs == e->e_attrs ) dummy.e_attrs = NULL; -- goto return_results; -- } -- -- } else { -- rc = bdb_cache_modrdn( bdb, e, &op->orr_nnewrdn, &dummy, neip, -- ltid, &lock ); -- switch( rc ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- } -- dummy.e_attrs = NULL; -- new_dn.bv_val = NULL; -- new_ndn.bv_val = NULL; -- -- if(( rs->sr_err=TXN_COMMIT( ltid, 0 )) != 0 ) { -- rs->sr_text = "txn_commit failed"; -- } else { -- rs->sr_err = LDAP_SUCCESS; -- } -- } -- -- ltid = NULL; -- LDAP_SLIST_REMOVE( &op->o_extra, &opinfo.boi_oe, OpExtra, oe_next ); -- opinfo.boi_oe.oe_key = NULL; -- -- if( rs->sr_err != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modrdn) ": %s : %s (%d)\n", -- rs->sr_text, db_strerror(rs->sr_err), rs->sr_err ); -- rs->sr_err = LDAP_OTHER; -- -- goto return_results; -- } -- -- Debug(LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_modrdn) -- ": rdn modified%s id=%08lx dn=\"%s\"\n", -- op->o_noop ? " (no-op)" : "", -- dummy.e_id, op->o_req_dn.bv_val ); -- rs->sr_text = NULL; -- if( num_ctrls ) rs->sr_ctrls = ctrls; -- --return_results: -- if ( dummy.e_attrs ) { -- attrs_free( dummy.e_attrs ); -- } -- send_ldap_result( op, rs ); -- -- if( rs->sr_err == LDAP_SUCCESS && bdb->bi_txn_cp_kbyte ) { -- TXN_CHECKPOINT( bdb->bi_dbenv, -- bdb->bi_txn_cp_kbyte, bdb->bi_txn_cp_min, 0 ); -- } -- -- if ( rs->sr_err == LDAP_SUCCESS && parent_is_glue && parent_is_leaf ) { -- op->o_delete_glue_parent = 1; -- } -- --done: -- slap_graduate_commit_csn( op ); -- -- if( new_dn.bv_val != NULL ) free( new_dn.bv_val ); -- if( new_ndn.bv_val != NULL ) free( new_ndn.bv_val ); -- -- /* LDAP v3 Support */ -- if( np != NULL ) { -- /* free new parent and reader lock */ -- bdb_unlocked_cache_return_entry_r(&bdb->bi_cache, np); -- } -- -- if( p != NULL ) { -- /* free parent and reader lock */ -- bdb_unlocked_cache_return_entry_r(&bdb->bi_cache, p); -- } -- -- /* free entry */ -- if( e != NULL ) { -- bdb_unlocked_cache_return_entry_w( &bdb->bi_cache, e); -- } -- -- if( ltid != NULL ) { -- TXN_ABORT( ltid ); -- } -- if ( opinfo.boi_oe.oe_key ) { -- LDAP_SLIST_REMOVE( &op->o_extra, &opinfo.boi_oe, OpExtra, oe_next ); -- } -- -- if( preread_ctrl != NULL && (*preread_ctrl) != NULL ) { -- slap_sl_free( (*preread_ctrl)->ldctl_value.bv_val, op->o_tmpmemctx ); -- slap_sl_free( *preread_ctrl, op->o_tmpmemctx ); -- } -- if( postread_ctrl != NULL && (*postread_ctrl) != NULL ) { -- slap_sl_free( (*postread_ctrl)->ldctl_value.bv_val, op->o_tmpmemctx ); -- slap_sl_free( *postread_ctrl, op->o_tmpmemctx ); -- } -- return rs->sr_err; --} -diff --git a/servers/slapd/back-bdb/monitor.c b/servers/slapd/back-bdb/monitor.c -deleted file mode 100644 -index 4afaf9d..0000000 ---- a/servers/slapd/back-bdb/monitor.c -+++ /dev/null -@@ -1,724 +0,0 @@ --/* monitor.c - monitor bdb backend */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include --#include --#include --#include --#include --#include --#include "lutil.h" --#include "back-bdb.h" -- --#include "../back-monitor/back-monitor.h" -- --#include "config.h" -- --static ObjectClass *oc_olmBDBDatabase; -- --static AttributeDescription *ad_olmBDBEntryCache, -- *ad_olmBDBDNCache, *ad_olmBDBIDLCache, -- *ad_olmDbDirectory; -- --#ifdef BDB_MONITOR_IDX --static int --bdb_monitor_idx_entry_add( -- struct bdb_info *bdb, -- Entry *e ); -- --static AttributeDescription *ad_olmDbNotIndexed; --#endif /* BDB_MONITOR_IDX */ -- --/* -- * NOTE: there's some confusion in monitor OID arc; -- * by now, let's consider: -- * -- * Subsystems monitor attributes 1.3.6.1.4.1.4203.666.1.55.0 -- * Databases monitor attributes 1.3.6.1.4.1.4203.666.1.55.0.1 -- * BDB database monitor attributes 1.3.6.1.4.1.4203.666.1.55.0.1.1 -- * -- * Subsystems monitor objectclasses 1.3.6.1.4.1.4203.666.3.16.0 -- * Databases monitor objectclasses 1.3.6.1.4.1.4203.666.3.16.0.1 -- * BDB database monitor objectclasses 1.3.6.1.4.1.4203.666.3.16.0.1.1 -- */ -- --static struct { -- char *name; -- char *oid; --} s_oid[] = { -- { "olmBDBAttributes", "olmDatabaseAttributes:1" }, -- { "olmBDBObjectClasses", "olmDatabaseObjectClasses:1" }, -- -- { NULL } --}; -- --static struct { -- char *desc; -- AttributeDescription **ad; --} s_at[] = { -- { "( olmBDBAttributes:1 " -- "NAME ( 'olmBDBEntryCache' ) " -- "DESC 'Number of items in Entry Cache' " -- "SUP monitorCounter " -- "NO-USER-MODIFICATION " -- "USAGE dSAOperation )", -- &ad_olmBDBEntryCache }, -- -- { "( olmBDBAttributes:2 " -- "NAME ( 'olmBDBDNCache' ) " -- "DESC 'Number of items in DN Cache' " -- "SUP monitorCounter " -- "NO-USER-MODIFICATION " -- "USAGE dSAOperation )", -- &ad_olmBDBDNCache }, -- -- { "( olmBDBAttributes:3 " -- "NAME ( 'olmBDBIDLCache' ) " -- "DESC 'Number of items in IDL Cache' " -- "SUP monitorCounter " -- "NO-USER-MODIFICATION " -- "USAGE dSAOperation )", -- &ad_olmBDBIDLCache }, -- -- { "( olmDatabaseAttributes:1 " -- "NAME ( 'olmDbDirectory' ) " -- "DESC 'Path name of the directory " -- "where the database environment resides' " -- "SUP monitoredInfo " -- "NO-USER-MODIFICATION " -- "USAGE dSAOperation )", -- &ad_olmDbDirectory }, -- --#ifdef BDB_MONITOR_IDX -- { "( olmDatabaseAttributes:2 " -- "NAME ( 'olmDbNotIndexed' ) " -- "DESC 'Missing indexes resulting from candidate selection' " -- "SUP monitoredInfo " -- "NO-USER-MODIFICATION " -- "USAGE dSAOperation )", -- &ad_olmDbNotIndexed }, --#endif /* BDB_MONITOR_IDX */ -- -- { NULL } --}; -- --static struct { -- char *desc; -- ObjectClass **oc; --} s_oc[] = { -- /* augments an existing object, so it must be AUXILIARY -- * FIXME: derive from some ABSTRACT "monitoredEntity"? */ -- { "( olmBDBObjectClasses:1 " -- "NAME ( 'olmBDBDatabase' ) " -- "SUP top AUXILIARY " -- "MAY ( " -- "olmBDBEntryCache " -- "$ olmBDBDNCache " -- "$ olmBDBIDLCache " -- "$ olmDbDirectory " --#ifdef BDB_MONITOR_IDX -- "$ olmDbNotIndexed " --#endif /* BDB_MONITOR_IDX */ -- ") )", -- &oc_olmBDBDatabase }, -- -- { NULL } --}; -- --static int --bdb_monitor_update( -- Operation *op, -- SlapReply *rs, -- Entry *e, -- void *priv ) --{ -- struct bdb_info *bdb = (struct bdb_info *) priv; -- Attribute *a; -- -- char buf[ BUFSIZ ]; -- struct berval bv; -- -- assert( ad_olmBDBEntryCache != NULL ); -- -- a = attr_find( e->e_attrs, ad_olmBDBEntryCache ); -- assert( a != NULL ); -- bv.bv_val = buf; -- bv.bv_len = snprintf( buf, sizeof( buf ), "%lu", bdb->bi_cache.c_cursize ); -- ber_bvreplace( &a->a_vals[ 0 ], &bv ); -- -- a = attr_find( e->e_attrs, ad_olmBDBDNCache ); -- assert( a != NULL ); -- bv.bv_len = snprintf( buf, sizeof( buf ), "%lu", bdb->bi_cache.c_eiused ); -- ber_bvreplace( &a->a_vals[ 0 ], &bv ); -- -- a = attr_find( e->e_attrs, ad_olmBDBIDLCache ); -- assert( a != NULL ); -- bv.bv_len = snprintf( buf, sizeof( buf ), "%lu", bdb->bi_idl_cache_size ); -- ber_bvreplace( &a->a_vals[ 0 ], &bv ); -- --#ifdef BDB_MONITOR_IDX -- bdb_monitor_idx_entry_add( bdb, e ); --#endif /* BDB_MONITOR_IDX */ -- -- return SLAP_CB_CONTINUE; --} -- --#if 0 /* uncomment if required */ --static int --bdb_monitor_modify( -- Operation *op, -- SlapReply *rs, -- Entry *e, -- void *priv ) --{ -- return SLAP_CB_CONTINUE; --} --#endif -- --static int --bdb_monitor_free( -- Entry *e, -- void **priv ) --{ -- struct berval values[ 2 ]; -- Modification mod = { 0 }; -- -- const char *text; -- char textbuf[ SLAP_TEXT_BUFLEN ]; -- -- int i, rc; -- -- /* NOTE: if slap_shutdown != 0, priv might have already been freed */ -- *priv = NULL; -- -- /* Remove objectClass */ -- mod.sm_op = LDAP_MOD_DELETE; -- mod.sm_desc = slap_schema.si_ad_objectClass; -- mod.sm_values = values; -- mod.sm_numvals = 1; -- values[ 0 ] = oc_olmBDBDatabase->soc_cname; -- BER_BVZERO( &values[ 1 ] ); -- -- rc = modify_delete_values( e, &mod, 1, &text, -- textbuf, sizeof( textbuf ) ); -- /* don't care too much about return code... */ -- -- /* remove attrs */ -- mod.sm_values = NULL; -- mod.sm_numvals = 0; -- for ( i = 0; s_at[ i ].desc != NULL; i++ ) { -- mod.sm_desc = *s_at[ i ].ad; -- rc = modify_delete_values( e, &mod, 1, &text, -- textbuf, sizeof( textbuf ) ); -- /* don't care too much about return code... */ -- } -- -- return SLAP_CB_CONTINUE; --} -- --#define bdb_monitor_initialize BDB_SYMBOL(monitor_initialize) -- --/* -- * call from within bdb_initialize() -- */ --static int --bdb_monitor_initialize( void ) --{ -- int i, code; -- ConfigArgs c; -- char *argv[ 3 ]; -- -- static int bdb_monitor_initialized = 0; -- -- /* set to 0 when successfully initialized; otherwise, remember failure */ -- static int bdb_monitor_initialized_failure = 1; -- -- if ( bdb_monitor_initialized++ ) { -- return bdb_monitor_initialized_failure; -- } -- -- if ( backend_info( "monitor" ) == NULL ) { -- return -1; -- } -- -- /* register schema here */ -- -- argv[ 0 ] = "back-bdb/back-hdb monitor"; -- c.argv = argv; -- c.argc = 3; -- c.fname = argv[0]; -- -- for ( i = 0; s_oid[ i ].name; i++ ) { -- c.lineno = i; -- argv[ 1 ] = s_oid[ i ].name; -- argv[ 2 ] = s_oid[ i ].oid; -- -- if ( parse_oidm( &c, 0, NULL ) != 0 ) { -- Debug( LDAP_DEBUG_ANY, LDAP_XSTRING(bdb_monitor_initialize) -- ": unable to add " -- "objectIdentifier \"%s=%s\"\n", -- s_oid[ i ].name, s_oid[ i ].oid, 0 ); -- return 2; -- } -- } -- -- for ( i = 0; s_at[ i ].desc != NULL; i++ ) { -- code = register_at( s_at[ i ].desc, s_at[ i ].ad, 1 ); -- if ( code != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_ANY, LDAP_XSTRING(bdb_monitor_initialize) -- ": register_at failed for attributeType (%s)\n", -- s_at[ i ].desc, 0, 0 ); -- return 3; -- -- } else { -- (*s_at[ i ].ad)->ad_type->sat_flags |= SLAP_AT_HIDE; -- } -- } -- -- for ( i = 0; s_oc[ i ].desc != NULL; i++ ) { -- code = register_oc( s_oc[ i ].desc, s_oc[ i ].oc, 1 ); -- if ( code != LDAP_SUCCESS ) { -- Debug( LDAP_DEBUG_ANY, LDAP_XSTRING(bdb_monitor_initialize) -- ": register_oc failed for objectClass (%s)\n", -- s_oc[ i ].desc, 0, 0 ); -- return 4; -- -- } else { -- (*s_oc[ i ].oc)->soc_flags |= SLAP_OC_HIDE; -- } -- } -- -- return ( bdb_monitor_initialized_failure = LDAP_SUCCESS ); --} -- --/* -- * call from within bdb_db_init() -- */ --int --bdb_monitor_db_init( BackendDB *be ) --{ -- struct bdb_info *bdb = (struct bdb_info *) be->be_private; -- -- if ( bdb_monitor_initialize() == LDAP_SUCCESS ) { -- /* monitoring in back-bdb is on by default */ -- SLAP_DBFLAGS( be ) |= SLAP_DBFLAG_MONITORING; -- } -- --#ifdef BDB_MONITOR_IDX -- bdb->bi_idx = NULL; -- ldap_pvt_thread_mutex_init( &bdb->bi_idx_mutex ); --#endif /* BDB_MONITOR_IDX */ -- -- return 0; --} -- --/* -- * call from within bdb_db_open() -- */ --int --bdb_monitor_db_open( BackendDB *be ) --{ -- struct bdb_info *bdb = (struct bdb_info *) be->be_private; -- Attribute *a, *next; -- monitor_callback_t *cb = NULL; -- int rc = 0; -- BackendInfo *mi; -- monitor_extra_t *mbe; -- -- if ( !SLAP_DBMONITORING( be ) ) { -- return 0; -- } -- -- mi = backend_info( "monitor" ); -- if ( !mi || !mi->bi_extra ) { -- SLAP_DBFLAGS( be ) ^= SLAP_DBFLAG_MONITORING; -- return 0; -- } -- mbe = mi->bi_extra; -- -- /* don't bother if monitor is not configured */ -- if ( !mbe->is_configured() ) { -- static int warning = 0; -- -- if ( warning++ == 0 ) { -- Debug( LDAP_DEBUG_ANY, LDAP_XSTRING(bdb_monitor_db_open) -- ": monitoring disabled; " -- "configure monitor database to enable\n", -- 0, 0, 0 ); -- } -- -- return 0; -- } -- -- /* alloc as many as required (plus 1 for objectClass) */ -- a = attrs_alloc( 1 + 4 ); -- if ( a == NULL ) { -- rc = 1; -- goto cleanup; -- } -- -- a->a_desc = slap_schema.si_ad_objectClass; -- attr_valadd( a, &oc_olmBDBDatabase->soc_cname, NULL, 1 ); -- next = a->a_next; -- -- { -- struct berval bv = BER_BVC( "0" ); -- -- next->a_desc = ad_olmBDBEntryCache; -- attr_valadd( next, &bv, NULL, 1 ); -- next = next->a_next; -- -- next->a_desc = ad_olmBDBDNCache; -- attr_valadd( next, &bv, NULL, 1 ); -- next = next->a_next; -- -- next->a_desc = ad_olmBDBIDLCache; -- attr_valadd( next, &bv, NULL, 1 ); -- next = next->a_next; -- } -- -- { -- struct berval bv, nbv; -- ber_len_t pathlen = 0, len = 0; -- char path[ MAXPATHLEN ] = { '\0' }; -- char *fname = bdb->bi_dbenv_home, -- *ptr; -- -- len = strlen( fname ); -- if ( fname[ 0 ] != '/' ) { -- /* get full path name */ -- getcwd( path, sizeof( path ) ); -- pathlen = strlen( path ); -- -- if ( fname[ 0 ] == '.' && fname[ 1 ] == '/' ) { -- fname += 2; -- len -= 2; -- } -- } -- -- bv.bv_len = pathlen + STRLENOF( "/" ) + len; -- ptr = bv.bv_val = ch_malloc( bv.bv_len + STRLENOF( "/" ) + 1 ); -- if ( pathlen ) { -- ptr = lutil_strncopy( ptr, path, pathlen ); -- ptr[ 0 ] = '/'; -- ptr++; -- } -- ptr = lutil_strncopy( ptr, fname, len ); -- if ( ptr[ -1 ] != '/' ) { -- ptr[ 0 ] = '/'; -- ptr++; -- } -- ptr[ 0 ] = '\0'; -- -- attr_normalize_one( ad_olmDbDirectory, &bv, &nbv, NULL ); -- -- next->a_desc = ad_olmDbDirectory; -- next->a_vals = ch_calloc( sizeof( struct berval ), 2 ); -- next->a_vals[ 0 ] = bv; -- next->a_numvals = 1; -- -- if ( BER_BVISNULL( &nbv ) ) { -- next->a_nvals = next->a_vals; -- -- } else { -- next->a_nvals = ch_calloc( sizeof( struct berval ), 2 ); -- next->a_nvals[ 0 ] = nbv; -- } -- -- next = next->a_next; -- } -- -- cb = ch_calloc( sizeof( monitor_callback_t ), 1 ); -- cb->mc_update = bdb_monitor_update; --#if 0 /* uncomment if required */ -- cb->mc_modify = bdb_monitor_modify; --#endif -- cb->mc_free = bdb_monitor_free; -- cb->mc_private = (void *)bdb; -- -- /* make sure the database is registered; then add monitor attributes */ -- rc = mbe->register_database( be, &bdb->bi_monitor.bdm_ndn ); -- if ( rc == 0 ) { -- rc = mbe->register_entry_attrs( &bdb->bi_monitor.bdm_ndn, a, cb, -- NULL, 0, NULL ); -- } -- --cleanup:; -- if ( rc != 0 ) { -- if ( cb != NULL ) { -- ch_free( cb ); -- cb = NULL; -- } -- -- if ( a != NULL ) { -- attrs_free( a ); -- a = NULL; -- } -- } -- -- /* store for cleanup */ -- bdb->bi_monitor.bdm_cb = (void *)cb; -- -- /* we don't need to keep track of the attributes, because -- * bdb_monitor_free() takes care of everything */ -- if ( a != NULL ) { -- attrs_free( a ); -- } -- -- return rc; --} -- --/* -- * call from within bdb_db_close() -- */ --int --bdb_monitor_db_close( BackendDB *be ) --{ -- struct bdb_info *bdb = (struct bdb_info *) be->be_private; -- -- if ( !BER_BVISNULL( &bdb->bi_monitor.bdm_ndn ) ) { -- BackendInfo *mi = backend_info( "monitor" ); -- monitor_extra_t *mbe; -- -- if ( mi && &mi->bi_extra ) { -- mbe = mi->bi_extra; -- mbe->unregister_entry_callback( &bdb->bi_monitor.bdm_ndn, -- (monitor_callback_t *)bdb->bi_monitor.bdm_cb, -- NULL, 0, NULL ); -- } -- -- memset( &bdb->bi_monitor, 0, sizeof( bdb->bi_monitor ) ); -- } -- -- return 0; --} -- --/* -- * call from within bdb_db_destroy() -- */ --int --bdb_monitor_db_destroy( BackendDB *be ) --{ --#ifdef BDB_MONITOR_IDX -- struct bdb_info *bdb = (struct bdb_info *) be->be_private; -- -- /* TODO: free tree */ -- ldap_pvt_thread_mutex_destroy( &bdb->bi_idx_mutex ); -- avl_free( bdb->bi_idx, ch_free ); --#endif /* BDB_MONITOR_IDX */ -- -- return 0; --} -- --#ifdef BDB_MONITOR_IDX -- --#define BDB_MONITOR_IDX_TYPES (4) -- --typedef struct monitor_idx_t monitor_idx_t; -- --struct monitor_idx_t { -- AttributeDescription *idx_ad; -- unsigned long idx_count[BDB_MONITOR_IDX_TYPES]; --}; -- --static int --bdb_monitor_bitmask2key( slap_mask_t bitmask ) --{ -- int key; -- -- for ( key = 0; key < 8 * (int)sizeof(slap_mask_t) && !( bitmask & 0x1U ); -- key++ ) -- bitmask >>= 1; -- -- return key; --} -- --static struct berval idxbv[] = { -- BER_BVC( "present=" ), -- BER_BVC( "equality=" ), -- BER_BVC( "approx=" ), -- BER_BVC( "substr=" ), -- BER_BVNULL --}; -- --static ber_len_t --bdb_monitor_idx2len( monitor_idx_t *idx ) --{ -- int i; -- ber_len_t len = 0; -- -- for ( i = 0; i < BDB_MONITOR_IDX_TYPES; i++ ) { -- if ( idx->idx_count[ i ] != 0 ) { -- len += idxbv[i].bv_len; -- } -- } -- -- return len; --} -- --static int --monitor_idx_cmp( const void *p1, const void *p2 ) --{ -- const monitor_idx_t *idx1 = (const monitor_idx_t *)p1; -- const monitor_idx_t *idx2 = (const monitor_idx_t *)p2; -- -- return SLAP_PTRCMP( idx1->idx_ad, idx2->idx_ad ); --} -- --static int --monitor_idx_dup( void *p1, void *p2 ) --{ -- monitor_idx_t *idx1 = (monitor_idx_t *)p1; -- monitor_idx_t *idx2 = (monitor_idx_t *)p2; -- -- return SLAP_PTRCMP( idx1->idx_ad, idx2->idx_ad ) == 0 ? -1 : 0; --} -- --int --bdb_monitor_idx_add( -- struct bdb_info *bdb, -- AttributeDescription *desc, -- slap_mask_t type ) --{ -- monitor_idx_t idx_dummy = { 0 }, -- *idx; -- int rc = 0, key; -- -- idx_dummy.idx_ad = desc; -- key = bdb_monitor_bitmask2key( type ) - 1; -- if ( key >= BDB_MONITOR_IDX_TYPES ) { -- /* invalid index type */ -- return -1; -- } -- -- ldap_pvt_thread_mutex_lock( &bdb->bi_idx_mutex ); -- -- idx = (monitor_idx_t *)avl_find( bdb->bi_idx, -- (caddr_t)&idx_dummy, monitor_idx_cmp ); -- if ( idx == NULL ) { -- idx = (monitor_idx_t *)ch_calloc( sizeof( monitor_idx_t ), 1 ); -- idx->idx_ad = desc; -- idx->idx_count[ key ] = 1; -- -- switch ( avl_insert( &bdb->bi_idx, (caddr_t)idx, -- monitor_idx_cmp, monitor_idx_dup ) ) -- { -- case 0: -- break; -- -- default: -- ch_free( idx ); -- rc = -1; -- } -- -- } else { -- idx->idx_count[ key ]++; -- } -- -- ldap_pvt_thread_mutex_unlock( &bdb->bi_idx_mutex ); -- -- return rc; --} -- --static int --bdb_monitor_idx_apply( void *v_idx, void *v_valp ) --{ -- monitor_idx_t *idx = (monitor_idx_t *)v_idx; -- BerVarray *valp = (BerVarray *)v_valp; -- -- struct berval bv; -- char *ptr; -- char count_buf[ BDB_MONITOR_IDX_TYPES ][ SLAP_TEXT_BUFLEN ]; -- ber_len_t count_len[ BDB_MONITOR_IDX_TYPES ], -- idx_len; -- int i, num = 0; -- -- idx_len = bdb_monitor_idx2len( idx ); -- -- bv.bv_len = 0; -- for ( i = 0; i < BDB_MONITOR_IDX_TYPES; i++ ) { -- if ( idx->idx_count[ i ] == 0 ) { -- continue; -- } -- -- count_len[ i ] = snprintf( count_buf[ i ], -- sizeof( count_buf[ i ] ), "%lu", idx->idx_count[ i ] ); -- bv.bv_len += count_len[ i ]; -- num++; -- } -- -- bv.bv_len += idx->idx_ad->ad_cname.bv_len -- + num -- + idx_len; -- ptr = bv.bv_val = ch_malloc( bv.bv_len + 1 ); -- ptr = lutil_strcopy( ptr, idx->idx_ad->ad_cname.bv_val ); -- for ( i = 0; i < BDB_MONITOR_IDX_TYPES; i++ ) { -- if ( idx->idx_count[ i ] == 0 ) { -- continue; -- } -- -- ptr[ 0 ] = '#'; -- ++ptr; -- ptr = lutil_strcopy( ptr, idxbv[ i ].bv_val ); -- ptr = lutil_strcopy( ptr, count_buf[ i ] ); -- } -- -- ber_bvarray_add( valp, &bv ); -- -- return 0; --} -- --static int --bdb_monitor_idx_entry_add( -- struct bdb_info *bdb, -- Entry *e ) --{ -- BerVarray vals = NULL; -- Attribute *a; -- -- a = attr_find( e->e_attrs, ad_olmDbNotIndexed ); -- -- ldap_pvt_thread_mutex_lock( &bdb->bi_idx_mutex ); -- -- avl_apply( bdb->bi_idx, bdb_monitor_idx_apply, -- &vals, -1, AVL_INORDER ); -- -- ldap_pvt_thread_mutex_unlock( &bdb->bi_idx_mutex ); -- -- if ( vals != NULL ) { -- if ( a != NULL ) { -- assert( a->a_nvals == a->a_vals ); -- -- ber_bvarray_free( a->a_vals ); -- -- } else { -- Attribute **ap; -- -- for ( ap = &e->e_attrs; *ap != NULL; ap = &(*ap)->a_next ) -- ; -- *ap = attr_alloc( ad_olmDbNotIndexed ); -- a = *ap; -- } -- a->a_vals = vals; -- a->a_nvals = a->a_vals; -- } -- -- return 0; --} -- --#endif /* BDB_MONITOR_IDX */ -diff --git a/servers/slapd/back-bdb/nextid.c b/servers/slapd/back-bdb/nextid.c -deleted file mode 100644 -index 480b80e..0000000 ---- a/servers/slapd/back-bdb/nextid.c -+++ /dev/null -@@ -1,80 +0,0 @@ --/* init.c - initialize bdb backend */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include --#include -- --#include "back-bdb.h" -- --int bdb_next_id( BackendDB *be, ID *out ) --{ -- struct bdb_info *bdb = (struct bdb_info *) be->be_private; -- -- ldap_pvt_thread_mutex_lock( &bdb->bi_lastid_mutex ); -- *out = ++bdb->bi_lastid; -- ldap_pvt_thread_mutex_unlock( &bdb->bi_lastid_mutex ); -- -- return 0; --} -- --int bdb_last_id( BackendDB *be, DB_TXN *tid ) --{ -- struct bdb_info *bdb = (struct bdb_info *) be->be_private; -- int rc; -- ID id = 0; -- unsigned char idbuf[sizeof(ID)]; -- DBT key, data; -- DBC *cursor; -- -- DBTzero( &key ); -- key.flags = DB_DBT_USERMEM; -- key.data = (char *) idbuf; -- key.ulen = sizeof( idbuf ); -- -- DBTzero( &data ); -- data.flags = DB_DBT_USERMEM | DB_DBT_PARTIAL; -- -- /* Get a read cursor */ -- rc = bdb->bi_id2entry->bdi_db->cursor( bdb->bi_id2entry->bdi_db, -- tid, &cursor, 0 ); -- -- if (rc == 0) { -- rc = cursor->c_get(cursor, &key, &data, DB_LAST); -- cursor->c_close(cursor); -- } -- -- switch(rc) { -- case DB_NOTFOUND: -- rc = 0; -- break; -- case 0: -- BDB_DISK2ID( idbuf, &id ); -- break; -- -- default: -- Debug( LDAP_DEBUG_ANY, -- "=> bdb_last_id: get failed: %s (%d)\n", -- db_strerror(rc), rc, 0 ); -- goto done; -- } -- -- bdb->bi_lastid = id; -- --done: -- return rc; --} -diff --git a/servers/slapd/back-bdb/operational.c b/servers/slapd/back-bdb/operational.c -deleted file mode 100644 -index 5f21abe..0000000 ---- a/servers/slapd/back-bdb/operational.c -+++ /dev/null -@@ -1,151 +0,0 @@ --/* operational.c - bdb backend operational attributes function */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include -- --#include --#include -- --#include "slap.h" --#include "back-bdb.h" -- --/* -- * sets *hasSubordinates to LDAP_COMPARE_TRUE/LDAP_COMPARE_FALSE -- * if the entry has children or not. -- */ --int --bdb_hasSubordinates( -- Operation *op, -- Entry *e, -- int *hasSubordinates ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- struct bdb_op_info *opinfo; -- OpExtra *oex; -- DB_TXN *rtxn; -- int rc; -- int release = 0; -- -- assert( e != NULL ); -- -- /* NOTE: this should never happen, but it actually happens -- * when using back-relay; until we find a better way to -- * preserve entry's private information while rewriting it, -- * let's disable the hasSubordinate feature for back-relay. -- */ -- if ( BEI( e ) == NULL ) { -- Entry *ee = NULL; -- rc = be_entry_get_rw( op, &e->e_nname, NULL, NULL, 0, &ee ); -- if ( rc != LDAP_SUCCESS || ee == NULL ) { -- rc = LDAP_OTHER; -- goto done; -- } -- e = ee; -- release = 1; -- if ( BEI( ee ) == NULL ) { -- rc = LDAP_OTHER; -- goto done; -- } -- } -- -- /* Check for a txn in a parent op, otherwise use reader txn */ -- LDAP_SLIST_FOREACH( oex, &op->o_extra, oe_next ) { -- if ( oex->oe_key == bdb ) -- break; -- } -- opinfo = (struct bdb_op_info *) oex; -- if ( opinfo && opinfo->boi_txn ) { -- rtxn = opinfo->boi_txn; -- } else { -- rc = bdb_reader_get(op, bdb->bi_dbenv, &rtxn); -- if ( rc ) { -- rc = LDAP_OTHER; -- goto done; -- } -- } -- --retry: -- /* FIXME: we can no longer assume the entry's e_private -- * field is correctly populated; so we need to reacquire -- * it with reader lock */ -- rc = bdb_cache_children( op, rtxn, e ); -- -- switch( rc ) { -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto retry; -- -- case 0: -- *hasSubordinates = LDAP_COMPARE_TRUE; -- break; -- -- case DB_NOTFOUND: -- *hasSubordinates = LDAP_COMPARE_FALSE; -- rc = LDAP_SUCCESS; -- break; -- -- default: -- Debug(LDAP_DEBUG_ARGS, -- "<=- " LDAP_XSTRING(bdb_hasSubordinates) -- ": has_children failed: %s (%d)\n", -- db_strerror(rc), rc, 0 ); -- rc = LDAP_OTHER; -- } -- --done:; -- if ( release && e != NULL ) be_entry_release_r( op, e ); -- return rc; --} -- --/* -- * sets the supported operational attributes (if required) -- */ --int --bdb_operational( -- Operation *op, -- SlapReply *rs ) --{ -- Attribute **ap; -- -- assert( rs->sr_entry != NULL ); -- -- for ( ap = &rs->sr_operational_attrs; *ap; ap = &(*ap)->a_next ) { -- if ( (*ap)->a_desc == slap_schema.si_ad_hasSubordinates ) { -- break; -- } -- } -- -- if ( *ap == NULL && -- attr_find( rs->sr_entry->e_attrs, slap_schema.si_ad_hasSubordinates ) == NULL && -- ( SLAP_OPATTRS( rs->sr_attr_flags ) || -- ad_inlist( slap_schema.si_ad_hasSubordinates, rs->sr_attrs ) ) ) -- { -- int hasSubordinates, rc; -- -- rc = bdb_hasSubordinates( op, rs->sr_entry, &hasSubordinates ); -- if ( rc == LDAP_SUCCESS ) { -- *ap = slap_operational_hasSubordinate( hasSubordinates == LDAP_COMPARE_TRUE ); -- assert( *ap != NULL ); -- -- ap = &(*ap)->a_next; -- } -- } -- -- return LDAP_SUCCESS; --} -- -diff --git a/servers/slapd/back-bdb/proto-bdb.h b/servers/slapd/back-bdb/proto-bdb.h -deleted file mode 100644 -index 34b8ce0..0000000 ---- a/servers/slapd/back-bdb/proto-bdb.h -+++ /dev/null -@@ -1,678 +0,0 @@ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#ifndef _PROTO_BDB_H --#define _PROTO_BDB_H -- --LDAP_BEGIN_DECL -- --#ifdef BDB_HIER --#define BDB_SYMBOL(x) LDAP_CONCAT(hdb_,x) --#define BDB_UCTYPE "HDB" --#else --#define BDB_SYMBOL(x) LDAP_CONCAT(bdb_,x) --#define BDB_UCTYPE "BDB" --#endif -- --/* -- * attr.c -- */ -- --#define bdb_attr_mask BDB_SYMBOL(attr_mask) --#define bdb_attr_flush BDB_SYMBOL(attr_flush) --#define bdb_attr_slot BDB_SYMBOL(attr_slot) --#define bdb_attr_index_config BDB_SYMBOL(attr_index_config) --#define bdb_attr_index_destroy BDB_SYMBOL(attr_index_destroy) --#define bdb_attr_index_free BDB_SYMBOL(attr_index_free) --#define bdb_attr_index_unparse BDB_SYMBOL(attr_index_unparse) --#define bdb_attr_info_free BDB_SYMBOL(attr_info_free) -- --AttrInfo *bdb_attr_mask( struct bdb_info *bdb, -- AttributeDescription *desc ); -- --void bdb_attr_flush( struct bdb_info *bdb ); -- --int bdb_attr_slot( struct bdb_info *bdb, -- AttributeDescription *desc, int *insert ); -- --int bdb_attr_index_config LDAP_P(( struct bdb_info *bdb, -- const char *fname, int lineno, -- int argc, char **argv, struct config_reply_s *cr )); -- --void bdb_attr_index_unparse LDAP_P(( struct bdb_info *bdb, BerVarray *bva )); --void bdb_attr_index_destroy LDAP_P(( struct bdb_info *bdb )); --void bdb_attr_index_free LDAP_P(( struct bdb_info *bdb, -- AttributeDescription *ad )); -- --void bdb_attr_info_free( AttrInfo *ai ); -- --/* -- * config.c -- */ -- --#define bdb_back_init_cf BDB_SYMBOL(back_init_cf) -- --int bdb_back_init_cf( BackendInfo *bi ); -- --/* -- * dbcache.c -- */ --#define bdb_db_cache BDB_SYMBOL(db_cache) --#define bdb_db_findsize BDB_SYMBOL(db_findsize) -- --int --bdb_db_cache( -- Backend *be, -- struct berval *name, -- DB **db ); -- --int --bdb_db_findsize( -- struct bdb_info *bdb, -- struct berval *name ); -- --/* -- * dn2entry.c -- */ --#define bdb_dn2entry BDB_SYMBOL(dn2entry) -- --int bdb_dn2entry LDAP_P(( Operation *op, DB_TXN *tid, -- struct berval *dn, EntryInfo **e, int matched, -- DB_LOCK *lock )); -- --/* -- * dn2id.c -- */ --#define bdb_dn2id BDB_SYMBOL(dn2id) --#define bdb_dn2id_add BDB_SYMBOL(dn2id_add) --#define bdb_dn2id_delete BDB_SYMBOL(dn2id_delete) --#define bdb_dn2id_children BDB_SYMBOL(dn2id_children) --#define bdb_dn2idl BDB_SYMBOL(dn2idl) -- --int bdb_dn2id( -- Operation *op, -- struct berval *dn, -- EntryInfo *ei, -- DB_TXN *txn, -- DBC **cursor ); -- --int bdb_dn2id_add( -- Operation *op, -- DB_TXN *tid, -- EntryInfo *eip, -- Entry *e ); -- --int bdb_dn2id_delete( -- Operation *op, -- DB_TXN *tid, -- EntryInfo *eip, -- Entry *e ); -- --int bdb_dn2id_children( -- Operation *op, -- DB_TXN *tid, -- Entry *e ); -- --int bdb_dn2idl( -- Operation *op, -- DB_TXN *txn, -- struct berval *ndn, -- EntryInfo *ei, -- ID *ids, -- ID *stack ); -- --#ifdef BDB_HIER --#define bdb_dn2id_parent BDB_SYMBOL(dn2id_parent) --#define bdb_dup_compare BDB_SYMBOL(dup_compare) --#define bdb_fix_dn BDB_SYMBOL(fix_dn) -- --int bdb_dn2id_parent( -- Operation *op, -- DB_TXN *txn, -- EntryInfo *ei, -- ID *idp ); -- --int bdb_dup_compare( -- DB *db, -- const DBT *usrkey, -- const DBT *curkey ); -- --int bdb_fix_dn( Entry *e, int checkit ); --#endif -- -- --/* -- * error.c -- */ --#define bdb_errcall BDB_SYMBOL(errcall) -- --#if DB_VERSION_FULL < 0x04030000 --void bdb_errcall( const char *pfx, char * msg ); --#else --#define bdb_msgcall BDB_SYMBOL(msgcall) --void bdb_errcall( const DB_ENV *env, const char *pfx, const char * msg ); --void bdb_msgcall( const DB_ENV *env, const char * msg ); --#endif -- --#ifdef HAVE_EBCDIC --#define ebcdic_dberror BDB_SYMBOL(ebcdic_dberror) -- --char *ebcdic_dberror( int rc ); --#define db_strerror(x) ebcdic_dberror(x) --#endif -- --/* -- * filterentry.c -- */ --#define bdb_filter_candidates BDB_SYMBOL(filter_candidates) -- --int bdb_filter_candidates( -- Operation *op, -- DB_TXN *txn, -- Filter *f, -- ID *ids, -- ID *tmp, -- ID *stack ); -- --/* -- * id2entry.c -- */ --#define bdb_id2entry BDB_SYMBOL(id2entry) --#define bdb_id2entry_add BDB_SYMBOL(id2entry_add) --#define bdb_id2entry_update BDB_SYMBOL(id2entry_update) --#define bdb_id2entry_delete BDB_SYMBOL(id2entry_delete) -- --int bdb_id2entry_add( -- BackendDB *be, -- DB_TXN *tid, -- Entry *e ); -- --int bdb_id2entry_update( -- BackendDB *be, -- DB_TXN *tid, -- Entry *e ); -- --int bdb_id2entry_delete( -- BackendDB *be, -- DB_TXN *tid, -- Entry *e); -- --#ifdef SLAP_ZONE_ALLOC --#else --int bdb_id2entry( -- BackendDB *be, -- DB_TXN *tid, -- ID id, -- Entry **e); --#endif -- --#define bdb_entry_free BDB_SYMBOL(entry_free) --#define bdb_entry_return BDB_SYMBOL(entry_return) --#define bdb_entry_release BDB_SYMBOL(entry_release) --#define bdb_entry_get BDB_SYMBOL(entry_get) -- --void bdb_entry_free ( Entry *e ); --#ifdef SLAP_ZONE_ALLOC --int bdb_entry_return( struct bdb_info *bdb, Entry *e, int seqno ); --#else --int bdb_entry_return( Entry *e ); --#endif --BI_entry_release_rw bdb_entry_release; --BI_entry_get_rw bdb_entry_get; -- -- --/* -- * idl.c -- */ -- --#define bdb_idl_cache_get BDB_SYMBOL(idl_cache_get) --#define bdb_idl_cache_put BDB_SYMBOL(idl_cache_put) --#define bdb_idl_cache_del BDB_SYMBOL(idl_cache_del) --#define bdb_idl_cache_add_id BDB_SYMBOL(idl_cache_add_id) --#define bdb_idl_cache_del_id BDB_SYMBOL(idl_cache_del_id) -- --int bdb_idl_cache_get( -- struct bdb_info *bdb, -- DB *db, -- DBT *key, -- ID *ids ); -- --void --bdb_idl_cache_put( -- struct bdb_info *bdb, -- DB *db, -- DBT *key, -- ID *ids, -- int rc ); -- --void --bdb_idl_cache_del( -- struct bdb_info *bdb, -- DB *db, -- DBT *key ); -- --void --bdb_idl_cache_add_id( -- struct bdb_info *bdb, -- DB *db, -- DBT *key, -- ID id ); -- --void --bdb_idl_cache_del_id( -- struct bdb_info *bdb, -- DB *db, -- DBT *key, -- ID id ); -- --#define bdb_idl_first BDB_SYMBOL(idl_first) --#define bdb_idl_next BDB_SYMBOL(idl_next) --#define bdb_idl_search BDB_SYMBOL(idl_search) --#define bdb_idl_insert BDB_SYMBOL(idl_insert) --#define bdb_idl_delete BDB_SYMBOL(idl_delete) --#define bdb_idl_intersection BDB_SYMBOL(idl_intersection) --#define bdb_idl_union BDB_SYMBOL(idl_union) --#define bdb_idl_sort BDB_SYMBOL(idl_sort) --#define bdb_idl_append BDB_SYMBOL(idl_append) --#define bdb_idl_append_one BDB_SYMBOL(idl_append_one) -- --#define bdb_idl_fetch_key BDB_SYMBOL(idl_fetch_key) --#define bdb_idl_insert_key BDB_SYMBOL(idl_insert_key) --#define bdb_idl_delete_key BDB_SYMBOL(idl_delete_key) -- --unsigned bdb_idl_search( ID *ids, ID id ); -- --int bdb_idl_fetch_key( -- BackendDB *be, -- DB *db, -- DB_TXN *txn, -- DBT *key, -- ID *ids, -- DBC **saved_cursor, -- int get_flag ); -- --int bdb_idl_insert( ID *ids, ID id ); --int bdb_idl_delete( ID *ids, ID id ); -- --int bdb_idl_insert_key( -- BackendDB *be, -- DB *db, -- DB_TXN *txn, -- DBT *key, -- ID id ); -- --int bdb_idl_delete_key( -- BackendDB *be, -- DB *db, -- DB_TXN *txn, -- DBT *key, -- ID id ); -- --int --bdb_idl_intersection( -- ID *a, -- ID *b ); -- --int --bdb_idl_union( -- ID *a, -- ID *b ); -- --ID bdb_idl_first( ID *ids, ID *cursor ); --ID bdb_idl_next( ID *ids, ID *cursor ); -- --void bdb_idl_sort( ID *ids, ID *tmp ); --int bdb_idl_append( ID *a, ID *b ); --int bdb_idl_append_one( ID *ids, ID id ); -- -- --/* -- * index.c -- */ --#define bdb_index_mask BDB_SYMBOL(index_mask) --#define bdb_index_param BDB_SYMBOL(index_param) --#define bdb_index_values BDB_SYMBOL(index_values) --#define bdb_index_entry BDB_SYMBOL(index_entry) --#define bdb_index_recset BDB_SYMBOL(index_recset) --#define bdb_index_recrun BDB_SYMBOL(index_recrun) -- --extern AttrInfo * --bdb_index_mask LDAP_P(( -- Backend *be, -- AttributeDescription *desc, -- struct berval *name )); -- --extern int --bdb_index_param LDAP_P(( -- Backend *be, -- AttributeDescription *desc, -- int ftype, -- DB **db, -- slap_mask_t *mask, -- struct berval *prefix )); -- --extern int --bdb_index_values LDAP_P(( -- Operation *op, -- DB_TXN *txn, -- AttributeDescription *desc, -- BerVarray vals, -- ID id, -- int opid )); -- --extern int --bdb_index_recset LDAP_P(( -- struct bdb_info *bdb, -- Attribute *a, -- AttributeType *type, -- struct berval *tags, -- IndexRec *ir )); -- --extern int --bdb_index_recrun LDAP_P(( -- Operation *op, -- struct bdb_info *bdb, -- IndexRec *ir, -- ID id, -- int base )); -- --int bdb_index_entry LDAP_P(( Operation *op, DB_TXN *t, int r, Entry *e )); -- --#define bdb_index_entry_add(op,t,e) \ -- bdb_index_entry((op),(t),SLAP_INDEX_ADD_OP,(e)) --#define bdb_index_entry_del(op,t,e) \ -- bdb_index_entry((op),(t),SLAP_INDEX_DELETE_OP,(e)) -- --/* -- * key.c -- */ --#define bdb_key_read BDB_SYMBOL(key_read) --#define bdb_key_change BDB_SYMBOL(key_change) -- --extern int --bdb_key_read( -- Backend *be, -- DB *db, -- DB_TXN *txn, -- struct berval *k, -- ID *ids, -- DBC **saved_cursor, -- int get_flags ); -- --extern int --bdb_key_change( -- Backend *be, -- DB *db, -- DB_TXN *txn, -- struct berval *k, -- ID id, -- int op ); -- --/* -- * nextid.c -- */ --#define bdb_next_id BDB_SYMBOL(next_id) --#define bdb_last_id BDB_SYMBOL(last_id) -- --int bdb_next_id( BackendDB *be, ID *id ); --int bdb_last_id( BackendDB *be, DB_TXN *tid ); -- --/* -- * modify.c -- */ --#define bdb_modify_internal BDB_SYMBOL(modify_internal) -- --int bdb_modify_internal( -- Operation *op, -- DB_TXN *tid, -- Modifications *modlist, -- Entry *e, -- const char **text, -- char *textbuf, -- size_t textlen ); -- --/* -- * monitor.c -- */ -- --#define bdb_monitor_db_init BDB_SYMBOL(monitor_db_init) --#define bdb_monitor_db_open BDB_SYMBOL(monitor_db_open) --#define bdb_monitor_db_close BDB_SYMBOL(monitor_db_close) --#define bdb_monitor_db_destroy BDB_SYMBOL(monitor_db_destroy) -- --int bdb_monitor_db_init( BackendDB *be ); --int bdb_monitor_db_open( BackendDB *be ); --int bdb_monitor_db_close( BackendDB *be ); --int bdb_monitor_db_destroy( BackendDB *be ); -- --#ifdef BDB_MONITOR_IDX --#define bdb_monitor_idx_add BDB_SYMBOL(monitor_idx_add) --int --bdb_monitor_idx_add( -- struct bdb_info *bdb, -- AttributeDescription *desc, -- slap_mask_t type ); --#endif /* BDB_MONITOR_IDX */ -- --/* -- * cache.c -- */ --#define bdb_cache_entry_db_unlock BDB_SYMBOL(cache_entry_db_unlock) --#define bdb_cache_return_entry_rw BDB_SYMBOL(cache_return_entry_rw) -- --#define bdb_cache_entryinfo_lock(e) \ -- ldap_pvt_thread_mutex_lock( &(e)->bei_kids_mutex ) --#define bdb_cache_entryinfo_unlock(e) \ -- ldap_pvt_thread_mutex_unlock( &(e)->bei_kids_mutex ) --#define bdb_cache_entryinfo_trylock(e) \ -- ldap_pvt_thread_mutex_trylock( &(e)->bei_kids_mutex ) -- --/* What a mess. Hopefully the current cache scheme will stabilize -- * and we can trim out all of this stuff. -- */ --void bdb_cache_return_entry_rw( struct bdb_info *bdb, Entry *e, -- int rw, DB_LOCK *lock ); --#define bdb_cache_return_entry_r(bdb, e, l) \ -- bdb_cache_return_entry_rw((bdb), (e), 0, (l)) --#define bdb_cache_return_entry_w(bdb, e, l) \ -- bdb_cache_return_entry_rw((bdb), (e), 1, (l)) --#if 0 --void bdb_unlocked_cache_return_entry_rw( struct bdb_info *bdb, Entry *e, int rw ); --#else --#define bdb_unlocked_cache_return_entry_rw( a, b, c ) ((void)0) --#endif --#define bdb_unlocked_cache_return_entry_r( c, e ) \ -- bdb_unlocked_cache_return_entry_rw((c), (e), 0) --#define bdb_unlocked_cache_return_entry_w( c, e ) \ -- bdb_unlocked_cache_return_entry_rw((c), (e), 1) -- --#define bdb_cache_add BDB_SYMBOL(cache_add) --#define bdb_cache_children BDB_SYMBOL(cache_children) --#define bdb_cache_delete BDB_SYMBOL(cache_delete) --#define bdb_cache_delete_cleanup BDB_SYMBOL(cache_delete_cleanup) --#define bdb_cache_find_id BDB_SYMBOL(cache_find_id) --#define bdb_cache_find_ndn BDB_SYMBOL(cache_find_ndn) --#define bdb_cache_find_parent BDB_SYMBOL(cache_find_parent) --#define bdb_cache_modify BDB_SYMBOL(cache_modify) --#define bdb_cache_modrdn BDB_SYMBOL(cache_modrdn) --#define bdb_cache_release_all BDB_SYMBOL(cache_release_all) --#define bdb_cache_delete_entry BDB_SYMBOL(cache_delete_entry) --#define bdb_cache_deref BDB_SYMBOL(cache_deref) -- --int bdb_cache_children( -- Operation *op, -- DB_TXN *txn, -- Entry *e --); --int bdb_cache_add( -- struct bdb_info *bdb, -- EntryInfo *pei, -- Entry *e, -- struct berval *nrdn, -- DB_TXN *txn, -- DB_LOCK *lock --); --int bdb_cache_modrdn( -- struct bdb_info *bdb, -- Entry *e, -- struct berval *nrdn, -- Entry *new, -- EntryInfo *ein, -- DB_TXN *txn, -- DB_LOCK *lock --); --int bdb_cache_modify( -- struct bdb_info *bdb, -- Entry *e, -- Attribute *newAttrs, -- DB_TXN *txn, -- DB_LOCK *lock --); --int bdb_cache_find_ndn( -- Operation *op, -- DB_TXN *txn, -- struct berval *ndn, -- EntryInfo **res --); -- --#define ID_LOCKED 1 --#define ID_NOCACHE 2 --#define ID_NOENTRY 4 --#define ID_CHKPURGE 8 --int bdb_cache_find_id( -- Operation *op, -- DB_TXN *tid, -- ID id, -- EntryInfo **eip, -- int flag, -- DB_LOCK *lock --); --int --bdb_cache_find_parent( -- Operation *op, -- DB_TXN *txn, -- ID id, -- EntryInfo **res --); --int bdb_cache_delete( -- struct bdb_info *bdb, -- Entry *e, -- DB_TXN *txn, -- DB_LOCK *lock --); --void bdb_cache_delete_cleanup( -- Cache *cache, -- EntryInfo *ei --); --void bdb_cache_release_all( Cache *cache ); --void bdb_cache_deref( EntryInfo *ei ); -- --#ifdef BDB_HIER --int hdb_cache_load( -- struct bdb_info *bdb, -- EntryInfo *ei, -- EntryInfo **res --); --#endif -- --#define bdb_cache_entry_db_relock BDB_SYMBOL(cache_entry_db_relock) --int bdb_cache_entry_db_relock( -- struct bdb_info *bdb, -- DB_TXN *txn, -- EntryInfo *ei, -- int rw, -- int tryOnly, -- DB_LOCK *lock ); -- --int bdb_cache_entry_db_unlock( -- struct bdb_info *bdb, -- DB_LOCK *lock ); -- --#define bdb_reader_get BDB_SYMBOL(reader_get) --#define bdb_reader_flush BDB_SYMBOL(reader_flush) --int bdb_reader_get( Operation *op, DB_ENV *env, DB_TXN **txn ); --void bdb_reader_flush( DB_ENV *env ); -- --/* -- * trans.c -- */ --#define bdb_trans_backoff BDB_SYMBOL(trans_backoff) -- --void --bdb_trans_backoff( int num_retries ); -- --/* -- * former external.h -- */ -- --#define bdb_back_initialize BDB_SYMBOL(back_initialize) --#define bdb_db_config BDB_SYMBOL(db_config) --#define bdb_add BDB_SYMBOL(add) --#define bdb_bind BDB_SYMBOL(bind) --#define bdb_compare BDB_SYMBOL(compare) --#define bdb_delete BDB_SYMBOL(delete) --#define bdb_modify BDB_SYMBOL(modify) --#define bdb_modrdn BDB_SYMBOL(modrdn) --#define bdb_search BDB_SYMBOL(search) --#define bdb_extended BDB_SYMBOL(extended) --#define bdb_referrals BDB_SYMBOL(referrals) --#define bdb_operational BDB_SYMBOL(operational) --#define bdb_hasSubordinates BDB_SYMBOL(hasSubordinates) --#define bdb_tool_entry_open BDB_SYMBOL(tool_entry_open) --#define bdb_tool_entry_close BDB_SYMBOL(tool_entry_close) --#define bdb_tool_entry_first_x BDB_SYMBOL(tool_entry_first_x) --#define bdb_tool_entry_next BDB_SYMBOL(tool_entry_next) --#define bdb_tool_entry_get BDB_SYMBOL(tool_entry_get) --#define bdb_tool_entry_put BDB_SYMBOL(tool_entry_put) --#define bdb_tool_entry_reindex BDB_SYMBOL(tool_entry_reindex) --#define bdb_tool_dn2id_get BDB_SYMBOL(tool_dn2id_get) --#define bdb_tool_entry_modify BDB_SYMBOL(tool_entry_modify) --#define bdb_tool_idl_add BDB_SYMBOL(tool_idl_add) -- --extern BI_init bdb_back_initialize; -- --extern BI_db_config bdb_db_config; -- --extern BI_op_add bdb_add; --extern BI_op_bind bdb_bind; --extern BI_op_compare bdb_compare; --extern BI_op_delete bdb_delete; --extern BI_op_modify bdb_modify; --extern BI_op_modrdn bdb_modrdn; --extern BI_op_search bdb_search; --extern BI_op_extended bdb_extended; -- --extern BI_chk_referrals bdb_referrals; -- --extern BI_operational bdb_operational; -- --extern BI_has_subordinates bdb_hasSubordinates; -- --/* tools.c */ --extern BI_tool_entry_open bdb_tool_entry_open; --extern BI_tool_entry_close bdb_tool_entry_close; --extern BI_tool_entry_first_x bdb_tool_entry_first_x; --extern BI_tool_entry_next bdb_tool_entry_next; --extern BI_tool_entry_get bdb_tool_entry_get; --extern BI_tool_entry_put bdb_tool_entry_put; --extern BI_tool_entry_reindex bdb_tool_entry_reindex; --extern BI_tool_dn2id_get bdb_tool_dn2id_get; --extern BI_tool_entry_modify bdb_tool_entry_modify; -- --int bdb_tool_idl_add( BackendDB *be, DB *db, DB_TXN *txn, DBT *key, ID id ); -- --LDAP_END_DECL -- --#endif /* _PROTO_BDB_H */ -diff --git a/servers/slapd/back-bdb/referral.c b/servers/slapd/back-bdb/referral.c -deleted file mode 100644 -index d92ff5a..0000000 ---- a/servers/slapd/back-bdb/referral.c -+++ /dev/null -@@ -1,152 +0,0 @@ --/* referral.c - BDB backend referral handler */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" --#include --#include -- --#include "back-bdb.h" -- --int --bdb_referrals( Operation *op, SlapReply *rs ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- Entry *e = NULL; -- EntryInfo *ei; -- int rc = LDAP_SUCCESS; -- -- DB_TXN *rtxn; -- DB_LOCK lock; -- -- if( op->o_tag == LDAP_REQ_SEARCH ) { -- /* let search take care of itself */ -- return rc; -- } -- -- if( get_manageDSAit( op ) ) { -- /* let op take care of DSA management */ -- return rc; -- } -- -- rc = bdb_reader_get(op, bdb->bi_dbenv, &rtxn); -- switch(rc) { -- case 0: -- break; -- default: -- return LDAP_OTHER; -- } -- --dn2entry_retry: -- /* get entry */ -- rc = bdb_dn2entry( op, rtxn, &op->o_req_ndn, &ei, 1, &lock ); -- -- /* bdb_dn2entry() may legally leave ei == NULL -- * if rc != 0 and rc != DB_NOTFOUND -- */ -- if ( ei ) { -- e = ei->bei_e; -- } -- -- switch(rc) { -- case DB_NOTFOUND: -- case 0: -- break; -- case LDAP_BUSY: -- rs->sr_text = "ldap server busy"; -- return LDAP_BUSY; -- case DB_LOCK_DEADLOCK: -- case DB_LOCK_NOTGRANTED: -- goto dn2entry_retry; -- default: -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_referrals) -- ": dn2entry failed: %s (%d)\n", -- db_strerror(rc), rc, 0 ); -- rs->sr_text = "internal error"; -- return LDAP_OTHER; -- } -- -- if ( rc == DB_NOTFOUND ) { -- rc = LDAP_SUCCESS; -- rs->sr_matched = NULL; -- if ( e != NULL ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_referrals) -- ": tag=%lu target=\"%s\" matched=\"%s\"\n", -- (unsigned long)op->o_tag, op->o_req_dn.bv_val, e->e_name.bv_val ); -- -- if( is_entry_referral( e ) ) { -- BerVarray ref = get_entry_referrals( op, e ); -- rc = LDAP_OTHER; -- rs->sr_ref = referral_rewrite( ref, &e->e_name, -- &op->o_req_dn, LDAP_SCOPE_DEFAULT ); -- ber_bvarray_free( ref ); -- if ( rs->sr_ref ) { -- rs->sr_matched = ber_strdup_x( -- e->e_name.bv_val, op->o_tmpmemctx ); -- } -- } -- -- bdb_cache_return_entry_r (bdb, e, &lock); -- e = NULL; -- } -- -- if( rs->sr_ref != NULL ) { -- /* send referrals */ -- rc = rs->sr_err = LDAP_REFERRAL; -- send_ldap_result( op, rs ); -- ber_bvarray_free( rs->sr_ref ); -- rs->sr_ref = NULL; -- } else if ( rc != LDAP_SUCCESS ) { -- rs->sr_text = rs->sr_matched ? "bad referral object" : NULL; -- } -- -- if (rs->sr_matched) { -- op->o_tmpfree( (char *)rs->sr_matched, op->o_tmpmemctx ); -- rs->sr_matched = NULL; -- } -- return rc; -- } -- -- if ( is_entry_referral( e ) ) { -- /* entry is a referral */ -- BerVarray refs = get_entry_referrals( op, e ); -- rs->sr_ref = referral_rewrite( -- refs, &e->e_name, &op->o_req_dn, LDAP_SCOPE_DEFAULT ); -- -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_referrals) -- ": tag=%lu target=\"%s\" matched=\"%s\"\n", -- (unsigned long)op->o_tag, op->o_req_dn.bv_val, e->e_name.bv_val ); -- -- rs->sr_matched = e->e_name.bv_val; -- if( rs->sr_ref != NULL ) { -- rc = rs->sr_err = LDAP_REFERRAL; -- send_ldap_result( op, rs ); -- ber_bvarray_free( rs->sr_ref ); -- rs->sr_ref = NULL; -- } else { -- rc = LDAP_OTHER; -- rs->sr_text = "bad referral object"; -- } -- -- rs->sr_matched = NULL; -- ber_bvarray_free( refs ); -- } -- -- bdb_cache_return_entry_r(bdb, e, &lock); -- return rc; --} -diff --git a/servers/slapd/back-bdb/search.c b/servers/slapd/back-bdb/search.c -deleted file mode 100644 -index dd67f21..0000000 ---- a/servers/slapd/back-bdb/search.c -+++ /dev/null -@@ -1,1388 +0,0 @@ --/* search.c - search operation */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include --#include -- --#include "back-bdb.h" --#include "idl.h" -- --static int base_candidate( -- BackendDB *be, -- Entry *e, -- ID *ids ); -- --static int search_candidates( -- Operation *op, -- SlapReply *rs, -- Entry *e, -- DB_TXN *txn, -- ID *ids, -- ID *scopes ); -- --static int parse_paged_cookie( Operation *op, SlapReply *rs ); -- --static void send_paged_response( -- Operation *op, -- SlapReply *rs, -- ID *lastid, -- int tentries ); -- --/* Dereference aliases for a single alias entry. Return the final -- * dereferenced entry on success, NULL on any failure. -- */ --static Entry * deref_base ( -- Operation *op, -- SlapReply *rs, -- Entry *e, -- Entry **matched, -- DB_TXN *txn, -- DB_LOCK *lock, -- ID *tmp, -- ID *visited ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- struct berval ndn; -- EntryInfo *ei; -- DB_LOCK lockr; -- -- rs->sr_err = LDAP_ALIAS_DEREF_PROBLEM; -- rs->sr_text = "maximum deref depth exceeded"; -- -- for (;;) { -- /* Remember the last entry we looked at, so we can -- * report broken links -- */ -- *matched = e; -- -- if (BDB_IDL_N(tmp) >= op->o_bd->be_max_deref_depth) { -- e = NULL; -- break; -- } -- -- /* If this is part of a subtree or onelevel search, -- * have we seen this ID before? If so, quit. -- */ -- if ( visited && bdb_idl_insert( visited, e->e_id ) ) { -- e = NULL; -- break; -- } -- -- /* If we've seen this ID during this deref iteration, -- * we've hit a loop. -- */ -- if ( bdb_idl_insert( tmp, e->e_id ) ) { -- rs->sr_err = LDAP_ALIAS_PROBLEM; -- rs->sr_text = "circular alias"; -- e = NULL; -- break; -- } -- -- /* If there was a problem getting the aliasedObjectName, -- * get_alias_dn will have set the error status. -- */ -- if ( get_alias_dn(e, &ndn, &rs->sr_err, &rs->sr_text) ) { -- e = NULL; -- break; -- } -- -- rs->sr_err = bdb_dn2entry( op, txn, &ndn, &ei, -- 0, &lockr ); -- if ( rs->sr_err == DB_LOCK_DEADLOCK ) -- return NULL; -- -- if ( ei ) { -- e = ei->bei_e; -- } else { -- e = NULL; -- } -- -- if (!e) { -- rs->sr_err = LDAP_ALIAS_PROBLEM; -- rs->sr_text = "aliasedObject not found"; -- break; -- } -- -- /* Free the previous entry, continue to work with the -- * one we just retrieved. -- */ -- bdb_cache_return_entry_r( bdb, *matched, lock); -- *lock = lockr; -- -- /* We found a regular entry. Return this to the caller. The -- * entry is still locked for Read. -- */ -- if (!is_entry_alias(e)) { -- rs->sr_err = LDAP_SUCCESS; -- rs->sr_text = NULL; -- break; -- } -- } -- return e; --} -- --/* Look for and dereference all aliases within the search scope. Adds -- * the dereferenced entries to the "ids" list. Requires "stack" to be -- * able to hold 8 levels of DB_SIZE IDLs. Of course we're hardcoded to -- * require a minimum of 8 UM_SIZE IDLs so this is never a problem. -- */ --static int search_aliases( -- Operation *op, -- SlapReply *rs, -- Entry *e, -- DB_TXN *txn, -- ID *ids, -- ID *scopes, -- ID *stack ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- ID *aliases, *curscop, *subscop, *visited, *newsubs, *oldsubs, *tmp; -- ID cursora, ida, cursoro, ido, *subscop2; -- Entry *matched, *a; -- EntryInfo *ei; -- struct berval bv_alias = BER_BVC( "alias" ); -- AttributeAssertion aa_alias = ATTRIBUTEASSERTION_INIT; -- Filter af; -- DB_LOCK locka, lockr; -- int first = 1; -- -- aliases = stack; /* IDL of all aliases in the database */ -- curscop = aliases + BDB_IDL_DB_SIZE; /* Aliases in the current scope */ -- subscop = curscop + BDB_IDL_DB_SIZE; /* The current scope */ -- visited = subscop + BDB_IDL_DB_SIZE; /* IDs we've seen in this search */ -- newsubs = visited + BDB_IDL_DB_SIZE; /* New subtrees we've added */ -- oldsubs = newsubs + BDB_IDL_DB_SIZE; /* Subtrees added previously */ -- tmp = oldsubs + BDB_IDL_DB_SIZE; /* Scratch space for deref_base() */ -- -- /* A copy of subscop, because subscop gets clobbered by -- * the bdb_idl_union/intersection routines -- */ -- subscop2 = tmp + BDB_IDL_DB_SIZE; -- -- af.f_choice = LDAP_FILTER_EQUALITY; -- af.f_ava = &aa_alias; -- af.f_av_desc = slap_schema.si_ad_objectClass; -- af.f_av_value = bv_alias; -- af.f_next = NULL; -- -- /* Find all aliases in database */ -- BDB_IDL_ZERO( aliases ); -- rs->sr_err = bdb_filter_candidates( op, txn, &af, aliases, -- curscop, visited ); -- if (rs->sr_err != LDAP_SUCCESS || BDB_IDL_IS_ZERO( aliases )) { -- return rs->sr_err; -- } -- oldsubs[0] = 1; -- oldsubs[1] = e->e_id; -- -- BDB_IDL_ZERO( ids ); -- BDB_IDL_ZERO( visited ); -- BDB_IDL_ZERO( newsubs ); -- -- cursoro = 0; -- ido = bdb_idl_first( oldsubs, &cursoro ); -- -- for (;;) { -- /* Set curscop to only the aliases in the current scope. Start with -- * all the aliases, obtain the IDL for the current scope, and then -- * get the intersection of these two IDLs. Add the current scope -- * to the cumulative list of candidates. -- */ -- BDB_IDL_CPY( curscop, aliases ); -- rs->sr_err = bdb_dn2idl( op, txn, &e->e_nname, BEI(e), subscop, -- subscop2+BDB_IDL_DB_SIZE ); -- -- if (first) { -- first = 0; -- } else { -- bdb_cache_return_entry_r (bdb, e, &locka); -- } -- if ( rs->sr_err == DB_LOCK_DEADLOCK ) -- return rs->sr_err; -- -- BDB_IDL_CPY(subscop2, subscop); -- rs->sr_err = bdb_idl_intersection(curscop, subscop); -- bdb_idl_union( ids, subscop2 ); -- -- /* Dereference all of the aliases in the current scope. */ -- cursora = 0; -- for (ida = bdb_idl_first(curscop, &cursora); ida != NOID; -- ida = bdb_idl_next(curscop, &cursora)) -- { -- ei = NULL; --retry1: -- rs->sr_err = bdb_cache_find_id(op, txn, -- ida, &ei, 0, &lockr ); -- if (rs->sr_err != LDAP_SUCCESS) { -- if ( rs->sr_err == DB_LOCK_DEADLOCK ) -- return rs->sr_err; -- if ( rs->sr_err == DB_LOCK_NOTGRANTED ) -- goto retry1; -- continue; -- } -- a = ei->bei_e; -- -- /* This should only happen if the curscop IDL has maxed out and -- * turned into a range that spans IDs indiscriminately -- */ -- if (!is_entry_alias(a)) { -- bdb_cache_return_entry_r (bdb, a, &lockr); -- continue; -- } -- -- /* Actually dereference the alias */ -- BDB_IDL_ZERO(tmp); -- a = deref_base( op, rs, a, &matched, txn, &lockr, -- tmp, visited ); -- if (a) { -- /* If the target was not already in our current candidates, -- * make note of it in the newsubs list. Also -- * set it in the scopes list so that bdb_search -- * can check it. -- */ -- if (bdb_idl_insert(ids, a->e_id) == 0) { -- bdb_idl_insert(newsubs, a->e_id); -- bdb_idl_insert(scopes, a->e_id); -- } -- bdb_cache_return_entry_r( bdb, a, &lockr); -- -- } else if ( rs->sr_err == DB_LOCK_DEADLOCK ) { -- return rs->sr_err; -- } else if (matched) { -- /* Alias could not be dereferenced, or it deref'd to -- * an ID we've already seen. Ignore it. -- */ -- bdb_cache_return_entry_r( bdb, matched, &lockr ); -- rs->sr_text = NULL; -- } -- } -- /* If this is a OneLevel search, we're done; oldsubs only had one -- * ID in it. For a Subtree search, oldsubs may be a list of scope IDs. -- */ -- if ( op->ors_scope == LDAP_SCOPE_ONELEVEL ) break; --nextido: -- ido = bdb_idl_next( oldsubs, &cursoro ); -- -- /* If we're done processing the old scopes, did we add any new -- * scopes in this iteration? If so, go back and do those now. -- */ -- if (ido == NOID) { -- if (BDB_IDL_IS_ZERO(newsubs)) break; -- BDB_IDL_CPY(oldsubs, newsubs); -- BDB_IDL_ZERO(newsubs); -- cursoro = 0; -- ido = bdb_idl_first( oldsubs, &cursoro ); -- } -- -- /* Find the entry corresponding to the next scope. If it can't -- * be found, ignore it and move on. This should never happen; -- * we should never see the ID of an entry that doesn't exist. -- * Set the name so that the scope's IDL can be retrieved. -- */ -- ei = NULL; --sameido: -- rs->sr_err = bdb_cache_find_id(op, txn, ido, &ei, -- 0, &locka ); -- if ( rs->sr_err != LDAP_SUCCESS ) { -- if ( rs->sr_err == DB_LOCK_DEADLOCK ) -- return rs->sr_err; -- if ( rs->sr_err == DB_LOCK_NOTGRANTED ) -- goto sameido; -- goto nextido; -- } -- e = ei->bei_e; -- } -- return rs->sr_err; --} -- --/* Get the next ID from the DB. Used if the candidate list is -- * a range and simple iteration hits missing entryIDs -- */ --static int --bdb_get_nextid(struct bdb_info *bdb, DB_TXN *ltid, ID *cursor) --{ -- DBC *curs; -- DBT key, data; -- ID id, nid; -- int rc; -- -- id = *cursor + 1; -- BDB_ID2DISK( id, &nid ); -- rc = bdb->bi_id2entry->bdi_db->cursor( -- bdb->bi_id2entry->bdi_db, ltid, &curs, bdb->bi_db_opflags ); -- if ( rc ) -- return rc; -- key.data = &nid; -- key.size = key.ulen = sizeof(ID); -- key.flags = DB_DBT_USERMEM; -- data.flags = DB_DBT_USERMEM | DB_DBT_PARTIAL; -- data.dlen = data.ulen = 0; -- rc = curs->c_get( curs, &key, &data, DB_SET_RANGE ); -- curs->c_close( curs ); -- if ( rc ) -- return rc; -- BDB_DISK2ID( &nid, cursor ); -- return 0; --} -- --int --bdb_search( Operation *op, SlapReply *rs ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- ID id, cursor; -- ID lastid = NOID; -- ID candidates[BDB_IDL_UM_SIZE]; -- ID scopes[BDB_IDL_DB_SIZE]; -- Entry *e = NULL, base, *e_root; -- Entry *matched = NULL; -- EntryInfo *ei; -- AttributeName *attrs; -- struct berval realbase = BER_BVNULL; -- slap_mask_t mask; -- time_t stoptime; -- int manageDSAit; -- int tentries = 0; -- unsigned nentries = 0; -- int idflag = 0; -- -- DB_LOCK lock; -- struct bdb_op_info *opinfo = NULL; -- DB_TXN *ltid = NULL; -- OpExtra *oex; -- -- Debug( LDAP_DEBUG_TRACE, "=> " LDAP_XSTRING(bdb_search) "\n", 0, 0, 0); -- attrs = op->oq_search.rs_attrs; -- -- LDAP_SLIST_FOREACH( oex, &op->o_extra, oe_next ) { -- if ( oex->oe_key == bdb ) -- break; -- } -- opinfo = (struct bdb_op_info *) oex; -- -- manageDSAit = get_manageDSAit( op ); -- -- if ( opinfo && opinfo->boi_txn ) { -- ltid = opinfo->boi_txn; -- } else { -- rs->sr_err = bdb_reader_get( op, bdb->bi_dbenv, <id ); -- -- switch(rs->sr_err) { -- case 0: -- break; -- default: -- send_ldap_error( op, rs, LDAP_OTHER, "internal error" ); -- return rs->sr_err; -- } -- } -- -- e_root = bdb->bi_cache.c_dntree.bei_e; -- if ( op->o_req_ndn.bv_len == 0 ) { -- /* DIT root special case */ -- ei = e_root->e_private; -- rs->sr_err = LDAP_SUCCESS; -- } else { -- if ( op->ors_deref & LDAP_DEREF_FINDING ) { -- BDB_IDL_ZERO(candidates); -- } --dn2entry_retry: -- /* get entry with reader lock */ -- rs->sr_err = bdb_dn2entry( op, ltid, &op->o_req_ndn, &ei, -- 1, &lock ); -- } -- -- switch(rs->sr_err) { -- case DB_NOTFOUND: -- matched = ei->bei_e; -- break; -- case 0: -- e = ei->bei_e; -- break; -- case DB_LOCK_DEADLOCK: -- if ( !opinfo ) { -- ltid->flags &= ~TXN_DEADLOCK; -- goto dn2entry_retry; -- } -- opinfo->boi_err = rs->sr_err; -- /* FALLTHRU */ -- case LDAP_BUSY: -- send_ldap_error( op, rs, LDAP_BUSY, "ldap server busy" ); -- return LDAP_BUSY; -- case DB_LOCK_NOTGRANTED: -- goto dn2entry_retry; -- default: -- send_ldap_error( op, rs, LDAP_OTHER, "internal error" ); -- return rs->sr_err; -- } -- -- if ( op->ors_deref & LDAP_DEREF_FINDING ) { -- if ( matched && is_entry_alias( matched )) { -- struct berval stub; -- -- stub.bv_val = op->o_req_ndn.bv_val; -- stub.bv_len = op->o_req_ndn.bv_len - matched->e_nname.bv_len - 1; -- e = deref_base( op, rs, matched, &matched, ltid, &lock, -- candidates, NULL ); -- if ( e ) { -- build_new_dn( &op->o_req_ndn, &e->e_nname, &stub, -- op->o_tmpmemctx ); -- bdb_cache_return_entry_r (bdb, e, &lock); -- matched = NULL; -- goto dn2entry_retry; -- } -- } else if ( e && is_entry_alias( e )) { -- e = deref_base( op, rs, e, &matched, ltid, &lock, -- candidates, NULL ); -- } -- } -- -- if ( e == NULL ) { -- struct berval matched_dn = BER_BVNULL; -- -- if ( matched != NULL ) { -- BerVarray erefs = NULL; -- -- /* return referral only if "disclose" -- * is granted on the object */ -- if ( ! access_allowed( op, matched, -- slap_schema.si_ad_entry, -- NULL, ACL_DISCLOSE, NULL ) ) -- { -- rs->sr_err = LDAP_NO_SUCH_OBJECT; -- -- } else { -- ber_dupbv( &matched_dn, &matched->e_name ); -- -- erefs = is_entry_referral( matched ) -- ? get_entry_referrals( op, matched ) -- : NULL; -- if ( rs->sr_err == DB_NOTFOUND ) -- rs->sr_err = LDAP_REFERRAL; -- rs->sr_matched = matched_dn.bv_val; -- } -- --#ifdef SLAP_ZONE_ALLOC -- slap_zn_runlock(bdb->bi_cache.c_zctx, matched); --#endif -- bdb_cache_return_entry_r (bdb, matched, &lock); -- matched = NULL; -- -- if ( erefs ) { -- rs->sr_ref = referral_rewrite( erefs, &matched_dn, -- &op->o_req_dn, op->oq_search.rs_scope ); -- ber_bvarray_free( erefs ); -- } -- -- } else { --#ifdef SLAP_ZONE_ALLOC -- slap_zn_runlock(bdb->bi_cache.c_zctx, matched); --#endif -- rs->sr_ref = referral_rewrite( default_referral, -- NULL, &op->o_req_dn, op->oq_search.rs_scope ); -- rs->sr_err = rs->sr_ref != NULL ? LDAP_REFERRAL : LDAP_NO_SUCH_OBJECT; -- } -- -- send_ldap_result( op, rs ); -- -- if ( rs->sr_ref ) { -- ber_bvarray_free( rs->sr_ref ); -- rs->sr_ref = NULL; -- } -- if ( !BER_BVISNULL( &matched_dn ) ) { -- ber_memfree( matched_dn.bv_val ); -- rs->sr_matched = NULL; -- } -- return rs->sr_err; -- } -- -- /* NOTE: __NEW__ "search" access is required -- * on searchBase object */ -- if ( ! access_allowed_mask( op, e, slap_schema.si_ad_entry, -- NULL, ACL_SEARCH, NULL, &mask ) ) -- { -- if ( !ACL_GRANT( mask, ACL_DISCLOSE ) ) { -- rs->sr_err = LDAP_NO_SUCH_OBJECT; -- } else { -- rs->sr_err = LDAP_INSUFFICIENT_ACCESS; -- } -- --#ifdef SLAP_ZONE_ALLOC -- slap_zn_runlock(bdb->bi_cache.c_zctx, e); --#endif -- if ( e != e_root ) { -- bdb_cache_return_entry_r(bdb, e, &lock); -- } -- send_ldap_result( op, rs ); -- return rs->sr_err; -- } -- -- if ( !manageDSAit && e != e_root && is_entry_referral( e ) ) { -- /* entry is a referral, don't allow add */ -- struct berval matched_dn = BER_BVNULL; -- BerVarray erefs = NULL; -- -- ber_dupbv( &matched_dn, &e->e_name ); -- erefs = get_entry_referrals( op, e ); -- -- rs->sr_err = LDAP_REFERRAL; -- --#ifdef SLAP_ZONE_ALLOC -- slap_zn_runlock(bdb->bi_cache.c_zctx, e); --#endif -- bdb_cache_return_entry_r( bdb, e, &lock ); -- e = NULL; -- -- if ( erefs ) { -- rs->sr_ref = referral_rewrite( erefs, &matched_dn, -- &op->o_req_dn, op->oq_search.rs_scope ); -- ber_bvarray_free( erefs ); -- -- if ( !rs->sr_ref ) { -- rs->sr_text = "bad_referral object"; -- } -- } -- -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_search) ": entry is referral\n", -- 0, 0, 0 ); -- -- rs->sr_matched = matched_dn.bv_val; -- send_ldap_result( op, rs ); -- -- ber_bvarray_free( rs->sr_ref ); -- rs->sr_ref = NULL; -- ber_memfree( matched_dn.bv_val ); -- rs->sr_matched = NULL; -- return 1; -- } -- -- if ( get_assert( op ) && -- ( test_filter( op, e, get_assertion( op )) != LDAP_COMPARE_TRUE )) -- { -- rs->sr_err = LDAP_ASSERTION_FAILED; --#ifdef SLAP_ZONE_ALLOC -- slap_zn_runlock(bdb->bi_cache.c_zctx, e); --#endif -- if ( e != e_root ) { -- bdb_cache_return_entry_r(bdb, e, &lock); -- } -- send_ldap_result( op, rs ); -- return 1; -- } -- -- /* compute it anyway; root does not use it */ -- stoptime = op->o_time + op->ors_tlimit; -- -- /* need normalized dn below */ -- ber_dupbv( &realbase, &e->e_nname ); -- -- /* Copy info to base, must free entry before accessing the database -- * in search_candidates, to avoid deadlocks. -- */ -- base.e_private = e->e_private; -- base.e_nname = realbase; -- base.e_id = e->e_id; -- --#ifdef SLAP_ZONE_ALLOC -- slap_zn_runlock(bdb->bi_cache.c_zctx, e); --#endif -- if ( e != e_root ) { -- bdb_cache_return_entry_r(bdb, e, &lock); -- } -- e = NULL; -- -- /* select candidates */ -- if ( op->oq_search.rs_scope == LDAP_SCOPE_BASE ) { -- rs->sr_err = base_candidate( op->o_bd, &base, candidates ); -- -- } else { --cand_retry: -- BDB_IDL_ZERO( candidates ); -- BDB_IDL_ZERO( scopes ); -- rs->sr_err = search_candidates( op, rs, &base, -- ltid, candidates, scopes ); -- if ( rs->sr_err == DB_LOCK_DEADLOCK ) { -- if ( !opinfo ) { -- ltid->flags &= ~TXN_DEADLOCK; -- goto cand_retry; -- } -- opinfo->boi_err = rs->sr_err; -- send_ldap_error( op, rs, LDAP_BUSY, "ldap server busy" ); -- return LDAP_BUSY; -- } -- } -- -- /* start cursor at beginning of candidates. -- */ -- cursor = 0; -- -- if ( candidates[0] == 0 ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_search) ": no candidates\n", -- 0, 0, 0 ); -- -- goto nochange; -- } -- -- /* if not root and candidates exceed to-be-checked entries, abort */ -- if ( op->ors_limit /* isroot == FALSE */ && -- op->ors_limit->lms_s_unchecked != -1 && -- BDB_IDL_N(candidates) > (unsigned) op->ors_limit->lms_s_unchecked ) -- { -- rs->sr_err = LDAP_ADMINLIMIT_EXCEEDED; -- send_ldap_result( op, rs ); -- rs->sr_err = LDAP_SUCCESS; -- goto done; -- } -- -- if ( op->ors_limit == NULL /* isroot == TRUE */ || -- !op->ors_limit->lms_s_pr_hide ) -- { -- tentries = BDB_IDL_N(candidates); -- } -- -- if ( get_pagedresults( op ) > SLAP_CONTROL_IGNORED ) { -- PagedResultsState *ps = op->o_pagedresults_state; -- /* deferred cookie parsing */ -- rs->sr_err = parse_paged_cookie( op, rs ); -- if ( rs->sr_err != LDAP_SUCCESS ) { -- send_ldap_result( op, rs ); -- goto done; -- } -- -- cursor = (ID) ps->ps_cookie; -- if ( cursor && ps->ps_size == 0 ) { -- rs->sr_err = LDAP_SUCCESS; -- rs->sr_text = "search abandoned by pagedResult size=0"; -- send_ldap_result( op, rs ); -- goto done; -- } -- id = bdb_idl_first( candidates, &cursor ); -- if ( id == NOID ) { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_search) -- ": no paged results candidates\n", -- 0, 0, 0 ); -- send_paged_response( op, rs, &lastid, 0 ); -- -- rs->sr_err = LDAP_OTHER; -- goto done; -- } -- nentries = ps->ps_count; -- if ( id == (ID)ps->ps_cookie ) -- id = bdb_idl_next( candidates, &cursor ); -- goto loop_begin; -- } -- -- for ( id = bdb_idl_first( candidates, &cursor ); -- id != NOID ; id = bdb_idl_next( candidates, &cursor ) ) -- { -- int scopeok; -- --loop_begin: -- -- /* check for abandon */ -- if ( op->o_abandon ) { -- rs->sr_err = SLAPD_ABANDON; -- send_ldap_result( op, rs ); -- goto done; -- } -- -- /* mostly needed by internal searches, -- * e.g. related to syncrepl, for whom -- * abandon does not get set... */ -- if ( slapd_shutdown ) { -- rs->sr_err = LDAP_UNAVAILABLE; -- send_ldap_disconnect( op, rs ); -- goto done; -- } -- -- /* check time limit */ -- if ( op->ors_tlimit != SLAP_NO_LIMIT -- && slap_get_time() > stoptime ) -- { -- rs->sr_err = LDAP_TIMELIMIT_EXCEEDED; -- rs->sr_ref = rs->sr_v2ref; -- send_ldap_result( op, rs ); -- rs->sr_err = LDAP_SUCCESS; -- goto done; -- } -- -- /* If we inspect more entries than will -- * fit into the entry cache, stop caching -- * any subsequent entries -- */ -- nentries++; -- if ( nentries > bdb->bi_cache.c_maxsize && !idflag ) { -- idflag = ID_NOCACHE; -- } -- --fetch_entry_retry: -- /* get the entry with reader lock */ -- ei = NULL; -- rs->sr_err = bdb_cache_find_id( op, ltid, -- id, &ei, idflag, &lock ); -- -- if (rs->sr_err == LDAP_BUSY) { -- rs->sr_text = "ldap server busy"; -- send_ldap_result( op, rs ); -- goto done; -- -- } else if ( rs->sr_err == DB_LOCK_DEADLOCK ) { -- if ( !opinfo ) { -- ltid->flags &= ~TXN_DEADLOCK; -- goto fetch_entry_retry; -- } --txnfail: -- opinfo->boi_err = rs->sr_err; -- send_ldap_error( op, rs, LDAP_BUSY, "ldap server busy" ); -- goto done; -- -- } else if ( rs->sr_err == DB_LOCK_NOTGRANTED ) -- { -- goto fetch_entry_retry; -- } else if ( rs->sr_err == LDAP_OTHER ) { -- rs->sr_text = "internal error"; -- send_ldap_result( op, rs ); -- goto done; -- } -- -- if ( ei && rs->sr_err == LDAP_SUCCESS ) { -- e = ei->bei_e; -- } else { -- e = NULL; -- } -- -- if ( e == NULL ) { -- if( !BDB_IDL_IS_RANGE(candidates) ) { -- /* only complain for non-range IDLs */ -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_search) -- ": candidate %ld not found\n", -- (long) id, 0, 0 ); -- } else { -- /* get the next ID from the DB */ --id_retry: -- rs->sr_err = bdb_get_nextid( bdb, ltid, &cursor ); -- if ( rs->sr_err == DB_NOTFOUND ) { -- break; -- } else if ( rs->sr_err == DB_LOCK_DEADLOCK ) { -- if ( opinfo ) -- goto txnfail; -- ltid->flags &= ~TXN_DEADLOCK; -- goto id_retry; -- } else if ( rs->sr_err == DB_LOCK_NOTGRANTED ) { -- goto id_retry; -- } -- if ( rs->sr_err ) { -- rs->sr_err = LDAP_OTHER; -- rs->sr_text = "internal error in get_nextid"; -- send_ldap_result( op, rs ); -- goto done; -- } -- cursor--; -- } -- -- goto loop_continue; -- } -- -- if ( is_entry_subentry( e ) ) { -- if( op->oq_search.rs_scope != LDAP_SCOPE_BASE ) { -- if(!get_subentries_visibility( op )) { -- /* only subentries are visible */ -- goto loop_continue; -- } -- -- } else if ( get_subentries( op ) && -- !get_subentries_visibility( op )) -- { -- /* only subentries are visible */ -- goto loop_continue; -- } -- -- } else if ( get_subentries_visibility( op )) { -- /* only subentries are visible */ -- goto loop_continue; -- } -- -- /* Does this candidate actually satisfy the search scope? -- * -- * Note that we don't lock access to the bei_parent pointer. -- * Since only leaf nodes can be deleted, the parent of any -- * node will always be a valid node. Also since we have -- * a Read lock on the data, it cannot be renamed out of the -- * scope while we are looking at it, and unless we're using -- * BDB_HIER, its parents cannot be moved either. -- */ -- scopeok = 0; -- switch( op->ors_scope ) { -- case LDAP_SCOPE_BASE: -- /* This is always true, yes? */ -- if ( id == base.e_id ) scopeok = 1; -- break; -- -- case LDAP_SCOPE_ONELEVEL: -- if ( ei->bei_parent->bei_id == base.e_id ) scopeok = 1; -- break; -- --#ifdef LDAP_SCOPE_CHILDREN -- case LDAP_SCOPE_CHILDREN: -- if ( id == base.e_id ) break; -- /* Fall-thru */ --#endif -- case LDAP_SCOPE_SUBTREE: { -- EntryInfo *tmp; -- for ( tmp = BEI(e); tmp; tmp = tmp->bei_parent ) { -- if ( tmp->bei_id == base.e_id ) { -- scopeok = 1; -- break; -- } -- } -- } break; -- } -- -- /* aliases were already dereferenced in candidate list */ -- if ( op->ors_deref & LDAP_DEREF_SEARCHING ) { -- /* but if the search base is an alias, and we didn't -- * deref it when finding, return it. -- */ -- if ( is_entry_alias(e) && -- ((op->ors_deref & LDAP_DEREF_FINDING) || -- !bvmatch(&e->e_nname, &op->o_req_ndn))) -- { -- goto loop_continue; -- } -- -- /* scopes is only non-empty for onelevel or subtree */ -- if ( !scopeok && BDB_IDL_N(scopes) ) { -- unsigned x; -- if ( op->ors_scope == LDAP_SCOPE_ONELEVEL ) { -- x = bdb_idl_search( scopes, e->e_id ); -- if ( scopes[x] == e->e_id ) scopeok = 1; -- } else { -- /* subtree, walk up the tree */ -- EntryInfo *tmp = BEI(e); -- for (;tmp->bei_parent; tmp=tmp->bei_parent) { -- x = bdb_idl_search( scopes, tmp->bei_id ); -- if ( scopes[x] == tmp->bei_id ) { -- scopeok = 1; -- break; -- } -- } -- } -- } -- } -- -- /* Not in scope, ignore it */ -- if ( !scopeok ) -- { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_search) -- ": %ld scope not okay\n", -- (long) id, 0, 0 ); -- goto loop_continue; -- } -- -- /* -- * if it's a referral, add it to the list of referrals. only do -- * this for non-base searches, and don't check the filter -- * explicitly here since it's only a candidate anyway. -- */ -- if ( !manageDSAit && op->oq_search.rs_scope != LDAP_SCOPE_BASE -- && is_entry_referral( e ) ) -- { -- struct bdb_op_info bois; -- struct bdb_lock_info blis; -- BerVarray erefs = get_entry_referrals( op, e ); -- rs->sr_ref = referral_rewrite( erefs, &e->e_name, NULL, -- op->oq_search.rs_scope == LDAP_SCOPE_ONELEVEL -- ? LDAP_SCOPE_BASE : LDAP_SCOPE_SUBTREE ); -- -- /* Must set lockinfo so that entry_release will work */ -- if (!opinfo) { -- bois.boi_oe.oe_key = bdb; -- bois.boi_txn = NULL; -- bois.boi_err = 0; -- bois.boi_acl_cache = op->o_do_not_cache; -- bois.boi_flag = BOI_DONTFREE; -- bois.boi_locks = &blis; -- blis.bli_next = NULL; -- LDAP_SLIST_INSERT_HEAD( &op->o_extra, &bois.boi_oe, -- oe_next ); -- } else { -- blis.bli_next = opinfo->boi_locks; -- opinfo->boi_locks = &blis; -- } -- blis.bli_id = e->e_id; -- blis.bli_lock = lock; -- blis.bli_flag = BLI_DONTFREE; -- -- rs->sr_entry = e; -- rs->sr_flags = REP_ENTRY_MUSTRELEASE; -- -- send_search_reference( op, rs ); -- -- if ( blis.bli_flag ) { --#ifdef SLAP_ZONE_ALLOC -- slap_zn_runlock(bdb->bi_cache.c_zctx, e); --#endif -- bdb_cache_return_entry_r(bdb, e, &lock); -- if ( opinfo ) { -- opinfo->boi_locks = blis.bli_next; -- } else { -- LDAP_SLIST_REMOVE( &op->o_extra, &bois.boi_oe, -- OpExtra, oe_next ); -- } -- } -- rs->sr_entry = NULL; -- e = NULL; -- -- ber_bvarray_free( rs->sr_ref ); -- ber_bvarray_free( erefs ); -- rs->sr_ref = NULL; -- -- goto loop_continue; -- } -- -- if ( !manageDSAit && is_entry_glue( e )) { -- goto loop_continue; -- } -- -- /* if it matches the filter and scope, send it */ -- rs->sr_err = test_filter( op, e, op->oq_search.rs_filter ); -- -- if ( rs->sr_err == LDAP_COMPARE_TRUE ) { -- /* check size limit */ -- if ( get_pagedresults(op) > SLAP_CONTROL_IGNORED ) { -- if ( rs->sr_nentries >= ((PagedResultsState *)op->o_pagedresults_state)->ps_size ) { --#ifdef SLAP_ZONE_ALLOC -- slap_zn_runlock(bdb->bi_cache.c_zctx, e); --#endif -- bdb_cache_return_entry_r( bdb, e, &lock ); -- e = NULL; -- send_paged_response( op, rs, &lastid, tentries ); -- goto done; -- } -- lastid = id; -- } -- -- if (e) { -- struct bdb_op_info bois; -- struct bdb_lock_info blis; -- -- /* Must set lockinfo so that entry_release will work */ -- if (!opinfo) { -- bois.boi_oe.oe_key = bdb; -- bois.boi_txn = NULL; -- bois.boi_err = 0; -- bois.boi_acl_cache = op->o_do_not_cache; -- bois.boi_flag = BOI_DONTFREE; -- bois.boi_locks = &blis; -- blis.bli_next = NULL; -- LDAP_SLIST_INSERT_HEAD( &op->o_extra, &bois.boi_oe, -- oe_next ); -- } else { -- blis.bli_next = opinfo->boi_locks; -- opinfo->boi_locks = &blis; -- } -- blis.bli_id = e->e_id; -- blis.bli_lock = lock; -- blis.bli_flag = BLI_DONTFREE; -- -- /* safe default */ -- rs->sr_attrs = op->oq_search.rs_attrs; -- rs->sr_operational_attrs = NULL; -- rs->sr_ctrls = NULL; -- rs->sr_entry = e; -- RS_ASSERT( e->e_private != NULL ); -- rs->sr_flags = REP_ENTRY_MUSTRELEASE; -- rs->sr_err = LDAP_SUCCESS; -- rs->sr_err = send_search_entry( op, rs ); -- rs->sr_attrs = NULL; -- rs->sr_entry = NULL; -- -- /* send_search_entry will usually free it. -- * an overlay might leave its own copy here; -- * bli_flag will be 0 if lock was already released. -- */ -- if ( blis.bli_flag ) { --#ifdef SLAP_ZONE_ALLOC -- slap_zn_runlock(bdb->bi_cache.c_zctx, e); --#endif -- bdb_cache_return_entry_r(bdb, e, &lock); -- if ( opinfo ) { -- opinfo->boi_locks = blis.bli_next; -- } else { -- LDAP_SLIST_REMOVE( &op->o_extra, &bois.boi_oe, -- OpExtra, oe_next ); -- } -- } -- e = NULL; -- -- switch ( rs->sr_err ) { -- case LDAP_SUCCESS: /* entry sent ok */ -- break; -- default: /* entry not sent */ -- break; -- case LDAP_BUSY: -- send_ldap_result( op, rs ); -- goto done; -- case LDAP_UNAVAILABLE: -- case LDAP_SIZELIMIT_EXCEEDED: -- if ( rs->sr_err == LDAP_SIZELIMIT_EXCEEDED ) { -- rs->sr_ref = rs->sr_v2ref; -- send_ldap_result( op, rs ); -- rs->sr_err = LDAP_SUCCESS; -- -- } else { -- rs->sr_err = LDAP_OTHER; -- } -- goto done; -- } -- } -- -- } else { -- Debug( LDAP_DEBUG_TRACE, -- LDAP_XSTRING(bdb_search) -- ": %ld does not match filter\n", -- (long) id, 0, 0 ); -- } -- --loop_continue: -- if( e != NULL ) { -- /* free reader lock */ --#ifdef SLAP_ZONE_ALLOC -- slap_zn_runlock(bdb->bi_cache.c_zctx, e); --#endif -- bdb_cache_return_entry_r( bdb, e , &lock ); -- RS_ASSERT( rs->sr_entry == NULL ); -- e = NULL; -- rs->sr_entry = NULL; -- } -- } -- --nochange: -- rs->sr_ctrls = NULL; -- rs->sr_ref = rs->sr_v2ref; -- rs->sr_err = (rs->sr_v2ref == NULL) ? LDAP_SUCCESS : LDAP_REFERRAL; -- rs->sr_rspoid = NULL; -- if ( get_pagedresults(op) > SLAP_CONTROL_IGNORED ) { -- send_paged_response( op, rs, NULL, 0 ); -- } else { -- send_ldap_result( op, rs ); -- } -- -- rs->sr_err = LDAP_SUCCESS; -- --done: -- if( rs->sr_v2ref ) { -- ber_bvarray_free( rs->sr_v2ref ); -- rs->sr_v2ref = NULL; -- } -- if( realbase.bv_val ) ch_free( realbase.bv_val ); -- -- return rs->sr_err; --} -- -- --static int base_candidate( -- BackendDB *be, -- Entry *e, -- ID *ids ) --{ -- Debug(LDAP_DEBUG_ARGS, "base_candidates: base: \"%s\" (0x%08lx)\n", -- e->e_nname.bv_val, (long) e->e_id, 0); -- -- ids[0] = 1; -- ids[1] = e->e_id; -- return 0; --} -- --/* Look for "objectClass Present" in this filter. -- * Also count depth of filter tree while we're at it. -- */ --static int oc_filter( -- Filter *f, -- int cur, -- int *max ) --{ -- int rc = 0; -- -- assert( f != NULL ); -- -- if( cur > *max ) *max = cur; -- -- switch( f->f_choice ) { -- case LDAP_FILTER_PRESENT: -- if (f->f_desc == slap_schema.si_ad_objectClass) { -- rc = 1; -- } -- break; -- -- case LDAP_FILTER_AND: -- case LDAP_FILTER_OR: -- cur++; -- for ( f=f->f_and; f; f=f->f_next ) { -- (void) oc_filter(f, cur, max); -- } -- break; -- -- default: -- break; -- } -- return rc; --} -- --static void search_stack_free( void *key, void *data ) --{ -- ber_memfree_x(data, NULL); --} -- --static void *search_stack( Operation *op ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- void *ret = NULL; -- -- if ( op->o_threadctx ) { -- ldap_pvt_thread_pool_getkey( op->o_threadctx, (void *)search_stack, -- &ret, NULL ); -- } else { -- ret = bdb->bi_search_stack; -- } -- -- if ( !ret ) { -- ret = ch_malloc( bdb->bi_search_stack_depth * BDB_IDL_UM_SIZE -- * sizeof( ID ) ); -- if ( op->o_threadctx ) { -- ldap_pvt_thread_pool_setkey( op->o_threadctx, (void *)search_stack, -- ret, search_stack_free, NULL, NULL ); -- } else { -- bdb->bi_search_stack = ret; -- } -- } -- return ret; --} -- --static int search_candidates( -- Operation *op, -- SlapReply *rs, -- Entry *e, -- DB_TXN *txn, -- ID *ids, -- ID *scopes ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- int rc, depth = 1; -- Filter f, rf, xf, nf; -- ID *stack; -- AttributeAssertion aa_ref = ATTRIBUTEASSERTION_INIT; -- Filter sf; -- AttributeAssertion aa_subentry = ATTRIBUTEASSERTION_INIT; -- -- /* -- * This routine takes as input a filter (user-filter) -- * and rewrites it as follows: -- * (&(scope=DN)[(objectClass=subentry)] -- * (|[(objectClass=referral)(objectClass=alias)](user-filter)) -- */ -- -- Debug(LDAP_DEBUG_TRACE, -- "search_candidates: base=\"%s\" (0x%08lx) scope=%d\n", -- e->e_nname.bv_val, (long) e->e_id, op->oq_search.rs_scope ); -- -- xf.f_or = op->oq_search.rs_filter; -- xf.f_choice = LDAP_FILTER_OR; -- xf.f_next = NULL; -- -- /* If the user's filter uses objectClass=*, -- * these clauses are redundant. -- */ -- if (!oc_filter(op->oq_search.rs_filter, 1, &depth) -- && !get_subentries_visibility(op)) { -- if( !get_manageDSAit(op) && !get_domainScope(op) ) { -- /* match referral objects */ -- struct berval bv_ref = BER_BVC( "referral" ); -- rf.f_choice = LDAP_FILTER_EQUALITY; -- rf.f_ava = &aa_ref; -- rf.f_av_desc = slap_schema.si_ad_objectClass; -- rf.f_av_value = bv_ref; -- rf.f_next = xf.f_or; -- xf.f_or = &rf; -- depth++; -- } -- } -- -- f.f_next = NULL; -- f.f_choice = LDAP_FILTER_AND; -- f.f_and = &nf; -- /* Dummy; we compute scope separately now */ -- nf.f_choice = SLAPD_FILTER_COMPUTED; -- nf.f_result = LDAP_SUCCESS; -- nf.f_next = ( xf.f_or == op->oq_search.rs_filter ) -- ? op->oq_search.rs_filter : &xf ; -- /* Filter depth increased again, adding dummy clause */ -- depth++; -- -- if( get_subentries_visibility( op ) ) { -- struct berval bv_subentry = BER_BVC( "subentry" ); -- sf.f_choice = LDAP_FILTER_EQUALITY; -- sf.f_ava = &aa_subentry; -- sf.f_av_desc = slap_schema.si_ad_objectClass; -- sf.f_av_value = bv_subentry; -- sf.f_next = nf.f_next; -- nf.f_next = &sf; -- } -- -- /* Allocate IDL stack, plus 1 more for former tmp */ -- if ( depth+1 > bdb->bi_search_stack_depth ) { -- stack = ch_malloc( (depth + 1) * BDB_IDL_UM_SIZE * sizeof( ID ) ); -- } else { -- stack = search_stack( op ); -- } -- -- if( op->ors_deref & LDAP_DEREF_SEARCHING ) { -- rc = search_aliases( op, rs, e, txn, ids, scopes, stack ); -- if ( BDB_IDL_IS_ZERO( ids ) && rc == LDAP_SUCCESS ) -- rc = bdb_dn2idl( op, txn, &e->e_nname, BEI(e), ids, stack ); -- } else { -- rc = bdb_dn2idl( op, txn, &e->e_nname, BEI(e), ids, stack ); -- } -- -- if ( rc == LDAP_SUCCESS ) { -- rc = bdb_filter_candidates( op, txn, &f, ids, -- stack, stack+BDB_IDL_UM_SIZE ); -- } -- -- if ( depth+1 > bdb->bi_search_stack_depth ) { -- ch_free( stack ); -- } -- -- if( rc ) { -- Debug(LDAP_DEBUG_TRACE, -- "bdb_search_candidates: failed (rc=%d)\n", -- rc, NULL, NULL ); -- -- } else { -- Debug(LDAP_DEBUG_TRACE, -- "bdb_search_candidates: id=%ld first=%ld last=%ld\n", -- (long) ids[0], -- (long) BDB_IDL_FIRST(ids), -- (long) BDB_IDL_LAST(ids) ); -- } -- -- return rc; --} -- --static int --parse_paged_cookie( Operation *op, SlapReply *rs ) --{ -- int rc = LDAP_SUCCESS; -- PagedResultsState *ps = op->o_pagedresults_state; -- -- /* this function must be invoked only if the pagedResults -- * control has been detected, parsed and partially checked -- * by the frontend */ -- assert( get_pagedresults( op ) > SLAP_CONTROL_IGNORED ); -- -- /* cookie decoding/checks deferred to backend... */ -- if ( ps->ps_cookieval.bv_len ) { -- PagedResultsCookie reqcookie; -- if( ps->ps_cookieval.bv_len != sizeof( reqcookie ) ) { -- /* bad cookie */ -- rs->sr_text = "paged results cookie is invalid"; -- rc = LDAP_PROTOCOL_ERROR; -- goto done; -- } -- -- AC_MEMCPY( &reqcookie, ps->ps_cookieval.bv_val, sizeof( reqcookie )); -- -- if ( reqcookie > ps->ps_cookie ) { -- /* bad cookie */ -- rs->sr_text = "paged results cookie is invalid"; -- rc = LDAP_PROTOCOL_ERROR; -- goto done; -- -- } else if ( reqcookie < ps->ps_cookie ) { -- rs->sr_text = "paged results cookie is invalid or old"; -- rc = LDAP_UNWILLING_TO_PERFORM; -- goto done; -- } -- -- } else { -- /* we're going to use ps_cookie */ -- op->o_conn->c_pagedresults_state.ps_cookie = 0; -- } -- --done:; -- -- return rc; --} -- --static void --send_paged_response( -- Operation *op, -- SlapReply *rs, -- ID *lastid, -- int tentries ) --{ -- LDAPControl *ctrls[2]; -- BerElementBuffer berbuf; -- BerElement *ber = (BerElement *)&berbuf; -- PagedResultsCookie respcookie; -- struct berval cookie; -- -- Debug(LDAP_DEBUG_ARGS, -- "send_paged_response: lastid=0x%08lx nentries=%d\n", -- lastid ? *lastid : 0, rs->sr_nentries, NULL ); -- -- ctrls[1] = NULL; -- -- ber_init2( ber, NULL, LBER_USE_DER ); -- -- if ( lastid ) { -- respcookie = ( PagedResultsCookie )(*lastid); -- cookie.bv_len = sizeof( respcookie ); -- cookie.bv_val = (char *)&respcookie; -- -- } else { -- respcookie = ( PagedResultsCookie )0; -- BER_BVSTR( &cookie, "" ); -- } -- -- op->o_conn->c_pagedresults_state.ps_cookie = respcookie; -- op->o_conn->c_pagedresults_state.ps_count = -- ((PagedResultsState *)op->o_pagedresults_state)->ps_count + -- rs->sr_nentries; -- -- /* return size of 0 -- no estimate */ -- ber_printf( ber, "{iO}", 0, &cookie ); -- -- ctrls[0] = op->o_tmpalloc( sizeof(LDAPControl), op->o_tmpmemctx ); -- if ( ber_flatten2( ber, &ctrls[0]->ldctl_value, 0 ) == -1 ) { -- goto done; -- } -- -- ctrls[0]->ldctl_oid = LDAP_CONTROL_PAGEDRESULTS; -- ctrls[0]->ldctl_iscritical = 0; -- -- slap_add_ctrls( op, rs, ctrls ); -- rs->sr_err = LDAP_SUCCESS; -- send_ldap_result( op, rs ); -- --done: -- (void) ber_free_buf( ber ); --} -diff --git a/servers/slapd/back-bdb/tools.c b/servers/slapd/back-bdb/tools.c -deleted file mode 100644 -index 1882ef2..0000000 ---- a/servers/slapd/back-bdb/tools.c -+++ /dev/null -@@ -1,1327 +0,0 @@ --/* tools.c - tools for slap tools */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include --#include --#include -- --#define AVL_INTERNAL --#include "back-bdb.h" --#include "idl.h" -- --static DBC *cursor = NULL; --static DBT key, data; --static EntryHeader eh; --static ID nid, previd = NOID; --static char ehbuf[16]; -- --typedef struct dn_id { -- ID id; -- struct berval dn; --} dn_id; -- --#define HOLE_SIZE 4096 --static dn_id hbuf[HOLE_SIZE], *holes = hbuf; --static unsigned nhmax = HOLE_SIZE; --static unsigned nholes; -- --static int index_nattrs; -- --static struct berval *tool_base; --static int tool_scope; --static Filter *tool_filter; --static Entry *tool_next_entry; -- --#ifdef BDB_TOOL_IDL_CACHING --#define bdb_tool_idl_cmp BDB_SYMBOL(tool_idl_cmp) --#define bdb_tool_idl_flush_one BDB_SYMBOL(tool_idl_flush_one) --#define bdb_tool_idl_flush BDB_SYMBOL(tool_idl_flush) -- --static int bdb_tool_idl_flush( BackendDB *be ); -- --#define IDBLOCK 1024 -- --typedef struct bdb_tool_idl_cache_entry { -- struct bdb_tool_idl_cache_entry *next; -- ID ids[IDBLOCK]; --} bdb_tool_idl_cache_entry; -- --typedef struct bdb_tool_idl_cache { -- struct berval kstr; -- bdb_tool_idl_cache_entry *head, *tail; -- ID first, last; -- int count; --} bdb_tool_idl_cache; -- --static bdb_tool_idl_cache_entry *bdb_tool_idl_free_list; --#endif /* BDB_TOOL_IDL_CACHING */ -- --static ID bdb_tool_ix_id; --static Operation *bdb_tool_ix_op; --static int *bdb_tool_index_threads, bdb_tool_index_tcount; --static void *bdb_tool_index_rec; --static struct bdb_info *bdb_tool_info; --static ldap_pvt_thread_mutex_t bdb_tool_index_mutex; --static ldap_pvt_thread_cond_t bdb_tool_index_cond_main; --static ldap_pvt_thread_cond_t bdb_tool_index_cond_work; -- --#if DB_VERSION_FULL >= 0x04060000 --#define USE_TRICKLE 1 --#else --/* Seems to slow things down too much in BDB 4.5 */ --#undef USE_TRICKLE --#endif -- --#ifdef USE_TRICKLE --static ldap_pvt_thread_mutex_t bdb_tool_trickle_mutex; --static ldap_pvt_thread_cond_t bdb_tool_trickle_cond; --static ldap_pvt_thread_cond_t bdb_tool_trickle_cond_end; -- --static void * bdb_tool_trickle_task( void *ctx, void *ptr ); --static int bdb_tool_trickle_active; --#endif -- --static void * bdb_tool_index_task( void *ctx, void *ptr ); -- --static int --bdb_tool_entry_get_int( BackendDB *be, ID id, Entry **ep ); -- --static int bdb_tool_threads; -- --int bdb_tool_entry_open( -- BackendDB *be, int mode ) --{ -- struct bdb_info *bdb = (struct bdb_info *) be->be_private; -- -- /* initialize key and data thangs */ -- DBTzero( &key ); -- DBTzero( &data ); -- key.flags = DB_DBT_USERMEM; -- key.data = &nid; -- key.size = key.ulen = sizeof( nid ); -- data.flags = DB_DBT_USERMEM; -- -- if (cursor == NULL) { -- int rc = bdb->bi_id2entry->bdi_db->cursor( -- bdb->bi_id2entry->bdi_db, bdb->bi_cache.c_txn, &cursor, -- bdb->bi_db_opflags ); -- if( rc != 0 ) { -- return -1; -- } -- } -- -- /* Set up for threaded slapindex */ -- if (( slapMode & (SLAP_TOOL_QUICK|SLAP_TOOL_READONLY)) == SLAP_TOOL_QUICK ) { -- if ( !bdb_tool_info ) { --#ifdef USE_TRICKLE -- ldap_pvt_thread_mutex_init( &bdb_tool_trickle_mutex ); -- ldap_pvt_thread_cond_init( &bdb_tool_trickle_cond ); -- ldap_pvt_thread_cond_init( &bdb_tool_trickle_cond_end ); -- ldap_pvt_thread_pool_submit( &connection_pool, bdb_tool_trickle_task, bdb->bi_dbenv ); --#endif -- -- ldap_pvt_thread_mutex_init( &bdb_tool_index_mutex ); -- ldap_pvt_thread_cond_init( &bdb_tool_index_cond_main ); -- ldap_pvt_thread_cond_init( &bdb_tool_index_cond_work ); -- if ( bdb->bi_nattrs ) { -- int i; -- bdb_tool_threads = slap_tool_thread_max - 1; -- if ( bdb_tool_threads > 1 ) { -- bdb_tool_index_threads = ch_malloc( bdb_tool_threads * sizeof( int )); -- bdb_tool_index_rec = ch_malloc( bdb->bi_nattrs * sizeof( IndexRec )); -- bdb_tool_index_tcount = bdb_tool_threads - 1; -- for (i=1; i 1 ) { -- ldap_pvt_thread_mutex_lock( &bdb_tool_index_mutex ); -- -- /* There might still be some threads starting */ -- while ( bdb_tool_index_tcount > 0 ) { -- ldap_pvt_thread_cond_wait( &bdb_tool_index_cond_main, -- &bdb_tool_index_mutex ); -- } -- -- bdb_tool_index_tcount = bdb_tool_threads - 1; -- ldap_pvt_thread_cond_broadcast( &bdb_tool_index_cond_work ); -- -- /* Make sure all threads are stopped */ -- while ( bdb_tool_index_tcount > 0 ) { -- ldap_pvt_thread_cond_wait( &bdb_tool_index_cond_main, -- &bdb_tool_index_mutex ); -- } -- ldap_pvt_thread_mutex_unlock( &bdb_tool_index_mutex ); -- -- ch_free( bdb_tool_index_threads ); -- ch_free( bdb_tool_index_rec ); -- bdb_tool_index_tcount = bdb_tool_threads - 1; -- } -- bdb_tool_info = NULL; -- slapd_shutdown = 0; -- } -- -- if( eh.bv.bv_val ) { -- ch_free( eh.bv.bv_val ); -- eh.bv.bv_val = NULL; -- } -- -- if( cursor ) { -- cursor->c_close( cursor ); -- cursor = NULL; -- } -- --#ifdef BDB_TOOL_IDL_CACHING -- bdb_tool_idl_flush( be ); --#endif -- -- if( nholes ) { -- unsigned i; -- fprintf( stderr, "Error, entries missing!\n"); -- for (i=0; ibe_private; -- assert( bdb != NULL ); -- --next:; -- /* Get the header */ -- data.ulen = data.dlen = sizeof( ehbuf ); -- data.data = ehbuf; -- data.flags |= DB_DBT_PARTIAL; -- rc = cursor->c_get( cursor, &key, &data, DB_NEXT ); -- -- if( rc ) { -- /* If we're doing linear indexing and there are more attrs to -- * index, and we're at the end of the database, start over. -- */ -- if ( index_nattrs && rc == DB_NOTFOUND ) { -- /* optional - do a checkpoint here? */ -- bdb_attr_info_free( bdb->bi_attrs[0] ); -- bdb->bi_attrs[0] = bdb->bi_attrs[index_nattrs]; -- index_nattrs--; -- rc = cursor->c_get( cursor, &key, &data, DB_FIRST ); -- if ( rc ) { -- return NOID; -- } -- } else { -- return NOID; -- } -- } -- -- BDB_DISK2ID( key.data, &id ); -- previd = id; -- -- if ( tool_filter || tool_base ) { -- static Operation op = {0}; -- static Opheader ohdr = {0}; -- -- op.o_hdr = &ohdr; -- op.o_bd = be; -- op.o_tmpmemctx = NULL; -- op.o_tmpmfuncs = &ch_mfuncs; -- -- if ( tool_next_entry ) { -- bdb_entry_release( &op, tool_next_entry, 0 ); -- tool_next_entry = NULL; -- } -- -- rc = bdb_tool_entry_get_int( be, id, &tool_next_entry ); -- if ( rc == LDAP_NO_SUCH_OBJECT ) { -- goto next; -- } -- -- assert( tool_next_entry != NULL ); -- --#ifdef BDB_HIER -- /* TODO: needed until BDB_HIER is handled accordingly -- * in bdb_tool_entry_get_int() */ -- if ( tool_base && !dnIsSuffixScope( &tool_next_entry->e_nname, tool_base, tool_scope ) ) -- { -- bdb_entry_release( &op, tool_next_entry, 0 ); -- tool_next_entry = NULL; -- goto next; -- } --#endif -- -- if ( tool_filter && test_filter( NULL, tool_next_entry, tool_filter ) != LDAP_COMPARE_TRUE ) -- { -- bdb_entry_release( &op, tool_next_entry, 0 ); -- tool_next_entry = NULL; -- goto next; -- } -- } -- -- return id; --} -- --ID bdb_tool_dn2id_get( -- Backend *be, -- struct berval *dn --) --{ -- Operation op = {0}; -- Opheader ohdr = {0}; -- EntryInfo *ei = NULL; -- int rc; -- -- if ( BER_BVISEMPTY(dn) ) -- return 0; -- -- op.o_hdr = &ohdr; -- op.o_bd = be; -- op.o_tmpmemctx = NULL; -- op.o_tmpmfuncs = &ch_mfuncs; -- -- rc = bdb_cache_find_ndn( &op, 0, dn, &ei ); -- if ( ei ) bdb_cache_entryinfo_unlock( ei ); -- if ( rc == DB_NOTFOUND ) -- return NOID; -- -- return ei->bei_id; --} -- --static int --bdb_tool_entry_get_int( BackendDB *be, ID id, Entry **ep ) --{ -- Entry *e = NULL; -- char *dptr; -- int rc, eoff; -- -- assert( be != NULL ); -- assert( slapMode & SLAP_TOOL_MODE ); -- -- if ( ( tool_filter || tool_base ) && id == previd && tool_next_entry != NULL ) { -- *ep = tool_next_entry; -- tool_next_entry = NULL; -- return LDAP_SUCCESS; -- } -- -- if ( id != previd ) { -- data.ulen = data.dlen = sizeof( ehbuf ); -- data.data = ehbuf; -- data.flags |= DB_DBT_PARTIAL; -- -- BDB_ID2DISK( id, &nid ); -- rc = cursor->c_get( cursor, &key, &data, DB_SET ); -- if ( rc ) { -- rc = LDAP_OTHER; -- goto done; -- } -- } -- -- /* Get the header */ -- dptr = eh.bv.bv_val; -- eh.bv.bv_val = ehbuf; -- eh.bv.bv_len = data.size; -- rc = entry_header( &eh ); -- eoff = eh.data - eh.bv.bv_val; -- eh.bv.bv_val = dptr; -- if ( rc ) { -- rc = LDAP_OTHER; -- goto done; -- } -- -- /* Get the size */ -- data.flags &= ~DB_DBT_PARTIAL; -- data.ulen = 0; -- rc = cursor->c_get( cursor, &key, &data, DB_CURRENT ); -- if ( rc != DB_BUFFER_SMALL ) { -- rc = LDAP_OTHER; -- goto done; -- } -- -- /* Allocate a block and retrieve the data */ -- eh.bv.bv_len = eh.nvals * sizeof( struct berval ) + data.size; -- eh.bv.bv_val = ch_realloc( eh.bv.bv_val, eh.bv.bv_len ); -- eh.data = eh.bv.bv_val + eh.nvals * sizeof( struct berval ); -- data.data = eh.data; -- data.ulen = data.size; -- -- /* Skip past already parsed nattr/nvals */ -- eh.data += eoff; -- -- rc = cursor->c_get( cursor, &key, &data, DB_CURRENT ); -- if ( rc ) { -- rc = LDAP_OTHER; -- goto done; -- } -- --#ifndef BDB_HIER -- /* TODO: handle BDB_HIER accordingly */ -- if ( tool_base != NULL ) { -- struct berval ndn; -- entry_decode_dn( &eh, NULL, &ndn ); -- -- if ( !dnIsSuffixScope( &ndn, tool_base, tool_scope ) ) { -- return LDAP_NO_SUCH_OBJECT; -- } -- } --#endif -- --#ifdef SLAP_ZONE_ALLOC -- /* FIXME: will add ctx later */ -- rc = entry_decode( &eh, &e, NULL ); --#else -- rc = entry_decode( &eh, &e ); --#endif -- -- if( rc == LDAP_SUCCESS ) { -- e->e_id = id; --#ifdef BDB_HIER -- if ( slapMode & SLAP_TOOL_READONLY ) { -- struct bdb_info *bdb = (struct bdb_info *) be->be_private; -- EntryInfo *ei = NULL; -- Operation op = {0}; -- Opheader ohdr = {0}; -- -- op.o_hdr = &ohdr; -- op.o_bd = be; -- op.o_tmpmemctx = NULL; -- op.o_tmpmfuncs = &ch_mfuncs; -- -- rc = bdb_cache_find_parent( &op, bdb->bi_cache.c_txn, id, &ei ); -- if ( rc == LDAP_SUCCESS ) { -- bdb_cache_entryinfo_unlock( ei ); -- e->e_private = ei; -- ei->bei_e = e; -- bdb_fix_dn( e, 0 ); -- ei->bei_e = NULL; -- e->e_private = NULL; -- } -- } --#endif -- } --done: -- if ( e != NULL ) { -- *ep = e; -- } -- -- return rc; --} -- --Entry* --bdb_tool_entry_get( BackendDB *be, ID id ) --{ -- Entry *e = NULL; -- -- (void)bdb_tool_entry_get_int( be, id, &e ); -- return e; --} -- --static int bdb_tool_next_id( -- Operation *op, -- DB_TXN *tid, -- Entry *e, -- struct berval *text, -- int hole ) --{ -- struct berval dn = e->e_name; -- struct berval ndn = e->e_nname; -- struct berval pdn, npdn; -- EntryInfo *ei = NULL, eidummy; -- int rc; -- -- if (ndn.bv_len == 0) { -- e->e_id = 0; -- return 0; -- } -- -- rc = bdb_cache_find_ndn( op, tid, &ndn, &ei ); -- if ( ei ) bdb_cache_entryinfo_unlock( ei ); -- if ( rc == DB_NOTFOUND ) { -- if ( !be_issuffix( op->o_bd, &ndn ) ) { -- ID eid = e->e_id; -- dnParent( &dn, &pdn ); -- dnParent( &ndn, &npdn ); -- e->e_name = pdn; -- e->e_nname = npdn; -- rc = bdb_tool_next_id( op, tid, e, text, 1 ); -- e->e_name = dn; -- e->e_nname = ndn; -- if ( rc ) { -- return rc; -- } -- /* If parent didn't exist, it was created just now -- * and its ID is now in e->e_id. Make sure the current -- * entry gets added under the new parent ID. -- */ -- if ( eid != e->e_id ) { -- eidummy.bei_id = e->e_id; -- ei = &eidummy; -- } -- } -- rc = bdb_next_id( op->o_bd, &e->e_id ); -- if ( rc ) { -- snprintf( text->bv_val, text->bv_len, -- "next_id failed: %s (%d)", -- db_strerror(rc), rc ); -- Debug( LDAP_DEBUG_ANY, -- "=> bdb_tool_next_id: %s\n", text->bv_val, 0, 0 ); -- return rc; -- } -- rc = bdb_dn2id_add( op, tid, ei, e ); -- if ( rc ) { -- snprintf( text->bv_val, text->bv_len, -- "dn2id_add failed: %s (%d)", -- db_strerror(rc), rc ); -- Debug( LDAP_DEBUG_ANY, -- "=> bdb_tool_next_id: %s\n", text->bv_val, 0, 0 ); -- } else if ( hole ) { -- if ( nholes == nhmax - 1 ) { -- if ( holes == hbuf ) { -- holes = ch_malloc( nhmax * sizeof(dn_id) * 2 ); -- AC_MEMCPY( holes, hbuf, sizeof(hbuf) ); -- } else { -- holes = ch_realloc( holes, nhmax * sizeof(dn_id) * 2 ); -- } -- nhmax *= 2; -- } -- ber_dupbv( &holes[nholes].dn, &ndn ); -- holes[nholes++].id = e->e_id; -- } -- } else if ( !hole ) { -- unsigned i, j; -- -- e->e_id = ei->bei_id; -- -- for ( i=0; ie_id ) { -- free(holes[i].dn.bv_val); -- for (j=i;j e->e_id ) { -- break; -- } -- } -- } -- return rc; --} -- --static int --bdb_tool_index_add( -- Operation *op, -- DB_TXN *txn, -- Entry *e ) --{ -- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private; -- -- if ( !bdb->bi_nattrs ) -- return 0; -- -- if ( bdb_tool_threads > 1 ) { -- IndexRec *ir; -- int i, rc; -- Attribute *a; -- -- ir = bdb_tool_index_rec; -- memset(ir, 0, bdb->bi_nattrs * sizeof( IndexRec )); -- -- for ( a = e->e_attrs; a != NULL; a = a->a_next ) { -- rc = bdb_index_recset( bdb, a, a->a_desc->ad_type, -- &a->a_desc->ad_tags, ir ); -- if ( rc ) -- return rc; -- } -- bdb_tool_ix_id = e->e_id; -- bdb_tool_ix_op = op; -- ldap_pvt_thread_mutex_lock( &bdb_tool_index_mutex ); -- /* Wait for all threads to be ready */ -- while ( bdb_tool_index_tcount > 0 ) { -- ldap_pvt_thread_cond_wait( &bdb_tool_index_cond_main, -- &bdb_tool_index_mutex ); -- } -- for ( i=1; ie_id, 0 ); -- if ( rc ) -- return rc; -- ldap_pvt_thread_mutex_lock( &bdb_tool_index_mutex ); -- for ( i=1; ibv_val != NULL ); -- assert( text->bv_val[0] == '\0' ); /* overconservative? */ -- -- Debug( LDAP_DEBUG_TRACE, "=> " LDAP_XSTRING(bdb_tool_entry_put) -- "( %ld, \"%s\" )\n", (long) e->e_id, e->e_dn, 0 ); -- -- bdb = (struct bdb_info *) be->be_private; -- -- if (! (slapMode & SLAP_TOOL_QUICK)) { -- rc = TXN_BEGIN( bdb->bi_dbenv, NULL, &tid, -- bdb->bi_db_opflags ); -- if( rc != 0 ) { -- snprintf( text->bv_val, text->bv_len, -- "txn_begin failed: %s (%d)", -- db_strerror(rc), rc ); -- Debug( LDAP_DEBUG_ANY, -- "=> " LDAP_XSTRING(bdb_tool_entry_put) ": %s\n", -- text->bv_val, 0, 0 ); -- return NOID; -- } -- Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_tool_entry_put) ": txn id: %x\n", -- tid->id(tid), 0, 0 ); -- } -- -- op.o_hdr = &ohdr; -- op.o_bd = be; -- op.o_tmpmemctx = NULL; -- op.o_tmpmfuncs = &ch_mfuncs; -- -- /* add dn2id indices */ -- rc = bdb_tool_next_id( &op, tid, e, text, 0 ); -- if( rc != 0 ) { -- goto done; -- } -- --#ifdef USE_TRICKLE -- if (( slapMode & SLAP_TOOL_QUICK ) && (( e->e_id & 0xfff ) == 0xfff )) { -- ldap_pvt_thread_cond_signal( &bdb_tool_trickle_cond ); -- } --#endif -- -- if ( !bdb->bi_linear_index ) -- rc = bdb_tool_index_add( &op, tid, e ); -- if( rc != 0 ) { -- snprintf( text->bv_val, text->bv_len, -- "index_entry_add failed: %s (%d)", -- rc == LDAP_OTHER ? "Internal error" : -- db_strerror(rc), rc ); -- Debug( LDAP_DEBUG_ANY, -- "=> " LDAP_XSTRING(bdb_tool_entry_put) ": %s\n", -- text->bv_val, 0, 0 ); -- goto done; -- } -- -- /* id2entry index */ -- rc = bdb_id2entry_add( be, tid, e ); -- if( rc != 0 ) { -- snprintf( text->bv_val, text->bv_len, -- "id2entry_add failed: %s (%d)", -- db_strerror(rc), rc ); -- Debug( LDAP_DEBUG_ANY, -- "=> " LDAP_XSTRING(bdb_tool_entry_put) ": %s\n", -- text->bv_val, 0, 0 ); -- goto done; -- } -- --done: -- if( rc == 0 ) { -- if ( !( slapMode & SLAP_TOOL_QUICK )) { -- rc = TXN_COMMIT( tid, 0 ); -- if( rc != 0 ) { -- snprintf( text->bv_val, text->bv_len, -- "txn_commit failed: %s (%d)", -- db_strerror(rc), rc ); -- Debug( LDAP_DEBUG_ANY, -- "=> " LDAP_XSTRING(bdb_tool_entry_put) ": %s\n", -- text->bv_val, 0, 0 ); -- e->e_id = NOID; -- } -- } -- -- } else { -- if ( !( slapMode & SLAP_TOOL_QUICK )) { -- TXN_ABORT( tid ); -- snprintf( text->bv_val, text->bv_len, -- "txn_aborted! %s (%d)", -- rc == LDAP_OTHER ? "Internal error" : -- db_strerror(rc), rc ); -- Debug( LDAP_DEBUG_ANY, -- "=> " LDAP_XSTRING(bdb_tool_entry_put) ": %s\n", -- text->bv_val, 0, 0 ); -- } -- e->e_id = NOID; -- } -- -- return e->e_id; --} -- --int bdb_tool_entry_reindex( -- BackendDB *be, -- ID id, -- AttributeDescription **adv ) --{ -- struct bdb_info *bi = (struct bdb_info *) be->be_private; -- int rc; -- Entry *e; -- DB_TXN *tid = NULL; -- Operation op = {0}; -- Opheader ohdr = {0}; -- -- Debug( LDAP_DEBUG_ARGS, -- "=> " LDAP_XSTRING(bdb_tool_entry_reindex) "( %ld )\n", -- (long) id, 0, 0 ); -- assert( tool_base == NULL ); -- assert( tool_filter == NULL ); -- -- /* No indexes configured, nothing to do. Could return an -- * error here to shortcut things. -- */ -- if (!bi->bi_attrs) { -- return 0; -- } -- -- /* Check for explicit list of attrs to index */ -- if ( adv ) { -- int i, j, n; -- -- if ( bi->bi_attrs[0]->ai_desc != adv[0] ) { -- /* count */ -- for ( n = 0; adv[n]; n++ ) ; -- -- /* insertion sort */ -- for ( i = 0; i < n; i++ ) { -- AttributeDescription *ad = adv[i]; -- for ( j = i-1; j>=0; j--) { -- if ( SLAP_PTRCMP( adv[j], ad ) <= 0 ) break; -- adv[j+1] = adv[j]; -- } -- adv[j+1] = ad; -- } -- } -- -- for ( i = 0; adv[i]; i++ ) { -- if ( bi->bi_attrs[i]->ai_desc != adv[i] ) { -- for ( j = i+1; j < bi->bi_nattrs; j++ ) { -- if ( bi->bi_attrs[j]->ai_desc == adv[i] ) { -- AttrInfo *ai = bi->bi_attrs[i]; -- bi->bi_attrs[i] = bi->bi_attrs[j]; -- bi->bi_attrs[j] = ai; -- break; -- } -- } -- if ( j == bi->bi_nattrs ) { -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_tool_entry_reindex) -- ": no index configured for %s\n", -- adv[i]->ad_cname.bv_val, 0, 0 ); -- return -1; -- } -- } -- } -- bi->bi_nattrs = i; -- } -- -- /* Get the first attribute to index */ -- if (bi->bi_linear_index && !index_nattrs) { -- index_nattrs = bi->bi_nattrs - 1; -- bi->bi_nattrs = 1; -- } -- -- e = bdb_tool_entry_get( be, id ); -- -- if( e == NULL ) { -- Debug( LDAP_DEBUG_ANY, -- LDAP_XSTRING(bdb_tool_entry_reindex) -- ": could not locate id=%ld\n", -- (long) id, 0, 0 ); -- return -1; -- } -- -- op.o_hdr = &ohdr; -- op.o_bd = be; -- op.o_tmpmemctx = NULL; -- op.o_tmpmfuncs = &ch_mfuncs; -- -- if (! (slapMode & SLAP_TOOL_QUICK)) { -- rc = TXN_BEGIN( bi->bi_dbenv, NULL, &tid, bi->bi_db_opflags ); -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, -- "=> " LDAP_XSTRING(bdb_tool_entry_reindex) ": " -- "txn_begin failed: %s (%d)\n", -- db_strerror(rc), rc, 0 ); -- goto done; -- } -- Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_tool_entry_reindex) ": txn id: %x\n", -- tid->id(tid), 0, 0 ); -- } -- -- /* -- * just (re)add them for now -- * assume that some other routine (not yet implemented) -- * will zap index databases -- * -- */ -- -- Debug( LDAP_DEBUG_TRACE, -- "=> " LDAP_XSTRING(bdb_tool_entry_reindex) "( %ld, \"%s\" )\n", -- (long) id, e->e_dn, 0 ); -- -- rc = bdb_tool_index_add( &op, tid, e ); -- --done: -- if( rc == 0 ) { -- if (! (slapMode & SLAP_TOOL_QUICK)) { -- rc = TXN_COMMIT( tid, 0 ); -- if( rc != 0 ) { -- Debug( LDAP_DEBUG_ANY, -- "=> " LDAP_XSTRING(bdb_tool_entry_reindex) -- ": txn_commit failed: %s (%d)\n", -- db_strerror(rc), rc, 0 ); -- e->e_id = NOID; -- } -- } -- -- } else { -- if (! (slapMode & SLAP_TOOL_QUICK)) { -- TXN_ABORT( tid ); -- Debug( LDAP_DEBUG_ANY, -- "=> " LDAP_XSTRING(bdb_tool_entry_reindex) -- ": txn_aborted! %s (%d)\n", -- db_strerror(rc), rc, 0 ); -- } -- e->e_id = NOID; -- } -- bdb_entry_release( &op, e, 0 ); -- -- return rc; --} -- --ID bdb_tool_entry_modify( -- BackendDB *be, -- Entry *e, -- struct berval *text ) --{ -- int rc; -- struct bdb_info *bdb; -- DB_TXN *tid = NULL; -- Operation op = {0}; -- Opheader ohdr = {0}; -- -- assert( be != NULL ); -- assert( slapMode & SLAP_TOOL_MODE ); -- -- assert( text != NULL ); -- assert( text->bv_val != NULL ); -- assert( text->bv_val[0] == '\0' ); /* overconservative? */ -- -- assert ( e->e_id != NOID ); -- -- Debug( LDAP_DEBUG_TRACE, -- "=> " LDAP_XSTRING(bdb_tool_entry_modify) "( %ld, \"%s\" )\n", -- (long) e->e_id, e->e_dn, 0 ); -- -- bdb = (struct bdb_info *) be->be_private; -- -- if (! (slapMode & SLAP_TOOL_QUICK)) { -- if( cursor ) { -- cursor->c_close( cursor ); -- cursor = NULL; -- } -- rc = TXN_BEGIN( bdb->bi_dbenv, NULL, &tid, -- bdb->bi_db_opflags ); -- if( rc != 0 ) { -- snprintf( text->bv_val, text->bv_len, -- "txn_begin failed: %s (%d)", -- db_strerror(rc), rc ); -- Debug( LDAP_DEBUG_ANY, -- "=> " LDAP_XSTRING(bdb_tool_entry_modify) ": %s\n", -- text->bv_val, 0, 0 ); -- return NOID; -- } -- Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_tool_entry_modify) ": txn id: %x\n", -- tid->id(tid), 0, 0 ); -- } -- -- op.o_hdr = &ohdr; -- op.o_bd = be; -- op.o_tmpmemctx = NULL; -- op.o_tmpmfuncs = &ch_mfuncs; -- -- /* id2entry index */ -- rc = bdb_id2entry_update( be, tid, e ); -- if( rc != 0 ) { -- snprintf( text->bv_val, text->bv_len, -- "id2entry_add failed: %s (%d)", -- db_strerror(rc), rc ); -- Debug( LDAP_DEBUG_ANY, -- "=> " LDAP_XSTRING(bdb_tool_entry_modify) ": %s\n", -- text->bv_val, 0, 0 ); -- goto done; -- } -- --done: -- if( rc == 0 ) { -- if (! (slapMode & SLAP_TOOL_QUICK)) { -- rc = TXN_COMMIT( tid, 0 ); -- if( rc != 0 ) { -- snprintf( text->bv_val, text->bv_len, -- "txn_commit failed: %s (%d)", -- db_strerror(rc), rc ); -- Debug( LDAP_DEBUG_ANY, -- "=> " LDAP_XSTRING(bdb_tool_entry_modify) ": " -- "%s\n", text->bv_val, 0, 0 ); -- e->e_id = NOID; -- } -- } -- -- } else { -- if (! (slapMode & SLAP_TOOL_QUICK)) { -- TXN_ABORT( tid ); -- snprintf( text->bv_val, text->bv_len, -- "txn_aborted! %s (%d)", -- db_strerror(rc), rc ); -- Debug( LDAP_DEBUG_ANY, -- "=> " LDAP_XSTRING(bdb_tool_entry_modify) ": %s\n", -- text->bv_val, 0, 0 ); -- } -- e->e_id = NOID; -- } -- -- return e->e_id; --} -- --#ifdef BDB_TOOL_IDL_CACHING --static int --bdb_tool_idl_cmp( const void *v1, const void *v2 ) --{ -- const bdb_tool_idl_cache *c1 = v1, *c2 = v2; -- int rc; -- -- if (( rc = c1->kstr.bv_len - c2->kstr.bv_len )) return rc; -- return memcmp( c1->kstr.bv_val, c2->kstr.bv_val, c1->kstr.bv_len ); --} -- --static int --bdb_tool_idl_flush_one( void *v1, void *arg ) --{ -- bdb_tool_idl_cache *ic = v1; -- DB *db = arg; -- struct bdb_info *bdb = bdb_tool_info; -- bdb_tool_idl_cache_entry *ice; -- DBC *curs; -- DBT key, data; -- int i, rc; -- ID id, nid; -- -- /* Freshly allocated, ignore it */ -- if ( !ic->head && ic->count <= BDB_IDL_DB_SIZE ) { -- return 0; -- } -- -- rc = db->cursor( db, NULL, &curs, 0 ); -- if ( rc ) -- return -1; -- -- DBTzero( &key ); -- DBTzero( &data ); -- -- bv2DBT( &ic->kstr, &key ); -- -- data.size = data.ulen = sizeof( ID ); -- data.flags = DB_DBT_USERMEM; -- data.data = &nid; -- -- rc = curs->c_get( curs, &key, &data, DB_SET ); -- /* If key already exists and we're writing a range... */ -- if ( rc == 0 && ic->count > BDB_IDL_DB_SIZE ) { -- /* If it's not currently a range, must delete old info */ -- if ( nid ) { -- /* Skip lo */ -- while ( curs->c_get( curs, &key, &data, DB_NEXT_DUP ) == 0 ) -- curs->c_del( curs, 0 ); -- -- nid = 0; -- /* Store range marker */ -- curs->c_put( curs, &key, &data, DB_KEYFIRST ); -- } else { -- -- /* Skip lo */ -- rc = curs->c_get( curs, &key, &data, DB_NEXT_DUP ); -- -- /* Get hi */ -- rc = curs->c_get( curs, &key, &data, DB_NEXT_DUP ); -- -- /* Delete hi */ -- curs->c_del( curs, 0 ); -- } -- BDB_ID2DISK( ic->last, &nid ); -- curs->c_put( curs, &key, &data, DB_KEYLAST ); -- rc = 0; -- } else if ( rc && rc != DB_NOTFOUND ) { -- rc = -1; -- } else if ( ic->count > BDB_IDL_DB_SIZE ) { -- /* range, didn't exist before */ -- nid = 0; -- rc = curs->c_put( curs, &key, &data, DB_KEYLAST ); -- if ( rc == 0 ) { -- BDB_ID2DISK( ic->first, &nid ); -- rc = curs->c_put( curs, &key, &data, DB_KEYLAST ); -- if ( rc == 0 ) { -- BDB_ID2DISK( ic->last, &nid ); -- rc = curs->c_put( curs, &key, &data, DB_KEYLAST ); -- } -- } -- if ( rc ) { -- rc = -1; -- } -- } else { -- int n; -- -- /* Just a normal write */ -- rc = 0; -- for ( ice = ic->head, n=0; ice; ice = ice->next, n++ ) { -- int end; -- if ( ice->next ) { -- end = IDBLOCK; -- } else { -- end = ic->count & (IDBLOCK-1); -- if ( !end ) -- end = IDBLOCK; -- } -- for ( i=0; iids[i] ) continue; -- BDB_ID2DISK( ice->ids[i], &nid ); -- rc = curs->c_put( curs, &key, &data, DB_NODUPDATA ); -- if ( rc ) { -- if ( rc == DB_KEYEXIST ) { -- rc = 0; -- continue; -- } -- rc = -1; -- break; -- } -- } -- if ( rc ) { -- rc = -1; -- break; -- } -- } -- if ( ic->head ) { -- ldap_pvt_thread_mutex_lock( &bdb->bi_idl_tree_lrulock ); -- ic->tail->next = bdb_tool_idl_free_list; -- bdb_tool_idl_free_list = ic->head; -- bdb->bi_idl_cache_size -= n; -- ldap_pvt_thread_mutex_unlock( &bdb->bi_idl_tree_lrulock ); -- } -- } -- if ( ic != db->app_private ) { -- ch_free( ic ); -- } else { -- ic->head = ic->tail = NULL; -- } -- curs->c_close( curs ); -- return rc; --} -- --static int --bdb_tool_idl_flush_db( DB *db, bdb_tool_idl_cache *ic ) --{ -- Avlnode *root = db->app_private; -- int rc; -- -- db->app_private = ic; -- rc = avl_apply( root, bdb_tool_idl_flush_one, db, -1, AVL_INORDER ); -- avl_free( root, NULL ); -- db->app_private = NULL; -- if ( rc != -1 ) -- rc = 0; -- return rc; --} -- --static int --bdb_tool_idl_flush( BackendDB *be ) --{ -- struct bdb_info *bdb = (struct bdb_info *) be->be_private; -- DB *db; -- Avlnode *root; -- int i, rc = 0; -- -- for ( i=BDB_NDB; i < bdb->bi_ndatabases; i++ ) { -- db = bdb->bi_databases[i]->bdi_db; -- if ( !db->app_private ) continue; -- rc = bdb_tool_idl_flush_db( db, NULL ); -- if ( rc ) -- break; -- } -- if ( !rc ) { -- bdb->bi_idl_cache_size = 0; -- } -- return rc; --} -- --int bdb_tool_idl_add( -- BackendDB *be, -- DB *db, -- DB_TXN *txn, -- DBT *key, -- ID id ) --{ -- struct bdb_info *bdb = (struct bdb_info *) be->be_private; -- bdb_tool_idl_cache *ic, itmp; -- bdb_tool_idl_cache_entry *ice; -- int rc; -- -- if ( !bdb->bi_idl_cache_max_size ) -- return bdb_idl_insert_key( be, db, txn, key, id ); -- -- DBT2bv( key, &itmp.kstr ); -- -- ic = avl_find( (Avlnode *)db->app_private, &itmp, bdb_tool_idl_cmp ); -- -- /* No entry yet, create one */ -- if ( !ic ) { -- DBC *curs; -- DBT data; -- ID nid; -- int rc; -- -- ic = ch_malloc( sizeof( bdb_tool_idl_cache ) + itmp.kstr.bv_len ); -- ic->kstr.bv_len = itmp.kstr.bv_len; -- ic->kstr.bv_val = (char *)(ic+1); -- AC_MEMCPY( ic->kstr.bv_val, itmp.kstr.bv_val, ic->kstr.bv_len ); -- ic->head = ic->tail = NULL; -- ic->last = 0; -- ic->count = 0; -- avl_insert( (Avlnode **)&db->app_private, ic, bdb_tool_idl_cmp, -- avl_dup_error ); -- -- /* load existing key count here */ -- rc = db->cursor( db, NULL, &curs, 0 ); -- if ( rc ) return rc; -- -- data.ulen = sizeof( ID ); -- data.flags = DB_DBT_USERMEM; -- data.data = &nid; -- rc = curs->c_get( curs, key, &data, DB_SET ); -- if ( rc == 0 ) { -- if ( nid == 0 ) { -- ic->count = BDB_IDL_DB_SIZE+1; -- } else { -- db_recno_t count; -- -- curs->c_count( curs, &count, 0 ); -- ic->count = count; -- BDB_DISK2ID( &nid, &ic->first ); -- } -- } -- curs->c_close( curs ); -- } -- /* are we a range already? */ -- if ( ic->count > BDB_IDL_DB_SIZE ) { -- ic->last = id; -- return 0; -- /* Are we at the limit, and converting to a range? */ -- } else if ( ic->count == BDB_IDL_DB_SIZE ) { -- int n; -- for ( ice = ic->head, n=0; ice; ice = ice->next, n++ ) -- /* counting */ ; -- if ( n ) { -- ldap_pvt_thread_mutex_lock( &bdb->bi_idl_tree_lrulock ); -- ic->tail->next = bdb_tool_idl_free_list; -- bdb_tool_idl_free_list = ic->head; -- bdb->bi_idl_cache_size -= n; -- ldap_pvt_thread_mutex_unlock( &bdb->bi_idl_tree_lrulock ); -- } -- ic->head = ic->tail = NULL; -- ic->last = id; -- ic->count++; -- return 0; -- } -- /* No free block, create that too */ -- if ( !ic->tail || ( ic->count & (IDBLOCK-1)) == 0) { -- ice = NULL; -- ldap_pvt_thread_mutex_lock( &bdb->bi_idl_tree_lrulock ); -- if ( bdb->bi_idl_cache_size >= bdb->bi_idl_cache_max_size ) { -- ldap_pvt_thread_mutex_unlock( &bdb->bi_idl_tree_lrulock ); -- rc = bdb_tool_idl_flush_db( db, ic ); -- if ( rc ) -- return rc; -- avl_insert( (Avlnode **)&db->app_private, ic, bdb_tool_idl_cmp, -- avl_dup_error ); -- ldap_pvt_thread_mutex_lock( &bdb->bi_idl_tree_lrulock ); -- } -- bdb->bi_idl_cache_size++; -- if ( bdb_tool_idl_free_list ) { -- ice = bdb_tool_idl_free_list; -- bdb_tool_idl_free_list = ice->next; -- } -- ldap_pvt_thread_mutex_unlock( &bdb->bi_idl_tree_lrulock ); -- if ( !ice ) { -- ice = ch_malloc( sizeof( bdb_tool_idl_cache_entry )); -- } -- memset( ice, 0, sizeof( *ice )); -- if ( !ic->head ) { -- ic->head = ice; -- } else { -- ic->tail->next = ice; -- } -- ic->tail = ice; -- if ( !ic->count ) -- ic->first = id; -- } -- ice = ic->tail; -- ice->ids[ ic->count & (IDBLOCK-1) ] = id; -- ic->count++; -- -- return 0; --} --#endif -- --#ifdef USE_TRICKLE --static void * --bdb_tool_trickle_task( void *ctx, void *ptr ) --{ -- DB_ENV *env = ptr; -- int wrote; -- -- ldap_pvt_thread_mutex_lock( &bdb_tool_trickle_mutex ); -- bdb_tool_trickle_active = 1; -- ldap_pvt_thread_cond_signal( &bdb_tool_trickle_cond_end ); -- while ( 1 ) { -- ldap_pvt_thread_cond_wait( &bdb_tool_trickle_cond, -- &bdb_tool_trickle_mutex ); -- if ( slapd_shutdown ) -- break; -- env->memp_trickle( env, 30, &wrote ); -- } -- bdb_tool_trickle_active = 0; -- ldap_pvt_thread_cond_signal( &bdb_tool_trickle_cond_end ); -- ldap_pvt_thread_mutex_unlock( &bdb_tool_trickle_mutex ); -- -- return NULL; --} --#endif -- --static void * --bdb_tool_index_task( void *ctx, void *ptr ) --{ -- int base = *(int *)ptr; -- -- free( ptr ); -- while ( 1 ) { -- ldap_pvt_thread_mutex_lock( &bdb_tool_index_mutex ); -- bdb_tool_index_tcount--; -- if ( !bdb_tool_index_tcount ) -- ldap_pvt_thread_cond_signal( &bdb_tool_index_cond_main ); -- ldap_pvt_thread_cond_wait( &bdb_tool_index_cond_work, -- &bdb_tool_index_mutex ); -- if ( slapd_shutdown ) { -- bdb_tool_index_tcount--; -- if ( !bdb_tool_index_tcount ) -- ldap_pvt_thread_cond_signal( &bdb_tool_index_cond_main ); -- ldap_pvt_thread_mutex_unlock( &bdb_tool_index_mutex ); -- break; -- } -- ldap_pvt_thread_mutex_unlock( &bdb_tool_index_mutex ); -- -- bdb_tool_index_threads[base] = bdb_index_recrun( bdb_tool_ix_op, -- bdb_tool_info, bdb_tool_index_rec, bdb_tool_ix_id, base ); -- } -- -- return NULL; --} -diff --git a/servers/slapd/back-bdb/trans.c b/servers/slapd/back-bdb/trans.c -deleted file mode 100644 -index 1971d29..0000000 ---- a/servers/slapd/back-bdb/trans.c -+++ /dev/null -@@ -1,56 +0,0 @@ --/* trans.c - bdb backend transaction routines */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ -- --#include "portable.h" -- --#include --#include -- --#include "back-bdb.h" --#include "lber_pvt.h" --#include "lutil.h" -- -- --/* Congestion avoidance code -- * for Deadlock Rollback -- */ -- --void --bdb_trans_backoff( int num_retries ) --{ -- int i; -- int delay = 0; -- int pow_retries = 1; -- unsigned long key = 0; -- unsigned long max_key = -1; -- struct timeval timeout; -- -- lutil_entropy( (unsigned char *) &key, sizeof( unsigned long )); -- -- for ( i = 0; i < num_retries; i++ ) { -- if ( i >= 5 ) break; -- pow_retries *= 4; -- } -- -- delay = 16384 * (key * (double) pow_retries / (double) max_key); -- delay = delay ? delay : 1; -- -- Debug( LDAP_DEBUG_TRACE, "delay = %d, num_retries = %d\n", delay, num_retries, 0 ); -- -- timeout.tv_sec = delay / 1000000; -- timeout.tv_usec = delay % 1000000; -- select( 0, NULL, NULL, NULL, &timeout ); --} -diff --git a/servers/slapd/back-hdb/Makefile.in b/servers/slapd/back-hdb/Makefile.in -deleted file mode 100644 -index 150cee5..0000000 ---- a/servers/slapd/back-hdb/Makefile.in -+++ /dev/null -@@ -1,70 +0,0 @@ --# Makefile for back-hdb --# $OpenLDAP$ --## This work is part of OpenLDAP Software . --## --## Copyright 1998-2020 The OpenLDAP Foundation. --## All rights reserved. --## --## Redistribution and use in source and binary forms, with or without --## modification, are permitted only as authorized by the OpenLDAP --## Public License. --## --## A copy of this license is available in the file LICENSE in the --## top-level directory of the distribution or, alternatively, at --## . --# --## Copyright 2003 Howard Chu @ Symas Corp. See master COPYRIGHT file for terms. -- --XXDIR = $(srcdir)/../back-bdb -- --XXSRCS = init.c tools.c config.c \ -- add.c bind.c compare.c delete.c modify.c modrdn.c search.c \ -- extended.c referral.c operational.c \ -- attr.c index.c key.c dbcache.c filterindex.c trans.c \ -- dn2entry.c dn2id.c error.c id2entry.c idl.c nextid.c cache.c \ -- monitor.c --SRCS = $(XXSRCS) --OBJS = init.lo tools.lo config.lo \ -- add.lo bind.lo compare.lo delete.lo modify.lo modrdn.lo search.lo \ -- extended.lo referral.lo operational.lo \ -- attr.lo index.lo key.lo dbcache.lo filterindex.lo trans.lo \ -- dn2entry.lo dn2id.lo error.lo id2entry.lo idl.lo nextid.lo cache.lo \ -- monitor.lo -- --LDAP_INCDIR= ../../../include --LDAP_LIBDIR= ../../../libraries -- --BUILD_OPT = "--enable-hdb" --BUILD_MOD = @BUILD_HDB@ -- --mod_DEFS = -DSLAPD_IMPORT --MOD_DEFS = $(@BUILD_HDB@_DEFS) --MOD_LIBS = $(BDB_LIBS) -- --shared_LDAP_LIBS = $(LDAP_LIBLDAP_R_LA) $(LDAP_LIBLBER_LA) --NT_LINK_LIBS = -L.. -lslapd $(@BUILD_LIBS_DYNAMIC@_LDAP_LIBS) --UNIX_LINK_LIBS = $(@BUILD_LIBS_DYNAMIC@_LDAP_LIBS) -- --.links : Makefile -- @for i in $(XXSRCS); do \ -- $(RM) $$i; \ -- $(LN_S) $(XXDIR)/$$i . ; \ -- done -- touch .links -- --$(XXSRCS) : .links -- --LIBBASE = back_hdb -- --XINCPATH = -I.. -I$(srcdir)/.. -I$(srcdir) -I$(XXDIR) --XDEFS = $(MODULES_CPPFLAGS) -- --depend-local-lib: .links -- --all-local-lib: ../.backend -- --../.backend: lib$(LIBBASE).a -- @touch $@ -- --veryclean-local: FORCE -- $(RM) $(XXSRCS) .links -diff --git a/servers/slapd/back-hdb/back-bdb.h b/servers/slapd/back-hdb/back-bdb.h -deleted file mode 100644 -index 9f92d8b..0000000 ---- a/servers/slapd/back-hdb/back-bdb.h -+++ /dev/null -@@ -1,31 +0,0 @@ --/* back-bdb.h - hdb back-end header file */ --/* $OpenLDAP$ */ --/* This work is part of OpenLDAP Software . -- * -- * Copyright 2000-2020 The OpenLDAP Foundation. -- * Portions Copyright 2003 Howard Chu @ Symas Corp. -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted only as authorized by the OpenLDAP -- * Public License. -- * -- * A copy of this license is available in the file LICENSE in the -- * top-level directory of the distribution or, alternatively, at -- * . -- */ --/* ACKNOWLEDGEMENTS: -- * This work was originally developed by Howard Chu for inclusion -- * in OpenLDAP Software. -- */ -- --#ifndef _BACK_HDB_H_ --#define _BACK_HDB_H_ -- --#ifndef BDB_HIER --#define BDB_HIER 1 --#endif -- --#include "../back-bdb/back-bdb.h" -- --#endif /* _BACK_HDB_H_ */ -diff --git a/servers/slapd/back-monitor/init.c b/servers/slapd/back-monitor/init.c -index b264115..ce9a34a 100644 ---- a/servers/slapd/back-monitor/init.c -+++ b/servers/slapd/back-monitor/init.c -@@ -1991,8 +1991,8 @@ monitor_back_initialize( - { "olmGenericAttributes", "olmSubSystemAttributes:0" }, - { "olmDatabaseAttributes", "olmSubSystemAttributes:1" }, - -- /* for example, back-bdb specific attrs -- * are in "olmDatabaseAttributes:1" -+ /* for example, back-mdb specific attrs -+ * are in "olmDatabaseAttributes:12" - * - * NOTE: developers, please record here OID assignments - * for other modules */ -@@ -2002,8 +2002,8 @@ monitor_back_initialize( - { "olmGenericObjectClasses", "olmSubSystemObjectClasses:0" }, - { "olmDatabaseObjectClasses", "olmSubSystemObjectClasses:1" }, - -- /* for example, back-bdb specific objectClasses -- * are in "olmDatabaseObjectClasses:1" -+ /* for example, back-mdb specific objectClasses -+ * are in "olmDatabaseObjectClasses:12" - * - * NOTE: developers, please record here OID assignments - * for other modules */ -diff --git a/servers/slapd/bconfig.c b/servers/slapd/bconfig.c -index 0c6a7f5..538eef1 100644 ---- a/servers/slapd/bconfig.c -+++ b/servers/slapd/bconfig.c -@@ -238,7 +238,7 @@ static OidRec OidMacros[] = { - * Backend/Database registry - * - * OLcfg{Bk|Db}{Oc|At}:0 -> common -- * OLcfg{Bk|Db}{Oc|At}:1 -> back-bdb(/back-hdb) -+ * OLcfg{Bk|Db}{Oc|At}:1 -> back-bdb(/back-hdb) (removed) - * OLcfg{Bk|Db}{Oc|At}:2 -> back-ldif - * OLcfg{Bk|Db}{Oc|At}:3 -> back-ldap/meta - * OLcfg{Bk|Db}{Oc|At}:4 -> back-monitor -diff --git a/servers/slapd/dn.c b/servers/slapd/dn.c -index 06698b0..89b80e3 100644 ---- a/servers/slapd/dn.c -+++ b/servers/slapd/dn.c -@@ -1131,8 +1131,7 @@ rdn_validate( struct berval *rdn ) - - /* build_new_dn: - * -- * Used by back-bdb back_modrdn to create the new dn of entries being -- * renamed. -+ * Used to create the new dn of entries being renamed. - * - * new_dn = parent (p_dn) + separator + rdn (newrdn) + null. - */ -diff --git a/servers/slapd/overlays/pcache.c b/servers/slapd/overlays/pcache.c -index f88ca09..0d7ff8c 100644 ---- a/servers/slapd/overlays/pcache.c -+++ b/servers/slapd/overlays/pcache.c -@@ -5616,7 +5616,7 @@ cleanup:; - cm->monitor_cb = (void *)cb; - - /* we don't need to keep track of the attributes, because -- * bdb_monitor_free() takes care of everything */ -+ * mdb_monitor_free() takes care of everything */ - if ( a != NULL ) { - attrs_free( a ); - } -@@ -5700,7 +5700,7 @@ pcache_initialize() - } - #endif /* PCACHE_EXOP_QUERY_DELETE */ - -- argv[ 0 ] = "back-bdb/back-hdb monitor"; -+ argv[ 0 ] = "back-mdb monitor"; - c.argv = argv; - c.argc = 3; - c.fname = argv[0]; -diff --git a/servers/slapd/slap.h b/servers/slapd/slap.h -index f003bb9..591f49d 100644 ---- a/servers/slapd/slap.h -+++ b/servers/slapd/slap.h -@@ -1805,7 +1805,6 @@ struct BackendDB { - - /* - * define to honor hasSubordinates operational attribute in search filters -- * (in previous use there was a flaw with back-bdb; now it is fixed). - */ - #define be_has_subordinates bd_info->bi_has_subordinates - -diff --git a/servers/slapd/slapd.ldif b/servers/slapd/slapd.ldif -index 5aba54d..b2b38ea 100644 ---- a/servers/slapd/slapd.ldif -+++ b/servers/slapd/slapd.ldif -@@ -30,8 +30,7 @@ olcPidFile: %LOCALSTATEDIR%/run/slapd.pid - #objectClass: olcModuleList - #cn: module - #olcModulepath: %MODULEDIR% --#olcModuleload: back_bdb.la --#olcModuleload: back_hdb.la -+#olcModuleload: back_mdb.la - #olcModuleload: back_ldap.la - #olcModuleload: back_passwd.la - #olcModuleload: back_shell.la -diff --git a/tests/Makefile.in b/tests/Makefile.in -index d841846..ef98813 100644 ---- a/tests/Makefile.in -+++ b/tests/Makefile.in -@@ -16,15 +16,11 @@ - RUN=./run - SUBDIRS= progs - --BUILD_BDB=@BUILD_BDB@ --BUILD_HDB=@BUILD_HDB@ - BUILD_MDB=@BUILD_MDB@ - BUILD_SQL=@BUILD_SQL@ - - # test primary backends (default) - test tests: -- @$(MAKE) bdb -- @$(MAKE) hdb - @$(MAKE) mdb - - # test all backends -@@ -32,22 +28,6 @@ alltests: tests - @$(MAKE) sql - @$(MAKE) ldif - --bdb test-bdb: bdb-$(BUILD_BDB) --bdb-no: -- @echo "run configure with --enable-bdb to run BDB tests" -- --bdb-yes bdb-mod: FORCE -- @echo "Initiating LDAP tests for BDB..." -- @$(RUN) -b bdb all -- --hdb test-hdb: hdb-$(BUILD_HDB) --hdb-no: -- @echo "run configure with --enable-hdb to run HDB tests" -- --hdb-yes hdb-mod: FORCE -- @echo "Initiating LDAP tests for HDB..." -- @$(RUN) -b hdb all -- - mdb test-mdb: mdb-$(BUILD_MDB) - mdb-no: - @echo "run configure with --enable-mdb to run MDB tests" -@@ -70,26 +50,10 @@ ldif test-ldif: FORCE - - regressions: FORCE - @echo "Testing (available) ITS regressions" -- @$(MAKE) bdb-its -- @$(MAKE) hdb-its - @$(MAKE) mdb-its - - its: regressions - --bdb-its: bdb-its-$(BUILD_BDB) --bdb-its-no: -- @echo "run configure with --enable-bdb to run BDB ITS regressions" -- --bdb-its-yes bdb-its-mod: FORCE -- @$(RUN) -b bdb its-all -- --hdb-its: hdb-its-$(BUILD_HDB) --hdb-its-no: -- @echo "run configure with --enable-hdb to run HDB ITS regressions" -- --hdb-its-yes hdb-its-mod: FORCE -- @$(RUN) -b hdb its-all -- - mdb-its: mdb-its-$(BUILD_MDB) - mdb-its-no: - @echo "run configure with --enable-mdb to run MDB ITS regressions" -diff --git a/tests/README b/tests/README -index 1a25df8..a3b5d2f 100644 ---- a/tests/README -+++ b/tests/README -@@ -2,8 +2,6 @@ This directory contains a series of test scripts which are used to - verify basic functionality of the LDAP libraries and slapd. - - To run all of the tests, type "make test". -- To run BDB tests, type "make bdb". -- To run HDB tests, type "make hdb". - To run MDB tests, type "make mdb". - To run SQL tests, define SLAPD_USE_SQL= and type - "make sql"; define SLAPD_USE_SQLWRITE=yes -diff --git a/tests/data/regressions/its4184/its4184 b/tests/data/regressions/its4184/its4184 -index 08f9f1c..4170f05 100755 ---- a/tests/data/regressions/its4184/its4184 -+++ b/tests/data/regressions/its4184/its4184 -@@ -16,10 +16,6 @@ - echo "running defines.sh" - . $SRCDIR/scripts/defines.sh - --if test "$BACKEND" != "bdb" && test "$BACKEND" != "hdb" ; then -- echo "Warning: this test is known to affect bdb and hdb, although it may impact other backends as well." --fi -- - mkdir -p $DBDIR1A $DBDIR2A - - ITS=4184 -diff --git a/tests/data/regressions/its4448/its4448 b/tests/data/regressions/its4448/its4448 -index 7f50999..9319374 100755 ---- a/tests/data/regressions/its4448/its4448 -+++ b/tests/data/regressions/its4448/its4448 -@@ -47,22 +47,6 @@ ITS=4448 - ITSDIR=$DATADIR/regressions/its$ITS - ITSCONF=$ITSDIR/slapd-meta.conf - --# NOTE: this could be added to all tests... --if test "$BACKEND" = "bdb" || test "$BACKEND" = "hdb" ; then -- if test "x$DB_CONFIG" != "x" ; then \ -- if test -f $DB_CONFIG ; then -- echo "==> using DB_CONFIG \"$DB_CONFIG\"" -- cp $DB_CONFIG $DBDIR1 -- cp $DB_CONFIG $DBDIR2 -- else -- echo "==> DB_CONFIG must point to a valid file (ignored)" -- fi -- else -- echo "==> set \"DB_CONFIG\" to the DB_CONFIG file you want to use for the test." -- fi -- echo "" --fi -- - echo "Starting slapd on TCP/IP port $PORT1..." - . $CONFFILTER $BACKEND $MONITORDB < $CONF > $CONF1 - $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & -diff --git a/tests/data/slapd-proxyauthz.conf b/tests/data/slapd-proxyauthz.conf -index 2ff6563..b28d60d 100644 ---- a/tests/data/slapd-proxyauthz.conf -+++ b/tests/data/slapd-proxyauthz.conf -@@ -64,10 +64,6 @@ pcachetemplate (cn=) 0 86400 86400 86400 180 - - pcachebind (cn=) 0 3600 sub ou=people,dc=example,dc=com - --#bdb#cachesize 20 --#hdb#cachesize 20 --#bdb#dbnosync --#hdb#dbnosync - #mdb#dbnosync - - #~null~#directory @TESTDIR@/db.2.a -diff --git a/tests/data/slapd-proxycache.conf b/tests/data/slapd-proxycache.conf -index b96d850..db3b60e 100644 ---- a/tests/data/slapd-proxycache.conf -+++ b/tests/data/slapd-proxycache.conf -@@ -54,10 +54,6 @@ pcachetemplate (mail=) 0 @TTL@ @NTTL@ @STTL@ - pcachetemplate (&(objectclass=)(uid=)) 1 @TTL@ @NTTL@ @STTL@ @TTR@ - pcachebind (&(objectclass=person)(uid=)) 1 @BTTR@ sub "ou=Alumni Association,ou=people,dc=example,dc=com" - --#bdb#cachesize 20 --#hdb#cachesize 20 --#bdb#dbnosync --#hdb#dbnosync - #mdb#dbnosync - - #~null~#directory @TESTDIR@/db.2.a -diff --git a/tests/data/slapd-ref-slave.conf b/tests/data/slapd-ref-slave.conf -index 3d30ca7..5d8d83f 100644 ---- a/tests/data/slapd-ref-slave.conf -+++ b/tests/data/slapd-ref-slave.conf -@@ -34,8 +34,6 @@ argsfile @TESTDIR@/slapd.2.args - referral "@URI1@" - - database @BACKEND@ --#bdb#cachesize 0 --#hdb#cachesize 0 - - suffix "o=University of Mich,c=US" - rootdn "cn=Manager,o=University of Mich,c=US" -diff --git a/tests/data/slapd.conf b/tests/data/slapd.conf -index 97c883b..309eb5a 100644 ---- a/tests/data/slapd.conf -+++ b/tests/data/slapd.conf -@@ -44,8 +44,6 @@ rootpw secret - #~null~#directory @TESTDIR@/db.1.a - #indexdb#index objectClass eq - #indexdb#index cn,sn,uid pres,eq,sub --#bdb#checkpoint 1024 5 --#hdb#checkpoint 1024 5 - #mdb#maxsize 33554432 - #ndb#dbname db_1 - #ndb#include @DATADIR@/ndb.conf -diff --git a/tests/run.in b/tests/run.in -index 8830dd4..6705265 100644 ---- a/tests/run.in -+++ b/tests/run.in -@@ -24,8 +24,6 @@ EGREP_CMD="@EGREP@" - export SRCDIR TOPSRCDIR LN_S EGREP_CMD - - # backends known to ./run -b (used to deduce $BACKENDTYPE) --AC_bdb=@BUILD_BDB@ --AC_hdb=@BUILD_HDB@ - AC_ldif=yes - AC_mdb=@BUILD_MDB@ - AC_null=@BUILD_NULL@ -@@ -69,7 +67,7 @@ if test "${AC_meta}" = "metamod" && test "${AC_LIBS_DYNAMIC}" = "static" ; then - AC_meta="metano" - fi - --export AC_bdb AC_hdb AC_ldap AC_mdb AC_meta AC_monitor AC_null AC_relay AC_sql \ -+export AC_ldap AC_mdb AC_meta AC_monitor AC_null AC_relay AC_sql \ - AC_accesslog AC_constraint AC_dds AC_dynlist AC_memberof AC_pcache AC_ppolicy \ - AC_refint AC_retcode AC_rwm AC_unique AC_syncprov AC_translucent \ - AC_valsort \ -@@ -153,7 +151,7 @@ while test $# -gt 0 ; do - done - - if test -z "$BACKEND" ; then -- for b in bdb hdb mdb ; do -+ for b in mdb ; do - if eval "test \"\$AC_$b\" != no" ; then - BACKEND=$b - break -@@ -174,7 +172,7 @@ fi - # maindb: main storage backend. Currently index,limits,mode,paged results. - INDEXDB=noindexdb MAINDB=nomaindb - case $BACKEND in -- bdb|hdb|mdb) INDEXDB=indexdb MAINDB=maindb ;; -+ mdb) INDEXDB=indexdb MAINDB=maindb ;; - ndb) INDEXDB=indexdb ;; - esac - -diff --git a/tests/scripts/test023-refint b/tests/scripts/test023-refint -index 546b9c7..b51134d 100755 ---- a/tests/scripts/test023-refint -+++ b/tests/scripts/test023-refint -@@ -189,9 +189,8 @@ if test $RC != 0 ; then - exit $RC - fi - --if test $BACKEND != "bdb" ; then -- $LDAPMODIFY -v -D "$REFINTDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ -- $TESTOUT 2>&1 << EDEL -+$LDAPMODIFY -v -D "$REFINTDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ -+ $TESTOUT 2>&1 << EDEL - version: 1 - dn: cn=group,o=refint - changetype: add -@@ -205,65 +204,65 @@ member: uid=theman,ou=users,o=refint - member: uid=richard,ou=users,o=refint - EDEL - -- RC=$? -- if test $RC != 0 ; then -- echo "ldapmodify failed ($RC)!" -- test $KILLSERVERS != no && kill -HUP $KILLPIDS -- exit $RC -- fi -+RC=$? -+if test $RC != 0 ; then -+ echo "ldapmodify failed ($RC)!" -+ test $KILLSERVERS != no && kill -HUP $KILLPIDS -+ exit $RC -+fi - -- sleep 1; -+sleep 1; - -- $LDAPSEARCH -S "" -b "o=refint" -h $LOCALHOST -p $PORT1 \ -- manager member secretary > $SEARCHOUT 2>&1 -- RC=$? -- if test $RC != 0 ; then -- echo "ldapsearch failed ($RC)!" -- test $KILLSERVERS != no && kill -HUP $KILLPIDS -- exit $RC -- fi -+$LDAPSEARCH -S "" -b "o=refint" -h $LOCALHOST -p $PORT1 \ -+ manager member secretary > $SEARCHOUT 2>&1 -+RC=$? -+if test $RC != 0 ; then -+ echo "ldapsearch failed ($RC)!" -+ test $KILLSERVERS != no && kill -HUP $KILLPIDS -+ exit $RC -+fi - -- $EGREP_CMD "(manager|member|secretary):" $SEARCHOUT \ -- | sed "s/ou=users/ou=people/g" | \ -- sort > $TESTOUT 2>&1 -+$EGREP_CMD "(manager|member|secretary):" $SEARCHOUT \ -+ | sed "s/ou=users/ou=people/g" | \ -+ sort > $TESTOUT 2>&1 - -- echo "testing subtree rename" -- $LDAPMODRDN -D "$REFINTDN" -r -h $LOCALHOST -p $PORT1 -w $PASSWD > \ -- /dev/null 2>&1 'ou=users,o=refint' 'ou=people' -- RC=$? -- if test $RC != 0 ; then -- echo "ldapmodrdn failed ($RC)!" -- test $KILLSERVERS != no && kill -HUP $KILLPIDS -- exit $RC -- fi -+echo "testing subtree rename" -+$LDAPMODRDN -D "$REFINTDN" -r -h $LOCALHOST -p $PORT1 -w $PASSWD > \ -+ /dev/null 2>&1 'ou=users,o=refint' 'ou=people' -+RC=$? -+if test $RC != 0 ; then -+ echo "ldapmodrdn failed ($RC)!" -+ test $KILLSERVERS != no && kill -HUP $KILLPIDS -+ exit $RC -+fi - -- sleep 1; -+sleep 1; - -- echo "Using ldapsearch to check dependents new rdn..." -+echo "Using ldapsearch to check dependents new rdn..." - -- $LDAPSEARCH -S "" -b "o=refint" -h $LOCALHOST -p $PORT1 \ -- manager member secretary > $SEARCHOUT 2>&1 -+$LDAPSEARCH -S "" -b "o=refint" -h $LOCALHOST -p $PORT1 \ -+ manager member secretary > $SEARCHOUT 2>&1 - -- RC=$? -- if test $RC != 0 ; then -- echo "ldapsearch failed ($RC)!" -- test $KILLSERVERS != no && kill -HUP $KILLPIDS -- exit $RC -- fi -+RC=$? -+if test $RC != 0 ; then -+ echo "ldapsearch failed ($RC)!" -+ test $KILLSERVERS != no && kill -HUP $KILLPIDS -+ exit $RC -+fi - -- $EGREP_CMD "(manager|member|secretary):" $SEARCHOUT \ -- | sort > $SEARCHFLT 2>&1 -+$EGREP_CMD "(manager|member|secretary):" $SEARCHOUT \ -+ | sort > $SEARCHFLT 2>&1 - -- echo "Comparing ldapsearch results against original..." -- $CMP $TESTOUT $SEARCHFLT > $CMPOUT -+echo "Comparing ldapsearch results against original..." -+$CMP $TESTOUT $SEARCHFLT > $CMPOUT - -- if test $? != 0 ; then -- echo "comparison failed - subtree rename operations did not complete correctly" -- test $KILLSERVERS != no && kill -HUP $KILLPIDS -- exit 1 -- fi -+if test $? != 0 ; then -+ echo "comparison failed - subtree rename operations did not complete correctly" -+ test $KILLSERVERS != no && kill -HUP $KILLPIDS -+ exit 1 - fi - -+ - test $KILLSERVERS != no && kill -HUP $KILLPIDS - - echo ">>>>> Test succeeded" -diff --git a/tests/scripts/test025-limits b/tests/scripts/test025-limits -index 8d39c6b..551b969 100755 ---- a/tests/scripts/test025-limits -+++ b/tests/scripts/test025-limits -@@ -750,7 +750,7 @@ case $RC in - esac - - if test $MAINDB != maindb ; then -- # only bdb|hdb|mdb currently supports pagedResults control -+ # only mdb currently supports pagedResults control - test $KILLSERVERS != no && kill -HUP $KILLPIDS - - echo ">>>>> Test succeeded" -diff --git a/tests/scripts/test036-meta-concurrency b/tests/scripts/test036-meta-concurrency -index 2a4146c..3344f45 100755 ---- a/tests/scripts/test036-meta-concurrency -+++ b/tests/scripts/test036-meta-concurrency -@@ -40,22 +40,6 @@ rm -rf $TESTDIR - - mkdir -p $TESTDIR $DBDIR1 $DBDIR2 - --# NOTE: this could be added to all tests... --if test "$BACKEND" = "bdb" || test "$BACKEND" = "hdb" ; then -- if test "x$DB_CONFIG" != "x" ; then \ -- if test -f $DB_CONFIG ; then -- echo "==> using DB_CONFIG \"$DB_CONFIG\"" -- cp $DB_CONFIG $DBDIR1 -- cp $DB_CONFIG $DBDIR2 -- else -- echo "==> DB_CONFIG must point to a valid file (ignored)" -- fi -- else -- echo "==> set \"DB_CONFIG\" to the DB_CONFIG file you want to use for the test." -- fi -- echo "" --fi -- - echo "Starting slapd on TCP/IP port $PORT1..." - . $CONFFILTER $BACKEND $MONITORDB < $METACONF1 > $CONF1 - $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & -diff --git a/tests/scripts/test040-subtree-rename b/tests/scripts/test040-subtree-rename -index 671d626..f1057d6 100755 ---- a/tests/scripts/test040-subtree-rename -+++ b/tests/scripts/test040-subtree-rename -@@ -16,11 +16,6 @@ - echo "running defines.sh" - . $SRCDIR/scripts/defines.sh - --if test $BACKEND = bdb ; then -- echo "subtree rename not supported by back-$BACKEND" -- exit 0 --fi -- - mkdir -p $TESTDIR $DBDIR1 - - echo "Starting slapd on TCP/IP port $PORT1..." -diff --git a/tests/scripts/test043-delta-syncrepl b/tests/scripts/test043-delta-syncrepl -index 3c7c629..686bf1c 100755 ---- a/tests/scripts/test043-delta-syncrepl -+++ b/tests/scripts/test043-delta-syncrepl -@@ -32,7 +32,7 @@ fi - - mkdir -p $TESTDIR $DBDIR1A $DBDIR1B $DBDIR2 - --SPEC="mdb=a,bdb=a,hdb=a" -+SPEC="mdb=a" - - # - # Test replication: -diff --git a/tests/scripts/test052-memberof b/tests/scripts/test052-memberof -index 4b2a5d9..a73a929 100755 ---- a/tests/scripts/test052-memberof -+++ b/tests/scripts/test052-memberof -@@ -72,11 +72,10 @@ EOF - fi - fi - --indexInclude="" mainInclude="" bdbInclude="# " nullExclude="" -+indexInclude="" mainInclude="" " nullExclude="" - test $INDEXDB = indexdb || indexInclude="# " - test $MAINDB = maindb || mainInclude="# " - case $BACKEND in --bdb | hdb) bdbInclude="" ;; - null) nullExclude="# " ;; - esac - -@@ -114,7 +113,6 @@ olcRootDN: cn=Manager,$BASEDN - olcRootPW:: c2VjcmV0 - olcMonitoring: TRUE - ${nullExclude}olcDbDirectory: $TESTDIR/db.1.a/ --${bdbInclude}olcDbCacheSize: 1000 - ${indexInclude}olcDbIndex: objectClass eq - ${indexInclude}olcDbIndex: cn pres,eq,sub - ${indexInclude}olcDbIndex: uid pres,eq,sub -diff --git a/tests/scripts/test056-monitor b/tests/scripts/test056-monitor -index 06713df..7a87eaa 100755 ---- a/tests/scripts/test056-monitor -+++ b/tests/scripts/test056-monitor -@@ -85,8 +85,7 @@ echo "Using ldapsearch to read database monitor entries..." - $LDAPSEARCH -S "" -b "$DATABASESMONITORDN" -h $LOCALHOST -p $PORT1 \ - 'objectclass=*' \ - structuralObjectClass entryDN namingContexts readOnly \ -- monitorIsShadow monitorContext \ -- olmBDBEntryCache olmBDBDNCache olmBDBIDLCache \ -+ monitorIsShadow monitorContext - > $SEARCHOUT 2>&1 - RC=$? - -@@ -101,11 +100,8 @@ $LDIFFILTER -b monitor < $SEARCHOUT > $SEARCHFLT - - TMPMONITOROUT2=$MONITOROUT2 - case $BACKEND in --bdb|hdb) -- ;; - *) - TMPMONITOROUT2=$TESTDIR/monitor2.out -- grep -v "olmBDB" $MONITOROUT2 > $TMPMONITOROUT2 - ;; - esac - -diff --git a/tests/scripts/test057-memberof-refint b/tests/scripts/test057-memberof-refint -index 5f02a77..ba480f8 100755 ---- a/tests/scripts/test057-memberof-refint -+++ b/tests/scripts/test057-memberof-refint -@@ -27,11 +27,6 @@ if test $REFINT = refintno; then - exit 0 - fi - --if test $BACKEND = bdb; then -- echo "$BACKEND backend does not support subtree rename, test skipped" -- exit 0 --fi -- - mkdir -p $TESTDIR $DBDIR1 $TESTDIR/confdir - - $SLAPPASSWD -g -n >$CONFIGPWF -@@ -66,11 +61,10 @@ fi - - cat /dev/null > $TESTOUT - --indexInclude="" mainInclude="" bdbInclude="# " nullExclude="" -+indexInclude="" mainInclude="" nullExclude="" - test $INDEXDB = indexdb || indexInclude="# " - test $MAINDB = maindb || mainInclude="# " - case $BACKEND in --bdb | hdb) bdbInclude="" ;; - null) nullExclude="# " ;; - esac - -@@ -104,7 +98,6 @@ olcRootDN: cn=Manager,$BASEDN - olcRootPW:: c2VjcmV0 - olcMonitoring: TRUE - ${nullExclude}olcDbDirectory: $TESTDIR/db.1.a/ --${bdbInclude}olcDbCacheSize: 1000 - ${indexInclude}olcDbIndex: objectClass eq - ${indexInclude}olcDbIndex: cn pres,eq,sub - ${indexInclude}olcDbIndex: uid pres,eq,sub -diff --git a/tests/scripts/test061-syncreplication-initiation b/tests/scripts/test061-syncreplication-initiation -index 5d27e52..fda7a1b 100755 ---- a/tests/scripts/test061-syncreplication-initiation -+++ b/tests/scripts/test061-syncreplication-initiation -@@ -63,7 +63,6 @@ KILLPIDS= - $SLAPPASSWD -g -n >$CONFIGPWF - - case "$BACKEND" in -- bdb|hdb) olcDbCheckpoint="olcDbCheckpoint";; - *) olcDbCheckpoint="# olcDbCheckpoint";; - esac - --- -2.19.1 - diff --git a/openldap-ai-addrconfig.patch b/backport-openldap-ai-addrconfig.patch similarity index 100% rename from openldap-ai-addrconfig.patch rename to backport-openldap-ai-addrconfig.patch diff --git a/openldap-allop-overlay.patch b/backport-openldap-allop-overlay.patch similarity index 100% rename from openldap-allop-overlay.patch rename to backport-openldap-allop-overlay.patch diff --git a/openldap-manpages.patch b/backport-openldap-manpages.patch similarity index 73% rename from openldap-manpages.patch rename to backport-openldap-manpages.patch index b69a391..9f2bf89 100644 --- a/openldap-manpages.patch +++ b/backport-openldap-manpages.patch @@ -16,18 +16,6 @@ index 3def6da..466c772 100644 .SH AUTHOR The OpenLDAP Project .SH ACKNOWLEDGEMENTS -diff --git a/doc/man/man5/ldap.conf.5 b/doc/man/man5/ldap.conf.5 -index cfde143..63592cb 100644 ---- a/doc/man/man5/ldap.conf.5 -+++ b/doc/man/man5/ldap.conf.5 -@@ -317,6 +317,7 @@ certificates in separate individual files. The - .B TLS_CACERT - is always used before - .B TLS_CACERTDIR. -+The specified directory must be managed with the OpenSSL c_rehash utility. - This parameter is ignored with GnuTLS. - - When using Mozilla NSS, may contain a Mozilla NSS cert/key diff --git a/doc/man/man8/slapd.8 b/doc/man/man8/slapd.8 index b739f4d..e2a1a00 100644 --- a/doc/man/man8/slapd.8 @@ -39,7 +27,7 @@ index b739f4d..e2a1a00 100644 -.B LIBEXECDIR/slapd +.B slapd [\c - .BR \-4 | \-6 ] + .BR \-V [ V [ V ]] [\c @@ -317,7 +317,7 @@ the LDAP databases defined in the default config file, just type: .LP diff --git a/openldap-reentrant-gethostby.patch b/backport-openldap-reentrant-gethostby.patch similarity index 100% rename from openldap-reentrant-gethostby.patch rename to backport-openldap-reentrant-gethostby.patch diff --git a/openldap-smbk5pwd-overlay.patch b/backport-openldap-smbk5pwd-overlay.patch similarity index 100% rename from openldap-smbk5pwd-overlay.patch rename to backport-openldap-smbk5pwd-overlay.patch diff --git a/openldap-switch-to-lt_dlopenadvise-to-get-RTLD_GLOBAL-set.patch b/backport-openldap-switch-to-lt_dlopenadvise-to-get-RTLD_GLOBAL-set.patch similarity index 100% rename from openldap-switch-to-lt_dlopenadvise-to-get-RTLD_GLOBAL-set.patch rename to backport-openldap-switch-to-lt_dlopenadvise-to-get-RTLD_GLOBAL-set.patch diff --git a/bugfix-openldap-ITS-8650-Fix-Debug-usage-to-follow-RE24-format.patch b/bugfix-openldap-ITS-8650-Fix-Debug-usage-to-follow-RE24-format.patch deleted file mode 100644 index 54b3d8e..0000000 --- a/bugfix-openldap-ITS-8650-Fix-Debug-usage-to-follow-RE24-format.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 85fc8974f5c32a9a052baafaa9499c8484e043c2 Mon Sep 17 00:00:00 2001 -From: Quanah Gibson-Mount -Date: Tue, 28 Apr 2020 20:49:53 +0000 -Subject: [PATCH] ITS#8650 - Fix Debug usage to follow RE24 format - ---- - libraries/libldap/tls2.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/libraries/libldap/tls2.c b/libraries/libldap/tls2.c -index c1f15cb..ebe5bf1 100644 ---- a/libraries/libldap/tls2.c -+++ b/libraries/libldap/tls2.c -@@ -907,8 +907,8 @@ ldap_int_tls_start ( LDAP *ld, LDAPConn *conn, LDAPURLDesc *srv ) - } else if ( sb->sb_trans_needs_write ) { - wr=1; - } -- Debug1( LDAP_DEBUG_TRACE, "ldap_int_tls_start: ldap_int_tls_connect needs %s\n", -- wr ? "write": "read" ); -+ Debug( LDAP_DEBUG_TRACE, "ldap_int_tls_start: ldap_int_tls_connect needs %s\n", -+ wr ? "write": "read", 0, 0 ); - - /* This is mostly copied from result.c:wait4msg(), should - * probably be moved into a separate function */ -@@ -946,7 +946,7 @@ ldap_int_tls_start ( LDAP *ld, LDAPConn *conn, LDAPURLDesc *srv ) - start_time_tv.tv_sec = curr_time_tv.tv_sec; - start_time_tv.tv_usec = curr_time_tv.tv_usec; - tv = tv0; -- Debug3( LDAP_DEBUG_TRACE, "ldap_int_tls_start: ld %p %ld s %ld us to go\n", -+ Debug( LDAP_DEBUG_TRACE, "ldap_int_tls_start: ld %p %ld s %ld us to go\n", - (void *)ld, (long) tv.tv_sec, (long) tv.tv_usec ); - ret = ldap_int_poll( ld, sd, &tv, wr); - if ( ret < 0 ) { --- -1.8.3.1 - diff --git a/bugfix-openldap-ITS9160-OOM-Handing.patch b/bugfix-openldap-ITS9160-OOM-Handing.patch deleted file mode 100644 index 1342db3..0000000 --- a/bugfix-openldap-ITS9160-OOM-Handing.patch +++ /dev/null @@ -1,821 +0,0 @@ -From 47e0e3fdb59d8be9cc44e814ba03684d352916a6 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Ond=C5=99ej=20Kuzn=C3=ADk?= -Date: Thu, 30 Jan 2020 09:03:59 +0000 -Subject: [PATCH] ITS#9160 OOM handling -https://bugs.openldap.org/show_bug.cgi?id=9160 - - -diff --git a/contrib/slapd-modules/allowed/allowed.c b/contrib/slapd-modules/allowed/allowed.c ---- a/contrib/slapd-modules/allowed/allowed.c -+++ b/contrib/slapd-modules/allowed/allowed.c -@@ -277,10 +277,10 @@ aa_operational( Operation *op, SlapReply *rs ) - /* just count */ ; - - if ( got & GOT_A ) { -- bv_allowed = ber_memalloc( sizeof( struct berval ) * ( i + 1 ) ); -+ bv_allowed = ch_calloc( i + 1, sizeof( struct berval ) ); - } - if ( got & GOT_AE ) { -- bv_effective = ber_memalloc( sizeof( struct berval ) * ( i + 1 ) ); -+ bv_effective = ch_calloc( i + 1, sizeof( struct berval ) ); - } - - for ( i = 0, ja = 0, je = 0; atp[ i ] != NULL; i++ ) { -@@ -310,7 +310,6 @@ aa_operational( Operation *op, SlapReply *rs ) - ch_free( atp ); - - if ( ( got & GOT_A ) && ja > 0 ) { -- BER_BVZERO( &bv_allowed[ ja ] ); - *ap = attr_alloc( ad_allowedAttributes ); - (*ap)->a_vals = bv_allowed; - (*ap)->a_nvals = bv_allowed; -@@ -319,7 +318,6 @@ aa_operational( Operation *op, SlapReply *rs ) - } - - if ( ( got & GOT_AE ) && je > 0 ) { -- BER_BVZERO( &bv_effective[ je ] ); - *ap = attr_alloc( ad_allowedAttributesEffective ); - (*ap)->a_vals = bv_effective; - (*ap)->a_nvals = bv_effective; -@@ -348,10 +346,10 @@ do_oc:; - } - - if ( got & GOT_C ) { -- bv_allowed = ber_memalloc( sizeof( struct berval ) * ( i + 1 ) ); -+ bv_allowed = ch_calloc( i + 1, sizeof( struct berval ) ); - } - if ( got & GOT_CE ) { -- bv_effective = ber_memalloc( sizeof( struct berval ) * ( i + 1 ) ); -+ bv_effective = ch_calloc( i + 1, sizeof( struct berval ) ); - } - - for ( oc_start( &oc ); oc != NULL; oc_next( &oc ) ) { -@@ -398,7 +396,6 @@ done_ce:; - } - - if ( ( got & GOT_C ) && ja > 0 ) { -- BER_BVZERO( &bv_allowed[ ja ] ); - *ap = attr_alloc( ad_allowedChildClasses ); - (*ap)->a_vals = bv_allowed; - (*ap)->a_nvals = bv_allowed; -@@ -407,7 +404,6 @@ done_ce:; - } - - if ( ( got & GOT_CE ) && je > 0 ) { -- BER_BVZERO( &bv_effective[ je ] ); - *ap = attr_alloc( ad_allowedChildClassesEffective ); - (*ap)->a_vals = bv_effective; - (*ap)->a_nvals = bv_effective; - -diff --git a/contrib/slapd-modules/samba4/rdnval.c b/contrib/slapd-modules/samba4/rdnval.c ---- a/contrib/slapd-modules/samba4/rdnval.c -+++ b/contrib/slapd-modules/samba4/rdnval.c -@@ -223,8 +223,8 @@ rdnval_rdn2vals( - - /* NOTE: we assume rdn and nrdn contain the same AVAs! */ - -- *valsp = SLAP_CALLOC( sizeof( struct berval ), nAVA + 1 ); -- *nvalsp = SLAP_CALLOC( sizeof( struct berval ), nAVA + 1 ); -+ *valsp = ch_calloc( sizeof( struct berval ), nAVA + 1 ); -+ *nvalsp = ch_calloc( sizeof( struct berval ), nAVA + 1 ); - - /* Add new attribute values to the entry */ - for ( i = 0; rdn[ i ]; i++ ) { -@@ -354,7 +354,7 @@ rdnval_op_rename( Operation *op, SlapReply *rs ) - send_ldap_result( op, rs ); - } - -- ml = SLAP_CALLOC( sizeof( Modifications ), 1 ); -+ ml = ch_calloc( sizeof( Modifications ), 1 ); - ml->sml_values = vals; - ml->sml_nvalues = nvals; - -diff --git a/contrib/slapd-modules/samba4/vernum.c b/contrib/slapd-modules/samba4/vernum.c ---- a/contrib/slapd-modules/samba4/vernum.c -+++ b/contrib/slapd-modules/samba4/vernum.c -@@ -121,8 +121,8 @@ vernum_op_modify( Operation *op, SlapReply *rs ) - /* ITS#6561 */ - #ifdef SLAP_MOD_ADD_IF_NOT_PRESENT - /* the initial value is only added if the vernum attr is not present */ -- ml = SLAP_CALLOC( sizeof( Modifications ), 1 ); -- ml->sml_values = SLAP_CALLOC( sizeof( struct berval ) , 2 ); -+ ml = ch_calloc( sizeof( Modifications ), 1 ); -+ ml->sml_values = ch_calloc( sizeof( struct berval ) , 2 ); - value_add_one( &ml->sml_values, &val_init ); - ml->sml_nvalues = NULL; - ml->sml_numvals = 1; -@@ -136,8 +136,8 @@ vernum_op_modify( Operation *op, SlapReply *rs ) - #endif /* SLAP_MOD_ADD_IF_NOT_PRESENT */ - - /* this increments by 1 the vernum attr */ -- ml = SLAP_CALLOC( sizeof( Modifications ), 1 ); -- ml->sml_values = SLAP_CALLOC( sizeof( struct berval ) , 2 ); -+ ml = ch_calloc( sizeof( Modifications ), 1 ); -+ ml->sml_values = ch_calloc( sizeof( struct berval ) , 2 ); - value_add_one( &ml->sml_values, &val ); - ml->sml_nvalues = NULL; - ml->sml_numvals = 1; - -diff --git a/tests/progs/slapd-bind.c b/tests/progs/slapd-bind.c -index c9e3210b06..a832e809c1 100644 ---- a/tests/progs/slapd-bind.c -+++ b/tests/progs/slapd-bind.c -@@ -412,11 +412,19 @@ do_base( struct tester_conn_args *config, char *dn, char *base, char *filter, ch - case LDAP_RES_SEARCH_ENTRY: - rc = ldap_get_dn_ber( ld, msg, &ber, &bv ); - dns = realloc( dns, (ndns + 1)*sizeof(char *) ); -+ if ( !dns ) { -+ tester_error( "realloc failed" ); -+ exit( EXIT_FAILURE ); -+ } - dns[ndns] = ber_strdup( bv.bv_val ); - if ( pwattr != NULL ) { - struct berval **values = ldap_get_values_len( ld, msg, pwattr ); - - creds = realloc( creds, (ndns + 1)*sizeof(struct berval) ); -+ if ( !creds ) { -+ tester_error( "realloc failed" ); -+ exit( EXIT_FAILURE ); -+ } - if ( values == NULL ) { - novals:; - creds[ndns].bv_len = 0; -diff --git a/tests/progs/slapd-modrdn.c b/tests/progs/slapd-modrdn.c -index 5bd823d72a..d82d82c69e 100644 ---- a/tests/progs/slapd-modrdn.c -+++ b/tests/progs/slapd-modrdn.c -@@ -125,6 +125,10 @@ do_modrdn( struct tester_conn_args *config, - - DNs[0] = entry; - DNs[1] = strdup( entry ); -+ if ( DNs[1] == NULL ) { -+ tester_error( "strdup failed" ); -+ exit( EXIT_FAILURE ); -+ } - - /* reverse the RDN, make new DN */ - p1 = strchr( entry, '=' ) + 1; -@@ -132,6 +136,10 @@ do_modrdn( struct tester_conn_args *config, - - *p2 = '\0'; - rdns[1] = strdup( entry ); -+ if ( rdns[1] == NULL ) { -+ tester_error( "strdup failed" ); -+ exit( EXIT_FAILURE ); -+ } - *p2-- = ','; - - for (i = p1 - entry;p2 >= p1;) -@@ -139,6 +147,10 @@ do_modrdn( struct tester_conn_args *config, - - DNs[1][i] = '\0'; - rdns[0] = strdup( DNs[1] ); -+ if ( rdns[0] == NULL ) { -+ tester_error( "strdup failed" ); -+ exit( EXIT_FAILURE ); -+ } - DNs[1][i] = ','; - - i = 0; -diff --git a/tests/progs/slapd-mtread.c b/tests/progs/slapd-mtread.c -index 1b421af00b..c8024cb6e1 100644 ---- a/tests/progs/slapd-mtread.c -+++ b/tests/progs/slapd-mtread.c -@@ -531,6 +531,10 @@ do_random( LDAP *ld, - } - - values = malloc( ( nvalues + 1 ) * sizeof( char * ) ); -+ if (values == NULL) { -+ thread_error( idx, "(failed to malloc)"); -+ exit( EXIT_FAILURE ); -+ } - for ( i = 0, e = ldap_first_entry( ld, res ); e != NULL; i++, e = ldap_next_entry( ld, e ) ) - { - values[ i ] = ldap_get_dn( ld, e ); -diff --git a/tests/progs/slapd-read.c b/tests/progs/slapd-read.c -index 4023a22d27..f95228317b 100644 ---- a/tests/progs/slapd-read.c -+++ b/tests/progs/slapd-read.c -@@ -202,6 +202,10 @@ do_random( struct tester_conn_args *config, char *sbase, char *filter, - } - - values = malloc( ( nvalues + 1 ) * sizeof( char * ) ); -+ if ( !values ) { -+ tester_error( "malloc failed" ); -+ exit( EXIT_FAILURE ); -+ } - for ( i = 0, e = ldap_first_entry( ld, res ); e != NULL; i++, e = ldap_next_entry( ld, e ) ) - { - values[ i ] = ldap_get_dn( ld, e ); -@@ -251,6 +255,10 @@ do_read( struct tester_conn_args *config, char *entry, LDAP **ldp, - /* make room for msgid */ - if ( swamp > 1 ) { - msgids = (int *)calloc( sizeof(int), maxloop ); -+ if ( !msgids ) { -+ tester_error( "calloc failed" ); -+ exit( EXIT_FAILURE ); -+ } - } - - retry:; -diff --git a/tests/progs/slapd-search.c b/tests/progs/slapd-search.c -index 8f791d6b3c..321fd80e38 100644 ---- a/tests/progs/slapd-search.c -+++ b/tests/progs/slapd-search.c -@@ -226,6 +226,10 @@ do_random( struct tester_conn_args *config, - int j; - - values = realloc( values, ( nvalues + n + 1 )*sizeof( char * ) ); -+ if ( !values ) { -+ tester_error( "realloc failed" ); -+ exit( EXIT_FAILURE ); -+ } - for ( j = 0; j < n; j++ ) { - values[ nvalues + j ] = strdup( v[ j ]->bv_val ); - } -@@ -298,6 +302,10 @@ do_search( struct tester_conn_args *config, - /* make room for msgid */ - if ( swamp > 1 ) { - msgids = (int *)calloc( sizeof(int), innerloop ); -+ if ( !msgids ) { -+ tester_error( "calloc failed" ); -+ exit( EXIT_FAILURE ); -+ } - } - - retry:; - -diff --git a/servers/slapd/aci.c b/servers/slapd/aci.c -index 86ace3f536..232c32fc89 100644 ---- a/servers/slapd/aci.c -+++ b/servers/slapd/aci.c -@@ -1258,7 +1258,7 @@ OpenLDAPaciNormalizeRight( - - len = nattrs.bv_len + ( !BER_BVISEMPTY( &nattrs ) ? STRLENOF( "," ) : 0 ) - + ad->ad_cname.bv_len; -- nattrs.bv_val = ber_memrealloc_x( nattrs.bv_val, len + 1, ctx ); -+ nattrs.bv_val = slap_sl_realloc( nattrs.bv_val, len + 1, ctx ); - ptr = &nattrs.bv_val[ nattrs.bv_len ]; - if ( !BER_BVISEMPTY( &nattrs ) ) { - *ptr++ = ','; -@@ -1270,7 +1270,7 @@ OpenLDAPaciNormalizeRight( - - } - -- naction->bv_val = ber_memrealloc_x( naction->bv_val, -+ naction->bv_val = slap_sl_realloc( naction->bv_val, - naction->bv_len + STRLENOF( ";" ) - + perms.bv_len + STRLENOF( ";" ) - + nattrs.bv_len + 1, -@@ -1345,7 +1345,7 @@ OpenLDAPaciNormalizeRights( - *nactions = nbv; - - } else { -- nactions->bv_val = ber_memrealloc_x( nactions->bv_val, -+ nactions->bv_val = slap_sl_realloc( nactions->bv_val, - nactions->bv_len + STRLENOF( "$" ) - + nbv.bv_len + 1, - ctx ); -@@ -1703,7 +1703,7 @@ OpenLDAPaciPrettyNormal( - } - - bv.bv_len += STRLENOF( "/" ) + oc->soc_cname.bv_len; -- bv.bv_val = ber_memalloc_x( bv.bv_len + 1, ctx ); -+ bv.bv_val = slap_sl_malloc( bv.bv_len + 1, ctx ); - - ptr = bv.bv_val; - ptr = lutil_strncopy( ptr, ntype.bv_val, ntype.bv_len ); -@@ -1762,7 +1762,7 @@ OpenLDAPaciPrettyNormal( - + ntype.bv_len + STRLENOF( "#" ) - + nsubject.bv_len; - -- out->bv_val = ber_memalloc_x( out->bv_len + 1, ctx ); -+ out->bv_val = slap_sl_malloc( out->bv_len + 1, ctx ); - ptr = lutil_strncopy( out->bv_val, oid.bv_val, oid.bv_len ); - ptr[ 0 ] = '#'; - ptr++; -diff --git a/servers/slapd/bconfig.c b/servers/slapd/bconfig.c -index 79a3fd1cfc..ceee648683 100644 ---- a/servers/slapd/bconfig.c -+++ b/servers/slapd/bconfig.c -@@ -3032,7 +3032,7 @@ tcp_buffer_unparse( int size, int rw, Listener *l, struct berval *val ) - } - } - -- val->bv_val = SLAP_MALLOC( val->bv_len + 1 ); -+ val->bv_val = ch_malloc( val->bv_len + 1 ); - - ptr = val->bv_val; - -@@ -3110,7 +3110,7 @@ tcp_buffer_add_one( int argc, char **argv ) - if ( rw & SLAP_TCP_WMEM ) slapd_tcp_wmem = size; - } - -- tcp_buffer = SLAP_REALLOC( tcp_buffer, sizeof( struct berval ) * ( tcp_buffer_num + 2 ) ); -+ tcp_buffer = ch_realloc( tcp_buffer, sizeof( struct berval ) * ( tcp_buffer_num + 2 ) ); - /* append */ - tcp_buffer[ tcp_buffer_num ] = val; - -diff --git a/servers/slapd/modify.c b/servers/slapd/modify.c -index fb1cc3f1c3..cfdd7b0aa9 100644 ---- a/servers/slapd/modify.c -+++ b/servers/slapd/modify.c -@@ -619,7 +619,7 @@ int slap_mods_check( - if( nvals && ad->ad_type->sat_equality && - ad->ad_type->sat_equality->smr_normalize ) - { -- ml->sml_nvalues = ber_memalloc_x( -+ ml->sml_nvalues = slap_sl_malloc( - (nvals+1)*sizeof(struct berval), ctx ); - - for ( nvals = 0; !BER_BVISNULL( &ml->sml_values[nvals] ); nvals++ ) { -diff --git a/servers/slapd/schema_init.c b/servers/slapd/schema_init.c -index 92407391e9..c067ef825c 100644 ---- a/servers/slapd/schema_init.c -+++ b/servers/slapd/schema_init.c -@@ -3415,7 +3415,7 @@ serialNumberAndIssuerCheck( - ber_len_t src, dst; - - ni.bv_len = is->bv_len - numdquotes; -- ni.bv_val = ber_memalloc_x( ni.bv_len + 1, ctx ); -+ ni.bv_val = slap_sl_malloc( ni.bv_len + 1, ctx ); - for ( src = 0, dst = 0; src < is->bv_len; src++, dst++ ) { - if ( is->bv_val[src] == '"' ) { - src++; -@@ -4004,7 +4004,7 @@ issuerAndThisUpdateCheck( - ber_len_t src, dst; - - ni.bv_len = is->bv_len - numdquotes; -- ni.bv_val = ber_memalloc_x( ni.bv_len + 1, ctx ); -+ ni.bv_val = slap_sl_malloc( ni.bv_len + 1, ctx ); - for ( src = 0, dst = 0; src < is->bv_len; src++, dst++ ) { - if ( is->bv_val[src] == '"' ) { - src++; -@@ -4606,7 +4606,7 @@ serialNumberAndIssuerSerialCheck( - ber_len_t src, dst; - - ni.bv_len = is->bv_len - numdquotes; -- ni.bv_val = ber_memalloc_x( ni.bv_len + 1, ctx ); -+ ni.bv_val = slap_sl_malloc( ni.bv_len + 1, ctx ); - for ( src = 0, dst = 0; src < is->bv_len; src++, dst++ ) { - if ( is->bv_val[src] == '"' ) { - src++; - -diff --git a/servers/slapd/value.c b/servers/slapd/value.c -index 73c2052f16..c901236d5e 100644 ---- a/servers/slapd/value.c -+++ b/servers/slapd/value.c -@@ -514,7 +514,7 @@ ordered_value_pretty( - bv = *out; - - out->bv_len = idx.bv_len + bv.bv_len; -- out->bv_val = ber_memalloc_x( out->bv_len + 1, ctx ); -+ out->bv_val = slap_sl_malloc( out->bv_len + 1, ctx ); - - AC_MEMCPY( out->bv_val, idx.bv_val, idx.bv_len ); - AC_MEMCPY( &out->bv_val[ idx.bv_len ], bv.bv_val, bv.bv_len + 1 ); -@@ -591,7 +591,7 @@ ordered_value_normalize( - bv = *normalized; - - normalized->bv_len = idx.bv_len + bv.bv_len; -- normalized->bv_val = ber_memalloc_x( normalized->bv_len + 1, ctx ); -+ normalized->bv_val = slap_sl_malloc( normalized->bv_len + 1, ctx ); - - AC_MEMCPY( normalized->bv_val, idx.bv_val, idx.bv_len ); - AC_MEMCPY( &normalized->bv_val[ idx.bv_len ], bv.bv_val, bv.bv_len + 1 ); - -diff --git a/libraries/libldap/deref.c b/libraries/libldap/deref.c -index 6da6f2711c..9b66f19d95 100644 ---- a/libraries/libldap/deref.c -+++ b/libraries/libldap/deref.c -@@ -191,6 +191,12 @@ ldap_parse_derefresponse_control( - char *last2; - - dr = LDAP_CALLOC( 1, sizeof(LDAPDerefRes) ); -+ if ( dr == NULL ) { -+ ldap_derefresponse_free( drhead ); -+ *drp2 = NULL; -+ ld->ld_errno = LDAP_NO_MEMORY; -+ return ld->ld_errno; -+ } - dvp = &dr->attrVals; - - tag = ber_scanf( ber, "{ao", &dr->derefAttr, &dr->derefVal ); -@@ -207,6 +213,13 @@ ldap_parse_derefresponse_control( - LDAPDerefVal *dv; - - dv = LDAP_CALLOC( 1, sizeof(LDAPDerefVal) ); -+ if ( dv == NULL ) { -+ ldap_derefresponse_free( drhead ); -+ LDAP_FREE( dr ); -+ *drp2 = NULL; -+ ld->ld_errno = LDAP_NO_MEMORY; -+ return ld->ld_errno; -+ } - - tag = ber_scanf( ber, "{a[W]}", &dv->type, &dv->vals ); - if ( tag == LBER_ERROR ) { -diff --git a/libraries/libldap/getdn.c b/libraries/libldap/getdn.c -index 45910aba52..1228d9c76e 100644 ---- a/libraries/libldap/getdn.c -+++ b/libraries/libldap/getdn.c -@@ -258,6 +258,9 @@ ldap_explode_rdn( LDAP_CONST char *rdn, int notypes ) - l = vl + ava->la_attr.bv_len + 1; - - str = LDAP_MALLOC( l + 1 ); -+ if ( str == NULL ) { -+ goto error_return; -+ } - AC_MEMCPY( str, ava->la_attr.bv_val, - ava->la_attr.bv_len ); - str[ al++ ] = '='; -@@ -265,6 +268,9 @@ ldap_explode_rdn( LDAP_CONST char *rdn, int notypes ) - } else { - l = vl; - str = LDAP_MALLOC( l + 1 ); -+ if ( str == NULL ) { -+ goto error_return; -+ } - } - - if ( ava->la_flags & LDAP_AVA_BINARY ) { -@@ -1526,6 +1532,10 @@ str2strval( const char *str, ber_len_t stoplen, struct berval *val, const char * - if ( escapes == 0 ) { - if ( *retFlags & LDAP_AVA_NONPRINTABLE ) { - val->bv_val = LDAP_MALLOCX( len + 1, ctx ); -+ if ( val->bv_val == NULL ) { -+ return( 1 ); -+ } -+ - AC_MEMCPY( val->bv_val, startPos, len ); - val->bv_val[ len ] = '\0'; - } else { -@@ -1536,6 +1546,10 @@ str2strval( const char *str, ber_len_t stoplen, struct berval *val, const char * - ber_len_t s, d; - - val->bv_val = LDAP_MALLOCX( len + 1, ctx ); -+ if ( val->bv_val == NULL ) { -+ return( 1 ); -+ } -+ - for ( s = 0, d = 0; d < len; ) { - if ( LDAP_DN_ESCAPE( startPos[ s ] ) ) { - s++; -@@ -1633,6 +1647,10 @@ DCE2strval( const char *str, struct berval *val, const char **next, unsigned fla - ber_len_t s, d; - - val->bv_val = LDAP_MALLOCX( len + 1, ctx ); -+ if ( val->bv_val == NULL ) { -+ return( 1 ); -+ } -+ - for ( s = 0, d = 0; d < len; ) { - /* - * This point is reached only if escapes -@@ -1714,6 +1732,10 @@ IA52strval( const char *str, struct berval *val, const char **next, unsigned fla - ber_len_t s, d; - - val->bv_val = LDAP_MALLOCX( len + 1, ctx ); -+ if ( val->bv_val == NULL ) { -+ return( 1 ); -+ } -+ - for ( s = 0, d = 0; d < len; ) { - if ( LDAP_DN_ESCAPE( startPos[ s ] ) ) { - s++; -@@ -1804,6 +1826,10 @@ quotedIA52strval( const char *str, struct berval *val, const char **next, unsign - ber_len_t s, d; - - val->bv_val = LDAP_MALLOCX( len + 1, ctx ); -+ if ( val->bv_val == NULL ) { -+ return( 1 ); -+ } -+ - val->bv_len = len; - - for ( s = d = 0; d < len; ) { -@@ -2897,6 +2923,9 @@ ldap_rdn2bv_x( LDAPRDN rdn, struct berval *bv, unsigned flags, void *ctx ) - } - - bv->bv_val = LDAP_MALLOCX( l + 1, ctx ); -+ if ( bv->bv_val == NULL ) { -+ return LDAP_NO_MEMORY; -+ } - - switch ( LDAP_DN_FORMAT( flags ) ) { - case LDAP_DN_FORMAT_LDAPV3: -diff --git a/libraries/libldap/ldif.c b/libraries/libldap/ldif.c -index 5414e59334..1c29619cf3 100644 ---- a/libraries/libldap/ldif.c -+++ b/libraries/libldap/ldif.c -@@ -357,6 +357,9 @@ ldif_must_b64_encode_register( LDAP_CONST char *name, LDAP_CONST char *oid ) - - if ( must_b64_encode == default_must_b64_encode ) { - must_b64_encode = ber_memalloc( sizeof( must_b64_encode_s ) * ( i + 2 ) ); -+ if ( must_b64_encode == NULL ) { -+ return 1; -+ } - - for ( i = 0; !BER_BVISNULL( &default_must_b64_encode[i].name ); i++ ) { - ber_dupbv( &must_b64_encode[i].name, &default_must_b64_encode[i].name ); -@@ -728,6 +731,9 @@ ldif_open( - - if ( fp ) { - lfp = ber_memalloc( sizeof( LDIFFP )); -+ if ( lfp == NULL ) { -+ return NULL; -+ } - lfp->fp = fp; - lfp->prev = NULL; - } - -diff --git a/libraries/libldap/options.c b/libraries/libldap/options.c -index d8dbfea880..bc421dc6ba 100644 ---- a/libraries/libldap/options.c -+++ b/libraries/libldap/options.c -@@ -151,10 +151,21 @@ ldap_get_option( - int i; - info->ldapai_extensions = LDAP_MALLOC(sizeof(char *) * - sizeof(features)/sizeof(LDAPAPIFeatureInfo)); -+ if ( info->ldapai_extensions == NULL ) { -+ rc = LDAP_NO_MEMORY; -+ break; -+ } - - for(i=0; features[i].ldapaif_name != NULL; i++) { - info->ldapai_extensions[i] = - LDAP_STRDUP(features[i].ldapaif_name); -+ if ( info->ldapai_extensions[i] == NULL ) { -+ rc = LDAP_NO_MEMORY; -+ break; -+ } -+ } -+ if ( features[i].ldapaif_name != NULL ) { -+ break; /* LDAP_NO_MEMORY */ - } - - info->ldapai_extensions[i] = NULL; -@@ -895,6 +906,11 @@ ldap_set_option( - /* setting pushes the callback */ - ldaplist *ll; - ll = LDAP_MALLOC( sizeof( *ll )); -+ if ( ll == NULL ) { -+ rc = LDAP_NO_MEMORY; -+ break; -+ } -+ - ll->ll_data = (void *)invalue; - ll->ll_next = lo->ldo_conn_cbs; - lo->ldo_conn_cbs = ll; -diff --git a/libraries/libldap/result.c b/libraries/libldap/result.c -index b4e478aacb..04ee48ea18 100644 ---- a/libraries/libldap/result.c -+++ b/libraries/libldap/result.c -@@ -1027,6 +1027,11 @@ try_read1msg( - * to parse. - */ - ber = ldap_alloc_ber_with_options( ld ); -+ if ( ber == NULL ) { -+ ld->ld_errno = LDAP_NO_MEMORY; -+ return -1; -+ } -+ - if ( ber_sockbuf_ctrl( lc->lconn_sb, LBER_SB_OPT_DATA_READY, NULL ) ) ok = 1; - } - /* set up response chain */ -diff --git a/libraries/libldap/schema.c b/libraries/libldap/schema.c -index 5cb30e7bfb..ef99a17c97 100644 ---- a/libraries/libldap/schema.c -+++ b/libraries/libldap/schema.c -@@ -2126,6 +2126,11 @@ ldap_str2attributetype( LDAP_CONST char * s, - /* Non-numerical OID ... */ - int len = ss-savepos; - at->at_oid = LDAP_MALLOC(len+1); -+ if ( !at->at_oid ) { -+ ldap_attributetype_free(at); -+ return NULL; -+ } -+ - strncpy(at->at_oid, savepos, len); - at->at_oid[len] = 0; - } -@@ -2499,6 +2504,11 @@ ldap_str2objectclass( LDAP_CONST char * s, - /* Non-numerical OID, ignore */ - int len = ss-savepos; - oc->oc_oid = LDAP_MALLOC(len+1); -+ if ( !oc->oc_oid ) { -+ ldap_objectclass_free(oc); -+ return NULL; -+ } -+ - strncpy(oc->oc_oid, savepos, len); - oc->oc_oid[len] = 0; - } -@@ -2780,6 +2790,11 @@ ldap_str2contentrule( LDAP_CONST char * s, - /* Non-numerical OID, ignore */ - int len = ss-savepos; - cr->cr_oid = LDAP_MALLOC(len+1); -+ if ( !cr->cr_oid ) { -+ ldap_contentrule_free(cr); -+ return NULL; -+ } -+ - strncpy(cr->cr_oid, savepos, len); - cr->cr_oid[len] = 0; - } - -diff --git a/servers/slapd/back-meta/config.c b/servers/slapd/back-meta/config.c -index fc0ec2cde5..5cb4d1c1dd 100644 ---- a/servers/slapd/back-meta/config.c -+++ b/servers/slapd/back-meta/config.c -@@ -1481,7 +1481,7 @@ meta_back_cf_gen( ConfigArgs *c ) - char *ptr; - int len = snprintf( buf, sizeof( buf ), SLAP_X_ORDERED_FMT, i ); - bv.bv_len = ((*bvp)[ i ]).bv_len + len; -- bv.bv_val = ber_memrealloc( bv.bv_val, bv.bv_len + 1 ); -+ bv.bv_val = ch_realloc( bv.bv_val, bv.bv_len + 1 ); - ptr = bv.bv_val; - ptr = lutil_strcopy( ptr, buf ); - ptr = lutil_strncopy( ptr, ((*bvp)[ i ]).bv_val, ((*bvp)[ i ]).bv_len ); -@@ -2635,7 +2635,7 @@ idassert-authzFrom "dn:" - assert( !BER_BVISNULL( &mt->mt_idassert_authcDN ) ); - - bv.bv_len = STRLENOF( "dn:" ) + c->be->be_rootndn.bv_len; -- bv.bv_val = ber_memalloc( bv.bv_len + 1 ); -+ bv.bv_val = ch_malloc( bv.bv_len + 1 ); - AC_MEMCPY( bv.bv_val, "dn:", STRLENOF( "dn:" ) ); - AC_MEMCPY( &bv.bv_val[ STRLENOF( "dn:" ) ], c->be->be_rootndn.bv_val, c->be->be_rootndn.bv_len + 1 ); - -diff --git a/servers/slapd/back-meta/map.c b/servers/slapd/back-meta/map.c -index 144dc693de..ee7aa2f086 100644 ---- a/servers/slapd/back-meta/map.c -+++ b/servers/slapd/back-meta/map.c -@@ -381,6 +381,10 @@ ldap_back_int_filter_map_rewrite( - fstr->bv_len = atmp.bv_len + vtmp.bv_len - + ( sizeof("(=)") - 1 ); - fstr->bv_val = ber_memalloc_x( fstr->bv_len + 1, memctx ); -+ if ( !fstr->bv_val ) { -+ ber_memfree_x( vtmp.bv_val, memctx ); -+ return LDAP_NO_MEMORY; -+ } - - snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s=%s)", - atmp.bv_val, vtmp.bv_len ? vtmp.bv_val : "" ); -@@ -398,6 +402,10 @@ ldap_back_int_filter_map_rewrite( - fstr->bv_len = atmp.bv_len + vtmp.bv_len - + ( sizeof("(>=)") - 1 ); - fstr->bv_val = ber_memalloc_x( fstr->bv_len + 1, memctx ); -+ if ( !fstr->bv_val ) { -+ ber_memfree_x( vtmp.bv_val, memctx ); -+ return LDAP_NO_MEMORY; -+ } - - snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s>=%s)", - atmp.bv_val, vtmp.bv_len ? vtmp.bv_val : "" ); -@@ -415,6 +423,10 @@ ldap_back_int_filter_map_rewrite( - fstr->bv_len = atmp.bv_len + vtmp.bv_len - + ( sizeof("(<=)") - 1 ); - fstr->bv_val = ber_memalloc_x( fstr->bv_len + 1, memctx ); -+ if ( !fstr->bv_val ) { -+ ber_memfree_x( vtmp.bv_val, memctx ); -+ return LDAP_NO_MEMORY; -+ } - - snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s<=%s)", - atmp.bv_val, vtmp.bv_len ? vtmp.bv_val : "" ); -@@ -432,6 +444,10 @@ ldap_back_int_filter_map_rewrite( - fstr->bv_len = atmp.bv_len + vtmp.bv_len - + ( sizeof("(~=)") - 1 ); - fstr->bv_val = ber_memalloc_x( fstr->bv_len + 1, memctx ); -+ if ( !fstr->bv_val ) { -+ ber_memfree_x( vtmp.bv_val, memctx ); -+ return LDAP_NO_MEMORY; -+ } - - snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s~=%s)", - atmp.bv_val, vtmp.bv_len ? vtmp.bv_val : "" ); -@@ -450,17 +466,27 @@ ldap_back_int_filter_map_rewrite( - - fstr->bv_len = atmp.bv_len + ( STRLENOF( "(=*)" ) ); - fstr->bv_val = ber_memalloc_x( fstr->bv_len + 128, memctx ); /* FIXME: why 128 ? */ -+ if ( !fstr->bv_val ) { -+ return LDAP_NO_MEMORY; -+ } - - snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s=*)", - atmp.bv_val ); - - if ( !BER_BVISNULL( &f->f_sub_initial ) ) { -+ char *tmp; -+ - len = fstr->bv_len; - - filter_escape_value_x( &f->f_sub_initial, &vtmp, memctx ); - - fstr->bv_len += vtmp.bv_len; -- fstr->bv_val = ber_memrealloc_x( fstr->bv_val, fstr->bv_len + 1, memctx ); -+ tmp = ber_memrealloc_x( fstr->bv_val, fstr->bv_len + 1, memctx ); -+ if ( !tmp ) { -+ ber_memfree_x( vtmp.bv_val, memctx ); -+ return LDAP_NO_MEMORY; -+ } -+ fstr->bv_val = tmp; - - snprintf( &fstr->bv_val[len - 2], vtmp.bv_len + 3, - /* "(attr=" */ "%s*)", -@@ -471,11 +497,18 @@ ldap_back_int_filter_map_rewrite( - - if ( f->f_sub_any != NULL ) { - for ( i = 0; !BER_BVISNULL( &f->f_sub_any[i] ); i++ ) { -+ char *tmp; -+ - len = fstr->bv_len; - filter_escape_value_x( &f->f_sub_any[i], &vtmp, memctx ); - - fstr->bv_len += vtmp.bv_len + 1; -- fstr->bv_val = ber_memrealloc_x( fstr->bv_val, fstr->bv_len + 1, memctx ); -+ tmp = ber_memrealloc_x( fstr->bv_val, fstr->bv_len + 1, memctx ); -+ if ( !tmp ) { -+ ber_memfree_x( vtmp.bv_val, memctx ); -+ return LDAP_NO_MEMORY; -+ } -+ fstr->bv_val = tmp; - - snprintf( &fstr->bv_val[len - 1], vtmp.bv_len + 3, - /* "(attr=[init]*[any*]" */ "%s*)", -@@ -485,12 +518,19 @@ ldap_back_int_filter_map_rewrite( - } - - if ( !BER_BVISNULL( &f->f_sub_final ) ) { -+ char *tmp; -+ - len = fstr->bv_len; - - filter_escape_value_x( &f->f_sub_final, &vtmp, memctx ); - - fstr->bv_len += vtmp.bv_len; -- fstr->bv_val = ber_memrealloc_x( fstr->bv_val, fstr->bv_len + 1, memctx ); -+ tmp = ber_memrealloc_x( fstr->bv_val, fstr->bv_len + 1, memctx ); -+ if ( !tmp ) { -+ ber_memfree_x( vtmp.bv_val, memctx ); -+ return LDAP_NO_MEMORY; -+ } -+ fstr->bv_val = tmp; - - snprintf( &fstr->bv_val[len - 1], vtmp.bv_len + 3, - /* "(attr=[init*][any*]" */ "%s)", -@@ -510,6 +550,9 @@ ldap_back_int_filter_map_rewrite( - - fstr->bv_len = atmp.bv_len + ( STRLENOF( "(=*)" ) ); - fstr->bv_val = ber_memalloc_x( fstr->bv_len + 1, memctx ); -+ if ( !fstr->bv_val ) { -+ return LDAP_NO_MEMORY; -+ } - - snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s=*)", - atmp.bv_val ); -@@ -537,6 +580,10 @@ ldap_back_int_filter_map_rewrite( - - fstr->bv_len += vtmp.bv_len; - fstr->bv_val = ber_memrealloc_x( fstr->bv_val, fstr->bv_len + 1, memctx ); -+ if ( !fstr->bv_val ) { -+ ber_memfree_x( vtmp.bv_val, memctx ); -+ return LDAP_NO_MEMORY; -+ } - - snprintf( &fstr->bv_val[len-1], vtmp.bv_len + 2, - /*"("*/ "%s)", vtmp.bv_len ? vtmp.bv_val : "" ); -@@ -565,6 +612,10 @@ ldap_back_int_filter_map_rewrite( - ( !BER_BVISEMPTY( &f->f_mr_rule_text ) ? f->f_mr_rule_text.bv_len + 1 : 0 ) + - vtmp.bv_len + ( STRLENOF( "(:=)" ) ); - fstr->bv_val = ber_memalloc_x( fstr->bv_len + 1, memctx ); -+ if ( !fstr->bv_val ) { -+ ber_memfree_x( vtmp.bv_val, memctx ); -+ return LDAP_NO_MEMORY; -+ } - - snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s%s%s%s:=%s)", - atmp.bv_val, -diff --git a/servers/slapd/back-meta/search.c b/servers/slapd/back-meta/search.c -index 438b324350..af4ae14397 100644 ---- a/servers/slapd/back-meta/search.c -+++ b/servers/slapd/back-meta/search.c -@@ -1301,7 +1301,7 @@ really_bad:; - for ( cnt = 0; references[ cnt ]; cnt++ ) - ; - -- rs->sr_ref = ber_memalloc_x( sizeof( struct berval ) * ( cnt + 1 ), -+ rs->sr_ref = op->o_tmpalloc( sizeof( struct berval ) * ( cnt + 1 ), - op->o_tmpmemctx ); - - for ( cnt = 0; references[ cnt ]; cnt++ ) { -@@ -1456,7 +1456,7 @@ really_bad:; - for ( cnt = 0; references[ cnt ]; cnt++ ) - ; - -- sr_ref = ber_memalloc_x( sizeof( struct berval ) * ( cnt + 1 ), -+ sr_ref = op->o_tmpalloc( sizeof( struct berval ) * ( cnt + 1 ), - op->o_tmpmemctx ); - - for ( cnt = 0; references[ cnt ]; cnt++ ) { - diff --git a/bugfix-openldap-autoconf-pkgconfig-nss.patch b/bugfix-openldap-autoconf-pkgconfig-nss.patch deleted file mode 100644 index a975e71..0000000 --- a/bugfix-openldap-autoconf-pkgconfig-nss.patch +++ /dev/null @@ -1,38 +0,0 @@ -diff --git a/configure.in b/configure.in -index 2134171..c643891 100644 ---- a/configure.in -+++ b/configure.in -@@ -1230,28 +1230,16 @@ if test $ol_link_tls = no ; then - fi - fi - --dnl NOTE: caller must specify -I/path/to/nspr4 and -I/path/to/nss3 --dnl and -L/path/to/nspr4 libs and -L/path/to/nss3 libs if those libs --dnl are not in the default system location - if test $ol_link_tls = no ; then - if test $ol_with_tls = moznss || test $ol_with_tls = auto ; then -- have_moznss=no -- AC_CHECK_HEADERS([nssutil.h]) -- if test "$ac_cv_header_nssutil_h" = yes ; then -- AC_CHECK_LIB([nss3], [NSS_Initialize], -- [ have_moznss=yes ], [ have_moznss=no ]) -- fi -+ PKG_CHECK_MODULES(MOZNSS, [nss nspr], [have_moznss=yes], [have_moznss=no]) - -- if test "$have_moznss" = yes ; then -+ if test $have_moznss = yes ; then - ol_with_tls=moznss - ol_link_tls=yes -- AC_DEFINE(HAVE_MOZNSS, 1, -- [define if you have MozNSS]) -- TLS_LIBS="-lssl3 -lsmime3 -lnss3 -lnssutil3 -lplds4 -lplc4 -lnspr4" -- else -- if test $ol_with_tls = moznss ; then -- AC_MSG_ERROR([MozNSS not found - please specify the location to the NSPR and NSS header files in CPPFLAGS and the location to the NSPR and NSS libraries in LDFLAGS (if not in the system location)]) -- fi -+ AC_DEFINE(HAVE_MOZNSS, 1, [define if you have MozNSS]) -+ TLS_LIBS="$MOZNSS_LIBS" -+ CFLAGS="$CFLAGS $MOZNSS_CFLAGS" - fi - fi - fi diff --git a/bugfix-openldap-fix-implicit-function-declaration.patch b/bugfix-openldap-fix-implicit-function-declaration.patch deleted file mode 100644 index 1c1da09..0000000 --- a/bugfix-openldap-fix-implicit-function-declaration.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 57b7003a6473206e2526dcc91c7ddb357c7e66de Mon Sep 17 00:00:00 2001 -From: Sergei Trofimovich -Date: Mon, 19 Jun 2017 21:48:05 +0100 -Subject: [PATCH] thr_posix.c: fix implicit function declaration for - 'pthread_setconcurrency' - -thr_posix.c: In function 'ldap_pvt_thread_set_concurrency': -thr_posix.c:96:9: error: implicit declaration of function 'pthread_setconcurrency' - return pthread_setconcurrency( n ); - ^~~~~~~~~~~~~~~~~~~~~~ - pthread_setcanceltype - -Signed-off-by: Sergei Trofimovich ---- - libraries/libldap_r/thr_posix.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/libraries/libldap_r/thr_posix.c b/libraries/libldap_r/thr_posix.c -index 35bde07327..e0368cc1eb 100644 ---- a/libraries/libldap_r/thr_posix.c -+++ b/libraries/libldap_r/thr_posix.c -@@ -14,6 +14,8 @@ - * . - */ - -+#define _XOPEN_SOURCE 500 /* For pthread_setconcurrency() on glibc */ -+ - #include "portable.h" - - #if defined( HAVE_PTHREADS ) diff --git a/bugfix-openldap-nss-ciphers-use-nss-defaults.patch b/bugfix-openldap-nss-ciphers-use-nss-defaults.patch deleted file mode 100644 index 9a418da..0000000 --- a/bugfix-openldap-nss-ciphers-use-nss-defaults.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/libraries/libldap/tls_m.c b/libraries/libldap/tls_m.c -index fb5554e..7d5ffea 100644 ---- a/libraries/libldap/tls_m.c -+++ b/libraries/libldap/tls_m.c -@@ -557,7 +557,16 @@ nss_parse_ciphers(const char *cipherstr, int cipher_list[ciphernum]) - } - } else if (!strcmp(cipher, "DEFAULT")) { - for (i=0; itc_certdb_slot ); -+ c->tc_certdb_slot = NULL; - } - if ( c->tc_pin_file ) { - PL_strfree( c->tc_pin_file ); diff --git a/bugfix-openldap-nss-protocol-version-new-api.patch b/bugfix-openldap-nss-protocol-version-new-api.patch deleted file mode 100644 index 3b71526..0000000 --- a/bugfix-openldap-nss-protocol-version-new-api.patch +++ /dev/null @@ -1,63 +0,0 @@ -diff --git a/libraries/libldap/tls_m.c b/libraries/libldap/tls_m.c -index d69b186..7f92783 100644 ---- a/libraries/libldap/tls_m.c -+++ b/libraries/libldap/tls_m.c -@@ -2238,6 +2238,58 @@ tlsm_deferred_ctx_init( void *arg ) - 0, 0, 0 ); - return -1; - } -+ if ( lt->lt_protocol_min >= LDAP_OPT_X_TLS_PROTOCOL_SSL3 ) { -+ SSLVersionRange supported_range, default_range, selected_range; -+ if ( SECSuccess != SSL_VersionRangeGetSupported(ssl_variant_stream, &supported_range) ) { -+ Debug( LDAP_DEBUG_ANY, -+ "TLS: error: could not get SSL supported version range (SSL_VersionRangeGetSupported).\n", -+ 0, 0, 0 ); -+ return -1; -+ } else { -+ Debug( LDAP_DEBUG_ANY, -+ "TLS: info: SSL supported protocol version range is (%#04x, %#04x) (SSL_VersionRangeGetSupported).\n", -+ supported_range.min, supported_range.max, 0); -+ } -+ if ( SECSuccess != SSL_VersionRangeGetDefault(ssl_variant_stream, &default_range) ) { -+ Debug( LDAP_DEBUG_ANY, -+ "TLS: error: could not get SSL default protocol version range (SSL_VersionRangeGetDefault).\n", -+ 0, 0, 0 ); -+ return -1; -+ } else { -+ Debug( LDAP_DEBUG_ANY, -+ "TLS: info: SSL default protocol version range is (%#04x, %#04x) (SSL_VersionRangeGetDefault).\n", -+ default_range.min, default_range.max, 0); -+ } -+ selected_range.min = lt->lt_protocol_min; -+ selected_range.max = supported_range.max; -+ Debug( LDAP_DEBUG_ANY, -+ "TLS: info: TLS configured protocol minimal version is %#04x.\n", -+ selected_range.min, selected_range.max, 0); -+ if ( (selected_range.min > supported_range.max) || -+ (selected_range.max < supported_range.min) ) { -+ Debug( LDAP_DEBUG_ANY, -+ "TLS: error: selected protocol version range out of NSS-supported version range.\n", -+ 0, 0, 0); -+ return -1; -+ } else { -+ if ( SECSuccess != SSL_VersionRangeSet(ctx->tc_model, &selected_range) ) { -+ Debug( LDAP_DEBUG_ANY, -+ "TLS: error: could not set protocol version range (SSL_VersionRangeSet).\n", -+ 0, 0, 0); -+ return -1; -+ } -+ if ( SECSuccess != SSL_VersionRangeGet(ctx->tc_model, &selected_range) ) { -+ Debug( LDAP_DEBUG_ANY, -+ "TLS: error: could not get protocol version range (SSL_VersionRangeGet).\n", -+ 0, 0, 0); -+ return -1; -+ } else { -+ Debug( LDAP_DEBUG_ANY, -+ "TLS: info: SSL set protocol version range is (%#04x, %#04x) (SSL_VersionRangeGet).\n", -+ selected_range.min, selected_range.max, 0); -+ } -+ } -+ } - - if ( SECSuccess != SSL_OptionSet( ctx->tc_model, SSL_HANDSHAKE_AS_CLIENT, !ctx->tc_is_server ) ) { - Debug( LDAP_DEBUG_ANY, diff --git a/bugfix-openldap-nss-unregister-on-unload.patch b/bugfix-openldap-nss-unregister-on-unload.patch deleted file mode 100644 index 44a8320..0000000 --- a/bugfix-openldap-nss-unregister-on-unload.patch +++ /dev/null @@ -1,36 +0,0 @@ -diff --git a/libraries/libldap/init.c b/libraries/libldap/init.c -index 9b877a9..9a8d661 100644 ---- a/libraries/libldap/init.c -+++ b/libraries/libldap/init.c -@@ -473,7 +473,7 @@ static void openldap_ldap_init_w_env( - * Sorry, don't know how to handle this for non-GCC environments. - */ - static void ldap_int_destroy_global_options(void) -- __attribute__ ((destructor)); -+ __attribute__ ((destructor (2))); - #endif - - static void -diff --git a/libraries/libldap/tls_m.c b/libraries/libldap/tls_m.c -index 7f92783..f6c27de 100644 ---- a/libraries/libldap/tls_m.c -+++ b/libraries/libldap/tls_m.c -@@ -1951,6 +1951,18 @@ tlsm_clientauth_init( tlsm_ctx *ctx ) - return ( status == SECSuccess ? 0 : -1 ); - } - -+#if defined(__GNUC__) -+static void -+tlsm_destroy_on_unload(void) __attribute__ ((destructor (1))); -+ -+static void -+tlsm_destroy_on_unload(void) -+{ -+ if (NSS_IsInitialized()) -+ NSS_UnregisterShutdown(tlsm_nss_shutdown_cb, NULL); -+} -+#endif -+ - /* - * Tear down the TLS subsystem. Should only be called once. - */ diff --git a/bugfix-openldap-nss-update-list-of-ciphers.patch b/bugfix-openldap-nss-update-list-of-ciphers.patch deleted file mode 100644 index 55facd6..0000000 --- a/bugfix-openldap-nss-update-list-of-ciphers.patch +++ /dev/null @@ -1,257 +0,0 @@ -diff --git a/libraries/libldap/tls_m.c b/libraries/libldap/tls_m.c -index f6c27de..bba215a 100644 ---- a/libraries/libldap/tls_m.c -+++ b/libraries/libldap/tls_m.c -@@ -76,6 +76,11 @@ - #define HAVE_SECMOD_RESTARTMODULES 1 - #endif - -+/* NSS 3.20.0 and later have SHA384 ciphers */ -+#if NSS_VERSION_INT >= 0x03140000 -+#define HAVE_SHA384_CIPHERS 1 -+#endif -+ - /* InitContext does not currently work in server mode */ - /* #define INITCONTEXT_HACK 1 */ - -@@ -210,27 +215,36 @@ typedef struct { - int num; /* The cipher id */ - int attr; /* cipher attributes: algorithms, etc */ - int version; /* protocol version valid for this cipher */ -- int bits; /* bits of strength */ -- int alg_bits; /* bits of the algorithm */ - int strength; /* LOW, MEDIUM, HIGH */ - int enabled; /* Enabled by default? */ - } cipher_properties; - - /* cipher attributes */ --#define SSL_kRSA 0x00000001L --#define SSL_aRSA 0x00000002L --#define SSL_aDSS 0x00000004L --#define SSL_DSS SSL_aDSS --#define SSL_eNULL 0x00000008L --#define SSL_DES 0x00000010L --#define SSL_3DES 0x00000020L --#define SSL_RC4 0x00000040L --#define SSL_RC2 0x00000080L --#define SSL_AES 0x00000100L --#define SSL_MD5 0x00000200L --#define SSL_SHA1 0x00000400L --#define SSL_SHA SSL_SHA1 --#define SSL_RSA (SSL_kRSA|SSL_aRSA) -+#define SSL_kRSA 0x00000001L -+#define SSL_aRSA 0x00000002L -+#define SSL_RSA (SSL_kRSA|SSL_aRSA) -+#define SSL_aDSA 0x00000004L -+#define SSL_DSA SSL_aDSA -+#define SSL_eNULL 0x00000008L -+#define SSL_DES 0x00000010L -+#define SSL_3DES 0x00000020L -+#define SSL_RC4 0x00000040L -+#define SSL_RC2 0x00000080L -+#define SSL_AES128 0x00000100L -+#define SSL_AES256 0x00000200L -+#define SSL_AES (SSL_AES128|SSL_AES256) -+#define SSL_MD5 0x00000400L -+#define SSL_SHA1 0x00000800L -+#define SSL_kEDH 0x00001000L -+#define SSL_CAMELLIA128 0x00002000L -+#define SSL_CAMELLIA256 0x00004000L -+#define SSL_CAMELLIA (SSL_CAMELLIA128|SSL_CAMELLIA256) -+#define SSL_SEED 0x00008000L -+#define SSL_kECDH 0x00010000L -+#define SSL_kECDHE 0x00020000L -+#define SSL_aECDSA 0x00040000L -+#define SSL_SHA256 0x00080000L -+#define SSL_SHA384 0x00100000L - - /* cipher strength */ - #define SSL_NULL 0x00000001L -@@ -244,32 +258,120 @@ typedef struct { - #define SSL3 0x00000002L - /* OpenSSL treats SSL3 and TLSv1 the same */ - #define TLS1 SSL3 -+#define TLS1_2 0x00000004L - - /* Cipher translation */ - static cipher_properties ciphers_def[] = { -- /* SSL 2 ciphers */ -- {"DES-CBC3-MD5", SSL_EN_DES_192_EDE3_CBC_WITH_MD5, SSL_kRSA|SSL_aRSA|SSL_3DES|SSL_MD5, SSL2, 168, 168, SSL_HIGH, SSL_ALLOWED}, -- {"RC2-CBC-MD5", SSL_EN_RC2_128_CBC_WITH_MD5, SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5, SSL2, 128, 128, SSL_MEDIUM, SSL_ALLOWED}, -- {"RC4-MD5", SSL_EN_RC4_128_WITH_MD5, SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5, SSL2, 128, 128, SSL_MEDIUM, SSL_ALLOWED}, -- {"DES-CBC-MD5", SSL_EN_DES_64_CBC_WITH_MD5, SSL_kRSA|SSL_aRSA|SSL_DES|SSL_MD5, SSL2, 56, 56, SSL_LOW, SSL_ALLOWED}, -- {"EXP-RC2-CBC-MD5", SSL_EN_RC2_128_CBC_EXPORT40_WITH_MD5, SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5, SSL2, 40, 128, SSL_EXPORT40, SSL_ALLOWED}, -- {"EXP-RC4-MD5", SSL_EN_RC4_128_EXPORT40_WITH_MD5, SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5, SSL2, 40, 128, SSL_EXPORT40, SSL_ALLOWED}, -- -- /* SSL3 ciphers */ -- {"RC4-MD5", SSL_RSA_WITH_RC4_128_MD5, SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5, SSL3, 128, 128, SSL_MEDIUM, SSL_ALLOWED}, -- {"RC4-SHA", SSL_RSA_WITH_RC4_128_SHA, SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_SHA1, SSL3, 128, 128, SSL_MEDIUM, SSL_ALLOWED}, -- {"DES-CBC3-SHA", SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_kRSA|SSL_aRSA|SSL_3DES|SSL_SHA1, SSL3, 168, 168, SSL_HIGH, SSL_ALLOWED}, -- {"DES-CBC-SHA", SSL_RSA_WITH_DES_CBC_SHA, SSL_kRSA|SSL_aRSA|SSL_DES|SSL_SHA1, SSL3, 56, 56, SSL_LOW, SSL_ALLOWED}, -- {"EXP-RC4-MD5", SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5, SSL3, 40, 128, SSL_EXPORT40, SSL_ALLOWED}, -- {"EXP-RC2-CBC-MD5", SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5, SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5, SSL3, 0, 0, SSL_EXPORT40, SSL_ALLOWED}, -- {"NULL-MD5", SSL_RSA_WITH_NULL_MD5, SSL_kRSA|SSL_aRSA|SSL_eNULL|SSL_MD5, SSL3, 0, 0, SSL_NULL, SSL_NOT_ALLOWED}, -- {"NULL-SHA", SSL_RSA_WITH_NULL_SHA, SSL_kRSA|SSL_aRSA|SSL_eNULL|SSL_SHA1, SSL3, 0, 0, SSL_NULL, SSL_NOT_ALLOWED}, -+ -+ /* -+ * Use the same DEFAULT cipher list as OpenSSL, which is defined as: ALL:!aNULL:!eNULL:!SSLv2 -+ */ -+ -+ /* SSLv2 ciphers */ -+ {"DES-CBC-MD5", SSL_EN_DES_64_CBC_WITH_MD5, SSL_kRSA|SSL_aRSA|SSL_DES|SSL_MD5, SSL2, SSL_LOW}, -+ {"DES-CBC3-MD5", SSL_EN_DES_192_EDE3_CBC_WITH_MD5, SSL_kRSA|SSL_aRSA|SSL_3DES|SSL_MD5, SSL2, SSL_HIGH}, -+ {"RC2-CBC-MD5", SSL_EN_RC2_128_CBC_WITH_MD5, SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5, SSL2, SSL_MEDIUM}, -+ {"RC4-MD5", SSL_EN_RC4_128_WITH_MD5, SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5, SSL2, SSL_MEDIUM}, -+ {"EXP-RC2-CBC-MD5", SSL_EN_RC2_128_CBC_EXPORT40_WITH_MD5, SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5, SSL2, SSL_EXPORT40}, -+ {"EXP-RC4-MD5", SSL_EN_RC4_128_EXPORT40_WITH_MD5, SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5, SSL2, SSL_EXPORT40}, -+ -+ /* SSLv3 ciphers */ -+ {"NULL-MD5", SSL_RSA_WITH_NULL_MD5, SSL_kRSA|SSL_aRSA|SSL_eNULL|SSL_MD5, SSL3, SSL_NULL}, -+ {"NULL-SHA", SSL_RSA_WITH_NULL_SHA, SSL_kRSA|SSL_aRSA|SSL_eNULL|SSL_SHA1, SSL3, SSL_NULL}, -+ {"DES-CBC-SHA", SSL_RSA_WITH_DES_CBC_SHA, SSL_kRSA|SSL_aRSA|SSL_DES|SSL_SHA1, SSL3, SSL_LOW}, -+ {"DES-CBC3-SHA", SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_kRSA|SSL_aRSA|SSL_3DES|SSL_SHA1, SSL3, SSL_HIGH}, -+ {"RC4-MD5", SSL_RSA_WITH_RC4_128_MD5, SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5, SSL3, SSL_MEDIUM}, -+ {"RC4-SHA", SSL_RSA_WITH_RC4_128_SHA, SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_SHA1, SSL3, SSL_MEDIUM}, -+ {"EXP-RC2-CBC-MD5", SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5, SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5, SSL3, SSL_EXPORT40}, -+ {"EXP-RC4-MD5", SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5, SSL3, SSL_EXPORT40}, -+ {"EDH-RSA-DES-CBC-SHA", SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_kEDH|SSL_aRSA|SSL_DES|SSL_SHA1, SSL3, SSL_LOW}, -+ {"EDH-RSA-DES-CBC3-SHA", SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_kEDH|SSL_aRSA|SSL_3DES|SSL_SHA1, SSL3, SSL_HIGH}, -+ {"EDH-DSS-DES-CBC-SHA", SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_kEDH|SSL_aDSA|SSL_DES|SSL_SHA1, SSL3, SSL_LOW}, -+ {"EDH-DSS-DES-CBC3-SHA", SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_kEDH|SSL_aDSA|SSL_3DES|SSL_SHA1, SSL3, SSL_HIGH}, - - /* TLSv1 ciphers */ -- {"EXP1024-DES-CBC-SHA", TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA, SSL_kRSA|SSL_aRSA|SSL_DES|SSL_SHA, TLS1, 56, 56, SSL_EXPORT56, SSL_ALLOWED}, -- {"EXP1024-RC4-SHA", TLS_RSA_EXPORT1024_WITH_RC4_56_SHA, SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_SHA, TLS1, 56, 56, SSL_EXPORT56, SSL_ALLOWED}, -- {"AES128-SHA", TLS_RSA_WITH_AES_128_CBC_SHA, SSL_kRSA|SSL_aRSA|SSL_AES|SSL_SHA, TLS1, 128, 128, SSL_HIGH, SSL_ALLOWED}, -- {"AES256-SHA", TLS_RSA_WITH_AES_256_CBC_SHA, SSL_kRSA|SSL_aRSA|SSL_AES|SSL_SHA, TLS1, 256, 256, SSL_HIGH, SSL_ALLOWED}, -+ {"EXP1024-DES-CBC-SHA", TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA, SSL_kRSA|SSL_aRSA|SSL_DES|SSL_SHA1, TLS1, SSL_EXPORT56}, -+ {"EXP1024-RC4-SHA", TLS_RSA_EXPORT1024_WITH_RC4_56_SHA, SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_SHA1, TLS1, SSL_EXPORT56}, -+ {"SEED-SHA", TLS_RSA_WITH_SEED_CBC_SHA, SSL_kRSA|SSL_aRSA|SSL_SEED|SSL_SHA1, TLS1, SSL_MEDIUM}, -+ {"AES128-SHA", TLS_RSA_WITH_AES_128_CBC_SHA, SSL_kRSA|SSL_aRSA|SSL_AES128|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"AES256-SHA", TLS_RSA_WITH_AES_256_CBC_SHA, SSL_kRSA|SSL_aRSA|SSL_AES256|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"CAMELLIA256-SHA", TLS_RSA_WITH_CAMELLIA_256_CBC_SHA, SSL_kRSA|SSL_aRSA|SSL_CAMELLIA256|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"CAMELLIA128-SHA", TLS_RSA_WITH_CAMELLIA_128_CBC_SHA, SSL_kRSA|SSL_aRSA|SSL_CAMELLIA128|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"DHE-RSA-AES128-SHA", TLS_DHE_RSA_WITH_AES_128_CBC_SHA, SSL_kEDH|SSL_aRSA|SSL_AES128|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"DHE-RSA-AES256-SHA", TLS_DHE_RSA_WITH_AES_256_CBC_SHA, SSL_kEDH|SSL_aRSA|SSL_AES256|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"DHE-RSA-CAMELLIA128-SHA", TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, SSL_kEDH|SSL_aRSA|SSL_CAMELLIA128|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"DHE-RSA-CAMELLIA256-SHA", TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, SSL_kEDH|SSL_aRSA|SSL_CAMELLIA256|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"DHE-DSS-RC4-SHA", TLS_DHE_DSS_WITH_RC4_128_SHA, SSL_kEDH|SSL_aDSA|SSL_RC4|SSL_SHA1, TLS1, SSL_MEDIUM}, -+ {"DHE-DSS-AES128-SHA", TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_kEDH|SSL_aDSA|SSL_AES128|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"DHE-DSS-AES256-SHA", TLS_DHE_DSS_WITH_AES_256_CBC_SHA, SSL_kEDH|SSL_aDSA|SSL_AES256|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"DHE-DSS-CAMELLIA128-SHA", TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, SSL_kEDH|SSL_aDSA|SSL_CAMELLIA128|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"DHE-DSS-CAMELLIA256-SHA", TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, SSL_kEDH|SSL_aDSA|SSL_CAMELLIA256|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"ECDH-RSA-NULL-SHA", TLS_ECDH_RSA_WITH_NULL_SHA, SSL_kECDH|SSL_aRSA|SSL_eNULL|SSL_SHA1, TLS1, SSL_NULL}, -+ {"ECDH-RSA-RC4-SHA", TLS_ECDH_RSA_WITH_RC4_128_SHA, SSL_kECDH|SSL_aRSA|SSL_RC4|SSL_SHA1, TLS1, SSL_MEDIUM}, -+ {"ECDH-RSA-DES-CBC3-SHA", TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, SSL_kECDH|SSL_aRSA|SSL_3DES|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"ECDH-RSA-AES128-SHA", TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, SSL_kECDH|SSL_aRSA|SSL_AES128|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"ECDH-RSA-AES256-SHA", TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, SSL_kECDH|SSL_aRSA|SSL_AES256|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"ECDH-ECDSA-NULL-SHA", TLS_ECDH_ECDSA_WITH_NULL_SHA, SSL_kECDH|SSL_aECDSA|SSL_eNULL|SSL_SHA1, TLS1, SSL_NULL}, -+ {"ECDH-ECDSA-RC4-SHA", TLS_ECDH_ECDSA_WITH_RC4_128_SHA, SSL_kECDH|SSL_aECDSA|SSL_RC4|SSL_SHA1, TLS1, SSL_MEDIUM}, -+ {"ECDH-ECDSA-DES-CBC3-SHA", TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, SSL_kECDH|SSL_aECDSA|SSL_3DES|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"ECDH-ECDSA-AES128-SHA", TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, SSL_kECDH|SSL_aECDSA|SSL_AES128|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"ECDH-ECDSA-AES256-SHA", TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, SSL_kECDH|SSL_aECDSA|SSL_AES256|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"ECDHE-RSA-NULL-SHA", TLS_ECDHE_RSA_WITH_NULL_SHA, SSL_kECDHE|SSL_aRSA|SSL_eNULL|SSL_SHA1, TLS1, SSL_NULL}, -+ {"ECDHE-RSA-RC4-SHA", TLS_ECDHE_RSA_WITH_RC4_128_SHA, SSL_kECDHE|SSL_aRSA|SSL_RC4|SSL_SHA1, TLS1, SSL_MEDIUM}, -+ {"ECDHE-RSA-DES-CBC3-SHA", TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_kECDHE|SSL_aRSA|SSL_3DES|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"ECDHE-RSA-AES128-SHA", TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, SSL_kECDHE|SSL_aRSA|SSL_AES128|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"ECDHE-RSA-AES256-SHA", TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, SSL_kECDHE|SSL_aRSA|SSL_AES256|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"ECDHE-ECDSA-NULL-SHA", TLS_ECDHE_ECDSA_WITH_NULL_SHA, SSL_kECDHE|SSL_aECDSA|SSL_eNULL|SSL_SHA1, TLS1, SSL_NULL}, -+ {"ECDHE-ECDSA-RC4-SHA", TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, SSL_kECDHE|SSL_aECDSA|SSL_RC4|SSL_SHA1, TLS1, SSL_MEDIUM}, -+ {"ECDHE-ECDSA-DES-CBC3-SHA", TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, SSL_kECDHE|SSL_aECDSA|SSL_3DES|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"ECDHE-ECDSA-AES128-SHA", TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, SSL_kECDHE|SSL_aECDSA|SSL_AES128|SSL_SHA1, TLS1, SSL_HIGH}, -+ {"ECDHE-ECDSA-AES256-SHA", TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, SSL_kECDHE|SSL_aECDSA|SSL_AES256|SSL_SHA1, TLS1, SSL_HIGH}, -+ -+/* conditional on one of the newer defs */ -+#ifdef TLS_RSA_WITH_AES_128_GCM_SHA256 -+ /* TLSv1.2 ciphers */ -+ /* The following ciphers appear in the openssl sources as TLSv1.2 but currently have no NSS equivalent -+ -+ DHE-DSS-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=DSS Enc=AESGCM(256) Mac=AEAD -+ ECDH-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AESGCM(256) Mac=AEAD -+ ECDH-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AESGCM(256) Mac=AEAD -+ ECDH-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AES(256) Mac=SHA384 -+ ECDH-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AES(256) Mac=SHA384 -+ ECDH-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AESGCM(128) Mac=AEAD -+ ECDH-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AESGCM(128) Mac=AEAD -+ ECDH-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AES(128) Mac=SHA256 -+ ECDH-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AES(128) Mac=SHA256 -+ -+ */ -+ {"NULL-SHA256", TLS_RSA_WITH_NULL_SHA256, SSL_kRSA|SSL_aRSA|SSL_eNULL|SSL_SHA256, TLS1_2, SSL_NULL}, -+ {"AES128-SHA256", TLS_RSA_WITH_AES_128_CBC_SHA256, SSL_kRSA|SSL_aRSA|SSL_AES128|SSL_SHA256, TLS1_2, SSL_HIGH}, -+ {"AES256-SHA256", TLS_RSA_WITH_AES_256_CBC_SHA256, SSL_kRSA|SSL_aRSA|SSL_AES256|SSL_SHA256, TLS1_2, SSL_HIGH}, -+ {"AES128-GCM-SHA256", TLS_RSA_WITH_AES_128_GCM_SHA256, SSL_kRSA|SSL_aRSA|SSL_AES128|SSL_AESGCM|SSL_AEAD, TLS1_2, SSL_HIGH}, -+ {"AES256-GCM-SHA384", TLS_RSA_WITH_AES_256_GCM_SHA384, SSL_kRSA|SSL_aRSA|SSL_AES256|SSL_AESGCM|SSL_AEAD, TLS1_2, SSL_HIGH}, -+ -+ {"DHE-RSA-AES256-SHA256", TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, SSL_kEDH|SSL_aRSA|SSL_AES256|SSL_SHA256, TLS1_2, SSL_HIGH}, -+ {"DHE-RSA-AES128-SHA256", TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, SSL_kEDH|SSL_aRSA|SSL_AES128|SSL_SHA256, TLS1_2, SSL_HIGH}, -+ {"DHE-RSA-AES128-GCM-SHA256", TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, SSL_kEDH|SSL_aRSA|SSL_AES128|SSL_AESGCM|SSL_AEAD, TLS1_2, SSL_HIGH}, -+ {"DHE-RSA-AES256-GCM-SHA384", TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, SSL_kEDH|SSL_aRSA|SSL_AES256|SSL_AESGCM|SSL_AEAD, TLS1_2, SSL_HIGH}, -+ -+ {"DHE-DSS-AES128-SHA256", TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, SSL_kEDH|SSL_aDSA|SSL_AES128|SSL_SHA256, TLS1_2, SSL_HIGH}, -+ {"DHE-DSS-AES256-SHA256", TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, SSL_kEDH|SSL_aDSA|SSL_AES256|SSL_SHA256, TLS1_2, SSL_HIGH}, -+ {"DHE-DSS-AES128-GCM-SHA256", TLS_DHE_DSS_WITH_AES_128_GCM_SHA256, SSL_kEDH|SSL_aDSA|SSL_AES128|SSL_AESGCM|SSL_AEAD, TLS1_2, SSL_HIGH}, -+ {"DHE-DSS-AES256-GCM-SHA384", TLS_DHE_DSS_WITH_AES_256_GCM_SHA384, SSL_kEDH|SSL_aDSA|SSL_AES256|SSL_AESGCM|SSL_AEAD, TLS1_2, SSL_HIGH}, -+ -+ {"ECDHE-ECDSA-AES128-SHA256", TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, SSL_kECDHE|SSL_aECDSA|SSL_AES128|SSL_SHA256, TLS1_2, SSL_HIGH}, -+ {"ECDHE-RSA-AES128-SHA256", TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, SSL_kECDHE|SSL_aRSA|SSL_AES128|SSL_SHA256, TLS1_2, SSL_HIGH}, -+ {"ECDHE-ECDSA-AES128-GCM-SHA256", TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, SSL_kECDHE|SSL_aECDSA|SSL_AES128|SSL_AESGCM|SSL_AEAD, TLS1_2, SSL_HIGH}, -+ {"ECDHE-RSA-AES128-GCM-SHA256", TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, SSL_kECDHE|SSL_aRSA|SSL_AES128|SSL_AESGCM|SSL_AEAD, TLS1_2, SSL_HIGH}, -+ {"ECDHE-ECDSA-AES256-GCM-SHA384", TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, SSL_kECDHE|SSL_aECDSA|SSL_AES256|SSL_AESGCM|SSL_AEAD, TLS1_2, SSL_HIGH}, -+ {"ECDHE-RSA-AES256-GCM-SHA384", TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, SSL_kECDHE|SSL_aRSA|SSL_AES256|SSL_AESGCM|SSL_AEAD, TLS1_2, SSL_HIGH}, -+ {"ECDHE-ECDSA-AES256-SHA384", TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, SSL_kECDHE|SSL_aECDSA|SSL_AES256|SSL_SHA384, TLS1_2, SSL_HIGH}, -+ {"ECDHE-RSA-AES256-SHA384", TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, SSL_kECDHE|SSL_aRSA|SSL_AES256|SSL_SHA384, TLS1_2, SSL_HIGH}, -+#endif -+ -+ {"ECDHE-RSA-CHACHA20-POLY1305", 0xcca8 /* TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 */, SSL_kECDHE|SSL_aRSA|SSL_CHACHA20POLY1305|SSL_AEAD, TLS1_2, SSL_HIGH}, -+ {"ECDHE-ECDSA-CHACHA20-POLY1305", 0xcca9 /* TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 */, SSL_kECDHE|SSL_aECDSA|SSL_CHACHA20POLY1305|SSL_AEAD, TLS1_2, SSL_HIGH}, -+ {"DHE-RSA-CHACHA20-POLY1305", 0xccaa /* TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 */, SSL_kEDH|SSL_aRSA|SSL_CHACHA20POLY1305|SSL_AEAD, TLS1_2, SSL_HIGH}, - }; - - #define ciphernum (sizeof(ciphers_def)/sizeof(cipher_properties)) -@@ -585,6 +687,10 @@ nss_parse_ciphers(const char *cipherstr, int cipher_list[ciphernum]) - mask |= SSL_RSA; - } else if ((!strcmp(cipher, "NULL")) || (!strcmp(cipher, "eNULL"))) { - mask |= SSL_eNULL; -+ } else if (!strcmp(cipher, "AES128")) { -+ mask |= SSL_AES128; -+ } else if (!strcmp(cipher, "AES256")) { -+ mask |= SSL_AES256; - } else if (!strcmp(cipher, "AES")) { - mask |= SSL_AES; - } else if (!strcmp(cipher, "3DES")) { -@@ -599,12 +705,34 @@ nss_parse_ciphers(const char *cipherstr, int cipher_list[ciphernum]) - mask |= SSL_MD5; - } else if ((!strcmp(cipher, "SHA")) || (!strcmp(cipher, "SHA1"))) { - mask |= SSL_SHA1; -+ } else if (!strcmp(cipher, "SHA256")) { -+ mask |= SSL_SHA256; -+ } else if (!strcmp(cipher, "EDH")) { -+ mask |= SSL_kEDH; -+ } else if (!strcmp(cipher, "DSS")) { -+ mask |= SSL_aDSA; -+ } else if (!strcmp(cipher, "CAMELLIA128")) { -+ mask |= SSL_CAMELLIA128; -+ } else if (!strcmp(cipher, "CAMELLIA256")) { -+ mask |= SSL_CAMELLIA256; -+ } else if (!strcmp(cipher, "CAMELLIA")) { -+ mask |= SSL_CAMELLIA; -+ } else if (!strcmp(cipher, "SEED")) { -+ mask |= SSL_SEED; -+ } else if (!strcmp(cipher, "ECDH")) { -+ mask |= SSL_kECDH; -+ } else if (!strcmp(cipher, "ECDHE")) { -+ mask |= SSL_kECDHE; -+ } else if (!strcmp(cipher, "ECDSA")) { -+ mask |= SSL_aECDSA; - } else if (!strcmp(cipher, "SSLv2")) { - protocol |= SSL2; - } else if (!strcmp(cipher, "SSLv3")) { - protocol |= SSL3; - } else if (!strcmp(cipher, "TLSv1")) { - protocol |= TLS1; -+ } else if (!strcmp(cipher, "TLSv1.2")) { -+ protocol |= TLS1_2; - } else if (!strcmp(cipher, "HIGH")) { - strength |= SSL_HIGH; - } else if (!strcmp(cipher, "MEDIUM")) { diff --git a/bugfix-openldap-ssl-deadlock-revert.patch b/bugfix-openldap-ssl-deadlock-revert.patch deleted file mode 100644 index 102b9f8..0000000 --- a/bugfix-openldap-ssl-deadlock-revert.patch +++ /dev/null @@ -1,51 +0,0 @@ -diff --git a/libraries/libldap/tls_m.c b/libraries/libldap/tls_m.c -index 3139eaf..49dc9b1 100644 ---- a/libraries/libldap/tls_m.c -+++ b/libraries/libldap/tls_m.c -@@ -146,7 +146,6 @@ static int tlsm_init( void ); - */ - static ldap_pvt_thread_mutex_t tlsm_ctx_count_mutex; - static ldap_pvt_thread_mutex_t tlsm_init_mutex; --static ldap_pvt_thread_mutex_t tlsm_pem_mutex; - static PRCallOnceType tlsm_init_mutex_callonce = {0,0}; - - static PRStatus PR_CALLBACK -@@ -164,12 +163,6 @@ tlsm_thr_init_callonce( void ) - return PR_FAILURE; - } - -- if ( ldap_pvt_thread_mutex_init( &tlsm_pem_mutex ) ) { -- Debug( LDAP_DEBUG_ANY, -- "TLS: could not create mutex for PEM module: %d\n", errno, 0, 0 ); -- return PR_FAILURE; -- } -- - return PR_SUCCESS; - } - -@@ -2153,7 +2146,6 @@ tlsm_destroy( void ) - #ifdef LDAP_R_COMPILE - ldap_pvt_thread_mutex_destroy( &tlsm_ctx_count_mutex ); - ldap_pvt_thread_mutex_destroy( &tlsm_init_mutex ); -- ldap_pvt_thread_mutex_destroy( &tlsm_pem_mutex ); - #endif - } - -@@ -2840,16 +2832,9 @@ static int - tlsm_session_accept_or_connect( tls_session *session, int is_accept ) - { - tlsm_session *s = (tlsm_session *)session; -- int rc; -+ int rc = SSL_ForceHandshake( s ); - const char *op = is_accept ? "accept" : "connect"; - -- if ( pem_module ) { -- LDAP_MUTEX_LOCK( &tlsm_pem_mutex ); -- } -- rc = SSL_ForceHandshake( s ); -- if ( pem_module ) { -- LDAP_MUTEX_UNLOCK( &tlsm_pem_mutex ); -- } - if ( rc ) { - PRErrorCode err = PR_GetError(); - rc = -1; diff --git a/bugfix-openldap-support-tlsv1-and-later.patch b/bugfix-openldap-support-tlsv1-and-later.patch deleted file mode 100644 index 6222780..0000000 --- a/bugfix-openldap-support-tlsv1-and-later.patch +++ /dev/null @@ -1,42 +0,0 @@ -diff --git a/include/ldap.h b/include/ldap.h -index c245651..149b9ea 100644 ---- a/include/ldap.h -+++ b/include/ldap.h -@@ -176,6 +176,7 @@ LDAP_BEGIN_DECL - #define LDAP_OPT_X_TLS_PROTOCOL_TLS1_0 ((3 << 8) + 1) - #define LDAP_OPT_X_TLS_PROTOCOL_TLS1_1 ((3 << 8) + 2) - #define LDAP_OPT_X_TLS_PROTOCOL_TLS1_2 ((3 << 8) + 3) -+#define LDAP_OPT_X_TLS_PROTOCOL_TLS1_3 ((3 << 8) + 4) - - /* OpenLDAP SASL options */ - #define LDAP_OPT_X_SASL_MECH 0x6100 -diff --git a/libraries/libldap/tls_m.c b/libraries/libldap/tls_m.c -index 49dc9b1..9e825c9 100644 ---- a/libraries/libldap/tls_m.c -+++ b/libraries/libldap/tls_m.c -@@ -1849,6 +1849,8 @@ tlsm_deferred_init( void *arg ) - NSSInitContext *initctx = NULL; - PK11SlotInfo *certdb_slot = NULL; - #endif -+ SSLVersionRange range; -+ SSLProtocolVariant variant; - SECStatus rc; - int done = 0; - -@@ -2031,6 +2033,16 @@ tlsm_deferred_init( void *arg ) - } - } - -+ /* -+ * Set the SSL version range. MozNSS SSL versions are the same as openldap's: -+ * -+ * SSL_LIBRARY_VERSION_TLS_1_* are equivalent to LDAP_OPT_X_TLS_PROTOCOL_TLS1_* -+ */ -+ SSL_VersionRangeGetSupported(ssl_variant_stream, &range); /* this sets the max */ -+ range.min = lt->lt_protocol_min ? lt->lt_protocol_min : range.min; -+ variant = ssl_variant_stream; -+ SSL_VersionRangeSetDefault(variant, &range); -+ - NSS_SetDomesticPolicy(); - - PK11_SetPasswordFunc( tlsm_pin_prompt ); diff --git a/bugfix-openldap-temporary-ssl-thr-init-race.patch b/bugfix-openldap-temporary-ssl-thr-init-race.patch deleted file mode 100644 index c94d060..0000000 --- a/bugfix-openldap-temporary-ssl-thr-init-race.patch +++ /dev/null @@ -1,35 +0,0 @@ -diff --git a/libraries/libldap/tls2.c b/libraries/libldap/tls2.c -index d25c190..94399d7 100644 ---- a/libraries/libldap/tls2.c -+++ b/libraries/libldap/tls2.c -@@ -149,6 +149,9 @@ ldap_pvt_tls_destroy( void ) - tls_imp->ti_tls_destroy(); - } - -+#ifdef LDAP_R_COMPILE -+static pthread_once_t tlsm_initialized = PTHREAD_ONCE_INIT; -+#endif - /* - * Initialize a particular TLS implementation. - * Called once per implementation. -@@ -158,6 +161,10 @@ tls_init(tls_impl *impl ) - { - static int tls_initialized = 0; - -+#ifdef LDAP_R_COMPILE -+ (void)pthread_once(&tlsm_initialized, impl->ti_thr_init); -+#endif -+ - if ( !tls_initialized++ ) { - #ifdef LDAP_R_COMPILE - ldap_pvt_thread_mutex_init( &tls_def_ctx_mutex ); -@@ -166,9 +173,6 @@ tls_init(tls_impl *impl ) - - if ( impl->ti_inited++ ) return 0; - --#ifdef LDAP_R_COMPILE -- impl->ti_thr_init(); --#endif - return impl->ti_tls_init(); - } - diff --git a/openldap-2.4.50.tgz b/openldap-2.6.0.tgz similarity index 42% rename from openldap-2.4.50.tgz rename to openldap-2.6.0.tgz index 786a4ab7a6fa914ac945e38bedd2449c10d2a113..523d36ae2036b7a739aeb5591372f94aeee469a9 100644 GIT binary patch literal 6433764 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 z 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

%=fBp){AH7XlR`@G_< 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 gL{J*!5Q~L&!7+aCm417 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

+{7^mw0=*)mIK*!5;|zhv-p9K~7E zC?Qo#oirPwi6K?@4r)mHP^X3e#r>~eg^l4tgycv~UZg04pECDDp(`SdI#_fP;ZI(e zy>dvqF3d{lj|3j$UphL|k2`FO8eHW%`3v`Xn`n7jCh%RwgJD{%lI`}i@QTLdDy`}I z+G^s)2YTaO2m=e3#M0*fA;4l7In^C04Lnw|HonPt%`Pc+ zU*D?D-Wce#`mbj%!;o9?0l~38d|8Hzq!*wQ-kSZBO^RCZ&=W!f$W##Z&+13 zp>zi4S-e?-ZFvx-o5j*KdV~<xiJpP@+!>PkTdV!C{i`>AzP@!nuy(IA7;5J_GPR6X;Db*ZaaAAj^9|rc71fZ07 z5+g-E0KR5&A3MyVIk)-!L@=BgrqC1bu@$F~J6@1;hX<4PyxPN*Pre7C`vA4a&# zpJ#js$F((EF67bpaw#cNk5L_8e%qCxM&(|gg$9_Bun3NNsz;<}S%y&5e9;L;uhZQ+ zg-1{fcDzdr(MA?VYQ`M?I#N!b8vRx~u__8pot)^0fqiTG$R5ZgBmXo7UC60hSREXG zj?&7SGj5iHzQ@ZvHuU6QQRBECCh&2ixq+!;M(j&HXa^Jb8neDu>_VmPv)bt9i0 z?}Q`eHWelv`dx>Yg$P!4-|F573dORJ=}!1dkz|AOO}u%HO%h#{Hz=my){SG@eG8c;)AeM^0hF}5 zm{s>lVA9U{SWXR$dT3b?7z~SiF;7f4<|WOr;15roh0!2Kkv66=`kUV{$-#J^%ufWE z*iNX5FY&@^h(=^T8v?S61s{8ty)r5Mt-Rs9WiW!$9eX}UNW<~VIu z6>O!tbd>a!(R~r+l%tw694#IA;X5ef9BUxFikiu%(Q1BuW3Y-D z_HntBdPlUvKHfOg^_5Xh+x{H+-)`7nRzV`hk8{CGwIw(cbRCOZ6R%S8|MSR$fYJbE z@rZlEm-_L1zl;Yj`MS$G^eror1q5BIO=>vbp=itb_j^R2KNM*)Pfnx6qt2-Ak|;0j z>gdYgzP&+=g|LbF(rpEPZAoq6foNL;2JkP zOS^^p1cnYS;I2U{B-^B%`vTQW#+k6^i0>+>0QJP;}%mIybBOy;XuMpCPNa~5!`R1*K)IjXVZ`T_wQugi37Ki5(c#z|8__WOkfRbhPx+8RKt&_p+VJ2q z@O_fSH}J!YpBn%ytZq^*Ujx6w+XwLLVTjX&U(O%T!{M`4*prdJKjJINH;BI(5fBpvJg|_~ey{;KbW-hy;JFY#3Us^g^d38sDHxX}@Xx5` zl)&Xr+AUHkvfxfbkfjZBXS|2sp4c~Asu1FFdc3qDlDtI_{^%T8UF5e6D3YeKPBH~) zI|(x+B<5)jkLdO91ba4&l4P8Ew@8~ZxQ(-XmzWZut?4h5Y_Z?Lv9`l}_rLF?XcMY@ z_43MY>gwRWI6=V~JUeNXCM+Nt?MrWn=unp+3SsDOMz*YX>8e~IHTWOHl-KLsa=hCw znqG!_d6Q}fR7q&PA(m9fIW78}&~N1Yv#pSWjC4ohqe3nrqTrz(Kt6YpEG4NI^`%LJf}BBub&@Rm zDg45d!QJc}6?BtgYaY?(aj`~*n88z;>C%6Ph-V;%$(oPtB2az6IUV}ZL zU4KHUj-Nj}3_o$n+X?nR%aO=UKeK6@8W}I+Rms3nBw3pa|F_HT=B#R({N|Niq0RVA zZ+1@jk_1}khbr)8ADN3Z3(Z@!ITO9J@*&NZNj$e?#SYL%0AFH~u^@?N9N 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

  • j$!{cQAWK`K6_^^t*{iKqxwtC09`h_r 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%0DgAlEaR(s*z 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%0AUU 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Νmdds45Kt)pUN9C#B$E5G6I{kM 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%0A*M}zv!ZJ#P^R}C{Yt^fO9! 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

    SRSIdtpQxBh=T5&QSKv#e1;hUNg)#5Y1+CPZbG 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

    B$Q`gTZyqij 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 cU} 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 (K?r?Peh%3o*{wv*<0FXW>oDJ~;y!g2p_OutBS- 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

    $*~ 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

    bGpUV^5ndiJsa$k#H&x`JachfX|Kel$WW&!$ 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 zü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

      gl_??XuEn^UXxmL=+KsmCl4R5Fc*`b}(M`#d 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

    qfji05~|IPOe!$hhw?nVx+Q2xNm(-MzNH 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�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 z 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