Revamp cf/db.m4; test LMDB

This commit is contained in:
Nicolas Williams
2015-06-01 11:48:31 -05:00
parent 76c26281a7
commit c6f24e99f0
18 changed files with 111 additions and 64 deletions

View File

@@ -31,7 +31,7 @@ LDADD = $(LIB_otp) \
$(top_builddir)/lib/asn1/libasn1.la \
$(LIB_roken) \
$(LIB_security) \
$(DBLIB)
$(DB3LIB) $(DB1LIB) $(LMDBLIB) $(NDBMLIB)
$(srcdir)/login-protos.h: $(login_SOURCES)
cd $(srcdir); perl ../../cf/make-proto.pl -o login-protos.h -q -P comment $(login_SOURCES) || rm -f login-protos.h

View File

@@ -24,10 +24,12 @@ AC_ARG_ENABLE(ndbm-db,
AC_ARG_ENABLE(mdb-db,
AS_HELP_STRING([--disable-mdb-db],
[if you don't want OpenLDAP libmdb db]),[
[if you don't want LMDB]),[
])
have_ndbm=no
have_db1=no
have_db3=no
have_lmdb=no
db_type=unknown
AS_IF([test "x$with_berkeley_db" != xno],
@@ -70,11 +72,11 @@ dnl db_create is used by db3 and db4 and db5
],[NULL, NULL, 0])
if test "$ac_cv_func_db_create" = "yes"; then
db_type=db3
have_db3=yes
if test "$ac_cv_funclib_db_create" != "yes"; then
DBLIB="$ac_cv_funclib_db_create"
DB3LIB="$ac_cv_funclib_db_create"
else
DBLIB=""
DB3LIB=""
fi
AC_DEFINE(HAVE_DB3, 1, [define if you have a berkeley db3/4/5 library])
fi
@@ -93,11 +95,11 @@ dnl dbopen is used by db1/db2
],[NULL, 0, 0, 0, NULL])
if test "$ac_cv_func_dbopen" = "yes"; then
db_type=db1
have_db1=yes
if test "$ac_cv_funclib_dbopen" != "yes"; then
DBLIB="$ac_cv_funclib_dbopen"
DB1LIB="$ac_cv_funclib_dbopen"
else
DBLIB=""
DB1LIB=""
fi
AC_DEFINE(HAVE_DB1, 1, [define if you have a berkeley db1/2 library])
fi
@@ -114,9 +116,9 @@ dnl test for ndbm compatability
if test "$ac_cv_func_dbm_firstkey" = "yes"; then
if test "$ac_cv_funclib_dbm_firstkey" != "yes"; then
LIB_NDBM="$ac_cv_funclib_dbm_firstkey"
NDBMLIB="$ac_cv_funclib_dbm_firstkey"
else
LIB_NDBM=""
NDBMLIB=""
fi
AC_DEFINE(HAVE_DB_NDBM, 1, [define if you have ndbm compat in db])
AC_DEFINE(HAVE_NEW_DB, 1, [Define if NDBM really is DB (creates files *.db)])
@@ -128,13 +130,15 @@ dnl test for ndbm compatability
]) # fi berkeley db
if test "$enable_mdb_db" != "no"; then
if test "$db_type" = "unknown"; then
AC_CHECK_HEADER(mdb.h, [
AC_CHECK_LIB(mdb, mdb_env_create, db_type=mdb; DBLIB="-lmdb"
AC_DEFINE(HAVE_MDB, 1, [define if you have the OpenLDAP mdb library]))])
fi
fi
AS_IF([test "x$enable_mdb_db" != xno],
[AC_CHECK_HEADER(lmdb.h, [
AC_CHECK_LIB(lmdb, mdb_env_create, have_lmdb=yes; LMDBLIB="-llmdb"
AC_DEFINE(HAVE_LMDB, 1, [define if you have the LMDB library]))])])
AS_IF([test "x$have_db3" = xyes -a "$db_type" = unknown], db_type=db3, db_type=unknown)
AS_IF([test "x$have_db1" = xyes -a "$db_type" = unknown], db_type=db1, db_type=unknown)
AS_IF([test "x$have_lmdb" = xyes -a "$db_type" = unknown], db_type=lmdb, db_type=unknown)
if test "$enable_ndbm_db" != "no"; then
@@ -157,16 +161,12 @@ if test "$enable_ndbm_db" != "no"; then
if test "$ac_cv_func_dbm_firstkey" = "yes"; then
if test "$ac_cv_funclib_dbm_firstkey" != "yes"; then
LIB_NDBM="$ac_cv_funclib_dbm_firstkey"
NDBMLIB="$ac_cv_funclib_dbm_firstkey"
else
LIB_NDBM=""
NDBMLIB=""
fi
AC_DEFINE(HAVE_NDBM, 1, [define if you have a ndbm library])dnl
have_ndbm=yes
if test "$db_type" = "unknown"; then
db_type=ndbm
DBLIB="$LIB_NDBM"
fi
else
$as_unset ac_cv_func_dbm_firstkey
@@ -184,15 +184,14 @@ if test "$enable_ndbm_db" != "no"; then
if test "$ac_cv_func_dbm_firstkey" = "yes"; then
if test "$ac_cv_funclib_dbm_firstkey" != "yes"; then
LIB_NDBM="$ac_cv_funclib_dbm_firstkey"
NDBMLIB="$ac_cv_funclib_dbm_firstkey"
else
LIB_NDBM=""
NDBMLIB=""
fi
AC_DEFINE(HAVE_NDBM, 1, [define if you have a ndbm library])dnl
have_ndbm=yes
if test "$db_type" = "unknown"; then
db_type=ndbm
DBLIB="$LIB_NDBM"
fi
fi
fi
@@ -229,10 +228,10 @@ int main(int argc, char **argv)
fi],[AC_MSG_RESULT([no])],[AC_MSG_RESULT([no-cross])])
fi
AM_CONDITIONAL(HAVE_DB1, test "$db_type" = db1)dnl
AM_CONDITIONAL(HAVE_DB3, test "$db_type" = db3)dnl
AM_CONDITIONAL(HAVE_MDB, test "$db_type" = mdb)dnl
AM_CONDITIONAL(HAVE_NDBM, test "$db_type" = ndbm)dnl
AM_CONDITIONAL(HAVE_DB1, test "$have_db1" = yes)dnl
AM_CONDITIONAL(HAVE_DB3, test "$have_db3" = yes)dnl
AM_CONDITIONAL(HAVE_LMDB, test "$have_lmdb" = yes)dnl
AM_CONDITIONAL(HAVE_NDBM, test "$have_ndbm" = yes)dnl
AM_CONDITIONAL(HAVE_DBHEADER, test "$dbheader" != "")dnl
## it's probably not correct to include LDFLAGS here, but we might
@@ -243,7 +242,14 @@ for i in $LDFLAGS; do
-L*) z="$z $i";;
esac
done
DBLIB="$z $DBLIB"
AC_SUBST(DBLIB)dnl
AC_SUBST(LIB_NDBM)dnl
DB3LIB="$z $DB3LIB"
DB1LIB="$z $DB1LIB"
LMDBLIB="$z $LMDBLIB"
NDMBLIB="$z $NDBMLIB"
AC_SUBST(DB3LIB)dnl
AC_SUBST(DB1LIB)dnl
AC_SUBST(LMDBLIB)dnl
AC_SUBST(NDBMLIB)dnl
AC_SUBST(NDBMLIB)dnl
AC_SUBST(db_type)dnl
])

View File

@@ -65,7 +65,7 @@ LDADD_common = \
$(LIB_hcrypto) \
$(top_builddir)/lib/asn1/libasn1.la \
$(LIB_roken) \
$(DBLIB)
$(DB3LIB) $(DB1LIB) $(LMDBLIB) $(NDBMLIB)
kadmind_LDADD = $(top_builddir)/lib/kadm5/libkadm5srv.la \
../lib/gssapi/libgssapi.la \

View File

@@ -86,7 +86,7 @@ hprop_LDADD = \
$(LIB_hcrypto) \
$(top_builddir)/lib/asn1/libasn1.la \
$(LIB_roken) \
$(DBLIB)
$(DB3LIB) $(DB1LIB) $(LMDBLIB) $(NDBMLIB)
hpropd_LDADD = \
$(top_builddir)/lib/hdb/libhdb.la \
@@ -95,7 +95,7 @@ hpropd_LDADD = \
$(LIB_hcrypto) \
$(top_builddir)/lib/asn1/libasn1.la \
$(LIB_roken) \
$(DBLIB)
$(DB3LIB) $(DB1LIB) $(LMDBLIB) $(NDBMLIB)
if PKINIT
LIB_pkinit = $(top_builddir)/lib/hx509/libhx509.la
@@ -110,14 +110,14 @@ libkdc_la_LIBADD = \
$(LIB_hcrypto) \
$(top_builddir)/lib/asn1/libasn1.la \
$(LIB_roken) \
$(DBLIB)
$(DB3LIB) $(DB1LIB) $(LMDBLIB) $(NDBMLIB)
LDADD = $(top_builddir)/lib/hdb/libhdb.la \
$(top_builddir)/lib/krb5/libkrb5.la \
$(LIB_hcrypto) \
$(top_builddir)/lib/asn1/libasn1.la \
$(LIB_roken) \
$(DBLIB)
$(DB3LIB) $(DB1LIB) $(LMDBLIB) $(NDBMLIB)
kdc_LDADD = libkdc.la $(LDADD) $(LIB_pidfile) $(CAPNG_LIBS)

View File

@@ -22,7 +22,7 @@ kpasswdd_LDADD = \
$(LDADD) \
$(LIB_pidfile) \
$(LIB_dlopen) \
$(DBLIB)
$(DB3LIB) $(DB1LIB) $(LMDBLIB) $(NDBMLIB)
LDADD = $(top_builddir)/lib/krb5/libkrb5.la \
$(LIB_hcrypto) \

View File

@@ -110,8 +110,7 @@ libhdb_la_LIBADD = \
$(LIBADD_roken) \
$(ldap_lib) \
$(LIB_dlopen) \
$(DBLIB) \
$(LIB_NDBM)
$(DB3LIB) $(DB1LIB) $(LMDBLIB) $(NDBMLIB)
HDB_PROTOS = $(srcdir)/hdb-protos.h $(srcdir)/hdb-private.h

View File

@@ -157,6 +157,10 @@ DB_rename(krb5_context context, HDB *db, const char *new_name)
int ret;
char *old, *new;
if (strncmp(new_name, "db:", sizeof("db:") - 1) == 0)
new_name += sizeof("db:") - 1;
else if (strncmp(new_name, "db1:", sizeof("db1:") - 1) == 0)
new_name += sizeof("db1:") - 1;
asprintf(&old, "%s.db", db->hdb_name);
asprintf(&new, "%s.db", new_name);
ret = rename(old, new);

View File

@@ -168,6 +168,11 @@ DB_rename(krb5_context context, HDB *db, const char *new_name)
int ret;
char *old, *new;
if (strncmp(new_name, "db:", sizeof("db:") - 1) == 0)
new_name += sizeof("db:") - 1;
else if (strncmp(new_name, "db3:", sizeof("db3:") - 1) == 0)
new_name += sizeof("db3:") - 1;
ret = asprintf(&old, "%s.db", db->hdb_name);
if (ret == -1)
return ENOMEM;

View File

@@ -34,11 +34,11 @@
#include "hdb_locl.h"
#if HAVE_MDB
#if HAVE_LMDB
/* OpenLDAP MDB */
/* LMDB */
#include <mdb.h>
#include <lmdb.h>
#define KILO 1024
@@ -172,12 +172,16 @@ DB_rename(krb5_context context, HDB *db, const char *new_name)
int ret;
char *old, *new;
if (strncmp(new_name, "mdb:", sizeof("mdb:") - 1) == 0)
new_name += sizeof("mdb:") - 1;
else if (strncmp(new_name, "lmdb:", sizeof("lmdb:") - 1) == 0)
new_name += sizeof("lmdb:") - 1;
if (asprintf(&old, "%s.mdb", db->hdb_name) == -1)
return ENOMEM;
if (asprintf(&new, "%s.mdb", new_name) == -1) {
free(old);
return ENOMEM;
}
}
ret = rename(old, new);
free(old);
free(new);
@@ -394,4 +398,4 @@ hdb_mdb_create(krb5_context context, HDB **db,
(*db)->hdb_destroy = DB_destroy;
return 0;
}
#endif /* HAVE_MDB */
#endif /* HAVE_LMDB */

View File

@@ -70,8 +70,9 @@ static struct hdb_method methods[] = {
#if HAVE_DB1
{ HDB_INTERFACE_VERSION, NULL, NULL, "mit-db:", hdb_mitdb_create},
#endif
#if HAVE_MDB
#if HAVE_LMDB
{ HDB_INTERFACE_VERSION, NULL, NULL, "mdb:", hdb_mdb_create},
{ HDB_INTERFACE_VERSION, NULL, NULL, "lmdb:", hdb_mdb_create},
#endif
#if HAVE_NDBM
{ HDB_INTERFACE_VERSION, NULL, NULL, "ndbm:", hdb_ndbm_create},
@@ -90,6 +91,9 @@ static struct hdb_method methods[] = {
#if HAVE_DB1 || HAVE_DB3
static struct hdb_method dbmetod =
{ HDB_INTERFACE_VERSION, NULL, NULL, "", hdb_db_create };
#elif defined(HAVE_LMDB)
static struct hdb_method dbmetod =
{ HDB_INTERFACE_VERSION, NULL, NULL, "", hdb_mdb_create };
#elif defined(HAVE_NDBM)
static struct hdb_method dbmetod =
{ HDB_INTERFACE_VERSION, NULL, NULL, "", hdb_ndbm_create };
@@ -310,7 +314,8 @@ find_method (const char *filename, const char **rest)
return h;
}
}
#if defined(HAVE_DB1) || defined(HAVE_DB3) || defined(HAVE_NDBM)
#if defined(HAVE_DB1) || defined(HAVE_DB3) || defined(HAVE_LMDB) || defined(HAVE_NDBM)
/* XXX This doesn't handle Windows */
if (strncmp(filename, "/", 1) == 0
|| strncmp(filename, "./", 2) == 0
|| strncmp(filename, "../", 3) == 0)

View File

@@ -133,7 +133,7 @@ LDADD = \
$(top_builddir)/lib/asn1/libasn1.la \
$(LIB_hcrypto) \
$(LIB_roken) \
$(DBLIB) \
$(DB3LIB) $(DB1LIB) $(LMDBLIB) $(NDBMLIB) \
$(LIB_dlopen) \
$(LIB_pidfile)
@@ -146,7 +146,7 @@ iprop_log_LDADD = \
$(top_builddir)/lib/sl/libsl.la \
$(LIB_readline) \
$(LIB_roken) \
$(DBLIB) \
$(DB3LIB) $(DB1LIB) $(LMDBLIB) $(NDBMLIB) \
$(LIB_dlopen) \
$(LIB_pidfile)

View File

@@ -21,14 +21,14 @@ libotp_la_LIBADD = $(LIB_hcrypto) $(LIB_roken)
if HAVE_DB1
ndbm_wrap = ndbm_wrap.c ndbm_wrap.h
libotp_la_LIBADD += $(LIB_db_create)
libotp_la_LIBADD += $(DB1LIB)
else
if HAVE_DB3
ndbm_wrap = ndbm_wrap.c ndbm_wrap.h
libotp_la_LIBADD += $(LIB_db_create)
libotp_la_LIBADD += $(DB3LIB)
else
ndbm_wrap =
libotp_la_LIBADD += $(LIB_NDBM)
libotp_la_LIBADD += $(NDBMLIB)
endif
endif

View File

@@ -2,7 +2,7 @@
include $(top_srcdir)/Makefile.am.common
noinst_DATA = krb5.conf krb5.conf-sqlite
noinst_DATA = krb5.conf krb5.conf-sqlite krb5.conf-db3 krb5.conf-db1 krb5.conf-lmdb
noinst_SCRIPTS = have-db
@@ -13,6 +13,7 @@ TESTS = $(check_SCRIPTS)
do_subst = sed -e 's,[@]srcdir[@],$(srcdir),g' \
-e 's,[@]top_builddir[@],$(top_builddir),g' \
-e 's,[@]objdir[@],$(top_builddir)/tests/db,g' \
-e 's,[@]default_db_type[@],$(db_type),g' \
-e 's,[@]EGREP[@],$(EGREP),g'
loaddump-db: loaddump-db.in Makefile
@@ -48,6 +49,18 @@ krb5.conf-sqlite: krb5.conf.in Makefile
$(do_subst) -e 's,[@]type[@],sqlite:,g' < $(srcdir)/krb5.conf.in > krb5.conf-sqlite.tmp
mv krb5.conf-sqlite.tmp krb5.conf-sqlite
krb5.conf-db3: krb5.conf.in Makefile
$(do_subst) -e 's,[@]type[@],db3:,g' < $(srcdir)/krb5.conf.in > krb5.conf-db3.tmp
mv krb5.conf-db3.tmp krb5.conf-db3
krb5.conf-db1: krb5.conf.in Makefile
$(do_subst) -e 's,[@]type[@],db1:,g' < $(srcdir)/krb5.conf.in > krb5.conf-db1.tmp
mv krb5.conf-db1.tmp krb5.conf-db1
krb5.conf-lmdb: krb5.conf.in Makefile
$(do_subst) -e 's,[@]type[@],lmdb:,g' < $(srcdir)/krb5.conf.in > krb5.conf-lmdb.tmp
mv krb5.conf-lmdb.tmp krb5.conf-lmdb
krb5-mit.conf: krb5-mit.conf.in Makefile
$(do_subst) < $(srcdir)/krb5-mit.conf.in > krb5-mit.conf.tmp
mv krb5-mit.conf.tmp krb5-mit.conf
@@ -64,6 +77,9 @@ CLEANFILES= \
mkey.file* \
krb5.conf krb5.conf.tmp \
krb5.conf-sqlite krb5.conf-sqlite.tmp \
krb5.conf-db3 krb5.conf-db3.tmp \
krb5.conf-db1 krb5.conf-db1.tmp \
krb5.conf-lmdb krb5.conf-lmdb.tmp \
krb5-mit.conf krb5-mit.conf.tmp \
tempfile \
log.current-db* \

View File

@@ -38,6 +38,9 @@ srcdir="@srcdir@"
objdir="@objdir@"
EGREP="@EGREP@"
default_db_type=@default_db_type@
db_type=${1:-${default_db_type}}
# If there is no useful db support compile in, disable test
./have-db || exit 77
@@ -46,7 +49,7 @@ R=EXAMPLE.ORG
kadmin="${TESTS_ENVIRONMENT} ../../kadmin/kadmin -l -r $R"
iproplog="${TESTS_ENVIRONMENT} ../../lib/kadm5/iprop-log"
KRB5_CONFIG="${objdir}/krb5.conf"
KRB5_CONFIG="${objdir}/krb5.conf-${db_type}"
export KRB5_CONFIG
rm -f current-db*

View File

@@ -36,6 +36,9 @@ srcdir="@srcdir@"
objdir="@objdir@"
EGREP="@EGREP@"
default_db_type=@default_db_type@
db_type=${1:-${default_db_type}}
testfailed="echo test failed; cat messages.log; exit 1"
# If there is no useful db support compile in, disable test

View File

@@ -47,10 +47,11 @@ IFS="$oldIFS"
while [ $# != 0 ] ; do
case $1 in
db:*) exit 0 ;;
db1:*) exit 0 ;;
gdbm:*) exit 0 ;;
db4:*) exit 0 ;;
db3:*) exit 0 ;;
ldb:*) exit 0 ;;
lmdb:*) exit 0 ;;
esac
shift
done

View File

@@ -47,15 +47,13 @@ kstash="../../kdc/kstash"
hprop="../../kdc/hprop"
hpropd="../../kdc/hpropd"
type="${1}"
typesep="${type:+:}"
typeconf="${type:+-}"
default_db_type=@default_db_type@
db_type=${1:-${default_db_type}}
propdb="${hprop} --database=${db_type}:./current-db -n"
propddb="${hpropd} --database=${db_type}:./current-db -n"
propdb="${hprop} --database=${type}${typesep}./current-db -n"
propddb="${hpropd} --database=${type}${typesep}./current-db -n"
KRB5_CONFIG="${objdir}/krb5.conf${typeconf}${type}"
KRB5_CONFIG="${objdir}/krb5.conf-${db_type}"
export KRB5_CONFIG
rm -f current-db*

View File

@@ -35,6 +35,9 @@ top_builddir="@top_builddir@"
env_setup="@env_setup@"
objdir="@objdir@"
default_db_type=@default_db_type@
db_type=${1:-${default_db_type}}
. ${env_setup}
# If there is no useful db support compile in, disable test