This patch is intended to be applied to Berkeley DB 4.2.52 and,
if applied, will automatically be used by slapd(8) back-bdb/hdb.
Without this patch the BDB DB_LOG_AUTOREMOVE option will not work,
nor will db_archive allow any transaction log files to be removed
while slapd is running.

The patch can be applied to the BDB source using patch(1) as follows
	cd db-4.2.52
	patch -p0 < openldap-src/build/BerkeleyDB42.patch

(modify directory paths as necessary), then recompile and reinstall
the BerkeleyDB 4.2 library, and then build and install OpenLDAP
Software.

The patch should not be applied to Berkeley DB 4.3.


Index: dbinc/db.in
===================================================================
RCS file: /var/CVSROOT/bdb42/dbinc/db.in,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- dbinc/db.in	25 Nov 2003 21:58:02 -0000	1.1.1.1
+++ dbinc/db.in	17 Jul 2004 16:07:23 -0000	1.2
@@ -839,6 +839,7 @@
 #define	TXN_NOWAIT	0x040		/* Do not wait on locks. */
 #define	TXN_RESTORED	0x080		/* Transaction has been restored. */
 #define	TXN_SYNC	0x100		/* Sync on prepare and commit. */
+#define	TXN_NOLOG	0x200		/* Do not log this transaction. */
 	u_int32_t	flags;
 };
 
Index: txn/txn.c
===================================================================
RCS file: /var/CVSROOT/bdb42/txn/txn.c,v
retrieving revision 1.1.1.2
retrieving revision 1.2
diff -u -r1.1.1.2 -r1.2
--- txn/txn.c	17 Dec 2003 21:43:53 -0000	1.1.1.2
+++ txn/txn.c	17 Jul 2004 16:07:27 -0000	1.2
@@ -127,7 +127,7 @@
 	if ((ret = __db_fchk(dbenv,
 	    "txn_begin", flags,
 	    DB_DIRTY_READ | DB_TXN_NOWAIT |
-	    DB_TXN_NOSYNC | DB_TXN_SYNC)) != 0)
+	    DB_TXN_NOSYNC | DB_TXN_SYNC | DB_TXN_NOT_DURABLE)) != 0)
 		return (ret);
 	if ((ret = __db_fcchk(dbenv,
 	    "txn_begin", flags, DB_TXN_NOSYNC, DB_TXN_SYNC)) != 0)
@@ -193,6 +193,8 @@
 		F_SET(txn, TXN_SYNC);
 	if (LF_ISSET(DB_TXN_NOWAIT))
 		F_SET(txn, TXN_NOWAIT);
+	if (LF_ISSET(DB_TXN_NOT_DURABLE))
+		F_SET(txn, TXN_NOLOG);
 
 	if ((ret = __txn_begin_int(txn, 0)) != 0)
 		goto err;
@@ -328,7 +330,7 @@
 	 * We should set this value when we write the first log record, not
 	 * here.
 	 */
-	if (DBENV_LOGGING(dbenv))
+	if (DBENV_LOGGING(dbenv) && !F_ISSET(txn, TXN_NOLOG))
 		__log_txn_lsn(dbenv, &begin_lsn, NULL, NULL);
 	else
 		ZERO_LSN(begin_lsn);
