Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
O
OpenLDAP
Manage
Activity
Members
Labels
Plan
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Christopher Ng
OpenLDAP
Commits
862e6242
Commit
862e6242
authored
24 years ago
by
Gary Williams
Browse files
Options
Downloads
Patches
Plain Diff
Added support for Berkeley DB3. Hidden behind
HAVE_BERKELEY_DB3. Configuration support hopefully coming soon.
parent
168e5ed8
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
include/ldbm.h
+4
-4
4 additions, 4 deletions
include/ldbm.h
libraries/libldbm/ldbm.c
+142
-42
142 additions, 42 deletions
libraries/libldbm/ldbm.c
with
146 additions
and
46 deletions
include/ldbm.h
+
4
−
4
View file @
862e6242
...
...
@@ -35,7 +35,7 @@
# else
# include <db.h>
# endif
# ifdef HAVE_BERKELEY_DB2
# if
def
ined(
HAVE_BERKELEY_DB2
) || ( HAVE_BERKELEY_DB3 )
# define R_NOOVERWRITE DB_NOOVERWRITE
# ifndef DEFAULT_DB_PAGE_SIZE
# define DEFAULT_DB_PAGE_SIZE 4096
...
...
@@ -54,12 +54,12 @@ typedef DB *LDBM;
/* for ldbm_open */
#ifdef HAVE_BERKELEY_DB2
#if
def
ined(
HAVE_BERKELEY_DB2
) || defined( HAVE_BERKELEY_DB3 )
typedef
DBC
LDBMCursor
;
# define LDBM_READER DB_RDONLY
# define LDBM_WRITER 0x00000
/* hopefully */
# ifdef HAVE_BERKELEY_DB2_DB_THREAD
# if
def
ined(
HAVE_BERKELEY_DB2_DB_THREAD
) || defined( HAVE_BERKELEY_DB3_DB_THREAD )
# define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
# define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
# else
...
...
@@ -246,7 +246,7 @@ LIBLDBM_F (Datum) ldbm_firstkey( LDBM ldbm, LDBMCursor **cursor );
LIBLDBM_F
(
Datum
)
ldbm_nextkey
(
LDBM
ldbm
,
Datum
key
,
LDBMCursor
*
cursor
);
/* initialization of Datum structures */
#ifdef HAVE_BERKELEY_DB2
#if
def
ined(
HAVE_BERKELEY_DB2
) || defined( HAVE_BERKELEY_DB3 )
LIBLDBM_F
(
void
*
)
ldbm_malloc
(
size_t
size
);
# define ldbm_datum_init(d) ((void)memset(&(d), 0, sizeof(Datum)))
#else
...
...
This diff is collapsed.
Click to expand it.
libraries/libldbm/ldbm.c
+
142
−
42
View file @
862e6242
...
...
@@ -25,7 +25,6 @@
#include
"ldbm.h"
#include
"ldap_pvt_thread.h"
void
ldbm_datum_free
(
LDBM
ldbm
,
Datum
data
)
{
...
...
@@ -59,38 +58,21 @@ ldbm_datum_dup( LDBM ldbm, Datum data )
static
int
ldbm_initialized
=
0
;
#ifndef HAVE_BERKELEY_DB2_DB_THREAD
/* Only DB2 with DB_THREAD is thread-free */
#if defined( HAVE_BERKELEY_DB2_DB_THREAD ) || defined( HAVE_BERKELEY_DB3_DB_THREAD )
#define LDBM_LOCK ((void)0)
#define LDBM_UNLOCK ((void)0)
#else
/* Only DB2 or DB3 with DB_THREAD is thread-free */
static
ldap_pvt_thread_mutex_t
ldbm_big_mutex
;
#define LDBM_LOCK (ldap_pvt_thread_mutex_lock(&ldbm_big_mutex))
#define LDBM_UNLOCK (ldap_pvt_thread_mutex_unlock(&ldbm_big_mutex))
#else
#define LDBM_LOCK ((void)0)
#define LDBM_UNLOCK ((void)0)
#endif
#ifndef HAVE_BERKELEY_DB2
int
ldbm_initialize
(
void
)
{
if
(
ldbm_initialized
++
)
return
1
;
ldap_pvt_thread_mutex_init
(
&
ldbm_big_mutex
);
return
0
;
}
int
ldbm_shutdown
(
void
)
{
if
(
!
ldbm_initialized
)
return
1
;
#if defined( HAVE_BERKELEY_DB2 ) || defined( HAVE_BERKELEY_DB3 )
ldap_pvt_thread_mutex_destroy
(
&
ldbm_big_mutex
);
return
0
;
}
#else
void
*
ldbm_malloc
(
size_t
size
)
...
...
@@ -128,20 +110,26 @@ int ldbm_initialize( void )
ldbm_Env
->
db_errpfx
=
"==>"
;
envFlags
=
DB_CREATE
#ifdef HAVE_BERKELEY_DB2_DB_THREAD
#if
def
ined(
HAVE_BERKELEY_DB2_DB_THREAD
) || defined( HAVE_BERKELEY_DB3_DB_THREAD )
|
DB_THREAD
#endif
;
;
if
(
(
err
=
db_appinit
(
NULL
,
NULL
,
ldbm_Env
,
envFlags
))
)
{
char
error
[
BUFSIZ
];
if
(
#if defined( HAVE_BERKELEY_DB2 )
(
err
=
db_appinit
(
NULL
,
NULL
,
ldbm_Env
,
envFlags
))
#elif defined( HAVE_BERKELEY_DB3 )
(
err
=
db_env_create
(
&
ldbm_Env
,
0
))
#endif
)
{
char
error
[
BUFSIZ
];
if
(
err
<
0
)
{
sprintf
(
error
,
"%ld
\n
"
,
(
long
)
err
);
}
else
{
sprintf
(
error
,
"%s
\n
"
,
strerror
(
err
));
}
#ifdef LDAP_SYSLOG
syslog
(
LOG_INFO
,
"ldbm_initialize(): FATAL error in db_appinit() : %s
\n
"
,
...
...
@@ -149,6 +137,26 @@ int ldbm_initialize( void )
#endif
return
(
1
);
}
#if defined( HAVE_BERKELEY_DB3 )
envFlags
|=
DB_INIT_MPOOL
;
err
=
ldbm_Env
->
open
(
ldbm_Env
,
NULL
,
NULL
,
envFlags
,
0
);
if
(
err
!=
0
)
{
char
error
[
BUFSIZ
];
if
(
err
<
0
)
{
sprintf
(
error
,
"%ld
\n
"
,
(
long
)
err
);
}
else
{
sprintf
(
error
,
"%s
\n
"
,
strerror
(
err
));
}
#ifdef LDAP_SYSLOG
syslog
(
LOG_INFO
,
"ldbm_initialize(): FATAL error in db_appinit() : %s
\n
"
,
error
);
#endif
return
(
1
);
}
#endif
return
0
;
}
...
...
@@ -157,7 +165,31 @@ int ldbm_shutdown( void )
{
if
(
!
ldbm_initialized
)
return
1
;
# ifdef HAVE_BERKELEY_DB3
ldbm_Env
->
close
(
ldbm_Env
,
0
);
#else
db_appexit
(
ldbm_Env
);
#endif
return
0
;
}
#else
int
ldbm_initialize
(
void
)
{
if
(
ldbm_initialized
++
)
return
1
;
ldap_pvt_thread_mutex_init
(
&
ldbm_big_mutex
);
return
0
;
}
int
ldbm_shutdown
(
void
)
{
if
(
!
ldbm_initialized
)
return
1
;
ldap_pvt_thread_mutex_destroy
(
&
ldbm_big_mutex
);
return
0
;
}
...
...
@@ -177,7 +209,42 @@ ldbm_open( char *name, int rw, int mode, int dbcachesize )
{
LDBM
ret
=
NULL
;
#ifdef HAVE_BERKELEY_DB2
#if defined( HAVE_BERKELEY_DB3 )
int
err
;
LDBM_LOCK
;
err
=
db_create
(
&
ret
,
ldbm_Env
,
0
);
if
(
err
!=
0
)
{
char
error
[
BUFSIZ
];
if
(
err
<
0
)
{
sprintf
(
error
,
"%ld
\n
"
,
(
long
)
err
);
}
else
{
sprintf
(
error
,
"%s
\n
"
,
strerror
(
err
));
}
(
void
)
ret
->
close
(
ret
,
0
);
return
NULL
;
}
ret
->
set_pagesize
(
ret
,
DEFAULT_DB_PAGE_SIZE
);
ret
->
set_malloc
(
ret
,
ldbm_malloc
);
ret
->
set_cachesize
(
ret
,
0
,
dbcachesize
,
0
);
err
=
ret
->
open
(
ret
,
name
,
NULL
,
DB_TYPE
,
rw
,
mode
);
LDBM_UNLOCK
;
if
(
err
!=
0
)
{
char
error
[
BUFSIZ
];
if
(
err
<
0
)
{
sprintf
(
error
,
"%ld
\n
"
,
(
long
)
err
);
}
else
{
sprintf
(
error
,
"%s
\n
"
,
strerror
(
err
));
}
(
void
)
ret
->
close
(
ret
,
0
);
return
NULL
;
}
#elif defined( HAVE_BERKELEY_DB2 )
DB_INFO
dbinfo
;
memset
(
&
dbinfo
,
0
,
sizeof
(
dbinfo
));
...
...
@@ -231,7 +298,9 @@ void
ldbm_close
(
LDBM
ldbm
)
{
LDBM_LOCK
;
#ifdef HAVE_BERKELEY_DB2
#if defined( HAVE_BERKELEY_DB3 )
ldbm
->
close
(
ldbm
,
0
);
#elif defined( HAVE_BERKELEY_DB2 )
(
*
ldbm
->
close
)(
ldbm
,
0
);
#else
(
*
ldbm
->
close
)(
ldbm
);
...
...
@@ -254,8 +323,15 @@ ldbm_fetch( LDBM ldbm, Datum key )
int
rc
;
LDBM_LOCK
;
#if defined( HAVE_BERKELEY_DB3 )
ldbm_datum_init
(
data
);
data
.
flags
=
DB_DBT_MALLOC
;
if
(
(
rc
=
ldbm
->
get
(
ldbm
,
NULL
,
&
key
,
&
data
,
0
))
!=
0
)
{
ldbm_datum_free
(
ldbm
,
data
);
#ifdef HAVE_BERKELEY_DB2
#
el
if
def
ined(
HAVE_BERKELEY_DB2
)
ldbm_datum_init
(
data
);
data
.
flags
=
DB_DBT_MALLOC
;
...
...
@@ -285,7 +361,21 @@ ldbm_store( LDBM ldbm, Datum key, Datum data, int flags )
LDBM_LOCK
;
#ifdef HAVE_BERKELEY_DB2
#if defined( HAVE_BERKELEY_DB3 )
rc
=
ldbm
->
put
(
ldbm
,
NULL
,
&
key
,
&
data
,
flags
&
~
LDBM_SYNC
);
if
(
rc
!=
0
)
{
char
error
[
BUFSIZ
];
if
(
rc
<
0
)
{
sprintf
(
error
,
"%ld
\n
"
,
(
long
)
rc
);
}
else
{
sprintf
(
error
,
"%s
\n
"
,
strerror
(
rc
));
}
}
rc
=
(
-
1
)
*
rc
;
#elif defined( HAVE_BERKELEY_DB2 )
rc
=
(
*
ldbm
->
put
)(
ldbm
,
NULL
,
&
key
,
&
data
,
flags
&
~
LDBM_SYNC
);
rc
=
(
-
1
)
*
rc
;
#else
...
...
@@ -307,7 +397,10 @@ ldbm_delete( LDBM ldbm, Datum key )
LDBM_LOCK
;
#ifdef HAVE_BERKELEY_DB2
#if defined( HAVE_BERKELEY_DB3 )
rc
=
ldbm
->
del
(
ldbm
,
NULL
,
&
key
,
0
);
rc
=
(
-
1
)
*
rc
;
#elif defined( HAVE_BERKELEY_DB2 )
rc
=
(
*
ldbm
->
del
)(
ldbm
,
NULL
,
&
key
,
0
);
rc
=
(
-
1
)
*
rc
;
#else
...
...
@@ -325,7 +418,7 @@ ldbm_firstkey( LDBM ldbm, LDBMCursor **dbch )
{
Datum
key
,
data
;
#ifdef HAVE_BERKELEY_DB2
#if
def
ined(
HAVE_BERKELEY_DB2
) || defined( HAVE_BERKELEY_DB3 )
LDBMCursor
*
dbci
;
ldbm_datum_init
(
key
);
...
...
@@ -336,11 +429,12 @@ ldbm_firstkey( LDBM ldbm, LDBMCursor **dbch )
LDBM_LOCK
;
/* acquire a cursor for the DB */
# if defined( HAVE_BERKELEY_DB3 )
if
(
ldbm
->
cursor
(
ldbm
,
NULL
,
&
dbci
,
0
)
)
# elif defined( DB_VERSION_MAJOR ) && defined( DB_VERSION_MINOR ) && \
(DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR < 6)
# if defined( DB_VERSION_MAJOR ) && defined( DB_VERSION_MINOR ) && \
DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR < 6
if
(
(
*
ldbm
->
cursor
)(
ldbm
,
NULL
,
&
dbci
))
if
(
(
*
ldbm
->
cursor
)(
ldbm
,
NULL
,
&
dbci
))
# else
if
(
(
*
ldbm
->
cursor
)(
ldbm
,
NULL
,
&
dbci
,
0
))
...
...
@@ -368,7 +462,7 @@ ldbm_firstkey( LDBM ldbm, LDBMCursor **dbch )
key
.
dsize
=
0
;
}
#ifdef HAVE_BERKELEY_DB2
#if
def
ined(
HAVE_BERKELEY_DB2
) || defined( HAVE_BERKELEY_DB3 )
}
#endif
...
...
@@ -382,7 +476,7 @@ ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *dbcp )
{
Datum
data
;
#ifdef HAVE_BERKELEY_DB2
#if
def
ined(
HAVE_BERKELEY_DB2
) || defined( HAVE_BERKELEY_DB3 )
ldbm_datum_init
(
data
);
ldbm_datum_free
(
ldbm
,
key
);
...
...
@@ -419,6 +513,12 @@ ldbm_errno( LDBM ldbm )
return
(
errno
);
}
/******************************************************************
* *
* END Berkeley section *
* *
******************************************************************/
#elif defined( HAVE_GDBM )
#ifdef HAVE_ST_BLKSIZE
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment