Add BDB 4.1.x support.
================
* UPD: Improve --enable-fhs. [Olaf Hering]
+* UPD: Add BDB 4.1.x support.
* FIX: Codepage file maccode.koi8-r is now correctly cleaned.
* FIX: Fix init script location on SuSE. [Olaf]
* FIX: Build fixes. [Olaf]
-dnl $Id: configure.in,v 1.168.2.4 2003-01-21 16:23:37 srittau Exp $
+dnl $Id: configure.in,v 1.168.2.5 2003-02-08 03:16:52 jmarcus Exp $
dnl configure.in for netatalk
AC_INIT(bin/adv1tov2/adv1tov2.c)
fi
)
-dnl Don't use DB3 unless it's needed
-db3_required=no
+dnl Don't use BDB unless it's needed
+bdb_required=no
dnl Determine DID scheme
AC_MSG_CHECKING([for DID scheme to use])
AC_DEFINE(USE_LASTDID, 1)
AC_MSG_RESULT([last])
elif test "x$did_scheme" = "xcnid"; then
- db3_required="yes"
+ bdb_required="yes"
AC_DEFINE(CNID_DB, 1)
AC_MSG_RESULT([enabling build with CNID DB support])
else
AC_DEFINE(CNID_DB_CDB, 1)
fi
-dnl Check for Berkeley DB3 library
-if test "x$db3_required" = "xyes"; then
- AC_PATH_DB3(, [AC_MSG_ERROR([Berkeley DB3 library not found!])])
+dnl Check for Berkeley DB library
+if test "x$bdb_required" = "xyes"; then
+ AC_PATH_BDB(, [AC_MSG_ERROR([Berkeley DB library not found!])])
fi
dnl Check for quota support
# Makefile.am for libatalk/cnid/
-CFLAGS = @CFLAGS@ @DB3_CFLAGS@
-LIBS = @LIBS@ @DB3_LIBS@
+CFLAGS = @CFLAGS@ @BDB_CFLAGS@
+LIBS = @LIBS@ @BDB_LIBS@
noinst_LTLIBRARIES = libcnid.la
/*
- * $Id: cnid_add.c,v 1.30.2.1 2003-02-08 03:07:24 jmarcus Exp $
+ * $Id: cnid_add.c,v 1.30.2.2 2003-02-08 03:16:53 jmarcus Exp $
*
* Copyright (c) 1999. Adrian Sun (asun@zoology.washington.edu)
* All Rights Reserved. See COPYRIGHT.
if ((ret = txn_abort(tid)) != 0) {
return ret;
}
-#endif /* CNID_DB_CDB */
+#endif
return rc;
}
#ifndef CNID_DB_CDB
DB_TXN *tid;
#endif /* CNID_DB_CDB */
- struct timeval t;
- cnid_t id, save;
+ cnid_t id;
int rc;
if (!(db = CNID) || !st || !name) {
if ((rc = txn_abort(tid)) != 0) {
LOG(log_error, logtype_default, "cnid_add: txn_abort: %s", db_strerror(rc));
errno = CNID_ERR_DB;
- return CNID_INVALID;
+ return CNID_INVALID;
}
goto retry;
#endif /* CNID_DB_CDB */
/*
- * $Id: cnid_close.c,v 1.25 2002-08-30 03:12:52 jmarcus Exp $
+ * $Id: cnid_close.c,v 1.25.2.1 2003-02-08 03:16:53 jmarcus Exp $
*/
#ifdef HAVE_CONFIG_H
if ((db->lockfd > -1) && ((db->flags & CNIDFLAG_DB_RO) == 0)) {
struct flock lock;
- lock.l_type = F_WRLCK;
- lock.l_whence = SEEK_SET;
- lock.l_start = lock.l_len = 0;
- if (fcntl(db->lockfd, F_SETLK, &lock) == 0) {
+ lock.l_type = F_WRLCK;
+ lock.l_whence = SEEK_SET;
+ lock.l_start = lock.l_len = 0;
+ if (fcntl(db->lockfd, F_SETLK, &lock) == 0) {
char **list, **first;
- int cfd = -1;
/* Checkpoint the databases until we can checkpoint no
* more. */
#if DB_VERSION_MAJOR >= 4
+#if DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1
+ db->dbenv->txn_checkpoint(db->dbenv, 0, 0, 0);
+#else
rc = db->dbenv->txn_checkpoint(db->dbenv, 0, 0, 0);
+#endif /* DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1 */
#else
rc = txn_checkpoint(db->dbenv, 0, 0, 0);
-#endif
+#endif /* DB_VERSION_MAJOR >= 4 */
+#if DB_VERSION_MAJOR < 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR < 1)
while (rc == DB_INCOMPLETE) {
#if DB_VERSION_MAJOR >= 4
- rc = db->dbenv->txn_checkpoint(db->dbenv, 0, 0, 0);
+ rc = db->dbenv->txn_checkpoint(db->dbenv, 0, 0, 0);
#else
- rc = txn_checkpoint(db->dbenv, 0, 0, 0);
-#endif
+ rc = txn_checkpoint(db->dbenv, 0, 0, 0);
+#endif /* DB_VERSION_MAJOR >= 4 */
}
+#endif /* DB_VERSION_MAJOR < 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR < 1) */
#if DB_VERSION_MAJOR >= 4
if ((rc = db->dbenv->log_archive(db->dbenv, &list, DB_ARCH_ABS)) != 0) {
for (first = list; *list != NULL; ++list) {
if ((rc = remove(*list)) != 0) {
#ifdef DEBUG
- LOG(log_info, logtype_default, "cnid_close: failed to remove %s: %s", *list, strerror(rc));
+ LOG(log_info, logtype_default, "cnid_close: failed to remove %s: %s", *list, strerror(rc));
#endif
- }
+ }
}
free(first);
}
/*
- * $Id: cnid_lookup.c,v 1.14 2002-08-30 03:12:52 jmarcus Exp $
+ * $Id: cnid_lookup.c,v 1.14.2.1 2003-02-08 03:16:53 jmarcus Exp $
*/
#ifdef HAVE_CONFIG_H
#ifdef DEBUG
LOG(log_info, logtype_default, "cnid_lookup: Running database checkpoint");
#endif
+#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1)
+ db->dbenv->txn_checkpoint(db->dbenv, LOGFILEMAX, CHECKTIMEMAX, 0)
+#else
#if DB_VERSION_MAJOR >= 4
switch (rc = db->dbenv->txn_checkpoint(db->dbenv, LOGFILEMAX, CHECKTIMEMAX, 0)) {
#else
switch (rc = txn_checkpoint(db->dbenv, LOGFILEMAX, CHECKTIMEMAX, 0)) {
-#endif
+#endif /* DB_VERSION_MAJOR >= 4 */
case 0:
case DB_INCOMPLETE:
break;
return 0;
}
}
+#endif /* DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1) */
#endif /* CNID_DB_CDB */
- if ((buf = make_cnid_data(st, did, name, len)) == NULL) {
- LOG(log_error, logtype_default, "cnid_lookup: Pathname is too long");
- return 0;
- }
+ if ((buf = make_cnid_data(st, did, name, len)) == NULL) {
+ LOG(log_error, logtype_default, "cnid_lookup: Pathname is too long");
+ return 0;
+ }
- memset(&key, 0, sizeof(key));
- memset(&devdata, 0, sizeof(devdata));
- memset(&diddata, 0, sizeof(diddata));
+ memset(&key, 0, sizeof(key));
+ memset(&devdata, 0, sizeof(devdata));
+ memset(&diddata, 0, sizeof(diddata));
- /* Look for a CNID. We have two options: dev/ino or did/name. If we
- * only get a match in one of them, that means a file has moved. */
- key.data = buf;
- key.size = CNID_DEVINO_LEN;
- while ((rc = db->db_devino->get(db->db_devino, NULL, &key, &devdata, 0))) {
+ /* Look for a CNID. We have two options: dev/ino or did/name. If we
+ * only get a match in one of them, that means a file has moved. */
+ key.data = buf;
+ key.size = CNID_DEVINO_LEN;
+ while ((rc = db->db_devino->get(db->db_devino, NULL, &key, &devdata, 0))) {
#ifndef CNID_DB_CDB
- if (rc == DB_LOCK_DEADLOCK) {
- continue;
- }
+ if (rc == DB_LOCK_DEADLOCK) {
+ continue;
+ }
#endif /* CNID_DB_CDB */
- if (rc == DB_NOTFOUND) {
- devino = 0;
- break;
- }
+ if (rc == DB_NOTFOUND) {
+ devino = 0;
+ break;
+ }
- LOG(log_error, logtype_default, "cnid_lookup: Unable to get CNID dev %u, ino %u: %s",
- st->st_dev, st->st_ino, db_strerror(rc));
- return 0;
- }
+ LOG(log_error, logtype_default, "cnid_lookup: Unable to get CNID dev %u, ino %u: %s",
+ st->st_dev, st->st_ino, db_strerror(rc));
+ return 0;
+ }
- /* did/name now */
- key.data = buf + CNID_DEVINO_LEN;
- key.size = CNID_DID_LEN + len + 1;
- while ((rc = db->db_didname->get(db->db_didname, NULL, &key, &diddata, 0))) {
+ /* did/name now */
+ key.data = buf + CNID_DEVINO_LEN;
+ key.size = CNID_DID_LEN + len + 1;
+ while ((rc = db->db_didname->get(db->db_didname, NULL, &key, &diddata, 0))) {
#ifndef CNID_DB_CDB
- if (rc == DB_LOCK_DEADLOCK) {
- continue;
- }
+ if (rc == DB_LOCK_DEADLOCK) {
+ continue;
+ }
#endif /* CNID_DB_CDB */
- if (rc == DB_NOTFOUND) {
- didname = 0;
- break;
- }
+ if (rc == DB_NOTFOUND) {
+ didname = 0;
+ break;
+ }
- LOG(log_error, logtype_default, "cnid_lookup: Unable to get CNID %u, name %s: %s",
- ntohl(did), name, db_strerror(rc));
- return 0;
- }
+ LOG(log_error, logtype_default, "cnid_lookup: Unable to get CNID %u, name %s: %s",
+ ntohl(did), name, db_strerror(rc));
+ return 0;
+ }
- /* Set id. Honor did/name over dev/ino as dev/ino isn't necessarily
- * 1-1. */
- if (didname) {
- memcpy(&id, diddata.data, sizeof(id));
- }
- else if (devino) {
- memcpy(&id, devdata.data, sizeof(id));
- }
+ /* Set id. Honor did/name over dev/ino as dev/ino isn't necessarily
+ * 1-1. */
+ if (didname) {
+ memcpy(&id, diddata.data, sizeof(id));
+ }
+ else if (devino) {
+ memcpy(&id, devdata.data, sizeof(id));
+ }
- /* Either entries are in both databases or neither of them. */
- if ((devino && didname) || !(devino || didname)) {
+ /* Either entries are in both databases or neither of them. */
+ if ((devino && didname) || !(devino || didname)) {
#ifdef DEBUG
- LOG(log_info, logtype_default, "cnid_lookup: Looked up did %u, name %s, as %u",
- ntohl(did), name, ntohl(id));
+ LOG(log_info, logtype_default, "cnid_lookup: Looked up did %u, name %s, as %u",
+ ntohl(did), name, ntohl(id));
#endif
- return id;
- }
+ return id;
+ }
- /* Fix up the database. */
- cnid_update(db, id, st, did, name, len);
+ /* Fix up the database. */
+ cnid_update(db, id, st, did, name, len);
#ifdef DEBUG
- LOG(log_info, logtype_default, "cnid_lookup: Looked up did %u, name %s, as %u (needed update)", ntohl(did), name, ntohl(id));
+ LOG(log_info, logtype_default, "cnid_lookup: Looked up did %u, name %s, as %u (needed update)", ntohl(did), name, ntohl(id));
#endif
- return id;
-}
+ return id;
+ }
#endif /* CNID_DB */
/*
- * $Id: cnid_mangle_add.c,v 1.4 2002-08-30 03:12:52 jmarcus Exp $
+ * $Id: cnid_mangle_add.c,v 1.4.2.1 2003-02-08 03:16:53 jmarcus Exp $
*/
#ifdef HAVE_CONFIG_H
#endif /* CNID_DB_CDB */
switch (rc) {
#ifndef CNID_DB_CDB
- case DB_LOCK_DEADLOCK:
- goto retry;
+ case DB_LOCK_DEADLOCK:
+ goto retry;
#endif /* CNID_DB_CDB */
- default:
- LOG(log_error, logtype_default, "cnid_mangle_add: Failed to add mangled filename to the database: %s", db_strerror(rc));
- return -1;
+ default:
+ LOG(log_error, logtype_default, "cnid_mangle_add: Failed to add mangled filename to the database: %s", db_strerror(rc));
+ return -1;
}
}
/*
- * $Id: cnid_mangle_get.c,v 1.6 2002-08-30 03:12:52 jmarcus Exp $
+ * $Id: cnid_mangle_get.c,v 1.6.2.1 2003-02-08 03:16:53 jmarcus Exp $
*/
#ifdef HAVE_CONFIG_H
}
if (rc == DB_NOTFOUND) {
- LOG(log_debug, logtype_default, "cnid_mangle_get: Failed to find mangled entry for %s", mfilename);
- return NULL;
+ LOG(log_debug, logtype_default, "cnid_mangle_get: Failed to find mangled entry for %s", mfilename);
+ return NULL;
}
- LOG(log_error, logtype_default, "cnid_mangle_get: Failed to get mangle entry from the database: %s", db_strerror(rc));
+ LOG(log_error, logtype_default, "cnid_mangle_get: Failed to get mangle entry from the database: %s", db_strerror(rc));
return NULL;
}
/*
- * $Id: cnid_open.c,v 1.43 2002-08-31 05:35:10 jmarcus Exp $
+ * $Id: cnid_open.c,v 1.43.2.1 2003-02-08 03:16:53 jmarcus Exp $
*
* Copyright (c) 1999. Adrian Sun (asun@zoology.washington.edu)
* All Rights Reserved. See COPYRIGHT.
* CNIDs 4-16 are reserved according to page 31 of the AFP 3.0 spec so,
* CNID_START begins at 17.
*/
-
+
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif /* HAVE_CONFIG_H */
#ifndef CNID_DB_CDB
/* Let's try and use the youngest lock detector if present.
- * If we can't do that, then let DB3 use its default deadlock detector. */
+ * If we can't do that, then let BDB use its default deadlock detector. */
#if defined DB_LOCK_YOUNGEST
#define DEAD_LOCK_DETECT DB_LOCK_YOUNGEST
#else /* DB_LOCK_YOUNGEST */
}
void *cnid_open(const char *dir, mode_t mask) {
- struct stat st, rsb, lsb, csb;
+ struct stat st;
#ifndef CNID_DB_CDB
struct flock lock;
#endif /* CNID_DB_CDB */
- char path[MAXPATHLEN + 1];
+char path[MAXPATHLEN + 1];
CNID_private *db;
DBT key, data;
DB_TXN *tid;
}
/*db->db_didname->set_bt_compare(db->db_didname, &compare_unix);*/
+#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1)
+ if ((rc = db->db_didname->open(db->db_didname, NULL, DBDIDNAME, NULL,
+ DB_HASH, open_flag, 0666 & ~mask))) {
+#else
if ((rc = db->db_didname->open(db->db_didname, DBDIDNAME, NULL,
DB_HASH, open_flag, 0666 & ~mask))) {
+#endif /* DB_VERSION_MAJOR >= 4 */
LOG(log_error, logtype_default, "cnid_open: Failed to open did/name database: %s",
db_strerror(rc));
goto fail_appinit;
}
else if (ret == DB_RUNRECOVERY) {
/* At this point, we don't care if the transaction aborts
- * successfully or not. */
+ * successfully or not. */
txn_abort(tid);
LOG(log_error, logtype_default, "cnid_open: Error putting new version: %s",
db_strerror(ret));
}
db->db_macname->set_bt_compare(db->db_macname, &compare_mac);
+#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1)
+ if ((rc = db->db_macname->open(db->db_macname, NULL, DBMACNAME, NULL, DB_BTREE, open_flag, 0666 & ~mask)) != 0) {
+#else
if ((rc = db->db_macname->open(db->db_macname, DBMACNAME, NULL, DB_BTREE, open_flag, 0666 & ~mask)) != 0) {
+#endif /* DB_VERSION_MAJOR >= 4 */
LOG(log_error, logtype_default, "cnid_open: Failed to open did/macname database: %s",
db_strerror(rc));
db->db_didname->close(db->db_didname, 0);
}
db->db_shortname->set_bt_compare(db->db_shortname, &compare_mac);
+#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1)
+ if ((rc = db->db_shortname->open(db->db_shortname, NULL, DBSHORTNAME, NULL, DB_BTREE, open_flag, 0666 & ~mask)) != 0) {
+#else
if ((rc = db->db_shortname->open(db->db_shortname, DBSHORTNAME, NULL, DB_BTREE, open_flag, 0666 & ~mask)) != 0) {
+#endif /* DB_VERSION_MAJOR >= 4 */
LOG(log_error, logtype_default, "cnid_open: Failed to open did/shortname database: %s",
db_strerror(rc));
db->db_didname->close(db->db_didname, 0);
}
db->db_longname->set_bt_compare(db->db_longname, &compare_unicode);
+#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1)
+ if ((rc = db->db_longname->open(db->db_longname, NULL, DBLONGNAME, NULL, DB_BTREE, open_flag, 0666 & ~mask)) != 0) {
+#else
if ((rc = db->db_longname->open(db->db_longname, DBLONGNAME, NULL, DB_BTREE, open_flag, 0666 & ~mask)) != 0) {
+#endif /* DB_VERSION_MAJOR >= 4 */
LOG(log_error, logtype_default, "cnid_open: Failed to open did/longname database: %s",
db_strerror(rc));
db->db_didname->close(db->db_didname, 0);
goto fail_appinit;
}
+#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1)
+ if ((rc = db->db_devino->open(db->db_devino, NULL, DBDEVINO, NULL, DB_HASH, open_flag, 0666 & ~mask)) != 0) {
+#else
if ((rc = db->db_devino->open(db->db_devino, DBDEVINO, NULL, DB_HASH, open_flag, 0666 & ~mask)) != 0) {
+#endif /* DB_VERSION_MAJOR >= 4 */
LOG(log_error, logtype_default, "cnid_open: Failed to open devino database: %s",
db_strerror(rc));
db->db_didname->close(db->db_didname, 0);
}
+#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1)
+ if ((rc = db->db_cnid->open(db->db_cnid, NULL, DBCNID, NULL, DB_HASH, open_flag, 0666 & ~mask)) != 0) {
+#else
if ((rc = db->db_cnid->open(db->db_cnid, DBCNID, NULL, DB_HASH, open_flag, 0666 & ~mask)) != 0) {
+#endif /* DB_VERSION_MAJOR >= 4 */
LOG(log_error, logtype_default, "cnid_open: Failed to open dev/ino database: %s",
db_strerror(rc));
db->db_didname->close(db->db_didname, 0);
goto fail_appinit;
}
+#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1)
+ if ((rc = db->db_mangle->open(db->db_mangle, NULL, DBMANGLE, NULL, DB_HASH, open_flag, 0666 & ~mask)) != 0) {
+#else
if ((rc = db->db_mangle->open(db->db_mangle, DBMANGLE, NULL, DB_HASH, open_flag, 0666 & ~mask)) != 0) {
+#endif /* DB_VERSION_MAJOR >= 4 */
LOG(log_error, logtype_default, "cnid_open: Failed to open mangle database: %s", db_strerror(rc));
db->db_didname->close(db->db_didname, 0);
db->db_devino->close(db->db_devino, 0);
}
#endif /* FILE_MANGLING */
- /* Print out the version of DB3 we're linked against. */
+ /* Print out the version of BDB we're linked against. */
LOG(log_info, logtype_default, "CNID DB initialized using %s",
db_version(NULL, NULL, NULL));
-dnl $Id: db3-check.m4,v 1.7 2002-02-07 05:08:36 jmarcus Exp $
-dnl Autoconf macro to check for the Berkeley DB3 library
+dnl $Id: db3-check.m4,v 1.7.4.1 2003-02-08 03:16:53 jmarcus Exp $
+dnl Autoconf macro to check for the Berkeley DB library
-AC_DEFUN([AC_PATH_DB3], [
- trydb3dir=""
- AC_ARG_WITH(db3,
- [ --with-db3=PATH specify path to Berkeley DB3 installation],
+AC_DEFUN([AC_PATH_BDB], [
+ trybdbdir=""
+ AC_ARG_WITH(bdb,
+ [ --with-bdb=PATH specify path to Berkeley DB installation],
if test "x$withval" != "xno"; then
- trydb3dir="$withval"
+ trybdbdir="$withval"
fi
)
- db3found=no
- for db3dir in "" "$trydb3dir" "$trydb3dir/include" "$trydb3dir/include/db3" "/usr/local/BerkeleyDB.3.3/include" "/usr/local/include/db3" "/usr/local/include" "/usr/include/db3" "/usr/include" ; do
- if test -f "$db3dir/db.h" ; then
- db3libdir="`echo $db3dir | sed 's/include\/db3$/lib/'`"
- db3libdir="`echo $db3libdir | sed 's/include$/lib/'`"
+ bdbfound=no
+ for bdbdir in "" "$trybdbdir" "$trybdbdir/include" "$trybdbdir/include/db3" "/usr/local/BerkeleyDB.3.3/include" "/usr/local/include/db3" "/usr/local/include" "/usr/include/db3" "/usr/include" ; do
+ if test -f "$bdbdir/db.h" ; then
+ bdblibdir="`echo $bdbdir | sed 's/include\/db3$/lib/'`"
+ bdblibdir="`echo $bdblibdir | sed 's/include$/lib/'`"
savedcflags="$CFLAGS"
savedldflags="$LDFLAGS"
- CFLAGS="$CFLAGS -I$db3dir"
- LDFLAGS="-L$db3libdir $LDFLAGS"
+ CFLAGS="$CFLAGS -I$bdbdir"
+ LDFLAGS="-L$bdblibdir $LDFLAGS"
AC_CHECK_LIB(db, main, [
- db3found=yes
- DB3_CFLAGS="-I$db3dir"
- DB3_LIBS="-L$db3libdir -ldb"
- DB3_PATH="`echo $db3dir | sed 's,include/db3$,,'`"
+ bdbfound=yes
+ BDB_CFLAGS="-I$bdbdir"
+ BDB_LIBS="-L$bdblibdir -ldb"
+ BDB_PATH="`echo $bdbdir | sed 's,include/db3$,,'`"
])
CFLAGS="$savedcflags"
LDFLAGS="$savedldflags"
fi
done
- if test "x$db3found" = "xyes"; then
+ if test "x$bdbfound" = "xyes"; then
ifelse([$1], , :, [$1])
else
ifelse([$2], , :, [$2])
fi
- AC_SUBST(DB3_CFLAGS)
- AC_SUBST(DB3_LIBS)
- AC_SUBST(DB3_PATH)
+ AC_SUBST(BDB_CFLAGS)
+ AC_SUBST(BDB_LIBS)
+ AC_SUBST(BDB_PATH)
])