mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-20 22:59:34 -05:00
Added support for SleepyCat DB2 DBI.
Derived from public posting to ldap@umich.edu by Kurt Spanier <kurt.spanier@zdv.uni-tuebingen.de> See Make-common.dist for DB2 options
This commit is contained in:
parent
8c5868b500
commit
2054d40b7c
13 changed files with 362 additions and 25 deletions
|
|
@ -144,6 +144,8 @@ SLAPD_BACKENDS= -DLDAP_LDBM -DLDAP_SHELL -DLDAP_PASSWD
|
||||||
# standard unix ndbm
|
# standard unix ndbm
|
||||||
|
|
||||||
# Fallback settings, defaults are set in build/*/Make-platform
|
# Fallback settings, defaults are set in build/*/Make-platform
|
||||||
|
# The NDBM interface may not work on some (any) platforms.
|
||||||
|
# You may be happier with Berkeley DB B-trees.
|
||||||
LDBMBACKEND?=-DLDBM_USE_NDBM
|
LDBMBACKEND?=-DLDBM_USE_NDBM
|
||||||
LDBMINCLUDE?=
|
LDBMINCLUDE?=
|
||||||
LDBMLIB?=
|
LDBMLIB?=
|
||||||
|
|
@ -163,8 +165,13 @@ LDBMLIB?=
|
||||||
#LDBMINCLUDE=-I/usr/local/gdbm/include
|
#LDBMINCLUDE=-I/usr/local/gdbm/include
|
||||||
#LDBMLIB=-lgdbm
|
#LDBMLIB=-lgdbm
|
||||||
|
|
||||||
#undef these if you have SLEEPYCAT DB2 installed
|
#undef these if you have SleepyCat DB2 installed the updated DBI
|
||||||
#LDBMBACKEND=-DLDBM_USE_DBBTREE -DHAVE_SLEEPYCAT_DB2
|
#LDBMBACKEND=-DLDBM_USE_DBBTREE -DLDBM_USE_DB2
|
||||||
|
#LDBMINCLUDE=-I/usr/local/include
|
||||||
|
#LDBMLIB=-L/usr/local/lib -ldb
|
||||||
|
|
||||||
|
#undef these if you have SleepyCat DB2 installed (with compat185)
|
||||||
|
#LDBMBACKEND=-DLDBM_USE_DBBTREE -DLDBM_USE_DB2_COMPAT185
|
||||||
#LDBMINCLUDE=-I/usr/local/include
|
#LDBMINCLUDE=-I/usr/local/include
|
||||||
#LDBMLIB=-L/usr/local/lib -ldb
|
#LDBMLIB=-L/usr/local/lib -ldb
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -47,10 +47,14 @@ extern gdbm_error gdbm_errno;
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
#ifdef HAVE_SLEEPYCAT_DB2
|
#ifdef LDBM_USE_DB2_COMPAT185
|
||||||
# include <db_185.h>
|
# include <db_185.h>
|
||||||
#else
|
#else
|
||||||
# include <db.h>
|
# include <db.h>
|
||||||
|
# ifdef LDBM_USE_DB2
|
||||||
|
# define R_NOOVERWRITE DB_NOOVERWRITE
|
||||||
|
# define DEFAULT_DB_PAGE_SIZE 1024
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef DBT Datum;
|
typedef DBT Datum;
|
||||||
|
|
@ -62,11 +66,18 @@ typedef DB *LDBM;
|
||||||
#define DB_TYPE DB_HASH
|
#define DB_TYPE DB_HASH
|
||||||
|
|
||||||
/* for ldbm_open */
|
/* for ldbm_open */
|
||||||
#define LDBM_READER O_RDONLY
|
#ifdef LDBM_USE_DB2
|
||||||
#define LDBM_WRITER O_RDWR
|
# define LDBM_READER DB_RDONLY
|
||||||
#define LDBM_WRCREAT (O_RDWR|O_CREAT)
|
# define LDBM_WRITER 0x00000 /* hopefully */
|
||||||
#define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
|
# define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
|
||||||
#define LDBM_FAST 0
|
# define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
|
||||||
|
#else
|
||||||
|
# define LDBM_READER O_RDONLY
|
||||||
|
# define LDBM_WRITER O_RDWR
|
||||||
|
# define LDBM_WRCREAT (O_RDWR|O_CREAT)
|
||||||
|
# define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
|
||||||
|
# define LDBM_FAST 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#define LDBM_SUFFIX ".dbh"
|
#define LDBM_SUFFIX ".dbh"
|
||||||
|
|
||||||
|
|
@ -90,12 +101,18 @@ extern int errno;
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#ifdef HAVE_SLEEPYCAT_DB2
|
|
||||||
|
#ifdef LDBM_USE_DB2_COMPAT185
|
||||||
# include <db_185.h>
|
# include <db_185.h>
|
||||||
#else
|
#else
|
||||||
# include <db.h>
|
# include <db.h>
|
||||||
|
# ifdef LDBM_USE_DB2
|
||||||
|
# define R_NOOVERWRITE DB_NOOVERWRITE
|
||||||
|
# define DEFAULT_DB_PAGE_SIZE 1024
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
typedef DBT Datum;
|
typedef DBT Datum;
|
||||||
#define dsize size
|
#define dsize size
|
||||||
#define dptr data
|
#define dptr data
|
||||||
|
|
@ -105,11 +122,19 @@ typedef DB *LDBM;
|
||||||
#define DB_TYPE DB_BTREE
|
#define DB_TYPE DB_BTREE
|
||||||
|
|
||||||
/* for ldbm_open */
|
/* for ldbm_open */
|
||||||
#define LDBM_READER O_RDONLY
|
#ifdef LDBM_USE_DB2
|
||||||
#define LDBM_WRITER O_RDWR
|
# define LDBM_READER DB_RDONLY
|
||||||
#define LDBM_WRCREAT (O_RDWR|O_CREAT)
|
# define LDBM_WRITER 0x00000 /* hopefully */
|
||||||
#define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
|
# define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
|
||||||
#define LDBM_FAST 0
|
# define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
|
||||||
|
#else
|
||||||
|
# define LDBM_READER O_RDONLY
|
||||||
|
# define LDBM_WRITER O_RDWR
|
||||||
|
# define LDBM_WRCREAT (O_RDWR|O_CREAT)
|
||||||
|
# define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
# define LDBM_FAST 0
|
||||||
|
|
||||||
#define LDBM_SUFFIX ".dbb"
|
#define LDBM_SUFFIX ".dbb"
|
||||||
#define LDBM_ORDERED 1
|
#define LDBM_ORDERED 1
|
||||||
|
|
@ -159,6 +184,7 @@ typedef DBM *LDBM;
|
||||||
#endif /* db btree */
|
#endif /* db btree */
|
||||||
#endif /* gdbm */
|
#endif /* gdbm */
|
||||||
|
|
||||||
|
int ldbm_errno( LDBM ldbm );
|
||||||
LDBM ldbm_open( char *name, int rw, int mode, int dbcachesize );
|
LDBM ldbm_open( char *name, int rw, int mode, int dbcachesize );
|
||||||
void ldbm_close( LDBM ldbm );
|
void ldbm_close( LDBM ldbm );
|
||||||
void ldbm_sync( LDBM ldbm );
|
void ldbm_sync( LDBM ldbm );
|
||||||
|
|
@ -167,8 +193,14 @@ Datum ldbm_datum_dup( LDBM ldbm, Datum data );
|
||||||
Datum ldbm_fetch( LDBM ldbm, Datum key );
|
Datum ldbm_fetch( LDBM ldbm, Datum key );
|
||||||
int ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
|
int ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
|
||||||
int ldbm_delete( LDBM ldbm, Datum key );
|
int ldbm_delete( LDBM ldbm, Datum key );
|
||||||
Datum ldbm_firstkey( LDBM ldbm );
|
|
||||||
Datum ldbm_nextkey( LDBM ldbm, Datum key );
|
#if LDBM_USE_DB2
|
||||||
int ldbm_errno( LDBM ldbm );
|
void *ldbm_malloc( size_t size );
|
||||||
|
Datum ldbm_firstkey( LDBM ldbm, DBC **dbch );
|
||||||
|
Datum ldbm_nextkey( LDBM ldbm, Datum key, DBC *dbcp );
|
||||||
|
#else
|
||||||
|
Datum ldbm_firstkey( LDBM ldbm );
|
||||||
|
Datum ldbm_nextkey( LDBM ldbm, Datum key );
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _ldbm_h_ */
|
#endif /* _ldbm_h_ */
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,11 @@
|
||||||
/* ldbm.c - ldap dbm compatibility routines */
|
/* ldbm.c - ldap dbm compatibility routines */
|
||||||
|
|
||||||
|
/* Patched for Berkeley DB version 2.0; /KSp; 98/02/23
|
||||||
|
*
|
||||||
|
* - basic implementation; 1998/02/23, /KSp
|
||||||
|
* - DB_DBT_MALLOC ; 1998/03/22, /KSp
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "ldbm.h"
|
#include "ldbm.h"
|
||||||
|
|
||||||
|
|
@ -121,10 +127,41 @@ ldbm_errno( LDBM ldbm )
|
||||||
* *
|
* *
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
/*************************************************
|
||||||
|
* *
|
||||||
|
* A malloc routine for use with DB_DBT_MALLOC *
|
||||||
|
* *
|
||||||
|
*************************************************/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
|
void *
|
||||||
|
ldbm_malloc( size_t size )
|
||||||
|
{
|
||||||
|
return( calloc( 1, size ));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
LDBM
|
LDBM
|
||||||
ldbm_open( char *name, int rw, int mode, int dbcachesize )
|
ldbm_open( char *name, int rw, int mode, int dbcachesize )
|
||||||
{
|
{
|
||||||
LDBM ret;
|
LDBM ret = NULL;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
DB_INFO dbinfo;
|
||||||
|
|
||||||
|
memset( &dbinfo, 0, sizeof( dbinfo ));
|
||||||
|
dbinfo.db_cachesize = dbcachesize;
|
||||||
|
dbinfo.db_pagesize = DEFAULT_DB_PAGE_SIZE;
|
||||||
|
dbinfo.db_malloc = ldbm_malloc;
|
||||||
|
|
||||||
|
db_open( name, DB_TYPE, rw, mode, NULL, &dbinfo, &ret );
|
||||||
|
|
||||||
|
#else
|
||||||
void *info;
|
void *info;
|
||||||
BTREEINFO binfo;
|
BTREEINFO binfo;
|
||||||
HASHINFO hinfo;
|
HASHINFO hinfo;
|
||||||
|
|
@ -140,14 +177,22 @@ ldbm_open( char *name, int rw, int mode, int dbcachesize )
|
||||||
} else {
|
} else {
|
||||||
info = NULL;
|
info = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = dbopen( name, rw, mode, DB_TYPE, info );
|
ret = dbopen( name, rw, mode, DB_TYPE, info );
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
return( ret );
|
return( ret );
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ldbm_close( LDBM ldbm )
|
ldbm_close( LDBM ldbm )
|
||||||
{
|
{
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
(*ldbm->close)( ldbm, 0 );
|
||||||
|
#else
|
||||||
(*ldbm->close)( ldbm );
|
(*ldbm->close)( ldbm );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -167,6 +212,10 @@ ldbm_datum_dup( LDBM ldbm, Datum data )
|
||||||
{
|
{
|
||||||
Datum dup;
|
Datum dup;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
memset( &dup, 0, sizeof( dup ));
|
||||||
|
#endif
|
||||||
|
|
||||||
if ( data.dsize == 0 ) {
|
if ( data.dsize == 0 ) {
|
||||||
dup.dsize = 0;
|
dup.dsize = 0;
|
||||||
dup.dptr = NULL;
|
dup.dptr = NULL;
|
||||||
|
|
@ -186,9 +235,18 @@ ldbm_fetch( LDBM ldbm, Datum key )
|
||||||
Datum data;
|
Datum data;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
memset( &data, 0, sizeof( data ));
|
||||||
|
|
||||||
|
data.flags = DB_DBT_MALLOC;
|
||||||
|
|
||||||
|
if ( (rc = (*ldbm->get)( ldbm, NULL, &key, &data, 0 )) != 0 ) {
|
||||||
|
if ( data.dptr ) free( data.dptr );
|
||||||
|
#else
|
||||||
if ( (rc = (*ldbm->get)( ldbm, &key, &data, 0 )) == 0 ) {
|
if ( (rc = (*ldbm->get)( ldbm, &key, &data, 0 )) == 0 ) {
|
||||||
data = ldbm_datum_dup( ldbm, data );
|
data = ldbm_datum_dup( ldbm, data );
|
||||||
} else {
|
} else {
|
||||||
|
#endif
|
||||||
data.dptr = NULL;
|
data.dptr = NULL;
|
||||||
data.dsize = 0;
|
data.dsize = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -201,7 +259,12 @@ ldbm_store( LDBM ldbm, Datum key, Datum data, int flags )
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
rc = (*ldbm->put)( ldbm, NULL, &key, &data, flags & ~LDBM_SYNC );
|
||||||
|
rc = (-1 ) * rc;
|
||||||
|
#else
|
||||||
rc = (*ldbm->put)( ldbm, &key, &data, flags & ~LDBM_SYNC );
|
rc = (*ldbm->put)( ldbm, &key, &data, flags & ~LDBM_SYNC );
|
||||||
|
#endif
|
||||||
if ( flags & LDBM_SYNC )
|
if ( flags & LDBM_SYNC )
|
||||||
(*ldbm->sync)( ldbm, 0 );
|
(*ldbm->sync)( ldbm, 0 );
|
||||||
return( rc );
|
return( rc );
|
||||||
|
|
@ -212,38 +275,88 @@ ldbm_delete( LDBM ldbm, Datum key )
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
rc = (*ldbm->del)( ldbm, NULL, &key, 0 );
|
||||||
|
rc = (-1 ) * rc;
|
||||||
|
#else
|
||||||
rc = (*ldbm->del)( ldbm, &key, 0 );
|
rc = (*ldbm->del)( ldbm, &key, 0 );
|
||||||
|
#endif
|
||||||
(*ldbm->sync)( ldbm, 0 );
|
(*ldbm->sync)( ldbm, 0 );
|
||||||
return( rc );
|
return( rc );
|
||||||
}
|
}
|
||||||
|
|
||||||
Datum
|
Datum
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
ldbm_firstkey( LDBM ldbm, DBC **dbch )
|
||||||
|
#else
|
||||||
ldbm_firstkey( LDBM ldbm )
|
ldbm_firstkey( LDBM ldbm )
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
Datum key, data;
|
Datum key, data;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
DBC *dbci;
|
||||||
|
|
||||||
|
memset( &key, 0, sizeof( key ));
|
||||||
|
memset( &data, 0, sizeof( data ));
|
||||||
|
|
||||||
|
key.flags = data.flags = DB_DBT_MALLOC;
|
||||||
|
|
||||||
|
/* acquire a cursor for the DB */
|
||||||
|
if ( (*ldbm->cursor)( ldbm, NULL, &dbci )) {
|
||||||
|
return( key );
|
||||||
|
} else {
|
||||||
|
*dbch = dbci;
|
||||||
|
if ( (*dbci->c_get)( dbci, &key, &data, DB_NEXT ) == 0 ) {
|
||||||
|
if ( data.dptr ) free( data.dptr );
|
||||||
|
#else
|
||||||
if ( (rc = (*ldbm->seq)( ldbm, &key, &data, R_FIRST )) == 0 ) {
|
if ( (rc = (*ldbm->seq)( ldbm, &key, &data, R_FIRST )) == 0 ) {
|
||||||
key = ldbm_datum_dup( ldbm, key );
|
key = ldbm_datum_dup( ldbm, key );
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
key.dptr = NULL;
|
key.dptr = NULL;
|
||||||
key.dsize = 0;
|
key.dsize = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return( key );
|
return( key );
|
||||||
}
|
}
|
||||||
|
|
||||||
Datum
|
Datum
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
ldbm_nextkey( LDBM ldbm, Datum key, DBC *dbcp )
|
||||||
|
#else
|
||||||
ldbm_nextkey( LDBM ldbm, Datum key )
|
ldbm_nextkey( LDBM ldbm, Datum key )
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
Datum data;
|
Datum data;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
void *oldKey = key.dptr;
|
||||||
|
|
||||||
|
memset( &data, 0, sizeof( data ));
|
||||||
|
|
||||||
|
data.flags = DB_DBT_MALLOC;
|
||||||
|
|
||||||
|
if ( (*dbcp->c_get)( dbcp, &key, &data, DB_NEXT ) == 0 ) {
|
||||||
|
if ( data.dptr ) free( data.dptr );
|
||||||
|
#else
|
||||||
if ( (rc = (*ldbm->seq)( ldbm, &key, &data, R_NEXT )) == 0 ) {
|
if ( (rc = (*ldbm->seq)( ldbm, &key, &data, R_NEXT )) == 0 ) {
|
||||||
key = ldbm_datum_dup( ldbm, key );
|
key = ldbm_datum_dup( ldbm, key );
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
key.dptr = NULL;
|
key.dptr = NULL;
|
||||||
key.dsize = 0;
|
key.dsize = 0;
|
||||||
}
|
}
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
if ( oldKey ) free( oldKey );
|
||||||
|
#endif
|
||||||
|
|
||||||
return( key );
|
return( key );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,13 @@
|
||||||
#include "ldbm.h"
|
#include "ldbm.h"
|
||||||
|
|
||||||
#define DEFAULT_CACHE_SIZE 1000
|
#define DEFAULT_CACHE_SIZE 1000
|
||||||
#define DEFAULT_DBCACHE_SIZE 100000
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
# define DEFAULT_DBCACHE_SIZE (100 * DEFAULT_DB_PAGE_SIZE)
|
||||||
|
#else
|
||||||
|
# define DEFAULT_DBCACHE_SIZE 100000
|
||||||
|
#endif
|
||||||
|
|
||||||
#define DEFAULT_DB_DIRECTORY "/usr/tmp"
|
#define DEFAULT_DB_DIRECTORY "/usr/tmp"
|
||||||
#define DEFAULT_MODE 0600
|
#define DEFAULT_MODE 0600
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -176,6 +176,9 @@ ldbm_cache_fetch(
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Datum data;
|
Datum data;
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
memset( &data, 0, sizeof( data ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
pthread_mutex_lock( &db->dbc_mutex );
|
pthread_mutex_lock( &db->dbc_mutex );
|
||||||
#ifdef reentrant_database
|
#ifdef reentrant_database
|
||||||
|
|
@ -216,6 +219,24 @@ ldbm_cache_store(
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef LDBM_DEBUG
|
||||||
|
Statslog( LDAP_DEBUG_STATS,
|
||||||
|
"=> ldbm_cache_store(): key.dptr=%s, key.dsize=%d\n",
|
||||||
|
key.dptr, key.dsize, 0, 0, 0 );
|
||||||
|
|
||||||
|
Statslog( LDAP_DEBUG_STATS,
|
||||||
|
"=> ldbm_cache_store(): key.dptr=0x%08x, data.dptr=0x%0 8x\n",
|
||||||
|
key.dptr, data.dptr, 0, 0, 0 );
|
||||||
|
|
||||||
|
Statslog( LDAP_DEBUG_STATS,
|
||||||
|
"=> ldbm_cache_store(): data.dptr=%s, data.dsize=%d\n",
|
||||||
|
data.dptr, data.dsize, 0, 0, 0 );
|
||||||
|
|
||||||
|
Statslog( LDAP_DEBUG_STATS,
|
||||||
|
"=> ldbm_cache_store(): flags=0x%08x\n",
|
||||||
|
flags, 0, 0, 0, 0 );
|
||||||
|
#endif /* LDBM_DEBUG */
|
||||||
|
|
||||||
rc = ldbm_store( db->dbc_db, key, data, flags );
|
rc = ldbm_store( db->dbc_db, key, data, flags );
|
||||||
|
|
||||||
pthread_mutex_unlock( &db->dbc_mutex );
|
pthread_mutex_unlock( &db->dbc_mutex );
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,11 @@ dn2id_add(
|
||||||
Datum key, data;
|
Datum key, data;
|
||||||
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
|
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
memset( &key, 0, sizeof( key ) );
|
||||||
|
memset( &data, 0, sizeof( data ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
Debug( LDAP_DEBUG_TRACE, "=> dn2id_add( \"%s\", %ld )\n", dn, id, 0 );
|
Debug( LDAP_DEBUG_TRACE, "=> dn2id_add( \"%s\", %ld )\n", dn, id, 0 );
|
||||||
|
|
||||||
if ( (db = ldbm_cache_open( be, "dn2id", LDBM_SUFFIX, LDBM_WRCREAT ))
|
if ( (db = ldbm_cache_open( be, "dn2id", LDBM_SUFFIX, LDBM_WRCREAT ))
|
||||||
|
|
@ -66,6 +71,10 @@ dn2id(
|
||||||
ID id;
|
ID id;
|
||||||
Datum key, data;
|
Datum key, data;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
memset( &key, 0, sizeof( key ) );
|
||||||
|
memset( &data, 0, sizeof( data ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
dn = strdup( dn );
|
dn = strdup( dn );
|
||||||
dn_normalize_case( dn );
|
dn_normalize_case( dn );
|
||||||
|
|
@ -122,6 +131,10 @@ dn2id_delete(
|
||||||
Datum key;
|
Datum key;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
memset( &key, 0, sizeof( key ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
Debug( LDAP_DEBUG_TRACE, "=> dn2id_delete( \"%s\" )\n", dn, 0, 0 );
|
Debug( LDAP_DEBUG_TRACE, "=> dn2id_delete( \"%s\" )\n", dn, 0, 0 );
|
||||||
|
|
||||||
if ( (db = ldbm_cache_open( be, "dn2id", LDBM_SUFFIX, LDBM_WRCREAT ))
|
if ( (db = ldbm_cache_open( be, "dn2id", LDBM_SUFFIX, LDBM_WRCREAT ))
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,11 @@ id2children_add(
|
||||||
IDList *idl;
|
IDList *idl;
|
||||||
char buf[20];
|
char buf[20];
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
memset( &key, 0, sizeof( key ) );
|
||||||
|
memset( &data, 0, sizeof( data ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
Debug( LDAP_DEBUG_TRACE, "=> id2children_add( %d, %d )\n", p ? p->e_id
|
Debug( LDAP_DEBUG_TRACE, "=> id2children_add( %d, %d )\n", p ? p->e_id
|
||||||
: 0, e->e_id, 0 );
|
: 0, e->e_id, 0 );
|
||||||
|
|
||||||
|
|
@ -63,6 +68,10 @@ has_children(
|
||||||
IDList *idl;
|
IDList *idl;
|
||||||
char buf[20];
|
char buf[20];
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
memset( &key, 0, sizeof( key ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
Debug( LDAP_DEBUG_TRACE, "=> has_children( %d )\n", p->e_id , 0, 0 );
|
Debug( LDAP_DEBUG_TRACE, "=> has_children( %d )\n", p->e_id , 0, 0 );
|
||||||
|
|
||||||
if ( (db = ldbm_cache_open( be, "id2children", LDBM_SUFFIX,
|
if ( (db = ldbm_cache_open( be, "id2children", LDBM_SUFFIX,
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,11 @@ id2entry_add( Backend *be, Entry *e )
|
||||||
Datum key, data;
|
Datum key, data;
|
||||||
int len, rc, flags;
|
int len, rc, flags;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
memset( &key, 0, sizeof( key ) );
|
||||||
|
memset( &data, 0, sizeof( data ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
Debug( LDAP_DEBUG_TRACE, "=> id2entry_add( %d, \"%s\" )\n", e->e_id,
|
Debug( LDAP_DEBUG_TRACE, "=> id2entry_add( %d, \"%s\" )\n", e->e_id,
|
||||||
e->e_dn, 0 );
|
e->e_dn, 0 );
|
||||||
|
|
||||||
|
|
@ -61,6 +66,10 @@ id2entry_delete( Backend *be, Entry *e )
|
||||||
Datum key;
|
Datum key;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
memset( &key, 0, sizeof( key ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
Debug( LDAP_DEBUG_TRACE, "=> id2entry_delete( %d, \"%s\" )\n", e->e_id,
|
Debug( LDAP_DEBUG_TRACE, "=> id2entry_delete( %d, \"%s\" )\n", e->e_id,
|
||||||
e->e_dn, 0 );
|
e->e_dn, 0 );
|
||||||
|
|
||||||
|
|
@ -95,6 +104,11 @@ id2entry( Backend *be, ID id )
|
||||||
Datum key, data;
|
Datum key, data;
|
||||||
Entry *e;
|
Entry *e;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
memset( &key, 0, sizeof( key ) );
|
||||||
|
memset( &data, 0, sizeof( data ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
Debug( LDAP_DEBUG_TRACE, "=> id2entry( %ld )\n", id, 0, 0 );
|
Debug( LDAP_DEBUG_TRACE, "=> id2entry( %ld )\n", id, 0, 0 );
|
||||||
|
|
||||||
if ( (e = cache_find_entry_id( &li->li_cache, id )) != NULL ) {
|
if ( (e = cache_find_entry_id( &li->li_cache, id )) != NULL ) {
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,11 @@ idl_fetch_one(
|
||||||
char *kstr;
|
char *kstr;
|
||||||
int i, nids;
|
int i, nids;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
memset( &k2, 0, sizeof( k2 ) );
|
||||||
|
memset( &data, 0, sizeof( data ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Debug( LDAP_DEBUG_TRACE, "=> idl_fetch_one\n", 0, 0, 0 ); */
|
/* Debug( LDAP_DEBUG_TRACE, "=> idl_fetch_one\n", 0, 0, 0 ); */
|
||||||
|
|
||||||
data = ldbm_cache_fetch( db, key );
|
data = ldbm_cache_fetch( db, key );
|
||||||
|
|
@ -81,6 +86,11 @@ idl_fetch(
|
||||||
char *kstr;
|
char *kstr;
|
||||||
int i, nids;
|
int i, nids;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
memset( &k2, 0, sizeof( k2 ) );
|
||||||
|
memset( &data, 0, sizeof( data ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Debug( LDAP_DEBUG_TRACE, "=> idl_fetch\n", 0, 0, 0 ); */
|
/* Debug( LDAP_DEBUG_TRACE, "=> idl_fetch\n", 0, 0, 0 ); */
|
||||||
|
|
||||||
data = ldbm_cache_fetch( db, key );
|
data = ldbm_cache_fetch( db, key );
|
||||||
|
|
@ -170,11 +180,20 @@ idl_store(
|
||||||
Datum data;
|
Datum data;
|
||||||
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
|
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
memset( &data, 0, sizeof( data ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Debug( LDAP_DEBUG_TRACE, "=> idl_store\n", 0, 0, 0 ); */
|
/* Debug( LDAP_DEBUG_TRACE, "=> idl_store\n", 0, 0, 0 ); */
|
||||||
|
|
||||||
data.dptr = (char *) idl;
|
data.dptr = (char *) idl;
|
||||||
data.dsize = (2 + idl->b_nmax) * sizeof(ID);
|
data.dsize = (2 + idl->b_nmax) * sizeof(ID);
|
||||||
|
|
||||||
|
#ifdef LDBM_DEBUG
|
||||||
|
Statslog( LDAP_DEBUG_STATS, "<= idl_store(): rc=%d\n",
|
||||||
|
rc, 0, 0, 0, 0 );
|
||||||
|
#endif
|
||||||
|
|
||||||
flags = LDBM_REPLACE;
|
flags = LDBM_REPLACE;
|
||||||
if( li->li_flush_wrt ) flags |= LDBM_SYNC;
|
if( li->li_flush_wrt ) flags |= LDBM_SYNC;
|
||||||
rc = ldbm_cache_store( db, key, data, flags );
|
rc = ldbm_cache_store( db, key, data, flags );
|
||||||
|
|
@ -283,7 +302,16 @@ idl_insert_key(
|
||||||
char *kstr;
|
char *kstr;
|
||||||
Datum k2;
|
Datum k2;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
memset( &k2, 0, sizeof( k2 ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
if ( (idl = idl_fetch_one( be, db, key )) == NULL ) {
|
if ( (idl = idl_fetch_one( be, db, key )) == NULL ) {
|
||||||
|
#ifdef LDBM_DEBUG
|
||||||
|
Statslog( LDAP_DEBUG_STATS, "=> idl_insert_key(): no key yet\n",
|
||||||
|
0, 0, 0, 0, 0 );
|
||||||
|
#endif
|
||||||
|
|
||||||
idl = idl_alloc( 1 );
|
idl = idl_alloc( 1 );
|
||||||
idl->b_ids[idl->b_nids++] = id;
|
idl->b_ids[idl->b_nids++] = id;
|
||||||
rc = idl_store( be, db, key, idl );
|
rc = idl_store( be, db, key, idl );
|
||||||
|
|
|
||||||
|
|
@ -105,6 +105,10 @@ index_read(
|
||||||
char *realval, *tmpval;
|
char *realval, *tmpval;
|
||||||
char buf[BUFSIZ];
|
char buf[BUFSIZ];
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
memset( &key, 0, sizeof( key ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
prefix = index2prefix( indextype );
|
prefix = index2prefix( indextype );
|
||||||
Debug( LDAP_DEBUG_TRACE, "=> index_read( \"%s\" \"%c\" \"%s\" )\n",
|
Debug( LDAP_DEBUG_TRACE, "=> index_read( \"%s\" \"%c\" \"%s\" )\n",
|
||||||
type, prefix, val );
|
type, prefix, val );
|
||||||
|
|
@ -175,6 +179,10 @@ add_value(
|
||||||
char *realval, *tmpval, *s;
|
char *realval, *tmpval, *s;
|
||||||
char buf[BUFSIZ];
|
char buf[BUFSIZ];
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
memset( &key, 0, sizeof( key ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
prefix = index2prefix( indextype );
|
prefix = index2prefix( indextype );
|
||||||
Debug( LDAP_DEBUG_TRACE, "=> add_value( \"%c%s\" )\n", prefix, val, 0 );
|
Debug( LDAP_DEBUG_TRACE, "=> add_value( \"%c%s\" )\n", prefix, val, 0 );
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -556,6 +556,11 @@ diff_centroids(
|
||||||
int amax, acur, dmax, dcur;
|
int amax, acur, dmax, dcur;
|
||||||
char **vals;
|
char **vals;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
DBC *ocursorp;
|
||||||
|
DBC *ncursorp;
|
||||||
|
#endif /* LDBM_USE_DB2 */
|
||||||
|
|
||||||
if ( verbose ) {
|
if ( verbose ) {
|
||||||
printf( "Generating mods for differential %s centroid...", attr );
|
printf( "Generating mods for differential %s centroid...", attr );
|
||||||
fflush( stdout );
|
fflush( stdout );
|
||||||
|
|
@ -600,8 +605,14 @@ diff_centroids(
|
||||||
|
|
||||||
olast.dptr = NULL;
|
olast.dptr = NULL;
|
||||||
nlast.dptr = NULL;
|
nlast.dptr = NULL;
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
for ( okey = ldbm_firstkey( oldbm, &ocursorp ),
|
||||||
|
nkey = ldbm_firstkey( nldbm, &ncursorp );
|
||||||
|
okey.dptr != NULL && nkey.dptr != NULL; )
|
||||||
|
#else
|
||||||
for ( okey = ldbm_firstkey( oldbm ), nkey = ldbm_firstkey( nldbm );
|
for ( okey = ldbm_firstkey( oldbm ), nkey = ldbm_firstkey( nldbm );
|
||||||
okey.dptr != NULL && nkey.dptr != NULL; )
|
okey.dptr != NULL && nkey.dptr != NULL; )
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
rc = strcmp( okey.dptr, nkey.dptr );
|
rc = strcmp( okey.dptr, nkey.dptr );
|
||||||
|
|
||||||
|
|
@ -616,8 +627,13 @@ diff_centroids(
|
||||||
}
|
}
|
||||||
nlast = nkey;
|
nlast = nkey;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
okey = ldbm_nextkey( oldbm, olast, ocursorp );
|
||||||
|
nkey = ldbm_nextkey( nldbm, nlast, ncursorp );
|
||||||
|
#else
|
||||||
okey = ldbm_nextkey( oldbm, olast );
|
okey = ldbm_nextkey( oldbm, olast );
|
||||||
nkey = ldbm_nextkey( nldbm, nlast );
|
nkey = ldbm_nextkey( nldbm, nlast );
|
||||||
|
#endif
|
||||||
} else if ( rc > 0 ) {
|
} else if ( rc > 0 ) {
|
||||||
/* new value is not in old centroid - add it */
|
/* new value is not in old centroid - add it */
|
||||||
if ( charray_add_dup( &avals, &acur, &amax, nkey.dptr ) == NULL ) {
|
if ( charray_add_dup( &avals, &acur, &amax, nkey.dptr ) == NULL ) {
|
||||||
|
|
@ -629,7 +645,12 @@ diff_centroids(
|
||||||
ldbm_datum_free( nldbm, nlast );
|
ldbm_datum_free( nldbm, nlast );
|
||||||
}
|
}
|
||||||
nlast = nkey;
|
nlast = nkey;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
nkey = ldbm_nextkey( nldbm, nlast, ncursorp );
|
||||||
|
#else
|
||||||
nkey = ldbm_nextkey( nldbm, nlast );
|
nkey = ldbm_nextkey( nldbm, nlast );
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
/* old value is not in new centroid - delete it */
|
/* old value is not in new centroid - delete it */
|
||||||
if ( charray_add_dup( &dvals, &dcur, &dmax, okey.dptr ) == NULL ) {
|
if ( charray_add_dup( &dvals, &dcur, &dmax, okey.dptr ) == NULL ) {
|
||||||
|
|
@ -641,7 +662,12 @@ diff_centroids(
|
||||||
ldbm_datum_free( oldbm, olast );
|
ldbm_datum_free( oldbm, olast );
|
||||||
}
|
}
|
||||||
olast = okey;
|
olast = okey;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
okey = ldbm_nextkey( oldbm, olast, ocursorp );
|
||||||
|
#else
|
||||||
okey = ldbm_nextkey( oldbm, olast );
|
okey = ldbm_nextkey( oldbm, olast );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -651,7 +677,11 @@ diff_centroids(
|
||||||
return( NULL );
|
return( NULL );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
okey = ldbm_nextkey( oldbm, olast, ocursorp );
|
||||||
|
#else
|
||||||
okey = ldbm_nextkey( oldbm, olast );
|
okey = ldbm_nextkey( oldbm, olast );
|
||||||
|
#endif
|
||||||
if ( olast.dptr != NULL ) {
|
if ( olast.dptr != NULL ) {
|
||||||
ldbm_datum_free( oldbm, olast );
|
ldbm_datum_free( oldbm, olast );
|
||||||
}
|
}
|
||||||
|
|
@ -666,7 +696,11 @@ diff_centroids(
|
||||||
return( NULL );
|
return( NULL );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
nkey = ldbm_nextkey( nldbm, nlast, ncursorp );
|
||||||
|
#else
|
||||||
nkey = ldbm_nextkey( nldbm, nlast );
|
nkey = ldbm_nextkey( nldbm, nlast );
|
||||||
|
#endif
|
||||||
if ( nlast.dptr != NULL ) {
|
if ( nlast.dptr != NULL ) {
|
||||||
ldbm_datum_free( nldbm, nlast );
|
ldbm_datum_free( nldbm, nlast );
|
||||||
}
|
}
|
||||||
|
|
@ -687,8 +721,14 @@ diff_centroids(
|
||||||
|
|
||||||
/* generate list of values to add */
|
/* generate list of values to add */
|
||||||
lastkey.dptr = NULL;
|
lastkey.dptr = NULL;
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
for ( key = ldbm_firstkey( nldbm, &ncursorp ); key.dptr != NULL;
|
||||||
|
key = ldbm_nextkey( nldbm, lastkey, ncursorp ) )
|
||||||
|
#else
|
||||||
for ( key = ldbm_firstkey( nldbm ); key.dptr != NULL;
|
for ( key = ldbm_firstkey( nldbm ); key.dptr != NULL;
|
||||||
key = ldbm_nextkey( nldbm, lastkey ) ) {
|
key = ldbm_nextkey( nldbm, lastkey ) )
|
||||||
|
#endif
|
||||||
|
{
|
||||||
/* see if it's in the old one */
|
/* see if it's in the old one */
|
||||||
data = ldbm_fetch( oldbm, key );
|
data = ldbm_fetch( oldbm, key );
|
||||||
|
|
||||||
|
|
@ -712,8 +752,14 @@ diff_centroids(
|
||||||
|
|
||||||
/* generate list of values to delete */
|
/* generate list of values to delete */
|
||||||
lastkey.dptr = NULL;
|
lastkey.dptr = NULL;
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
for ( key = ldbm_firstkey( oldbm, &ocursorp ); key.dptr != NULL;
|
||||||
|
key = ldbm_nextkey( oldbm, lastkey, ocursorp ) )
|
||||||
|
#else
|
||||||
for ( key = ldbm_firstkey( oldbm ); key.dptr != NULL;
|
for ( key = ldbm_firstkey( oldbm ); key.dptr != NULL;
|
||||||
key = ldbm_nextkey( oldbm, lastkey ) ) {
|
key = ldbm_nextkey( oldbm, lastkey ) )
|
||||||
|
#endif
|
||||||
|
{
|
||||||
/* see if it's in the new one */
|
/* see if it's in the new one */
|
||||||
data = ldbm_fetch( nldbm, key );
|
data = ldbm_fetch( nldbm, key );
|
||||||
|
|
||||||
|
|
@ -773,6 +819,10 @@ full_centroid(
|
||||||
char **vals;
|
char **vals;
|
||||||
int vcur, vmax;
|
int vcur, vmax;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
DBC *cursorp;
|
||||||
|
#endif
|
||||||
|
|
||||||
if ( verbose ) {
|
if ( verbose ) {
|
||||||
printf( "Generating mods for full %s centroid...", attr );
|
printf( "Generating mods for full %s centroid...", attr );
|
||||||
fflush( stdout );
|
fflush( stdout );
|
||||||
|
|
@ -800,8 +850,14 @@ full_centroid(
|
||||||
lastkey.dptr = NULL;
|
lastkey.dptr = NULL;
|
||||||
vals = NULL;
|
vals = NULL;
|
||||||
vcur = vmax = 0;
|
vcur = vmax = 0;
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
for ( key = ldbm_firstkey( ldbm, &cursorp ); key.dptr != NULL;
|
||||||
|
key = ldbm_nextkey( ldbm, lastkey, cursorp ) )
|
||||||
|
#else
|
||||||
for ( key = ldbm_firstkey( ldbm ); key.dptr != NULL;
|
for ( key = ldbm_firstkey( ldbm ); key.dptr != NULL;
|
||||||
key = ldbm_nextkey( ldbm, lastkey ) ) {
|
key = ldbm_nextkey( ldbm, lastkey ) )
|
||||||
|
#endif
|
||||||
|
{
|
||||||
if ( charray_add_dup( &vals, &vcur, &vmax, key.dptr ) == NULL ) {
|
if ( charray_add_dup( &vals, &vcur, &vmax, key.dptr ) == NULL ) {
|
||||||
ldap_mods_free( mods, 1 );
|
ldap_mods_free( mods, 1 );
|
||||||
return( NULL );
|
return( NULL );
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,10 @@ main( argc, argv )
|
||||||
char *file, *s;
|
char *file, *s;
|
||||||
int printid = 1;
|
int printid = 1;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
DBC *cursorp;
|
||||||
|
#endif
|
||||||
|
|
||||||
if ( argc < 2 || argc > 3 || ( argc == 3 && strcmp( argv[1], "-n" )
|
if ( argc < 2 || argc > 3 || ( argc == 3 && strcmp( argv[1], "-n" )
|
||||||
!= 0 )) {
|
!= 0 )) {
|
||||||
usage( argv[0] );
|
usage( argv[0] );
|
||||||
|
|
@ -41,8 +45,15 @@ main( argc, argv )
|
||||||
}
|
}
|
||||||
|
|
||||||
last.dptr = NULL;
|
last.dptr = NULL;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
for ( key = ldbm_firstkey( dbp, &cursorp ); key.dptr != NULL;
|
||||||
|
key = ldbm_nextkey( dbp, last, cursorp ) )
|
||||||
|
#else
|
||||||
for ( key = ldbm_firstkey( dbp ); key.dptr != NULL;
|
for ( key = ldbm_firstkey( dbp ); key.dptr != NULL;
|
||||||
key = ldbm_nextkey( dbp, last ) ) {
|
key = ldbm_nextkey( dbp, last ) )
|
||||||
|
#endif
|
||||||
|
{
|
||||||
if ( last.dptr != NULL )
|
if ( last.dptr != NULL )
|
||||||
ldbm_datum_free( dbp, last );
|
ldbm_datum_free( dbp, last );
|
||||||
data = ldbm_fetch( dbp, key );
|
data = ldbm_fetch( dbp, key );
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,10 @@ main( argc, argv )
|
||||||
int i;
|
int i;
|
||||||
extern char *optarg;
|
extern char *optarg;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
DBC *cursorp;
|
||||||
|
#endif
|
||||||
|
|
||||||
tailorfile = SLAPD_DEFAULT_CONFIGFILE;
|
tailorfile = SLAPD_DEFAULT_CONFIGFILE;
|
||||||
while ( (i = getopt( argc, argv, "d:f:" )) != EOF ) {
|
while ( (i = getopt( argc, argv, "d:f:" )) != EOF ) {
|
||||||
switch ( i ) {
|
switch ( i ) {
|
||||||
|
|
@ -151,9 +155,16 @@ main( argc, argv )
|
||||||
}
|
}
|
||||||
|
|
||||||
savekey.dptr = NULL;
|
savekey.dptr = NULL;
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
for ( key = ldbm_firstkey( dbc->dbc_db, &cursorp );
|
||||||
|
key.dptr != NULL;
|
||||||
|
key = ldbm_nextkey( dbc->dbc_db, key, cursorp ) )
|
||||||
|
#else
|
||||||
for ( key = ldbm_firstkey( dbc->dbc_db );
|
for ( key = ldbm_firstkey( dbc->dbc_db );
|
||||||
key.dptr != NULL;
|
key.dptr != NULL;
|
||||||
key = ldbm_nextkey( dbc->dbc_db, key ) ) {
|
key = ldbm_nextkey( dbc->dbc_db, key ) )
|
||||||
|
#endif
|
||||||
|
{
|
||||||
if ( savekey.dptr != NULL )
|
if ( savekey.dptr != NULL )
|
||||||
ldbm_datum_free( dbc->dbc_db, savekey );
|
ldbm_datum_free( dbc->dbc_db, savekey );
|
||||||
savekey = key;
|
savekey = key;
|
||||||
|
|
@ -313,8 +324,16 @@ main( argc, argv )
|
||||||
}
|
}
|
||||||
|
|
||||||
last.dptr = NULL;
|
last.dptr = NULL;
|
||||||
|
|
||||||
|
#ifdef LDBM_USE_DB2
|
||||||
|
for ( key = ldbm_firstkey( dbp, &cursorp );
|
||||||
|
key.dptr != NULL;
|
||||||
|
key = ldbm_nextkey( dbp, last, cursorp ) )
|
||||||
|
#else
|
||||||
for ( key = ldbm_firstkey( dbp ); key.dptr != NULL;
|
for ( key = ldbm_firstkey( dbp ); key.dptr != NULL;
|
||||||
key = ldbm_nextkey( dbp, last ) ) {
|
key = ldbm_nextkey( dbp, last ) )
|
||||||
|
#endif
|
||||||
|
{
|
||||||
if ( last.dptr != NULL ) {
|
if ( last.dptr != NULL ) {
|
||||||
ldbm_datum_free( dbp, last );
|
ldbm_datum_free( dbp, last );
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue