mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
Fix ITS#1774, BDB keys need ulen and flags to be initialized because BDB
tries to retrieve both the key and the data.
This commit is contained in:
parent
c7262c7599
commit
43167d0fa6
@ -39,6 +39,8 @@ bdb_dn2id_add(
|
|||||||
|
|
||||||
DBTzero( &key );
|
DBTzero( &key );
|
||||||
key.size = e->e_nname.bv_len + 2;
|
key.size = e->e_nname.bv_len + 2;
|
||||||
|
key.ulen = key.size;
|
||||||
|
key.flags = DB_DBT_USERMEM;
|
||||||
buf = ch_malloc( key.size );
|
buf = ch_malloc( key.size );
|
||||||
key.data = buf;
|
key.data = buf;
|
||||||
buf[0] = DN_BASE_PREFIX;
|
buf[0] = DN_BASE_PREFIX;
|
||||||
@ -84,6 +86,7 @@ bdb_dn2id_add(
|
|||||||
dnParent( &ptr, &pdn );
|
dnParent( &ptr, &pdn );
|
||||||
|
|
||||||
key.size = pdn.bv_len + 2;
|
key.size = pdn.bv_len + 2;
|
||||||
|
key.ulen = key.size;
|
||||||
pdn.bv_val[-1] = DN_ONE_PREFIX;
|
pdn.bv_val[-1] = DN_ONE_PREFIX;
|
||||||
key.data = pdn.bv_val-1;
|
key.data = pdn.bv_val-1;
|
||||||
ptr = pdn;
|
ptr = pdn;
|
||||||
@ -124,6 +127,7 @@ bdb_dn2id_add(
|
|||||||
dnParent( &ptr, &pdn );
|
dnParent( &ptr, &pdn );
|
||||||
|
|
||||||
key.size = pdn.bv_len + 2;
|
key.size = pdn.bv_len + 2;
|
||||||
|
key.ulen = key.size;
|
||||||
key.data = pdn.bv_val - 1;
|
key.data = pdn.bv_val - 1;
|
||||||
ptr = pdn;
|
ptr = pdn;
|
||||||
}
|
}
|
||||||
@ -189,7 +193,7 @@ bdb_dn2id_delete(
|
|||||||
|
|
||||||
if( !be_issuffix( be, &ptr )) {
|
if( !be_issuffix( be, &ptr )) {
|
||||||
buf[0] = DN_SUBTREE_PREFIX;
|
buf[0] = DN_SUBTREE_PREFIX;
|
||||||
rc = bdb_idl_delete_key( be, db, txn, &key, e->e_id );
|
rc = db->del( db, txn, &key, 0 );
|
||||||
if( rc != 0 ) {
|
if( rc != 0 ) {
|
||||||
#ifdef NEW_LOGGING
|
#ifdef NEW_LOGGING
|
||||||
LDAP_LOG (( "db2id", LDAP_LEVEL_ERR,
|
LDAP_LOG (( "db2id", LDAP_LEVEL_ERR,
|
||||||
@ -206,6 +210,7 @@ bdb_dn2id_delete(
|
|||||||
dnParent( &ptr, &pdn );
|
dnParent( &ptr, &pdn );
|
||||||
|
|
||||||
key.size = pdn.bv_len + 2;
|
key.size = pdn.bv_len + 2;
|
||||||
|
key.ulen = key.size;
|
||||||
pdn.bv_val[-1] = DN_ONE_PREFIX;
|
pdn.bv_val[-1] = DN_ONE_PREFIX;
|
||||||
key.data = pdn.bv_val - 1;
|
key.data = pdn.bv_val - 1;
|
||||||
ptr = pdn;
|
ptr = pdn;
|
||||||
@ -245,6 +250,7 @@ bdb_dn2id_delete(
|
|||||||
dnParent( &ptr, &pdn );
|
dnParent( &ptr, &pdn );
|
||||||
|
|
||||||
key.size = pdn.bv_len + 2;
|
key.size = pdn.bv_len + 2;
|
||||||
|
key.ulen = key.size;
|
||||||
key.data = pdn.bv_val - 1;
|
key.data = pdn.bv_val - 1;
|
||||||
ptr = pdn;
|
ptr = pdn;
|
||||||
}
|
}
|
||||||
@ -528,6 +534,8 @@ bdb_dn2idl(
|
|||||||
|
|
||||||
DBTzero( &key );
|
DBTzero( &key );
|
||||||
key.size = dn->bv_len + 2;
|
key.size = dn->bv_len + 2;
|
||||||
|
key.ulen = key.size;
|
||||||
|
key.flags = DB_DBT_USERMEM;
|
||||||
key.data = ch_malloc( key.size );
|
key.data = ch_malloc( key.size );
|
||||||
((char *)key.data)[0] = prefix;
|
((char *)key.data)[0] = prefix;
|
||||||
AC_MEMCPY( &((char *)key.data)[1], dn->bv_val, key.size - 1 );
|
AC_MEMCPY( &((char *)key.data)[1], dn->bv_val, key.size - 1 );
|
||||||
|
@ -684,9 +684,12 @@ bdb_idl_delete_key(
|
|||||||
if ( rc == 0 ) {
|
if ( rc == 0 ) {
|
||||||
if ( tmp != 0 ) {
|
if ( tmp != 0 ) {
|
||||||
/* Not a range, just delete it */
|
/* Not a range, just delete it */
|
||||||
data.data = &id;
|
if (tmp != id) {
|
||||||
|
/* position to correct item */
|
||||||
|
tmp = id;
|
||||||
rc = cursor->c_get( cursor, key, &data,
|
rc = cursor->c_get( cursor, key, &data,
|
||||||
DB_GET_BOTH | DB_RMW );
|
DB_GET_BOTH | DB_RMW );
|
||||||
|
}
|
||||||
if ( rc == 0 ) {
|
if ( rc == 0 ) {
|
||||||
rc = cursor->c_del( cursor, 0 );
|
rc = cursor->c_del( cursor, 0 );
|
||||||
if ( rc != 0 ) {
|
if ( rc != 0 ) {
|
||||||
|
@ -38,6 +38,8 @@ bdb_key_read(
|
|||||||
|
|
||||||
DBTzero( &key );
|
DBTzero( &key );
|
||||||
bv2DBT(k,&key);
|
bv2DBT(k,&key);
|
||||||
|
key.ulen = key.size;
|
||||||
|
key.flags = DB_DBT_USERMEM;
|
||||||
|
|
||||||
rc = bdb_idl_fetch_key( be, db, txn, &key, ids );
|
rc = bdb_idl_fetch_key( be, db, txn, &key, ids );
|
||||||
|
|
||||||
@ -88,6 +90,8 @@ bdb_key_change(
|
|||||||
|
|
||||||
DBTzero( &key );
|
DBTzero( &key );
|
||||||
bv2DBT(k,&key);
|
bv2DBT(k,&key);
|
||||||
|
key.ulen = key.size;
|
||||||
|
key.flags = DB_DBT_USERMEM;
|
||||||
|
|
||||||
if (op == SLAP_INDEX_ADD_OP) {
|
if (op == SLAP_INDEX_ADD_OP) {
|
||||||
/* Add values */
|
/* Add values */
|
||||||
|
Loading…
Reference in New Issue
Block a user