New dn2id format with base/one/subtree indices (ldbm/bdb2)

New id2entry (id-less) format (ldbm/bdb2)
Removed id2children (ldbm/bdb2)
Added nextid database (ldbm)
Broke ldbmtest
Removed ldif2* tools (ldbm/bdb2)
Added slap tools (slapadd, slapcat, slapindex)
This commit is contained in:
Kurt Zeilenga 1999-08-17 19:00:59 +00:00
parent 375995be50
commit e4f6d54877
108 changed files with 2053 additions and 3496 deletions

View File

@ -87,34 +87,46 @@ Package=<4>
Project_Dep_Name ldapsearch
End Project Dependency
Begin Project Dependency
Project_Dep_Name ldbmcat
End Project Dependency
Begin Project Dependency
Project_Dep_Name ldbmtest
End Project Dependency
Begin Project Dependency
Project_Dep_Name ldif
End Project Dependency
Begin Project Dependency
Project_Dep_Name ldif2id2children
Project_Dep_Name testavl
End Project Dependency
Begin Project Dependency
Project_Dep_Name ldif2id2entry
Project_Dep_Name ud
End Project Dependency
Begin Project Dependency
Project_Dep_Name ldif2index
Project_Dep_Name slapcat
End Project Dependency
Begin Project Dependency
Project_Dep_Name ldif2ldbm
Project_Dep_Name slapadd
End Project Dependency
Begin Project Dependency
Project_Dep_Name slapindex
End Project Dependency
Begin Project Dependency
Project_Dep_Name slapd
End Project Dependency
Begin Project Dependency
Project_Dep_Name testavl
Project_Dep_Name ldbmcat
End Project Dependency
Begin Project Dependency
Project_Dep_Name ud
Project_Dep_Name ldif2ldbm
End Project Dependency
Begin Project Dependency
Project_Dep_Name ldbmindex
End Project Dependency
Begin Project Dependency
Project_Dep_Name ldbmentry
End Project Dependency
Begin Project Dependency
Project_Dep_Name ltest
End Project Dependency
Begin Project Dependency
Project_Dep_Name ltest_r
End Project Dependency
}}}
@ -291,6 +303,78 @@ Package=<4>
###############################################################################
Project: "ldbmentry"=..\servers\slapd\tools\ldbmentry.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name backldbm
End Project Dependency
Begin Project Dependency
Project_Dep_Name libavl
End Project Dependency
Begin Project Dependency
Project_Dep_Name liblber
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldap_r
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldbm
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldif
End Project Dependency
Begin Project Dependency
Project_Dep_Name liblutil
End Project Dependency
Begin Project Dependency
Project_Dep_Name libslapd
End Project Dependency
}}}
###############################################################################
Project: "ldbmindex"=..\servers\slapd\tools\ldbmindex.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name backldbm
End Project Dependency
Begin Project Dependency
Project_Dep_Name libavl
End Project Dependency
Begin Project Dependency
Project_Dep_Name liblber
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldap_r
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldbm
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldif
End Project Dependency
Begin Project Dependency
Project_Dep_Name liblutil
End Project Dependency
Begin Project Dependency
Project_Dep_Name libslapd
End Project Dependency
}}}
###############################################################################
Project: "ldbmtest"=..\servers\slapd\tools\ldbmtest.dsp - Package Owner=<4>
Package=<5>
@ -351,114 +435,6 @@ Package=<4>
###############################################################################
Project: "ldif2id2children"=..\servers\slapd\tools\ldif2id2children.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name backldbm
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldap_r
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldif
End Project Dependency
Begin Project Dependency
Project_Dep_Name libavl
End Project Dependency
Begin Project Dependency
Project_Dep_Name liblutil
End Project Dependency
Begin Project Dependency
Project_Dep_Name liblber
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldbm
End Project Dependency
Begin Project Dependency
Project_Dep_Name libslapd
End Project Dependency
}}}
###############################################################################
Project: "ldif2id2entry"=..\servers\slapd\tools\ldif2id2entry.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name backldbm
End Project Dependency
Begin Project Dependency
Project_Dep_Name libavl
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldap_r
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldif
End Project Dependency
Begin Project Dependency
Project_Dep_Name liblutil
End Project Dependency
Begin Project Dependency
Project_Dep_Name liblber
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldbm
End Project Dependency
Begin Project Dependency
Project_Dep_Name libslapd
End Project Dependency
}}}
###############################################################################
Project: "ldif2index"=..\servers\slapd\tools\ldif2index.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name backldbm
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldap_r
End Project Dependency
Begin Project Dependency
Project_Dep_Name libavl
End Project Dependency
Begin Project Dependency
Project_Dep_Name liblutil
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldif
End Project Dependency
Begin Project Dependency
Project_Dep_Name liblber
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldbm
End Project Dependency
Begin Project Dependency
Project_Dep_Name libslapd
End Project Dependency
}}}
###############################################################################
Project: "ldif2ldbm"=..\servers\slapd\tools\ldif2ldbm.dsp - Package Owner=<4>
Package=<5>
@ -645,6 +621,78 @@ Package=<4>
###############################################################################
Project: "slapadd"=..\servers\slapd\tools\slapadd.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name backldbm
End Project Dependency
Begin Project Dependency
Project_Dep_Name libavl
End Project Dependency
Begin Project Dependency
Project_Dep_Name liblber
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldap_r
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldbm
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldif
End Project Dependency
Begin Project Dependency
Project_Dep_Name liblutil
End Project Dependency
Begin Project Dependency
Project_Dep_Name libslapd
End Project Dependency
}}}
###############################################################################
Project: "slapcat"=..\servers\slapd\tools\slapcat.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name libavl
End Project Dependency
Begin Project Dependency
Project_Dep_Name liblber
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldap_r
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldbm
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldif
End Project Dependency
Begin Project Dependency
Project_Dep_Name liblutil
End Project Dependency
Begin Project Dependency
Project_Dep_Name libslapd
End Project Dependency
Begin Project Dependency
Project_Dep_Name backldbm
End Project Dependency
}}}
###############################################################################
Project: "slapd"=..\servers\slapd\slapd.dsp - Package Owner=<4>
Package=<5>
@ -684,6 +732,42 @@ Package=<4>
###############################################################################
Project: "slapindex"=..\servers\slapd\tools\slapindex.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name backldbm
End Project Dependency
Begin Project Dependency
Project_Dep_Name libavl
End Project Dependency
Begin Project Dependency
Project_Dep_Name liblber
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldap_r
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldbm
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldif
End Project Dependency
Begin Project Dependency
Project_Dep_Name liblutil
End Project Dependency
Begin Project Dependency
Project_Dep_Name libslapd
End Project Dependency
}}}
###############################################################################
Project: "testavl"=..\libraries\libavl\testavl.dsp - Package Owner=<4>
Package=<5>

View File

@ -49,23 +49,26 @@ typedef DBT Datum;
typedef DB *LDBM;
LDAP_END_DECL
#define DB_TYPE DB_BTREE
/* for ldbm_open */
#ifdef HAVE_BERKELEY_DB2
typedef DBC LDBMCursor;
# define LDBM_READER DB_RDONLY
# define LDBM_WRITER 0x00000 /* hopefully */
# define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
# define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
#else
typedef int LDBMCursor;
# 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
LDAP_END_DECL
# define LDBM_FAST 0
#define LDBM_SUFFIX ".dbb"
@ -110,17 +113,17 @@ typedef DBT Datum;
typedef DB *LDBM;
LDAP_END_DECL
#define DB_TYPE DB_HASH
/* for ldbm_open */
#ifdef LDBM_USE_DB2
typedef DBC LDBMCursor;
# define LDBM_READER DB_RDONLY
# define LDBM_WRITER 0x00000 /* hopefully */
# define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
# define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
#else
typedef int LDBMCursor;
# define LDBM_READER O_RDONLY
# define LDBM_WRITER O_RDWR
# define LDBM_WRCREAT (O_RDWR|O_CREAT)
@ -128,6 +131,8 @@ LDAP_END_DECL
# define LDBM_FAST 0
#endif
LDAP_END_DECL
#define LDBM_SUFFIX ".dbh"
/* for ldbm_insert */
@ -148,7 +153,7 @@ LDAP_END_DECL
LDAP_BEGIN_DECL
typedef datum Datum;
typedef int LDBMCursor;
typedef GDBM_FILE LDBM;
extern gdbm_error gdbm_errno;
@ -182,6 +187,7 @@ LDAP_END_DECL
LDAP_BEGIN_DECL
typedef datum Datum;
typedef int LDBMCursor;
typedef MDBM *LDBM;
LDAP_END_DECL
@ -222,7 +228,7 @@ LDAP_END_DECL
LDAP_BEGIN_DECL
typedef datum Datum;
typedef int LDBMCursor;
typedef DBM *LDBM;
LDAP_END_DECL
@ -258,18 +264,12 @@ Datum ldbm_fetch( LDBM ldbm, Datum key );
int ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
int ldbm_delete( LDBM ldbm, Datum key );
#if HAVE_BERKELEY_DB2
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
Datum ldbm_firstkey( LDBM ldbm, LDBMCursor **cursor );
Datum ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *cursor );
/* initialization of Datum structures */
#ifdef HAVE_BERKELEY_DB2
void *ldbm_malloc( size_t size );
# define ldbm_datum_init(d) ((void)memset(&(d), 0, sizeof(Datum)))
#else
# define ldbm_datum_init(d) ((void)0)

View File

@ -64,6 +64,14 @@ ldif_fetch_url LDAP_P((
LDAP_F( char * )
ldif_getline LDAP_P(( char **next ));
LDAP_F( int )
ldif_read_record LDAP_P((
FILE *fp,
int *lineno,
char **bufp,
int *buflen ));
#define LDIF_PUT_NOVALUE 0x0000 /* no value */
#define LDIF_PUT_VALUE 0x0001 /* value w/ auto detection */
#define LDIF_PUT_TEXT 0x0002 /* assume text */

View File

@ -47,6 +47,14 @@ lutil_passwd LDAP_P((
const char *passwd,
const char **methods ));
/* utils.c */
LDAP_F( char* )
lutil_progname LDAP_P((
const char* name,
int argc,
char *argv[] ));
LDAP_END_DECL
#endif /* _LUTIL_H */

View File

@ -314,16 +314,12 @@ ldbm_delete( LDBM ldbm, Datum key )
}
Datum
#ifdef HAVE_BERKELEY_DB2
ldbm_firstkey( LDBM ldbm, DBC **dbch )
#else
ldbm_firstkey( LDBM ldbm )
#endif
ldbm_firstkey( LDBM ldbm, LDBMCursor **dbch )
{
Datum key, data;
#ifdef HAVE_BERKELEY_DB2
DBC *dbci;
LDBMCursor *dbci;
ldbm_datum_init( key );
ldbm_datum_init( data );
@ -375,11 +371,7 @@ ldbm_firstkey( LDBM ldbm )
}
Datum
#ifdef HAVE_BERKELEY_DB2
ldbm_nextkey( LDBM ldbm, Datum key, DBC *dbcp )
#else
ldbm_nextkey( LDBM ldbm, Datum key )
#endif
ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *dbcp )
{
Datum data;
@ -518,7 +510,7 @@ ldbm_delete( LDBM ldbm, Datum key )
}
Datum
ldbm_firstkey( LDBM ldbm )
ldbm_firstkey( LDBM ldbm, LDBMCursor **dbcp )
{
Datum d;
@ -530,7 +522,7 @@ ldbm_firstkey( LDBM ldbm )
}
Datum
ldbm_nextkey( LDBM ldbm, Datum key )
ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *dbcp )
{
Datum d;
@ -629,7 +621,7 @@ ldbm_open( char *name, int rw, int mode, int dbcachesize )
return( db );
}/* LDBM ldbm_open() */
}
@ -655,7 +647,7 @@ ldbm_close( LDBM ldbm )
fflush( stdout );
#endif
}/* void ldbm_close() */
}
@ -672,7 +664,7 @@ ldbm_sync( LDBM ldbm )
mdbm_sync( ldbm );
LDBM_UNLOCK;
}/* void ldbm_sync() */
}
#define MAX_MDBM_RETRY 5
@ -739,7 +731,7 @@ ldbm_fetch( LDBM ldbm, Datum key )
return d;
}/* Datum ldbm_fetch() */
}
@ -786,8 +778,7 @@ ldbm_store( LDBM ldbm, Datum key, Datum data, int flags )
return( rc );
}/* int ldbm_store() */
}
@ -817,7 +808,7 @@ ldbm_delete( LDBM ldbm, Datum key )
return( rc );
}/* int ldbm_delete() */
}
@ -872,24 +863,24 @@ ldbm_get_next( LDBM ldbm, kvpair (*fptr)(MDBM *, kvpair) )
return ret;
}/* static Datum ldbm_get_next() */
}
Datum
ldbm_firstkey( LDBM ldbm )
ldbm_firstkey( LDBM ldbm, LDBMCursor **dbcp )
{
return ldbm_get_next( ldbm, mdbm_first );
}/* Datum ldbm_firstkey() */
}
Datum
ldbm_nextkey( LDBM ldbm, Datum key )
ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *dbcp )
{
/* XXX:
@ -899,7 +890,7 @@ ldbm_nextkey( LDBM ldbm, Datum key )
return ldbm_get_next( ldbm, mdbm_next );
}/* Datum ldbm_nextkey() */
}
int
ldbm_errno( LDBM ldbm )
@ -907,7 +898,7 @@ ldbm_errno( LDBM ldbm )
/* XXX: best we can do with current mdbm interface */
return( errno );
}/* int ldbm_errno() */
}
@ -985,7 +976,7 @@ ldbm_delete( LDBM ldbm, Datum key )
}
Datum
ldbm_firstkey( LDBM ldbm )
ldbm_firstkey( LDBM ldbm, LDBMCursor **dbcp )
{
Datum d;
@ -997,7 +988,7 @@ ldbm_firstkey( LDBM ldbm )
}
Datum
ldbm_nextkey( LDBM ldbm, Datum key )
ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *dbcp )
{
Datum d;

View File

@ -534,3 +534,62 @@ int ldif_is_not_printable(
return 1;
}
/*
* slap_read_ldif - read an ldif record. Return 1 for success, 0 for EOF.
*/
int
ldif_read_record(
FILE *fp,
int *lno, /* ptr to line number counter */
char **bufp, /* ptr to malloced output buffer */
int *buflenp ) /* ptr to length of *bufp */
{
char linebuf[BUFSIZ], *line;
ber_len_t lcur = 0, len, linesize;
int last_ch = '\n', found_entry = 0, stop;
line = linebuf;
linesize = sizeof( linebuf );
for ( stop = feof( fp ); !stop; last_ch = line[len-1] ) {
if ( fgets( line, linesize, fp ) == NULL ) {
stop = 1;
/* Add \n in case the file does not end with newline */
line = "\n";
}
len = strlen( line );
if ( last_ch == '\n' ) {
(*lno)++;
if ( line[0] == '\n' ) {
if ( !found_entry )
continue;
break;
}
if ( !found_entry ) {
/* Found a new entry */
found_entry = 1;
if ( isdigit( (unsigned char) line[0] ) ) {
/* skip index */
continue;
}
}
}
if ( *buflenp - lcur <= len ) {
char *nbufp = ber_memrealloc( *bufp, *buflenp += len + BUFSIZ );
if( nbufp == NULL ) {
return 0;
}
*bufp = nbufp;
}
strcpy( *bufp + lcur, line );
lcur += len;
}
return( found_entry );
}

View File

@ -3,8 +3,10 @@
##
LIBRARY = liblutil.a
SRCS = base64.c debug.c detach.c md5.c passwd.c sha1.c getpass.c lockf.c
OBJS = base64.o debug.o detach.o md5.o passwd.o sha1.o getpass.o lockf.o \
SRCS = base64.c debug.c detach.c \
md5.c passwd.c sha1.c getpass.c lockf.c utils.c
OBJS = base64.o debug.o detach.o \
md5.o passwd.o sha1.o getpass.o lockf.o utils.o \
@LIBOBJS@
LDAP_INCDIR= ../../include

View File

@ -1,3 +1,7 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
/*
* Modified by Kurt D. Zeilenga for inclusion into OpenLDAP
*/

View File

@ -1,3 +1,7 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
/*
* Copyright (c) 1996, 1998 by Internet Software Consortium.
*

View File

@ -1,3 +1,7 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
/*
getopt.c

View File

@ -1,3 +1,7 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
/*
* Copyright (c) 1992, 1993 Regents of the University of Michigan.
* All rights reserved.

View File

@ -252,6 +252,10 @@ InputPath=.\slapdmsg.mc
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\utils.c
# End Source File
# End Target
# End Project

View File

@ -1,3 +1,7 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
/*
* Modified by Kurt D. Zeilenga for inclusion into OpenLDAP
* I hereby disclaim copyright in any changes I have made; this

View File

@ -1,3 +1,7 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
/* ntservice.c */
#include "portable.h"

View File

@ -1,3 +1,7 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
/*
* lutil_password(credentials, password)
*

View File

@ -1,3 +1,7 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
/* Acquired from:
* $OpenBSD: sha1.c,v 1.9 1997/07/23 21:12:32 kstailey Exp $ */

View File

@ -0,0 +1,26 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
#include "portable.h"
#include <ac/stdlib.h>
#include <ac/string.h>
#include <lutil.h>
#include <ldap_defaults.h>
char* lutil_progname( const char* name, int argc, char *argv[] )
{
char *progname;
if(argc == 0) {
return strdup( name );
}
progname = strrchr ( argv[0], *LDAP_DIRSEP );
progname = strdup( progname ? &progname[1] : argv[0] );
return progname;
}

View File

@ -2,12 +2,12 @@ SRCS = idl.c add.c search.c cache.c dbcache.c dn2id.c entry.c id2entry.c \
index.c id2children.c nextid.c abandon.c compare.c group.c \
modify.c modrdn.c delete.c init.c config.c bind.c attr.c \
filterindex.c unbind.c kerberos.c close.c alias.c startup.c \
timing.c porter.c txn.c
timing.c porter.c txn.c tools.c
OBJS = idl.lo add.lo search.lo cache.lo dbcache.lo dn2id.lo entry.lo id2entry.lo \
index.lo id2children.lo nextid.lo abandon.lo compare.lo group.lo \
modify.lo modrdn.lo delete.lo init.lo config.lo bind.lo attr.lo \
filterindex.lo unbind.lo kerberos.lo close.lo alias.lo startup.lo \
timing.lo porter.lo txn.lo
timing.lo porter.lo txn.lo tools.lo
LDAP_INCDIR= ../../../include
LDAP_LIBDIR= ../../../libraries

View File

@ -188,9 +188,6 @@ bdb2i_back_add_internal(
Debug( LDAP_DEBUG_ANY, "cache_add_entry_lock failed\n", 0, 0,
0 );
/* return the id */
bdb2i_next_id_return( be, e->e_id );
/* free the entry */
entry_free( e );
@ -203,28 +200,9 @@ bdb2i_back_add_internal(
rc = -1;
/*
* add it to the id2children index for the parent
*/
bdb2i_start_timing( be->bd_info, &time1 );
if ( bdb2i_id2children_add( be, p, e ) != 0 ) {
Debug( LDAP_DEBUG_TRACE, "bdb2i_id2children_add failed\n", 0,
0, 0 );
send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR,
NULL, NULL, NULL, NULL );
bdb2i_stop_timing( be->bd_info, time1, "ADD-ID2CHILDREN", conn, op );
goto return_results;
}
bdb2i_stop_timing( be->bd_info, time1, "ADD-ID2CHILDREN", conn, op );
/*
* Add the entry to the attribute indexes, then add it to
* the id2children index, dn2id index, and the id2entry index.
* the id2entry and dn2id index.
*/
bdb2i_start_timing( be->bd_info, &time1 );
@ -317,11 +295,9 @@ bdb2_back_add(
/* check, if a new default attribute index will be created,
in which case we have to open the index file BEFORE TP */
switch ( slapMode ) {
switch ( slapMode & SLAP_MODE ) {
case SLAP_SERVER_MODE:
case SLAP_TIMEDSERVER_MODE:
case SLAP_TOOL_MODE:
case SLAP_TOOLID_MODE:
bdb2i_check_default_attr_index_add( li, e );
break;
}

View File

@ -20,11 +20,19 @@ LDAP_BEGIN_DECL
#define SUBLEN 3
#define DN_BASE_PREFIX '='
#define DN_ONE_PREFIX '@'
#define DN_SUBTREE_PREFIX '?'
#define SLAPD_FILTER_DN_ONE ((ber_tag_t) -2)
#define SLAPD_FILTER_DN_SUBTREE ((ber_tag_t) -3)
#define BDB2_SUFFIX ".bdb2"
/*
* there is a single index for each attribute. these prefixes insure
* there is a single index for each attribute. these prefixes ensure
* that there is no collision among keys.
*/
#define EQ_PREFIX '=' /* prefix for equality keys */
@ -32,6 +40,10 @@ LDAP_BEGIN_DECL
#define SUB_PREFIX '*' /* prefix for substring keys */
#define CONT_PREFIX '\\' /* prefix for continuation keys */
/* allow 3 characters per byte + PREFIX + EOS */
#define CONT_SIZE ( sizeof(long)*3 + 1 + 1 )
#define UNKNOWN_PREFIX '?' /* prefix for unknown keys */
#define DEFAULT_BLOCKSIZE 8192
@ -98,18 +110,19 @@ struct dbcache {
};
typedef struct dbcache BDB2_TXN_FILES;
typedef struct dbcache DBCache;
/* for the cache of attribute information (which are indexed, etc.) */
struct attrinfo {
char *ai_type; /* type name (cn, sn, ...) */
int ai_indexmask; /* how the attr is indexed */
#define INDEX_PRESENCE 0x01
#define INDEX_EQUALITY 0x02
#define INDEX_APPROX 0x04
#define INDEX_SUB 0x08
#define INDEX_UNKNOWN 0x10
#define INDEX_FROMINIT 0x20
#define INDEX_PRESENCE 0x0001
#define INDEX_EQUALITY 0x0002
#define INDEX_APPROX 0x0004
#define INDEX_SUB 0x0008
#define INDEX_UNKNOWN 0x0010
#define INDEX_FROMINIT 0x1000
int ai_syntaxmask; /* what kind of syntax */
/* ...from slap.h...
#define SYNTAX_CIS 0x01
@ -119,12 +132,6 @@ struct attrinfo {
*/
};
/* this could be made an option */
#ifndef SLAPD_NEXTID_CHUNK
#define SLAPD_NEXTID_CHUNK 32
#endif
/* TP stuff */
typedef struct _bdb2_txn_head {
@ -178,9 +185,6 @@ extern DB_ENV bdb2i_dbEnv;
/* the private description of a database */
struct ldbminfo {
ID li_nextid;
#if SLAPD_NEXTID_CHUNK > 1
ID li_nextid_wrote;
#endif
char *li_nextid_file;
int li_mode;
char *li_directory;

View File

@ -12,6 +12,7 @@
static int
bdb2i_back_db_close_internal( BackendDB *be )
{
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
DB_LOCK lock;
/* since close will probably write the NEXTID file,
@ -20,8 +21,7 @@ bdb2i_back_db_close_internal( BackendDB *be )
return( -1 );
}
if ( slapMode != SLAP_TOOL_MODE ) {
if ( li->li_nextid != NOID ) {
Debug( LDAP_DEBUG_TRACE, "bdb2 backend saving nextid\n", 0, 0, 0 );
if ( bdb2i_next_id_save( be ) < 0 ) {
Debug( LDAP_DEBUG_ANY, "bdb2 backend nextid save failed!\n",

View File

@ -28,12 +28,10 @@ bdb2i_cache_open(
)
{
/* all files are open, so return handle from file cache */
switch ( slapMode ) {
switch ( slapMode & SLAP_MODE ) {
case SLAP_SERVER_MODE:
case SLAP_TIMEDSERVER_MODE:
case SLAP_TOOL_MODE:
case SLAP_TOOLID_MODE:
{
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
char buf[MAXPATHLEN];
@ -60,12 +58,9 @@ void
bdb2i_cache_close( BackendDB *be, struct dbcache *db )
{
/* all files stay open until SERVER or TOOL shut down */
switch ( slapMode ) {
switch ( slapMode & SLAP_MODE ) {
case SLAP_SERVER_MODE:
case SLAP_TIMEDSERVER_MODE:
case SLAP_TOOL_MODE:
case SLAP_TOOLID_MODE:
return;
default:
@ -81,12 +76,9 @@ void
bdb2i_cache_really_close( BackendDB *be, struct dbcache *db )
{
/* all files stay open until SERVER or TOOL shut down */
switch ( slapMode ) {
switch ( slapMode & SLAP_MODE ) {
case SLAP_SERVER_MODE:
case SLAP_TIMEDSERVER_MODE:
case SLAP_TOOL_MODE:
case SLAP_TOOLID_MODE:
return;
default:
@ -102,12 +94,10 @@ void
bdb2i_cache_flush_all( BackendDB *be )
{
/* if SERVER or TOOL, syncing is done by TP, or during shutdown */
switch ( slapMode ) {
switch ( slapMode & SLAP_MODE ) {
case SLAP_SERVER_MODE:
case SLAP_TIMEDSERVER_MODE:
case SLAP_TOOL_MODE:
case SLAP_TOOLID_MODE:
return;
default:
@ -163,12 +153,12 @@ bdb2i_cache_store(
flags, 0, 0, 0, 0 );
#endif /* LDBM_DEBUG */
if ( slapMode == SLAP_TIMEDSERVER_MODE )
if ( slapMode & SLAP_TIMED_MODE )
bdb2i_uncond_start_timing( &time1 );
rc = bdb2i_db_store( db->dbc_db, key, data, flags );
if ( slapMode == SLAP_TIMEDSERVER_MODE ) {
if ( slapMode & SLAP_TIMED_MODE ) {
char buf[BUFSIZ];
char buf2[BUFSIZ];

View File

@ -93,7 +93,7 @@ bdb2i_back_delete_internal(
}
#endif
/* delete from parent's id2children entry */
/* find parent's entry */
if( (pdn = dn_parent( be, e->e_ndn )) != NULL ) {
if( (p = bdb2i_dn2entry_w( be, pdn, &matched )) == NULL) {
Debug( LDAP_DEBUG_TRACE,
@ -125,15 +125,6 @@ bdb2i_back_delete_internal(
}
}
if ( bdb2i_id2children_remove( be, p, e ) != 0 ) {
Debug(LDAP_DEBUG_ARGS,
"<=- bdb2i_back_delete: operations error %s\n",
dn, 0, 0);
send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR,
NULL, NULL, NULL, NULL );
goto return_results;
}
/* delete from dn2id mapping */
if ( bdb2i_dn2id_delete( be, e->e_ndn ) != 0 ) {
Debug(LDAP_DEBUG_ARGS,

View File

@ -23,9 +23,6 @@ bdb2i_dn2id_add(
Datum key, data;
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
ldbm_datum_init( key );
ldbm_datum_init( data );
Debug( LDAP_DEBUG_TRACE, "=> bdb2i_dn2id_add( \"%s\", %ld )\n", dn, id, 0 );
if ( (db = bdb2i_cache_open( be, "dn2id", BDB2_SUFFIX, LDBM_WRCREAT ))
@ -35,11 +32,12 @@ bdb2i_dn2id_add(
return( -1 );
}
dn = ch_strdup( dn );
(void) dn_normalize_case( dn );
ldbm_datum_init( key );
key.dsize = strlen( dn ) + 2;
key.dptr = ch_malloc( key.dsize );
sprintf( key.dptr, "%c%s", DN_BASE_PREFIX, dn );
key.dptr = dn;
key.dsize = strlen( dn ) + 1;
ldbm_datum_init( data );
data.dptr = (char *) &id;
data.dsize = sizeof(ID);
@ -48,7 +46,41 @@ bdb2i_dn2id_add(
rc = bdb2i_cache_store( db, key, data, flags );
free( dn );
free( key.dptr );
if ( rc != -1 ) {
char *pdn = dn_parent( NULL, dn );
if( pdn != NULL ) {
ldbm_datum_init( key );
key.dsize = strlen( pdn ) + 2;
key.dptr = ch_malloc( key.dsize );
sprintf( key.dptr, "%c%s", DN_ONE_PREFIX, pdn );
rc = bdb2i_idl_insert_key( be, db, key, id );
free( key.dptr );
}
}
if ( rc != -1 ) {
char **subtree = dn_subtree( NULL, dn );
if( subtree != NULL ) {
int i;
for( i=0; subtree[i] != NULL; i++ ) {
ldbm_datum_init( key );
key.dsize = strlen( subtree[i] ) + 2;
key.dptr = ch_malloc( key.dsize );
sprintf( key.dptr, "%c%s", DN_SUBTREE_PREFIX, subtree[i] );
rc = bdb2i_idl_insert_key( be, db, key, id );
free( key.dptr );
}
charray_free( subtree );
}
}
bdb2i_cache_close( be, db );
Debug( LDAP_DEBUG_TRACE, "<= bdb2i_dn2id_add %d\n", rc, 0, 0 );
@ -66,16 +98,10 @@ bdb2i_dn2id(
ID id;
Datum key, data;
ldbm_datum_init( key );
ldbm_datum_init( data );
dn = ch_strdup( dn );
Debug( LDAP_DEBUG_TRACE, "=> bdb2i_dn2id( \"%s\" )\n", dn, 0, 0 );
(void) dn_normalize_case( dn );
/* first check the cache */
if ( (id = bdb2i_cache_find_entry_dn2id( be, &li->li_cache, dn )) != NOID ) {
free( dn );
Debug( LDAP_DEBUG_TRACE, "<= bdb2i_dn2id %ld (in cache)\n", id,
0, 0 );
return( id );
@ -83,19 +109,22 @@ bdb2i_dn2id(
if ( (db = bdb2i_cache_open( be, "dn2id", BDB2_SUFFIX, LDBM_WRCREAT ))
== NULL ) {
free( dn );
Debug( LDAP_DEBUG_ANY, "<= bdb2i_dn2id could not open dn2id%s\n",
BDB2_SUFFIX, 0, 0 );
return( NOID );
}
key.dptr = dn;
key.dsize = strlen( dn ) + 1;
ldbm_datum_init( key );
key.dsize = strlen( dn ) + 2;
key.dptr = ch_malloc( key.dsize );
sprintf( key.dptr, "%c%s", DN_BASE_PREFIX, dn );
data = bdb2i_cache_fetch( db, key );
bdb2i_cache_close( be, db );
free( dn );
free( key.dptr );
if ( data.dptr == NULL ) {
Debug( LDAP_DEBUG_TRACE, "<= bdb2i_dn2id NOID\n", 0, 0, 0 );
@ -110,6 +139,41 @@ bdb2i_dn2id(
return( id );
}
ID_BLOCK *
bdb2i_dn2idl(
BackendDB *be,
char *dn,
int prefix )
{
struct dbcache *db;
Datum key;
ID_BLOCK *idl;
Debug( LDAP_DEBUG_TRACE, "=> bdb2i_dn2idl( \"%c%s\" )\n", prefix, dn, 0 );
if ( (db = bdb2i_cache_open( be, "dn2id", BDB2_SUFFIX, LDBM_WRCREAT ))
== NULL ) {
Debug( LDAP_DEBUG_ANY,
"<= bdb2i_dn2idl could not open dn2id%s\n", BDB2_SUFFIX,
0, 0 );
return( NULL );
}
ldbm_datum_init( key );
key.dsize = strlen( dn ) + 2;
key.dptr = ch_malloc( key.dsize );
sprintf( key.dptr, "%c%s", prefix, dn );
idl = bdb2i_idl_fetch( be, db, key );
free( key.dptr );
bdb2i_cache_close( be, db );
return( idl );
}
int
bdb2i_dn2id_delete(
BackendDB *be,
@ -120,8 +184,6 @@ bdb2i_dn2id_delete(
Datum key;
int rc;
ldbm_datum_init( key );
Debug( LDAP_DEBUG_TRACE, "=> bdb2i_dn2id_delete( \"%s\" )\n", dn, 0, 0 );
if ( (db = bdb2i_cache_open( be, "dn2id", BDB2_SUFFIX, LDBM_WRCREAT ))
@ -132,14 +194,15 @@ bdb2i_dn2id_delete(
return( -1 );
}
dn = ch_strdup( dn );
(void) dn_normalize_case( dn );
key.dptr = dn;
key.dsize = strlen( dn ) + 1;
ldbm_datum_init( key );
key.dsize = strlen( dn ) + 2;
key.dptr = ch_malloc( key.dsize );
sprintf( key.dptr, "%c%s", DN_BASE_PREFIX, dn );
rc = bdb2i_cache_delete( db, key );
free( dn );
free( key.dptr );
bdb2i_cache_close( be, db );

View File

@ -58,6 +58,18 @@ extern int bdb2_back_group LDAP_P(( BackendDB *bd,
Entry *target, char* gr_ndn, char* op_ndn,
char* objectclassValue, char* groupattrName));
/* hooks for slap tools */
extern int bdb2_tool_entry_open LDAP_P(( BackendDB *be, int mode ));
extern int bdb2_tool_entry_close LDAP_P(( BackendDB *be ));
extern ID bdb2_tool_entry_first LDAP_P(( BackendDB *be ));
extern ID bdb2_tool_entry_next LDAP_P(( BackendDB *be ));
extern Entry* bdb2_tool_entry_get LDAP_P(( BackendDB *be, ID id ));
extern ID bdb2_tool_entry_put LDAP_P(( BackendDB *be, Entry *e ));
extern int bdb2_tool_index_attr LDAP_P(( BackendDB *be, char* type ));
extern int bdb2_tool_index_change LDAP_P(( BackendDB *be, char* type,
struct berval **bv, ID id, int op ));
extern int bdb2_tool_sync LDAP_P(( BackendDB *be ));
LDAP_END_DECL
#endif /* _BDB2_EXTERNAL_H */

View File

@ -36,6 +36,16 @@ bdb2i_filter_candidates(
result = NULL;
switch ( f->f_choice ) {
case SLAPD_FILTER_DN_ONE:
Debug( LDAP_DEBUG_FILTER, "\tDN ONE\n", 0, 0, 0 );
result = bdb2i_dn2idl( be, f->f_dn, DN_SUBTREE_PREFIX );
break;
case SLAPD_FILTER_DN_SUBTREE:
Debug( LDAP_DEBUG_FILTER, "\tDN SUBTREE\n", 0, 0, 0 );
result = bdb2i_dn2idl( be, f->f_dn, DN_SUBTREE_PREFIX );
break;
case LDAP_FILTER_EQUALITY:
Debug( LDAP_DEBUG_FILTER, "\tEQUALITY\n", 0, 0, 0 );
result = ava_candidates( be, &f->f_ava, LDAP_FILTER_EQUALITY );

View File

@ -10,88 +10,6 @@
#include "slap.h"
#include "back-bdb2.h"
int
bdb2i_id2children_add(
BackendDB *be,
Entry *p,
Entry *e
)
{
struct dbcache *db;
Datum key;
char buf[20];
ldbm_datum_init( key );
Debug( LDAP_DEBUG_TRACE, "=> bdb2i_id2children_add( %ld, %ld )\n",
p ? p->e_id : 0, e->e_id, 0 );
if ( (db = bdb2i_cache_open( be, "id2children", BDB2_SUFFIX,
LDBM_WRCREAT )) == NULL ) {
Debug( LDAP_DEBUG_ANY,
"<= bdb2i_id2children_add -1 could not open \"id2children%s\"\n",
BDB2_SUFFIX, 0, 0 );
return( -1 );
}
sprintf( buf, "%c%ld", EQ_PREFIX, p ? p->e_id : 0 );
key.dptr = buf;
key.dsize = strlen( buf ) + 1;
if ( bdb2i_idl_insert_key( be, db, key, e->e_id ) != 0 ) {
Debug( LDAP_DEBUG_TRACE, "<= bdb2i_id2children_add -1 (idl_insert)\n",
0, 0, 0 );
bdb2i_cache_close( be, db );
return( -1 );
}
bdb2i_cache_close( be, db );
Debug( LDAP_DEBUG_TRACE, "<= bdb2i_id2children_add 0\n", 0, 0, 0 );
return( 0 );
}
int
bdb2i_id2children_remove(
BackendDB *be,
Entry *p,
Entry *e
)
{
struct dbcache *db;
Datum key;
char buf[20];
Debug( LDAP_DEBUG_TRACE, "=> bdb2i_id2children_remove( %ld, %ld )\n",
p ? p->e_id : 0, e->e_id, 0 );
if ( (db = bdb2i_cache_open( be, "id2children", BDB2_SUFFIX,
LDBM_WRCREAT )) == NULL ) {
Debug( LDAP_DEBUG_ANY,
"<= bdb2i_id2children_remove -1 could not open \"id2children%s\"\n",
BDB2_SUFFIX, 0, 0 );
return( -1 );
}
ldbm_datum_init( key );
sprintf( buf, "%c%ld", EQ_PREFIX, p ? p->e_id : 0 );
key.dptr = buf;
key.dsize = strlen( buf ) + 1;
if ( bdb2i_idl_delete_key( be, db, key, e->e_id ) != 0 ) {
Debug( LDAP_DEBUG_TRACE, "<= bdb2i_id2children_remove -1 (idl_delete)\n",
0, 0, 0 );
bdb2i_cache_close( be, db );
return( -1 );
}
bdb2i_cache_close( be, db );
Debug( LDAP_DEBUG_TRACE, "<= bdb2i_id2children_remove 0\n", 0, 0, 0 );
return( 0 );
}
int
bdb2i_has_children(
BackendDB *be,
@ -102,26 +20,27 @@ bdb2i_has_children(
Datum key;
int rc = 0;
ID_BLOCK *idl;
char buf[20];
ldbm_datum_init( key );
Debug( LDAP_DEBUG_TRACE, "=> bdb2i_has_children( %ld )\n", p->e_id , 0, 0 );
if ( (db = bdb2i_cache_open( be, "id2children", BDB2_SUFFIX,
if ( (db = bdb2i_cache_open( be, "dn2id", BDB2_SUFFIX,
LDBM_WRCREAT )) == NULL ) {
Debug( LDAP_DEBUG_ANY,
"<= bdb2i_has_children -1 could not open \"id2children%s\"\n",
BDB2_SUFFIX, 0, 0 );
"<= bdb2i_has_children: could not open \"dn2id" BDB2_SUFFIX "\"\n",
0, 0, 0 );
return( 0 );
}
sprintf( buf, "%c%ld", EQ_PREFIX, p->e_id );
key.dptr = buf;
key.dsize = strlen( buf ) + 1;
key.dsize = strlen( p->e_ndn ) + 2;
key.dptr = ch_malloc( key.dsize );
sprintf( key.dptr, "%c%s", DN_ONE_PREFIX, p->e_ndn );
idl = bdb2i_idl_fetch( be, db, key );
free( key.dptr );
bdb2i_cache_close( be, db );
if( idl != NULL ) {

View File

@ -39,7 +39,7 @@ bdb2i_id2entry_add( BackendDB *be, Entry *e )
key.dsize = sizeof(ID);
ldap_pvt_thread_mutex_lock( &entry2str_mutex );
data.dptr = entry2str( e, &len, 1 );
data.dptr = entry2str( e, &len );
data.dsize = len + 1;
/* store it */
@ -150,13 +150,7 @@ bdb2i_id2entry_rw( BackendDB *be, ID id, int rw )
return( NULL );
}
if ( e->e_id != id ) {
Debug( LDAP_DEBUG_TRACE,
"<= bdb2i_id2entry_%s( %ld ) (wrong id %ld on disk)\n",
rw ? "w" : "r", id, e->e_id );
entry_free( e );
return( NULL );
}
e->e_id = id;
if ( bdb2i_cache_add_entry_rw( &li->li_cache, e, rw ) != 0 ) {
entry_free( e );

View File

@ -139,12 +139,13 @@ bdb2i_idl_fetch(
tmp = (ID_BLOCK **) ch_malloc( (i + 1) * sizeof(ID_BLOCK *) );
/* read in all the blocks */
kstr = (char *) ch_malloc( key.dsize + 20 );
kstr = (char *) ch_malloc( key.dsize + CONT_SIZE );
nids = 0;
for ( i = 0; !ID_BLOCK_NOID(idl, i); i++ ) {
ldbm_datum_init( data );
sprintf( kstr, "%c%s%ld", CONT_PREFIX, key.dptr, ID_BLOCK_ID(idl, i) );
sprintf( kstr, "%c%ld%s", CONT_PREFIX,
ID_BLOCK_ID(idl, i), key.dptr );
data.dptr = kstr;
data.dsize = strlen( kstr ) + 1;
@ -298,7 +299,8 @@ idl_change_first(
}
/* write block with new key */
sprintf( bkey.dptr, "%c%s%ld", CONT_PREFIX, hkey.dptr, ID_BLOCK_ID(b, 0) );
sprintf( bkey.dptr, "%c%ld%s", CONT_PREFIX,
ID_BLOCK_ID(b, 0), hkey.dptr );
bkey.dsize = strlen( bkey.dptr ) + 1;
if ( (rc = idl_store( be, db, bkey, b )) != 0 ) {
Debug( LDAP_DEBUG_ANY,
@ -389,16 +391,16 @@ bdb2i_idl_insert_key(
rc = idl_store( be, db, key, idl );
/* store the first id block */
kstr = (char *) ch_malloc( key.dsize + 20 );
sprintf( kstr, "%c%s%ld", CONT_PREFIX, key.dptr,
ID_BLOCK_ID(tmp, 0) );
kstr = (char *) ch_malloc( key.dsize + CONT_SIZE );
sprintf( kstr, "%c%ld%s", CONT_PREFIX,
ID_BLOCK_ID(tmp, 0), key.dptr );
k2.dptr = kstr;
k2.dsize = strlen( kstr ) + 1;
rc = idl_store( be, db, k2, tmp );
/* store the second id block */
sprintf( kstr, "%c%s%ld", CONT_PREFIX, key.dptr,
ID_BLOCK_ID(tmp2, 0) );
sprintf( kstr, "%c%ld%s", CONT_PREFIX,
ID_BLOCK_ID(tmp2, 0), key.dptr );
k2.dptr = kstr;
k2.dsize = strlen( kstr ) + 1;
rc = idl_store( be, db, k2, tmp2 );
@ -432,8 +434,9 @@ bdb2i_idl_insert_key(
}
/* get the block */
kstr = (char *) ch_malloc( key.dsize + 20 );
sprintf( kstr, "%c%s%ld", CONT_PREFIX, key.dptr, ID_BLOCK_ID(idl, i) );
kstr = (char *) ch_malloc( key.dsize + CONT_SIZE );
sprintf( kstr, "%c%ld%s", CONT_PREFIX,
ID_BLOCK_ID(idl, i), key.dptr );
k2.dptr = kstr;
k2.dsize = strlen( kstr ) + 1;
if ( (tmp = idl_fetch_one( be, db, k2 )) == NULL ) {
@ -477,8 +480,8 @@ bdb2i_idl_insert_key(
/* is there a next block? */
if ( !first && !ID_BLOCK_NOID(idl, i + 1) ) {
/* read it in */
sprintf( kstr, "%c%s%ld", CONT_PREFIX, key.dptr,
ID_BLOCK_ID(idl, i + 1) );
sprintf( kstr, "%c%ld%s", CONT_PREFIX,
ID_BLOCK_ID(idl, i + 1), key.dptr );
k2.dptr = kstr;
k2.dsize = strlen( kstr ) + 1;
if ( (tmp2 = idl_fetch_one( be, db, k2 )) == NULL ) {
@ -535,8 +538,8 @@ bdb2i_idl_insert_key(
/* delete all indirect blocks */
for ( j = 0; !ID_BLOCK_NOID(idl, j); j++ ) {
sprintf( kstr, "%c%s%ld", CONT_PREFIX, key.dptr,
ID_BLOCK_ID(idl, j) );
sprintf( kstr, "%c%ld%s", CONT_PREFIX,
ID_BLOCK_ID(idl, j), key.dptr );
k2.dptr = kstr;
k2.dsize = strlen( kstr ) + 1;
@ -578,15 +581,15 @@ bdb2i_idl_insert_key(
rc = idl_store( be, db, key, tmp );
/* store the first id block */
sprintf( kstr, "%c%s%ld", CONT_PREFIX, key.dptr,
ID_BLOCK_ID(tmp2, 0) );
sprintf( kstr, "%c%ld%s", CONT_PREFIX,
ID_BLOCK_ID(tmp2, 0), key.dptr );
k2.dptr = kstr;
k2.dsize = strlen( kstr ) + 1;
rc = idl_store( be, db, k2, tmp2 );
/* store the second id block */
sprintf( kstr, "%c%s%ld", CONT_PREFIX, key.dptr,
ID_BLOCK_ID(tmp3, 0) );
sprintf( kstr, "%c%ld%s", CONT_PREFIX,
ID_BLOCK_ID(tmp3, 0), key.dptr );
k2.dptr = kstr;
k2.dsize = strlen( kstr ) + 1;
rc = idl_store( be, db, k2, tmp3 );
@ -715,11 +718,11 @@ bdb2i_idl_delete_key (
*/
for ( nids = 0; !ID_BLOCK_NOID(idl, nids); nids++ )
; /* NULL */
kstr = (char *) ch_malloc( key.dsize + 20 );
kstr = (char *) ch_malloc( key.dsize + CONT_SIZE );
for ( j = 0; !ID_BLOCK_NOID(idl, j); j++ )
{
ldbm_datum_init( data );
sprintf( kstr, "%c%s%ld", CONT_PREFIX, key.dptr, ID_BLOCK_ID(idl, j) );
sprintf( kstr, "%c%ld%s", CONT_PREFIX, ID_BLOCK_ID(idl, j), key.dptr );
data.dptr = kstr;
data.dsize = strlen( kstr ) + 1;

View File

@ -108,8 +108,8 @@ bdb2i_index_read(
ldbm_datum_init( key );
prefix = index2prefix( indextype );
Debug( LDAP_DEBUG_TRACE, "=> bdb2i_index_read( \"%s\" \"%c\" \"%s\" )\n",
type, prefix, val );
Debug( LDAP_DEBUG_TRACE, "=> bdb2i_index_read( \"%c%s\" -> \"%s\" )\n",
prefix, type, val );
bdb2i_attr_masks( be->be_private, type, &indexmask, &syntax );
if ( ! (indextype & indexmask) ) {
@ -143,6 +143,7 @@ bdb2i_index_read(
tmpval = (char *) ch_malloc( len + 2 );
realval = tmpval;
}
realval[0] = prefix;
strcpy( &realval[1], val );
}
@ -238,8 +239,8 @@ bdb2i_index_add_values(
return 0;
}
Debug( LDAP_DEBUG_TRACE, "=> bdb2i_index_add_values( \"%s\", %ld )\n", type,
id, 0 );
Debug( LDAP_DEBUG_TRACE, "=> bdb2i_index_add_values( \"%s\", %ld )\n",
type, id, 0 );
attr_normalize( type );
bdb2i_attr_masks( be->be_private, type, &indexmask, &syntax );
if ( indexmask == 0 ) {

View File

@ -38,7 +38,7 @@ bdb2i_back_init_private(
bt->lty_dbhome = DEFAULT_DB_HOME;
bt->lty_mpsize = DEFAULT_DBCACHE_SIZE;
if ( slapMode == SLAP_TIMEDSERVER_MODE )
if ( slapMode & SLAP_TIMED_MODE )
bt->lty_betiming = 1;
bi->bi_private = bt;
@ -78,6 +78,19 @@ bdb2_back_initialize(
bi->bi_entry_release_rw = bdb2_back_entry_release_rw;
bi->bi_acl_group = bdb2_back_group;
/*
* hooks for slap tools
*/
bi->bi_tool_entry_open = bdb2_tool_entry_open;
bi->bi_tool_entry_close = bdb2_tool_entry_close;
bi->bi_tool_entry_first = bdb2_tool_entry_first;
bi->bi_tool_entry_next = bdb2_tool_entry_next;
bi->bi_tool_entry_get = bdb2_tool_entry_get;
bi->bi_tool_entry_put = bdb2_tool_entry_put;
bi->bi_tool_index_attr = bdb2_tool_index_attr;
bi->bi_tool_index_change = bdb2_tool_index_change;
bi->bi_tool_sync = bdb2_tool_sync;
bi->bi_connection_init = 0;
bi->bi_connection_destroy = 0;
@ -164,27 +177,11 @@ bdb2i_back_db_init_internal(
/* default database directory */
li->li_directory = DEFAULT_DB_DIRECTORY;
/* always index dn, id2children, objectclass (used in some searches) */
if ( !at_find( "dn" ) ) {
argv[ 0 ] = "dn";
argv[ 1 ] = "dn";
argv[ 2 ] = NULL;
attr_syntax_config( "ldbm dn initialization", 0, 2, argv );
}
argv[ 0 ] = "dn";
argv[ 1 ] = "eq,sub";
argv[ 2 ] = NULL;
bdb2i_attr_index_config( li, "ldbm dn initialization", 0, 2, argv, 1 );
argv[ 0 ] = "id2children";
argv[ 1 ] = "eq";
argv[ 2 ] = NULL;
bdb2i_attr_index_config( li, "ldbm id2children initialization", 0, 2, argv,
1 );
argv[ 0 ] = "objectclass";
argv[ 1 ] = "pres,eq";
argv[ 2 ] = NULL;
bdb2i_attr_index_config( li, "ldbm objectclass initialization", 0, 2, argv,
1 );
bdb2i_attr_index_config( li, "ldbm objectclass initialization",
0, 2, argv, 1 );
/* initialize the cache mutex */
ldap_pvt_thread_mutex_init( &li->li_cache.c_mutex );

View File

@ -145,11 +145,9 @@ bdb2_back_modify(
/* check, if a new default attribute index will be created,
in which case we have to open the index file BEFORE TP */
switch ( slapMode ) {
switch ( slapMode & SLAP_MODE ) {
case SLAP_SERVER_MODE:
case SLAP_TIMEDSERVER_MODE:
case SLAP_TOOL_MODE:
case SLAP_TOOLID_MODE:
bdb2i_check_default_attr_index_mod( li, modlist );
break;
}
@ -314,7 +312,7 @@ bdb2i_replace_values(
{
(void) attr_delete( &e->e_attrs, mod->mod_type );
if ( mod->bvalues != NULL &&
if ( mod->mod_bvalues != NULL &&
attr_merge( e, mod->mod_type, mod->mod_bvalues ) != 0 )
{
return( LDAP_CONSTRAINT_VIOLATION );

View File

@ -26,9 +26,6 @@ bdb2i_next_id_save( BackendDB *be )
int rc;
rc = next_id_write( be, id );
if (rc == 0) {
li->li_nextid_wrote = id;
}
return rc;
}
@ -46,44 +43,15 @@ bdb2i_next_id( BackendDB *be )
if ( li->li_nextid == NOID ) {
li->li_nextid = 1;
}
#if SLAPD_NEXTID_CHUNK > 1
li->li_nextid_wrote = li->li_nextid;
#endif
}
id = li->li_nextid++;
#if SLAPD_NEXTID_CHUNK > 1
if ( li->li_nextid > li->li_nextid_wrote ) {
li->li_nextid_wrote += SLAPD_NEXTID_CHUNK;
(void) next_id_write( be, li->li_nextid_wrote );
}
#else
(void) next_id_write( be, li->li_nextid );
#endif
return( id );
}
void
bdb2i_next_id_return( BackendDB *be, ID id )
{
#ifdef SLAPD_NEXTID_RETURN
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
if ( id != li->li_nextid - 1 ) {
return;
}
li->li_nextid--;
#if !( SLAPD_NEXTID_CHUNK > 1 )
(void) next_id_write( be, li->li_nextid );
#endif
#endif
}
ID
bdb2i_next_id_get( BackendDB *be )
{
@ -97,10 +65,6 @@ bdb2i_next_id_get( BackendDB *be )
if ( li->li_nextid == NOID ) {
li->li_nextid = 1;
}
#if SLAPD_NEXTID_CHUNK > 1
li->li_nextid_wrote = li->li_nextid;
#endif
}
id = li->li_nextid;

View File

@ -21,12 +21,10 @@ bdb2i_enter_backend_rw( DB_LOCK *lock, int writer )
DBT lock_dbt;
int ret = 0;
switch ( slapMode ) {
switch ( slapMode & SLAP_MODE ) {
case SLAP_SERVER_MODE:
case SLAP_TIMEDSERVER_MODE:
case SLAP_TOOL_MODE:
case SLAP_TOOLID_MODE:
if ( ( ret = lock_id( bdb2i_dbEnv.lk_info, &locker )) != 0 ) {
Debug( LDAP_DEBUG_ANY,
@ -103,12 +101,10 @@ bdb2i_leave_backend_rw( DB_LOCK lock, int writer )
ret_transaction |= bdb2i_set_txn_checkpoint( bdb2i_dbEnv.tx_info, 0 );
/* now release the lock */
switch ( slapMode ) {
switch ( slapMode & SLAP_MODE ) {
case SLAP_SERVER_MODE:
case SLAP_TIMEDSERVER_MODE:
case SLAP_TOOL_MODE:
case SLAP_TOOLID_MODE:
switch( ( ret_lock = lock_put( bdb2i_dbEnv.lk_info, lock ))) {
case 0:

View File

@ -77,6 +77,12 @@ int bdb2i_dn2id_add LDAP_P(( BackendDB *be, char *dn, ID id ));
ID bdb2i_dn2id LDAP_P(( BackendDB *be, char *dn ));
int bdb2i_dn2id_delete LDAP_P(( BackendDB *be, char *dn ));
ID_BLOCK *
bdb2i_dn2idl LDAP_P((
BackendDB *be,
char *dn,
int prefix ));
Entry * bdb2i_dn2entry_rw LDAP_P((
BackendDB *be,
char *dn,
@ -101,8 +107,6 @@ ID_BLOCK * bdb2i_filter_candidates LDAP_P(( BackendDB *be, Filter *f ));
* id2children.c
*/
int bdb2i_id2children_add LDAP_P(( BackendDB *be, Entry *p, Entry *e ));
int bdb2i_id2children_remove LDAP_P(( BackendDB *be, Entry *p, Entry *e ));
int bdb2i_has_children LDAP_P(( BackendDB *be, Entry *p ));
/*

View File

@ -437,28 +437,20 @@ search_candidates(
lf->f_choice = LDAP_FILTER_AND;
lf->f_and = (Filter *) ch_malloc( sizeof(Filter) );
lf->f_and->f_choice = LDAP_FILTER_SUBSTRINGS;
lf->f_and->f_sub_type = ch_strdup( "dn" );
lf->f_and->f_sub_initial = NULL;
lf->f_and->f_sub_any = NULL;
lf->f_and->f_sub_final = ch_strdup( e->e_ndn );
lf->f_and->f_choice = SLAPD_FILTER_DN_SUBTREE;
lf->f_and->f_dn = e->e_ndn;
lf->f_and->f_next = f;
f = lf;
} else if ( scope == LDAP_SCOPE_ONELEVEL ) {
char buf[16];
lf = (Filter *) ch_malloc( sizeof(Filter) );
lf->f_next = NULL;
lf->f_choice = LDAP_FILTER_AND;
lf->f_and = (Filter *) ch_malloc( sizeof(Filter) );
lf->f_and->f_choice = LDAP_FILTER_EQUALITY;
lf->f_and->f_ava.ava_type = ch_strdup( "id2children" );
sprintf( buf, "%ld", e != NULL ? e->e_id : 0 );
lf->f_and->f_ava.ava_value.bv_val = ch_strdup( buf );
lf->f_and->f_ava.ava_value.bv_len = strlen( buf );
lf->f_and->f_choice = SLAPD_FILTER_DN_ONE;
lf->f_and->f_dn = e->e_ndn;
lf->f_and->f_next = f;
f = lf;
@ -471,8 +463,8 @@ search_candidates(
/* free up filter additions we allocated above */
if( lf != NULL ) {
lf->f_and->f_next = NULL;
filter_free( lf );
free( lf->f_and );
free( lf );
}
if( af != NULL ) {

View File

@ -0,0 +1,248 @@
/* tools.c - tools for slap tools */
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
#include "portable.h"
#include <stdio.h>
#include <ac/socket.h>
#include "slap.h"
#include "back-bdb2.h"
static LDBMCursor *cursorp = NULL;
static DBCache *id2entry = NULL;
int bdb2_tool_entry_open(
BackendDB *be, int mode )
{
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
int flags;
assert( slapMode & SLAP_TOOL_MODE );
assert( id2entry == NULL );
switch( mode ) {
case 1:
flags = LDBM_WRCREAT;
break;
case 2:
#ifdef TRUNCATE_MODE
flags = LDBM_NEWDB;
#else
flags = LDBM_WRCREAT;
#endif
break;
default:
flags = LDBM_READER;
}
li->li_dbcachewsync = 0;
if ( (id2entry = bdb2i_cache_open( be, "id2entry", BDB2_SUFFIX, flags ))
== NULL ) {
Debug( LDAP_DEBUG_ANY, "Could not open/create id2entry" BDB2_SUFFIX "\n",
0, 0, 0 );
return( -1 );
}
return 0;
}
int bdb2_tool_entry_close(
BackendDB *be )
{
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
assert( slapMode & SLAP_TOOL_MODE );
assert( id2entry != NULL );
bdb2i_cache_close( be, id2entry );
li->li_dbcachewsync = 1;
id2entry = NULL;
return 0;
}
ID bdb2_tool_entry_first(
BackendDB *be )
{
Datum key;
ID id;
assert( slapMode & SLAP_TOOL_MODE );
assert( id2entry != NULL );
key = ldbm_firstkey( id2entry->dbc_db, &cursorp );
if( key.dptr == NULL ) {
return NOID;
}
memcpy( &id, key.dptr, key.dsize );
ldbm_datum_free( id2entry->dbc_db, key );
return id;
}
ID bdb2_tool_entry_next(
BackendDB *be )
{
Datum key;
ID id;
int count;
assert( slapMode & SLAP_TOOL_MODE );
assert( id2entry != NULL );
/* allow for NEXTID */
ldbm_datum_init( key );
key = ldbm_nextkey( id2entry->dbc_db, key, cursorp );
if( key.dptr == NULL ) {
return NOID;
}
memcpy( &id, key.dptr, key.dsize );
ldbm_datum_free( id2entry->dbc_db, key );
return id;
}
Entry* bdb2_tool_entry_get( BackendDB *be, ID id )
{
Entry *e;
Datum key, data;
assert( slapMode & SLAP_TOOL_MODE );
assert( id2entry != NULL );
ldbm_datum_init( key );
key.dptr = (char *) &id;
key.dsize = sizeof(ID);
data = bdb2i_cache_fetch( id2entry, key );
if ( data.dptr == NULL ) {
return NULL;
}
e = str2entry( data.dptr );
ldbm_datum_free( id2entry->dbc_db, data );
return e;
}
ID bdb2_tool_entry_put(
BackendDB *be,
Entry *e )
{
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
Datum key, data;
int rc, len;
assert( slapMode & SLAP_TOOL_MODE );
assert( id2entry != NULL );
if( bdb2i_next_id_get( be ) == NOID ) {
return NOID;
}
e->e_id = li->li_nextid++;
Debug( LDAP_DEBUG_TRACE, "=> bdb2_tool_entry_put( %ld, \"%s\" )\n",
e->e_id, e->e_dn, 0 );
rc = bdb2i_index_add_entry( be, e );
if( rc != 0 ) {
return NOID;
}
rc = bdb2i_dn2id_add( be, e->e_ndn, e->e_id );
if( rc != 0 ) {
return NOID;
}
ldbm_datum_init( key );
ldbm_datum_init( data );
key.dptr = (char *) &e->e_id;
key.dsize = sizeof(ID);
data.dptr = entry2str( e, &len );
data.dsize = len + 1;
/* store it */
rc = bdb2i_cache_store( id2entry, key, data, LDBM_REPLACE );
if( rc != 0 ) {
(void) bdb2i_dn2id_delete( be, e->e_ndn );
return NOID;
}
return e->e_id;
}
int bdb2_tool_index_attr(
BackendDB *be,
char* type )
{
static DBCache *db = NULL;
int indexmask, syntaxmask;
char * at_cn;
assert( slapMode & SLAP_TOOL_MODE );
bdb2i_attr_masks( be->be_private, type, &indexmask, &syntaxmask );
attr_normalize( type );
at_cn = at_canonical_name( type );
if ( (db = bdb2i_cache_open( be, at_cn, LDBM_SUFFIX, LDBM_NEWDB ))
== NULL ) {
Debug( LDAP_DEBUG_ANY,
"<= index_read NULL (could not open %s%s)\n", at_cn,
BDB2_SUFFIX, 0 );
return( NULL );
}
bdb2i_cache_close( be, db );
return indexmask != 0;
}
int bdb2_tool_index_change(
BackendDB *be,
char* type,
struct berval **bv,
ID id,
int op )
{
assert( slapMode & SLAP_TOOL_MODE );
bdb2i_index_add_values( be,
type, bv, id );
return 0;
}
int bdb2_tool_sync( BackendDB *be )
{
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
assert( slapMode & SLAP_TOOL_MODE );
if ( li->li_nextid != NOID ) {
bdb2i_next_id_save( be );
}
return 0;
}

View File

@ -7,6 +7,14 @@
#endif
#include "txn.h"
/* default DB files */
char *bdb2i_fixed_filenames[] = {
"id2entry",
"dn2id",
"objectclass",
NULL
};
int
bdb2i_txn_head_init( BDB2_TXN_HEAD *head )
@ -17,20 +25,19 @@ bdb2i_txn_head_init( BDB2_TXN_HEAD *head )
/* for each fixed DB file allocate a file descriptor node and
initialize the file's name */
fileNodeH = &head->dbFiles;
for ( dbFile = BDB2_DB_DN_FILE; dbFile <= BDB2_DB_OC_IDX_FILE; dbFile++ ) {
for ( dbFile = 0; bdb2i_fixed_filenames[dbFile] != NULL; dbFile++ ) {
char fileName[MAXPATHLEN];
*fileNodeH = (BDB2_TXN_FILES *) ch_calloc( 1, sizeof( BDB2_TXN_FILES ));
if ( *fileNodeH == NULL ) {
if ( *fileNodeH == NULL ) {
Debug( LDAP_DEBUG_ANY, "bdb2i_txn_head_init(): out of memory!\n",
0, 0, 0 );
return( 1 );
}
sprintf( fileName, "%s%s", bdb2i_fixed_filenames[dbFile], BDB2_SUFFIX );
sprintf( fileName, "%s" BDB2_SUFFIX, bdb2i_fixed_filenames[dbFile] );
(*fileNodeH)->dbc_name = ch_strdup( fileName );
fileNodeH = &(*fileNodeH)->next;

View File

@ -46,13 +46,6 @@ ldap_pvt_thread_mutex_t txn_dirty_mutex;
#define NEXTID_RECNO (db_recno_t) 1
/* default DB files */
char *bdb2i_fixed_filenames[] = {
"dn", "dn2id", "id2entry", "id2children", "objectclass"
};
#endif /* _BDB2_TXN_H_ */

View File

@ -1,11 +1,11 @@
SRCS = idl.c add.c search.c cache.c dbcache.c dn2id.c entry.c id2entry.c \
SRCS = idl.c add.c search.c cache.c dbcache.c dn2id.c entry.c id2entry.c \
index.c id2children.c nextid.c abandon.c compare.c group.c \
modify.c modrdn.c delete.c init.c config.c bind.c attr.c \
filterindex.c unbind.c kerberos.c close.c alias.c
OBJS = idl.lo add.lo search.lo cache.lo dbcache.lo dn2id.lo entry.lo id2entry.lo \
filterindex.c unbind.c kerberos.c close.c alias.c tools.c
OBJS = idl.lo add.lo search.lo cache.lo dbcache.lo dn2id.lo entry.lo id2entry.lo \
index.lo id2children.lo nextid.lo abandon.lo compare.lo group.lo \
modify.lo modrdn.lo delete.lo init.lo config.lo bind.lo attr.lo \
filterindex.lo unbind.lo kerberos.lo close.lo alias.lo
filterindex.lo unbind.lo kerberos.lo close.lo alias.lo tools.lo
LDAP_INCDIR= ../../../include
LDAP_LIBDIR= ../../../libraries

View File

@ -211,9 +211,6 @@ ldbm_back_add(
Debug( LDAP_DEBUG_ANY, "cache_add_entry_lock failed\n", 0, 0,
0 );
/* return the id */
next_id_return( be, e->e_id );
/* free the entry */
entry_free( e );
@ -226,20 +223,6 @@ ldbm_back_add(
rc = -1;
#ifndef DN_INDICES
/*
* add it to the id2children index for the parent
*/
if ( id2children_add( be, p, e ) != 0 ) {
Debug( LDAP_DEBUG_TRACE, "id2children_add failed\n", 0,
0, 0 );
send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR,
NULL, NULL, NULL, NULL );
goto return_results;
}
#endif
/*
* Add the entry to the attribute indexes, then add it to
* the id2children index, dn2id index, and the id2entry index.

View File

@ -24,7 +24,6 @@ LDAP_BEGIN_DECL
#define SUBLEN 3
/* #undef DN_INDICES *//* generate dn eq, subtree, and parent indices */
#define DN_BASE_PREFIX '='
#define DN_ONE_PREFIX '@'
#define DN_SUBTREE_PREFIX '?'
@ -44,8 +43,6 @@ LDAP_BEGIN_DECL
/* allow 3 characters per byte + PREFIX + EOS */
#define CONT_SIZE ( sizeof(long)*3 + 1 + 1 )
/* #undef CONT_POSTFIX *//* postfix original key */
#define UNKNOWN_PREFIX '?' /* prefix for unknown keys */
#define DEFAULT_BLOCKSIZE 8192
@ -131,20 +128,11 @@ typedef struct ldbm_attrinfo {
#define MAXDBCACHE 16
/* this could be made an option */
#ifndef SLAPD_NEXTID_CHUNK
#define SLAPD_NEXTID_CHUNK 32
#endif
struct ldbminfo {
ID li_nextid;
#if SLAPD_NEXTID_CHUNK > 1
ID li_nextid_wrote;
#endif
char *li_nextid_file;
ldap_pvt_thread_mutex_t li_nextid_mutex;
ldap_pvt_thread_mutex_t li_root_mutex;
ldap_pvt_thread_mutex_t li_add_mutex;
ldap_pvt_thread_mutex_t li_nextid_mutex;
int li_mode;
char *li_directory;
Cache li_cache;

View File

@ -240,6 +240,10 @@ SOURCE=.\startup.c
# End Source File
# Begin Source File
SOURCE=.\tools.c
# End Source File
# Begin Source File
SOURCE=.\unbind.c
# End Source File
# End Target

View File

@ -16,11 +16,6 @@
int
ldbm_back_db_close( Backend *be )
{
Debug( LDAP_DEBUG_TRACE, "ldbm backend saving nextid\n", 0, 0, 0 );
if ( next_id_save( be ) < 0 ) {
Debug( LDAP_DEBUG_ANY, "ldbm backend nextid save failed!\n", 0, 0, 0 );
}
Debug( LDAP_DEBUG_TRACE, "ldbm backend syncing\n", 0, 0, 0 );
ldbm_cache_flush_all( be );
Debug( LDAP_DEBUG_TRACE, "ldbm backend done syncing\n", 0, 0, 0 );

View File

@ -44,14 +44,6 @@ ldbm_back_db_config(
free( li->li_directory );
li->li_directory = ch_strdup( argv[1] );
if ( li->li_nextid_file )
free( li->li_nextid_file );
li->li_nextid_file =
ch_malloc( strlen(li->li_directory) + sizeof("/NEXTID") + 1 );
strcpy(li->li_nextid_file, li->li_directory);
strcat(li->li_nextid_file, "/NEXTID");
/* mode with which to create new database files */
} else if ( strcasecmp( argv[0], "mode" ) == 0 ) {
if ( argc < 2 ) {

View File

@ -121,11 +121,6 @@ ldbm_cache_open(
li->li_dbcache[i].dbc_maxindirect = (SLAPD_LDBM_MIN_MAXIDS /
li->li_dbcache[i].dbc_maxids) + 1;
#ifndef CONT_POSTFIX
/* don't let maxindirect exceed 9 */
li->li_dbcache[i].dbc_maxindirect %= 10;
#endif
Debug( LDAP_DEBUG_ARGS,
"ldbm_cache_open (blksize %ld) (maxids %d) (maxindirect %d)\n",
li->li_dbcache[i].dbc_blksize, li->li_dbcache[i].dbc_maxids,
@ -203,9 +198,7 @@ ldbm_cache_fetch(
{
Datum data;
ldbm_datum_init( data );
data = ldbm_fetch( db->dbc_db, key );
return ldbm_fetch( db->dbc_db, key );
return( data );
}

View File

@ -140,17 +140,6 @@ ldbm_back_delete(
rootlock = 1;
}
#ifndef DN_INDICES
if ( id2children_remove( be, p, e ) != 0 ) {
Debug(LDAP_DEBUG_ARGS,
"<=- ldbm_back_delete: operations error %s\n",
dn, 0, 0);
send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR,
NULL, NULL, NULL, NULL );
goto return_results;
}
#endif
/* delete from dn2id mapping */
if ( dn2id_delete( be, e->e_ndn ) != 0 ) {
Debug(LDAP_DEBUG_ARGS,

View File

@ -27,9 +27,6 @@ dn2id_add(
Datum key, data;
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
ldbm_datum_init( key );
ldbm_datum_init( data );
Debug( LDAP_DEBUG_TRACE, "=> dn2id_add( \"%s\", %ld )\n", dn, id, 0 );
if ( (db = ldbm_cache_open( be, "dn2id", LDBM_SUFFIX, LDBM_WRCREAT ))
@ -39,15 +36,12 @@ dn2id_add(
return( -1 );
}
#ifndef DN_INDICES
key.dptr = dn;
key.dsize = strlen( key.dptr ) + 1;
#else
ldbm_datum_init( key );
key.dsize = strlen( dn ) + 2;
key.dptr = ch_malloc( key.dsize );
sprintf( key.dptr, "%c%s", DN_BASE_PREFIX, dn );
#endif
ldbm_datum_init( data );
data.dptr = (char *) &id;
data.dsize = sizeof(ID);
@ -56,13 +50,13 @@ dn2id_add(
rc = ldbm_cache_store( db, key, data, flags );
#ifdef DN_INDICES
free( key.dptr );
if ( rc != -1 ) {
char *pdn = dn_parent( NULL, dn );
if( pdn != NULL ) {
ldbm_datum_init( key );
key.dsize = strlen( pdn ) + 2;
key.dptr = ch_malloc( key.dsize );
sprintf( key.dptr, "%c%s", DN_ONE_PREFIX, pdn );
@ -77,6 +71,7 @@ dn2id_add(
if( subtree != NULL ) {
int i;
for( i=0; subtree[i] != NULL; i++ ) {
ldbm_datum_init( key );
key.dsize = strlen( subtree[i] ) + 2;
key.dptr = ch_malloc( key.dsize );
sprintf( key.dptr, "%c%s",
@ -93,7 +88,6 @@ dn2id_add(
}
}
#endif
ldbm_cache_close( be, db );
@ -112,9 +106,6 @@ dn2id(
ID id;
Datum key, data;
ldbm_datum_init( key );
ldbm_datum_init( data );
Debug( LDAP_DEBUG_TRACE, "=> dn2id( \"%s\" )\n", dn, 0, 0 );
/* first check the cache */
@ -131,22 +122,17 @@ dn2id(
return( NOID );
}
#ifndef DN_INDICES
key.dptr = dn;
key.dsize = strlen( key.dptr ) + 1;
#else
ldbm_datum_init( key );
key.dsize = strlen( dn ) + 2;
key.dptr = ch_malloc( key.dsize );
sprintf( key.dptr, "%c%s", DN_BASE_PREFIX, dn );
#endif
data = ldbm_cache_fetch( db, key );
ldbm_cache_close( be, db );
#ifdef DN_INDICES
free( key.dptr );
#endif
if ( data.dptr == NULL ) {
Debug( LDAP_DEBUG_TRACE, "<= dn2id NOID\n", 0, 0, 0 );
@ -161,7 +147,6 @@ dn2id(
return( id );
}
#ifdef DN_INDICES
ID_BLOCK *
dn2idl(
Backend *be,
@ -173,8 +158,6 @@ dn2idl(
Datum key;
ID_BLOCK *idl;
ldbm_datum_init( key );
Debug( LDAP_DEBUG_TRACE, "=> dn2idl( \"%c%s\" )\n", prefix, dn, 0 );
if ( (db = ldbm_cache_open( be, "dn2id", LDBM_SUFFIX, LDBM_WRCREAT ))
@ -184,6 +167,8 @@ dn2idl(
return NULL;
}
ldbm_datum_init( key );
key.dsize = strlen( dn ) + 2;
key.dptr = ch_malloc( key.dsize );
sprintf( key.dptr, "%c%s", prefix, dn );
@ -196,7 +181,7 @@ dn2idl(
return( idl );
}
#endif
int
dn2id_delete(
@ -208,8 +193,6 @@ dn2id_delete(
Datum key;
int rc;
ldbm_datum_init( key );
Debug( LDAP_DEBUG_TRACE, "=> dn2id_delete( \"%s\" )\n", dn, 0, 0 );
if ( (db = ldbm_cache_open( be, "dn2id", LDBM_SUFFIX, LDBM_WRCREAT ))
@ -220,20 +203,15 @@ dn2id_delete(
return( -1 );
}
#ifndef DN_INDICES
key.dptr = dn;
key.dsize = strlen( key.dptr ) + 1;
#else
ldbm_datum_init( key );
key.dsize = strlen( dn ) + 2;
key.dptr = ch_malloc( key.dsize );
sprintf( key.dptr, "%c%s", DN_BASE_PREFIX, dn );
#endif
rc = ldbm_cache_delete( db, key );
#ifdef DN_INDICES
free( key.dptr );
#endif
ldbm_cache_close( be, db );

View File

@ -60,6 +60,20 @@ extern int ldbm_back_group LDAP_P(( BackendDB *bd,
Entry *target, char* gr_ndn, char* op_ndn,
char* objectclassValue, char* groupattrName));
/* hooks for slap tools */
extern int ldbm_tool_entry_open LDAP_P(( BackendDB *be, int mode ));
extern int ldbm_tool_entry_close LDAP_P(( BackendDB *be ));
extern ID ldbm_tool_entry_first LDAP_P(( BackendDB *be ));
extern ID ldbm_tool_entry_next LDAP_P(( BackendDB *be ));
extern Entry* ldbm_tool_entry_get LDAP_P(( BackendDB *be, ID id ));
extern ID ldbm_tool_entry_put LDAP_P(( BackendDB *be, Entry *e ));
extern int ldbm_tool_index_attr LDAP_P(( BackendDB *be, char* type ));
extern int ldbm_tool_index_change LDAP_P(( BackendDB *be, char* type,
struct berval **bv, ID id, int op ));
extern int ldbm_tool_sync LDAP_P(( BackendDB *be ));
LDAP_END_DECL
#endif /* _LDBM_EXTERNAL_H */

View File

@ -40,7 +40,6 @@ filter_candidates(
result = NULL;
switch ( f->f_choice ) {
#ifdef DN_INDICES
case SLAPD_FILTER_DN_ONE:
Debug( LDAP_DEBUG_FILTER, "\tDN ONE\n", 0, 0, 0 );
result = dn2idl( be, f->f_dn, DN_ONE_PREFIX );
@ -50,7 +49,7 @@ filter_candidates(
Debug( LDAP_DEBUG_FILTER, "\tDN SUBTREE\n", 0, 0, 0 );
result = dn2idl( be, f->f_dn, DN_SUBTREE_PREFIX );
break;
#endif
case LDAP_FILTER_EQUALITY:
Debug( LDAP_DEBUG_FILTER, "\tEQUALITY\n", 0, 0, 0 );
result = ava_candidates( be, &f->f_ava, LDAP_FILTER_EQUALITY );

View File

@ -14,96 +14,6 @@
#include "slap.h"
#include "back-ldbm.h"
#ifndef DN_INDICES
int
id2children_add(
Backend *be,
Entry *p,
Entry *e
)
{
DBCache *db;
Datum key;
char buf[20];
ldbm_datum_init( key );
Debug( LDAP_DEBUG_TRACE, "=> id2children_add( %ld, %ld )\n",
p ? p->e_id : 0, e->e_id, 0 );
if ( (db = ldbm_cache_open( be, "id2children", LDBM_SUFFIX,
LDBM_WRCREAT )) == NULL ) {
Debug( LDAP_DEBUG_ANY,
"<= id2children_add -1 could not open \"id2children%s\"\n",
LDBM_SUFFIX, 0, 0 );
return( -1 );
}
sprintf( buf, "%c%ld", EQ_PREFIX, p ? p->e_id : 0 );
key.dptr = buf;
key.dsize = strlen( buf ) + 1;
if ( idl_insert_key( be, db, key, e->e_id ) != 0 ) {
Debug( LDAP_DEBUG_TRACE, "<= id2children_add -1 (idl_insert)\n",
0, 0, 0 );
ldbm_cache_close( be, db );
return( -1 );
}
ldbm_cache_close( be, db );
Debug( LDAP_DEBUG_TRACE, "<= id2children_add 0\n", 0, 0, 0 );
return( 0 );
}
int
id2children_remove(
Backend *be,
Entry *p,
Entry *e
)
{
DBCache *db;
Datum key;
char buf[20];
Debug( LDAP_DEBUG_TRACE, "=> id2children_remove( %ld, %ld )\n", p ? p->e_id
: 0, e->e_id, 0 );
if ( (db = ldbm_cache_open( be, "id2children", LDBM_SUFFIX,
LDBM_WRCREAT )) == NULL ) {
Debug( LDAP_DEBUG_ANY,
"<= id2children_remove -1 could not open \"id2children%s\"\n",
LDBM_SUFFIX, 0, 0 );
return( -1 );
}
ldbm_datum_init( key );
sprintf( buf, "%c%ld", EQ_PREFIX, p ? p->e_id : 0 );
key.dptr = buf;
key.dsize = strlen( buf ) + 1;
if ( idl_delete_key( be, db, key, e->e_id ) != 0 ) {
#if 0
Debug( LDAP_DEBUG_ANY,
"<= id2children_remove: idl_delete_key failure\n",
0, 0, 0 );
ldbm_cache_close( be, db );
return( -1 );
#else
Debug( LDAP_DEBUG_ANY,
"<= id2children_remove: ignoring idl_delete_key failure\n",
0, 0, 0 );
#endif
}
ldbm_cache_close( be, db );
Debug( LDAP_DEBUG_TRACE, "<= id2children_remove 0\n", 0, 0, 0 );
return( 0 );
}
#endif
int
has_children(
@ -115,28 +25,11 @@ has_children(
Datum key;
int rc = 0;
ID_BLOCK *idl;
#ifndef DN_INDICES
char buf[20];
#endif
ldbm_datum_init( key );
Debug( LDAP_DEBUG_TRACE, "=> has_children( %ld )\n", p->e_id , 0, 0 );
#ifndef DN_INDICES
if ( (db = ldbm_cache_open( be, "id2children", LDBM_SUFFIX,
LDBM_WRCREAT )) == NULL ) {
Debug( LDAP_DEBUG_ANY,
"<= has_children -1 could not open \"id2children%s\"\n",
LDBM_SUFFIX, 0, 0 );
return( 0 );
}
sprintf( buf, "%c%ld", EQ_PREFIX, p->e_id );
key.dptr = buf;
key.dsize = strlen( buf ) + 1;
#else
if ( (db = ldbm_cache_open( be, "dn2id", LDBM_SUFFIX,
LDBM_WRCREAT )) == NULL ) {
Debug( LDAP_DEBUG_ANY,
@ -148,10 +41,11 @@ has_children(
key.dsize = strlen( p->e_ndn ) + 2;
key.dptr = ch_malloc( key.dsize );
sprintf( key.dptr, "%c%s", DN_ONE_PREFIX, p->e_ndn );
#endif
idl = idl_fetch( be, db, key );
free( key.dptr );
ldbm_cache_close( be, db );
if( idl != NULL ) {

View File

@ -43,7 +43,7 @@ id2entry_add( Backend *be, Entry *e )
key.dsize = sizeof(ID);
ldap_pvt_thread_mutex_lock( &entry2str_mutex );
data.dptr = entry2str( e, &len, 1 );
data.dptr = entry2str( e, &len );
data.dsize = len + 1;
/* store it */
@ -144,7 +144,6 @@ id2entry_rw( Backend *be, ID id, int rw )
}
e = str2entry( data.dptr );
ldbm_datum_free( db->dbc_db, data );
ldbm_cache_close( be, db );
@ -154,12 +153,7 @@ id2entry_rw( Backend *be, ID id, int rw )
return( NULL );
}
if ( e->e_id != id ) {
Debug( LDAP_DEBUG_TRACE, "<= id2entry_%s( %ld ) (wrong id %ld on disk)\n",
rw ? "w" : "r", id, e->e_id );
entry_free( e );
return( NULL );
}
e->e_id = id;
if( cache_add_entry_rw( &li->li_cache, e, rw ) != 0 ) {
entry_free( e );

View File

@ -45,7 +45,6 @@ idl_allids( Backend *be )
return( idl );
}
/* Free an ID_BLOCK */
void
idl_free( ID_BLOCK *idl )
@ -72,8 +71,6 @@ idl_fetch_one(
Datum data;
ID_BLOCK *idl;
ldbm_datum_init( data );
/* Debug( LDAP_DEBUG_TRACE, "=> idl_fetch_one\n", 0, 0, 0 ); */
data = ldbm_cache_fetch( db, key );
@ -148,13 +145,9 @@ idl_fetch(
for ( i = 0; !ID_BLOCK_NOID(idl, i); i++ ) {
ldbm_datum_init( data );
#ifndef CONT_POSTFIX
sprintf( kstr, "%c%s%ld", CONT_PREFIX,
key.dptr, ID_BLOCK_ID(idl, i) );
#else
sprintf( kstr, "%c%ld%s", CONT_PREFIX,
ID_BLOCK_ID(idl, i), key.dptr );
#endif
data.dptr = kstr;
data.dsize = strlen( kstr ) + 1;
@ -307,13 +300,9 @@ idl_change_first(
}
/* write block with new key */
#ifdef CONT_POSTFIX
sprintf( bkey.dptr, "%c%s%ld", CONT_PREFIX,
hkey.dptr, ID_BLOCK_ID(b, 0) );
#else
sprintf( bkey.dptr, "%c%ld%s", CONT_PREFIX,
ID_BLOCK_ID(b, 0), hkey.dptr );
#endif
bkey.dsize = strlen( bkey.dptr ) + 1;
if ( (rc = idl_store( be, db, bkey, b )) != 0 ) {
Debug( LDAP_DEBUG_ANY,
@ -405,25 +394,16 @@ idl_insert_key(
/* store the first id block */
kstr = (char *) ch_malloc( key.dsize + CONT_SIZE );
#ifdef CONT_POSTFIX
sprintf( kstr, "%c%s%ld", CONT_PREFIX,
key.dptr, ID_BLOCK_ID(tmp, 0) );
#else
sprintf( kstr, "%c%ld%s", CONT_PREFIX,
ID_BLOCK_ID(tmp, 0), key.dptr );
#endif
k2.dptr = kstr;
k2.dsize = strlen( kstr ) + 1;
rc = idl_store( be, db, k2, tmp );
/* store the second id block */
#ifdef CONT_POSTFIX
sprintf( kstr, "%c%s%ld", CONT_PREFIX,
key.dptr, ID_BLOCK_ID(tmp2, 0) );
#else
sprintf( kstr, "%c%ld%s", CONT_PREFIX,
ID_BLOCK_ID(tmp2, 0), key.dptr );
#endif
k2.dptr = kstr;
k2.dsize = strlen( kstr ) + 1;
rc = idl_store( be, db, k2, tmp2 );
@ -458,13 +438,8 @@ idl_insert_key(
/* get the block */
kstr = (char *) ch_malloc( key.dsize + CONT_SIZE );
#ifdef CONT_POSTFIX
sprintf( kstr, "%c%s%ld", CONT_PREFIX,
key.dptr, ID_BLOCK_ID(idl, i) );
#else
sprintf( kstr, "%c%ld%s", CONT_PREFIX,
ID_BLOCK_ID(idl, i), key.dptr );
#endif
k2.dptr = kstr;
k2.dsize = strlen( kstr ) + 1;
if ( (tmp = idl_fetch_one( be, db, k2 )) == NULL ) {
@ -508,13 +483,8 @@ idl_insert_key(
/* is there a next block? */
if ( !first && !ID_BLOCK_NOID(idl, i + 1) ) {
/* read it in */
#ifdef CONT_POSTFIX
sprintf( kstr, "%c%s%ld", CONT_PREFIX,
key.dptr, ID_BLOCK_ID(idl, i + 1) );
#else
sprintf( kstr, "%c%ld%s", CONT_PREFIX,
ID_BLOCK_ID(idl, i + 1), key.dptr );
#endif
k2.dptr = kstr;
k2.dsize = strlen( kstr ) + 1;
if ( (tmp2 = idl_fetch_one( be, db, k2 )) == NULL ) {
@ -571,13 +541,8 @@ idl_insert_key(
/* delete all indirect blocks */
for ( j = 0; !ID_BLOCK_NOID(idl, j); j++ ) {
#ifdef CONT_POSTFIX
sprintf( kstr, "%c%s%ld", CONT_PREFIX,
key.dptr, ID_BLOCK_ID(idl, j) );
#else
sprintf( kstr, "%c%ld%s", CONT_PREFIX,
ID_BLOCK_ID(idl, j), key.dptr );
#endif
k2.dptr = kstr;
k2.dsize = strlen( kstr ) + 1;
@ -619,25 +584,15 @@ idl_insert_key(
rc = idl_store( be, db, key, tmp );
/* store the first id block */
#ifdef CONT_POSTFIX
sprintf( kstr, "%c%s%ld", CONT_PREFIX,
key.dptr, ID_BLOCK_ID(tmp2, 0) );
#else
sprintf( kstr, "%c%ld%s", CONT_PREFIX,
ID_BLOCK_ID(tmp2, 0), key.dptr );
#endif
k2.dptr = kstr;
k2.dsize = strlen( kstr ) + 1;
rc = idl_store( be, db, k2, tmp2 );
/* store the second id block */
#ifdef CONT_POSTFIX
sprintf( kstr, "%c%s%ld", CONT_PREFIX,
key.dptr, ID_BLOCK_ID(tmp3, 0) );
#else
sprintf( kstr, "%c%ld%s", CONT_PREFIX,
ID_BLOCK_ID(tmp3, 0), key.dptr );
#endif
k2.dptr = kstr;
k2.dsize = strlen( kstr ) + 1;
rc = idl_store( be, db, k2, tmp3 );
@ -771,13 +726,8 @@ idl_delete_key (
for ( j = 0; !ID_BLOCK_NOID(idl, j); j++ )
{
ldbm_datum_init( data );
#ifdef CONT_POSTFIX
sprintf( kstr, "%c%s%ld", CONT_PREFIX,
key.dptr, ID_BLOCK_ID(idl, j) );
#else
sprintf( kstr, "%c%ld%s", CONT_PREFIX,
ID_BLOCK_ID(idl, j), key.dptr );
#endif
data.dptr = kstr;
data.dsize = strlen( kstr ) + 1;

View File

@ -50,7 +50,7 @@ index_add_entry(
/* add the dn to the indexes */
{
char *dn = ch_strdup("dn");
index_change_values( be, dn, bvals, e->e_id, __INDEX_ADD_OP );
index_change_values( be, dn, bvals, e->e_id, SLAP_INDEX_ADD_OP );
free( dn );
}
@ -58,9 +58,8 @@ index_add_entry(
/* add each attribute to the indexes */
for ( ap = e->e_attrs; ap != NULL; ap = ap->a_next ) {
index_change_values( be, ap->a_type, ap->a_vals, e->e_id,
__INDEX_ADD_OP );
SLAP_INDEX_ADD_OP );
}
Debug( LDAP_DEBUG_TRACE, "<= index_add( %ld, \"%s\" ) 0\n", e->e_id,
@ -90,14 +89,14 @@ index_add_mods(
mod->mod_type,
mod->mod_bvalues,
id,
__INDEX_ADD_OP);
SLAP_INDEX_ADD_OP );
break;
case LDAP_MOD_DELETE:
rc = index_change_values( be,
mod->mod_type,
mod->mod_bvalues,
id,
__INDEX_DELETE_OP );
SLAP_INDEX_DELETE_OP );
break;
case LDAP_MOD_SOFTADD: /* SOFTADD means index was there */
rc = 0;
@ -159,17 +158,18 @@ index_read(
realval = val;
tmpval = NULL;
if ( prefix != UNKNOWN_PREFIX ) {
unsigned int len = strlen( val );
unsigned int len = strlen( val );
if ( (len + 2) < sizeof(buf) ) {
if ( (len + 2) < sizeof(buf) ) {
realval = buf;
} else {
/* value + prefix + null */
tmpval = (char *) ch_malloc( len + 2 );
realval = tmpval;
}
realval[0] = prefix;
strcpy( &realval[1], val );
realval[0] = prefix;
strcpy( &realval[1], val );
}
key.dptr = realval;
@ -272,16 +272,16 @@ index_change_values(
if( vals == NULL ) {
Debug( LDAP_DEBUG_TRACE,
"=> index_change_values( %s, NULL, %ld, op=%s )\n",
type, id, ((op == __INDEX_ADD_OP) ? "ADD" : "DELETE" ) );
type, id, ((op == SLAP_INDEX_ADD_OP) ? "ADD" : "DELETE" ) );
return 0;
}
Debug( LDAP_DEBUG_TRACE,
"=> index_change_values( \"%s\", %ld, op=%s )\n",
type, id, ((op == __INDEX_ADD_OP) ? "ADD" : "DELETE" ) );
type, id, ((op == SLAP_INDEX_ADD_OP) ? "ADD" : "DELETE" ) );
if (op == __INDEX_ADD_OP) {
if (op == SLAP_INDEX_ADD_OP) {
/* Add values */
@ -433,7 +433,7 @@ index_change_values(
return( 0 );
}/* int index_change_values() */
}
static int
index2prefix( int indextype )

View File

@ -58,6 +58,19 @@ ldbm_back_initialize(
bi->bi_entry_release_rw = ldbm_back_entry_release_rw;
bi->bi_acl_group = ldbm_back_group;
/*
* hooks for slap tools
*/
bi->bi_tool_entry_open = ldbm_tool_entry_open;
bi->bi_tool_entry_close = ldbm_tool_entry_close;
bi->bi_tool_entry_first = ldbm_tool_entry_first;
bi->bi_tool_entry_next = ldbm_tool_entry_next;
bi->bi_tool_entry_get = ldbm_tool_entry_get;
bi->bi_tool_entry_put = ldbm_tool_entry_put;
bi->bi_tool_index_attr = ldbm_tool_index_attr;
bi->bi_tool_index_change = ldbm_tool_index_change;
bi->bi_tool_sync = ldbm_tool_sync;
bi->bi_connection_init = 0;
bi->bi_connection_destroy = 0;
@ -110,10 +123,6 @@ ldbm_back_db_init(
/* arrange to read nextid later (on first request for it) */
li->li_nextid = NOID;
#if SLAPD_NEXTID_CHUNK > 1
li->li_nextid_wrote = NOID;
#endif
/* default cache size */
li->li_cache.c_maxsize = DEFAULT_CACHE_SIZE;
@ -129,29 +138,11 @@ ldbm_back_db_init(
/* default database directory */
li->li_directory = ch_strdup( DEFAULT_DB_DIRECTORY );
#ifndef DN_INDICES
/* always index dn, id2children, objectclass (used in some searches) */
if ( !at_find( "dn" ) ) {
argv[ 0 ] = "dn";
argv[ 1 ] = "dn";
argv[ 2 ] = NULL;
attr_syntax_config( "ldbm dn initialization", 0, 2, argv );
}
argv[ 0 ] = "dn";
argv[ 1 ] = "eq,sub";
argv[ 2 ] = NULL;
attr_index_config( li, "ldbm dn initialization", 0, 2, argv, 1 );
argv[ 0 ] = "id2children";
argv[ 1 ] = "eq";
argv[ 2 ] = NULL;
attr_index_config( li, "ldbm id2children initialization", 0, 2, argv,
1 );
#endif
argv[ 0 ] = "objectclass";
argv[ 1 ] = "pres,eq";
argv[ 2 ] = NULL;
attr_index_config( li, "ldbm objectclass initialization", 0, 2, argv,
1 );
attr_index_config( li, "ldbm objectclass initialization",
0, 2, argv, 1 );
/* initialize various mutex locks & condition variables */
ldap_pvt_thread_mutex_init( &li->li_root_mutex );

View File

@ -134,7 +134,7 @@ int ldbm_modify_internal(
mod->mod_type,
a->a_vals,
e->e_id,
__INDEX_DELETE_OP);
SLAP_INDEX_DELETE_OP);
}
}
}

View File

@ -1,4 +1,4 @@
/* id.c - keep track of the next id to be given out */
/* nextid.c - keep track of the next id to be given out */
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
@ -17,188 +17,112 @@
#include "slap.h"
#include "back-ldbm.h"
/* All functions except put_nextid() obey slapMode == SLAP_TOOL_MODE. */
static ID next_id_read( Backend *be );
static ID next_id_get_save( Backend *be, int do_save );
#define next_id_write( be, id ) \
(slapMode == SLAP_TOOL_MODE ? (be, id, 0) : put_nextid( be, id ))
static ID
next_id_read( Backend *be )
{
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
ID id;
char buf[20];
char* file = li->li_nextid_file;
FILE* fp;
ID id = NOID;
Datum key, data;
DBCache *db;
if ( slapMode == SLAP_TOOL_MODE )
return NOID;
if ( (fp = fopen( file, "r" )) == NULL ) {
Debug( LDAP_DEBUG_ANY,
"next_id_read: could not open \"%s\"\n",
file, 0, 0 );
return NOID;
if ( (db = ldbm_cache_open( be, "nextid", LDBM_SUFFIX, LDBM_WRCREAT ))
== NULL ) {
Debug( LDAP_DEBUG_ANY, "Could not open/create nextid" LDBM_SUFFIX "\n",
0, 0, 0 );
return( NOID );
}
if ( fgets( buf, sizeof(buf), fp ) == NULL ) {
Debug( LDAP_DEBUG_ANY,
"next_id_read: could not fgets nextid from \"%s\"\n",
file, 0, 0 );
fclose( fp );
return NOID;
}
id = atol( buf );
fclose( fp );
if(id < 1) {
Debug( LDAP_DEBUG_ANY,
"next_id_read %ld: atol(%s) return non-positive integer\n",
id, buf, 0 );
return NOID;
ldbm_datum_init( key );
key.dptr = (char *) &id;
key.dsize = sizeof(ID);
data = ldbm_cache_fetch( db, key );
if( data.dptr != NULL ) {
memcpy( &id, data.dptr, sizeof( ID ) );
ldbm_datum_free( db->dbc_db, data );
} else {
id = 1;
}
ldbm_cache_close( be, db );
return id;
}
int
put_nextid( Backend *be, ID id )
ID
next_id_write( Backend *be, ID id )
{
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
char* file = li->li_nextid_file;
FILE* fp;
int rc;
Datum key, data;
DBCache *db;
ID noid = NOID;
int flags;
if ( (fp = fopen( file, "w" )) == NULL ) {
Debug( LDAP_DEBUG_ANY, "put_nextid(%ld): could not open \"%s\"\n",
id, file, 0 );
return -1;
}
rc = 0;
if ( fprintf( fp, "%ld\n", id ) == EOF ) {
Debug( LDAP_DEBUG_ANY, "put_nextid(%ld): cannot fprintf\n",
id, 0, 0 );
rc = -1;
if ( (db = ldbm_cache_open( be, "nextid", LDBM_SUFFIX, LDBM_WRCREAT ))
== NULL ) {
Debug( LDAP_DEBUG_ANY, "Could not open/create nextid" LDBM_SUFFIX "\n",
0, 0, 0 );
return( NOID );
}
if( fclose( fp ) != 0 ) {
Debug( LDAP_DEBUG_ANY, "put_nextid %ld: cannot fclose\n",
id, 0, 0 );
rc = -1;
ldbm_datum_init( key );
ldbm_datum_init( data );
key.dptr = (char *) &noid;
key.dsize = sizeof(ID);
data.dptr = (char *) &id;
data.dsize = sizeof(ID);
flags = LDBM_REPLACE;
if( li->li_dbcachewsync ) flags |= LDBM_SYNC;
if ( ldbm_cache_store( db, key, data, flags ) != 0 ) {
id = NOID;
}
return rc;
ldbm_cache_close( be, db );
return id;
}
int
next_id_save( Backend *be )
ID
next_id_get( Backend *be )
{
return( next_id_get_save( be, 1 ) == NOID ? -1 : 0 );
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
ID id = NOID;
ldap_pvt_thread_mutex_lock( &li->li_nextid_mutex );
if ( li->li_nextid == NOID ) {
li->li_nextid = next_id_read( be );
}
id = li->li_nextid;
ldap_pvt_thread_mutex_unlock( &li->li_nextid_mutex );
return id;
}
ID
next_id( Backend *be )
{
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
ID id;
ID id = NOID;
ldap_pvt_thread_mutex_lock( &li->li_nextid_mutex );
/* first time in here since startup - try to read the nexid */
if ( li->li_nextid == NOID ) {
li->li_nextid = next_id_read( be );
if ( li->li_nextid == NOID ) {
li->li_nextid = 1;
}
#if SLAPD_NEXTID_CHUNK > 1
li->li_nextid_wrote = li->li_nextid;
#endif
}
id = li->li_nextid++;
if ( li->li_nextid != NOID ) {
id = li->li_nextid++;
#if SLAPD_NEXTID_CHUNK > 1
if ( li->li_nextid > li->li_nextid_wrote ) {
li->li_nextid_wrote += SLAPD_NEXTID_CHUNK;
(void) next_id_write( be, li->li_nextid_wrote );
}
#else
(void) next_id_write( be, li->li_nextid );
#endif
ldap_pvt_thread_mutex_unlock( &li->li_nextid_mutex );
return( id );
}
void
next_id_return( Backend *be, ID id )
{
#ifdef SLAPD_NEXTID_RETURN
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
ldap_pvt_thread_mutex_lock( &li->li_nextid_mutex );
if ( id != li->li_nextid - 1 ) {
ldap_pvt_thread_mutex_unlock( &li->li_nextid_mutex );
return;
}
li->li_nextid--;
#if !( SLAPD_NEXTID_CHUNK > 1 )
(void) next_id_write( be, li->li_nextid );
#endif
ldap_pvt_thread_mutex_unlock( &li->li_nextid_mutex );
#endif
}
ID
next_id_get( Backend *be )
{
return next_id_get_save( be, 0 );
}
static ID
next_id_get_save( Backend *be, int do_save )
{
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
ID id;
ldap_pvt_thread_mutex_lock( &li->li_nextid_mutex );
/* first time in here since startup - try to read the nexid */
if ( li->li_nextid == NOID ) {
li->li_nextid = next_id_read( be );
if ( li->li_nextid == NOID ) {
li->li_nextid = 1;
}
#if SLAPD_NEXTID_CHUNK > 1
li->li_nextid_wrote = li->li_nextid;
#endif
}
id = li->li_nextid;
if ( do_save ) {
if ( next_id_write( be, id ) == 0 ) {
li->li_nextid_wrote = id;
} else {
id = NOID;
}
(void) next_id_write( be, li->li_nextid );
}
ldap_pvt_thread_mutex_unlock( &li->li_nextid_mutex );
return id;
return( id );
}

View File

@ -139,15 +139,12 @@ int index_add_mods LDAP_P(( Backend *be, LDAPModList *ml, ID id ));
ID_BLOCK * index_read LDAP_P(( Backend *be,
char *type, int indextype, char *val ));
/* Possible operations supported (op) by index_change_values() */
#define __INDEX_ADD_OP 0x0001
#define __INDEX_DELETE_OP 0x0002
int index_change_values LDAP_P(( Backend *be,
char *type,
struct berval **vals,
ID id,
unsigned int op ));
/*
* kerberos.c
*/
@ -179,11 +176,9 @@ int ldbm_modify_internal LDAP_P((Backend *be,
* nextid.c
*/
int put_nextid LDAP_P(( Backend *be, ID id ));
ID next_id LDAP_P(( Backend *be ));
void next_id_return LDAP_P(( Backend *be, ID id ));
ID next_id_get LDAP_P(( Backend *be ));
int next_id_save LDAP_P(( Backend *be ));
ID next_id_write LDAP_P(( Backend *be, ID id ));
LDAP_END_DECL
#endif

View File

@ -400,40 +400,20 @@ search_candidates(
lf->f_choice = LDAP_FILTER_AND;
lf->f_and = (Filter *) ch_malloc( sizeof(Filter) );
#ifndef DN_INDICES
lf->f_and->f_choice = LDAP_FILTER_SUBSTRINGS;
lf->f_and->f_sub_type = ch_strdup( "dn" );
lf->f_and->f_sub_initial = NULL;
lf->f_and->f_sub_any = NULL;
lf->f_and->f_sub_final = ch_strdup( e->e_ndn );
#else
lf->f_and->f_choice = SLAPD_FILTER_DN_SUBTREE;
lf->f_and->f_dn = e->e_ndn;
#endif
lf->f_and->f_next = f;
f = lf;
} else if ( scope == LDAP_SCOPE_ONELEVEL ) {
#ifndef DN_INDICES
char buf[16];
#endif
lf = (Filter *) ch_malloc( sizeof(Filter) );
lf->f_next = NULL;
lf->f_choice = LDAP_FILTER_AND;
lf->f_and = (Filter *) ch_malloc( sizeof(Filter) );
#ifndef DN_INDICES
lf->f_and->f_choice = LDAP_FILTER_EQUALITY;
lf->f_and->f_ava.ava_type = ch_strdup( "id2children" );
sprintf( buf, "%ld", e != NULL ? e->e_id : 0 );
lf->f_and->f_ava.ava_value.bv_val = ch_strdup( buf );
lf->f_and->f_ava.ava_value.bv_len = strlen( buf );
#else
lf->f_and->f_choice = SLAPD_FILTER_DN_ONE;
lf->f_and->f_dn = e->e_ndn;
#endif
lf->f_and->f_next = f;
f = lf;
@ -446,13 +426,8 @@ search_candidates(
/* free up filter additions we allocated above */
if( lf != NULL ) {
#ifndef DN_INDICES
lf->f_and->f_next = NULL;
filter_free( lf );
#else
free( lf->f_and );
free( lf );
#endif
}
if( af != NULL ) {

View File

@ -0,0 +1,248 @@
/* tools.c - tools for slap tools */
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
#include "portable.h"
#include <stdio.h>
#include <ac/socket.h>
#include "slap.h"
#include "back-ldbm.h"
static LDBMCursor *cursorp = NULL;
static DBCache *id2entry = NULL;
int ldbm_tool_entry_open(
BackendDB *be, int mode )
{
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
int flags;
assert( slapMode & SLAP_TOOL_MODE );
assert( id2entry == NULL );
switch( mode ) {
case 1:
flags = LDBM_WRCREAT;
break;
case 2:
#ifdef TRUNCATE_MODE
flags = LDBM_NEWDB;
#else
flags = LDBM_WRCREAT;
#endif
break;
default:
flags = LDBM_READER;
}
li->li_dbcachewsync = 0;
if ( (id2entry = ldbm_cache_open( be, "id2entry", LDBM_SUFFIX, flags ))
== NULL ) {
Debug( LDAP_DEBUG_ANY, "Could not open/create id2entry" LDBM_SUFFIX "\n",
0, 0, 0 );
return( -1 );
}
return 0;
}
int ldbm_tool_entry_close(
BackendDB *be )
{
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
assert( slapMode & SLAP_TOOL_MODE );
assert( id2entry != NULL );
ldbm_cache_close( be, id2entry );
li->li_dbcachewsync = 1;
id2entry = NULL;
return 0;
}
ID ldbm_tool_entry_first(
BackendDB *be )
{
Datum key;
ID id;
assert( slapMode & SLAP_TOOL_MODE );
assert( id2entry != NULL );
key = ldbm_firstkey( id2entry->dbc_db, &cursorp );
if( key.dptr == NULL ) {
return NOID;
}
memcpy( &id, key.dptr, key.dsize );
ldbm_datum_free( id2entry->dbc_db, key );
return id;
}
ID ldbm_tool_entry_next(
BackendDB *be )
{
Datum key;
ID id;
int count;
assert( slapMode & SLAP_TOOL_MODE );
assert( id2entry != NULL );
/* allow for NEXTID */
ldbm_datum_init( key );
key = ldbm_nextkey( id2entry->dbc_db, key, cursorp );
if( key.dptr == NULL ) {
return NOID;
}
memcpy( &id, key.dptr, key.dsize );
ldbm_datum_free( id2entry->dbc_db, key );
return id;
}
Entry* ldbm_tool_entry_get( BackendDB *be, ID id )
{
Entry *e;
Datum key, data;
assert( slapMode & SLAP_TOOL_MODE );
assert( id2entry != NULL );
ldbm_datum_init( key );
key.dptr = (char *) &id;
key.dsize = sizeof(ID);
data = ldbm_cache_fetch( id2entry, key );
if ( data.dptr == NULL ) {
return NULL;
}
e = str2entry( data.dptr );
ldbm_datum_free( id2entry->dbc_db, data );
return e;
}
ID ldbm_tool_entry_put(
BackendDB *be,
Entry *e )
{
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
Datum key, data;
int rc, len;
assert( slapMode & SLAP_TOOL_MODE );
assert( id2entry != NULL );
if( next_id_get( be ) == NOID ) {
return NOID;
}
e->e_id = li->li_nextid++;
Debug( LDAP_DEBUG_TRACE, "=> ldbm_tool_entry_put( %ld, \"%s\" )\n",
e->e_id, e->e_dn, 0 );
rc = index_add_entry( be, e );
if( rc != 0 ) {
return NOID;
}
rc = dn2id_add( be, e->e_ndn, e->e_id );
if( rc != 0 ) {
return NOID;
}
ldbm_datum_init( key );
ldbm_datum_init( data );
key.dptr = (char *) &e->e_id;
key.dsize = sizeof(ID);
data.dptr = entry2str( e, &len );
data.dsize = len + 1;
/* store it */
rc = ldbm_cache_store( id2entry, key, data, LDBM_REPLACE );
if( rc != 0 ) {
(void) dn2id_delete( be, e->e_ndn );
return NOID;
}
return e->e_id;
}
int ldbm_tool_index_attr(
BackendDB *be,
char* type )
{
static DBCache *db = NULL;
int indexmask, syntaxmask;
char * at_cn;
assert( slapMode & SLAP_TOOL_MODE );
attr_masks( be->be_private, type, &indexmask, &syntaxmask );
attr_normalize( type );
at_cn = at_canonical_name( type );
if ( (db = ldbm_cache_open( be, at_cn, LDBM_SUFFIX, LDBM_NEWDB ))
== NULL ) {
Debug( LDAP_DEBUG_ANY,
"<= index_read NULL (could not open %s%s)\n", at_cn,
LDBM_SUFFIX, 0 );
return( NULL );
}
ldbm_cache_close( be, db );
return indexmask != 0;
}
int ldbm_tool_index_change(
BackendDB *be,
char* type,
struct berval **bv,
ID id,
int op )
{
assert( slapMode & SLAP_TOOL_MODE );
index_change_values( be,
type, bv, id, op );
return 0;
}
int ldbm_tool_sync( BackendDB *be )
{
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
assert( slapMode & SLAP_TOOL_MODE );
if ( li->li_nextid != NOID ) {
next_id_write( be, li->li_nextid );
}
return 0;
}

View File

@ -34,14 +34,15 @@ perl_back_add(
PerlBackend *perl_back = (PerlBackend *) be->be_private;
ldap_pvt_thread_mutex_lock( &perl_interpreter_mutex );
ldap_pvt_thread_mutex_lock( &perl_interpreter_mutex );
ldap_pvt_thread_mutex_lock( &entry2str_mutex );
{
dSP; ENTER; SAVETMPS;
PUSHMARK(sp);
XPUSHs( perl_back->pb_obj_ref );
XPUSHs(sv_2mortal(newSVpv( entry2str( e, &len, 0 ), 0 )));
XPUSHs(sv_2mortal(newSVpv( entry2str( e, &len ), 0 )));
PUTBACK;
@ -58,6 +59,7 @@ perl_back_add(
PUTBACK; FREETMPS; LEAVE;
}
ldap_pvt_thread_mutex_unlock( &entry2str_mutex );
ldap_pvt_thread_mutex_unlock( &perl_interpreter_mutex );
if( return_code != 0 ) {

View File

@ -39,7 +39,7 @@ shell_back_add(
fprintf( wfp, "msgid: %ld\n", op->o_msgid );
print_suffixes( wfp, be );
ldap_pvt_thread_mutex_lock( &entry2str_mutex );
fprintf( wfp, "%s", entry2str( e, &len, 0 ) );
fprintf( wfp, "%s", entry2str( e, &len ) );
ldap_pvt_thread_mutex_unlock( &entry2str_mutex );
fclose( wfp );

View File

@ -1,6 +1,6 @@
/* result.c - tcl backend utility functions
*
* $Id: tcl_util.c,v 1.7 1999/07/16 00:45:52 kdz Exp $
* $Id: tcl_util.c,v 1.8 1999/08/02 23:38:43 hallvard Exp $
*
* Copyright 1999, Ben Collins <bcollins@debian.org>, All rights reserved.
*
@ -110,9 +110,8 @@ tcl_clean_entry (
char *entrystr, *mark1, *mark2, *buf, *bp, *dup;
int len, bsize;
pthread_mutex_lock (&entry2str_mutex);
entrystr = entry2str (e, &len, 0);
pthread_mutex_unlock (&entry2str_mutex);
ldap_pvt_thread_mutex_lock(&entry2str_mutex);
entrystr = entry2str (e, &len);
buf = (char *) ch_malloc (BUFSIZ);
buf[0] = '\0';
@ -147,6 +146,8 @@ tcl_clean_entry (
}
free (dup);
} while ((mark1 = (char *) strchr (mark1, '\n')) != NULL);
ldap_pvt_thread_mutex_unlock (&entry2str_mutex);
return buf;
}

View File

@ -84,11 +84,10 @@ int backend_init(void)
}
for( ;
binfo[nBackendInfo].bi_type != NULL;
binfo[nBackendInfo].bi_type != NULL;
nBackendInfo++ )
{
rc = binfo[nBackendInfo].bi_init(
&binfo[nBackendInfo] );
rc = binfo[nBackendInfo].bi_init( &binfo[nBackendInfo] );
if(rc != 0) {
Debug( LDAP_DEBUG_ANY,
@ -158,7 +157,7 @@ int backend_add(BackendInfo *aBackendInfo)
}
}
int backend_startup(int n)
int backend_startup(Backend *be)
{
int i;
int rc = 0;
@ -171,24 +170,14 @@ int backend_startup(int n)
return 1;
}
if(n >= 0) {
if(be != NULL) {
/* startup a specific backend database */
Debug( LDAP_DEBUG_TRACE,
"backend_startup: starting database %d\n",
n, 0, 0 );
"backend_startup: starting database\n",
0, 0, 0 );
/* make sure, n does not exceed the number of backend databases */
if ( n >= nbackends ) {
Debug( LDAP_DEBUG_ANY,
"backend_startup: database number %d exceeding maximum (%d)\n",
n, nbackends, 0 );
return 1;
}
if ( backendDB[n].bd_info->bi_open ) {
rc = backendDB[n].bd_info->bi_open(
backendDB[n].bd_info );
if ( be->bd_info->bi_open ) {
rc = be->bd_info->bi_open( be->bd_info );
}
if(rc != 0) {
@ -198,9 +187,8 @@ int backend_startup(int n)
return rc;
}
if ( backendDB[n].bd_info->bi_db_open ) {
rc = backendDB[n].bd_info->bi_db_open(
&backendDB[n] );
if ( be->bd_info->bi_db_open ) {
rc = be->bd_info->bi_db_open( be );
}
if(rc != 0) {
@ -251,36 +239,37 @@ int backend_startup(int n)
return rc;
}
int backend_shutdown(int n)
int backend_num( Backend *be )
{
int i;
if( be == NULL ) return -1;
for( i = 0; i < nBackendDB; i++ ) {
if( be == &backendDB[i] ) return i;
}
return -1;
}
int backend_shutdown( Backend *be )
{
int i;
int rc = 0;
if(n >= 0) {
if( be != NULL ) {
/* shutdown a specific backend database */
/* make sure, n does not exceed the number of backend databases */
if ( n >= nbackends ) {
Debug( LDAP_DEBUG_ANY,
"backend_startup: database number %d exceeding maximum (%d)\n",
n, nbackends, 0 );
return 1;
}
if ( backendDB[n].bd_info->bi_nDB == 0 ) {
if ( be->bd_info->bi_nDB == 0 ) {
/* no database of this type, we never opened it */
return 0;
}
if ( backendDB[n].bd_info->bi_db_close ) {
backendDB[n].bd_info->bi_db_close(
&backendDB[n] );
if ( be->bd_info->bi_db_close ) {
be->bd_info->bi_db_close( be );
}
if( backendDB[n].bd_info->bi_close ) {
backendDB[n].bd_info->bi_close(
backendDB[n].bd_info );
if( be->bd_info->bi_close ) {
be->bd_info->bi_close( be->bd_info );
}
return 0;

View File

@ -20,9 +20,8 @@ static unsigned char *ecur; /* pointer to end of currently used ebuf */
static int emaxsize;/* max size of ebuf */
Entry *
str2entry( char *s )
str2entry( char *s )
{
int id = 0;
Entry *e;
Attribute **a;
char *type;
@ -35,9 +34,9 @@ str2entry( char *s )
char ptype[64];
/*
* In string format, an entry looks like this:
* LDIF is used as the string format.
* An entry looks like this:
*
* <id>\n
* dn: <dn>\n
* [<attr>:[:] <value>\n]
* [<tab><continuedvalue>\n]*
@ -52,17 +51,7 @@ str2entry( char *s )
Debug( LDAP_DEBUG_TRACE, "=> str2entry\n",
s ? s : "NULL", 0, 0 );
/* check to see if there's an id included */
next = s;
if ( isdigit( (unsigned char) *s ) ) {
id = atoi( s );
if ( (s = ldif_getline( &next )) == NULL ) {
Debug( LDAP_DEBUG_TRACE,
"<= str2entry NULL (missing newline after id)\n",
0, 0, 0 );
return( NULL );
}
}
/* initialize reader/writer lock */
e = (Entry *) ch_calloc( 1, sizeof(Entry) );
@ -74,7 +63,7 @@ str2entry( char *s )
return( NULL );
}
e->e_id = id;
e->e_id = NOID;
e->e_private = NULL;
/* dn + attributes */
@ -172,9 +161,7 @@ str2entry( char *s )
char *
entry2str(
Entry *e,
int *len,
int printid
)
int *len )
{
Attribute *a;
struct berval *bv;
@ -189,13 +176,6 @@ entry2str(
ecur = ebuf;
if ( printid ) {
/* id + newline */
MAKE_SPACE( 10 );
sprintf( (char *) ecur, "%ld\n", e->e_id );
ecur = (unsigned char *) strchr( (char *) ecur, '\0' );
}
/* put the dn */
if ( e->e_dn != NULL ) {
/* put "dn: <dn>" */

View File

@ -70,6 +70,8 @@ slap_init( int mode, char *name )
{
int rc;
assert( mode );
if( slapMode != SLAP_UNDEFINED_MODE ) {
Debug( LDAP_DEBUG_ANY,
"%s init: init called twice (old=%d, new=%d)\n",
@ -79,18 +81,12 @@ slap_init( int mode, char *name )
slapMode = mode;
switch ( slapMode ) {
switch ( slapMode & SLAP_MODE ) {
case SLAP_SERVER_MODE:
case SLAP_TOOL_MODE:
#ifdef SLAP_TIMEDSERVER_MODE
case SLAP_TIMEDSERVER_MODE:
#endif
case SLAP_TOOLID_MODE:
Debug( LDAP_DEBUG_TRACE,
"%s init: initiated %s.\n",
name, (mode == SLAP_TOOL_MODE || mode == SLAP_TOOLID_MODE) ? "tool" : "server", 0 );
name, ( mode & SLAP_TOOL_MODE ) ? "tool" : "server", 0 );
slap_name = name;
@ -110,7 +106,7 @@ slap_init( int mode, char *name )
ldap_pvt_thread_mutex_init( &crypt_mutex );
#endif
rc = backend_init();
rc = backend_init( );
break;
default:
@ -123,7 +119,7 @@ slap_init( int mode, char *name )
return rc;
}
int slap_startup(int dbnum)
int slap_startup( Backend *be )
{
int rc;
@ -131,7 +127,7 @@ int slap_startup(int dbnum)
"%s startup: initiated.\n",
slap_name, 0, 0 );
rc = backend_startup(dbnum);
rc = backend_startup( be );
if( rc == 0 ) {
rc = sasl_init();
@ -140,7 +136,7 @@ int slap_startup(int dbnum)
return rc;
}
int slap_shutdown(int dbnum)
int slap_shutdown( Backend *be )
{
int rc;
@ -151,7 +147,7 @@ int slap_shutdown(int dbnum)
sasl_destroy();
/* let backends do whatever cleanup they need to do */
rc = backend_shutdown(dbnum);
rc = backend_shutdown( be );
return rc;
}

View File

@ -282,7 +282,7 @@ int main( int argc, char **argv )
#ifdef SLAPD_BDB2
case 't': /* timed server */
serverMode = SLAP_TIMEDSERVER_MODE;
serverMode |= SLAP_TIMED_MODE;
break;
#endif
@ -384,7 +384,7 @@ int main( int argc, char **argv )
#endif
#endif /* HAVE_WINSOCK */
if ( slap_startup(-1) != 0 ) {
if ( slap_startup( NULL ) != 0 ) {
rc = 1;
SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 20 );
goto shutdown;
@ -427,7 +427,7 @@ int main( int argc, char **argv )
shutdown:
/* remember an error during shutdown */
rc |= slap_shutdown(-1);
rc |= slap_shutdown( NULL );
destroy:
/* remember an error during destroy */
rc |= slap_destroy();

View File

@ -79,8 +79,9 @@ void ava_free LDAP_P(( Ava *ava, int freeit ));
int backend_init LDAP_P((void));
int backend_add LDAP_P((BackendInfo *aBackendInfo));
int backend_startup LDAP_P((int dbnum));
int backend_shutdown LDAP_P((int dbnum));
int backend_num LDAP_P((Backend *be));
int backend_startup LDAP_P((Backend *be));
int backend_shutdown LDAP_P((Backend *be));
int backend_destroy LDAP_P((void));
BackendInfo * backend_info LDAP_P(( char *type ));
@ -206,7 +207,7 @@ void build_new_dn LDAP_P(( char ** new_dn, char *e_dn, char * p_dn,
*/
Entry * str2entry LDAP_P(( char *s ));
char * entry2str LDAP_P(( Entry *e, int *len, int printid ));
char * entry2str LDAP_P(( Entry *e, int *len ));
void entry_free LDAP_P(( Entry *e ));
int entry_cmp LDAP_P(( Entry *a, Entry *b ));
@ -441,8 +442,8 @@ extern ldap_pvt_thread_mutex_t gmtime_mutex;
extern AccessControl *global_acl;
int slap_init LDAP_P((int mode, char* name));
int slap_startup LDAP_P((int dbnum));
int slap_shutdown LDAP_P((int dbnum));
int slap_startup LDAP_P(( Backend *be ));
int slap_shutdown LDAP_P(( Backend *be ));
int slap_destroy LDAP_P((void));
struct sockaddr_in;

View File

@ -99,7 +99,7 @@ replog(
e = change;
fprintf( fp, "changetype: add\n" );
ldap_pvt_thread_mutex_lock( &entry2str_mutex );
tmp = entry2str( e, &len, 0 );
tmp = entry2str( e, &len );
while ( (tmp = strchr( tmp, '\n' )) != NULL ) {
tmp++;
if ( ! isspace( (unsigned char) *tmp ) )

View File

@ -390,12 +390,15 @@ extern int nBackendDB;
extern BackendInfo *backendInfo;
extern BackendDB *backendDB;
extern int slapMode;
#define SLAP_UNDEFINED_MODE 0
#define SLAP_SERVER_MODE 1
#define SLAP_TOOL_MODE 2
extern int slapMode;
#define SLAP_UNDEFINED_MODE 0x0000
#define SLAP_SERVER_MODE 0x0001
#define SLAP_TOOL_MODE 0x0002
#define SLAP_MODE 0x0003
#define SLAP_TRUNCATE_MODE 0x0100
#ifdef SLAPD_BDB2
# define SLAP_TIMEDSERVER_MODE 3
#define SLAP_TIMED_MODE 0x1000
#endif
#define SLAP_TOOLID_MODE 4
@ -426,6 +429,17 @@ struct slap_backend_db {
#define be_connection_init bd_info->bi_connection_init
#define be_connection_destroy bd_info->bi_connection_destroy
#ifdef SLAPD_TOOLS
#define be_entry_open bd_info->bi_tool_entry_open
#define be_entry_close bd_info->bi_tool_entry_close
#define be_entry_first bd_info->bi_tool_entry_first
#define be_entry_next bd_info->bi_tool_entry_next
#define be_entry_get bd_info->bi_tool_entry_get
#define be_entry_put bd_info->bi_tool_entry_put
#define be_index_attr bd_info->bi_tool_index_attr
#define be_index_change bd_info->bi_tool_index_change
#define be_sync bd_info->bi_tool_sync
#endif
/* these should be renamed from be_ to bd_ */
char **be_suffix; /* the DN suffixes of data in this backend */
@ -554,6 +568,20 @@ struct slap_backend_info {
int (*bi_connection_destroy) LDAP_P((BackendDB *bd,
struct slap_conn *c));
/* hooks for slap tools */
int (*bi_tool_entry_open) LDAP_P(( BackendDB *be, int mode ));
int (*bi_tool_entry_close) LDAP_P(( BackendDB *be ));
ID (*bi_tool_entry_first) LDAP_P(( BackendDB *be ));
ID (*bi_tool_entry_next) LDAP_P(( BackendDB *be ));
Entry* (*bi_tool_entry_get) LDAP_P(( BackendDB *be, ID id ));
ID (*bi_tool_entry_put) LDAP_P(( BackendDB *be, Entry *e ));
int (*bi_tool_index_attr) LDAP_P(( BackendDB *be, char* type ));
int (*bi_tool_index_change) LDAP_P(( BackendDB *be, char* type,
struct berval **bv, ID id, int op ));
int (*bi_tool_sync) LDAP_P(( BackendDB *be ));
#define SLAP_INDEX_ADD_OP 0x0001
#define SLAP_INDEX_DELETE_OP 0x0002
unsigned int bi_nDB; /* number of databases of this type */
void *bi_private; /* anything the backend type needs */

View File

@ -12,9 +12,9 @@
# Stand alone LDAP server tools makefile
#
#-----------------------------------------------------------------------------
HAVE_QUIPU = @BUILD_QUIPU@
BUILD_LDBM = @BUILD_LDBM@
BUILD_BDB2 = @BUILD_BDB2@
BUILD_QUIPU = @BUILD_QUIPU@
LDAP_INCDIR= ../../../include
LDAP_LIBDIR= ../../../libraries
@ -30,51 +30,83 @@ XXLIBS = $(LDAPD_LIBS) $(SLAPD_LIBS) \
$(LDIF_LIBS) $(LUTIL_LIBS)
XXXLIBS = $(LTHREAD_LIBS) $(MODULES_LIBS)
PROGRAMS=ldif2index ldif2ldbm ldbmcat ldif2id2entry ldif2id2children \
centipede ldbmtest ldif
PROGRAMS=ldif slapadd slapcat slapindex
LDBMPROGRAMS=centipede sizecount
BDB2PROGRAMS=
QUIPUPROGRAMS=chlog2replog edb2ldif
PROGRAMS2=ldif2index-bdb2 ldif2ldbm-bdb2 \
ldif2id2entry-bdb2 ldif2id2children-bdb2
SRCS = centipede.c ldbmcat.c ldbmtest.c sizecount.c \
ldif.c ldif2id2children.c ldif2id2entry.c ldif2index.c ldif2ldbm.c \
mimic.c ldif2common.c
SRCS2 = ldif2id2children-bdb2.c ldif2id2entry-bdb2.c \
ldif2index-bdb2.c ldif2ldbm-bdb2.c
SRCS = ldif.c mimic.c slapcommon.c
XSRCS = edb2-vers.c
EDB2LDIFSRCS = edb2ldif.c ldapsyntax.c
EDB2LDIFOBJS = edb2ldif.o ldapsyntax.o
LDBMSRCS = centipede.c sizecount.c
OBJS1 = mimic.o \
../config.o ../ch_malloc.o ../backend.o ../charray.o \
BDB2SRCS =
QUIPUSRCS = edb2ldif.c ldapsyntax.c chlog2replog.c
SLAPD_OBJS = ../config.o ../ch_malloc.o ../backend.o ../charray.o \
../module.o ../aclparse.o ../schema.o ../filterentry.o \
../acl.o ../phonetic.o ../attr.o ../value.o ../entry.o \
../dn.o ../filter.o ../str2filter.o ../ava.o ../init.o \
../controls.o ../schemaparse.o
OBJS2 = $(OBJS1) ldif2common.o
SLAPOBJS = $(SLAPD_OBJS) slapcommon.o mimic.o
all-local: build-ldbm build-bdb2 build-edb2ldif build-chlog2replog
EDB2LDIFSRCS = edb2ldif.c ldapsyntax.c
EDB2LDIFOBJS = edb2ldif.o ldapsyntax.o
all-local: build-progs build-ldbm build-bdb2 build-quipu
build-progs: $(PROGRAMS)
build-ldbm: ldbm-tools-$(BUILD_LDBM)
ldbm-tools-no:
@echo "run configure with --enable-ldbm to build LDBM tools"
ldbm-tools-yes ldbm-tools-mod: $(LDBMPROGRAMS)
build-bdb2: bdb2-tools-$(BUILD_BDB2)
bdb2-tools-no:
@echo "run configure with --enable-bdb2 to build BDB2 tools"
ldbm-tools-yes ldbm-tools-mod: $(PROGRAMS)
bdb2-tools-yes bdb2-tools-mod: $(BDB2PROGRAMS)
bdb2-tools-yes bdb2-tools-mod: $(PROGRAMS2)
build-quipu: quipu-tools-$(BUILD_QUIPU)
quipu-tools-no:
@echo "run configure with --enable-quipu to build QUIPU tools"
build-edb2ldif: edb-$(HAVE_QUIPU)
edb-no:
@echo "run configure with --enable-quipu to build edb2ldif"
edb-yes: edb2ldif
quipu-tools-yes quipu-tools-mod: $(QUIPUPROGRAMS)
#
# SLAP Tools
#
slapadd: slapadd.o ../libbackends.a $(SLAPOBJS) $(SLAPD_LIBDEPEND)
$(LTLINK) -o $@ slapadd.o $(SLAPOBJS) ../libbackends.a $(LIBS)
slapcat: slapcat.o ../libbackends.a $(SLAPOBJS) $(SLAPD_LIBDEPEND)
$(LTLINK) -o $@ slapcat.o $(SLAPOBJS) ../libbackends.a $(LIBS)
slapindex: slapindex.o ../libbackends.a $(SLAPOBJS) $(SLAPD_LIBDEPEND)
$(LTLINK) -o $@ slapindex.o $(SLAPOBJS) ../libbackends.a $(LIBS)
ldif: ldif.o $(SLAPD_LIBDEPEND)
$(LTLINK) -o $@ ldif.o $(LIBS)
#
# LDBM Specific Tools
#
centipede: centipede.o $(SLAPD_LIBDEPEND)
$(LTLINK) -o $@ centipede.o $(LIBS)
sizecount: sizecount.o ../phonetic.o ../ch_malloc.o $(SLAPD_LIBDEPEND)
$(LTLINK) -o $@ sizecount.o ../phonetic.o ../ch_malloc.o $(LIBS)
#
# BDBM Specific Tools
#
#
# QUIPU Specific Tools
#
edb2ldif: edb2-vers.o
$(CC) $(LDFLAGS) -o $@ $(EDB2LDIFOBJS) edb2-vers.o $(LIBS)
@ -82,81 +114,26 @@ edb2-vers.c: $(EDB2LDIFOBJS)
@-$(RM) $@
$(MKVERSION) ebd2ldif > $@
build-chlog2replog: chlog-$(HAVE_QUIPU)
chlog-no:
@echo "run configure with --enable-quipu to build chlog2replog"
chlog-yes: chlog2replog
chlog2replog: chlog2replog.o ../lock.o ../ch_malloc.o $(SLAPD_LIBDEPEND)
$(LTLINK) -o $@ chlog2replog.o ../lock.o ../ch_malloc.o $(LIBS)
ldif2index: ldif2index.o ../libbackends.a $(OBJS2) $(SLAPD_LIBDEPEND)
$(LTLINK) -o $@ ldif2index.o $(OBJS2) ../libbackends.a $(LIBS)
ldif2index-bdb2: ldif2index-bdb2.o ../libbackends.a \
$(OBJS2) $(SLAPD_LIBDEPEND)
$(LTLINK) -o $@ ldif2index-bdb2.o $(OBJS2) ../libbackends.a $(LIBS)
ldif2ldbm: ldif2ldbm.o ../libbackends.a $(OBJS2) $(SLAPD_LIBDEPEND)
$(LTLINK) -o $@ ldif2ldbm.o $(OBJS2) ../libbackends.a $(LIBS)
ldif2ldbm-bdb2: ldif2ldbm-bdb2.o ../libbackends.a $(OBJS2) $(SLAPD_LIBDEPEND)
$(LTLINK) -o $@ ldif2ldbm-bdb2.o $(OBJS2) ../libbackends.a $(LIBS)
ldif2id2entry: ldif2id2entry.o ../libbackends.a $(OBJS2) $(SLAPD_LIBDEPEND)
$(LTLINK) -o $@ ldif2id2entry.o $(OBJS2) ../libbackends.a $(LIBS)
ldif2id2entry-bdb2: ldif2id2entry-bdb2.o ../libbackends.a \
$(OBJS2) $(SLAPD_LIBDEPEND)
$(LTLINK) -o $@ ldif2id2entry-bdb2.o $(OBJS2) ../libbackends.a $(LIBS)
ldif2id2children: ldif2id2children.o ../libbackends.a \
$(OBJS2) $(SLAPD_LIBDEPEND)
$(LTLINK) -o $@ ldif2id2children.o $(OBJS2) ../libbackends.a $(LIBS)
ldif2id2children-bdb2: ldif2id2children-bdb2.o ../libbackends.a \
$(OBJS2) $(SLAPD_LIBDEPEND)
$(LTLINK) -o $@ ldif2id2children-bdb2.o $(OBJS2) ../libbackends.a $(LIBS)
ldbmcat: ldbmcat.o $(SLAPD_LIBDEPEND)
$(LTLINK) -o $@ ldbmcat.o $(LIBS)
ldif: ldif.o $(SLAPD_LIBDEPEND)
$(LTLINK) -o $@ ldif.o $(LIBS)
centipede: centipede.o $(SLAPD_LIBDEPEND)
$(LTLINK) -o $@ centipede.o $(LIBS)
sizecount: sizecount.o ../phonetic.o ../ch_malloc.o $(SLAPD_LIBDEPEND)
$(LTLINK) -o $@ sizecount.o ../phonetic.o ../ch_malloc.o $(LIBS)
ldbmtest: ldbmtest.o ../libbackends.a $(OBJS1) $(SLAPD_LIBDEPEND)
$(LTLINK) -o ldbmtest ldbmtest.o $(OBJS1) ../libbackends.a $(LIBS)
clean-local: FORCE
$(RM) $(PROGRAMS) $(PROGRAMS2) $(XPROGRAMS) $(XSRCS) edb2-vers.c \
*.o core .libs/*
$(RM) $(PROGRAMS) $(LDBMPROGRAMS2) $(BDB2PROGRAMS) $(QUIPUPROGRAM) \
$(XPROGRAMS) $(XSRCS) *.o core .libs/*
depend-local: FORCE
@DEPEND=no ; DEPEND_LDBM= ; DEPEND_BDB2= ; DEPEND_QUIPU= ; \
@DEPEND_LDBM= ; DEPEND_BDB2= ; DEPEND_QUIPU= ; \
if [ "$(BUILD_LDBM)" != "no" ]; then \
DEPEND_LDBM="$(SRCS)"; \
DEPEND=yes ; \
DEPEND_LDBM="$(LDBMSRCS)"; \
fi; \
if [ "$(BUILD_BDB2)" != "no" ]; then \
DEPEND_BDB2="$(SRCS2)"; \
DEPEND=yes ; \
DEPEND_BDB2="$(BDBMSRCS)"; \
fi; \
if [ "$(HAVE_QUIPU)" != "no" ]; then \
DEPEND_QUIPU="$(QUIPUINCLUDEFLAG) chlog2replog.c $(EDB2LDIFSRCS)"; \
DEPEND=yes ; \
if [ "$(BUILD_QUIPU)" != "no" ]; then \
DEPEND_QUIPU="$(QUIPUINCLUDEFLAG) $(QUIPUSRCS)"; \
fi; \
if [ "$$DEPEND" = "yes" ]; then \
$(MKDEP) $(DEFS) $(DEFINES) $$DEPEND_QUIPU \
$$DEPEND_LDBM $$DEPEND_BDB2; \
else \
echo "slapd-tools: no dependencies to make"; \
fi
$(MKDEP) $(DEFS) $(DEFINES) $(SRCS) $$DEPEND_QUIPU \
$$DEPEND_LDBM $$DEPEND_BDB2
install-local: install-ldbm-$(BUILD_LDBM) install-bdb2-$(BUILD_BDB2) \
install-quipu-$(HAVE_QUIPU)
@ -165,24 +142,16 @@ install-ldbm-no install-bdb2-no install-quipu-no:
install-ldbm-yes install-ldbm-mod: FORCE
@-$(MKDIR) $(sbindir)
$(LTINSTALL) $(INSTALLFLAGS) -m 755 ldif2ldbm $(sbindir) ; \
$(LTINSTALL) $(INSTALLFLAGS) -m 755 ldif2index $(sbindir) ; \
$(LTINSTALL) $(INSTALLFLAGS) -m 755 ldif2id2entry $(sbindir) ; \
$(LTINSTALL) $(INSTALLFLAGS) -m 755 ldif2id2children $(sbindir) ; \
$(LTINSTALL) $(INSTALLFLAGS) -m 755 ldbmcat $(sbindir) ; \
$(LTINSTALL) $(INSTALLFLAGS) -m 755 slapcat $(sbindir) ; \
$(LTINSTALL) $(INSTALLFLAGS) -m 755 slapentry $(sbindir) ; \
$(LTINSTALL) $(INSTALLFLAGS) -m 755 slapindex $(sbindir) ; \
$(LTINSTALL) $(INSTALLFLAGS) -m 755 ldif $(sbindir) ; \
$(LTINSTALL) $(INSTALLFLAGS) -m 755 centipede $(sbindir) ; \
$(LTINSTALL) $(INSTALLFLAGS) -m 755 ldbmtest $(sbindir)
$(LTINSTALL) $(INSTALLFLAGS) -m 755 centipede $(sbindir)
install-bdb2-yes install-bdb2-mod: FORCE
@-$(MKDIR) $(sbindir)
$(LTINSTALL) $(INSTALLFLAGS) -m 755 ldif2ldbm-bdb2 $(sbindir) ; \
$(LTINSTALL) $(INSTALLFLAGS) -m 755 ldif2index-bdb2 $(sbindir) ; \
$(LTINSTALL) $(INSTALLFLAGS) -m 755 ldif2id2entry-bdb2 $(sbindir) ; \
$(LTINSTALL) $(INSTALLFLAGS) -m 755 ldif2id2children-bdb2 $(sbindir)
install-quipu-yes: FORCE
@-$(MKDIR) $(sbindir)
$(LTINSTALL) $(INSTALLFLAGS) -m 755 edb2ldif $(sbindir); \
$(LTINSTALL) $(INSTALLFLAGS) -m 755 chlog2replog $(sbindir)

View File

@ -10,11 +10,11 @@
#include <ac/time.h>
#include <ac/unistd.h> /* get link(), unlink() */
#include <lber.h>
#include <ldap.h>
#include <ldbm.h>
int slap_debug;
#define DEFAULT_LDAPFILTER "(objectclass=*)"
#define CENTROID_VALUE 1
@ -565,10 +565,8 @@ diff_centroids(
int amax, acur, dmax, dcur;
char **vals;
#ifdef HAVE_BERKELEY_DB2
DBC *ocursorp;
DBC *ncursorp;
#endif /* HAVE_BERKELEY_DB2 */
LDBMCursor *ocursorp;
LDBMCursor *ncursorp;
if ( verbose ) {
printf( "Generating mods for differential %s centroid...", attr );
@ -622,14 +620,10 @@ diff_centroids(
olast.dptr = NULL;
nlast.dptr = NULL;
#ifdef HAVE_BERKELEY_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 );
okey.dptr != NULL && nkey.dptr != NULL; )
#endif
{
int rc = strcmp( okey.dptr, nkey.dptr );
@ -644,13 +638,9 @@ diff_centroids(
}
nlast = nkey;
#ifdef HAVE_BERKELEY_DB2
okey = ldbm_nextkey( oldbm, olast, ocursorp );
nkey = ldbm_nextkey( nldbm, nlast, ncursorp );
#else
okey = ldbm_nextkey( oldbm, olast );
nkey = ldbm_nextkey( nldbm, nlast );
#endif
} else if ( rc > 0 ) {
/* new value is not in old centroid - add it */
if ( charray_add_dup( &avals, &acur, &amax, nkey.dptr ) == NULL ) {
@ -663,11 +653,8 @@ diff_centroids(
}
nlast = nkey;
#ifdef HAVE_BERKELEY_DB2
nkey = ldbm_nextkey( nldbm, nlast, ncursorp );
#else
nkey = ldbm_nextkey( nldbm, nlast );
#endif
} else {
/* old value is not in new centroid - delete it */
if ( charray_add_dup( &dvals, &dcur, &dmax, okey.dptr ) == NULL ) {
@ -680,11 +667,7 @@ diff_centroids(
}
olast = okey;
#ifdef HAVE_BERKELEY_DB2
okey = ldbm_nextkey( oldbm, olast, ocursorp );
#else
okey = ldbm_nextkey( oldbm, olast );
#endif
}
}
@ -694,11 +677,7 @@ diff_centroids(
return( NULL );
}
#ifdef HAVE_BERKELEY_DB2
okey = ldbm_nextkey( oldbm, olast, ocursorp );
#else
okey = ldbm_nextkey( oldbm, olast );
#endif
if ( olast.dptr != NULL ) {
ldbm_datum_free( oldbm, olast );
}
@ -713,11 +692,7 @@ diff_centroids(
return( NULL );
}
#ifdef HAVE_BERKELEY_DB2
nkey = ldbm_nextkey( nldbm, nlast, ncursorp );
#else
nkey = ldbm_nextkey( nldbm, nlast );
#endif
if ( nlast.dptr != NULL ) {
ldbm_datum_free( nldbm, nlast );
}
@ -738,13 +713,8 @@ diff_centroids(
/* generate list of values to add */
lastkey.dptr = NULL;
#ifdef HAVE_BERKELEY_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;
key = ldbm_nextkey( nldbm, lastkey ) )
#endif
{
/* see if it's in the old one */
data = ldbm_fetch( oldbm, key );
@ -769,13 +739,8 @@ diff_centroids(
/* generate list of values to delete */
lastkey.dptr = NULL;
#ifdef HAVE_BERKELEY_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;
key = ldbm_nextkey( oldbm, lastkey ) )
#endif
{
/* see if it's in the new one */
data = ldbm_fetch( nldbm, key );
@ -836,9 +801,7 @@ full_centroid(
char **vals;
int vcur, vmax;
#ifdef HAVE_BERKELEY_DB2
DBC *cursorp;
#endif
LDBMCursor *cursorp;
if ( verbose ) {
printf( "Generating mods for full %s centroid...", attr );
@ -870,13 +833,9 @@ full_centroid(
lastkey.dptr = NULL;
vals = NULL;
vcur = vmax = 0;
#ifdef HAVE_BERKELEY_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;
key = ldbm_nextkey( ldbm, lastkey ) )
#endif
{
if ( charray_add_dup( &vals, &vcur, &vmax, key.dptr ) == NULL ) {
ldap_mods_free( mods, 1 );

View File

@ -1,83 +0,0 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
#include "portable.h"
#include <stdio.h>
#include <ac/stdlib.h>
#include <ac/ctype.h>
#include <ac/socket.h>
#include <ac/string.h>
#include "ldbm.h"
#include "../slap.h"
static void
usage( char *name )
{
fprintf( stderr, "usage: %s [-n] <filename>\n", name );
}
int
main( int argc, char **argv )
{
Datum key, data;
LDBM dbp;
char *file, *s;
int printid = 1;
#ifdef HAVE_BERKELEY_DB2
DBC *cursorp;
#endif
ldbm_datum_init( key );
ldbm_datum_init( data );
if ( argc < 2 || argc > 3 || ( argc == 3 && strcmp( argv[1], "-n" )
!= 0 )) {
usage( argv[0] );
return EXIT_FAILURE;
}
if ( argc == 3 && strcmp( argv[1], "-n" ) == 0 ) {
printid = 0;
file = argv[2];
} else {
file = argv[1];
}
if ( (dbp = ldbm_open( file, LDBM_READER, 0, 0 )) == NULL ) {
perror( file );
return EXIT_FAILURE;
}
#ifdef HAVE_BERKELEY_DB2
for ( key = ldbm_firstkey( dbp, &cursorp ); key.dptr != NULL;
key = ldbm_nextkey( dbp, key, cursorp ) )
#else
for ( key = ldbm_firstkey( dbp ); key.dptr != NULL;
key = ldbm_nextkey( dbp, key ) )
#endif
{
data = ldbm_fetch( dbp, key );
if (( s = data.dptr ) != NULL ) {
if ( !printid && isdigit( (unsigned char) *s )) {
if (( s = strchr( s, '\n' )) != NULL ) {
++s;
}
}
if ( s != NULL ) {
puts( s );
}
ldbm_datum_free( dbp, data );
}
}
ldbm_close( dbp );
return EXIT_SUCCESS;
}

View File

@ -1,44 +0,0 @@
Microsoft Developer Studio Workspace File, Format Version 5.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "ldbmcat"=.\ldbmcat.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name libldbm
End Project Dependency
}}}
###############################################################################
Project: "libldbm"=..\..\..\libraries\libldbm\libldbm.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

View File

@ -57,9 +57,12 @@ main( int argc, char **argv )
int i;
char *tailorfile;
#ifdef HAVE_BERKELEY_DB2
DBC *cursorp;
#endif
LDBMCursor *cursorp;
fprintf(stderr,
"ldbmtest not updated to support new index formats!\n" );
exit( EXIT_FAILURE );
ldbm_datum_init( savekey );
ldbm_datum_init( key );
@ -91,7 +94,7 @@ main( int argc, char **argv )
slap_init(SLAP_TOOL_MODE, "ldbmtest");
read_config( tailorfile );
slap_startup(-1);
slap_startup( NULL );
while ( 1 ) {
printf( "dbtest: " );
@ -114,7 +117,7 @@ main( int argc, char **argv )
}
break;
case 'l': /* lookup somethig in an index */
case 'l': /* lookup something in an index */
if ( (dbc = openchoice( buf[1], LDBM_READER, 1, NULL ))
== NULL ) {
continue;
@ -153,15 +156,9 @@ main( int argc, char **argv )
}
savekey.dptr = NULL;
#ifdef HAVE_BERKELEY_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 );
key.dptr != NULL;
key = ldbm_nextkey( dbc->dbc_db, key ) )
#endif
{
if ( savekey.dptr != NULL )
ldbm_datum_free( dbc->dbc_db, savekey );
@ -327,14 +324,9 @@ main( int argc, char **argv )
last.dptr = NULL;
#ifdef HAVE_BERKELEY_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;
key = ldbm_nextkey( dbp, last ) )
#endif
{
if ( last.dptr != NULL ) {
ldbm_datum_free( dbp, last );
@ -360,7 +352,6 @@ main( int argc, char **argv )
printf( " b => change default backend\n" );
printf( " B => print default backend\n" );
printf( "where <c> is a char selecting the index:\n" );
printf( " c => id2children\n" );
printf( " d => dn2id\n" );
printf( " e => id2entry\n" );
printf( " f => arbitrary file\n" );
@ -369,7 +360,7 @@ main( int argc, char **argv )
}
}
slap_shutdown(-1);
slap_shutdown( NULL );
slap_destroy();
return( EXIT_SUCCESS );
@ -608,9 +599,6 @@ openchoice( char c, int mode, int verbose, char **fname )
static char name[MAXPATHLEN];
switch ( c ) {
case 'c': /* id2children */
sprintf( name, "id2children" );
break;
case 'd': /* dn2id */
sprintf( name, "dn2id" );
break;
@ -626,7 +614,7 @@ openchoice( char c, int mode, int verbose, char **fname )
}
break;
default:
printf( "specify one of [fdeci] to select file\n" );
printf( "specify one of [fdei] to select file\n" );
return( NULL );
break;
}
@ -689,7 +677,6 @@ print_entry(
}
break;
case 'c':
case 'i': /* index - key is string, data is dnid[] */
if ( key != NULL )
fprintf( fp, "%s%s (len %d)\n", klabel, key->dptr,
@ -706,8 +693,7 @@ print_entry(
fprintf( fp, "\t%ld\n", ID_BLOCK_ID(idl, i) );
}
} else if ( ID_BLOCK_ALLIDS( idl ) ) {
fprintf( fp, "\tALLIDS (1..%ld)\n",
ID_BLOCK_NIDS(idl) - 1 );
fprintf( fp, "\tALLIDS\n" );
} else {
for ( i = 0; i < ID_BLOCK_NIDS(idl); i++ ) {
fprintf( fp, "\t%ld\n", ID_BLOCK_ID(idl,i) );
@ -726,7 +712,7 @@ print_entry(
break;
default:
fprintf( stderr, "specify [deci] to select a file\n" );
fprintf( stderr, "specify [dei] to select a file\n" );
break;
}
}
@ -785,7 +771,6 @@ get_keydata( FILE *fp, char c, Datum *key, Datum *data )
}
break;
case 'c': /* id2children - key is string dnid, data is dnid[] */
case 'i': /* index - key is string, data is dnid[] */
if ( key != NULL ) {
if ( tty )
@ -804,7 +789,7 @@ get_keydata( FILE *fp, char c, Datum *key, Datum *data )
break;
default:
fprintf(stderr, "specify [deci] to select file type\n");
fprintf(stderr, "specify [dei] to select file type\n");
break;
}
}

View File

@ -70,7 +70,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe

View File

@ -1,203 +0,0 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
/* ldif2common.c - common definitions for the ldif2* tools */
#include "portable.h"
#include <stdio.h>
#include <ac/stdlib.h>
#include <ac/ctype.h>
#include <ac/string.h>
#include <ac/socket.h>
#include <ac/unistd.h>
#include "ldif2common.h"
char *progname;
char *tailorfile = SLAPD_DEFAULT_CONFIGFILE;
char *inputfile = NULL;
char *sbindir = LDAP_SBINDIR; /* used by ldif2ldbm */
int cmdkids = 1; /* used by ldif2ldbm */
int dbnum;
static void
usage( int tool )
{
fprintf( stderr, "usage: %s %s\n\t%s%s\n",
progname, "-i inputfile [-d debuglevel] [-f configfile]",
"[-n databasenumber]",
((tool == LDIF2LDBM) ? " [-j #jobs] [-s sbindir]" :
(tool == LDIF2INDEX) ? " attr" :
"") );
exit( EXIT_FAILURE );
}
/*
* slap_ldif_init - initialize ldif utility, handle program options.
* args: tool - which ldif2* program is running.
* argc, argv - from main.
* dbtype - "ldbm"/"bdb2".
* options - to getopt.
*/
void
slap_ldif_init( int argc, char **argv, int tool, const char *dbtype, int mode )
{
char *options = (tool == LDIF2LDBM ? "e:s:j:d:f:i:n:" : "d:f:i:n:");
int rc, i;
progname = strrchr ( argv[0], '/' );
progname = ch_strdup( progname ? progname + 1 : argv[0] );
inputfile = NULL;
tailorfile = SLAPD_DEFAULT_CONFIGFILE;
dbnum = -1;
while ( (i = getopt( argc, argv, options )) != EOF ) {
switch ( i ) {
case 'd': /* turn on debugging */
ldap_debug = atoi( optarg );
break;
case 's': /* alternate sbindir (index cmd location) */
case 'e': /* accept -e for backwards compatibility */
/* only used by ldif2ldbm and ldif2ldbm-bdb2 */
sbindir = strdup( optarg );
break;
case 'f': /* specify a tailor file */
tailorfile = strdup( optarg );
break;
case 'i': /* input file */
inputfile = strdup( optarg );
break;
case 'j': /* number of parallel index procs */
/* only in ldif2ldbm and ldif2ldbm-bdb2 */
cmdkids = atoi( optarg );
break;
case 'n': /* which config file db to index */
dbnum = atoi( optarg ) - 1;
break;
default:
usage( tool );
break;
}
}
if ( inputfile == NULL || (argc != optind + (tool == LDIF2INDEX)) )
usage( tool );
if ( freopen( inputfile, "r", stdin ) == NULL ) {
perror( inputfile );
exit( EXIT_FAILURE );
}
/*
* initialize stuff and figure out which backend we're dealing with
*/
rc = slap_init( mode, progname );
if (rc != 0 ) {
fprintf( stderr, "%s: slap_init failed!\n", progname );
exit( EXIT_FAILURE );
}
read_config( tailorfile );
if ( dbnum == -1 ) {
for ( dbnum = 0; dbnum < nbackends; dbnum++ ) {
if ( strcasecmp( backends[dbnum].be_type, dbtype )
== 0 ) {
break;
}
}
if ( dbnum == nbackends ) {
fprintf( stderr, "No %s database found in config file\n", dbtype );
exit( EXIT_FAILURE );
}
} else if ( dbnum < 0 || dbnum > (nbackends-1) ) {
fprintf( stderr, "Database number selected via -n is out of range\n" );
fprintf( stderr, "Must be in the range 1 to %d (number of databases in the config file)\n", nbackends );
exit( EXIT_FAILURE );
} else if ( strcasecmp( backends[dbnum].be_type, dbtype ) != 0 ) {
fprintf( stderr, "Database number %d selected via -n is not an %s database\n", dbnum, dbtype );
exit( EXIT_FAILURE );
}
}
#define IDBUFSIZ 100 /* enough to hold <decimal ID>\n\0 */
/*
* slap_read_ldif - read an ldif record. Return 1 for success, 0 for EOF.
*/
int
slap_read_ldif(
int *lno, /* ptr to line number counter */
char **bufp, /* ptr to malloced output buffer */
int *buflenp, /* ptr to length of *bufp */
ID *idp, /* ptr to ID number to be read/incremented */
int idout ) /* flag to begin *buf with ID number */
{
char linebuf[IDBUFSIZ + BUFSIZ], *line;
ber_len_t lcur = 0, idlen, len, linesize;
int last_ch = '\n', found_entry = 0, stop;
line = linebuf + IDBUFSIZ;
linesize = sizeof( linebuf ) - IDBUFSIZ;
for ( stop = feof( stdin ); !stop; last_ch = line[len-1] ) {
if ( fgets( line, linesize, stdin ) == NULL ) {
stop = 1;
/* Add \n in case the file does not end with newline */
line = "\n";
}
len = strlen( line );
if ( last_ch == '\n' ) {
(*lno)++;
if ( line[0] == '\n' ) {
if ( !found_entry )
continue;
break;
}
if ( !found_entry ) {
/* Found a new entry */
found_entry = 1;
if ( isdigit( (unsigned char) line[0] ) ) {
*idp = atol( line );
if ( !idout )
continue;
} else {
++(*idp);
if ( idout ) {
sprintf( linebuf, "%ld\n", (long) *idp );
idlen = strlen( linebuf );
line -= idlen;
linesize += idlen;
len += idlen;
SAFEMEMCPY( line, linebuf, idlen );
}
}
}
}
if ( *buflenp - lcur <= len )
*bufp = ch_realloc( *bufp, *buflenp += len + BUFSIZ );
strcpy( *bufp + lcur, line );
lcur += len;
}
return( found_entry );
}

View File

@ -1,30 +0,0 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
/* ldif2common.h - common definitions for the ldif2* tools */
#ifndef LDIF2COMMON_H_
#define LDIF2COMMON_H_
#include "ldap_defaults.h"
#include "../slap.h"
enum ldiftool {
LDIF2LDBM = 1, LDIF2INDEX, LDIF2ID2ENTRY, LDIF2ID2CHILDREN
};
extern char *progname;
extern char *tailorfile;
extern char *inputfile;
extern char *sbindir;
extern int cmdkids;
extern int dbnum;
void slap_ldif_init LDAP_P(( int, char **, int, const char *, int ));
int slap_read_ldif LDAP_P(( int *, char **, int *, ID *, int ));
#endif /* LDIF2COMMON_H_ */

View File

@ -1,247 +0,0 @@
#include "portable.h"
#include <stdio.h>
#include <ac/stdlib.h>
#include <ac/ctype.h>
#include <ac/string.h>
#include <ac/socket.h>
#include <ac/unistd.h>
#include "ldif2common.h"
#include "../back-bdb2/back-bdb2.h"
#include "ldif.h"
int
main( int argc, char **argv )
{
int i, stop;
char *linep, *buf;
char line[BUFSIZ];
int lineno, elineno;
int lmax, lcur;
ID id;
struct dbcache *db, *db2;
Backend *be = NULL;
struct ldbminfo *li;
struct berval bv;
struct berval *vals[2];
slap_ldif_init( argc, argv, LDIF2ID2CHILDREN, "bdb2", SLAP_TOOL_MODE );
slap_startup(dbnum);
be = &backends[dbnum];
/* disable write sync'ing */
li = (struct ldbminfo *) be->be_private;
li->li_dbcachewsync = 0;
/*
* first, make the dn2id index
*/
if ( (db = bdb2i_cache_open( be, "dn2id", BDB2_SUFFIX, LDBM_NEWDB ))
== NULL ) {
perror( "dn2id file" );
exit( EXIT_FAILURE );
}
id = 0;
stop = 0;
lineno = 0;
buf = NULL;
lcur = lmax = 0;
vals[0] = &bv;
vals[1] = NULL;
while ( ! stop ) {
char *type, *val, *s;
ber_len_t vlen;
Datum key, data;
ldbm_datum_init( key );
ldbm_datum_init( data );
if ( fgets( line, sizeof(line), stdin ) != NULL ) {
int len;
lineno++;
len = strlen( line );
while ( lcur + len + 1 > lmax ) {
lmax += BUFSIZ;
buf = (char *) ch_realloc( buf, lmax );
}
strcpy( buf + lcur, line );
lcur += len;
} else {
stop = 1;
}
if ( line[0] == '\n' || stop && buf && *buf ) {
if ( *buf != '\n' ) {
if (isdigit((unsigned char) *buf)) {
id = atol(buf);
} else {
id++;
}
s = buf;
elineno = 0;
while ( (linep = ldif_getline( &s )) != NULL ) {
elineno++;
if ( ldif_parse_line( linep, &type, &val,
&vlen ) != 0 ) {
Debug( LDAP_DEBUG_PARSE,
"bad line %d in entry ending at line %d ignored\n",
elineno, lineno, 0 );
continue;
}
if ( strcmp( type, "dn" ) == 0 )
break;
}
if ( linep == NULL ) {
fprintf( stderr, "entry %ld has no dn\n",
id );
} else {
if( val != NULL ) {
(void) dn_normalize_case( val );
}
key.dptr = val;
key.dsize = strlen( val != NULL ? val : "" ) + 1;
data.dptr = (char *) &id;
data.dsize = sizeof(ID);
if ( ldbm_store( db->dbc_db, key, data,
LDBM_REPLACE ) != 0 ) {
perror( "dn2id ldbm_store..." );
exit( EXIT_FAILURE );
}
}
}
*buf = '\0';
lcur = 0;
line[0] = '\0';
}
}
if ( buf )
free( buf );
/*
* next, make the id2children index
*/
if ( (db2 = bdb2i_cache_open( be, "id2children", BDB2_SUFFIX,
LDBM_NEWDB )) == NULL ) {
perror( "id2children file" );
exit( EXIT_FAILURE );
}
rewind( stdin );
id = 0;
stop = 0;
buf = NULL;
lineno = 0;
lcur = lmax = 0;
vals[0] = &bv;
vals[1] = NULL;
while ( ! stop ) {
char *type, *val, *s, *dn;
ber_len_t vlen;
ID pid;
char buf2[20];
Datum key, data;
ldbm_datum_init( key );
ldbm_datum_init( data );
if ( fgets( line, sizeof(line), stdin ) != NULL ) {
int len;
len = strlen( line );
while ( lcur + len + 1 > lmax ) {
lmax += BUFSIZ;
buf = (char *) ch_realloc( buf, lmax );
}
strcpy( buf + lcur, line );
lcur += len;
} else {
stop = 1;
}
if ( line[0] == '\n' || stop && buf && *buf ) {
if ( * buf != '\n' ) {
if (isdigit((unsigned char) *buf)) {
id = atol(buf);
} else {
id++;
}
s = buf;
while ( (linep = ldif_getline( &s )) != NULL ) {
if ( ldif_parse_line( linep, &type, &val,
&vlen ) != 0 ) {
Debug( LDAP_DEBUG_PARSE,
"bad line %d ignored\n",
lineno, 0, 0 );
continue;
}
if ( strcmp( type, "dn" ) == 0 )
break;
}
if ( linep == NULL ) {
fprintf( stderr, "entry %ld has no dn\n",
id );
} else {
if ( (dn = dn_parent( be, val ))
== NULL ) {
pid = 0;
} else {
(void) dn_normalize_case( dn );
key.dptr = dn;
key.dsize = strlen( dn ) + 1;
data = ldbm_fetch( db->dbc_db,
key );
free( dn );
if ( data.dptr == NULL ) {
(void) dn_normalize_case( val );
if ( ! be_issuffix( be,
val ) ) {
Debug( LDAP_DEBUG_PARSE, "no parent \"%s\" of \"%s\"\n", dn, val, 0 );
}
*buf = '\0';
lcur = 0;
line[0] = '\0';
continue;
}
(void) memcpy( (char *) &pid,
data.dptr, sizeof(ID) );
ldbm_datum_free( db->dbc_db, data);
}
sprintf( buf2, "%c%ld", EQ_PREFIX, pid );
key.dptr = buf2;
key.dsize = strlen( buf2 ) + 1;
if ( bdb2i_idl_insert_key( be, db2, key, id )
!= 0 ) {
perror( "bdb2i_idl_insert_key" );
exit( EXIT_FAILURE );
}
}
}
*buf = '\0';
lcur = 0;
line[0] = '\0';
}
}
#ifdef SLAP_CLEANUP
bdb2i_cache_close( be, db2 );
bdb2i_cache_close( be, db );
#endif
slap_shutdown(dbnum);
slap_destroy();
exit( EXIT_SUCCESS );
}

View File

@ -1,260 +0,0 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
#include "portable.h"
#include <stdio.h>
#include <ac/stdlib.h>
#include <ac/ctype.h>
#include <ac/string.h>
#include <ac/socket.h>
#include <ac/unistd.h>
#include "ldif2common.h"
#include "../back-ldbm/back-ldbm.h"
#include "ldif.h"
int
main( int argc, char **argv )
{
char *linep, *buf;
int lineno, elineno;
int lmax;
ID id;
DBCache *db;
#ifndef DN_INDICES
DBCache *db2;
#endif
Backend *be = NULL;
struct ldbminfo *li;
struct berval bv;
struct berval *vals[2];
slap_ldif_init( argc, argv, LDIF2ID2CHILDREN, "ldbm", SLAP_TOOL_MODE );
slap_startup(dbnum);
be = &backends[dbnum];
/* disable write sync'ing */
li = (struct ldbminfo *) be->be_private;
li->li_dbcachewsync = 0;
/*
* first, make the dn2id index
*/
if ( (db = ldbm_cache_open( be, "dn2id", LDBM_SUFFIX, LDBM_NEWDB ))
== NULL ) {
perror( "dn2id file" );
exit( EXIT_FAILURE );
}
id = 0;
lineno = 0;
buf = NULL;
lmax = 0;
vals[0] = &bv;
vals[1] = NULL;
while ( slap_read_ldif( &lineno, &buf, &lmax, &id, 0 ) ) {
char *type, *val, *s;
ber_len_t vlen;
Datum key, data;
ldbm_datum_init( key );
ldbm_datum_init( data );
s = buf;
elineno = 0;
while ( (linep = ldif_getline( &s )) != NULL ) {
elineno++;
if ( ldif_parse_line( linep, &type, &val,
&vlen ) != 0 ) {
Debug( LDAP_DEBUG_PARSE,
"bad line %d in entry ending at line %d ignored\n",
elineno, lineno, 0 );
continue;
}
if ( strcmp( type, "dn" ) == 0 )
break;
}
if ( linep == NULL ) {
fprintf( stderr, "entry %ld has no dn\n",
id );
} else {
if( val != NULL ) {
(void) dn_normalize_case( val );
}
#ifndef DN_INDICES
key.dptr = val;
key.dsize = strlen( val != NULL ? val : "" ) + 1;
#else
key.dsize = strlen( val != NULL ? val : "" ) + 2;
key.dptr = ch_malloc( key.dsize );
sprintf( key.dptr, "%c%s", DN_BASE_PREFIX,
val != NULL ? val : "" );
#endif
data.dptr = (char *) &id;
data.dsize = sizeof(ID);
if ( ldbm_store( db->dbc_db, key, data,
LDBM_REPLACE ) != 0 ) {
perror( "dn2id ldbm_store" );
exit( EXIT_FAILURE );
}
#ifdef DN_INDICES
free( key.dptr );
{
int rc = 0;
char *pdn = dn_parent( NULL, val );
if( pdn != NULL ) {
key.dsize = strlen( pdn ) + 2;
key.dptr = ch_malloc( key.dsize );
sprintf( key.dptr, "%c%s",
DN_ONE_PREFIX, pdn );
rc = idl_insert_key( be, db, key, id );
free( key.dptr );
}
if( rc == -1 ) {
perror( "dn2id dn_parent insert" );
exit( EXIT_FAILURE );
}
}
{
int rc = 0;
char **subtree = dn_subtree( NULL, val );
if( subtree != NULL ) {
int i;
for( i=0; subtree[i] != NULL; i++ ) {
key.dsize = strlen( subtree[i] ) + 2;
key.dptr = ch_malloc( key.dsize );
sprintf( key.dptr, "%c%s",
DN_SUBTREE_PREFIX, subtree[i] );
rc = idl_insert_key( be, db, key, id );
free( key.dptr );
if( rc == -1 ) {
perror( "dn2id dn_subtree insert" );
exit( EXIT_FAILURE );
}
}
charray_free( subtree );
}
}
#endif
}
}
if ( buf )
free( buf );
#ifndef DN_INDICES
/*
* next, make the id2children index
*/
if ( (db2 = ldbm_cache_open( be, "id2children", LDBM_SUFFIX,
LDBM_NEWDB )) == NULL ) {
perror( "id2children file" );
exit( EXIT_FAILURE );
}
rewind( stdin );
id = 0;
buf = NULL;
lineno = 0;
lmax = 0;
vals[0] = &bv;
vals[1] = NULL;
while ( slap_read_ldif( &lineno, &buf, &lmax, &id, 0 ) ) {
char *type, *val, *s, *dn;
ber_len_t vlen;
ID pid;
char buf2[20];
Datum key, data;
ldbm_datum_init( key );
ldbm_datum_init( data );
s = buf;
while ( (linep = ldif_getline( &s )) != NULL ) {
if ( ldif_parse_line( linep, &type, &val,
&vlen ) != 0 ) {
Debug( LDAP_DEBUG_PARSE,
"bad line %d ignored\n",
lineno, 0, 0 );
continue;
}
if ( strcmp( type, "dn" ) == 0 )
break;
}
if ( linep == NULL ) {
fprintf( stderr, "entry %ld has no dn\n",
id );
} else {
if ( (dn = dn_parent( be, val ))
== NULL ) {
pid = 0;
} else {
(void) dn_normalize_case( dn );
key.dptr = dn;
key.dsize = strlen( dn ) + 1;
data = ldbm_fetch( db->dbc_db,
key );
free( dn );
if ( data.dptr == NULL ) {
(void) dn_normalize_case( val );
if ( ! be_issuffix( be,
val ) ) {
Debug( LDAP_DEBUG_PARSE, "no parent \"%s\" of \"%s\"\n", dn, val, 0 );
}
continue;
}
(void) memcpy( (char *) &pid,
data.dptr, sizeof(ID) );
ldbm_datum_free( db->dbc_db, data);
}
sprintf( buf2, "%c%ld", EQ_PREFIX, pid );
key.dptr = buf2;
key.dsize = strlen( buf2 ) + 1;
if ( idl_insert_key( be, db2, key, id )
!= 0 ) {
perror( "idl_insert_key" );
exit( EXIT_FAILURE );
}
}
}
#ifdef SLAP_CLEANUP
ldbm_cache_close( be, db2 );
ldbm_cache_close( be, db );
#endif
#else
#ifdef SLAP_CLEANUP
ldbm_cache_close( be, db );
#endif
#endif
slap_shutdown(dbnum);
slap_destroy();
return( EXIT_SUCCESS );
}

View File

@ -1,160 +0,0 @@
# Microsoft Developer Studio Project File - Name="ldif2id2children" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 5.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=ldif2id2children - Win32 Single Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "ldif2id2children.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "ldif2id2children.mak"\
CFG="ldif2id2children - Win32 Single Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "ldif2id2children - Win32 Release" (based on\
"Win32 (x86) Console Application")
!MESSAGE "ldif2id2children - Win32 Debug" (based on\
"Win32 (x86) Console Application")
!MESSAGE "ldif2id2children - Win32 Single Debug" (based on\
"Win32 (x86) Console Application")
!MESSAGE "ldif2id2children - Win32 Single Release" (based on\
"Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "ldif2id2children - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "..\Release"
# PROP Intermediate_Dir "..\Release\ldif2id2children"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 hs_regex.lib libdb.lib ws2_32.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "ldif2id2children - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "..\Debug"
# PROP Intermediate_Dir "..\Debug\ldif2id2children"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 hs_regex.lib libdb.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
!ELSEIF "$(CFG)" == "ldif2id2children - Win32 Single Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "ldif2id2"
# PROP BASE Intermediate_Dir "ldif2id2"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "..\SDebug"
# PROP Intermediate_Dir "..\SDebug\ldif2id2children"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib hs_regexd.lib libdbs.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 hs_regex.lib libdbs.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
!ELSEIF "$(CFG)" == "ldif2id2children - Win32 Single Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "ldif2id0"
# PROP BASE Intermediate_Dir "ldif2id0"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "..\SRelease"
# PROP Intermediate_Dir "..\SRelease\ldif2id2children"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 hs_regex.lib libdb.lib ws2_32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 hs_regex.lib libdbs.lib ws2_32.lib /nologo /subsystem:console /machine:I386
!ENDIF
# Begin Target
# Name "ldif2id2children - Win32 Release"
# Name "ldif2id2children - Win32 Debug"
# Name "ldif2id2children - Win32 Single Debug"
# Name "ldif2id2children - Win32 Single Release"
# Begin Source File
SOURCE=.\ldif2common.c
# End Source File
# Begin Source File
SOURCE=.\ldif2common.h
# End Source File
# Begin Source File
SOURCE=.\ldif2id2children.c
# End Source File
# Begin Source File
SOURCE=.\mimic.c
# End Source File
# End Target
# End Project

View File

@ -1,129 +0,0 @@
#include "portable.h"
#include <stdio.h>
#include <ac/stdlib.h>
#include <ac/ctype.h>
#include <ac/string.h>
#include <ac/socket.h>
#include <ac/unistd.h>
#include "ldif2common.h"
#include "../back-bdb2/back-bdb2.h"
int
main( int argc, char **argv )
{
int i, stop;
char *buf;
char line[BUFSIZ], idbuf[BUFSIZ];
int lmax, lcur;
ID id;
ID maxid;
struct dbcache *db;
Backend *be = NULL;
struct ldbminfo *li;
struct berval bv;
struct berval *vals[2];
FILE *fp;
slap_ldif_init( argc, argv, LDIF2ID2ENTRY, "bdb2", SLAP_TOOLID_MODE );
slap_startup(dbnum);
be = &backends[dbnum];
/* disable write sync'ing */
li = (struct ldbminfo *) be->be_private;
li->li_dbcachewsync = 0;
if ( (db = bdb2i_cache_open( be, "id2entry", BDB2_SUFFIX, LDBM_NEWDB ))
== NULL ) {
perror( "id2entry file" );
exit( EXIT_FAILURE );
}
id = 0;
maxid = 0;
stop = 0;
buf = NULL;
lcur = lmax = 0;
vals[0] = &bv;
vals[1] = NULL;
while ( ! stop ) {
Datum key, data;
ldbm_datum_init( key );
ldbm_datum_init( data );
if ( fgets( line, sizeof(line), stdin ) != NULL ) {
int len, idlen;
len = strlen( line );
if ( buf == NULL || *buf == '\0' ) {
if (!isdigit((unsigned char) line[0])) {
sprintf( idbuf, "%ld\n", id + 1 );
idlen = strlen( idbuf );
} else {
id = atol(line) - 1;
idlen = 0;
}
} else {
idlen = 0;
}
while ( lcur + len + idlen + 1 > lmax ) {
lmax += BUFSIZ;
buf = (char *) ch_realloc( buf, lmax );
}
if ( idlen > 0 ) {
strcpy( buf + lcur, idbuf );
lcur += idlen;
}
strcpy( buf + lcur, line );
lcur += len;
} else {
stop = 1;
}
if ( line[0] == '\n' || stop && buf && *buf ) {
if ( *buf != '\n' ) {
int len;
id++;
if ( id > maxid )
maxid = id;
key.dptr = (char *) &id;
key.dsize = sizeof(ID);
data.dptr = buf;
len = strlen(buf);
if (buf[len - 1] == '\n')
buf[--len] = '\0';
data.dsize = len + 1;
if ( ldbm_store( db->dbc_db, key, data,
LDBM_INSERT ) != 0 ) {
fputs("id2entry ldbm_store failed\n",
stderr);
exit( EXIT_FAILURE );
}
}
*buf = '\0';
lcur = 0;
line[0] = '\0';
}
}
maxid++;
bdb2i_put_nextid( be, maxid );
#ifdef SLAP_CLEANUP
bdb2i_cache_close( be, db );
#endif
slap_shutdown(dbnum);
slap_destroy();
exit( EXIT_SUCCESS );
}

View File

@ -1,87 +0,0 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
#include "portable.h"
#include <stdio.h>
#include <ac/stdlib.h>
#include <ac/ctype.h>
#include <ac/string.h>
#include <ac/socket.h>
#include <ac/unistd.h>
#include "ldif2common.h"
#include "../back-ldbm/back-ldbm.h"
int
main( int argc, char **argv )
{
char *buf;
int lineno;
int lmax;
ID id;
ID maxid;
DBCache *db;
Backend *be = NULL;
struct ldbminfo *li;
struct berval bv;
struct berval *vals[2];
slap_ldif_init( argc, argv, LDIF2ID2ENTRY, "ldbm", SLAP_TOOLID_MODE );
slap_startup(dbnum);
be = &backends[dbnum];
/* disable write sync'ing */
li = (struct ldbminfo *) be->be_private;
li->li_dbcachewsync = 0;
if ( (db = ldbm_cache_open( be, "id2entry", LDBM_SUFFIX, LDBM_NEWDB ))
== NULL ) {
perror( "id2entry file" );
exit( EXIT_FAILURE );
}
id = 0;
maxid = 0;
buf = NULL;
lmax = 0;
vals[0] = &bv;
vals[1] = NULL;
while ( slap_read_ldif( &lineno, &buf, &lmax, &id, 1 ) ) {
Datum key, data;
ldbm_datum_init( key );
ldbm_datum_init( data );
if ( id > maxid )
maxid = id;
key.dptr = (char *) &id;
key.dsize = sizeof(ID);
data.dptr = buf;
data.dsize = strlen( buf ) + 1;
if ( ldbm_store( db->dbc_db, key, data,
LDBM_INSERT ) != 0 ) {
fputs("id2entry ldbm_store failed\n",
stderr);
exit( EXIT_FAILURE );
}
}
maxid++;
put_nextid( be, maxid );
#ifdef SLAP_CLEANUP
ldbm_cache_close( be, db );
#endif
slap_shutdown(dbnum);
slap_destroy();
return( EXIT_SUCCESS );
}

View File

@ -1,107 +0,0 @@
#include "portable.h"
#include <stdio.h>
#include <ac/stdlib.h>
#include <ac/ctype.h>
#include <ac/string.h>
#include <ac/socket.h>
#include <ac/unistd.h>
#include "ldif2common.h"
#include "../back-bdb2/back-bdb2.h"
#include "ldif.h"
int
main( int argc, char **argv )
{
int i, stop;
char *linep, *buf, *attr;
char line[BUFSIZ];
int lineno, elineno;
int lmax, lcur, indexmask, syntaxmask;
unsigned long id;
Backend *be = NULL;
struct ldbminfo *li;
struct berval bv;
struct berval *vals[2];
slap_ldif_init( argc, argv, LDIF2INDEX, "bdb2", SLAP_TOOL_MODE );
attr = attr_normalize( argv[argc - 1] );
slap_startup(dbnum);
be = &backends[dbnum];
/* disable write sync'ing */
li = (struct ldbminfo *) be->be_private;
li->li_dbcachewsync = 0;
bdb2i_attr_masks( be->be_private, attr, &indexmask, &syntaxmask );
if ( indexmask == 0 ) {
exit( EXIT_SUCCESS );
}
id = 0;
stop = 0;
lineno = 0;
buf = NULL;
lcur = lmax = 0;
vals[0] = &bv;
vals[1] = NULL;
while ( ! stop ) {
char *type, *val, *s;
ber_len_t vlen;
if ( fgets( line, sizeof(line), stdin ) != NULL ) {
int len;
lineno++;
len = strlen( line );
while ( lcur + len + 1 > lmax ) {
lmax += BUFSIZ;
buf = (char *) ch_realloc( buf, lmax );
}
strcpy( buf + lcur, line );
lcur += len;
} else {
stop = 1;
}
if ( line[0] == '\n' || stop && buf && *buf ) {
if ( *buf != '\n' ) {
if (isdigit((unsigned char) *buf)) {
id = atol(buf);
} else {
id++;
}
s = buf;
elineno = 0;
while ( (linep = ldif_getline( &s )) != NULL ) {
elineno++;
if ( ldif_parse_line( linep, &type, &val,
&vlen ) != 0 ) {
Debug( LDAP_DEBUG_PARSE,
"bad line %d in entry ending at line %d ignored\n",
elineno, lineno, 0 );
continue;
}
if ( strcasecmp( type, attr ) == 0 ) {
bv.bv_val = val;
bv.bv_len = vlen;
bdb2i_index_add_values( be, attr,
vals, id );
}
}
}
*buf = '\0';
lcur = 0;
}
}
slap_shutdown(dbnum);
slap_destroy();
exit( EXIT_SUCCESS );
}

View File

@ -1,87 +0,0 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
#include "portable.h"
#include <stdio.h>
#include <ac/stdlib.h>
#include <ac/ctype.h>
#include <ac/string.h>
#include <ac/socket.h>
#include <ac/unistd.h>
#include "ldif2common.h"
#include "../back-ldbm/back-ldbm.h"
#include "ldif.h"
int
main( int argc, char **argv )
{
char *linep, *buf, *attr;
int lineno, elineno;
int lmax;
int indexmask, syntaxmask;
ID id;
Backend *be = NULL;
struct ldbminfo *li;
struct berval bv;
struct berval *vals[2];
slap_ldif_init( argc, argv, LDIF2INDEX, "ldbm", SLAP_TOOL_MODE );
attr = attr_normalize( argv[argc - 1] );
slap_startup(dbnum);
be = &backends[dbnum];
/* disable write sync'ing */
li = (struct ldbminfo *) be->be_private;
li->li_dbcachewsync = 0;
attr_masks( be->be_private, attr, &indexmask, &syntaxmask );
if ( indexmask == 0 ) {
exit( EXIT_SUCCESS );
}
id = 0;
lineno = 0;
buf = NULL;
lmax = 0;
vals[0] = &bv;
vals[1] = NULL;
while ( slap_read_ldif( &lineno, &buf, &lmax, &id, 0 ) ) {
char *type, *val, *s;
ber_len_t vlen;
s = buf;
elineno = 0;
while ( (linep = ldif_getline( &s )) != NULL ) {
elineno++;
if ( ldif_parse_line( linep, &type, &val,
&vlen ) != 0 ) {
Debug( LDAP_DEBUG_PARSE,
"bad line %d in entry ending at line %d ignored\n",
elineno, lineno, 0 );
continue;
}
if ( strcasecmp( type, attr ) == 0 ) {
bv.bv_val = val;
bv.bv_len = vlen;
index_change_values( be,
attr,
vals,
id,
__INDEX_ADD_OP);
}
}
}
slap_shutdown(dbnum);
slap_destroy();
return( EXIT_SUCCESS );
}

View File

@ -1,250 +0,0 @@
#include "portable.h"
#include <stdio.h>
#include <ac/stdlib.h>
#include <ac/string.h>
#include <ac/ctype.h>
#include <ac/socket.h>
#include <ac/unistd.h>
#include <ac/wait.h>
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#include "ldif2common.h"
#include "../back-bdb2/back-bdb2.h"
#include "ldif.h"
#define INDEXCMD "ldif2index-bdb2"
#define ID2ENTRYCMD "ldif2id2entry-bdb2"
#define ID2CHILDRENCMD "ldif2id2children-bdb2"
#define MAXARGS 100
static void fork_child( char *prog, char *args[] );
static void wait4kids( int nkidval );
static int maxkids = 1;
static int nkids;
int
main( int argc, char **argv )
{
int i, stop;
char *linep, *buf;
char *args[MAXARGS];
char buf2[20], buf3[20];
char line[BUFSIZ];
char cmd[MAXPATHLEN];
int lineno, elineno;
int lmax, lcur;
ID id;
Backend *be = NULL;
struct ldbminfo *li;
struct berval bv;
struct berval *vals[2];
Avlnode *avltypes = NULL;
slap_ldif_init( argc, argv, LDIF2LDBM, "bdb2", SLAP_TOOL_MODE );
slap_startup(dbnum);
be = &backends[dbnum];
/* disable write sync'ing */
li = (struct ldbminfo *) be->be_private;
li->li_dbcachewsync = 0;
/*
* generate the id2entry index
*/
i = 0;
sprintf( cmd, "%s/%s", sbindir, ID2ENTRYCMD );
args[i++] = cmd;
args[i++] = "-i";
args[i++] = inputfile;
args[i++] = "-f";
args[i++] = tailorfile;
args[i++] = "-n";
sprintf( buf2, "%d", dbnum+1 );
args[i++] = buf2;
if ( ldap_debug ) {
sprintf( buf3, "%d", ldap_debug );
args[i++] = "-d";
args[i++] = buf3;
}
args[i++] = NULL;
fork_child( cmd, args );
/*
* generate the dn2id and id2children indexes
*/
i = 0;
sprintf( cmd, "%s/%s", sbindir, ID2CHILDRENCMD );
args[i++] = cmd;
args[i++] = "-i";
args[i++] = inputfile;
args[i++] = "-f";
args[i++] = tailorfile;
args[i++] = "-n";
sprintf( buf2, "%d", dbnum+1 );
args[i++] = buf2;
if ( ldap_debug ) {
sprintf( buf3, "%d", ldap_debug );
args[i++] = "-d";
args[i++] = buf3;
}
args[i++] = NULL;
fork_child( cmd, args );
maxkids = cmdkids;
/*
* generate the attribute indexes
*/
i = 0;
sprintf( cmd, "%s/%s", sbindir, INDEXCMD );
args[i++] = cmd;
args[i++] = "-i";
args[i++] = inputfile;
args[i++] = "-f";
args[i++] = tailorfile;
args[i++] = "-n";
sprintf( buf2, "%d", dbnum+1 );
args[i++] = buf2;
if ( ldap_debug ) {
sprintf( buf3, "%d", ldap_debug );
args[i++] = "-d";
args[i++] = buf3;
}
args[i++] = NULL; /* will hold the attribute name */
args[i++] = NULL;
id = 0;
stop = 0;
buf = NULL;
lineno = 0;
lcur = lmax = 0;
vals[0] = &bv;
vals[1] = NULL;
while ( ! stop ) {
char *type, *val, *s;
ber_len_t vlen;
int indexmask, syntaxmask;
if ( fgets( line, sizeof(line), stdin ) != NULL ) {
int len;
lineno++;
len = strlen( line );
while ( lcur + len + 1 > lmax ) {
lmax += BUFSIZ;
buf = (char *) ch_realloc( buf, lmax );
}
strcpy( buf + lcur, line );
lcur += len;
} else {
stop = 1;
}
if ( line[0] == '\n' || stop && buf && *buf ) {
id++;
s = buf;
elineno = 0;
while ( (linep = ldif_getline( &s )) != NULL ) {
elineno++;
if ( ldif_parse_line( linep, &type, &val, &vlen )
!= 0 ) {
Debug( LDAP_DEBUG_PARSE,
"bad line %d in entry ending at line %d ignored\n",
elineno, lineno, 0 );
continue;
}
if ( !isascii( *type ) || isdigit( *type ) )
continue;
type = strdup( type );
if ( avl_insert( &avltypes, type, (AVL_CMP) strcasecmp,
avl_dup_error ) != 0 ) {
free( type );
} else {
bdb2i_attr_masks( be->be_private, type,
&indexmask, &syntaxmask );
if ( indexmask ) {
args[i - 2] = type;
fork_child( cmd, args );
}
}
}
*buf = '\0';
lcur = 0;
}
}
slap_shutdown(dbnum);
wait4kids( -1 );
slap_destroy();
exit( EXIT_SUCCESS );
}
static void
fork_child( char *prog, char *args[] )
{
int pid;
wait4kids( maxkids );
switch ( pid = fork() ) {
case 0: /* child */
execvp( prog, args );
fprintf( stderr, "%s: ", prog );
perror( "execv" );
exit( EXIT_FAILURE );
break;
case -1: /* trouble */
fprintf( stderr, "Could not fork to run %s\n", prog );
perror( "fork" );
break;
default: /* parent */
nkids++;
break;
}
}
static void
wait4kids( int nkidval )
{
int status;
unsigned char *p;
while ( nkids >= nkidval ) {
wait( &status );
p = (unsigned char *) &status;
if ( p[sizeof(int) - 1] == 0177 ) {
fprintf( stderr,
"stopping: child stopped with signal %d\n",
p[sizeof(int) - 2] );
} else if ( p[sizeof(int) - 1] != 0 ) {
fprintf( stderr,
"stopping: child terminated with signal %d\n",
p[sizeof(int) - 1] );
exit( p[sizeof(int) - 1] );
} else if ( p[sizeof(int) - 2] != 0 ) {
fprintf( stderr,
"stopping: child exited with status %d\n",
p[sizeof(int) - 2] );
exit( p[sizeof(int) - 2] );
} else {
nkids--;
}
}
}

View File

@ -1,298 +0,0 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
#include "portable.h"
#include <stdio.h>
#include <ac/stdlib.h>
#include <ac/string.h>
#include <ac/ctype.h>
#include <ac/socket.h>
#include <ac/unistd.h>
#include <ac/wait.h>
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#include "ldif2common.h"
#include "../back-ldbm/back-ldbm.h"
#include "ldif.h"
#define INDEXCMD "ldif2index" EXEEXT
#define ID2ENTRYCMD "ldif2id2entry" EXEEXT
#define ID2CHILDRENCMD "ldif2id2children" EXEEXT
#define MAXARGS 100
static void fork_child( char *prog, char *args[] );
static void wait4kids( int nkidval );
static int maxkids = 1;
static int nkids;
int
main( int argc, char **argv )
{
int i;
char *linep, *buf;
char *args[MAXARGS];
char buf2[20], buf3[20];
char cmd[MAXPATHLEN];
int lineno, elineno;
int lmax;
ID id;
Backend *be = NULL;
struct ldbminfo *li;
struct berval bv;
struct berval *vals[2];
Avlnode *avltypes = NULL;
slap_ldif_init( argc, argv, LDIF2LDBM, "ldbm", SLAP_TOOL_MODE );
slap_startup(dbnum);
be = &backends[dbnum];
/* disable write sync'ing */
li = (struct ldbminfo *) be->be_private;
li->li_dbcachewsync = 0;
/*
* generate the id2entry index
*/
i = 0;
sprintf( cmd, "%s/%s", sbindir, ID2ENTRYCMD );
args[i++] = cmd;
args[i++] = "-i";
args[i++] = inputfile;
args[i++] = "-f";
args[i++] = tailorfile;
args[i++] = "-n";
sprintf( buf2, "%d", dbnum+1 );
args[i++] = buf2;
if ( ldap_debug ) {
sprintf( buf3, "%d", ldap_debug );
args[i++] = "-d";
args[i++] = buf3;
}
args[i++] = NULL;
fork_child( cmd, args );
/*
* generate the dn2id and id2children indexes
*/
i = 0;
sprintf( cmd, "%s/%s", sbindir, ID2CHILDRENCMD );
args[i++] = cmd;
args[i++] = "-i";
args[i++] = inputfile;
args[i++] = "-f";
args[i++] = tailorfile;
args[i++] = "-n";
sprintf( buf2, "%d", dbnum+1 );
args[i++] = buf2;
if ( ldap_debug ) {
sprintf( buf3, "%d", ldap_debug );
args[i++] = "-d";
args[i++] = buf3;
}
args[i++] = NULL;
fork_child( cmd, args );
maxkids = cmdkids;
/*
* generate the attribute indexes
*/
i = 0;
sprintf( cmd, "%s/%s", sbindir, INDEXCMD );
args[i++] = cmd;
args[i++] = "-i";
args[i++] = inputfile;
args[i++] = "-f";
args[i++] = tailorfile;
args[i++] = "-n";
sprintf( buf2, "%d", dbnum+1 );
args[i++] = buf2;
if ( ldap_debug ) {
sprintf( buf3, "%d", ldap_debug );
args[i++] = "-d";
args[i++] = buf3;
}
args[i++] = NULL; /* will hold the attribute name */
args[i++] = NULL;
id = 0;
buf = NULL;
lineno = 0;
lmax = 0;
vals[0] = &bv;
vals[1] = NULL;
while ( slap_read_ldif( &lineno, &buf, &lmax, &id, 0 ) ) {
char *type, *val, *s;
ber_len_t vlen;
int indexmask, syntaxmask;
s = buf;
elineno = 0;
while ( (linep = ldif_getline( &s )) != NULL ) {
elineno++;
if ( ldif_parse_line( linep, &type, &val, &vlen )
!= 0 ) {
Debug( LDAP_DEBUG_PARSE,
"bad line %d in entry ending at line %d ignored\n",
elineno, lineno, 0 );
continue;
}
if ( !isascii( *type ) || isdigit( *type ) )
continue;
type = strdup( type );
if ( avl_insert( &avltypes, type, (AVL_CMP) strcasecmp,
avl_dup_error ) != 0 ) {
free( type );
} else {
attr_masks( be->be_private, type,
&indexmask, &syntaxmask );
if ( indexmask ) {
args[i - 2] = type;
fork_child( cmd, args );
}
}
}
}
wait4kids( -1 );
slap_shutdown(dbnum);
slap_destroy();
return( EXIT_SUCCESS );
}
#ifdef WIN32
static HANDLE processes[MAXIMUM_WAIT_OBJECTS];
static void
fork_child( char *prog, char *args[] )
{
PROCESS_INFORMATION proc_info;
PROCESS_INFORMATION *pinfo = &proc_info;
STARTUPINFO start_info;
int i;
char cmdLine[2048];
wait4kids( maxkids );
i = 1;
memset( &start_info, 0, sizeof(STARTUPINFO) );
memset( cmdLine, 0, sizeof(cmdLine) );
strcpy( cmdLine, prog );
while ( args[i] != NULL )
{
strcat( cmdLine, " " );
strcat( cmdLine, args[i] );
i++;
}
if ( !CreateProcess( NULL, cmdLine, NULL, NULL,
TRUE, CREATE_NEW_CONSOLE,
NULL, NULL, &start_info, pinfo ) )
{
fprintf( stderr, "Could not create %s: ", prog );
perror( "CreateProcess" );
exit (EXIT_FAILURE);
}
processes[nkids] = proc_info.hProcess;
nkids++;
}
static void
wait4kids( int nkidval )
{
DWORD wait_index;
while( nkids >= nkidval )
{
wait_index = WaitForMultipleObjects( nkids, processes, FALSE, INFINITE );
/*
* processes[wait_index] completed. Move any remaining indexes into its
* place in the array so it stays filled.
*/
if ( nkids > 1 )
{
memcpy ( &processes[wait_index], &processes[wait_index+1], sizeof(HANDLE)*(nkids-1) );
processes[nkids] = 0;
}
nkids--;
}
}
#else
static void
fork_child( char *prog, char *args[] )
{
int pid;
wait4kids( maxkids );
switch ( pid = fork() ) {
case 0: /* child */
execvp( prog, args );
fprintf( stderr, "%s: ", prog );
perror( "execv" );
exit( EXIT_FAILURE );
break;
case -1: /* trouble */
fprintf( stderr, "Could not fork to run %s\n", prog );
perror( "fork" );
break;
default: /* parent */
nkids++;
break;
}
}
static void
wait4kids( int nkidval )
{
int status;
unsigned char *p;
while ( nkids >= nkidval ) {
wait( &status );
p = (unsigned char *) &status;
if ( p[sizeof(int) - 1] == 0177 ) {
fprintf( stderr,
"stopping: child stopped with signal %d\n",
p[sizeof(int) - 2] );
} else if ( p[sizeof(int) - 1] != 0 ) {
fprintf( stderr,
"stopping: child terminated with signal %d\n",
p[sizeof(int) - 1] );
exit( p[sizeof(int) - 1] );
} else if ( p[sizeof(int) - 2] != 0 ) {
fprintf( stderr,
"stopping: child exited with status %d\n",
p[sizeof(int) - 2] );
exit( p[sizeof(int) - 2] );
} else {
nkids--;
}
}
}
#endif

View File

@ -1,158 +0,0 @@
# Microsoft Developer Studio Project File - Name="ldif2ldbm" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 5.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=ldif2ldbm - Win32 Single Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "ldif2ldbm.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "ldif2ldbm.mak" CFG="ldif2ldbm - Win32 Single Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "ldif2ldbm - Win32 Release" (based on\
"Win32 (x86) Console Application")
!MESSAGE "ldif2ldbm - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE "ldif2ldbm - Win32 Single Debug" (based on\
"Win32 (x86) Console Application")
!MESSAGE "ldif2ldbm - Win32 Single Release" (based on\
"Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "ldif2ldbm - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "..\Release"
# PROP Intermediate_Dir "..\Release\ldif2ldbm"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 hs_regex.lib libdb.lib ws2_32.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "ldif2ldbm - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "..\Debug"
# PROP Intermediate_Dir "..\Debug\ldif2dlbm"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 hs_regex.lib libdb.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
!ELSEIF "$(CFG)" == "ldif2ldbm - Win32 Single Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "ldif2ldb"
# PROP BASE Intermediate_Dir "ldif2ldb"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "..\SDebug"
# PROP Intermediate_Dir "..\SDebug\ldif2dlbm"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c
# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib shell32.lib hs_regexd.lib libdbs.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 hs_regex.lib libdbs.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
!ELSEIF "$(CFG)" == "ldif2ldbm - Win32 Single Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "ldif2ld0"
# PROP BASE Intermediate_Dir "ldif2ld0"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "..\SRelease"
# PROP Intermediate_Dir "..\SRelease\ldif2dlbm"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 hs_regex.lib libdb.lib ws2_32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 hs_regex.lib libdbs.lib ws2_32.lib /nologo /subsystem:console /machine:I386
!ENDIF
# Begin Target
# Name "ldif2ldbm - Win32 Release"
# Name "ldif2ldbm - Win32 Debug"
# Name "ldif2ldbm - Win32 Single Debug"
# Name "ldif2ldbm - Win32 Single Release"
# Begin Source File
SOURCE=.\ldif2common.c
# End Source File
# Begin Source File
SOURCE=.\ldif2common.h
# End Source File
# Begin Source File
SOURCE=..\tools\ldif2ldbm.c
# End Source File
# Begin Source File
SOURCE=.\mimic.c
# End Source File
# End Target
# End Project

View File

@ -6,10 +6,8 @@
#include <ac/string.h>
#include <ac/unistd.h>
#include <ldbm.h>
#include <lber.h>
#include <ldap.h>
#include "portable.h"
#include <ldbm.h>
#define CACHE_SIZE 1000000
#define MODE 0600
@ -23,6 +21,7 @@ extern char *phonetic(char *);
extern int ldap_debug;
int slap_debug;
int ldap_syslog;
int ldap_syslog_level;

View File

@ -0,0 +1,83 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
#include "portable.h"
#include <stdio.h>
#include <ac/stdlib.h>
#include <ac/ctype.h>
#include <ac/string.h>
#include <ac/socket.h>
#include <ac/unistd.h>
#include "slapcommon.h"
int
main( int argc, char **argv )
{
char *buf;
int lineno;
int lmax;
int rc = EXIT_SUCCESS;
slap_tool_init( "slapadd", SLAPADD, argc, argv );
slap_startup( be );
if( !be->be_entry_open &&
!be->be_entry_close &&
!be->be_entry_put )
{
fprintf( stderr, "%s: database doesn't support necessary operations.\n",
progname );
exit( EXIT_FAILURE );
}
buf = NULL;
lmax = 0;
if( be->be_entry_open( be, 1 ) != 0 ) {
fprintf( stderr, "%s: could not open database.\n",
progname );
exit( EXIT_FAILURE );
}
while( ldif_read_record( ldiffp, &lineno, &buf, &lmax ) ) {
ID id;
Entry *e = str2entry( buf );
if( e == NULL ) {
fprintf( stderr, "%s: could not parse entry at line %d\n",
progname, lineno );
rc = EXIT_FAILURE;
continue;
}
id = be->be_entry_put( be, e );
if( id == NOID ) {
fprintf( stderr, "%s: could not add entry (%s) at line %d\n",
progname, e->e_dn, lineno );
rc = EXIT_FAILURE;
} else if ( verbose ) {
fprintf( stderr, "added: \"%s\" (%08ld)\n",
e->e_dn, (long) id );
}
entry_free( e );
}
be->be_entry_close( be );
if( be->be_sync ) {
be->be_sync( be );
}
slap_shutdown( be );
slap_destroy();
return rc;
}

View File

@ -1,29 +1,27 @@
# Microsoft Developer Studio Project File - Name="ldif2id2entry" - Package Owner=<4>
# Microsoft Developer Studio Project File - Name="slapadd" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 5.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=ldif2id2entry - Win32 Single Debug
CFG=slapadd - Win32 Single Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "ldif2id2entry.mak".
!MESSAGE NMAKE /f "slapadd.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "ldif2id2entry.mak" CFG="ldif2id2entry - Win32 Single Debug"
!MESSAGE NMAKE /f "slapadd.mak" CFG="slapadd - Win32 Single Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "ldif2id2entry - Win32 Release" (based on\
!MESSAGE "slapadd - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "slapadd - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE "slapadd - Win32 Single Debug" (based on\
"Win32 (x86) Console Application")
!MESSAGE "ldif2id2entry - Win32 Debug" (based on\
"Win32 (x86) Console Application")
!MESSAGE "ldif2id2entry - Win32 Single Debug" (based on\
"Win32 (x86) Console Application")
!MESSAGE "ldif2id2entry - Win32 Single Release" (based on\
!MESSAGE "slapadd - Win32 Single Release" (based on\
"Win32 (x86) Console Application")
!MESSAGE
@ -33,7 +31,7 @@ CFG=ldif2id2entry - Win32 Single Debug
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "ldif2id2entry - Win32 Release"
!IF "$(CFG)" == "slapadd - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
@ -43,7 +41,7 @@ RSC=rc.exe
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "..\Release"
# PROP Intermediate_Dir "..\Release\ldif2id2entry"
# PROP Intermediate_Dir "..\Release\slapadd"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
@ -57,17 +55,17 @@ LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 hs_regex.lib libdb.lib ws2_32.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "ldif2id2entry - Win32 Debug"
!ELSEIF "$(CFG)" == "slapadd - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "ldif2id2"
# PROP BASE Intermediate_Dir "ldif2id2"
# PROP BASE Output_Dir "ldif2"
# PROP BASE Intermediate_Dir "ldif2"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "..\Debug"
# PROP Intermediate_Dir "..\Debug\ldif2id2entry"
# PROP Intermediate_Dir "..\Debug\slapadd"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
@ -81,18 +79,18 @@ LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 hs_regex.lib libdb.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
!ELSEIF "$(CFG)" == "ldif2id2entry - Win32 Single Debug"
!ELSEIF "$(CFG)" == "slapadd - Win32 Single Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "ldif2id2"
# PROP BASE Intermediate_Dir "ldif2id2"
# PROP BASE Output_Dir "ldif2"
# PROP BASE Intermediate_Dir "ldif2"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "..\SDebug"
# PROP Intermediate_Dir "..\SDebug\ldif2id2entry"
# PROP Intermediate_Dir "..\SDebug\slapadd"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
@ -106,7 +104,7 @@ LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib hs_regexd.lib libdbs.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 hs_regexd.lib libdbs.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
!ELSEIF "$(CFG)" == "ldif2id2entry - Win32 Single Release"
!ELSEIF "$(CFG)" == "slapadd - Win32 Single Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
@ -117,7 +115,7 @@ LINK32=link.exe
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "..\SRelease"
# PROP Intermediate_Dir "..\SRelease\ldif2id2entry"
# PROP Intermediate_Dir "..\SRelease\slapadd"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
@ -135,25 +133,25 @@ LINK32=link.exe
# Begin Target
# Name "ldif2id2entry - Win32 Release"
# Name "ldif2id2entry - Win32 Debug"
# Name "ldif2id2entry - Win32 Single Debug"
# Name "ldif2id2entry - Win32 Single Release"
# Begin Source File
SOURCE=.\ldif2common.c
# End Source File
# Begin Source File
SOURCE=.\ldif2common.h
# End Source File
# Begin Source File
SOURCE=.\ldif2id2entry.c
# End Source File
# Name "slapadd - Win32 Release"
# Name "slapadd - Win32 Debug"
# Name "slapadd - Win32 Single Debug"
# Name "slapadd - Win32 Single Release"
# Begin Source File
SOURCE=.\mimic.c
# End Source File
# Begin Source File
SOURCE=.\slapadd.c
# End Source File
# Begin Source File
SOURCE=.\slapcommon.c
# End Source File
# Begin Source File
SOURCE=.\slapcommon.h
# End Source File
# End Target
# End Project

View File

@ -0,0 +1,73 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
#include "portable.h"
#include <stdio.h>
#include <ac/stdlib.h>
#include <ac/ctype.h>
#include <ac/socket.h>
#include <ac/string.h>
#include "slapcommon.h"
int
main( int argc, char **argv )
{
ID id;
int rc = EXIT_SUCCESS;
slap_tool_init( "slapcat", SLAPCAT, argc, argv );
slap_startup( be );
if( !be->be_entry_open &&
!be->be_entry_close &&
!be->be_entry_first &&
!be->be_entry_next &&
!be->be_entry_get )
{
fprintf( stderr, "%s: database doesn't support necessary operations.\n",
progname );
exit( EXIT_FAILURE );
}
if( be->be_entry_open( be, 0 ) != 0 ) {
fprintf( stderr, "%s: could not open database.\n",
progname );
exit( EXIT_FAILURE );
}
for ( id = be->be_entry_first( be );
id != NOID;
id = be->be_entry_next( be ) )
{
char *data;
int len;
Entry* e = be->be_entry_get( be, id );
if( verbose ) {
printf( "# id=%08lx\n", (long) id );
}
if ( e == NULL ) {
printf("# no data for entry id=%08lx\n\n", (long) id );
rc = EXIT_FAILURE;
continue;
}
data = entry2str( e, &len );
fputs( data, ldiffp );
fputs( "\n", ldiffp );
}
be->be_entry_close( be );
slap_shutdown( be );
slap_destroy();
return rc;
}

View File

@ -1,27 +1,27 @@
# Microsoft Developer Studio Project File - Name="ldbmcat" - Package Owner=<4>
# Microsoft Developer Studio Project File - Name="slapcat" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 5.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=ldbmcat - Win32 Single Debug
CFG=slapcat - Win32 Single Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "ldbmcat.mak".
!MESSAGE NMAKE /f "slapcat.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "ldbmcat.mak" CFG="ldbmcat - Win32 Single Debug"
!MESSAGE NMAKE /f "slapcat.mak" CFG="slapcat - Win32 Single Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "ldbmcat - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "ldbmcat - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE "ldbmcat - Win32 Single Debug" (based on\
!MESSAGE "slapcat - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "slapcat - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE "slapcat - Win32 Single Debug" (based on\
"Win32 (x86) Console Application")
!MESSAGE "ldbmcat - Win32 Single Release" (based on\
!MESSAGE "slapcat - Win32 Single Release" (based on\
"Win32 (x86) Console Application")
!MESSAGE
@ -31,7 +31,7 @@ CFG=ldbmcat - Win32 Single Debug
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "ldbmcat - Win32 Release"
!IF "$(CFG)" == "slapcat - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
@ -41,7 +41,7 @@ RSC=rc.exe
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "..\Release"
# PROP Intermediate_Dir "..\Release\ldbmcat"
# PROP Intermediate_Dir "..\Release\slapcat"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
@ -53,19 +53,19 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 libdb.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\libraries\Release"
# ADD LINK32 hs_regex.lib libdb.lib ws2_32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\libraries\Release"
!ELSEIF "$(CFG)" == "ldbmcat - Win32 Debug"
!ELSEIF "$(CFG)" == "slapcat - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "ldbmcat_"
# PROP BASE Intermediate_Dir "ldbmcat_"
# PROP BASE Output_Dir "slapcat"
# PROP BASE Intermediate_Dir "slapcat"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "..\Debug"
# PROP Intermediate_Dir "..\Debug\ldbmcat"
# PROP Intermediate_Dir "..\Debug\slapcat"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
@ -77,20 +77,20 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 libdb.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\libraries\Debug"
# ADD LINK32 hs_regex.lib libdb.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\libraries\Debug"
!ELSEIF "$(CFG)" == "ldbmcat - Win32 Single Debug"
!ELSEIF "$(CFG)" == "slapcat - Win32 Single Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "ldbmcat_"
# PROP BASE Intermediate_Dir "ldbmcat_"
# PROP BASE Output_Dir "slapcat"
# PROP BASE Intermediate_Dir "slapcat"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "..\Sdebug"
# PROP Intermediate_Dir "..\SDebug\ldbmcat"
# PROP Intermediate_Dir "..\SDebug\slapcat"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
@ -102,19 +102,19 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 oldbm32.lib libdb.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\libraries\Debug"
# ADD LINK32 libdb.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\libraries\Debug"
# ADD LINK32 hs_regex.lib libdbs.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\libraries\Debug"
!ELSEIF "$(CFG)" == "ldbmcat - Win32 Single Release"
!ELSEIF "$(CFG)" == "slapcat - Win32 Single Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "ldbmcat0"
# PROP BASE Intermediate_Dir "ldbmcat0"
# PROP BASE Output_Dir "slapcat"
# PROP BASE Intermediate_Dir "slapcat"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "..\SRelease"
# PROP Intermediate_Dir "..\SRelease\ldbmcat"
# PROP Intermediate_Dir "..\SRelease\slapcat"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
@ -126,23 +126,31 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libdb.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\libraries\Release"
# ADD LINK32 libdbs.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\libraries\Release"
# ADD LINK32 hs_regex.lib libdbs.lib ws2_32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\libraries\Release"
!ENDIF
# Begin Target
# Name "ldbmcat - Win32 Release"
# Name "ldbmcat - Win32 Debug"
# Name "ldbmcat - Win32 Single Debug"
# Name "ldbmcat - Win32 Single Release"
# Begin Source File
SOURCE=.\ldbmcat.c
# End Source File
# Name "slapcat - Win32 Release"
# Name "slapcat - Win32 Debug"
# Name "slapcat - Win32 Single Debug"
# Name "slapcat - Win32 Single Release"
# Begin Source File
SOURCE=.\mimic.c
# End Source File
# Begin Source File
SOURCE=.\slapcat.c
# End Source File
# Begin Source File
SOURCE=.\slapcommon.c
# End Source File
# Begin Source File
SOURCE=.\slapcommon.h
# End Source File
# End Target
# End Project

View File

@ -0,0 +1,203 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
/* slapcommon.c - common routine for the slap tools */
#include "portable.h"
#include <stdio.h>
#include <ac/stdlib.h>
#include <ac/ctype.h>
#include <ac/string.h>
#include <ac/socket.h>
#include <ac/unistd.h>
#include "slapcommon.h"
#include "lutil.h"
char *progname = NULL;
char *conffile = SLAPD_DEFAULT_CONFIGFILE;
int truncatemode = 0;
int verbose = 0;
char *ldiffile = NULL;
FILE *ldiffp = NULL;
Backend *be = NULL;
static void
usage( int tool )
{
char *options = NULL;
fprintf( stderr,
"usage: %s [-v] [-d debuglevel] [-f configfile]\n"
"\t[-n databasenumber | -b suffix]", progname );
switch( tool ) {
case SLAPADD:
options = "\t[-l ldiffile]\n";
break;
case SLAPCAT:
options = "\t[-l ldiffile]\n";
break;
case SLAPINDEX:
options = "\tattributetype\n";
break;
}
if( options != NULL ) {
fputs( options, stderr );
}
exit( EXIT_FAILURE );
}
/*
* slap_tool_init - initialize slap utility, handle program options.
* arguments:
* name program name
* tool tool code
* argc, argv command line arguments
*/
void
slap_tool_init(
const char* name,
int tool,
int argc, char **argv )
{
char *options;
char *base = NULL;
int rc, i, dbnum;
int mode = SLAP_TOOL_MODE;
progname = lutil_progname( name, argc, argv );
switch( tool ) {
case SLAPADD:
options = "b:d:f:l:n:tv";
break;
case SLAPINDEX:
options = "b:d:f:n:v";
break;
case SLAPCAT:
options = "b:d:f:l:n:v";
break;
default:
fprintf( stderr, "%s: unknown tool mode (%d)\n", tool );
exit( EXIT_FAILURE );
}
ldiffile = NULL;
conffile = SLAPD_DEFAULT_CONFIGFILE;
dbnum = -1;
while ( (i = getopt( argc, argv, options )) != EOF ) {
switch ( i ) {
case 'b':
base = strdup( optarg );
case 'd': /* turn on debugging */
ldap_debug = atoi( optarg );
break;
case 'f': /* specify a conf file */
conffile = strdup( optarg );
break;
case 'l': /* LDIF file */
ldiffile = strdup( optarg );
break;
case 'n': /* which config file db to index */
dbnum = atoi( optarg ) - 1;
break;
case 't': /* turn on truncate */
truncatemode++;
mode |= SLAP_TRUNCATE_MODE;
break;
case 'v': /* turn on verbose */
verbose++;
break;
default:
usage( tool );
break;
}
}
if ( ( argc != optind + (tool == SLAPINDEX ? 1 : 0) )
|| (dbnum >= 0 && base != NULL ) )
{
usage( tool );
}
if ( ldiffile == NULL ) {
ldiffp = tool == SLAPCAT ? stdout : stdin;
} else if( (ldiffp = fopen( ldiffile, tool == SLAPCAT ? "w" : "r" ))
== NULL )
{
perror( ldiffile );
exit( EXIT_FAILURE );
}
/*
* initialize stuff and figure out which backend we're dealing with
*/
rc = slap_init( mode, progname );
if (rc != 0 ) {
fprintf( stderr, "%s: slap_init failed!\n", progname );
exit( EXIT_FAILURE );
}
read_config( conffile );
if ( !nbackends ) {
fprintf( stderr, "No databases found in config file\n" );
exit( EXIT_FAILURE );
}
if( base != NULL ) {
char *tbase = ch_strdup( base );
if( dn_normalize_case( tbase ) == NULL ) {
fprintf( stderr, "%s: slap_init invalid suffix (\"%s\")\n",
progname, base );
exit( EXIT_FAILURE );
}
be = select_backend( tbase );
free( tbase );
if( be == NULL ) {
fprintf( stderr, "%s: slap_init no backend for \"%s\"\n",
progname, base );
exit( EXIT_FAILURE );
}
} else if ( dbnum == -1 ) {
be = &backends[dbnum=0];
} else if ( dbnum < 0 || dbnum > (nbackends-1) ) {
fprintf( stderr,
"Database number selected via -n is out of range\n"
"Must be in the range 1 to %d (number of databases in the config file)\n",
nbackends );
exit( EXIT_FAILURE );
} else {
be = &backends[dbnum];
}
}

View File

@ -0,0 +1,36 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
/* slapcommon.h - common definitions for the slap tools */
#ifndef SLAPCOMMON_H_
#define SLAPCOMMON_H_ 1
#define SLAPD_TOOLS 1
#include "ldap_defaults.h"
#include "../slap.h"
enum slaptool {
SLAPCAT=1, /* database -> LDIF tool */
SLAPADD, /* LDIF -> database tool */
SLAPINDEX, /* database index tool */
SLAPTEST /* database testing tool */
};
extern char *progname;
extern char *conffile;
extern Backend *be;
extern int appendmode;
extern int verbose;
extern char *ldiffile;
extern FILE *ldiffp;
void slap_tool_init LDAP_P((
const char* name,
int tool,
int argc, char **argv ));
#endif /* SLAPCOMMON_H_ */

View File

@ -0,0 +1,109 @@
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
#include "portable.h"
#include <stdio.h>
#include <ac/stdlib.h>
#include <ac/ctype.h>
#include <ac/string.h>
#include <ac/socket.h>
#include <ac/unistd.h>
#include "slapcommon.h"
int
main( int argc, char **argv )
{
char *type;
ID id;
int rc = EXIT_SUCCESS;
slap_tool_init( "slapindex", SLAPINDEX, argc, argv );
slap_startup( be );
if( !be->be_entry_open &&
!be->be_entry_close &&
!be->be_entry_first &&
!be->be_entry_next &&
!be->be_entry_get &&
!be->be_index_attr &&
!be->be_index_change )
{
fprintf( stderr, "%s: database doesn't support necessary operations.\n",
progname );
exit( EXIT_FAILURE );
}
type = attr_normalize( argv[argc - 1] );
if ( !be->be_index_attr( be, type ) ) {
fprintf( stderr, "attribute type \"%s\": no indices to generate\n",
type );
exit( EXIT_FAILURE );
}
if( be->be_entry_open( be, 0 ) != 0 ) {
fprintf( stderr, "%s: could not open database.\n",
progname );
exit( EXIT_FAILURE );
}
for ( id = be->be_entry_first( be );
id != NOID;
id = be->be_entry_next( be ) )
{
Attribute *attr;
struct berval **values;
Entry* e = be->be_entry_get( be, id );
struct berval bv;
struct berval *bvals[2];
if ( e == NULL ) {
fprintf( stderr,
"entry id=%08lx: no data\n", (long) id );
rc = EXIT_FAILURE;
continue;
}
if( verbose ) {
printf("indexing id=%08lx dn=\"%s\"\n",
id, e->e_dn );
}
if( strcasecmp( type, "dn" ) == 0 ) {
attr = attr_find( e->e_attrs, type );
if( attr == NULL ) continue;
values = attr->a_vals;
} else {
bv.bv_val = e->e_ndn;
bv.bv_len = strlen( bv.bv_val );
bvals[0] = &bv;
bvals[1] = NULL;
values = bvals;
}
if ( be->be_index_change( be,
type, attr->a_vals, id, SLAP_INDEX_ADD_OP ) )
{
rc = EXIT_FAILURE;
}
entry_free( e );
}
(void) be->be_entry_close( be );
slap_shutdown( be );
slap_destroy();
return( rc );
}

View File

@ -1,29 +1,28 @@
# Microsoft Developer Studio Project File - Name="ldif2index" - Package Owner=<4>
# Microsoft Developer Studio Project File - Name="slapindex" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 5.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=ldif2index - Win32 Single Debug
CFG=slapindex - Win32 Single Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "ldif2index.mak".
!MESSAGE NMAKE /f "slapindex.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "ldif2index.mak" CFG="ldif2index - Win32 Single Debug"
!MESSAGE NMAKE /f "slapindex.mak" CFG="slapindex - Win32 Single Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "ldif2index - Win32 Release" (based on\
!MESSAGE "slapindex - Win32 Release" (based on\
"Win32 (x86) Console Application")
!MESSAGE "ldif2index - Win32 Debug" (based on\
!MESSAGE "slapindex - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE "slapindex - Win32 Single Debug" (based on\
"Win32 (x86) Console Application")
!MESSAGE "ldif2index - Win32 Single Debug" (based on\
"Win32 (x86) Console Application")
!MESSAGE "ldif2index - Win32 Single Release" (based on\
!MESSAGE "slapindex - Win32 Single Release" (based on\
"Win32 (x86) Console Application")
!MESSAGE
@ -33,7 +32,7 @@ CFG=ldif2index - Win32 Single Debug
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "ldif2index - Win32 Release"
!IF "$(CFG)" == "slapindex - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
@ -43,7 +42,7 @@ RSC=rc.exe
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "..\Release"
# PROP Intermediate_Dir "..\Release\ldif2index"
# PROP Intermediate_Dir "..\Release\slapindex"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
@ -57,7 +56,7 @@ LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 hs_regex.lib libdb.lib ws2_32.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "ldif2index - Win32 Debug"
!ELSEIF "$(CFG)" == "slapindex - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
@ -67,7 +66,7 @@ LINK32=link.exe
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "..\Debug"
# PROP Intermediate_Dir "..\Debug\ldif2index"
# PROP Intermediate_Dir "..\Debug\slapindex"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
@ -81,7 +80,7 @@ LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 hs_regex.lib libdb.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
!ELSEIF "$(CFG)" == "ldif2index - Win32 Single Debug"
!ELSEIF "$(CFG)" == "slapindex - Win32 Single Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
@ -92,7 +91,7 @@ LINK32=link.exe
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "..\SDebug"
# PROP Intermediate_Dir "..\SDebug\ldif2index"
# PROP Intermediate_Dir "..\SDebug\slapindex"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
@ -106,7 +105,7 @@ LINK32=link.exe
# ADD BASE LINK32 kernel32.lib shell32.lib hs_regexd.lib libdbs.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 hs_regex.lib libdbs.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
!ELSEIF "$(CFG)" == "ldif2index - Win32 Single Release"
!ELSEIF "$(CFG)" == "slapindex - Win32 Single Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
@ -117,7 +116,7 @@ LINK32=link.exe
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "..\SRelease"
# PROP Intermediate_Dir "..\SRelease\ldif2index"
# PROP Intermediate_Dir "..\SRelease\slapindex"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
@ -135,25 +134,25 @@ LINK32=link.exe
# Begin Target
# Name "ldif2index - Win32 Release"
# Name "ldif2index - Win32 Debug"
# Name "ldif2index - Win32 Single Debug"
# Name "ldif2index - Win32 Single Release"
# Begin Source File
SOURCE=.\ldif2common.c
# End Source File
# Begin Source File
SOURCE=.\ldif2common.h
# End Source File
# Begin Source File
SOURCE=.\ldif2index.c
# End Source File
# Name "slapindex - Win32 Release"
# Name "slapindex - Win32 Debug"
# Name "slapindex - Win32 Single Debug"
# Name "slapindex - Win32 Single Release"
# Begin Source File
SOURCE=.\mimic.c
# End Source File
# Begin Source File
SOURCE=.\slapcommon.c
# End Source File
# Begin Source File
SOURCE=.\slapcommon.h
# End Source File
# Begin Source File
SOURCE=.\slapindex.c
# End Source File
# End Target
# End Project

View File

@ -3,7 +3,6 @@ DATADIR=$SRCDIR/data
PROGDIR=./progs
if test "$BACKEND" = "bdb2" ; then
LDIF2LDBM=../servers/slapd/tools/ldif2ldbm-bdb2
CONF=$DATADIR/slapd-bdb2-master.conf
ACLCONF=$DATADIR/slapd-bdb2-acl.conf
MASTERCONF=$DATADIR/slapd-bdb2-repl-master.conf
@ -11,7 +10,6 @@ if test "$BACKEND" = "bdb2" ; then
REFSLAVECONF=$DATADIR/slapd-bdb2-ref-slave.conf
TIMING="-t"
else
LDIF2LDBM=../servers/slapd/tools/ldif2ldbm
CONF=$DATADIR/slapd-master.conf
ACLCONF=$DATADIR/slapd-acl.conf
MASTERCONF=$DATADIR/slapd-repl-master.conf
@ -28,6 +26,8 @@ PASSWDCONF=$DATADIR/slapd-passwd.conf
CLIENTDIR=../clients/tools
#CLIENTDIR=/usr/local/bin
LDIF2LDBM="../servers/slapd/tools/slapadd $LDAP_VERBOSE"
SLAPD=../servers/slapd/slapd
SLURPD=../servers/slurpd/slurpd
LDAPSEARCH="$CLIENTDIR/ldapsearch $PROTO -LLL"

View File

@ -7,7 +7,7 @@ echo "Cleaning up in $DBDIR..."
rm -f $DBDIR/[!C]*
echo "Running ldif2ldbm to build slapd database..."
$LDIF2LDBM -f $CONF -i $LDIF -e ../servers/slapd/tools
$LDIF2LDBM -f $CONF -l $LDIF
RC=$?
if test $RC != 0 ; then
echo "ldif2ldbm failed!"

View File

@ -27,7 +27,7 @@ echo "Cleaning up in $DBDIR..."
rm -f $DBDIR/[!C]*
echo "Running ldif2ldbm to build slapd database..."
$LDIF2LDBM -f $NIS_CONF -i $NIS_LDIF -e ../servers/slapd/tools
$LDIF2LDBM -f $NIS_CONF -l $NIS_LDIF
RC=$?
if [ $RC != 0 ]; then
echo "ldif2ldbm failed!"

Some files were not shown because too many files have changed in this diff Show More