Просмотр исходного кода

Resolves: #483366
Summary: test plugin (datainterop): eliminate BDB dependency from testdbinterop

Noriko Hosoi 17 лет назад
Родитель
Сommit
1633e76349

+ 73 - 6
ldap/servers/slapd/test-plugins/testdbinterop.c

@@ -40,21 +40,21 @@
 #  include <config.h>
 #endif
 
-
 #include <sys/types.h>
 #include <stdio.h>
-#include "db.h"
 #include "testdbinterop.h"
 #include "slapi-plugin.h"
 
-#define DATABASE "access.db"
-static int number_of_keys=100;
-static int key_buffer_size = 8000;
-
 #define DB_PLUGIN_NAME "nullsuffix-preop"
 
 static  PRLock *db_lock=NULL; 
 
+#ifdef USE_BDB
+#include "db.h"
+#define DATABASE "access.db"
+static int number_of_keys=100;
+static int key_buffer_size = 8000;
+
 #if 1000*DB_VERSION_MAJOR + 100*DB_VERSION_MINOR >= 4100
 #define DB_OPEN(db, txnid, file, database, type, flags, mode) \
     (db)->open((db), (txnid), (file), (database), (type), (flags), (mode))
@@ -143,3 +143,70 @@ db_put_dn(char *data_dn)
 	PR_Unlock(db_lock);
 
 }
+#else /* USE_BDB */
+#include <string.h>
+
+#define DATABASE "/tmp/testdbinterop.db"
+#define DATABASE_BACK "/tmp/testdbinterop.db.bak"
+
+void
+db_put_dn(char *data_dn)
+{
+    int ret;
+	char *db_path = DATABASE;
+	char *db_path_bak = DATABASE_BACK;
+	PRFileInfo info;
+	PRFileDesc *prfd;
+	PRInt32 data_sz;
+	char *data_dnp = NULL;
+
+	if(db_lock == NULL){
+		db_lock = PR_NewLock();
+	}
+	PR_Lock(db_lock);
+	/* if db_path is a directory, rename it */
+	ret =  PR_GetFileInfo(db_path, &info);
+	if (PR_SUCCESS == ret) {
+		if (PR_FILE_DIRECTORY == info.type) {    /* directory */
+			ret =  PR_GetFileInfo(db_path_bak, &info);
+			if (PR_SUCCESS == ret) {
+				if (PR_FILE_DIRECTORY != info.type) {    /* not a directory */
+					PR_Delete(db_path_bak);
+				}
+			}
+			PR_Rename(db_path, db_path_bak);
+		}
+	}
+
+	/* open a file */
+	if ((prfd = PR_Open(db_path, PR_RDWR | PR_CREATE_FILE | PR_APPEND, 0600)) == NULL ) {
+		slapi_log_error(SLAPI_LOG_FATAL, DB_PLUGIN_NAME,
+				"db: Could not open file \"%s\" for read/write; %d (%s)\n",
+				db_path, PR_GetError(), slapd_pr_strerror(PR_GetError()));
+		return;
+	}
+
+	data_dnp = slapi_ch_smprintf("%s\n", data_dn);
+	data_sz = (PRInt32)strlen(data_dnp);
+
+	ret = PR_Write(prfd, data_dnp, data_sz);
+	if (ret == data_sz) {
+		slapi_log_error(SLAPI_LOG_PLUGIN, DB_PLUGIN_NAME,
+						"db: %s: key stored.\n", data_dn);
+		ret = 0;
+	} else  {
+		slapi_log_error(SLAPI_LOG_FATAL, DB_PLUGIN_NAME,
+				"db: Failed to store key \"%s\"; %d (%s)\n",
+				data_dn, PR_GetError(), slapd_pr_strerror(PR_GetError()));
+		ret = 1;
+	}
+    if(ret) {
+		slapi_log_error(SLAPI_LOG_FATAL, DB_PLUGIN_NAME,
+						"db: Error detected in db_put_dn \n");
+    }
+	slapi_ch_free_string(&data_dnp);
+	PR_Close(prfd);
+	PR_Unlock(db_lock);
+	return;
+}
+#endif

+ 0 - 1
ldap/servers/slapd/test-plugins/testdbinterop.h

@@ -54,6 +54,5 @@
 
 #include "nspr.h"
 
-void create_db();
 void db_put_dn(char *data);