r25842: Start working on test for loading dso's in ldb.
authorJelmer Vernooij <jelmer@samba.org>
Mon, 5 Nov 2007 20:57:33 +0000 (21:57 +0100)
committerStefan Metzmacher <metze@samba.org>
Fri, 21 Dec 2007 04:44:22 +0000 (05:44 +0100)
(This used to be commit d41ed7ca8d3954bf586126edd7aba17acc6af8a1)

.bzrignore
source4/lib/ldb/Makefile.in
source4/lib/ldb/tests/sample_module.c [new file with mode: 0644]
source4/lib/ldb/tests/test-soloading.sh [new file with mode: 0755]
source4/lib/ldb/tools/cmdline.c
source4/lib/ldb/tools/cmdline.h

index 39f306eabdfcfe66f5a19a589972336c068d0782..aabb1d9db4391b2324158ff14dd32e8fd26cdd5e 100644 (file)
@@ -202,3 +202,5 @@ rpc_server/lsa/proto.h
 torture/winbind/proto.h
 source/rpc_server/lsa/proto.h
 source/torture/winbind/proto.h
+source/lib/ldb/tdbtest.ldb
+source/lib/ldb/tdbtest.ldb
index 75f1767550a073663c65552f519f31161251d539..dc18a7b575f9dbdcb07bdcebc75db6bfe99f1a57 100644 (file)
@@ -32,9 +32,11 @@ POPT_OBJ = @POPT_OBJ@
 
 LDAP_LIBS = @LDAP_LIBS@
 
+SHLIBEXT = @SHLIBEXT@
+
 CFLAGS=-g -I$(srcdir)/include -Iinclude -I$(srcdir) -I$(srcdir)/.. \
        $(POPT_CFLAGS) $(TALLOC_CFLAGS) $(TDB_CFLAGS) \
-       -DLIBDIR=\"$(libdir)\" -DSHLIBEXT=\"@SHLIBEXT@\" -DUSE_MMAP=1 @CFLAGS@
+       -DLIBDIR=\"$(libdir)\" -DSHLIBEXT=\"$(SHLIBEXT)\" -DUSE_MMAP=1 @CFLAGS@
 
 LIB_FLAGS=@LDFLAGS@ -Llib -lldb @LIBS@ $(POPT_LIBS) $(TALLOC_LIBS) $(TDB_LIBS) \
                  $(LDAP_LIBS)
@@ -104,6 +106,9 @@ lib/libldb.a: $(OBJS)
 lib/libnss_ldb.so.2: $(NSS_OBJ) $(LIBS) bin/libldb.a
        $(CC) -shared -Wl,-soname,libnss_ldb.so.2 -o lib/libnss_ldb.so.2 $(NSS_OBJ) $(OBJS) $(LIB_FLAGS)
 
+sample_module.$(SHLIBEXT): tests/sample_module.o 
+       $(CC) -shared -o $@ tests/sample_module.o $(LIB_FLAGS)
+
 bin/ldbadd: tools/ldbadd.o tools/cmdline.o $(LIBS)
        $(CC) -o bin/ldbadd tools/ldbadd.o tools/cmdline.o $(LIB_FLAGS)
 
@@ -160,6 +165,11 @@ distclean: clean
 realdistclean: distclean
        rm -f configure.in include/config.h.in
 
+check:: test
+
+check-soloading: sample_module.$(SHLIBEXT)
+       LDB_MODULES_PATH=$(builddir) $(srcdir)/tests/test-soloading.sh
+
 test: all
        for t in $(TESTS); do echo STARTING $${t}; $(srcdir)/tests/$${t} || exit 1; done
 
diff --git a/source4/lib/ldb/tests/sample_module.c b/source4/lib/ldb/tests/sample_module.c
new file mode 100644 (file)
index 0000000..8ab1d33
--- /dev/null
@@ -0,0 +1,43 @@
+/* 
+   Unix SMB/CIFS implementation.
+   Samba utility functions
+   Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2007
+
+     ** NOTE! The following LGPL license applies to the ldb
+     ** library. This does NOT imply that all of Samba is released
+     ** under the LGPL
+   
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 3 of the License, or (at your option) any later version.
+
+   This library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with this library; if not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "ldb_includes.h"
+#include "ldb.h"
+#include "ldb_errors.h"
+
+int sample_add(struct ldb_module *mod, struct ldb_request *req)
+{
+       ldb_msg_add_fmt(req->op.add.message, "touchedBy", "sample");
+
+       return ldb_next_request(mod, req);
+}
+
+static const struct ldb_module_ops sample_ops = {
+       .name              = "sample_module",
+       .add               = sample_add,
+};
+
+int init_module(void)
+{
+       return ldb_register_module(&sample_ops);
+}
diff --git a/source4/lib/ldb/tests/test-soloading.sh b/source4/lib/ldb/tests/test-soloading.sh
new file mode 100755 (executable)
index 0000000..c42c9b2
--- /dev/null
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+if [ -n "$TEST_DATA_PREFIX" ]; then
+       LDB_URL="$TEST_DATA_PREFIX/tdbtest.ldb"
+else
+       LDB_URL="tdbtest.ldb"
+fi
+export LDB_URL
+
+PATH=bin:$PATH
+export PATH
+
+rm -f $LDB_URL*
+
+if [ -z "$LDBDIR" ]; then
+    LDBDIR=`dirname $0`/..
+    export LDBDIR
+fi
+
+cat <<EOF | $VALGRIND ldbadd || exit 1
+dn: @MODULES
+@LIST: sample_module
+EOF
+
+cat <<EOF | $VALGRIND ldbadd || exit 1
+dn: dc=bar
+dc: bar
+someThing: someThingElse
+EOF
+
+$VALGRIND ldbsearch "(touchedBy=sample)" | grep "touchedBy: sample" || exit 1
+
index 2cf82121547c1bec5fabf5f5739c6d4efc3565cf..a713f54e685f3e6d6f395e09566b743db94bddb6 100644 (file)
@@ -60,6 +60,7 @@ struct ldb_cmdline *ldb_cmdline_process(struct ldb_context *ldb, int argc, const
                { "verbose",   'v', POPT_ARG_NONE, NULL, 'v', "increase verbosity", NULL },
                { "interactive", 'i', POPT_ARG_NONE, &options.interactive, 0, "input from stdin", NULL },
                { "recursive", 'r', POPT_ARG_NONE, &options.recursive, 0, "recursive delete", NULL },
+               { "modules-path", 0, POPT_ARG_STRING, &options.modules_path, 0, "modules path", "PATH" },
                { "num-searches", 0, POPT_ARG_INT, &options.num_searches, 0, "number of test searches", NULL },
                { "num-records", 0, POPT_ARG_INT, &options.num_records, 0, "number of test records", NULL },
                { "all", 'a',    POPT_ARG_NONE, &options.all_records, 0, "(|(objectClass=*)(distinguishedName=*))", NULL },
@@ -218,6 +219,12 @@ struct ldb_cmdline *ldb_cmdline_process(struct ldb_context *ldb, int argc, const
        ldb_set_utf8_fns(ldb, NULL, wrap_casefold);
 #endif
 
+       if (options.modules_path != NULL) {
+               ldb_set_modules_dir(ldb, options.modules_path);
+       } else if (getenv("LDB_MODULES_PATH") != NULL) {
+               ldb_set_modules_dir(ldb, getenv("LDB_MODULES_PATH"));
+       }
+
        /* now connect to the ldb */
        if (ldb_connect(ldb, ret->url, flags, ret->options) != 0) {
                fprintf(stderr, "Failed to connect to %s - %s\n", 
index ae295d68a47ee170b6141e664a95633b24334b71..3473d62a16992102da356423d77cbed867ff9f54 100644 (file)
@@ -27,6 +27,7 @@ struct ldb_cmdline {
        const char *url;
        enum ldb_scope scope;
        const char *basedn;
+       const char *modules_path;
        int interactive;
        int sorted;
        const char *editor;