[PATCH 2/2] s4: tests controls parsing and using for ldbadd/ldbedit/ldbmodify

Matthieu Patou mat at matws.net
Sat Dec 5 07:56:35 MST 2009


---
 source4/lib/ldb/config.mk              |   13 +++++++++
 source4/lib/ldb/tests/sample_module.c  |   30 ++++++++++++++++++++-
 source4/lib/ldb/tests/test-controls.sh |   46 ++++++++++++++++++++++++++++++++
 source4/lib/ldb/tests/test-tdb.sh      |    2 +
 4 files changed, 90 insertions(+), 1 deletions(-)
 create mode 100755 source4/lib/ldb/tests/test-controls.sh

diff --git a/source4/lib/ldb/config.mk b/source4/lib/ldb/config.mk
index 4a1f814..7d110fc 100644
--- a/source4/lib/ldb/config.mk
+++ b/source4/lib/ldb/config.mk
@@ -11,6 +11,19 @@ ldb_asq_OBJ_FILES = $(ldbsrcdir)/modules/asq.o
 ################################################
 
 ################################################
+# Start MODULE sample_module
+[MODULE::sample]
+PRIVATE_DEPENDENCIES = LIBTALLOC LIBTEVENT
+CFLAGS = -I$(ldbsrcdir)/include
+INIT_FUNCTION = LDB_MODULE(sample)
+SUBSYSTEM = LIBTESTLDB
+
+# End MODULE sample_module
+################################################
+sample_OBJ_FILES = $(ldbsrcdir)/tests/sample_module.o
+
+
+################################################
 # Start MODULE ldb_server_sort
 [MODULE::ldb_server_sort]
 PRIVATE_DEPENDENCIES = LIBTALLOC LIBTEVENT
diff --git a/source4/lib/ldb/tests/sample_module.c b/source4/lib/ldb/tests/sample_module.c
index bbe4419..bb7906e 100644
--- a/source4/lib/ldb/tests/sample_module.c
+++ b/source4/lib/ldb/tests/sample_module.c
@@ -25,12 +25,40 @@
 
 int sample_add(struct ldb_module *mod, struct ldb_request *req)
 {
+	struct ldb_control *control;
+	struct ldb_control *controls;
 	ldb_msg_add_fmt(req->op.add.message, "touchedBy", "sample");
 
-	return ldb_next_request(mod, req);
+
+	/* check if there's a relax control */
+	control = ldb_request_get_control(req, LDB_CONTROL_RELAX_OID);
+	if (control == NULL) {
+		/* not found go on */
+		return ldb_next_request(mod, req);
+	} else {
+		return LDB_ERR_UNWILLING_TO_PERFORM;
+	}
+}
+
+int sample_modify(struct ldb_module *mod, struct ldb_request *req)
+{
+	struct ldb_control *control;
+	struct ldb_control *controls;
+
+	/* check if there's a relax control */
+	control = ldb_request_get_control(req, LDB_CONTROL_RELAX_OID);
+	if (control == NULL) {
+		/* not found go on */
+		return ldb_next_request(mod, req);
+	} else {
+		return LDB_ERR_UNWILLING_TO_PERFORM;
+	}
 }
 
+
 const struct ldb_module_ops ldb_sample_module_ops = {
 	.name              = "sample",
 	.add		   = sample_add,
+	.del		   = sample_modify,
+	.modify		   = sample_modify,
 };
diff --git a/source4/lib/ldb/tests/test-controls.sh b/source4/lib/ldb/tests/test-controls.sh
new file mode 100755
index 0000000..db139bb
--- /dev/null
+++ b/source4/lib/ldb/tests/test-controls.sh
@@ -0,0 +1,46 @@
+#!/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*
+LDB_MODULES_PATH=`dirname $0`/../../../bin/modules/testldb
+echo $LDB_MODULES_PATH
+
+echo "LDB_URL: $LDB_URL"
+cat <<EOF | $VALGRIND ldbadd || exit 1
+dn: @MODULES
+ at LIST: sample
+EOF
+
+cat <<EOF | $VALGRIND ldbadd || exit 1
+dn: dc=bar
+dc: bar
+someThing: someThingElse
+EOF
+
+$VALGRIND ldbsearch "(touchedBy=sample)" | grep "touchedBy: sample" || exit 1
+# This action are expected to fails because the sample module return an error when presented the relax control
+
+cat <<EOF | $VALGRIND ldbadd --controls "relax:0" && exit 1
+dn: dc=foobar
+dc: foobar
+someThing: someThingElse
+EOF
+
+cat <<EOF | $VALGRIND ldbmodify --controls "relax:0" && exit 1
+dn: dc=bar
+changetype: replace
+replace someThing
+someThing: someThingElseBetter
+EOF
+
+
+set
diff --git a/source4/lib/ldb/tests/test-tdb.sh b/source4/lib/ldb/tests/test-tdb.sh
index 1c35451..9da1e57 100755
--- a/source4/lib/ldb/tests/test-tdb.sh
+++ b/source4/lib/ldb/tests/test-tdb.sh
@@ -29,3 +29,5 @@ $VALGRIND ldbadd$EXEEXT $LDBDIR/tests/init.ldif || exit 1
 . $LDBDIR/tests/test-extended.sh
 
 . $LDBDIR/tests/test-tdb-features.sh
+
+. $LDBDIR/tests/test-controls.sh
-- 
1.6.3.3


--------------050204060200050904000708
Content-Type: text/x-patch;
 name="0001-s4-make-ldbadd-ldbmodify-ldbdelete-really-use-the-co.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename*0="0001-s4-make-ldbadd-ldbmodify-ldbdelete-really-use-the-co.pa";
 filename*1="tch"



More information about the samba-technical mailing list