From 9e5bdc3c5dfe0bbfc60232ebf063bf59919c87b0 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 29 May 2005 11:43:02 +0000 Subject: r7073: added some simple example scripts for use with smbscript (This used to be commit f1d0c006600d6d57bce2ede87a1aae0ccfc2c412) --- testprogs/ejs/ldb.js | 24 ++++++++++++++++++++++++ testprogs/ejs/loadparm.js | 19 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 testprogs/ejs/ldb.js create mode 100644 testprogs/ejs/loadparm.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldb.js b/testprogs/ejs/ldb.js new file mode 100644 index 0000000000..7675197904 --- /dev/null +++ b/testprogs/ejs/ldb.js @@ -0,0 +1,24 @@ +/* + demonstrate access to ldb databases from ejs +*/ + +println("Trying a attribute constrained search on samdb"); + +var dbfile = lpGet("sam database"); +var attrs = new Array("name", "dnsDomain", "objectSid", "dn"); + +res = ldbSearch(dbfile, "(objectClass=domain)", attrs); + +printVars(res); + +println("and now an unconstrained search"); + +var dbfile = lpGet("sam database"); +res = ldbSearch(dbfile, "(objectClass=user)"); +printVars(res); + +println("and a bad search"); + +res = ldbSearch("foo"); + +println("all done"); diff --git a/testprogs/ejs/loadparm.js b/testprogs/ejs/loadparm.js new file mode 100644 index 0000000000..fdeaed9d34 --- /dev/null +++ b/testprogs/ejs/loadparm.js @@ -0,0 +1,19 @@ +/* + demonstrate access to loadparm functions from ejs +*/ + +print("defined services: "); +printVars(lpServices()); + +function showParameter(name) { + print(name + ": "); + printVars(lpGet(name)); +} + +showParameter("server services"); +showParameter("netbios name"); +showParameter("security"); +showParameter("workgroup"); +showParameter("log level"); +showParameter("server signing"); +showParameter("interfaces"); -- cgit From eba9bc5eaaf3d7f74befe68f37dac6c1dc467546 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 29 May 2005 11:58:47 +0000 Subject: r7076: added demos of using ARGV[] (This used to be commit 9679f2027209543108428e985bf699b370385eeb) --- testprogs/ejs/argv.js | 7 +++++++ testprogs/ejs/loadparm.js | 11 ++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 testprogs/ejs/argv.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/argv.js b/testprogs/ejs/argv.js new file mode 100644 index 0000000000..2f8dc74174 --- /dev/null +++ b/testprogs/ejs/argv.js @@ -0,0 +1,7 @@ +/* + demonstrate use of argv +*/ + +println("You called this script with arguments:"); + +printVars(ARGV); diff --git a/testprogs/ejs/loadparm.js b/testprogs/ejs/loadparm.js index fdeaed9d34..6c2a80bb73 100644 --- a/testprogs/ejs/loadparm.js +++ b/testprogs/ejs/loadparm.js @@ -2,14 +2,18 @@ demonstrate access to loadparm functions from ejs */ -print("defined services: "); -printVars(lpServices()); - function showParameter(name) { print(name + ": "); printVars(lpGet(name)); } +for (v in ARGV) { + showParameter(ARGV[v]); +} + +print("defined services: "); +printVars(lpServices()); + showParameter("server services"); showParameter("netbios name"); showParameter("security"); @@ -17,3 +21,4 @@ showParameter("workgroup"); showParameter("log level"); showParameter("server signing"); showParameter("interfaces"); + -- cgit From 509e57995c535db09b84c3e0efb4d33c5822e289 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 31 May 2005 01:20:49 +0000 Subject: r7125: demonstrate some bugs in ejs (This used to be commit 46adb4a065f3f7dd81d72ed041f24e2d81733b63) --- testprogs/ejs/bugs.js | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 testprogs/ejs/bugs.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/bugs.js b/testprogs/ejs/bugs.js new file mode 100644 index 0000000000..3a211f3bdc --- /dev/null +++ b/testprogs/ejs/bugs.js @@ -0,0 +1,76 @@ +/* + demonstrate some bugs in ejs + + tridge +*/ + + +/**************************************** +demo a bug in constructing arrays +fix at http://build.samba.org/build.pl?function=diff;tree=samba4;revision=7124 +*****************************************/ +function arraybug() { + var a; + + println("First with 3 elements"); + a = new Array("one", "two", "three"); + printVars(a); + assert(a.length == 3); + assert(a[0] == "one"); + assert(a[1] == "two"); + assert(a[2] == "three"); + + println("with a array length"); + a = new Array(5); + printVars(a); + assert(a.length == 5); + + println("\nNow with 1 element"); + a = new Array("one"); + printVars(a); + assert(a.length == 1); + assert(a[0] == "one"); + + println("ALL OK"); +} + + +/**************************************** +demo a bug in variable arguments +fix at http://build.samba.org/build.pl?function=diff;tree=samba4;revision=7085 +*****************************************/ +function argsbug() { + println("we should have been called with 3 arguments"); + assert(arguments.length == 3); + assert(arguments[0] == "one"); + assert(arguments[1] == "two"); + assert(arguments[2] == "three"); +} + + +/**************************************** +demo a bug in constructing objects +no fix available yet +*****************************************/ +function MyObj() { + var o = new Object(); + o.test = 42; + return o; +} + +function objbug() { + println("the docs say you should use 'new'"); + var o1 = new MyObj(); + var o2 = MyObj(); + printVars(o1); + printVars(o2); + assert(o1.test == 42); + assert(o2.test == 42); +} + + + +/* run the tests */ +arraybug(); +argsbug("one", "two", "three"); +objbug() -- cgit From a8efb670df4f76cbfeab976d3b2a898a065da8f6 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 31 May 2005 01:52:14 +0000 Subject: r7128: added recursion to bugs list (This used to be commit 645e645a4ee94af5cb8d6021c63a48322478582c) --- testprogs/ejs/bugs.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/bugs.js b/testprogs/ejs/bugs.js index 3a211f3bdc..01174f9eaf 100644 --- a/testprogs/ejs/bugs.js +++ b/testprogs/ejs/bugs.js @@ -69,8 +69,27 @@ function objbug() { } +/**************************************** +demo lack of recursion +fix in http://build.samba.org/build.pl?function=diff;tree=samba4;revision=7127 +*****************************************/ +function fibonacci(n) { + if (n < 3) { + return 1; + } + return fibonacci(n-1) + fibonacci(n-2); +} + +function recursebug() { + println("First 10 fibonacci numbers:"); + for (i=0;i<10;i++) { + println("fibonacci(" + i + ")=" + fibonacci(i)); + } +} + /* run the tests */ arraybug(); argsbug("one", "two", "three"); +recursebug(); objbug() -- cgit From 28732d92082c88e91702e0cd585e0c1c73138dde Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Sat, 4 Jun 2005 01:10:21 +0000 Subject: r7256: Demonstrate use of resolveName() js function. (This used to be commit b8e1d2f68e86ead6ba42df710ed4957ebababdf8) --- testprogs/ejs/resolveName.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 testprogs/ejs/resolveName.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/resolveName.js b/testprogs/ejs/resolveName.js new file mode 100644 index 0000000000..c2d06b5c74 --- /dev/null +++ b/testprogs/ejs/resolveName.js @@ -0,0 +1,12 @@ +/* + Demonstrate use of resolveName() js function +*/ + +var result; +res = resolveName(result, "frogurt"); + +if (!res.is_ok) { + println(res.errstr); +} else { + println(result); +} -- cgit From b1243510793cd135f1464dcfeec0b7e88999d1a0 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Sat, 4 Jun 2005 03:32:18 +0000 Subject: r7261: Pass by reference is done in js via MPR_TYPE_OBJECT. Update argument parsing and example for resolveName(). (This used to be commit 1a4a54931733ebfa743401a184fe460c044427b4) --- testprogs/ejs/resolveName.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/resolveName.js b/testprogs/ejs/resolveName.js index c2d06b5c74..1619b69d69 100644 --- a/testprogs/ejs/resolveName.js +++ b/testprogs/ejs/resolveName.js @@ -2,11 +2,12 @@ Demonstrate use of resolveName() js function */ -var result; -res = resolveName(result, "frogurt"); +var result = new Object(); -if (!res.is_ok) { - println(res.errstr); +res = resolveName(result, ARGV[0]); + +if (res.is_ok) { + println(result.value); } else { - println(result); + println(res.errstr); } -- cgit From 52f481b666f0dade2b6fa8da851bb4a407fe4df9 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 2 Jul 2005 05:22:12 +0000 Subject: r8070: a (as yet not working) example of how rpc calls might be made from js scripts (This used to be commit b9e73fa932e8289b756b557faeca1690c02a21ed) --- testprogs/ejs/echo.js | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 testprogs/ejs/echo.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js new file mode 100644 index 0000000000..6d01f69a5c --- /dev/null +++ b/testprogs/ejs/echo.js @@ -0,0 +1,34 @@ +/* + demonstrate access to rpc calls from ejs +*/ + +function irpcObj() +{ + var o = new Object(); + o.in = new Object(); + return o; +} + +function test_AddOne() +{ + var status; + var conn = new Object(); + var io = irpcObj(); + + status = rpc_connect(conn, "ncacn_ip_tcp:localhost", "rpcecho"); + printVars(status); + printVars(conn); + + io.in.in_data = 3; + status = rpc_call(conn, "echo_AddOne", io); + printVars(status); + printVars(io); +} + + +print("Starting\n"); + +test_AddOne(); + + + -- cgit From f663c67c4e3fcb37db689d49957165fc6a25657b Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 2 Jul 2005 11:13:12 +0000 Subject: r8074: demonstrate calling echo_AddOne() from ejs (This used to be commit 0c534699efb24abefd9879859cde6a9ac61e5af3) --- testprogs/ejs/echo.js | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js index 6d01f69a5c..3ab2d9f0c6 100644 --- a/testprogs/ejs/echo.js +++ b/testprogs/ejs/echo.js @@ -9,26 +9,30 @@ function irpcObj() return o; } -function test_AddOne() +function test_AddOne(binding) { var status; var conn = new Object(); var io = irpcObj(); - status = rpc_connect(conn, "ncacn_ip_tcp:localhost", "rpcecho"); - printVars(status); - printVars(conn); - - io.in.in_data = 3; - status = rpc_call(conn, "echo_AddOne", io); - printVars(status); - printVars(io); + status = rpc_connect(conn, binding, "rpcecho"); + if (status.is_ok != true) { + print("Failed to connect to " + binding + " - " + status.errstr + "\n"); + return; + } + + for (i=0;i<10;i++) { + io.in.in_data = i; + status = rpc_call(conn, "echo_AddOne", io); + print("AddOne(" + i + ")=" + io.out.out_data + "\n"); + } } +if (ARGV.length == 0) { + print("Usage: echo.js \n"); + exit(0); +} -print("Starting\n"); - -test_AddOne(); - - +var binding = ARGV[0]; +test_AddOne(binding); -- cgit From 179927fea5897a3e995015bc2c9543c12eed8571 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 7 Jul 2005 06:26:22 +0000 Subject: r8193: fixed the echo.js example code to work with the new syntax for rpc calls from js. I chose the new syntax to match the C calling syntax, so if you are familiar with using the Samba4 rpc libraries from C, then using them from js should be easy (This used to be commit 757bb7f31cc85b08885d55adf6e2ce7d925c0353) --- testprogs/ejs/echo.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js index 3ab2d9f0c6..1579afa94f 100644 --- a/testprogs/ejs/echo.js +++ b/testprogs/ejs/echo.js @@ -23,7 +23,7 @@ function test_AddOne(binding) for (i=0;i<10;i++) { io.in.in_data = i; - status = rpc_call(conn, "echo_AddOne", io); + status = dcerpc_echo_AddOne(conn, io); print("AddOne(" + i + ")=" + io.out.out_data + "\n"); } } -- cgit From 0fe84a92fbd8cded71cce8c31b510296a1165fb6 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 7 Jul 2005 07:43:45 +0000 Subject: r8196: - added testing of the EchoData interface in the echo test script - add asserts on all calls for correct results (This used to be commit 0b67754c281f387148b64ba00742437330dc68f7) --- testprogs/ejs/echo.js | 86 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 75 insertions(+), 11 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js index 1579afa94f..992c6be5dd 100644 --- a/testprogs/ejs/echo.js +++ b/testprogs/ejs/echo.js @@ -5,26 +5,79 @@ function irpcObj() { var o = new Object(); - o.in = new Object(); + o.input = new Object(); return o; } -function test_AddOne(binding) +/* + generate a ramp as an integer array + */ +function ramp_array(N) { - var status; - var conn = new Object(); - var io = irpcObj(); + var a = new Array(N); + for (i=0;i Date: Thu, 7 Jul 2005 07:47:30 +0000 Subject: r8197: added testing of echo_SinkData() and echo_SourceData() (This used to be commit f1d6b328c46265b04fe7c0626d94bb2c844507c9) --- testprogs/ejs/echo.js | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js index 992c6be5dd..e7cb86731f 100644 --- a/testprogs/ejs/echo.js +++ b/testprogs/ejs/echo.js @@ -16,7 +16,7 @@ function ramp_array(N) { var a = new Array(N); for (i=0;i\n"); exit(0); @@ -98,5 +137,7 @@ if (status.is_ok != true) { test_AddOne(conn); test_EchoData(conn); +test_SinkData(conn); +test_SourceData(conn); print("All OK\n"); -- cgit From 5eea409d4c57aba091a7ed8d8304627c9796f873 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 7 Jul 2005 08:21:45 +0000 Subject: r8199: - we don't need to pre-declare 'var status;' everywhere - added testing of echo_TestCall(), which uses strings (This used to be commit 67aa628413342fd812afd966c95ea9d470b3151b) --- testprogs/ejs/echo.js | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js index e7cb86731f..0ae269846f 100644 --- a/testprogs/ejs/echo.js +++ b/testprogs/ejs/echo.js @@ -2,6 +2,10 @@ demonstrate access to rpc calls from ejs */ + +/* + helper function to setup a rpc io object, ready for input +*/ function irpcObj() { var o = new Object(); @@ -49,7 +53,6 @@ function check_array_equal(a1, a2) */ function test_AddOne(conn) { - var status; var io = irpcObj(); print("Testing echo_AddOne\n"); @@ -67,7 +70,6 @@ function test_AddOne(conn) */ function test_EchoData(conn) { - var status; var io = irpcObj(); print("Testing echo_EchoData\n"); @@ -87,7 +89,6 @@ function test_EchoData(conn) */ function test_SinkData(conn) { - var status; var io = irpcObj(); print("Testing echo_SinkData\n"); @@ -106,7 +107,6 @@ function test_SinkData(conn) */ function test_SourceData(conn) { - var status; var io = irpcObj(); print("Testing echo_SourceData\n"); @@ -120,6 +120,23 @@ function test_SourceData(conn) } } + +/* + test the echo_TestCall interface +*/ +function test_TestCall(conn) +{ + var io = irpcObj(); + + print("Testing echo_TestCall\n"); + + io.input.s1 = "my test string"; + status = dcerpc_echo_TestCall(conn, io); + check_status_ok(status); + assert("this is a test string" == io.output.s2); +} + + if (ARGV.length == 0) { print("Usage: echo.js \n"); exit(0); @@ -139,5 +156,6 @@ test_AddOne(conn); test_EchoData(conn); test_SinkData(conn); test_SourceData(conn); +test_TestCall(conn); print("All OK\n"); -- cgit From 1e1a96eea6c340eb0fd867f942f176c13d856c5f Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 8 Jul 2005 03:11:17 +0000 Subject: r8214: added testing of echo_TestCall2(), which tests the union push code (This used to be commit 1429b885fbcf93ed012c836e21d00ca5d8c58741) --- testprogs/ejs/echo.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js index 0ae269846f..019242fd33 100644 --- a/testprogs/ejs/echo.js +++ b/testprogs/ejs/echo.js @@ -136,6 +136,22 @@ function test_TestCall(conn) assert("this is a test string" == io.output.s2); } +/* + test the echo_TestCall2 interface +*/ +function test_TestCall2(conn) +{ + var io = irpcObj(); + + print("Testing echo_TestCall2\n"); + + for (i=1;i<=7;i++) { + io.input.level = i; + status = dcerpc_echo_TestCall2(conn, io); + check_status_ok(status); + } +} + if (ARGV.length == 0) { print("Usage: echo.js \n"); @@ -157,5 +173,6 @@ test_EchoData(conn); test_SinkData(conn); test_SourceData(conn); test_TestCall(conn); +test_TestCall2(conn); print("All OK\n"); -- cgit From ce14638c046c4abe388a6848a3eb19c0ec11dc38 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 8 Jul 2005 04:08:17 +0000 Subject: r8217: added testing of echo_TestSleep() and echo_TestEnum() in echo js code (This used to be commit 7fa9b8251dbab9482268f84dd98889123a9219e7) --- testprogs/ejs/echo.js | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js index 019242fd33..8cdacf8fc6 100644 --- a/testprogs/ejs/echo.js +++ b/testprogs/ejs/echo.js @@ -152,6 +152,43 @@ function test_TestCall2(conn) } } +/* + test the echo_TestSleep interface +*/ +function test_TestSleep(conn) +{ + var io = irpcObj(); + + print("Testing echo_TestSleep\n"); + + io.input.seconds = 1; + status = dcerpc_echo_TestSleep(conn, io); + check_status_ok(status); +} + +/* + test the echo_TestEnum interface +*/ +function test_TestEnum(conn) +{ + var io = irpcObj(); + + print("Testing echo_TestEnum\n"); + + io.input.foo1 = 1; + io.input.foo2 = new Object(); + io.input.foo2.e1 = 1; + io.input.foo2.e2 = 1; + io.input.foo3 = new Object(); + io.input.foo3.e1 = 2; + status = dcerpc_echo_TestEnum(conn, io); + check_status_ok(status); + assert(io.output.foo1 == 1); + assert(io.output.foo2.e1 == 2); + assert(io.output.foo2.e2 == 1); + assert(io.output.foo3.e1 == 2); +} + if (ARGV.length == 0) { print("Usage: echo.js \n"); @@ -174,5 +211,7 @@ test_SinkData(conn); test_SourceData(conn); test_TestCall(conn); test_TestCall2(conn); +test_TestSleep(conn); +test_TestEnum(conn); print("All OK\n"); -- cgit From d105d5e9e40d9950f0c8e61ac17d352c4cb4e6e2 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 8 Jul 2005 04:16:36 +0000 Subject: r8218: added testing of echo_TestSurrounding() and echo_TestDoublePointer(). All echo.idl functions are now tested and working from ejs. (This used to be commit c065d677697d3e8dbe2575113823a7ac7109ca70) --- testprogs/ejs/echo.js | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js index 8cdacf8fc6..4bc8fdefb1 100644 --- a/testprogs/ejs/echo.js +++ b/testprogs/ejs/echo.js @@ -48,6 +48,16 @@ function check_array_equal(a1, a2) } } +/* + check that an array is all zeros +*/ +function check_array_zero(a) +{ + for (i=0; i\n"); @@ -213,5 +256,7 @@ test_TestCall(conn); test_TestCall2(conn); test_TestSleep(conn); test_TestEnum(conn); +test_TestSurrounding(conn); +test_TestDoublePointer(conn); print("All OK\n"); -- cgit From c11204339ae86604a6edd6491f5ee03bf5e3c950 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 8 Jul 2005 04:55:07 +0000 Subject: r8220: added auto-generation of ENUM constants in ejs wrapper. So we can now use the enum name instead of a integer in ejs scripts making rpc calls (This used to be commit a61cdee384c3002860016c1740276529493d318d) --- testprogs/ejs/echo.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js index 4bc8fdefb1..df12e46486 100644 --- a/testprogs/ejs/echo.js +++ b/testprogs/ejs/echo.js @@ -185,18 +185,18 @@ function test_TestEnum(conn) print("Testing echo_TestEnum\n"); - io.input.foo1 = 1; + io.input.foo1 = ECHO_ENUM1; io.input.foo2 = new Object(); - io.input.foo2.e1 = 1; - io.input.foo2.e2 = 1; + io.input.foo2.e1 = ECHO_ENUM1; + io.input.foo2.e2 = ECHO_ENUM1_32; io.input.foo3 = new Object(); - io.input.foo3.e1 = 2; + io.input.foo3.e1 = ECHO_ENUM2; status = dcerpc_echo_TestEnum(conn, io); check_status_ok(status); - assert(io.output.foo1 == 1); - assert(io.output.foo2.e1 == 2); - assert(io.output.foo2.e2 == 1); - assert(io.output.foo3.e1 == 2); + assert(io.output.foo1 == ECHO_ENUM1); + assert(io.output.foo2.e1 == ECHO_ENUM2); + assert(io.output.foo2.e2 == ECHO_ENUM1_32); + assert(io.output.foo3.e1 == ECHO_ENUM2); } /* -- cgit From 82251eddee06e44a96640ca540ba002c11dcedf5 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 8 Jul 2005 08:19:59 +0000 Subject: r8234: started on testing samr calls from ejs. So far it only does samr_Connect() (This used to be commit 2e50a5b780bed20415620011130af83ef73c4f85) --- testprogs/ejs/echo.js | 2 +- testprogs/ejs/samr.js | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 testprogs/ejs/samr.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js index df12e46486..2040a4663e 100644 --- a/testprogs/ejs/echo.js +++ b/testprogs/ejs/echo.js @@ -1,5 +1,5 @@ /* - demonstrate access to rpc calls from ejs + test echo pipe calls from ejs */ diff --git a/testprogs/ejs/samr.js b/testprogs/ejs/samr.js new file mode 100644 index 0000000000..fac1cb712e --- /dev/null +++ b/testprogs/ejs/samr.js @@ -0,0 +1,60 @@ +/* + test samr calls from ejs +*/ + + +/* + helper function to setup a rpc io object, ready for input +*/ +function irpcObj() +{ + var o = new Object(); + o.input = new Object(); + return o; +} + +/* + check that a status result is OK +*/ +function check_status_ok(status) +{ + if (status.is_ok != true) { + printVars(status); + } + assert(status.is_ok == true); +} + +/* + test the samr_Connect interface +*/ +function test_Connect(conn) +{ + var io = irpcObj(); + + print("Testing samr_Connect\n"); + + io.input.system_name = NULL; + io.input.access_mask = 0; + status = dcerpc_samr_Connect(conn, io); + printVars(io); + check_status_ok(status); +} + +if (ARGV.length == 0) { + print("Usage: samr.js \n"); + exit(0); +} + +var binding = ARGV[0]; +var conn = new Object(); + +print("Connecting to " + binding + "\n"); +status = rpc_connect(conn, binding, "samr"); +if (status.is_ok != true) { + print("Failed to connect to " + binding + " - " + status.errstr + "\n"); + return; +} + +test_Connect(conn); + +print("All OK\n"); -- cgit From d1298d9c81979da73be30f4b38f592636c81607b Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 8 Jul 2005 09:38:41 +0000 Subject: r8237: expanded the samr.js test to do a samr_Connect(), samr_EnumDomains() and samr_Close() (This used to be commit 5be26e7491be14ab5b6450a666911eef7c6b8785) --- testprogs/ejs/samr.js | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samr.js b/testprogs/ejs/samr.js index fac1cb712e..dd3abe0061 100644 --- a/testprogs/ejs/samr.js +++ b/testprogs/ejs/samr.js @@ -30,16 +30,47 @@ function check_status_ok(status) function test_Connect(conn) { var io = irpcObj(); - print("Testing samr_Connect\n"); - io.input.system_name = NULL; io.input.access_mask = 0; status = dcerpc_samr_Connect(conn, io); - printVars(io); + check_status_ok(status); + return io.output.connect_handle; +} + +/* + test the samr_Close interface +*/ +function test_Close(conn, handle) +{ + var io = irpcObj(); + print("Testing samr_Close\n"); + io.input.handle = handle; + status = dcerpc_samr_Close(conn, io); check_status_ok(status); } +/* + test the samr_EnumDomains interface +*/ +function test_EnumDomains(conn, handle) +{ + var io = irpcObj(); + print("Testing samr_EnumDomains\n"); + io.input.connect_handle = handle; + io.input.resume_handle = 0; + io.input.buf_size = 0; + status = dcerpc_samr_EnumDomains(conn, io); + check_status_ok(status); + print("Found " + io.output.num_entries + " domains\n"); + entries = io.output.sam.entries; + for (i=0;i\n"); exit(0); @@ -55,6 +86,8 @@ if (status.is_ok != true) { return; } -test_Connect(conn); +handle = test_Connect(conn); +test_EnumDomains(conn, handle); +test_Close(conn, handle); print("All OK\n"); -- cgit From 78b3ea6c26266ffd095c07aefc94338bb83a700b Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 8 Jul 2005 10:30:50 +0000 Subject: r8239: - added testing of LookupDomain, OpenDomain and EnumDomainUsers - used SEC_FLAG_MAXIMUM_ALLOWED for access mask. This gets the samr.js test working with w2k3 as the server (This used to be commit a929a90ed78ceb00729cc2c20bce6f2f3d34abd6) --- testprogs/ejs/samr.js | 85 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 82 insertions(+), 3 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samr.js b/testprogs/ejs/samr.js index dd3abe0061..fb444fb4b5 100644 --- a/testprogs/ejs/samr.js +++ b/testprogs/ejs/samr.js @@ -24,6 +24,16 @@ function check_status_ok(status) assert(status.is_ok == true); } +/* + form a lsa_String +*/ +function lsaString(s) +{ + var o = new Object(); + o.string = s; + return o; +} + /* test the samr_Connect interface */ @@ -32,7 +42,7 @@ function test_Connect(conn) var io = irpcObj(); print("Testing samr_Connect\n"); io.input.system_name = NULL; - io.input.access_mask = 0; + io.input.access_mask = SEC_FLAG_MAXIMUM_ALLOWED; status = dcerpc_samr_Connect(conn, io); check_status_ok(status); return io.output.connect_handle; @@ -44,12 +54,73 @@ function test_Connect(conn) function test_Close(conn, handle) { var io = irpcObj(); - print("Testing samr_Close\n"); io.input.handle = handle; status = dcerpc_samr_Close(conn, io); check_status_ok(status); } +/* + test the samr_LookupDomain interface +*/ +function test_LookupDomain(conn, handle, domain) +{ + var io = irpcObj(); + print("Testing samr_LookupDomain\n"); + io.input.connect_handle = handle; + io.input.domain_name = lsaString(domain); + status = dcerpc_samr_LookupDomain(conn, io); + check_status_ok(status); + return io.output.sid; +} + +/* + test the samr_OpenDomain interface +*/ +function test_OpenDomain(conn, handle, sid) +{ + var io = irpcObj(); + print("Testing samr_OpenDomain\n"); + io.input.connect_handle = handle; + io.input.access_mask = SEC_FLAG_MAXIMUM_ALLOWED; + io.input.sid = sid; + status = dcerpc_samr_OpenDomain(conn, io); + check_status_ok(status); + return io.output.domain_handle; +} + +/* + test the samr_EnumDomainUsers interface +*/ +function test_EnumDomainUsers(conn, dom_handle) +{ + var io = irpcObj(); + print("Testing samr_EnumDomainUsers\n"); + io.input.domain_handle = dom_handle; + io.input.resume_handle = 0; + io.input.acct_flags = 0; + io.input.max_size = -1; + status = dcerpc_samr_EnumDomainUsers(conn, io); + check_status_ok(status); + print("Found " + io.output.num_entries + " users\n"); + if (io.output.num_entries == 0) { + return; + } + entries = io.output.sam.entries; + for (i=0;i Date: Fri, 8 Jul 2005 10:41:27 +0000 Subject: r8241: - take advantage of pointer comparison - added testing of samr_EnumDomainGroups() (This used to be commit dd9465af5bb0516883aa5851e744c5b583474085) --- testprogs/ejs/samr.js | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samr.js b/testprogs/ejs/samr.js index fb444fb4b5..42d8439ac4 100644 --- a/testprogs/ejs/samr.js +++ b/testprogs/ejs/samr.js @@ -102,7 +102,30 @@ function test_EnumDomainUsers(conn, dom_handle) status = dcerpc_samr_EnumDomainUsers(conn, io); check_status_ok(status); print("Found " + io.output.num_entries + " users\n"); - if (io.output.num_entries == 0) { + if (io.output.sam == NULL) { + return; + } + entries = io.output.sam.entries; + for (i=0;i Date: Fri, 8 Jul 2005 12:47:34 +0000 Subject: r8244: need to be careful about local vs global variables in js (This used to be commit 763296a9b3dbde939e7986046b55e677b80456cb) --- testprogs/ejs/samr.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samr.js b/testprogs/ejs/samr.js index 42d8439ac4..4cbe7b9bc8 100644 --- a/testprogs/ejs/samr.js +++ b/testprogs/ejs/samr.js @@ -93,7 +93,7 @@ function test_OpenDomain(conn, handle, sid) */ function test_EnumDomainUsers(conn, dom_handle) { - var io = irpcObj(); + var i, io = irpcObj(); print("Testing samr_EnumDomainUsers\n"); io.input.domain_handle = dom_handle; io.input.resume_handle = 0; @@ -105,7 +105,7 @@ function test_EnumDomainUsers(conn, dom_handle) if (io.output.sam == NULL) { return; } - entries = io.output.sam.entries; + var entries = io.output.sam.entries; for (i=0;i Date: Sat, 9 Jul 2005 05:31:38 +0000 Subject: r8257: add a samr rpc test page in the web server. It lists all level3 information from QueryUserInfo for all users in the domain. If you want to see why I am putting the effort into ejs, then please read swat/scripting/samr.js, and compare it to other methods of rpc access for our web management interface. Using ejs like this will make building a rich interface _much_ easier. (This used to be commit eb354f6da7ed79eb080f2ba47df2ea655e1891db) --- testprogs/ejs/samr.js | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samr.js b/testprogs/ejs/samr.js index 4cbe7b9bc8..df54ca6062 100644 --- a/testprogs/ejs/samr.js +++ b/testprogs/ejs/samr.js @@ -24,16 +24,6 @@ function check_status_ok(status) assert(status.is_ok == true); } -/* - form a lsa_String -*/ -function lsaString(s) -{ - var o = new Object(); - o.string = s; - return o; -} - /* test the samr_Connect interface */ @@ -67,7 +57,7 @@ function test_LookupDomain(conn, handle, domain) var io = irpcObj(); print("Testing samr_LookupDomain\n"); io.input.connect_handle = handle; - io.input.domain_name = lsaString(domain); + io.input.domain_name = domain; status = dcerpc_samr_LookupDomain(conn, io); check_status_ok(status); return io.output.sid; @@ -107,7 +97,7 @@ function test_EnumDomainUsers(conn, dom_handle) } var entries = io.output.sam.entries; for (i=0;i Date: Sun, 10 Jul 2005 00:19:41 +0000 Subject: r8269: added automatic testing of rpc calls from ejs in 'make test' (This used to be commit c760180119b4ac9307783bc50892a3dc57b2465e) --- testprogs/ejs/echo.js | 1 + testprogs/ejs/samr.js | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js index 2040a4663e..9607466b0e 100644 --- a/testprogs/ejs/echo.js +++ b/testprogs/ejs/echo.js @@ -260,3 +260,4 @@ test_TestSurrounding(conn); test_TestDoublePointer(conn); print("All OK\n"); +return 0; diff --git a/testprogs/ejs/samr.js b/testprogs/ejs/samr.js index df54ca6062..1a1ca50569 100644 --- a/testprogs/ejs/samr.js +++ b/testprogs/ejs/samr.js @@ -179,7 +179,7 @@ print("Connecting to " + binding + "\n"); status = rpc_connect(conn, binding, "samr"); if (status.is_ok != true) { print("Failed to connect to " + binding + " - " + status.errstr + "\n"); - return; + return -1; } handle = test_Connect(conn); @@ -187,3 +187,4 @@ test_EnumDomains(conn, handle); test_Close(conn, handle); print("All OK\n"); +return 0; -- cgit From 001dc40ecd76bb7ea0e3d2a043bab42c9ba7c780 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 10 Jul 2005 00:26:54 +0000 Subject: r8271: make the ejs test scripts directly executable scripts using: #!/usr/bin/env smbscript I'll be interested to see how portable this is in the build farm. (This used to be commit 757c22aab43fadc776006ac5970dbfb46a13fa3c) --- testprogs/ejs/echo.js | 1 + testprogs/ejs/samr.js | 1 + 2 files changed, 2 insertions(+) mode change 100644 => 100755 testprogs/ejs/echo.js mode change 100644 => 100755 testprogs/ejs/samr.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js old mode 100644 new mode 100755 index 9607466b0e..4f0fc79f9a --- a/testprogs/ejs/echo.js +++ b/testprogs/ejs/echo.js @@ -1,3 +1,4 @@ +#!/usr/bin/env smbscript /* test echo pipe calls from ejs */ diff --git a/testprogs/ejs/samr.js b/testprogs/ejs/samr.js old mode 100644 new mode 100755 index 1a1ca50569..ec2096b818 --- a/testprogs/ejs/samr.js +++ b/testprogs/ejs/samr.js @@ -1,3 +1,4 @@ +#!/usr/bin/env smbscript /* test samr calls from ejs */ -- cgit From b7c6b20c37b4e44f6d6cb60bff187e76ac6c4b9b Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 10 Jul 2005 08:47:34 +0000 Subject: r8287: yay! finally irpc calls from ejs are all working. This is a demo script that shows the nbt server statistics. For example: nbt_server statistics: total_received: 185 total_sent: 59 query_count: 13 release_count: 21 register_count: 7 (This used to be commit cd1ea857ce19ac2e105230703174634d8b9d5122) --- testprogs/ejs/nbtstats | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100755 testprogs/ejs/nbtstats (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/nbtstats b/testprogs/ejs/nbtstats new file mode 100755 index 0000000000..f2655e8c6e --- /dev/null +++ b/testprogs/ejs/nbtstats @@ -0,0 +1,24 @@ +#!/usr/bin/env smbscript +/* + demonstrate access to irpc calls from ejs +*/ + +var conn = new Object(); + +status = irpc_connect(conn, "nbt_server"); +assert(status.is_ok == true); + +io = new Object(); +io.input = new Object(); +io.input.level = NBTD_INFO_STATISTICS; +status = dcerpc_nbtd_information(conn, io); +assert(status.is_ok == true); +assert(io.results.length == 1); + +print("nbt_server statistics:\n"); +stats = io.results[0].info.stats; + +for (r in stats) { + print("\t" + r + ":\t" + stats[r] + "\n"); +} +return 0; -- cgit From f9ff72cbda6b4e59448fd79ef9e12f264d48015f Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 11 Jul 2005 00:23:57 +0000 Subject: r8298: - started building a library of js routines in scripting/libjs/ - switched the existing test programs over to using the library - added install of js lib (This used to be commit 2a444dedbe44347268affc6458196f93ca7d372b) --- testprogs/ejs/echo.js | 43 +----------------- testprogs/ejs/samr.js | 122 +++++++++++--------------------------------------- 2 files changed, 27 insertions(+), 138 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js index 4f0fc79f9a..312e599d50 100755 --- a/testprogs/ejs/echo.js +++ b/testprogs/ejs/echo.js @@ -3,16 +3,7 @@ test echo pipe calls from ejs */ - -/* - helper function to setup a rpc io object, ready for input -*/ -function irpcObj() -{ - var o = new Object(); - o.input = new Object(); - return o; -} +libinclude("base.js"); /* generate a ramp as an integer array @@ -27,38 +18,6 @@ function ramp_array(N) } -/* - check that a status result is OK -*/ -function check_status_ok(status) -{ - if (status.is_ok != true) { - printVars(status); - } - assert(status.is_ok == true); -} - -/* - check that two arrays are equal -*/ -function check_array_equal(a1, a2) -{ - assert(a1.length == a2.length); - for (i=0; i Date: Mon, 11 Jul 2005 07:43:36 +0000 Subject: r8317: convert the example scripts over to the new GetOptions() call (This used to be commit 5f079d74630cf6431ec8af7240f60054cf8b9ab7) --- testprogs/ejs/argv.js | 15 +++++++++++++-- testprogs/ejs/echo.js | 17 ++++++++++++++++- testprogs/ejs/nbtstats | 10 ++++++++++ testprogs/ejs/samr.js | 23 +++++++++++++++-------- 4 files changed, 54 insertions(+), 11 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/argv.js b/testprogs/ejs/argv.js index 2f8dc74174..093123014a 100644 --- a/testprogs/ejs/argv.js +++ b/testprogs/ejs/argv.js @@ -1,7 +1,18 @@ /* - demonstrate use of argv + demonstrate use of GetOptions */ +var ok; +var options = new Object(); + +ok = GetOptions(ARGV, options, + "POPT_AUTOHELP", + "POPT_COMMON_SAMBA", + "myopt=s", + "intopt=i", + "noopt"); +printVars(ok); + println("You called this script with arguments:"); -printVars(ARGV); +printVars(options); diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js index 312e599d50..e5b0b2b1bf 100755 --- a/testprogs/ejs/echo.js +++ b/testprogs/ejs/echo.js @@ -3,6 +3,17 @@ test echo pipe calls from ejs */ +var options = new Object(); + +ok = GetOptions(ARGV, options, + "POPT_AUTOHELP", + "POPT_COMMON_SAMBA", + "POPT_COMMON_CREDENTIALS"); +if (ok == false) { + println("Failed to parse options: " + options.ERROR); + return -1; +} + libinclude("base.js"); /* @@ -198,7 +209,11 @@ if (ARGV.length == 0) { exit(0); } -var binding = ARGV[0]; +if (options.ARGV.length != 1) { + println("Usage: samr.js "); + return -1; +} +var binding = options.ARGV[0]; var conn = new Object(); print("Connecting to " + binding + "\n"); diff --git a/testprogs/ejs/nbtstats b/testprogs/ejs/nbtstats index f2655e8c6e..fe93a728cd 100755 --- a/testprogs/ejs/nbtstats +++ b/testprogs/ejs/nbtstats @@ -3,6 +3,16 @@ demonstrate access to irpc calls from ejs */ +var options = new Object(); + +ok = GetOptions(ARGV, options, + "POPT_AUTOHELP", + "POPT_COMMON_SAMBA"); +if (ok == false) { + println("Failed to parse options: " + options.ERROR); + return -1; +} + var conn = new Object(); status = irpc_connect(conn, "nbt_server"); diff --git a/testprogs/ejs/samr.js b/testprogs/ejs/samr.js index 1c613d5619..d0c2990158 100755 --- a/testprogs/ejs/samr.js +++ b/testprogs/ejs/samr.js @@ -3,9 +3,19 @@ test samr calls from ejs */ +var options = new Object(); + +ok = GetOptions(ARGV, options, + "POPT_AUTOHELP", + "POPT_COMMON_SAMBA", + "POPT_COMMON_CREDENTIALS"); +if (ok == false) { + println("Failed to parse options: " + options.ERROR); + return -1; +} + libinclude("base.js"); libinclude("samr.js"); -libinclude("samr.js"); /* @@ -96,14 +106,11 @@ function test_EnumDomains(conn, handle) } } - - -if (ARGV.length == 0) { - print("Usage: samr.js \n"); - exit(0); +if (options.ARGV.length != 1) { + println("Usage: samr.js "); + return -1; } - -var binding = ARGV[0]; +var binding = options.ARGV[0]; var conn = new Object(); print("Connecting to " + binding + "\n"); -- cgit From 9370fca5dd014520b0c8970e55d33907921be518 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 12 Jul 2005 05:58:41 +0000 Subject: r8346: added a sprintf test suite for ejs (This used to be commit 14af014410a9971d447aafe00640407698f63d7f) --- testprogs/ejs/sprintf.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100755 testprogs/ejs/sprintf.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/sprintf.js b/testprogs/ejs/sprintf.js new file mode 100755 index 0000000000..34df4f9a42 --- /dev/null +++ b/testprogs/ejs/sprintf.js @@ -0,0 +1,22 @@ +#!/usr/bin/env smbscript +/* + test sprintf function +*/ + +function check_result(s, v) +{ + if (s != v) { + println("expected '" + v + "' but got '" + s + "'"); + } + assert(s == v); +} + +check_result(sprintf("%d", 7), "7"); +check_result(sprintf("%04d", 42), "0042"); +check_result(sprintf("my string=%7.2s", "foo%7"), "my string= fo"); +check_result(sprintf("blah=0x%*x", 4, 19), "blah=0x 13"); +check_result(sprintf("blah=0x%0*x", 4, 19), "blah=0x0013"); +check_result(sprintf("blah=%.0f", 1032), "blah=1032"); +check_result(sprintf("%4.2f%%", 72.32), "72.32%"); + +println("ALL OK"); -- cgit From 26a55c330a8cd79da290b2ad0e15aaf94be6ebcf Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 12 Jul 2005 06:57:25 +0000 Subject: r8355: - added a vsprintf() function - removed the --outputdir option from provision, as its not used any more (as ejs knows the real paths) (This used to be commit abbf9c703c17c2edc2d978dade3619a96c38d0d9) --- testprogs/ejs/bugs.js | 34 +++++++++++++++++++++++++++++++++- testprogs/ejs/sprintf.js | 7 +++++++ 2 files changed, 40 insertions(+), 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/bugs.js b/testprogs/ejs/bugs.js index 01174f9eaf..3c8a4daab3 100644 --- a/testprogs/ejs/bugs.js +++ b/testprogs/ejs/bugs.js @@ -8,6 +8,7 @@ /**************************************** demo a bug in constructing arrays fix at http://build.samba.org/build.pl?function=diff;tree=samba4;revision=7124 +status: FIXED *****************************************/ function arraybug() { var a; @@ -38,6 +39,7 @@ function arraybug() { /**************************************** demo a bug in variable arguments fix at http://build.samba.org/build.pl?function=diff;tree=samba4;revision=7085 +status: FIXED *****************************************/ function argsbug() { println("we should have been called with 3 arguments"); @@ -51,6 +53,7 @@ function argsbug() { /**************************************** demo a bug in constructing objects no fix available yet +status: SUBMITTED *****************************************/ function MyObj() { var o = new Object(); @@ -68,10 +71,23 @@ function objbug() { assert(o2.test == 42); } +/* + demo a expression handling bug + status: SUBMITTED +*/ +function exprbug() { + var a = new Array(10); + var i; + for (i=0;i<4;i++) { + a[1+(i*2)] = i; + a[2+(i*2)] = i*2; + } +} /**************************************** demo lack of recursion fix in http://build.samba.org/build.pl?function=diff;tree=samba4;revision=7127 +status: FIXED *****************************************/ function fibonacci(n) { if (n < 3) { @@ -87,9 +103,25 @@ function recursebug() { } } +/**************************************** +demo lack of function variables inside functions +status: FIXED IN SAMBA +*****************************************/ +function callback() +{ + return "testing"; +} + +function fnbug(c) +{ + s = c(); + assert(s == "testing"); +} /* run the tests */ arraybug(); argsbug("one", "two", "three"); recursebug(); -objbug() +exprbug(); +fnbug(callback); +objbug(); diff --git a/testprogs/ejs/sprintf.js b/testprogs/ejs/sprintf.js index 34df4f9a42..4d3d9a7555 100755 --- a/testprogs/ejs/sprintf.js +++ b/testprogs/ejs/sprintf.js @@ -11,6 +11,11 @@ function check_result(s, v) assert(s == v); } +function xprintf() +{ + return "XX{" + vsprintf(arguments) + "}XX"; +} + check_result(sprintf("%d", 7), "7"); check_result(sprintf("%04d", 42), "0042"); check_result(sprintf("my string=%7.2s", "foo%7"), "my string= fo"); @@ -19,4 +24,6 @@ check_result(sprintf("blah=0x%0*x", 4, 19), "blah=0x0013"); check_result(sprintf("blah=%.0f", 1032), "blah=1032"); check_result(sprintf("%4.2f%%", 72.32), "72.32%"); +check_result(xprintf("%4.2f%% and %s", 72.32, "foo"),"XX{72.32% and foo}XX"); + println("ALL OK"); -- cgit From 6fafd2f05579392a78a58c27d780786456bd2340 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 13 Jul 2005 05:32:41 +0000 Subject: r8413: mark exprbug() as fixed, and add a new bug (This used to be commit c470c3ceac668635c83aa80730321ae7c41ad626) --- testprogs/ejs/bugs.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/bugs.js b/testprogs/ejs/bugs.js index 3c8a4daab3..4d66a475df 100644 --- a/testprogs/ejs/bugs.js +++ b/testprogs/ejs/bugs.js @@ -73,7 +73,7 @@ function objbug() { /* demo a expression handling bug - status: SUBMITTED + status: FIXED */ function exprbug() { var a = new Array(10); @@ -118,10 +118,21 @@ function fnbug(c) assert(s == "testing"); } +/**************************************** +demo incorrect handling of reserved words in strings +status: SUBMITTED +*****************************************/ +function reservedbug() +{ + assert("funct" + "ion" == 'function'); +} + + /* run the tests */ arraybug(); argsbug("one", "two", "three"); recursebug(); exprbug(); fnbug(callback); +reservedbug(); objbug(); -- cgit From 63535f566e2fbe9244fd3e50b9c8d1281b822fc0 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 15 Jul 2005 05:40:34 +0000 Subject: r8481: switched ldb ejs called over to an OO interface, so you do: var ldb = ldb_init(); res = ldb.search(dbfile, "(objectClass=user)"); you can also do: ldbSearch = ldb.search; res = ldbSearch(dbfile, "(objectClass=user)"); if you want the old interface (ie. you can use this to import functions into the global or local namespace). (This used to be commit 3093057d9735cbb62f57e7159264d5a28b85320f) --- testprogs/ejs/ldb.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldb.js b/testprogs/ejs/ldb.js index 7675197904..133de27aef 100644 --- a/testprogs/ejs/ldb.js +++ b/testprogs/ejs/ldb.js @@ -6,19 +6,20 @@ println("Trying a attribute constrained search on samdb"); var dbfile = lpGet("sam database"); var attrs = new Array("name", "dnsDomain", "objectSid", "dn"); +var ldb = ldb_init(); -res = ldbSearch(dbfile, "(objectClass=domain)", attrs); +res = ldb.search(dbfile, "(objectClass=domain)", attrs); printVars(res); println("and now an unconstrained search"); var dbfile = lpGet("sam database"); -res = ldbSearch(dbfile, "(objectClass=user)"); +res = ldb.search(dbfile, "(objectClass=user)"); printVars(res); println("and a bad search"); -res = ldbSearch("foo"); +res = ldb.search("foo"); println("all done"); -- cgit From a0bc4da1a307753e3b28a11863f50d66b0894190 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 15 Jul 2005 07:18:23 +0000 Subject: r8483: switched our generated ejs rpc code over to the new OO interface. This means we don't pollute the name space, and also makes for faster startup times as we only create variables for the pipes that we use, not all pipes (This used to be commit 57d7a585e8162d21c7152952aa0cc7471968784f) --- testprogs/ejs/echo.js | 38 ++++++++++++++++++++------------------ testprogs/ejs/nbtstats | 5 +++-- 2 files changed, 23 insertions(+), 20 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js index e5b0b2b1bf..d464f8623e 100755 --- a/testprogs/ejs/echo.js +++ b/testprogs/ejs/echo.js @@ -16,6 +16,8 @@ if (ok == false) { libinclude("base.js"); +echo = rpcecho_init(); + /* generate a ramp as an integer array */ @@ -40,7 +42,7 @@ function test_AddOne(conn) for (i=0;i<10;i++) { io.input.in_data = i; - status = dcerpc_echo_AddOne(conn, io); + status = echo.echo_AddOne(conn, io); check_status_ok(status); assert(io.output.out_data == i + 1); } @@ -58,7 +60,7 @@ function test_EchoData(conn) for (i=0; i<30; i=i+5) { io.input.len = i; io.input.in_data = ramp_array(i); - status = dcerpc_echo_EchoData(conn, io); + status = echo.echo_EchoData(conn, io); check_status_ok(status); check_array_equal(io.input.in_data, io.output.out_data); } @@ -77,7 +79,7 @@ function test_SinkData(conn) for (i=0; i<30; i=i+5) { io.input.len = i; io.input.data = ramp_array(i); - status = dcerpc_echo_SinkData(conn, io); + status = echo.echo_SinkData(conn, io); check_status_ok(status); } } @@ -94,7 +96,7 @@ function test_SourceData(conn) for (i=0; i<30; i=i+5) { io.input.len = i; - status = dcerpc_echo_SourceData(conn, io); + status = echo.echo_SourceData(conn, io); check_status_ok(status); correct = ramp_array(i); check_array_equal(correct, io.output.data); @@ -112,7 +114,7 @@ function test_TestCall(conn) print("Testing echo_TestCall\n"); io.input.s1 = "my test string"; - status = dcerpc_echo_TestCall(conn, io); + status = echo.echo_TestCall(conn, io); check_status_ok(status); assert("this is a test string" == io.output.s2); } @@ -128,7 +130,7 @@ function test_TestCall2(conn) for (i=1;i<=7;i++) { io.input.level = i; - status = dcerpc_echo_TestCall2(conn, io); + status = echo.echo_TestCall2(conn, io); check_status_ok(status); } } @@ -143,7 +145,7 @@ function test_TestSleep(conn) print("Testing echo_TestSleep\n"); io.input.seconds = 1; - status = dcerpc_echo_TestSleep(conn, io); + status = echo.echo_TestSleep(conn, io); check_status_ok(status); } @@ -156,18 +158,18 @@ function test_TestEnum(conn) print("Testing echo_TestEnum\n"); - io.input.foo1 = ECHO_ENUM1; + io.input.foo1 = echo.ECHO_ENUM1; io.input.foo2 = new Object(); - io.input.foo2.e1 = ECHO_ENUM1; - io.input.foo2.e2 = ECHO_ENUM1_32; + io.input.foo2.e1 = echo.ECHO_ENUM1; + io.input.foo2.e2 = echo.ECHO_ENUM1_32; io.input.foo3 = new Object(); - io.input.foo3.e1 = ECHO_ENUM2; - status = dcerpc_echo_TestEnum(conn, io); + io.input.foo3.e1 = echo.ECHO_ENUM2; + status = echo.echo_TestEnum(conn, io); check_status_ok(status); - assert(io.output.foo1 == ECHO_ENUM1); - assert(io.output.foo2.e1 == ECHO_ENUM2); - assert(io.output.foo2.e2 == ECHO_ENUM1_32); - assert(io.output.foo3.e1 == ECHO_ENUM2); + assert(io.output.foo1 == echo.ECHO_ENUM1); + assert(io.output.foo2.e1 == echo.ECHO_ENUM2); + assert(io.output.foo2.e2 == echo.ECHO_ENUM1_32); + assert(io.output.foo3.e1 == echo.ECHO_ENUM2); } /* @@ -182,7 +184,7 @@ function test_TestSurrounding(conn) io.input.data = new Object(); io.input.data.x = 10; io.input.data.surrounding = ramp_array(10); - status = dcerpc_echo_TestSurrounding(conn, io); + status = echo.echo_TestSurrounding(conn, io); check_status_ok(status); assert(io.output.data.surrounding.length == 20); check_array_zero(io.output.data.surrounding); @@ -198,7 +200,7 @@ function test_TestDoublePointer(conn) print("Testing echo_TestDoublePointer\n"); io.input.data = 7; - status = dcerpc_echo_TestDoublePointer(conn, io); + status = echo.echo_TestDoublePointer(conn, io); check_status_ok(status); assert(io.input.data == io.input.data); } diff --git a/testprogs/ejs/nbtstats b/testprogs/ejs/nbtstats index fe93a728cd..20bc781f03 100755 --- a/testprogs/ejs/nbtstats +++ b/testprogs/ejs/nbtstats @@ -14,14 +14,15 @@ if (ok == false) { } var conn = new Object(); +var irpc = irpc_init(); status = irpc_connect(conn, "nbt_server"); assert(status.is_ok == true); io = new Object(); io.input = new Object(); -io.input.level = NBTD_INFO_STATISTICS; -status = dcerpc_nbtd_information(conn, io); +io.input.level = irpc.NBTD_INFO_STATISTICS; +status = irpc.nbtd_information(conn, io); assert(status.is_ok == true); assert(io.results.length == 1); -- cgit From 4f62205cad46539cc459efe106c0a036f08ed0b9 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 15 Jul 2005 09:23:23 +0000 Subject: r8486: switched to a separate connection operation in ldb interface (a suggestion from simo) (This used to be commit 98c9c4ecb87e1b140002390067892806464849da) --- testprogs/ejs/ldb.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldb.js b/testprogs/ejs/ldb.js index 133de27aef..f27f49c7a4 100644 --- a/testprogs/ejs/ldb.js +++ b/testprogs/ejs/ldb.js @@ -15,11 +15,12 @@ printVars(res); println("and now an unconstrained search"); var dbfile = lpGet("sam database"); -res = ldb.search(dbfile, "(objectClass=user)"); +var db = ldb.connect(dbfile); +res = ldb.search(db, "(objectClass=user)"); printVars(res); println("and a bad search"); -res = ldb.search("foo"); +res = ldb.search(db, "foo"); println("all done"); -- cgit From 94d99612b9093ca83da3b6b66f875915eeabb389 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 15 Jul 2005 11:10:38 +0000 Subject: r8488: after discussions with simo, moved to a full OO interface, so you don't need to keep a 'db' variable around. The ldb object knows what it is connected to. Added a simple ldb testsuite in testprogs/ldb.js (This used to be commit cf35818648b5b649d0cd25f115a04b7b5b5311aa) --- testprogs/ejs/ldb.js | 70 ++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 57 insertions(+), 13 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldb.js b/testprogs/ejs/ldb.js index f27f49c7a4..dee33774b3 100644 --- a/testprogs/ejs/ldb.js +++ b/testprogs/ejs/ldb.js @@ -1,26 +1,70 @@ +#!/bin/sh +exec smbscript "$0" ${1+"$@"} /* demonstrate access to ldb databases from ejs */ -println("Trying a attribute constrained search on samdb"); -var dbfile = lpGet("sam database"); -var attrs = new Array("name", "dnsDomain", "objectSid", "dn"); var ldb = ldb_init(); -res = ldb.search(dbfile, "(objectClass=domain)", attrs); +function basic_tests(ldb) +{ + println("Running basic tests"); + ok = ldb.add(" +dn: cn=x,cn=test +objectClass: foo +x: 3 +"); + assert(ok); -printVars(res); + println("Testing ldb.search"); + var res = ldb.search("(objectClass=*)"); + assert(res[0].objectClass[0] == "foo"); + assert(res[0].dn == "cn=x,cn=test"); + assert(res[0].x == 3); -println("and now an unconstrained search"); + ok = ldb.add(" +dn: cn=x2,cn=test +objectClass: foo +x: 4 +"); + assert(ok); + var attrs = new Array("x"); + res = ldb.search("x=4", attrs); + assert(res[0].x == 4); + assert(res[0].objectClass == undefined); + assert(res[0].dn == "cn=x2,cn=test"); -var dbfile = lpGet("sam database"); -var db = ldb.connect(dbfile); -res = ldb.search(db, "(objectClass=user)"); -printVars(res); + ok = ldb.delete("cn=x,cn=test"); + assert(ok); + + ok = ldb.rename("cn=x2,cn=test", "cn=x3,cn=test"); + assert(ok); + res = ldb.search("x=4", attrs); + assert(res[0].dn == "cn=x3,cn=test"); + + ok = ldb.modify(" +dn: cn=x3,cn=test +changetype: modify +add: x +x: 7 +"); + + res = ldb.search("x=7"); + assert(res.length == 1); + assert(res[0].x.length == 2); + +} + +var sys = sys_init(); +var dbfile = "test.ldb"; +sys.unlink(dbfile); +var ok = ldb.connect("tdb://" + dbfile); +assert(ok); + +basic_tests(ldb); + +sys.unlink(dbfile); -println("and a bad search"); -res = ldb.search(db, "foo"); -println("all done"); -- cgit From 524044a64a432a3311a010e30e0c0fed1423730b Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 20 Jul 2005 06:21:30 +0000 Subject: r8636: fixed the ejs ldb test to work with the new ldb.search() syntax, and add it to our test suite so it will be maintained (This used to be commit 42ae50db8108ddc7c33f832d8752f809c99de157) --- testprogs/ejs/ldb.js | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) mode change 100644 => 100755 testprogs/ejs/ldb.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldb.js b/testprogs/ejs/ldb.js old mode 100644 new mode 100755 index dee33774b3..819192b51e --- a/testprogs/ejs/ldb.js +++ b/testprogs/ejs/ldb.js @@ -30,17 +30,17 @@ x: 4 "); assert(ok); var attrs = new Array("x"); - res = ldb.search("x=4", attrs); + res = ldb.search("x=4", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res[0].x == 4); assert(res[0].objectClass == undefined); assert(res[0].dn == "cn=x2,cn=test"); - ok = ldb.delete("cn=x,cn=test"); + ok = ldb.del("cn=x,cn=test"); assert(ok); ok = ldb.rename("cn=x2,cn=test", "cn=x3,cn=test"); assert(ok); - res = ldb.search("x=4", attrs); + res = ldb.search("x=4", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res[0].dn == "cn=x3,cn=test"); ok = ldb.modify(" @@ -56,15 +56,13 @@ x: 7 } -var sys = sys_init(); +sys_init(ldb); var dbfile = "test.ldb"; -sys.unlink(dbfile); +ldb.unlink(dbfile); var ok = ldb.connect("tdb://" + dbfile); assert(ok); basic_tests(ldb); -sys.unlink(dbfile); - - - +ldb.unlink(dbfile); +return 0; -- cgit From 620301858a5b747002eebe2b9fcef10712ee8249 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 20 Jul 2005 07:04:07 +0000 Subject: r8638: continue the trend of maknig our C functions true ejs objects by making the string functions into an object. To keep existing code working I have added: string_init(global); into base.js. That brings the functions into the global scope for our existing scripts (This used to be commit a978484738168b82441c4dc4f5f803d349769a4b) --- testprogs/ejs/sprintf.js | 2 ++ 1 file changed, 2 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/sprintf.js b/testprogs/ejs/sprintf.js index 4d3d9a7555..6ae8605718 100755 --- a/testprogs/ejs/sprintf.js +++ b/testprogs/ejs/sprintf.js @@ -3,6 +3,8 @@ test sprintf function */ +string_init(local); + function check_result(s, v) { if (s != v) { -- cgit From 86d628a292a22973597e0c06d4a36e20c58ae31c Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 20 Jul 2005 07:20:03 +0000 Subject: r8639: moved loadparm calls into an ejs object (This used to be commit 2dc493eea6f9d87c40ad0dc755f528ce0b33ca47) --- testprogs/ejs/loadparm.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/loadparm.js b/testprogs/ejs/loadparm.js index 6c2a80bb73..f56ca9f7fc 100644 --- a/testprogs/ejs/loadparm.js +++ b/testprogs/ejs/loadparm.js @@ -2,9 +2,11 @@ demonstrate access to loadparm functions from ejs */ +loadparm_init(local); + function showParameter(name) { print(name + ": "); - printVars(lpGet(name)); + printVars(get(name)); } for (v in ARGV) { @@ -12,7 +14,7 @@ for (v in ARGV) { } print("defined services: "); -printVars(lpServices()); +printVars(services()); showParameter("server services"); showParameter("netbios name"); @@ -21,4 +23,3 @@ showParameter("workgroup"); showParameter("log level"); showParameter("server signing"); showParameter("interfaces"); - -- cgit From 11832f72224b4643eb7bbc96eb1c8851c1469a3c Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 20 Jul 2005 11:56:07 +0000 Subject: r8652: added a test for the boolean bug just fixed (This used to be commit 19ae68f59ad9b81005eb68b3773f24234c0f891d) --- testprogs/ejs/bugs.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/bugs.js b/testprogs/ejs/bugs.js index 4d66a475df..0c1cecb486 100644 --- a/testprogs/ejs/bugs.js +++ b/testprogs/ejs/bugs.js @@ -128,6 +128,22 @@ function reservedbug() } +/**************************************** +demo incorrect handling of boolean functions +status: SUBMITTED +*****************************************/ +function no() +{ + return false; +} + +function boolbug() +{ + assert(false == no()); + assert(!no()); +} + + /* run the tests */ arraybug(); argsbug("one", "two", "three"); @@ -135,4 +151,5 @@ recursebug(); exprbug(); fnbug(callback); reservedbug(); +boolbug(); objbug(); -- cgit From 77e52a4e2c4587785930491695486b2d8b26b509 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sun, 24 Jul 2005 22:18:01 +0000 Subject: r8738: Test (using ejs!) the basic operation of the ldb modules. ejs seems to test this stuff very nicely! Andrew Bartlett (This used to be commit 325f6d24dfc285587bde9fea6eeaf136c2731eff) --- testprogs/ejs/ldb.js | 64 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 60 insertions(+), 4 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldb.js b/testprogs/ejs/ldb.js index 819192b51e..ea090a65b7 100755 --- a/testprogs/ejs/ldb.js +++ b/testprogs/ejs/ldb.js @@ -6,7 +6,7 @@ exec smbscript "$0" ${1+"$@"} var ldb = ldb_init(); - +var sys; function basic_tests(ldb) { println("Running basic tests"); @@ -53,16 +53,72 @@ x: 7 res = ldb.search("x=7"); assert(res.length == 1); assert(res[0].x.length == 2); + + /* Check a few things before we add modules */ + assert(res[0].objectGUID == undefined); + assert(res[0].createTimestamp == undefined); + assert(res[0].whenCreated == undefined); + +} +function setup_modules(ldb) +{ + ok = ldb.add(" +dn: @MODULES +@LIST: timestamps,objectguid,rdn_name +"); +} + +/* Test the basic operation of the timestamps,objectguid and name_rdn + modules */ + +function modules_test(ldb) +{ + println("Running modules tests"); + ok = ldb.add(" +dn: cn=x8,cn=test +objectClass: foo +x: 8 +"); + assert(ok); + + ok = ldb.add(" +dn: cn=x9,cn=test +objectClass: foo +x: 9 +"); + assert(ok); + + var res = ldb.search("x=8", NULL, ldb.SCOPE_DEFAULT); + assert(res[0].objectGUID != undefined); + assert(res[0].createTimestamp != undefined); + assert(res[0].whenCreated != undefined); + assert(res[0].name == "x8"); + + var res2 = ldb.search("x=9", NULL, ldb.SCOPE_DEFAULT); + assert(res2[0].objectGUID != undefined); + assert(res2[0].createTimestamp != undefined); + assert(res2[0].whenCreated != undefined); + assert(res2[0].name == "x9"); + + assert(res[0].objectGUID != res2[0].objectGUID); + } -sys_init(ldb); +sys = sys_init(); var dbfile = "test.ldb"; -ldb.unlink(dbfile); +sys.unlink(dbfile); var ok = ldb.connect("tdb://" + dbfile); assert(ok); basic_tests(ldb); -ldb.unlink(dbfile); +setup_modules(ldb); +ldb = ldb_init(); +var ok = ldb.connect("tdb://" + dbfile); +assert(ok); + +modules_test(ldb); + +sys.unlink(dbfile); return 0; -- cgit From a7f9d9c5b8e77e0530ace68bd2ed4a7c374bf0fa Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 25 Jul 2005 01:17:09 +0000 Subject: r8740: Extend the rdn_name module to handle adding the rdn as an attribute. ie: dn: cn=foo,ou=bar objectClass: person implies dn: cn=foo,ou=bar objectClass: person cn: foo (as well as a pile more default attributes) We also correct the case in the attirbute to match that in the DN (win2k3 behaviour) and I have a testsuite (in ejs) to prove it. This module also found a bug in our provision.ldif, so and reduces code complexity in the samdb module. Andrew Bartlett (This used to be commit 0cc58f5c3cce12341ad0f7a90cdd85a3fab786b3) --- testprogs/ejs/ldap.js | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++ testprogs/ejs/ldb.js | 3 +++ 2 files changed, 59 insertions(+) create mode 100755 testprogs/ejs/ldap.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js new file mode 100755 index 0000000000..bba81f3971 --- /dev/null +++ b/testprogs/ejs/ldap.js @@ -0,0 +1,56 @@ +#!/bin/sh +exec smbscript "$0" ${1+"$@"} +/* + test certin LDAP behaviours +*/ + +var ldb = ldb_init(); + +var options = new Object(); + +ok = GetOptions(ARGV, options, + "POPT_AUTOHELP", + "POPT_COMMON_SAMBA", + "POPT_COMMON_CREDENTIALS"); +if (ok == false) { + println("Failed to parse options: " + options.ERROR); + return -1; +} + +if (options.ARGV.length != 2) { + println("Usage: ldap.js "); + return -1; +} + +var base_dn = options.ARGV[0]; +var host = options.ARGV[1]; + +function basic_tests(ldb, base_dn) +{ + println("Running basic tests"); + + ldb.del("cn=ldaptestuser,cn=users," + base_dn); + + ok = ldb.add(" +dn: cn=ldaptestuser,cn=users," + base_dn + " +objectClass: user +objectClass: person +cn: LDAPtestUSER +"); + assert(ok); + + println("Testing ldb.search"); + var res = ldb.search("(&(cn=ldaptestuser)(objectClass=user))"); + + assert(res[0].dn == "cn=ldaptestuser,cn=users," + base_dn); + assert(res[0].cn == "ldaptestuser"); + assert(res[0].name == "ldaptestuser"); + assert(res[0].objectGUID != undefined); + assert(res[0].whenCreated != undefined); + +} + +var ok = ldb.connect("ldap://" + host); +basic_tests(ldb, base_dn) + +return 0; diff --git a/testprogs/ejs/ldb.js b/testprogs/ejs/ldb.js index ea090a65b7..812c5a5b96 100755 --- a/testprogs/ejs/ldb.js +++ b/testprogs/ejs/ldb.js @@ -86,6 +86,7 @@ x: 8 dn: cn=x9,cn=test objectClass: foo x: 9 +cn: X9 "); assert(ok); @@ -94,12 +95,14 @@ x: 9 assert(res[0].createTimestamp != undefined); assert(res[0].whenCreated != undefined); assert(res[0].name == "x8"); + assert(res[0].cn == "x8"); var res2 = ldb.search("x=9", NULL, ldb.SCOPE_DEFAULT); assert(res2[0].objectGUID != undefined); assert(res2[0].createTimestamp != undefined); assert(res2[0].whenCreated != undefined); assert(res2[0].name == "x9"); + assert(res2[0].cn == "x9"); assert(res[0].objectGUID != res2[0].objectGUID); -- cgit From 52371753bd93a598bf27ed1b47860bd82c826d05 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 25 Jul 2005 02:23:27 +0000 Subject: r8743: automatically find the basedn in ldap.js (This used to be commit bdca9537a260369a53cbb286642db86bc3ea0828) --- testprogs/ejs/ldap.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index bba81f3971..bf9b4ac105 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -17,13 +17,12 @@ if (ok == false) { return -1; } -if (options.ARGV.length != 2) { - println("Usage: ldap.js "); +if (options.ARGV.length != 1) { + println("Usage: ldap.js "); return -1; } -var base_dn = options.ARGV[0]; -var host = options.ARGV[1]; +var host = options.ARGV[0]; function basic_tests(ldb, base_dn) { @@ -50,7 +49,17 @@ cn: LDAPtestUSER } +function find_basedn(ldb) +{ + var attrs = new Array("defaultNamingContext"); + var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); + assert(res.length == 1); + return res[0].defaultNamingContext; +} + var ok = ldb.connect("ldap://" + host); +var base_dn = find_basedn(ldb); + basic_tests(ldb, base_dn) return 0; -- cgit From fc9ffba41332b5755ede3683208ec989d30fdcd0 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 25 Jul 2005 02:26:38 +0000 Subject: r8745: make ldap.js cleanup after itself (This used to be commit 3a1c6a176ed37b4d696dab52b2f2e8ce5b681ff5) --- testprogs/ejs/ldap.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index bf9b4ac105..28a08879cf 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -30,7 +30,7 @@ function basic_tests(ldb, base_dn) ldb.del("cn=ldaptestuser,cn=users," + base_dn); - ok = ldb.add(" + var ok = ldb.add(" dn: cn=ldaptestuser,cn=users," + base_dn + " objectClass: user objectClass: person @@ -47,6 +47,8 @@ cn: LDAPtestUSER assert(res[0].objectGUID != undefined); assert(res[0].whenCreated != undefined); + ok = ldb.del(res[0].dn); + assert(ok); } function find_basedn(ldb) -- cgit From f6d2892faab30e6f205a81a008168b07e521ab85 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 28 Jul 2005 06:46:03 +0000 Subject: r8821: continue the trend to move to a more OO style of interface for our js calls. This changes the generated RPC and IRPC calls to use the 'this' object pointer instead of requiring the passing of the object on each call. So typical usage is now: var echo = echo_init(); var io = irpcObj(); status = echo.connect("ncacn_np:server"); assert(status.is_ok); io.input.in_data = 7; status = echo.AddOne(io); assert(status.is_ok); (This used to be commit f7b49ecd0868c1f0fec75b371f132bbf357ad8c6) --- testprogs/ejs/echo.js | 75 +++++++++++++++++++++++---------------------------- testprogs/ejs/samr.js | 48 ++++++++++++++++----------------- 2 files changed, 58 insertions(+), 65 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js index d464f8623e..aa44ca7eb0 100755 --- a/testprogs/ejs/echo.js +++ b/testprogs/ejs/echo.js @@ -16,8 +16,6 @@ if (ok == false) { libinclude("base.js"); -echo = rpcecho_init(); - /* generate a ramp as an integer array */ @@ -34,7 +32,7 @@ function ramp_array(N) /* test the echo_AddOne interface */ -function test_AddOne(conn) +function test_AddOne(echo) { var io = irpcObj(); @@ -42,7 +40,7 @@ function test_AddOne(conn) for (i=0;i<10;i++) { io.input.in_data = i; - status = echo.echo_AddOne(conn, io); + status = echo.echo_AddOne(io); check_status_ok(status); assert(io.output.out_data == i + 1); } @@ -51,7 +49,7 @@ function test_AddOne(conn) /* test the echo_EchoData interface */ -function test_EchoData(conn) +function test_EchoData(echo) { var io = irpcObj(); @@ -60,7 +58,7 @@ function test_EchoData(conn) for (i=0; i<30; i=i+5) { io.input.len = i; io.input.in_data = ramp_array(i); - status = echo.echo_EchoData(conn, io); + status = echo.echo_EchoData(io); check_status_ok(status); check_array_equal(io.input.in_data, io.output.out_data); } @@ -70,7 +68,7 @@ function test_EchoData(conn) /* test the echo_SinkData interface */ -function test_SinkData(conn) +function test_SinkData(echo) { var io = irpcObj(); @@ -79,7 +77,7 @@ function test_SinkData(conn) for (i=0; i<30; i=i+5) { io.input.len = i; io.input.data = ramp_array(i); - status = echo.echo_SinkData(conn, io); + status = echo.echo_SinkData(io); check_status_ok(status); } } @@ -88,7 +86,7 @@ function test_SinkData(conn) /* test the echo_SourceData interface */ -function test_SourceData(conn) +function test_SourceData(echo) { var io = irpcObj(); @@ -96,7 +94,7 @@ function test_SourceData(conn) for (i=0; i<30; i=i+5) { io.input.len = i; - status = echo.echo_SourceData(conn, io); + status = echo.echo_SourceData(io); check_status_ok(status); correct = ramp_array(i); check_array_equal(correct, io.output.data); @@ -107,14 +105,14 @@ function test_SourceData(conn) /* test the echo_TestCall interface */ -function test_TestCall(conn) +function test_TestCall(echo) { var io = irpcObj(); print("Testing echo_TestCall\n"); io.input.s1 = "my test string"; - status = echo.echo_TestCall(conn, io); + status = echo.echo_TestCall(io); check_status_ok(status); assert("this is a test string" == io.output.s2); } @@ -122,7 +120,7 @@ function test_TestCall(conn) /* test the echo_TestCall2 interface */ -function test_TestCall2(conn) +function test_TestCall2(echo) { var io = irpcObj(); @@ -130,7 +128,7 @@ function test_TestCall2(conn) for (i=1;i<=7;i++) { io.input.level = i; - status = echo.echo_TestCall2(conn, io); + status = echo.echo_TestCall2(io); check_status_ok(status); } } @@ -138,21 +136,21 @@ function test_TestCall2(conn) /* test the echo_TestSleep interface */ -function test_TestSleep(conn) +function test_TestSleep(echo) { var io = irpcObj(); print("Testing echo_TestSleep\n"); io.input.seconds = 1; - status = echo.echo_TestSleep(conn, io); + status = echo.echo_TestSleep(io); check_status_ok(status); } /* test the echo_TestEnum interface */ -function test_TestEnum(conn) +function test_TestEnum(echo) { var io = irpcObj(); @@ -164,7 +162,7 @@ function test_TestEnum(conn) io.input.foo2.e2 = echo.ECHO_ENUM1_32; io.input.foo3 = new Object(); io.input.foo3.e1 = echo.ECHO_ENUM2; - status = echo.echo_TestEnum(conn, io); + status = echo.echo_TestEnum(io); check_status_ok(status); assert(io.output.foo1 == echo.ECHO_ENUM1); assert(io.output.foo2.e1 == echo.ECHO_ENUM2); @@ -175,7 +173,7 @@ function test_TestEnum(conn) /* test the echo_TestSurrounding interface */ -function test_TestSurrounding(conn) +function test_TestSurrounding(echo) { var io = irpcObj(); @@ -184,7 +182,7 @@ function test_TestSurrounding(conn) io.input.data = new Object(); io.input.data.x = 10; io.input.data.surrounding = ramp_array(10); - status = echo.echo_TestSurrounding(conn, io); + status = echo.echo_TestSurrounding(io); check_status_ok(status); assert(io.output.data.surrounding.length == 20); check_array_zero(io.output.data.surrounding); @@ -193,48 +191,43 @@ function test_TestSurrounding(conn) /* test the echo_TestDoublePointer interface */ -function test_TestDoublePointer(conn) +function test_TestDoublePointer(echo) { var io = irpcObj(); print("Testing echo_TestDoublePointer\n"); io.input.data = 7; - status = echo.echo_TestDoublePointer(conn, io); + status = echo.echo_TestDoublePointer(io); check_status_ok(status); assert(io.input.data == io.input.data); } -if (ARGV.length == 0) { - print("Usage: echo.js \n"); - exit(0); -} - if (options.ARGV.length != 1) { - println("Usage: samr.js "); + println("Usage: echo.js "); return -1; } var binding = options.ARGV[0]; -var conn = new Object(); +var echo = rpcecho_init(); print("Connecting to " + binding + "\n"); -status = rpc_connect(conn, binding, "rpcecho"); +status = echo.connect(binding); if (status.is_ok != true) { - print("Failed to connect to " + binding + " - " + status.errstr + "\n"); + printf("Failed to connect to %s - %s\n", binding, status.errstr); return; } -test_AddOne(conn); -test_EchoData(conn); -test_SinkData(conn); -test_SourceData(conn); -test_TestCall(conn); -test_TestCall2(conn); -test_TestSleep(conn); -test_TestEnum(conn); -test_TestSurrounding(conn); -test_TestDoublePointer(conn); +test_AddOne(echo); +test_EchoData(echo); +test_SinkData(echo); +test_SourceData(echo); +test_TestCall(echo); +test_TestCall2(echo); +test_TestSleep(echo); +test_TestEnum(echo); +test_TestSurrounding(echo); +test_TestDoublePointer(echo); print("All OK\n"); return 0; diff --git a/testprogs/ejs/samr.js b/testprogs/ejs/samr.js index d0c2990158..b518fea234 100755 --- a/testprogs/ejs/samr.js +++ b/testprogs/ejs/samr.js @@ -21,39 +21,39 @@ libinclude("samr.js"); /* test the samr_Connect interface */ -function test_Connect(conn) +function test_Connect(samr) { print("Testing samr_Connect\n"); - return samrConnect(conn); + return samrConnect(samr); } /* test the samr_LookupDomain interface */ -function test_LookupDomain(conn, handle, domain) +function test_LookupDomain(samr, handle, domain) { print("Testing samr_LookupDomain\n"); - return samrLookupDomain(conn, handle, domain); + return samrLookupDomain(samr, handle, domain); } /* test the samr_OpenDomain interface */ -function test_OpenDomain(conn, handle, sid) +function test_OpenDomain(samr, handle, sid) { print("Testing samr_OpenDomain\n"); - return samrOpenDomain(conn, handle, sid); + return samrOpenDomain(samr, handle, sid); } /* test the samr_EnumDomainUsers interface */ -function test_EnumDomainUsers(conn, dom_handle) +function test_EnumDomainUsers(samr, dom_handle) { var i, users; print("Testing samr_EnumDomainUsers\n"); - users = samrEnumDomainUsers(conn, dom_handle); + users = samrEnumDomainUsers(samr, dom_handle); print("Found " + users.length + " users\n"); for (i=0;i Date: Sat, 6 Aug 2005 00:36:17 +0000 Subject: r9153: added a sample program for enumerating winreg via js (This used to be commit 10043db676f9db8d1933b6a5f9ae050cefc538ac) --- testprogs/ejs/winreg.js | 97 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100755 testprogs/ejs/winreg.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/winreg.js b/testprogs/ejs/winreg.js new file mode 100755 index 0000000000..4d8b97d1c2 --- /dev/null +++ b/testprogs/ejs/winreg.js @@ -0,0 +1,97 @@ +#!/usr/bin/env smbscript +/* + test winreg calls from ejs +*/ + +var options = new Object(); + +ok = GetOptions(ARGV, options, + "POPT_AUTOHELP", + "POPT_COMMON_SAMBA", + "POPT_COMMON_CREDENTIALS"); +if (ok == false) { + println("Failed to parse options: " + options.ERROR); + return -1; +} + +libinclude("base.js"); + +if (options.ARGV.length != 1) { + println("Usage: winreg.js "); + return -1; +} +var binding = options.ARGV[0]; +reg = winreg_init(); +security_init(reg); + +print("Connecting to " + binding + "\n"); +status = reg.connect(binding); +if (status.is_ok != true) { + print("Failed to connect to " + binding + " - " + status.errstr + "\n"); + return -1; +} + + + +function list(handle, path, name) { + var io = irpcObj(); + var wtime = new Object(); + wtime.low = 2147483647; + wtime.high = 2147483647; + var keyname = new Object(); + keyname.unknown = 522; + keyname.key_name = NULL; + + var idx = 0; + for (idx=0;idx >= 0;idx++) { + io.input.handle = handle; + io.input.enum_index = idx; + io.input.key_name_len = 0; + io.input.unknown = 1044; + io.input.in_name = keyname; + io.input.class = ""; + io.input.last_changed_time = wtime; + var status = reg.winreg_EnumKey(io); + if (!status.is_ok) return; + var out = io.output; + if (out.result != "WERR_OK") { + return; + } + printf("%s\\%s\n", path, out.out_name.name); + + io = irpcObj(); + io.input.handle = handle; + io.input.keyname = out.out_name.name; + io.input.unknown = 0; + io.input.access_mask = reg.SEC_FLAG_MAXIMUM_ALLOWED; + status = reg.winreg_OpenKey(io); + if (!status.is_ok) return; + assert(io.output.result == "WERR_OK"); + + list(io.output.handle, + path + "\\" + out.out_name.name, + out.out_name.name); + } +} + +function list_tree(name) { + var io = irpcObj(); + io.input.system_name = NULL; + io.input.access_required = reg.SEC_FLAG_MAXIMUM_ALLOWED; + status = reg.winreg_OpenHKLM(io); + assert(status.is_ok); + + var handle = io.output.handle; + + list(handle, "", NULL); +} + +var trees = new Array("HKCR", "HKLM", "HKPD", "HKU"); + +for (i=0;i Date: Sat, 6 Aug 2005 01:11:16 +0000 Subject: r9160: use the winreg lib in the test program (This used to be commit 33bb76ed4e1a796cf68198c0bb480a7bbd31b6cd) --- testprogs/ejs/winreg.js | 67 +++++++++++-------------------------------------- 1 file changed, 14 insertions(+), 53 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/winreg.js b/testprogs/ejs/winreg.js index 4d8b97d1c2..831528b05c 100755 --- a/testprogs/ejs/winreg.js +++ b/testprogs/ejs/winreg.js @@ -3,6 +3,9 @@ test winreg calls from ejs */ +libinclude("base.js"); +libinclude("winreg.js"); + var options = new Object(); ok = GetOptions(ARGV, options, @@ -31,66 +34,24 @@ if (status.is_ok != true) { return -1; } - - -function list(handle, path, name) { - var io = irpcObj(); - var wtime = new Object(); - wtime.low = 2147483647; - wtime.high = 2147483647; - var keyname = new Object(); - keyname.unknown = 522; - keyname.key_name = NULL; - - var idx = 0; - for (idx=0;idx >= 0;idx++) { - io.input.handle = handle; - io.input.enum_index = idx; - io.input.key_name_len = 0; - io.input.unknown = 1044; - io.input.in_name = keyname; - io.input.class = ""; - io.input.last_changed_time = wtime; - var status = reg.winreg_EnumKey(io); - if (!status.is_ok) return; - var out = io.output; - if (out.result != "WERR_OK") { - return; - } - printf("%s\\%s\n", path, out.out_name.name); - - io = irpcObj(); - io.input.handle = handle; - io.input.keyname = out.out_name.name; - io.input.unknown = 0; - io.input.access_mask = reg.SEC_FLAG_MAXIMUM_ALLOWED; - status = reg.winreg_OpenKey(io); - if (!status.is_ok) return; - assert(io.output.result == "WERR_OK"); - - list(io.output.handle, - path + "\\" + out.out_name.name, - out.out_name.name); +function list_path(path) { + var list = winreg_enum_path(reg, path); + var i; + if (list == undefined) { + return; + } + for (i=0;i Date: Mon, 8 Aug 2005 22:29:44 +0000 Subject: r9218: make the winreg library code handle arbitrary paths more efficiently and more conveniently (caller doesn't need to know the hive names now) (This used to be commit dadd7e22fb439f7b18c429a95c75902e4741ba8d) --- testprogs/ejs/winreg.js | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/winreg.js b/testprogs/ejs/winreg.js index 831528b05c..22b20739f2 100755 --- a/testprogs/ejs/winreg.js +++ b/testprogs/ejs/winreg.js @@ -13,15 +13,15 @@ ok = GetOptions(ARGV, options, "POPT_COMMON_SAMBA", "POPT_COMMON_CREDENTIALS"); if (ok == false) { - println("Failed to parse options: " + options.ERROR); - return -1; + println("Failed to parse options: " + options.ERROR); + return -1; } libinclude("base.js"); -if (options.ARGV.length != 1) { - println("Usage: winreg.js "); - return -1; +if (options.ARGV.length < 1) { + println("Usage: winreg.js "); + return -1; } var binding = options.ARGV[0]; reg = winreg_init(); @@ -30,8 +30,8 @@ security_init(reg); print("Connecting to " + binding + "\n"); status = reg.connect(binding); if (status.is_ok != true) { - print("Failed to connect to " + binding + " - " + status.errstr + "\n"); - return -1; + print("Failed to connect to " + binding + " - " + status.errstr + "\n"); + return -1; } function list_path(path) { @@ -41,18 +41,25 @@ function list_path(path) { return; } for (i=0;i 1) { + root = options.ARGV[1]; +} else { + root = ''; } -print("All OK\n"); +printf("Listing registry tree '%s'\n", root); +list_path(root); return 0; -- cgit From 66c3640366ed17b1bdc445f7e597a2446deeaa14 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 17 Aug 2005 01:40:14 +0000 Subject: r9341: updated the winreg test program to take advantage of the new EnumValue functionality. It now completely enumerates a winreg tree. This would make a good basis for a js version of regshell if someone felt like taking that on. (This used to be commit 75d0cf78ec8c01dee2a6475d4c64417349d9ec3a) --- testprogs/ejs/winreg.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/winreg.js b/testprogs/ejs/winreg.js index 22b20739f2..2febec8010 100755 --- a/testprogs/ejs/winreg.js +++ b/testprogs/ejs/winreg.js @@ -34,12 +34,21 @@ if (status.is_ok != true) { return -1; } -function list_path(path) { - var list = winreg_enum_path(reg, path); +function list_values(path) { + var list = winreg_enum_values(reg, path); var i; if (list == undefined) { return; } + for (i=0;i Date: Wed, 17 Aug 2005 02:21:40 +0000 Subject: r9342: removed extra libinclude of base.js (This used to be commit bda6943c311e005cff0b46722355e9aa693db67a) --- testprogs/ejs/winreg.js | 2 -- 1 file changed, 2 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/winreg.js b/testprogs/ejs/winreg.js index 2febec8010..b1fc58e401 100755 --- a/testprogs/ejs/winreg.js +++ b/testprogs/ejs/winreg.js @@ -17,8 +17,6 @@ if (ok == false) { return -1; } -libinclude("base.js"); - if (options.ARGV.length < 1) { println("Usage: winreg.js "); return -1; -- cgit From a533f398aa1fb8d95fa8aab9bc80fe277abb3384 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 17 Aug 2005 02:56:07 +0000 Subject: r9345: used the data blob functions in the echo.js test code (This used to be commit f217f08b679ec3ed4784ed0fe74e9cbb935cdce9) --- testprogs/ejs/echo.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js index aa44ca7eb0..2875d1fb0e 100755 --- a/testprogs/ejs/echo.js +++ b/testprogs/ejs/echo.js @@ -22,10 +22,11 @@ libinclude("base.js"); function ramp_array(N) { var a = new Array(N); + var data = datablob_init(); for (i=0;i Date: Thu, 18 Aug 2005 09:33:03 +0000 Subject: r9383: remove unused file (This used to be commit dae90b6959508a19d35f711caf4c3f4bb9b3796a) --- testprogs/ejs/winreg.js | 72 ------------------------------------------------- 1 file changed, 72 deletions(-) delete mode 100755 testprogs/ejs/winreg.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/winreg.js b/testprogs/ejs/winreg.js deleted file mode 100755 index b1fc58e401..0000000000 --- a/testprogs/ejs/winreg.js +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env smbscript -/* - test winreg calls from ejs -*/ - -libinclude("base.js"); -libinclude("winreg.js"); - -var options = new Object(); - -ok = GetOptions(ARGV, options, - "POPT_AUTOHELP", - "POPT_COMMON_SAMBA", - "POPT_COMMON_CREDENTIALS"); -if (ok == false) { - println("Failed to parse options: " + options.ERROR); - return -1; -} - -if (options.ARGV.length < 1) { - println("Usage: winreg.js "); - return -1; -} -var binding = options.ARGV[0]; -reg = winreg_init(); -security_init(reg); - -print("Connecting to " + binding + "\n"); -status = reg.connect(binding); -if (status.is_ok != true) { - print("Failed to connect to " + binding + " - " + status.errstr + "\n"); - return -1; -} - -function list_values(path) { - var list = winreg_enum_values(reg, path); - var i; - if (list == undefined) { - return; - } - for (i=0;i 1) { - root = options.ARGV[1]; -} else { - root = ''; -} - -printf("Listing registry tree '%s'\n", root); -list_path(root); -return 0; -- cgit From fef7a81478cb246a7d2fe29283a50d52501ccc33 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 22 Aug 2005 23:31:18 +0000 Subject: r9491: fixed up a few scripts that need to be updated for the new GetOptions syntax. Mimir, its a good idea to use grep -r to find places that need fixing when you change the syntax of a call :-) (This used to be commit 1ead49f8e823a69dbd9cd3df3f5be04dc17e0d1f) --- testprogs/ejs/argv.js | 6 +----- testprogs/ejs/echo.js | 8 +++----- testprogs/ejs/ldap.js | 8 +++----- testprogs/ejs/nbtstats | 12 +++++------- testprogs/ejs/samr.js | 14 ++++++-------- 5 files changed, 18 insertions(+), 30 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/argv.js b/testprogs/ejs/argv.js index 093123014a..ffb6e007eb 100644 --- a/testprogs/ejs/argv.js +++ b/testprogs/ejs/argv.js @@ -2,16 +2,12 @@ demonstrate use of GetOptions */ -var ok; -var options = new Object(); - -ok = GetOptions(ARGV, options, +var options = GetOptions(ARGV, "POPT_AUTOHELP", "POPT_COMMON_SAMBA", "myopt=s", "intopt=i", "noopt"); -printVars(ok); println("You called this script with arguments:"); diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js index 2875d1fb0e..e694193c4b 100755 --- a/testprogs/ejs/echo.js +++ b/testprogs/ejs/echo.js @@ -3,14 +3,12 @@ test echo pipe calls from ejs */ -var options = new Object(); - -ok = GetOptions(ARGV, options, +var options = GetOptions(ARGV, "POPT_AUTOHELP", "POPT_COMMON_SAMBA", "POPT_COMMON_CREDENTIALS"); -if (ok == false) { - println("Failed to parse options: " + options.ERROR); +if (options == undefined) { + println("Failed to parse options"); return -1; } diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 28a08879cf..e1099d5ff0 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -6,14 +6,12 @@ exec smbscript "$0" ${1+"$@"} var ldb = ldb_init(); -var options = new Object(); - -ok = GetOptions(ARGV, options, +var options = GetOptions(ARGV, "POPT_AUTOHELP", "POPT_COMMON_SAMBA", "POPT_COMMON_CREDENTIALS"); -if (ok == false) { - println("Failed to parse options: " + options.ERROR); +if (options == undefined) { + println("Failed to parse options"); return -1; } diff --git a/testprogs/ejs/nbtstats b/testprogs/ejs/nbtstats index 20bc781f03..1c8a6a5e7e 100755 --- a/testprogs/ejs/nbtstats +++ b/testprogs/ejs/nbtstats @@ -3,13 +3,11 @@ demonstrate access to irpc calls from ejs */ -var options = new Object(); - -ok = GetOptions(ARGV, options, - "POPT_AUTOHELP", - "POPT_COMMON_SAMBA"); -if (ok == false) { - println("Failed to parse options: " + options.ERROR); +var options = GetOptions(ARGV, + "POPT_AUTOHELP", + "POPT_COMMON_SAMBA"); +if (options == undefined) { + println("Failed to parse options"); return -1; } diff --git a/testprogs/ejs/samr.js b/testprogs/ejs/samr.js index b518fea234..fbdae974be 100755 --- a/testprogs/ejs/samr.js +++ b/testprogs/ejs/samr.js @@ -3,14 +3,12 @@ test samr calls from ejs */ -var options = new Object(); - -ok = GetOptions(ARGV, options, - "POPT_AUTOHELP", - "POPT_COMMON_SAMBA", - "POPT_COMMON_CREDENTIALS"); -if (ok == false) { - println("Failed to parse options: " + options.ERROR); +var options = GetOptions(ARGV, + "POPT_AUTOHELP", + "POPT_COMMON_SAMBA", + "POPT_COMMON_CREDENTIALS"); +if (options == undefined) { + println("Failed to parse options"); return -1; } -- cgit From 030087c4498db2be48abeba01e3917adc520a899 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 25 Aug 2005 00:38:09 +0000 Subject: r9599: fix formatting of echo output (This used to be commit 47c11fd886d7c57cafe2e150d745d3ce17e3bb72) --- testprogs/ejs/echo.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js index e694193c4b..efdbe5783d 100755 --- a/testprogs/ejs/echo.js +++ b/testprogs/ejs/echo.js @@ -229,5 +229,5 @@ test_TestEnum(echo); test_TestSurrounding(echo); test_TestDoublePointer(echo); -print("All OK\n"); +println("All OK\n"); return 0; -- cgit From 40f85ace04abad7460d0f0afe9211c4280482c6c Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 30 Aug 2005 22:38:34 +0000 Subject: r9813: Conver testsuite for samba3sam module to EJS (This used to be commit 77f24ed131bf57c30bb500e1d8d387bd4b403ddc) --- testprogs/ejs/samba3sam | 78 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100755 testprogs/ejs/samba3sam (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam b/testprogs/ejs/samba3sam new file mode 100755 index 0000000000..223cd87eee --- /dev/null +++ b/testprogs/ejs/samba3sam @@ -0,0 +1,78 @@ +#!/usr/bin/env smbscript + +libinclude("base.js"); +var sys = sys_init(); +var s3url; +var s3 = ldb_init(); +var ok; + +if (ARGV.length == 2) { + s3url = ARGV[1]; + ok = s3.connect(s3url); + assert(ok); +} else { + s3url = "tdb://samba3.ldb"; + sys.unlink("samba3.ldb"); + println("Adding samba3 LDIF..."); + var s3 = ldb_init(); + ok = s3.connect(s3url); + assert(ok); + var ldif = sys.file_load("../../testdata/samba3/samba3.ldif"); + assert(ldif != undefined); + ok = s3.add(ldif); + assert(ok); +} + +println("Initial samba4 LDIF..."); +var s4 = ldb_init(); +ok = s4.connect("tdb://samba4.ldb"); +assert(ok); +ok = s4.add(sprintf(" +dn: @MODULES +@LIST: samba3sam + +dn: @MAP=samba3sam +@MAP_URL: %s", s3url)); +assert(ok); + +println("Looking up by non-mapped attribute"); +msg = s4.search("(cn=Administrator)"); +assert(msg.length == 1); + +println("Looking up by mapped attribute"); +msg = s4.search("(name=Backup Operators)"); +assert(msg.length == 1); + +println("Looking up by old name of renamed attribute"); +msg = s4.search("(displayName=Backup Operators)"); +assert(msg.length == 1); + +println("Adding a record"); +ok = s4.add(" +dn: cn=Foo,dc=idealx,dc=org +unixName: root +lastLogon: 20000 +cn: Foo +showInAdvancedViewOnly: TRUE +"); +assert(ok); + +println("Checking for existance of record"); +msg = s4.search("(cn=Foo)", new Array('unixName','lastLogon','cn','showInAdvancedViewOnly')); +assert(msg.length == 1); + +println("Checking for persistence of non-mappable attribute"); +msg = s4.search("(cn=Foo)", new Array('showInAdvancedViewOnly')); +assert(msg.length == 1); + +println("Adding record with mapped attribute in dn"); +ok = s4.add(" +dn: unixName=nobody,dc=idealx,dc=org +unixName: nobody +cn: Niemand +"); +assert(ok); + +println("Checking for existance of record (mapped)"); +msg = s4.search("(unixName=nobody)", new Array('unixName','cn','dn')); +assert(msg.length == 1); -- cgit From 222fdd5237c1fd8551c39ce544171df3a5a41831 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 31 Aug 2005 21:04:17 +0000 Subject: r9842: More error checks in the ldb_map modules, extend testsuite (This used to be commit b7992de4b7d42a55e00509c887a269a07c19627d) --- testprogs/ejs/samba3sam | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam b/testprogs/ejs/samba3sam index 223cd87eee..3331cfe164 100755 --- a/testprogs/ejs/samba3sam +++ b/testprogs/ejs/samba3sam @@ -1,6 +1,8 @@ #!/usr/bin/env smbscript libinclude("base.js"); +var mypath = substr(ARGV[0], 0, -strlen("samba3sam")); + var sys = sys_init(); var s3url; var s3 = ldb_init(); @@ -17,7 +19,7 @@ if (ARGV.length == 2) { var s3 = ldb_init(); ok = s3.connect(s3url); assert(ok); - var ldif = sys.file_load("../../testdata/samba3/samba3.ldif"); + var ldif = sys.file_load(mypath + "../../testdata/samba3/samba3.ldif"); assert(ldif != undefined); ok = s3.add(ldif); assert(ok); @@ -25,16 +27,34 @@ if (ARGV.length == 2) { println("Initial samba4 LDIF..."); var s4 = ldb_init(); +sys.unlink("samba4.ldb"); ok = s4.connect("tdb://samba4.ldb"); assert(ok); -ok = s4.add(sprintf(" -dn: @MODULES -@LIST: samba3sam -dn: @MAP=samba3sam +var ldif = sys.file_load(mypath + "../../source/setup/provision_init.ldif"); +assert(ldif != undefined); +ok = s4.add(ldif); +assert(ok); + +ok = s4.add(sprintf("dn: @MAP=samba3sam @MAP_URL: %s", s3url)); assert(ok); +ok = s4.modify(" +dn: @MODULES +replace: @LIST +@LIST: samldb,timestamps,objectguid,rdn_name,samba3sam"); +assert(ok); + +println("Reconnecting to LDB database"); +s4 = ldb_init(); +ok = s4.connect("tdb://samba4.ldb"); +assert(ok); + +msg = s4.search("(ou=Users)"); +assert(msg.length == 1); +assert(msg['mappedFromDn'] == msg['dn']); + println("Looking up by non-mapped attribute"); msg = s4.search("(cn=Administrator)"); assert(msg.length == 1); -- cgit From b19cc95a88d236605425d7421909bbdf9f3daf70 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 31 Aug 2005 22:27:40 +0000 Subject: r9849: Extend testsuite a bit more. (This used to be commit 5cbe1e6b70b03be441a36b36fb969339df0dfd45) --- testprogs/ejs/samba3sam | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam b/testprogs/ejs/samba3sam index 3331cfe164..75e9f65863 100755 --- a/testprogs/ejs/samba3sam +++ b/testprogs/ejs/samba3sam @@ -1,4 +1,8 @@ #!/usr/bin/env smbscript +/* (C) Jelmer Vernooij 2005 + Published under the GNU GPL + Sponsored by Google Summer of Code + */ libinclude("base.js"); var mypath = substr(ARGV[0], 0, -strlen("samba3sam")); @@ -57,17 +61,32 @@ assert(msg['mappedFromDn'] == msg['dn']); println("Looking up by non-mapped attribute"); msg = s4.search("(cn=Administrator)"); +assert(msg[0].cn == "Administrator"); assert(msg.length == 1); println("Looking up by mapped attribute"); msg = s4.search("(name=Backup Operators)"); +assert(msg[0].name == "Backup Operators"); assert(msg.length == 1); println("Looking up by old name of renamed attribute"); msg = s4.search("(displayName=Backup Operators)"); +assert(msg.length == 0); + +println("Looking up mapped entry containing SID"); +msg = s4.search("(cn=Replicator)"); assert(msg.length == 1); +assert(msg[0].dn == "cn=Replicator,ou=Groups,ou=Tests,dc=vernstok,dc=nl"); +assert(msg[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); +assert(msg[0].mappedFromDn == msg[0].dn); + +println("Checking mapping of objectclass"); +var oc = msg[0].objectclass; +for (var i in oc) { + assert(oc[i] == "posixGroup" || oc[i] == "group"); +} -println("Adding a record"); +println("Adding a record that will be fallbacked"); ok = s4.add(" dn: cn=Foo,dc=idealx,dc=org unixName: root @@ -80,19 +99,26 @@ assert(ok); println("Checking for existance of record"); msg = s4.search("(cn=Foo)", new Array('unixName','lastLogon','cn','showInAdvancedViewOnly')); assert(msg.length == 1); +assert(msg[0].showInAdvancedViewOnly == "TRUE"); +assert(msg[0].cn == "Foo"); +assert(msg[0].unixName == "root"); +assert(msg[0].lastLogon == 20000); -println("Checking for persistence of non-mappable attribute"); -msg = s4.search("(cn=Foo)", new Array('showInAdvancedViewOnly')); -assert(msg.length == 1); - -println("Adding record with mapped attribute in dn"); +println("Adding record that will be mapped"); ok = s4.add(" -dn: unixName=nobody,dc=idealx,dc=org -unixName: nobody +dn: cn=Niemand,ou=Tests,dc=vernstok,dc=nl +objectClass: user +unixName: blah cn: Niemand "); assert(ok); println("Checking for existance of record (mapped)"); -msg = s4.search("(unixName=nobody)", new Array('unixName','cn','dn')); +msg = s4.search("(unixName=blah)", new Array('unixName','cn','dn')); assert(msg.length == 1); + +println("Checking for data in destination database"); +msg = s3.search("(cn=Niemand)"); +assert(msg.length >= 1); +assert(msg[0].displayName == "Niemand"); + -- cgit From 99054eb40a4ce3e2b065132129cb5f8db4db0f78 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 1 Sep 2005 00:38:28 +0000 Subject: r9855: Finish ldb_map testsuite Update PLAN Some more small other fixes (This used to be commit 31cd5d55a9754b4e670be5d3687dfaaab8adaefc) --- testprogs/ejs/samba3sam | 60 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam b/testprogs/ejs/samba3sam index 75e9f65863..26c3248f07 100755 --- a/testprogs/ejs/samba3sam +++ b/testprogs/ejs/samba3sam @@ -122,3 +122,63 @@ msg = s3.search("(cn=Niemand)"); assert(msg.length >= 1); assert(msg[0].displayName == "Niemand"); +println("Adding attribute..."); +ok = s4.modify(" +dn: cn=Niemand,ou=Tests,dc=vernstok,dc=nl +changetype: modify +add: description +description: Blah +"); +assert(ok); + +println("Checking whether changes are still there..."); +msg = s4.search("(cn=Niemand)"); +assert(msg.length >= 1); +assert(msg[0].description == "Blah"); + +println("Modifying attribute..."); +ok = s4.modify(" +dn: cn=Niemand,ou=Tests,dc=vernstok,dc=nl +changetype: modify +replace: description +description: Blie +"); +assert(ok); + +println("Checking whether changes are still there..."); +msg = s4.search("(cn=Niemand)"); +assert(msg.length >= 1); +assert(msg[0].description == "Blie"); + +println("Deleting attribute..."); +ok = s4.modify(" +dn: cn=Niemand,ou=Tests,dc=vernstok,dc=nl +changetype: modify +delete: description +"); +assert(ok); + +println("Checking whether changes are no longer there..."); +msg = s4.search("(cn=Niemand)"); +assert(msg.length >= 1); +assert(msg[0].description == undefined); + +println("Renaming record..."); +ok = s4.rename("cn=Niemand,ou=Tests,dc=vernstok,dc=nl", "cn=Iemand,ou=Tests,dc=vernstok,dc=nl"); + +println("Checking whether old record is gone..."); +msg = s4.search("(cn=Niemand)"); +assert(msg.length == 0); + +println("Checking whether new record is there..."); +msg = s4.search("(cn=Iemand)"); +assert(msg.length == 1); + +println("Deleting record..."); +ok = s4.del("cn=Iemand,ou=Tests,dc=vernstok,dc=nl"); +assert(ok); + +println("Checking whether record is gone..."); +msg = s4.search("(cn=Iemand)"); +assert(msg.length == 0); + -- cgit From 1b5cb7309d13b472eff12e1bfb5191ca8e0391ae Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 1 Sep 2005 01:11:15 +0000 Subject: r9857: Fix rename/delete issues (This used to be commit d6dce7ef3eb21a5e90244cf2ce7403ab43b12d63) --- testprogs/ejs/samba3sam | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam b/testprogs/ejs/samba3sam index 26c3248f07..14ddd011e9 100755 --- a/testprogs/ejs/samba3sam +++ b/testprogs/ejs/samba3sam @@ -164,21 +164,18 @@ assert(msg.length >= 1); assert(msg[0].description == undefined); println("Renaming record..."); -ok = s4.rename("cn=Niemand,ou=Tests,dc=vernstok,dc=nl", "cn=Iemand,ou=Tests,dc=vernstok,dc=nl"); +ok = s4.rename("cn=Niemand,ou=Tests,dc=vernstok,dc=nl", "cn=Niemand,dc=vernstok,dc=nl"); -println("Checking whether old record is gone..."); +println("Checking whether DN has changed..."); msg = s4.search("(cn=Niemand)"); -assert(msg.length == 0); - -println("Checking whether new record is there..."); -msg = s4.search("(cn=Iemand)"); assert(msg.length == 1); +assert(msg[0].dn == "cn=Niemand,dc=vernstok,dc=nl"); println("Deleting record..."); -ok = s4.del("cn=Iemand,ou=Tests,dc=vernstok,dc=nl"); +ok = s4.del("cn=Niemand,dc=vernstok,dc=nl"); assert(ok); println("Checking whether record is gone..."); -msg = s4.search("(cn=Iemand)"); +msg = s4.search("(cn=Niemand)"); assert(msg.length == 0); -- cgit From e2e2508b586a112e612bf3660f80d25c9bf8bc90 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 1 Sep 2005 15:33:31 +0000 Subject: r9899: Be more conservative about what is sent to the remote server in ldb_map. (This used to be commit 76e943d4416e38ce4cce27d5403bc3e133d0025b) --- testprogs/ejs/samba3sam | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam b/testprogs/ejs/samba3sam index 14ddd011e9..c422bce16b 100755 --- a/testprogs/ejs/samba3sam +++ b/testprogs/ejs/samba3sam @@ -40,6 +40,16 @@ assert(ldif != undefined); ok = s4.add(ldif); assert(ok); +var ldif = sys.file_load(mypath + "../../source/setup/provision_templates.ldif"); +var subobj = new Object(); +subobj.BASEDN = "dc=vernstok,dc=nl"; +ldif = substitute_var(ldif, subobj); +assert(ldif != undefined); +ok = s4.add(ldif); +assert(ok); + + + ok = s4.add(sprintf("dn: @MAP=samba3sam @MAP_URL: %s", s3url)); assert(ok); @@ -57,7 +67,6 @@ assert(ok); msg = s4.search("(ou=Users)"); assert(msg.length == 1); -assert(msg['mappedFromDn'] == msg['dn']); println("Looking up by non-mapped attribute"); msg = s4.search("(cn=Administrator)"); @@ -76,9 +85,8 @@ assert(msg.length == 0); println("Looking up mapped entry containing SID"); msg = s4.search("(cn=Replicator)"); assert(msg.length == 1); -assert(msg[0].dn == "cn=Replicator,ou=Groups,ou=Tests,dc=vernstok,dc=nl"); +assert(msg[0].dn == "cn=Replicator,ou=Groups,sambaDomainName=TESTS,dc=vernstok,dc=nl"); assert(msg[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); -assert(msg[0].mappedFromDn == msg[0].dn); println("Checking mapping of objectclass"); var oc = msg[0].objectclass; @@ -89,24 +97,23 @@ for (var i in oc) { println("Adding a record that will be fallbacked"); ok = s4.add(" dn: cn=Foo,dc=idealx,dc=org -unixName: root -lastLogon: 20000 +foo: bar +blah: Blie cn: Foo showInAdvancedViewOnly: TRUE "); assert(ok); println("Checking for existance of record"); -msg = s4.search("(cn=Foo)", new Array('unixName','lastLogon','cn','showInAdvancedViewOnly')); +msg = s4.search("(cn=Foo)", new Array('foo','blah','cn','showInAdvancedViewOnly')); assert(msg.length == 1); assert(msg[0].showInAdvancedViewOnly == "TRUE"); -assert(msg[0].cn == "Foo"); -assert(msg[0].unixName == "root"); -assert(msg[0].lastLogon == 20000); +assert(msg[0].foo == "bar"); +assert(msg[0].blah == "Blie"); println("Adding record that will be mapped"); ok = s4.add(" -dn: cn=Niemand,ou=Tests,dc=vernstok,dc=nl +dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl objectClass: user unixName: blah cn: Niemand @@ -116,15 +123,17 @@ assert(ok); println("Checking for existance of record (mapped)"); msg = s4.search("(unixName=blah)", new Array('unixName','cn','dn')); assert(msg.length == 1); +assert(msg[0].cn == "Niemand"); println("Checking for data in destination database"); -msg = s3.search("(cn=Niemand)"); +msg = s3.search("(displayName=Niemand)"); assert(msg.length >= 1); +assert(msg[0].sambaSID == "S-1-5-21-4231626423-2410014848-2360679739-2001"); assert(msg[0].displayName == "Niemand"); println("Adding attribute..."); ok = s4.modify(" -dn: cn=Niemand,ou=Tests,dc=vernstok,dc=nl +dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl changetype: modify add: description description: Blah @@ -134,11 +143,13 @@ assert(ok); println("Checking whether changes are still there..."); msg = s4.search("(cn=Niemand)"); assert(msg.length >= 1); +printVars(msg); +assert(msg[0].cn == "Niemand"); assert(msg[0].description == "Blah"); println("Modifying attribute..."); ok = s4.modify(" -dn: cn=Niemand,ou=Tests,dc=vernstok,dc=nl +dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl changetype: modify replace: description description: Blie @@ -152,7 +163,7 @@ assert(msg[0].description == "Blie"); println("Deleting attribute..."); ok = s4.modify(" -dn: cn=Niemand,ou=Tests,dc=vernstok,dc=nl +dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl changetype: modify delete: description "); @@ -164,7 +175,7 @@ assert(msg.length >= 1); assert(msg[0].description == undefined); println("Renaming record..."); -ok = s4.rename("cn=Niemand,ou=Tests,dc=vernstok,dc=nl", "cn=Niemand,dc=vernstok,dc=nl"); +ok = s4.rename("cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl", "cn=Niemand,dc=vernstok,dc=nl"); println("Checking whether DN has changed..."); msg = s4.search("(cn=Niemand)"); -- cgit From ca6c0af86f3bbefbc29c4bf4815da963ca857cef Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 1 Sep 2005 18:04:23 +0000 Subject: r9908: Generate posixUser and posixGroup as well (This used to be commit ebed25b47d3d8bd350b51b462d605d713f17602d) --- testprogs/ejs/samba3sam | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam b/testprogs/ejs/samba3sam index c422bce16b..6ca7592650 100755 --- a/testprogs/ejs/samba3sam +++ b/testprogs/ejs/samba3sam @@ -126,7 +126,7 @@ assert(msg.length == 1); assert(msg[0].cn == "Niemand"); println("Checking for data in destination database"); -msg = s3.search("(displayName=Niemand)"); +msg = s3.search("(cn=Niemand)"); assert(msg.length >= 1); assert(msg[0].sambaSID == "S-1-5-21-4231626423-2410014848-2360679739-2001"); assert(msg[0].displayName == "Niemand"); @@ -143,7 +143,6 @@ assert(ok); println("Checking whether changes are still there..."); msg = s4.search("(cn=Niemand)"); assert(msg.length >= 1); -printVars(msg); assert(msg[0].cn == "Niemand"); assert(msg[0].description == "Blah"); -- cgit From 4f4dae05f03c76b81cbc71ee80f7f1a34644936f Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 1 Sep 2005 18:55:51 +0000 Subject: r9912: Fix another bug in ldb_map. (This used to be commit 4c3b37d660e798764e35a31221f4939ab6f36948) --- testprogs/ejs/samba3sam | 2 ++ 1 file changed, 2 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam b/testprogs/ejs/samba3sam index 6ca7592650..6ea8da3492 100755 --- a/testprogs/ejs/samba3sam +++ b/testprogs/ejs/samba3sam @@ -128,6 +128,7 @@ assert(msg[0].cn == "Niemand"); println("Checking for data in destination database"); msg = s3.search("(cn=Niemand)"); assert(msg.length >= 1); +printVars(msg); assert(msg[0].sambaSID == "S-1-5-21-4231626423-2410014848-2360679739-2001"); assert(msg[0].displayName == "Niemand"); @@ -189,3 +190,4 @@ println("Checking whether record is gone..."); msg = s4.search("(cn=Niemand)"); assert(msg.length == 0); +return 0; -- cgit From 08f630be8230ce061badd84bef952d5753afdff0 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 1 Sep 2005 20:28:03 +0000 Subject: r9915: Some more mappings. Fix weird sAMAccountName values. (This used to be commit 8ff1358f401e0086b941f4ff73af5d4c38a1f8bf) --- testprogs/ejs/samba3sam | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam b/testprogs/ejs/samba3sam index 6ea8da3492..3952f45253 100755 --- a/testprogs/ejs/samba3sam +++ b/testprogs/ejs/samba3sam @@ -115,13 +115,14 @@ println("Adding record that will be mapped"); ok = s4.add(" dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl objectClass: user -unixName: blah +unixName: bin +unicodePwd: geheim cn: Niemand "); assert(ok); println("Checking for existance of record (mapped)"); -msg = s4.search("(unixName=blah)", new Array('unixName','cn','dn')); +msg = s4.search("(unixName=bin)", new Array('unixName','cn','dn')); assert(msg.length == 1); assert(msg[0].cn == "Niemand"); -- cgit From 74b26525ea06598e2cfd6d869344506f45955e68 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 1 Sep 2005 21:34:05 +0000 Subject: r9919: Remove debug statement from samba3sam Add SOC STATUS doc (This used to be commit 152c1a37b536c65e0b816319304d1fb46c2dc5a8) --- testprogs/ejs/samba3sam | 1 - 1 file changed, 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam b/testprogs/ejs/samba3sam index 3952f45253..e9a610eea5 100755 --- a/testprogs/ejs/samba3sam +++ b/testprogs/ejs/samba3sam @@ -129,7 +129,6 @@ assert(msg[0].cn == "Niemand"); println("Checking for data in destination database"); msg = s3.search("(cn=Niemand)"); assert(msg.length >= 1); -printVars(msg); assert(msg[0].sambaSID == "S-1-5-21-4231626423-2410014848-2360679739-2001"); assert(msg[0].displayName == "Niemand"); -- cgit From 2e61cce2b43570245825c3bdb9ee526fcbbceb6c Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 12 Oct 2005 08:53:42 +0000 Subject: r10919: fixed the ldb test for the new operational module (This used to be commit 915878d7cebacf499c0c9d264a2dcbc82b521dfd) --- testprogs/ejs/ldb.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldb.js b/testprogs/ejs/ldb.js index 812c5a5b96..c681ee9ebb 100755 --- a/testprogs/ejs/ldb.js +++ b/testprogs/ejs/ldb.js @@ -65,7 +65,7 @@ function setup_modules(ldb) { ok = ldb.add(" dn: @MODULES -@LIST: timestamps,objectguid,rdn_name +@LIST: operational,objectguid,rdn_name "); } @@ -92,12 +92,13 @@ cn: X9 var res = ldb.search("x=8", NULL, ldb.SCOPE_DEFAULT); assert(res[0].objectGUID != undefined); - assert(res[0].createTimestamp != undefined); + assert(res[0].createTimestamp == undefined); assert(res[0].whenCreated != undefined); assert(res[0].name == "x8"); assert(res[0].cn == "x8"); - var res2 = ldb.search("x=9", NULL, ldb.SCOPE_DEFAULT); + var attrs = new Array("*", "createTimestamp"); + var res2 = ldb.search("x=9", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res2[0].objectGUID != undefined); assert(res2[0].createTimestamp != undefined); assert(res2[0].whenCreated != undefined); -- cgit From 840364eb9772448a5ff8e64eac58dd43b97550d6 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 14 Oct 2005 07:38:16 +0000 Subject: r10990: the beginnings of a program designed to work out the minimal schema needed to represent all the current records on a ADS LDAP server. The idea is we will use something based on this code to work out exactly what schema elements we will need for our initial ADS schema. I plan on expanding this code to automatically work out attribute properties, and write out a schema file that we can load into ldb. Interestingly, it looks like we only need 43 objectclasses and around 200 attributes to represent all records of a newly installed w2k3 ADS server. (This used to be commit 7b0ae77757d347d2b0f5bac3a49e915e24c3ab78) --- testprogs/ejs/minschema.js | 112 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100755 testprogs/ejs/minschema.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/minschema.js b/testprogs/ejs/minschema.js new file mode 100755 index 0000000000..97697c021a --- /dev/null +++ b/testprogs/ejs/minschema.js @@ -0,0 +1,112 @@ +#!/bin/sh +exec smbscript "$0" ${1+"$@"} +/* + work out the minimal schema for the existing records on a server by examining + all records and working out what objectclasses and attributes exist +*/ + +libinclude("base.js"); + +var ldb = ldb_init(); + +var options = GetOptions(ARGV, + "POPT_AUTOHELP", + "POPT_COMMON_SAMBA", + "POPT_COMMON_CREDENTIALS"); +if (options == undefined) { + println("Failed to parse options"); + return -1; +} + +if (options.ARGV.length != 1) { + println("Usage: minschema.js "); + return -1; +} + +var url = options.ARGV[0]; + + + +var ok = ldb.connect(url); +assert(ok); + +objectclasses = new Object(); +attributes = new Object(); + + +/* + process an individual record, working out what attributes it has +*/ +function walk_dn(ldb, dn) { + /* get a list of all possible attributes for this object */ + var attrs = new Array("allowedAttributes"); + var res = ldb.search("objectClass=*", dn, ldb.SCOPE_BASE, attrs); + if (res == undefined) { + printf("Unable to fetch allowedAttributes for '%s' - %s\n", + dn, ldb.errstring()); + return; + } + var allattrs = res[0].allowedAttributes; + res = ldb.search("objectClass=*", dn, ldb.SCOPE_BASE, allattrs); + if (res == undefined) { + printf("Unable to fetch all attributes for '%s' - %s\n", + dn, ldb.errstring()); + return; + } + var a; + var msg = res[0]; + for (a in msg) { + attributes[a] = a; + } +} + +/* + walk a naming context, looking for all records +*/ +function walk_naming_context(ldb, namingContext) { + var attrs = new Array("objectClass"); + var res = ldb.search("objectClass=*", namingContext, ldb.SCOPE_DEFAULT, attrs); + if (res == undefined) { + printf("Unable to fetch objectClasses for '%s' - %s\n", + namingContext, ldb.errstring()); + return; + } + var r; + for (r=0;r Date: Wed, 26 Oct 2005 21:05:27 +0000 Subject: r11309: A trivial test script for ejs libnet interface. rafal (This used to be commit deb561ea4a00730787d129ae5eda38ceefe129f6) --- testprogs/ejs/ejsnet.js | 4 ++++ 1 file changed, 4 insertions(+) create mode 100755 testprogs/ejs/ejsnet.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ejsnet.js b/testprogs/ejs/ejsnet.js new file mode 100755 index 0000000000..a4dd27dd45 --- /dev/null +++ b/testprogs/ejs/ejsnet.js @@ -0,0 +1,4 @@ +#!/usr/bin/env smbscript + +var ctx = NetContext("Administrator", "admin"); +ctx.CreateUser("noname"); -- cgit From 4298fab790cd8f8f4f6d5c0226934847d67a2c08 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 1 Nov 2005 07:07:48 +0000 Subject: r11436: this is work in progress for generating the schema we need for our ADS ldap server. It's still not quite right, and I'm chasing down a few errors that mmc throws up, but its a lot closer than it was. I had to change the approach quite substantially over the last couple of days, but this approach now seems to be working out. (This used to be commit 38ea11510c8824285d072fe0e03e443d9d584271) --- testprogs/ejs/minschema.js | 525 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 507 insertions(+), 18 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/minschema.js b/testprogs/ejs/minschema.js index 97697c021a..b2daea51c4 100755 --- a/testprogs/ejs/minschema.js +++ b/testprogs/ejs/minschema.js @@ -1,8 +1,7 @@ #!/bin/sh exec smbscript "$0" ${1+"$@"} /* - work out the minimal schema for the existing records on a server by examining - all records and working out what objectclasses and attributes exist + work out the minimal schema for a set of objectclasses */ libinclude("base.js"); @@ -12,19 +11,21 @@ var ldb = ldb_init(); var options = GetOptions(ARGV, "POPT_AUTOHELP", "POPT_COMMON_SAMBA", - "POPT_COMMON_CREDENTIALS"); + "POPT_COMMON_CREDENTIALS", + "verbose"); if (options == undefined) { println("Failed to parse options"); return -1; } +verbose = options["verbose"]; -if (options.ARGV.length != 1) { - println("Usage: minschema.js "); +if (options.ARGV.length != 2) { + println("Usage: minschema.js "); return -1; } var url = options.ARGV[0]; - +var classfile = options.ARGV[1]; var ok = ldb.connect(url); @@ -32,6 +33,249 @@ assert(ok); objectclasses = new Object(); attributes = new Object(); +rootDse = new Object(); + + +/* the attributes we need for objectclasses */ +class_attrs = new Array("objectClass", + "auxiliaryClass", "systemAuxiliaryClass", + "possSuperiors", "systemPossSuperiors", + "lDAPDisplayName", "governsID", + "rDNAttID", "mustContain", "systemMustContain", + "mayContain", "systemMayContain", + "objectClassCategory", "subClassOf", + "defaultObjectCategory", "defaultHidingValue", + "systemFlags", "systemOnly", "defaultSecurityDescriptor", + "objectCategory"); + +attrib_attrs = new Array("objectClass", "lDAPDisplayName", + "isSingleValued", "linkID", "systemFlags", "systemOnly", + "schemaIDGUID", "adminDisplayName", "attributeID", + "attributeSyntax"); + +/* + notes: + + objectClassCategory + 1: structural + 2: abstract + 3: auxiliary +*/ + + +/* + print only if verbose is set +*/ +function dprintf() { + if (verbose != undefined) { + print(vsprintf(arguments)); + } +} + +/* + create an objectclass object +*/ +function obj_objectClass(name) { + var o = new Object(); + o.name = name; + return o; +} + +/* + create an attribute object +*/ +function obj_attribute(name) { + var o = new Object(); + o.name = name; + return o; +} + + +/* + fix a string DN to use ${BASEDN} +*/ +function fix_dn(dn) { + var s = strstr(dn, rootDse.defaultNamingContext); + if (s == NULL) { + return dn; + } + return substr(dn, 0, strlen(dn) - strlen(s)) + "${BASEDN}"; +} + +/* + dump an object as ldif +*/ +function write_ldif_one(o, attrs) { + var i; + printf("dn: CN=%s,CN=Schema,CN=Configuration,${BASEDN}\n", o.name); + printf("name: %s\n", o.name); + for (i=0;i Date: Wed, 2 Nov 2005 02:32:25 +0000 Subject: r11463: more progress on the schema generator. mmc now accepts all parts except the attributeTypes fields of the Aggregrate record. Proxying just that field and the display specifiers gives us a working mmc client hopefully i'll work out what it doesn't like about the attributeTypes field soon (This used to be commit 3af867a3f4a5fd702089400d1687e2aff017f48a) --- testprogs/ejs/minschema.js | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/minschema.js b/testprogs/ejs/minschema.js index b2daea51c4..7d82240745 100755 --- a/testprogs/ejs/minschema.js +++ b/testprogs/ejs/minschema.js @@ -46,7 +46,8 @@ class_attrs = new Array("objectClass", "objectClassCategory", "subClassOf", "defaultObjectCategory", "defaultHidingValue", "systemFlags", "systemOnly", "defaultSecurityDescriptor", - "objectCategory"); + "objectCategory", "possibleInferiors", "displaySpecification", + "schemaIDGUID"); attrib_attrs = new Array("objectClass", "lDAPDisplayName", "isSingleValued", "linkID", "systemFlags", "systemOnly", @@ -91,6 +92,24 @@ function obj_attribute(name) { } +syntaxmap = new Object(); +syntaxmap['2.5.5.9'] = '1.3.6.1.4.1.1466.115.121.1.27'; +syntaxmap['2.5.5.10'] = '1.3.6.1.4.1.1466.115.121.1.40'; +syntaxmap['2.5.5.11'] = '1.3.6.1.4.1.1466.115.121.1.24'; +syntaxmap['2.5.5.12'] = '1.3.6.1.4.1.1466.115.121.1.15'; + +/* + map some attribute syntaxes from some apparently MS specific + syntaxes to the standard syntaxes +*/ +function map_attribute_syntax(s) { + if (syntaxmap[s] != undefined) { + return syntaxmap[s]; + } + return s; +} + + /* fix a string DN to use ${BASEDN} */ @@ -108,6 +127,7 @@ function fix_dn(dn) { function write_ldif_one(o, attrs) { var i; printf("dn: CN=%s,CN=Schema,CN=Configuration,${BASEDN}\n", o.name); + printf("cn: %s\n", o.name); printf("name: %s\n", o.name); for (i=0;i Date: Wed, 2 Nov 2005 03:23:05 +0000 Subject: r11467: yay! mmc now accepts our schema. The trick was to get all the OID mappings right for the attributeTypes field of the aggregate schema now to add the display specifiers and I won't need the proxy module any more (This used to be commit 69264362bd408f493487482a8d5e9779d9a0d475) --- testprogs/ejs/minschema.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/minschema.js b/testprogs/ejs/minschema.js index 7d82240745..dd7e04270a 100755 --- a/testprogs/ejs/minschema.js +++ b/testprogs/ejs/minschema.js @@ -93,10 +93,24 @@ function obj_attribute(name) { syntaxmap = new Object(); + +syntaxmap['2.5.5.1'] = '1.3.6.1.4.1.1466.115.121.1.12'; +syntaxmap['2.5.5.2'] = '1.3.6.1.4.1.1466.115.121.1.38'; +syntaxmap['2.5.5.3'] = '1.2.840.113556.1.4.1362'; +syntaxmap['2.5.5.4'] = '1.2.840.113556.1.4.905'; +syntaxmap['2.5.5.5'] = '1.3.6.1.4.1.1466.115.121.1.26'; +syntaxmap['2.5.5.6'] = '1.3.6.1.4.1.1466.115.121.1.36'; +syntaxmap['2.5.5.7'] = '1.2.840.113556.1.4.903'; +syntaxmap['2.5.5.8'] = '1.3.6.1.4.1.1466.115.121.1.7'; syntaxmap['2.5.5.9'] = '1.3.6.1.4.1.1466.115.121.1.27'; syntaxmap['2.5.5.10'] = '1.3.6.1.4.1.1466.115.121.1.40'; syntaxmap['2.5.5.11'] = '1.3.6.1.4.1.1466.115.121.1.24'; syntaxmap['2.5.5.12'] = '1.3.6.1.4.1.1466.115.121.1.15'; +syntaxmap['2.5.5.13'] = '1.3.6.1.4.1.1466.115.121.1.43'; +syntaxmap['2.5.5.14'] = '1.2.840.113556.1.4.904'; +syntaxmap['2.5.5.15'] = '1.2.840.113556.1.4.907'; +syntaxmap['2.5.5.16'] = '1.2.840.113556.1.4.906'; +syntaxmap['2.5.5.17'] = '1.3.6.1.4.1.1466.115.121.1.40'; /* map some attribute syntaxes from some apparently MS specific -- cgit From 6d3fac3fdcba7062e53c9621f6f69f010fb1eb86 Mon Sep 17 00:00:00 2001 From: Rafal Szczesniak Date: Tue, 8 Nov 2005 23:23:16 +0000 Subject: r11587: Trivial testing code giving an idea of how could using subcontexts look like. rafal (This used to be commit 5a338b04f37f6160f4aaf7d9758aa2d817516eb1) --- testprogs/ejs/ejsnet.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ejsnet.js b/testprogs/ejs/ejsnet.js index a4dd27dd45..537312766a 100755 --- a/testprogs/ejs/ejsnet.js +++ b/testprogs/ejs/ejsnet.js @@ -1,4 +1,17 @@ #!/usr/bin/env smbscript var ctx = NetContext("Administrator", "admin"); -ctx.CreateUser("noname"); +var usr_ctx = ctx.UserMgr("BUILTIN"); +if (usr_ctx == undefined) { + print("Couln't get user management context.\n"); + return -1; +} + +var status = usr_ctx.Create("noname"); +if (status.is_ok != true) { + print("Failed to create user account: " + status.errstr + "\n"); + return -1; +} + +print ("OK\n"); +return 0; -- cgit From ddbeaa2f65933a74526ec49aa074c9b662d8beb1 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 18 Dec 2005 22:28:12 +0000 Subject: r12324: use command line credentials if available in ldap.js (This used to be commit f4f99f9af33699ac8fe43b09fa7542aab72a031a) --- testprogs/ejs/ldap.js | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index e1099d5ff0..561d5d86f8 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -15,6 +15,8 @@ if (options == undefined) { return -1; } +libinclude("base.js"); + if (options.ARGV.length != 1) { println("Usage: ldap.js "); return -1; @@ -57,9 +59,14 @@ function find_basedn(ldb) return res[0].defaultNamingContext; } +/* use command line creds if available */ +ldb.credentials = options.get_credentials(); + var ok = ldb.connect("ldap://" + host); var base_dn = find_basedn(ldb); +printf("baseDN: %s\n", base_dn); + basic_tests(ldb, base_dn) return 0; -- cgit From 58f78fa182c4b4a046b957c89988d34ea2125696 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 13 Jan 2006 03:39:49 +0000 Subject: r12892: Add a 'Migrate from Windows' page to our installation section in SWAT. Doing this required reworking ejsnet, particularly so it could take a set of credentials, not just a username and password argument. This required fixing the ejsnet.js test script, which now adds and deletes a user, and is run from 'make test'. This should prevent it being broken again. Deleting a user from ejsnet required that the matching backend be added to libnet, hooking fortunetly onto already existing code for the actual deletion. The js credentials interface now handles the 'set machine account' flag. New functions have been added to provision.js to wrap the basic operations (so we can write a command line version, as well as the web based version). Andrew Bartlett (This used to be commit a5e7c17c348c45e61699cc1626a0d5eae2df4636) --- testprogs/ejs/ejsnet.js | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ejsnet.js b/testprogs/ejs/ejsnet.js index 537312766a..f1d84ffde0 100755 --- a/testprogs/ejs/ejsnet.js +++ b/testprogs/ejs/ejsnet.js @@ -1,15 +1,38 @@ #!/usr/bin/env smbscript -var ctx = NetContext("Administrator", "admin"); -var usr_ctx = ctx.UserMgr("BUILTIN"); +var options = GetOptions(ARGV, + "POPT_AUTOHELP", + "POPT_COMMON_SAMBA", + "POPT_COMMON_CREDENTIALS"); +if (options == undefined) { + println("Failed to parse options"); + return -1; +} + +if (options.ARGV.length != 2) { + println("Usage: ejsnet.js "); + return -1; +} + +/* use command line creds if available */ +var creds = options.get_credentials(); + +var ctx = NetContext(creds); +var usr_ctx = ctx.UserMgr(options.ARGV[0]); if (usr_ctx == undefined) { - print("Couln't get user management context.\n"); + println("Couln't get user management context."); + return -1; +} + +var status = usr_ctx.Create(options.ARGV[1]); +if (status.is_ok != true) { + println("Failed to create user account " + options.ARGV[1] + ": " + status.errstr); return -1; } -var status = usr_ctx.Create("noname"); +var status = usr_ctx.Delete(options.ARGV[1]); if (status.is_ok != true) { - print("Failed to create user account: " + status.errstr + "\n"); + println("Failed to delete user account " + options.ARGV[1] + ": " + status.errstr); return -1; } -- cgit From 7dad66d8e38e206dd83b88a4e37c0f413b4b69df Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 18 Jan 2006 12:06:36 +0000 Subject: r12998: A big update to samldb.c This updates the module to handle both SID allocation and nextRid updating while importing users. (As imported users already have a SID, so don't go via the allocation step). We also ensure that SIDs in the database are unquie at create time. Furthermore, at allocation time, we double-check the SID isn't already in use, and that we don't create a foriegnSecurityPrincipal for a 'local' sid. Also create random samAccountName entries for users without one (we were setting $000000-000000000000). We may want to seperate the uniqueness code from the rest of samldb, and into a module with the objectguid code, which needs similar checks. These checks also need to apply to modification, or those modifications denied outright. Also update part of the testsuite to validate this. Andrew Bartlett (This used to be commit 7a9c8eee4bea88f5f0bb7c62f701476384b7dc84) --- testprogs/ejs/ldap.js | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 561d5d86f8..a432c11653 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -36,7 +36,21 @@ objectClass: user objectClass: person cn: LDAPtestUSER "); - assert(ok); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } + + ok = ldb.add(" +dn: cn=ldaptestuser2,cn=users," + base_dn + " +objectClass: user +objectClass: person +cn: LDAPtestUSER2 +"); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } println("Testing ldb.search"); var res = ldb.search("(&(cn=ldaptestuser)(objectClass=user))"); @@ -48,7 +62,25 @@ cn: LDAPtestUSER assert(res[0].whenCreated != undefined); ok = ldb.del(res[0].dn); - assert(ok); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } + + println("Testing ldb.search"); + var res = ldb.search("(&(cn=ldaptestUSer2)(objectClass=user))"); + + assert(res[0].dn == "cn=ldaptestuser2,cn=users," + base_dn); + assert(res[0].cn == "ldaptestuser2"); + assert(res[0].name == "ldaptestuser2"); + assert(res[0].objectGUID != undefined); + assert(res[0].whenCreated != undefined); + + ok = ldb.del(res[0].dn); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } } function find_basedn(ldb) -- cgit From 0c45a12b6558b3c8fb8105510688f9fb488f7c65 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sun, 5 Feb 2006 21:25:18 +0000 Subject: r13356: test utf8 usernames (This used to be commit 7ddec83a602372765711bff7207657b73922aaea) --- testprogs/ejs/ldap.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index a432c11653..148c3d050f 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -52,6 +52,15 @@ cn: LDAPtestUSER2 assert(ok); } + ok = ldb.add(" +dn: cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn + " +objectClass: user +"); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } + println("Testing ldb.search"); var res = ldb.search("(&(cn=ldaptestuser)(objectClass=user))"); @@ -81,6 +90,21 @@ cn: LDAPtestUSER2 println(ldb.errstring()); assert(ok); } + + println("Testing ldb.search"); + var res = ldb.search("(&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))"); + + assert(res[0].dn == "cn=ldaptestutf8user èùéìòà,cn=users," + base_dn); + assert(res[0].cn == "ldaptestutf8user èùéìòà"); + assert(res[0].name == "ldaptestutf8user èùéìòà"); + assert(res[0].objectGUID != undefined); + assert(res[0].whenCreated != undefined); + + ok = ldb.del(res[0].dn); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } } function find_basedn(ldb) -- cgit From b31c685ec293ef65bc33a474fc5a1d83545d4749 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 3 Jun 2006 11:57:20 +0000 Subject: r16028: Re-add the objectclass module, in the new async scheme. Add a test to show that we need this, and to prove it works (for add at least). Andrew Bartlett (This used to be commit f72079029abb594677bf8c2b63e40c07e910004f) --- testprogs/ejs/ldap.js | 136 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 123 insertions(+), 13 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 148c3d050f..de00113573 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -37,36 +37,118 @@ objectClass: person cn: LDAPtestUSER "); if (!ok) { - println(ldb.errstring()); - assert(ok); + ok = ldb.del("cn=ldaptestuser,cn=users," + base_dn); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } + ok = ldb.add(" +dn: cn=ldaptestuser,cn=users," + base_dn + " +objectClass: user +objectClass: person +cn: LDAPtestUSER +"); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } } ok = ldb.add(" dn: cn=ldaptestuser2,cn=users," + base_dn + " +objectClass: person objectClass: user +cn: LDAPtestUSER2 +"); + if (!ok) { + ok = ldb.del("cn=ldaptestuser2,cn=users," + base_dn); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } + ok = ldb.add(" +dn: cn=ldaptestuser2,cn=users," + base_dn + " objectClass: person +objectClass: user cn: LDAPtestUSER2 +"); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } + } + + ok = ldb.add(" +dn: cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn + " +objectClass: user "); if (!ok) { - println(ldb.errstring()); - assert(ok); + ok = ldb.del("cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } + ok = ldb.add(" +dn: cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn + " +objectClass: user +"); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } } ok = ldb.add(" -dn: cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn + " +dn: cn=ldaptestutf8user2 èùéìòà ,cn=users," + base_dn + " objectClass: user "); if (!ok) { - println(ldb.errstring()); - assert(ok); + ok = ldb.del("cn=ldaptestutf8user2 èùéìòà ,cn=users," + base_dn); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } + ok = ldb.add(" +dn: cn=ldaptestutf8user2 èùéìòà ,cn=users," + base_dn + " +objectClass: user +"); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } } - println("Testing ldb.search"); + println("Testing ldb.search for (&(cn=ldaptestuser)(objectClass=user))"); var res = ldb.search("(&(cn=ldaptestuser)(objectClass=user))"); + if (res.length != 1) { + println("Could not find (&(cn=ldaptestuser)(objectClass=user))"); + assert(res.length == 1); + } assert(res[0].dn == "cn=ldaptestuser,cn=users," + base_dn); assert(res[0].cn == "ldaptestuser"); assert(res[0].name == "ldaptestuser"); + assert(res[0].objectClass[0] == "top"); + assert(res[0].objectClass[1] == "person"); + assert(res[0].objectClass[2] == "organizationalPerson"); + assert(res[0].objectClass[3] == "user"); + assert(res[0].objectGUID != undefined); + assert(res[0].whenCreated != undefined); + + println("Testing ldb.search for (&(cn=ldaptestuser)(objectClass=user))"); + var res = ldb.search("(&(cn=ldaptestuser)(objectClass=user))"); + if (res.length != 1) { + println("Could not find (&(cn=ldaptestuser)(objectClass=user))"); + assert(res.length == 1); + } + + assert(res[0].dn == "cn=ldaptestuser,cn=users," + base_dn); + assert(res[0].cn == "ldaptestuser"); + assert(res[0].name == "ldaptestuser"); + assert(res[0].objectClass[0] == "top"); + assert(res[0].objectClass[1] == "person"); + assert(res[0].objectClass[2] == "organizationalPerson"); + assert(res[0].objectClass[3] == "user"); assert(res[0].objectGUID != undefined); assert(res[0].whenCreated != undefined); @@ -76,12 +158,20 @@ objectClass: user assert(ok); } - println("Testing ldb.search"); + println("Testing ldb.search for (&(cn=ldaptestUSer2)(objectClass=user))"); var res = ldb.search("(&(cn=ldaptestUSer2)(objectClass=user))"); + if (res.length != 1) { + println("Could not find (&(cn=ldaptestUSer2)(objectClass=user))"); + assert(res.length == 1); + } assert(res[0].dn == "cn=ldaptestuser2,cn=users," + base_dn); assert(res[0].cn == "ldaptestuser2"); assert(res[0].name == "ldaptestuser2"); + assert(res[0].objectClass[0] == "top"); + assert(res[0].objectClass[1] == "person"); + assert(res[0].objectClass[2] == "organizationalPerson"); + assert(res[0].objectClass[3] == "user"); assert(res[0].objectGUID != undefined); assert(res[0].whenCreated != undefined); @@ -91,12 +181,21 @@ objectClass: user assert(ok); } - println("Testing ldb.search"); + println("Testing ldb.search for (&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))"); var res = ldb.search("(&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))"); - assert(res[0].dn == "cn=ldaptestutf8user èùéìòà,cn=users," + base_dn); - assert(res[0].cn == "ldaptestutf8user èùéìòà"); - assert(res[0].name == "ldaptestutf8user èùéìòà"); + if (res.length != 1) { + println("Could not find (&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))"); + assert(res.length == 1); + } + + assert(res[0].dn == "cn=ldaptestutf8user èùéìòà,cn=users," + base_dn); + assert(res[0].cn == "ldaptestutf8user èùéìòà"); + assert(res[0].name == "ldaptestutf8user èùéìòà"); + assert(res[0].objectClass[0] == "top"); + assert(res[0].objectClass[1] == "person"); + assert(res[0].objectClass[2] == "organizationalPerson"); + assert(res[0].objectClass[3] == "user"); assert(res[0].objectGUID != undefined); assert(res[0].whenCreated != undefined); @@ -105,6 +204,17 @@ objectClass: user println(ldb.errstring()); assert(ok); } + + println("Testing ldb.search for (&(cn=ldaptestutf8user2 ÈÙÉÌÒÀ)(objectClass=user))"); + var res = ldb.search("(&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))"); + + if (res.length != 1) { + println("Could not find (expect space collapse, win2k3 fails) (&(cn=ldaptestutf8user2 ÈÙÉÌÒÀ)(objectClass=user))"); + } else { + assert(res[0].dn == "cn=ldaptestutf8user2 èùéìòà,cn=users," + base_dn); + assert(res[0].cn == "ldaptestutf8user2 èùéìòà"); + } + } function find_basedn(ldb) -- cgit From 629d6ad3cf98deba6b9e15701ed0c5d908b9fe11 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 6 Jun 2006 17:19:58 +0000 Subject: r16061: Prove that removing the objectClass list in the samldb module breaks things. With this fix, we now correctly detect computers again, and get the correct objectCategory, which is important for the OSX AD plugin. Andrew Bartlett (This used to be commit 4e39d7bb245bc337ac496c7e39a510d1c5611c71) --- testprogs/ejs/ldap.js | 59 ++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 54 insertions(+), 5 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index de00113573..db36e8cb6a 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -54,6 +54,28 @@ cn: LDAPtestUSER } } + var ok = ldb.add(" +dn: cn=ldaptestcomputer,cn=computers," + base_dn + " +objectClass: computer +cn: LDAPtestCOMPUTER +"); + if (!ok) { + ok = ldb.del("cn=ldaptestcomputer,cn=computers," + base_dn); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } + ok = ldb.add(" +dn: cn=ldaptestcomputer,cn=computers," + base_dn + " +objectClass: computer +cn: LDAPtestCOMPUTER +"); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } + } + ok = ldb.add(" dn: cn=ldaptestuser2,cn=users," + base_dn + " objectClass: person @@ -134,23 +156,50 @@ objectClass: user assert(res[0].objectClass[3] == "user"); assert(res[0].objectGUID != undefined); assert(res[0].whenCreated != undefined); + assert(res[0].objectCategory == "cn=Person,cn=Schema,cn=Configuration," + base_dn); - println("Testing ldb.search for (&(cn=ldaptestuser)(objectClass=user))"); - var res = ldb.search("(&(cn=ldaptestuser)(objectClass=user))"); + println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))"); + var res2 = ldb.search("(&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))"); + if (res.length != 1) { + println("Could not find (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))"); + assert(res.length == 1); + } + + assert(res[0].dn == res2[0].dn); + + ok = ldb.del(res[0].dn); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } + + println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectClass=user))"); + var res = ldb.search("(&(cn=ldaptestcomputer)(objectClass=user))"); if (res.length != 1) { println("Could not find (&(cn=ldaptestuser)(objectClass=user))"); assert(res.length == 1); } - assert(res[0].dn == "cn=ldaptestuser,cn=users," + base_dn); - assert(res[0].cn == "ldaptestuser"); - assert(res[0].name == "ldaptestuser"); + assert(res[0].dn == "cn=ldaptestcomputer,cn=computers," + base_dn); + assert(res[0].cn == "ldaptestcomputer"); + assert(res[0].name == "ldaptestcomputer"); assert(res[0].objectClass[0] == "top"); assert(res[0].objectClass[1] == "person"); assert(res[0].objectClass[2] == "organizationalPerson"); assert(res[0].objectClass[3] == "user"); + assert(res[0].objectClass[4] == "computer"); assert(res[0].objectGUID != undefined); assert(res[0].whenCreated != undefined); + assert(res[0].objectCategory == "cn=Computer,cn=Schema,cn=Configuration," + base_dn); + + println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); + var res2 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); + if (res.length != 1) { + println("Could not find (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); + assert(res.length == 1); + } + + assert(res[0].dn == res2[0].dn); ok = ldb.del(res[0].dn); if (!ok) { -- cgit From efddd37af84b9db429237a491cb74a2c12c505cb Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 6 Jun 2006 22:04:55 +0000 Subject: r16066: The OSX AD plugin uses objectCategory searches a lot, and uses them both fully qualified and in the 'short' form. Now we test and support this query format. Andrew Bartlett (This used to be commit 9ddcfacbcedc5eea2730d4bf902c0fcd02bcfa11) --- testprogs/ejs/ldap.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index db36e8cb6a..2429b9da5a 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -167,6 +167,15 @@ objectClass: user assert(res[0].dn == res2[0].dn); + println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon))"); + var res3 = ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))"); + if (res.length != 1) { + println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon))"); + assert(res.length == 1); + } + + assert(res[0].dn == res3[0].dn); + ok = ldb.del(res[0].dn); if (!ok) { println(ldb.errstring()); @@ -194,13 +203,22 @@ objectClass: user println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); var res2 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); - if (res.length != 1) { + if (res2.length != 1) { println("Could not find (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); - assert(res.length == 1); + assert(res2.length == 1); } assert(res[0].dn == res2[0].dn); + println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=compuTER))"); + var res3 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=compuTER))"); + if (res3.length != 1) { + println("Could not find (&(cn=ldaptestcomputer)(objectCategory=compuTER))"); + assert(res3.length == 1); + } + + assert(res[0].dn == res3[0].dn); + ok = ldb.del(res[0].dn); if (!ok) { println(ldb.errstring()); -- cgit From 7707d453c61c7b2639f0da013163584c3d5074d0 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 6 Jun 2006 22:31:20 +0000 Subject: r16068: Check against the correct result in the ldap.js test Andrew Bartlett (This used to be commit 52b4e83a1c2cd47bf2f8b6d65419dae12631725a) --- testprogs/ejs/ldap.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 2429b9da5a..fa611733c9 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -160,9 +160,9 @@ objectClass: user println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))"); var res2 = ldb.search("(&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))"); - if (res.length != 1) { + if (res2.length != 1) { println("Could not find (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))"); - assert(res.length == 1); + assert(res2.length == 1); } assert(res[0].dn == res2[0].dn); -- cgit From 9f6884df6a1d3eb11bd1ed030424ea18c786c178 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 7 Jun 2006 04:16:02 +0000 Subject: r16072: Do basic wildcard searching in the ejs LDAP test. Unfortunetly this didn't find the wildcard bug, but at least it tests something... Andrew Bartlett (This used to be commit f763970caf37a9191abd9c40f297c3f413fe9a56) --- testprogs/ejs/ldap.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index fa611733c9..90a69cf1a2 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -219,6 +219,33 @@ objectClass: user assert(res[0].dn == res3[0].dn); + println("Testing ldb.search for (&(cn=ldaptest*computer)(objectCategory=compuTER))"); + var res4 = ldb.search("(&(cn=ldaptest*computer)(objectCategory=compuTER))"); + if (res4.length != 1) { + println("Could not find (&(cn=ldaptest*computer)(objectCategory=compuTER))"); + assert(res4.length == 1); + } + + assert(res[0].dn == res4[0].dn); + + println("Testing ldb.search for (&(cn=ldaptestcomput*)(objectCategory=compuTER))"); + var res5 = ldb.search("(&(cn=ldaptestcomput*)(objectCategory=compuTER))"); + if (res5.length != 1) { + println("Could not find (&(cn=ldaptestcomput*)(objectCategory=compuTER))"); + assert(res5.length == 1); + } + + assert(res[0].dn == res5[0].dn); + + println("Testing ldb.search for (&(cn=*daptestcomputer)(objectCategory=compuTER))"); + var res6 = ldb.search("(&(cn=*daptestcomputer)(objectCategory=compuTER))"); + if (res6.length != 1) { + println("Could not find (&(cn=*daptestcomputer)(objectCategory=compuTER))"); + assert(res6.length == 1); + } + + assert(res[0].dn == res6[0].dn); + ok = ldb.del(res[0].dn); if (!ok) { println(ldb.errstring()); -- cgit From 2f16057bf477c2ea958d82f25a3fd533d876e0ff Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 9 Jun 2006 00:04:36 +0000 Subject: r16110: Start some simple rootDSE LDAP tests in ejs. Andrew Bartlett (This used to be commit 0201f0df3f3768f0d831c84c573b27bff58d00c6) --- testprogs/ejs/ldap.js | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 90a69cf1a2..69e784a59e 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -309,6 +309,13 @@ objectClass: user assert(res[0].cn == "ldaptestutf8user2 èùéìòà"); } + println("Testing for highestCommittedUSN"); + var attrs = new Array("highestCommittedUSN"); + var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); + assert(res.length == 1); + assert(res[0].highestCommittedUSN != undefined); + assert(res[0].highestCommittedUSN != 0); + } function find_basedn(ldb) -- cgit From 59bd3b66cd2b381e760d494d91c3c0459bdde629 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 12 Jun 2006 20:02:16 +0000 Subject: r16167: Add tests for the changes to use hex digits, including some tests commented out until we fix some more things on our server. Andrew Bartlett (This used to be commit ac9d3cb5b004ef1f8e06537634f8f5c33b6c0965) --- testprogs/ejs/ldap.js | 56 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 53 insertions(+), 3 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 69e784a59e..0e7632aea1 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -76,6 +76,30 @@ cn: LDAPtestCOMPUTER } } + var ok = ldb.add(" +dn: cn=ldaptest2computer,cn=computers," + base_dn + " +objectClass: computer +cn: LDAPtest2COMPUTER +userAccountControl: 4096 +"); + if (!ok) { + ok = ldb.del("cn=ldaptest2computer,cn=computers," + base_dn); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } + ok = ldb.add(" +dn: cn=ldaptest2computer,cn=computers," + base_dn + " +objectClass: computer +cn: LDAPtest2COMPUTER +userAccountControl: 4096 +"); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } + } + ok = ldb.add(" dn: cn=ldaptestuser2,cn=users," + base_dn + " objectClass: person @@ -157,6 +181,8 @@ objectClass: user assert(res[0].objectGUID != undefined); assert(res[0].whenCreated != undefined); assert(res[0].objectCategory == "cn=Person,cn=Schema,cn=Configuration," + base_dn); + assert(res[0].sAMAccountType == 805306368); +// assert(res[0].userAccountControl == 546); println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))"); var res2 = ldb.search("(&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))"); @@ -200,6 +226,8 @@ objectClass: user assert(res[0].objectGUID != undefined); assert(res[0].whenCreated != undefined); assert(res[0].objectCategory == "cn=Computer,cn=Schema,cn=Configuration," + base_dn); +// assert(res[0].sAMAccountType == 805306368); +// assert(res[0].userAccountControl == 546); println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); var res2 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); @@ -219,10 +247,10 @@ objectClass: user assert(res[0].dn == res3[0].dn); - println("Testing ldb.search for (&(cn=ldaptest*computer)(objectCategory=compuTER))"); - var res4 = ldb.search("(&(cn=ldaptest*computer)(objectCategory=compuTER))"); + println("Testing ldb.search for (&(cn=ldaptestcomp*r)(objectCategory=compuTER))"); + var res4 = ldb.search("(&(cn=ldaptestcomp*r)(objectCategory=compuTER))"); if (res4.length != 1) { - println("Could not find (&(cn=ldaptest*computer)(objectCategory=compuTER))"); + println("Could not find (&(cn=ldaptestcomp*r)(objectCategory=compuTER))"); assert(res4.length == 1); } @@ -252,6 +280,28 @@ objectClass: user assert(ok); } + println("Testing ldb.search for (&(cn=ldaptest2computer)(objectClass=user))"); + var res = ldb.search("(&(cn=ldaptest2computer)(objectClass=user))"); + if (res.length != 1) { + println("Could not find (&(cn=ldaptest2computer)(objectClass=user))"); + assert(res.length == 1); + } + + assert(res[0].dn == "cn=ldaptest2computer,cn=computers," + base_dn); + assert(res[0].cn == "ldaptest2computer"); + assert(res[0].name == "ldaptest2computer"); + assert(res[0].objectClass[0] == "top"); + assert(res[0].objectClass[1] == "person"); + assert(res[0].objectClass[2] == "organizationalPerson"); + assert(res[0].objectClass[3] == "user"); + assert(res[0].objectClass[4] == "computer"); + assert(res[0].objectGUID != undefined); + assert(res[0].whenCreated != undefined); + assert(res[0].objectCategory == "cn=Computer,cn=Schema,cn=Configuration," + base_dn); + assert(res[0].sAMAccountType == 805306369); +// assert(res[0].userAccountControl == 4098); + + println("Testing ldb.search for (&(cn=ldaptestUSer2)(objectClass=user))"); var res = ldb.search("(&(cn=ldaptestUSer2)(objectClass=user))"); if (res.length != 1) { -- cgit From bfc02627ceb02046fb23c62f28dc69765c8aa8f0 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 10 Jul 2006 11:24:46 +0000 Subject: r16914: Add more tests for the partition module. Andrew Bartlett (This used to be commit 2728b60dfa50ded03e06f0bd53eee55fce5143bd) --- testprogs/ejs/ldb.js | 78 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 69 insertions(+), 9 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldb.js b/testprogs/ejs/ldb.js index c681ee9ebb..fe067f638a 100755 --- a/testprogs/ejs/ldb.js +++ b/testprogs/ejs/ldb.js @@ -7,6 +7,23 @@ exec smbscript "$0" ${1+"$@"} var ldb = ldb_init(); var sys; +var options = GetOptions(ARGV, + "POPT_AUTOHELP", + "POPT_COMMON_SAMBA"); +if (options == undefined) { + println("Failed to parse options"); + return -1; +} + +libinclude("base.js"); + +if (options.ARGV.length != 1) { + println("Usage: ldap.js "); + return -1; +} + +prefix = options.ARGV[0]; + function basic_tests(ldb) { println("Running basic tests"); @@ -65,7 +82,16 @@ function setup_modules(ldb) { ok = ldb.add(" dn: @MODULES -@LIST: operational,objectguid,rdn_name +@LIST: rootdse,operational,objectguid,rdn_name,partition + +dn: cn=ROOTDSE +defaultNamingContext: cn=Test + +dn: @PARTITION +partition: cn=SideTest:" + prefix + "testside.ldb +partition: cn=Sub,cn=Test:" + prefix + "testsub.ldb +partition: cn=Test:" + prefix + "testpartition.ldb +partition: cn=Sub,cn=Sub,cn=Test:" + prefix + "testsubsub.ldb "); } @@ -80,7 +106,10 @@ dn: cn=x8,cn=test objectClass: foo x: 8 "); - assert(ok); + if (!ok) { + println("Failed to add: " + ldb.errstring()); + assert(ok); + } ok = ldb.add(" dn: cn=x9,cn=test @@ -88,9 +117,12 @@ objectClass: foo x: 9 cn: X9 "); - assert(ok); + if (!ok) { + println("Failed to add: " + ldb.errstring()); + assert(ok); + } - var res = ldb.search("x=8", NULL, ldb.SCOPE_DEFAULT); + var res = ldb.search("x=8", "cn=test", ldb.SCOPE_DEFAULT); assert(res[0].objectGUID != undefined); assert(res[0].createTimestamp == undefined); assert(res[0].whenCreated != undefined); @@ -98,7 +130,7 @@ cn: X9 assert(res[0].cn == "x8"); var attrs = new Array("*", "createTimestamp"); - var res2 = ldb.search("x=9", NULL, ldb.SCOPE_DEFAULT, attrs); + var res2 = ldb.search("x=9", "cn=test", ldb.SCOPE_DEFAULT, attrs); assert(res2[0].objectGUID != undefined); assert(res2[0].createTimestamp != undefined); assert(res2[0].whenCreated != undefined); @@ -107,22 +139,50 @@ cn: X9 assert(res[0].objectGUID != res2[0].objectGUID); + var attrs = new Array("*"); + var res3 = ldb.search("", "", ldb.SCOPE_BASE, attrs); + assert(res3[0].cn == undefined); + assert(res3[0].distinguishedName == undefined); + assert(res3[0].name == undefined); + assert(res3[0].currentTime != undefined); + assert(res3[0].highestCommittedUSN != undefined); + println(res3[0].namingContexts[0]); + println(res3[0].namingContexts[1]); + println(res3[0].namingContexts[2]); + println(res3[0].namingContexts[3]); + + assert(res3[0].namingContexts[0] == "cn=Test"); + assert(res3[0].namingContexts[1] == "cn=SideTest"); + assert(res3[0].namingContexts[2] == "cn=Sub,cn=Test"); + assert(res3[0].namingContexts[3] == "cn=Sub,cn=Sub,cn=Test"); + var usn = res3[0].highestCommittedUSN; + } sys = sys_init(); var dbfile = "test.ldb"; -sys.unlink(dbfile); -var ok = ldb.connect("tdb://" + dbfile); + +sys.unlink(prefix + dbfile); +sys.unlink(prefix + "testpartition.ldb"); +sys.unlink(prefix + "testsub.ldb"); +sys.unlink(prefix + "testsubsub.ldb"); +sys.unlink(prefix + "testside.ldb"); + +var ok = ldb.connect("tdb://" + prefix + dbfile); assert(ok); basic_tests(ldb); setup_modules(ldb); ldb = ldb_init(); -var ok = ldb.connect("tdb://" + dbfile); +var ok = ldb.connect("tdb://" + prefix + dbfile); assert(ok); modules_test(ldb); -sys.unlink(dbfile); +sys.unlink(prefix + dbfile); +sys.unlink(prefix + "testpartition.ldb"); +sys.unlink(prefix + "testsub.ldb"); +sys.unlink(prefix + "testsubsub.ldb"); +sys.unlink(prefix + "testside.ldb"); return 0; -- cgit From 30c1716eda1f0282d4776934baa35aa04ebba48c Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 11 Jul 2006 02:06:08 +0000 Subject: r16934: Expand the ldb test to demonstrate partition behaviour, including the global USN and global transactions. Andrew Bartlett (This used to be commit 5abe3c4f5f31e369548640801435613421f2edac) --- testprogs/ejs/ldb.js | 104 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 88 insertions(+), 16 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldb.js b/testprogs/ejs/ldb.js index fe067f638a..0d2de577d3 100755 --- a/testprogs/ejs/ldb.js +++ b/testprogs/ejs/ldb.js @@ -89,9 +89,9 @@ defaultNamingContext: cn=Test dn: @PARTITION partition: cn=SideTest:" + prefix + "testside.ldb -partition: cn=Sub,cn=Test:" + prefix + "testsub.ldb -partition: cn=Test:" + prefix + "testpartition.ldb -partition: cn=Sub,cn=Sub,cn=Test:" + prefix + "testsubsub.ldb +partition: cn=Sub,cn=PartTest:" + prefix + "testsub.ldb +partition: cn=PartTest:" + prefix + "testpartition.ldb +partition: cn=Sub,cn=Sub,cn=PartTest:" + prefix + "testsubsub.ldb "); } @@ -102,7 +102,7 @@ function modules_test(ldb) { println("Running modules tests"); ok = ldb.add(" -dn: cn=x8,cn=test +dn: cn=x8,cn=PartTest objectClass: foo x: 8 "); @@ -112,7 +112,7 @@ x: 8 } ok = ldb.add(" -dn: cn=x9,cn=test +dn: cn=x9,cn=PartTest objectClass: foo x: 9 cn: X9 @@ -122,7 +122,7 @@ cn: X9 assert(ok); } - var res = ldb.search("x=8", "cn=test", ldb.SCOPE_DEFAULT); + var res = ldb.search("x=8", "cn=PartTest", ldb.SCOPE_DEFAULT); assert(res[0].objectGUID != undefined); assert(res[0].createTimestamp == undefined); assert(res[0].whenCreated != undefined); @@ -130,7 +130,7 @@ cn: X9 assert(res[0].cn == "x8"); var attrs = new Array("*", "createTimestamp"); - var res2 = ldb.search("x=9", "cn=test", ldb.SCOPE_DEFAULT, attrs); + var res2 = ldb.search("x=9", "cn=PartTest", ldb.SCOPE_DEFAULT, attrs); assert(res2[0].objectGUID != undefined); assert(res2[0].createTimestamp != undefined); assert(res2[0].whenCreated != undefined); @@ -146,17 +146,89 @@ cn: X9 assert(res3[0].name == undefined); assert(res3[0].currentTime != undefined); assert(res3[0].highestCommittedUSN != undefined); - println(res3[0].namingContexts[0]); - println(res3[0].namingContexts[1]); - println(res3[0].namingContexts[2]); - println(res3[0].namingContexts[3]); - - assert(res3[0].namingContexts[0] == "cn=Test"); - assert(res3[0].namingContexts[1] == "cn=SideTest"); - assert(res3[0].namingContexts[2] == "cn=Sub,cn=Test"); - assert(res3[0].namingContexts[3] == "cn=Sub,cn=Sub,cn=Test"); + + assert(res3[0].namingContexts[0] == "cn=Sub,cn=Sub,cn=PartTest"); + assert(res3[0].namingContexts[1] == "cn=Sub,cn=PartTest"); + assert(res3[0].namingContexts[2] == "cn=PartTest"); + assert(res3[0].namingContexts[3] == "cn=SideTest"); var usn = res3[0].highestCommittedUSN; + + /* Start a transaction. We are going to abort it later, to + * show we clean up all partitions */ + + ok = ldb.transaction_start() + if (!ok) { + println("Failed to start a transaction: " + ldb.errstring()); + assert(ok); + } + + + ok = ldb.add(" +dn: cn=x10,cn=parttest +objectClass: foo +x: 10 +"); + if (!ok) { + println("Failed to add: " + ldb.errstring()); + assert(ok); + } + + var attrs = new Array("highestCommittedUSN"); + var res4 = ldb.search("", "", ldb.SCOPE_BASE, attrs); + var usn2 = res4[0].highestCommittedUSN; + assert(usn < res4[0].highestCommittedUSN); + + ok = ldb.add(" +dn: cn=x11,cn=sub,cn=parttest +objectClass: foo +x: 11 +"); + if (!ok) { + println("Failed to add: " + ldb.errstring()); + assert(ok); + } + + var attrs = new Array("highestCommittedUSN"); + var res5 = ldb.search("", "", ldb.SCOPE_BASE, attrs); + assert(usn2 < res5[0].highestCommittedUSN); + + var attrs = new Array("*", "createTimestamp"); + var res6 = ldb.search("x=11", "cn=parttest", ldb.SCOPE_SUB, attrs); + assert(res6.length == 0); + + var attrs = new Array("*", "createTimestamp"); + var res7 = ldb.search("x=10", "cn=sub,cn=parttest", ldb.SCOPE_DEFAULT, attrs); + assert(res7.length == 0); + + var res8 = ldb.search("x=11", "cn=sub,cn=parttest", ldb.SCOPE_DEFAULT, attrs); + assert(res8[0].objectGUID != undefined); + assert(res8[0].createTimestamp != undefined); + assert(res8[0].whenCreated != undefined); + assert(res8[0].name == "x11"); + assert(res8[0].cn == "x11"); + + /* Now abort the transaction to show that even with + * partitions, it is aborted everywhere */ + ok = ldb.transaction_cancel(); + if (!ok) { + println("Failed to cancel a transaction: " + ldb.errstring()); + assert(ok); + } + + /* now check it all went away */ + + var attrs = new Array("highestCommittedUSN"); + var res9 = ldb.search("", "", ldb.SCOPE_BASE, attrs); + assert(usn == res9[0].highestCommittedUSN); + var attrs = new Array("*"); + var res10 = ldb.search("x=11", "cn=sub,cn=parttest", ldb.SCOPE_DEFAULT, attrs); + assert(res10.length == 0); + + var attrs = new Array("*"); + var res11 = ldb.search("x=10", "cn=parttest", ldb.SCOPE_DEFAULT, attrs); + assert(res11.length == 0); + } sys = sys_init(); -- cgit From 77bb75ead0b5b13539ab89531542cc2e9813fda4 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 29 Jul 2006 01:13:53 +0000 Subject: r17299: Improve the partition module to replicate attribute records into all partitions. Test that we do that correctly. Andrew Bartlett (This used to be commit 90c07b88010b848423dee9556a24e8d181c365dd) --- testprogs/ejs/ldb.js | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldb.js b/testprogs/ejs/ldb.js index 0d2de577d3..fb1a2d4b0d 100755 --- a/testprogs/ejs/ldb.js +++ b/testprogs/ejs/ldb.js @@ -101,6 +101,16 @@ partition: cn=Sub,cn=Sub,cn=PartTest:" + prefix + "testsubsub.ldb function modules_test(ldb) { println("Running modules tests"); + + ok = ldb.add(" +dn: @ATTRIBUTES +caseattr: CASE_INSENSITIVE +"); + if (!ok) { + println("Failed to add: " + ldb.errstring()); + assert(ok); + } + ok = ldb.add(" dn: cn=x8,cn=PartTest objectClass: foo @@ -207,6 +217,57 @@ x: 11 assert(res8[0].name == "x11"); assert(res8[0].cn == "x11"); + ok = ldb.add(" +dn: caseattr=XY,cn=PartTest +objectClass: foo +x: Y +"); + if (!ok) { + println("Failed to add: " + ldb.errstring()); + assert(ok); + } + + ok = ldb.add(" +dn: caseattr=XZ,cn=PartTest +objectClass: foo +x: Z +caseattr: XZ +"); + if (!ok) { + println("Failed to add: " + ldb.errstring()); + assert(ok); + } + + ok = ldb.add(" +dn: caseattr2=XZ,cn=PartTest +objectClass: foo +x: Z +caseattr2: XZ +"); + if (!ok) { + println("Failed to add: " + ldb.errstring()); + assert(ok); + } + + var resX = ldb.search("caseattr=xz", "cn=parttest", ldb.SCOPE_DEFAULT, attrs); + assert(resX.length == 1); + assert(resX[0].objectGUID != undefined); + assert(resX[0].createTimestamp != undefined); + assert(resX[0].whenCreated != undefined); + assert(resX[0].name == "XZ"); + + var rescount = ldb.search("(|(caseattr=*)(cn=*))", "cn=parttest", ldb.SCOPE_DEFAULT, attrs); + assert(rescount.length == 5); + + /* Check this attribute is *not* case sensitive */ + var resXcount = ldb.search("caseattr=x*", "cn=parttest", ldb.SCOPE_DEFAULT, attrs); + assert(resXcount.length == 2); + + /* Check that this attribute *is* case sensitive */ + var resXcount2 = ldb.search("caseattr2=xz", "cn=parttest", ldb.SCOPE_DEFAULT, attrs); + assert(resXcount2.length == 0); + + /* Now abort the transaction to show that even with * partitions, it is aborted everywhere */ ok = ldb.transaction_cancel(); @@ -229,6 +290,10 @@ x: 11 var res11 = ldb.search("x=10", "cn=parttest", ldb.SCOPE_DEFAULT, attrs); assert(res11.length == 0); + var attrs = new Array("*"); + var res12 = ldb.search("caseattr=*", "cn=parttest", ldb.SCOPE_DEFAULT, attrs); + assert(res12.length == 0); + } sys = sys_init(); -- cgit From cfa762ff8781531cf7dffc0f81377b90be6f439a Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 29 Jul 2006 01:52:15 +0000 Subject: r17302: Testing! This confirms that records are replicated into the correct databases, and that the case insensitive flags really work. Andrew Bartlett (This used to be commit ad463c1a5243019548bdbeea3070ec2e6cbcfcdf) --- testprogs/ejs/ldb.js | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldb.js b/testprogs/ejs/ldb.js index fb1a2d4b0d..6851ee0b30 100755 --- a/testprogs/ejs/ldb.js +++ b/testprogs/ejs/ldb.js @@ -92,18 +92,22 @@ partition: cn=SideTest:" + prefix + "testside.ldb partition: cn=Sub,cn=PartTest:" + prefix + "testsub.ldb partition: cn=PartTest:" + prefix + "testpartition.ldb partition: cn=Sub,cn=Sub,cn=PartTest:" + prefix + "testsubsub.ldb +replicateEntries: @SUBCLASSES +replicateEntries: @ATTRIBUTES +replicateEntries: @INDEXLIST "); } /* Test the basic operation of the timestamps,objectguid and name_rdn modules */ -function modules_test(ldb) +function modules_test(ldb, parttestldb) { println("Running modules tests"); ok = ldb.add(" dn: @ATTRIBUTES +cn: CASE_INSENSITIVE caseattr: CASE_INSENSITIVE "); if (!ok) { @@ -111,6 +115,10 @@ caseattr: CASE_INSENSITIVE assert(ok); } + /* Confirm that the attributes were replicated */ + var res_attrs = parttestldb.search("cn=*", "@ATTRIBUTES", parttestldb.SCOPE_BASE); + assert(res_attrs[0].cn == "CASE_INSENSITIVE"); + ok = ldb.add(" dn: cn=x8,cn=PartTest objectClass: foo @@ -132,6 +140,17 @@ cn: X9 assert(ok); } + ok = ldb.add(" +dn: cn=X9,cn=PartTest +objectClass: foo +x: 9 +cn: X9 +"); + if (ok) { + println("Should have failed to add cn=X9,cn=PartTest"); + assert(!ok); + } + var res = ldb.search("x=8", "cn=PartTest", ldb.SCOPE_DEFAULT); assert(res[0].objectGUID != undefined); assert(res[0].createTimestamp == undefined); @@ -139,6 +158,14 @@ cn: X9 assert(res[0].name == "x8"); assert(res[0].cn == "x8"); + /* Confirm that this ended up in the correct LDB */ + var res_otherldb = parttestldb.search("x=8", "cn=PartTest", parttestldb.SCOPE_DEFAULT); + assert(res_otherldb[0].objectGUID != undefined); + assert(res_otherldb[0].createTimestamp == undefined); + assert(res_otherldb[0].whenCreated != undefined); + assert(res_otherldb[0].name == "x8"); + assert(res_otherldb[0].cn == "x8"); + var attrs = new Array("*", "createTimestamp"); var res2 = ldb.search("x=9", "cn=PartTest", ldb.SCOPE_DEFAULT, attrs); assert(res2[0].objectGUID != undefined); @@ -238,6 +265,17 @@ caseattr: XZ assert(ok); } + ok = ldb.add(" +dn: caseattr=xz,cn=PartTest +objectClass: foo +x: Z +caseattr: xz +"); + if (ok) { + println("Should have failed to add caseattr=xz,cn=PartTest"); + assert(!ok); + } + ok = ldb.add(" dn: caseattr2=XZ,cn=PartTest objectClass: foo @@ -249,6 +287,17 @@ caseattr2: XZ assert(ok); } + ok = ldb.add(" +dn: caseattr2=Xz,cn=PartTest +objectClass: foo +x: Z +caseattr2: Xz +"); + if (!ok) { + println("Failed to add: " + ldb.errstring()); + assert(ok); + } + var resX = ldb.search("caseattr=xz", "cn=parttest", ldb.SCOPE_DEFAULT, attrs); assert(resX.length == 1); assert(resX[0].objectGUID != undefined); @@ -315,7 +364,11 @@ ldb = ldb_init(); var ok = ldb.connect("tdb://" + prefix + dbfile); assert(ok); -modules_test(ldb); +parttestldb = ldb_init(); +var ok = parttestldb.connect("tdb://" + prefix + "testpartition.ldb"); +assert(ok); + +modules_test(ldb, parttestldb); sys.unlink(prefix + dbfile); sys.unlink(prefix + "testpartition.ldb"); -- cgit From 1057b4bea2351a898eb1b890612cefdfab98b743 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 3 Aug 2006 09:18:44 +0000 Subject: r17380: An expanded test, cross-referencing the global catalog to the main port. Andrew Bartlett (This used to be commit eadc24ed291dcdb456139a206c6c8acf92bab6da) --- testprogs/ejs/ldap.js | 73 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 69 insertions(+), 4 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 0e7632aea1..37c109bbf4 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -5,6 +5,7 @@ exec smbscript "$0" ${1+"$@"} */ var ldb = ldb_init(); +var gc_ldb = ldb_init(); var options = GetOptions(ARGV, "POPT_AUTOHELP", @@ -24,7 +25,7 @@ if (options.ARGV.length != 1) { var host = options.ARGV[0]; -function basic_tests(ldb, base_dn) +function basic_tests(ldb, gc_ldb, base_dn, configuration_dn) { println("Running basic tests"); @@ -195,13 +196,22 @@ objectClass: user println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon))"); var res3 = ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))"); - if (res.length != 1) { + if (res3.length != 1) { println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon))"); - assert(res.length == 1); + assert(res3.length == 1); } assert(res[0].dn == res3[0].dn); + println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog"); + var res3gc = gc_ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))"); + if (res3gc.length != 1) { + println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog"); + assert(res3gc.length == 1); + } + + assert(res[0].dn == res3gc[0].dn); + ok = ldb.del(res[0].dn); if (!ok) { println(ldb.errstring()); @@ -238,6 +248,15 @@ objectClass: user assert(res[0].dn == res2[0].dn); + println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + ")) in Global Catlog"); + var res2gc = gc_ldb.search("(&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); + if (res2gc.length != 1) { + println("Could not find (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + ")) in Global Catlog"); + assert(res2gc.length == 1); + } + + assert(res[0].dn == res2[0].dn); + println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=compuTER))"); var res3 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=compuTER))"); if (res3.length != 1) { @@ -247,6 +266,15 @@ objectClass: user assert(res[0].dn == res3[0].dn); + println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=compuTER)) in Global Catalog"); + var res3gc = gc_ldb.search("(&(cn=ldaptestcomputer)(objectCategory=compuTER))"); + if (res3gc.length != 1) { + println("Could not find (&(cn=ldaptestcomputer)(objectCategory=compuTER)) in Global Catalog"); + assert(res3gc.length == 1); + } + + assert(res[0].dn == res3gc[0].dn); + println("Testing ldb.search for (&(cn=ldaptestcomp*r)(objectCategory=compuTER))"); var res4 = ldb.search("(&(cn=ldaptestcomp*r)(objectCategory=compuTER))"); if (res4.length != 1) { @@ -366,6 +394,31 @@ objectClass: user assert(res[0].highestCommittedUSN != undefined); assert(res[0].highestCommittedUSN != 0); + println("Testing that we can't get at the configuration DN from the main search base"); + var attrs = new Array("cn"); + var res = ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs); + assert (res.length == 0); + + println("Testing that we do find configuration elements in the global catlog"); + var attrs = new Array("cn"); + var res = gc_ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs); + assert (res.length > 0); + + println("Testing that we do find configuration elements and user elements at the same time"); + var attrs = new Array("cn"); + var res = gc_ldb.search("(|(objectClass=crossRef)(objectClass=person))", base_dn, ldb.SCOPE_SUBTREE, attrs); + assert (res.length > 0); + + println("Testing that we do find configuration elements in the global catlog, with the configuration basedn"); + var attrs = new Array("cn"); + var res = gc_ldb.search("objectClass=crossRef", configuration_dn, ldb.SCOPE_SUBTREE, attrs); + assert (res.length > 0); + + println("Testing that we can get at the configuration DN on the main LDAP port"); + var attrs = new Array("cn"); + var res = ldb.search("objectClass=crossRef", configuration_dn, ldb.SCOPE_SUBTREE, attrs); + assert (res.length > 0); + } function find_basedn(ldb) @@ -376,14 +429,26 @@ function find_basedn(ldb) return res[0].defaultNamingContext; } +function find_configurationdn(ldb) +{ + var attrs = new Array("configurationNamingContext"); + var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); + assert(res.length == 1); + return res[0].configurationNamingContext; +} + /* use command line creds if available */ ldb.credentials = options.get_credentials(); +gc_ldb.credentials = options.get_credentials(); var ok = ldb.connect("ldap://" + host); var base_dn = find_basedn(ldb); +var configuration_dn = find_configurationdn(ldb); printf("baseDN: %s\n", base_dn); -basic_tests(ldb, base_dn) +var ok = gc_ldb.connect("ldap://" + host + ":3268"); + +basic_tests(ldb, gc_ldb, base_dn, configuration_dn) return 0; -- cgit From 027583e6de2a6981d1c0e8959e1e37bf758be8f9 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sun, 13 Aug 2006 23:58:04 +0000 Subject: r17525: This is a merge from the Google Summer of Code 2006 project by Martin Kühl . MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Martin took over the work done last year by Jelmer, in last year's SoC. This was a substanital task, as the the ldb modules API changed significantly during the past year, with the addition of async calls. This changeset reimplements and enables the ldb_map ldb module and adapts the example module and test case, both named samba3sam, to the implementation. The ldb_map module supports splitting an ldb database into two parts (called the "local" and "remote" part) and storing the data in one of them (the remote database) in a different format while the other acts as a fallback. This allows ldb to e.g. store to and load data from a remote LDAP server and present it according to the Samba4 schema while still allowing the LDAP to present and modify its data separately. A complex example of this is the samba3sam module (by Jelmer Vernooij), which maps data between the samba3 and samba4 schemas. A simpler example is given by the entryUUID module (by Andrew Bartlett), which handles some of the differences between AD and OpenLDAP in operational attributes. It principally maps objectGUID, to and from entryUUID elements. This is also an example of a module that doesn't use the local backend as fallback storage. This merge also splits the ldb_map.c file into smaller, more manageable parts. (This used to be commit af2bece4d343a9f787b2e3628848b266cec2b9f0) --- testprogs/ejs/samba3sam | 123 +++++++++++++++++++++++++++++++----------------- 1 file changed, 80 insertions(+), 43 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam b/testprogs/ejs/samba3sam index e9a610eea5..0f6d1a82ab 100755 --- a/testprogs/ejs/samba3sam +++ b/testprogs/ejs/samba3sam @@ -8,75 +8,92 @@ libinclude("base.js"); var mypath = substr(ARGV[0], 0, -strlen("samba3sam")); var sys = sys_init(); -var s3url; +var s3url = "tdb://samba3.ldb"; +var s4url = "tdb://samba4.ldb"; var s3 = ldb_init(); +var s4 = ldb_init(); +var msg; var ok; -if (ARGV.length == 2) { - s3url = ARGV[1]; - ok = s3.connect(s3url); - assert(ok); -} else { - s3url = "tdb://samba3.ldb"; - sys.unlink("samba3.ldb"); - println("Adding samba3 LDIF..."); - var s3 = ldb_init(); - ok = s3.connect(s3url); - assert(ok); - var ldif = sys.file_load(mypath + "../../testdata/samba3/samba3.ldif"); - assert(ldif != undefined); - ok = s3.add(ldif); - assert(ok); -} +var local = new Object(); +local.BASEDN = "dc=vernstok,dc=nl"; +var remote = new Object(); +remote.BASEDN = "CN=Samba3Sam," + local.BASEDN; + +var prt_ldif = sprintf("dn: @PARTITION +partition: %s:%s +partition: %s:%s", remote.BASEDN, s3url, local.BASEDN, s4url); + +var map_ldif = sprintf("dn: @MAP=samba3sam +@FROM: %s +@TO: %s", local.BASEDN, remote.BASEDN); + +var mod_ldif = "dn: @MODULES +@LIST: rootdse,paged_results,server_sort,extended_dn,asq,samldb,objectclass,password_hash,operational,objectguid,rdn_name,samba3sam,partition"; + +sys.unlink("samba3.ldb"); +ok = s3.connect(s3url); +assert(ok); + +println("Initial samba3 LDIF..."); +var path = "../../testdata/samba3/samba3.ldif" +var ldif = sys.file_load(mypath + path); +ldif = substitute_var(ldif, remote); +assert(ldif != undefined); +ok = s3.add(ldif); +assert(ok); -println("Initial samba4 LDIF..."); -var s4 = ldb_init(); sys.unlink("samba4.ldb"); ok = s4.connect("tdb://samba4.ldb"); assert(ok); -var ldif = sys.file_load(mypath + "../../source/setup/provision_init.ldif"); +println("Initial samba4 LDIF..."); +var path = "../../source/setup/provision_init.ldif"; +var ldif = sys.file_load(mypath + path); +ldif = substitute_var(ldif, local); assert(ldif != undefined); ok = s4.add(ldif); assert(ok); -var ldif = sys.file_load(mypath + "../../source/setup/provision_templates.ldif"); -var subobj = new Object(); -subobj.BASEDN = "dc=vernstok,dc=nl"; -ldif = substitute_var(ldif, subobj); +var path = "../../source/setup/provision_templates.ldif"; +var ldif = sys.file_load(mypath + path); +ldif = substitute_var(ldif, local); assert(ldif != undefined); ok = s4.add(ldif); assert(ok); +println("Registering partitions..."); +var ldif = substitute_var(prt_ldif, local); +assert(ldif != undefined); +ok = s4.add(ldif); +assert(ok); - -ok = s4.add(sprintf("dn: @MAP=samba3sam -@MAP_URL: %s", s3url)); +println("Registering mapping..."); +var ldif = substitute_var(map_ldif, local); +assert(ldif != undefined); +ok = s4.add(ldif); assert(ok); -ok = s4.modify(" -dn: @MODULES -replace: @LIST -@LIST: samldb,timestamps,objectguid,rdn_name,samba3sam"); +println("Registering modules..."); +var ldif = substitute_var(mod_ldif, local); +assert(ldif != undefined); +ok = s4.add(ldif); assert(ok); -println("Reconnecting to LDB database"); +println("Reconnecting to LDB database..."); s4 = ldb_init(); -ok = s4.connect("tdb://samba4.ldb"); +ok = s4.connect(s4url); assert(ok); -msg = s4.search("(ou=Users)"); -assert(msg.length == 1); - println("Looking up by non-mapped attribute"); msg = s4.search("(cn=Administrator)"); -assert(msg[0].cn == "Administrator"); assert(msg.length == 1); +assert(msg[0].cn == "Administrator"); println("Looking up by mapped attribute"); msg = s4.search("(name=Backup Operators)"); -assert(msg[0].name == "Backup Operators"); assert(msg.length == 1); +assert(msg[0].name == "Backup Operators"); println("Looking up by old name of renamed attribute"); msg = s4.search("(displayName=Backup Operators)"); @@ -88,8 +105,9 @@ assert(msg.length == 1); assert(msg[0].dn == "cn=Replicator,ou=Groups,sambaDomainName=TESTS,dc=vernstok,dc=nl"); assert(msg[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); -println("Checking mapping of objectclass"); -var oc = msg[0].objectclass; +println("Checking mapping of objectClass"); +var oc = msg[0].objectClass; +assert(oc != undefined); for (var i in oc) { assert(oc[i] == "posixGroup" || oc[i] == "group"); } @@ -104,8 +122,13 @@ showInAdvancedViewOnly: TRUE "); assert(ok); -println("Checking for existance of record"); +println("Checking for existence of record (local)"); +/* TODO: This record must be searched in the local database, which is currently only supported for base searches msg = s4.search("(cn=Foo)", new Array('foo','blah','cn','showInAdvancedViewOnly')); +TODO: Actually, this version should work as well but doesn't... +msg = s4.search("(cn=Foo)", "dc=idealx,dc=org", s4.LDB_SCOPE_SUBTREE new Array('foo','blah','cn','showInAdvancedViewOnly')); +*/ +msg = s4.search("", "cn=Foo,dc=idealx,dc=org", s4.LDB_SCOPE_BASE new Array('foo','blah','cn','showInAdvancedViewOnly')); assert(msg.length == 1); assert(msg[0].showInAdvancedViewOnly == "TRUE"); assert(msg[0].foo == "bar"); @@ -121,10 +144,24 @@ cn: Niemand "); assert(ok); -println("Checking for existance of record (mapped)"); -msg = s4.search("(unixName=bin)", new Array('unixName','cn','dn')); +println("Checking for existence of record (remote)"); +msg = s4.search("(unixName=bin)", new Array('unixName','cn','dn', 'unicodePwd')); assert(msg.length == 1); +assert(msg[0].cn == "Niemand"); +assert(msg[0].unicodePwd == "geheim"); + +println("Checking for existence of record (local && remote)"); +msg = s4.search("(&(unixName=bin)(unicodePwd=geheim))", new Array('unixName','cn','dn', 'unicodePwd')); +assert(msg.length == 1); // TODO: should check with more records +assert(msg[0].cn == "Niemand"); +assert(msg[0].unixName == "bin"); +assert(msg[0].unicodePwd == "geheim"); + +println("Checking for existence of record (local || remote)"); +msg = s4.search("(|(unixName=bin)(unicodePwd=geheim))", new Array('unixName','cn','dn', 'unicodePwd')); +assert(msg.length == 1); // TODO: should check with more records assert(msg[0].cn == "Niemand"); +assert(msg[0].unixName == "bin" || msg[0].unicodePwd == "geheim"); println("Checking for data in destination database"); msg = s3.search("(cn=Niemand)"); -- cgit From 1ace9b6ec0949aea9ca5897724b1acca8eee57d9 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 14 Aug 2006 23:41:10 +0000 Subject: r17543: Patch from Martin Kühl to extend the samba3sam test cases for ldb_map, and to include this into our default 'make test'. (This used to be commit f69a842314b3d5c57c3fa1f5b1bae3ee6d42da2b) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- testprogs/ejs/samba3sam | 27 +++-- testprogs/ejs/samba3sam.js | 259 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 278 insertions(+), 8 deletions(-) create mode 100644 testprogs/ejs/samba3sam.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam b/testprogs/ejs/samba3sam index 0f6d1a82ab..5d9fd6f514 100755 --- a/testprogs/ejs/samba3sam +++ b/testprogs/ejs/samba3sam @@ -48,14 +48,7 @@ ok = s4.connect("tdb://samba4.ldb"); assert(ok); println("Initial samba4 LDIF..."); -var path = "../../source/setup/provision_init.ldif"; -var ldif = sys.file_load(mypath + path); -ldif = substitute_var(ldif, local); -assert(ldif != undefined); -ok = s4.add(ldif); -assert(ok); - -var path = "../../source/setup/provision_templates.ldif"; +var path = "../../testdata/samba3/provision_samba3sam.ldif" var ldif = sys.file_load(mypath + path); ldif = substitute_var(ldif, local); assert(ldif != undefined); @@ -112,6 +105,24 @@ for (var i in oc) { assert(oc[i] == "posixGroup" || oc[i] == "group"); } +println("Looking up by objectClass"); +msg = s4.search("(|(objectClass=user)(cn=Administrator))"); +assert(msg != undefined); +assert(msg.length == 2); +for (var i = 0; i < msg.length; i++) { + assert((msg[i].dn == "unixName=Administrator,ou=Users,sambaDomainName=TESTS,dc=vernstok,dc=nl") || + (msg[i].dn == "unixName=nobody,ou=Users,sambaDomainName=TESTS,dc=vernstok,dc=nl")); +} + +println("Looking up by objectClass"); +msg = s4.search("(|(objectClass=user)(cn=Administrator))"); +assert(msg != undefined); +assert(msg.length == 2); +for (var i = 0; i < msg.length; i++) { + assert((msg[i].dn == "unixName=Administrator,ou=Users,sambaDomainName=TESTS,dc=vernstok,dc=nl") || + (msg[i].dn == "unixName=nobody,ou=Users,sambaDomainName=TESTS,dc=vernstok,dc=nl")); +} + println("Adding a record that will be fallbacked"); ok = s4.add(" dn: cn=Foo,dc=idealx,dc=org diff --git a/testprogs/ejs/samba3sam.js b/testprogs/ejs/samba3sam.js new file mode 100644 index 0000000000..15bcd42632 --- /dev/null +++ b/testprogs/ejs/samba3sam.js @@ -0,0 +1,259 @@ +#!/usr/bin/env smbscript +/* + (C) Jelmer Vernooij 2005 + (C) Martin Kuehl 2006 + Published under the GNU GPL + Sponsored by Google Summer of Code + */ + +var sys; +var ldb = ldb_init(); +var smb3 = ldb_init(); +var smb4 = ldb_init(); +var options = GetOptions(ARGV, "POPT_AUTOHELP", "POPT_COMMON_SAMBA"); +if (options == undefined) { + println("Failed to parse options"); + return -1; +} + +libinclude("base.js"); + +if (options.ARGV.length != 2) { + println("Usage: samba3sam.js "); + return -1; +} + +prefix = options.ARGV[0]; +datadir = options.ARGV[1]; + +function setup_modules(sys, ldb, from, to) { + var ldif = sys.file_load(datadir + "provision_samba3sam.ldif"); + ldif = substitute_var(ldif, from); + assert(ldif != undefined); + var ok = ldb.add(ldif); + assert(ok); + + var ok = ldb.add(" +dn: @MAP=samba3sam +@FROM: " + from.BASEDN + " +@TO: " + to.BASEDN + " + +dn: @MODULES +@LIST: rootdse,paged_results,server_sort,extended_dn,asq,samldb,objectclass,password_hash,operational,objectguid,rdn_name,samba3sam,partition + +dn: @PARTITION +partition: " + from.BASEDN + ":" + from.URL + " +partition: " + to.BASEDN + ":" + to.URL + " +replicateEntries: @SUBCLASSES +replicateEntries: @ATTRIBUTES +replicateEntries: @INDEXLIST +"); + assert(ok); +} + +function setup_data(sys, ldb, remote) { + var ldif = sys.file_load(datadir + "samba3.ldif"); + ldif = substitute_var(ldif, remote); + assert(ldif != undefined); + var ok = ldb.add(ldif); + assert(ok); +} + +function search_tests(ldb) { + println("Looking up by non-mapped attribute"); + var msg = ldb.search("(cn=Administrator)"); + assert(msg.length == 1); + assert(msg[0].cn == "Administrator"); + + println("Looking up by mapped attribute"); + var msg = ldb.search("(name=Backup Operators)"); + assert(msg.length == 1); + assert(msg[0].name == "Backup Operators"); + + println("Looking up by old name of renamed attribute"); + var msg = ldb.search("(displayName=Backup Operators)"); + assert(msg.length == 0); + + println("Looking up mapped entry containing SID"); + var msg = ldb.search("(cn=Replicator)"); + assert(msg.length == 1); + println(msg[0].dn); + assert(msg[0].dn == "cn=Replicator,ou=Groups,sambaDomainName=TESTS,dc=vernstok,dc=nl"); + assert(msg[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); + + println("Checking mapping of objectClass"); + var oc = msg[0].objectClass; + assert(oc != undefined); + for (var i in oc) { + assert(oc[i] == "posixGroup" || oc[i] == "group"); + } + + println("Looking up by objectClass"); + var msg = ldb.search("(|(objectClass=user)(cn=Administrator))"); + assert(msg != undefined); + assert(msg.length == 2); + for (var i = 0; i < msg.length; i++) { + assert((msg[i].dn == "unixName=Administrator,ou=Users,sambaDomainName=TESTS,dc=vernstok,dc=nl") || + (msg[i].dn == "unixName=nobody,ou=Users,sambaDomainName=TESTS,dc=vernstok,dc=nl")); + } +} + +function modify_tests(ldb, remote) { + println("Adding a record that will be fallbacked"); + ok = ldb.add(" +dn: cn=Foo,dc=idealx,dc=org +foo: bar +blah: Blie +cn: Foo +showInAdvancedViewOnly: TRUE +"); + assert(ok); + + println("Checking for existence of record (local)"); + /* TODO: This record must be searched in the local database, which is currently only supported for base searches + * msg = ldb.search("(cn=Foo)", new Array('foo','blah','cn','showInAdvancedViewOnly')); + * TODO: Actually, this version should work as well but doesn't... + * msg = ldb.search("(cn=Foo)", "dc=idealx,dc=org", ldb.LDB_SCOPE_SUBTREE new Array('foo','blah','cn','showInAdvancedViewOnly')); + */ + msg = ldb.search("", "cn=Foo,dc=idealx,dc=org", ldb.LDB_SCOPE_BASE new Array('foo','blah','cn','showInAdvancedViewOnly')); + assert(msg.length == 1); + assert(msg[0].showInAdvancedViewOnly == "TRUE"); + assert(msg[0].foo == "bar"); + assert(msg[0].blah == "Blie"); + + println("Adding record that will be mapped"); + ok = ldb.add(" +dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl +objectClass: user +unixName: bin +unicodePwd: geheim +cn: Niemand +"); + assert(ok); + + println("Checking for existence of record (remote)"); + msg = ldb.search("(unixName=bin)", new Array('unixName','cn','dn', 'unicodePwd')); + assert(msg.length == 1); + assert(msg[0].cn == "Niemand"); + assert(msg[0].unicodePwd == "geheim"); + + println("Checking for existence of record (local && remote)"); + msg = ldb.search("(&(unixName=bin)(unicodePwd=geheim))", new Array('unixName','cn','dn', 'unicodePwd')); + assert(msg.length == 1); // TODO: should check with more records + assert(msg[0].cn == "Niemand"); + assert(msg[0].unixName == "bin"); + assert(msg[0].unicodePwd == "geheim"); + + println("Checking for existence of record (local || remote)"); + msg = ldb.search("(|(unixName=bin)(unicodePwd=geheim))", new Array('unixName','cn','dn', 'unicodePwd')); + assert(msg.length == 1); // TODO: should check with more records + assert(msg[0].cn == "Niemand"); + assert(msg[0].unixName == "bin" || msg[0].unicodePwd == "geheim"); + + println("Checking for data in destination database"); + msg = remote.search("(cn=Niemand)"); + assert(msg.length >= 1); + assert(msg[0].sambaSID == "S-1-5-21-4231626423-2410014848-2360679739-2001"); + assert(msg[0].displayName == "Niemand"); + + println("Adding attribute..."); + ok = ldb.modify(" +dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl +changetype: modify +add: description +description: Blah +"); + assert(ok); + + println("Checking whether changes are still there..."); + msg = ldb.search("(cn=Niemand)"); + assert(msg.length >= 1); + assert(msg[0].cn == "Niemand"); + assert(msg[0].description == "Blah"); + + println("Modifying attribute..."); + ok = ldb.modify(" +dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl +changetype: modify +replace: description +description: Blie +"); + assert(ok); + + println("Checking whether changes are still there..."); + msg = ldb.search("(cn=Niemand)"); + assert(msg.length >= 1); + assert(msg[0].description == "Blie"); + + println("Deleting attribute..."); + ok = ldb.modify(" +dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl +changetype: modify +delete: description +"); + assert(ok); + + println("Checking whether changes are no longer there..."); + msg = ldb.search("(cn=Niemand)"); + assert(msg.length >= 1); + assert(msg[0].description == undefined); + + println("Renaming record..."); + ok = ldb.rename("cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl", "cn=Niemand,dc=vernstok,dc=nl"); + + println("Checking whether DN has changed..."); + msg = ldb.search("(cn=Niemand)"); + assert(msg.length == 1); + assert(msg[0].dn == "cn=Niemand,dc=vernstok,dc=nl"); + + println("Deleting record..."); + ok = ldb.del("cn=Niemand,dc=vernstok,dc=nl"); + assert(ok); + + println("Checking whether record is gone..."); + msg = ldb.search("(cn=Niemand)"); + assert(msg.length == 0); +} + +sys = sys_init(); +var ldbfile = prefix + "test.ldb"; +var ldburl = "tdb://" + ldbfile; + +var samba4 = new Object("samba4 partition info"); +var samba4.FILE = prefix + "samba4.ldb"; +var samba4.URL = "tdb://" + samba4.FILE; +var samba4.BASEDN = "dc=vernstok,dc=nl"; + +var samba3 = new Object("samba3 partition info"); +var samba3.FILE = prefix + "samba3.ldb"; +var samba3.URL = "tdb://" + samba3.FILE; +var samba3.BASEDN = "cn=Samba3Sam," + samba4.BASEDN; + +sys.unlink(ldbfile); +sys.unlink(samba3.FILE); +sys.unlink(samba4.FILE); + +var ok = ldb.connect(ldburl); +assert(ok); +var ok = smb3.connect(samba3.URL); +assert(ok); +var ok = smb4.connect(samba4.URL); +assert(ok); + +setup_data(sys, smb3, samba3); + +setup_modules(sys, ldb, samba4, samba3); + +ldb = ldb_init(); +var ok = ldb.connect(ldburl); +assert(ok); + +search_tests(ldb, smb3); + +modify_tests(ldb, smb3); + +sys.unlink(ldbfile); +sys.unlink(samba3.FILE); +sys.unlink(samba4.FILE); + +return 0; -- cgit From 0572822b0ec0cb33e84eeb1565a502650a0a9e16 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 15 Aug 2006 00:31:39 +0000 Subject: r17544: Add execute bit to js script. Andrew Bartlett (This used to be commit c1349cfd8d7e150489b94ccb005bfdffe88e4697) --- testprogs/ejs/samba3sam.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 testprogs/ejs/samba3sam.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam.js b/testprogs/ejs/samba3sam.js old mode 100644 new mode 100755 -- cgit From b7cef043519664ecff726c7e2bf9b0ce024e892b Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 15 Aug 2006 02:24:19 +0000 Subject: r17546: Test the loading of per-partition modules. Andrew Bartlett (This used to be commit 1a5ade30dcdf40da8d0a6d7395f1a2e93388fca3) --- testprogs/ejs/ldb.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldb.js b/testprogs/ejs/ldb.js index 6851ee0b30..b1dbad773d 100755 --- a/testprogs/ejs/ldb.js +++ b/testprogs/ejs/ldb.js @@ -82,7 +82,7 @@ function setup_modules(ldb) { ok = ldb.add(" dn: @MODULES -@LIST: rootdse,operational,objectguid,rdn_name,partition +@LIST: rootdse,operational,rdn_name,partition dn: cn=ROOTDSE defaultNamingContext: cn=Test @@ -95,6 +95,7 @@ partition: cn=Sub,cn=Sub,cn=PartTest:" + prefix + "testsubsub.ldb replicateEntries: @SUBCLASSES replicateEntries: @ATTRIBUTES replicateEntries: @INDEXLIST +modules: cn=PartTest:objectguid "); } @@ -238,9 +239,9 @@ x: 11 assert(res7.length == 0); var res8 = ldb.search("x=11", "cn=sub,cn=parttest", ldb.SCOPE_DEFAULT, attrs); - assert(res8[0].objectGUID != undefined); - assert(res8[0].createTimestamp != undefined); - assert(res8[0].whenCreated != undefined); + + assert(res8[0].objectGUID == undefined); /* The objectGUID module is not loaded here */ + assert(res8[0].uSNCreated != undefined); assert(res8[0].name == "x11"); assert(res8[0].cn == "x11"); -- cgit From 7d4da6897c547bafbe41cb7acf5dc2fcf387b4bb Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 15 Aug 2006 02:25:10 +0000 Subject: r17547: Add test by mkhl for some of our variable substituion behaviour. Andrew Bartlett (This used to be commit c2c72565e4efef44068c4f176619942f60a9cf6e) --- testprogs/ejs/base.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100755 testprogs/ejs/base.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/base.js b/testprogs/ejs/base.js new file mode 100755 index 0000000000..fddf64264c --- /dev/null +++ b/testprogs/ejs/base.js @@ -0,0 +1,15 @@ +#!/bin/sh +exec smbscript "$0" ${1+"$@"} +libinclude("base.js"); + +var obj = new Object(); +obj.FOO = "foo"; +obj.BAR = "bar"; +var str1 = "${FOO}:${BAR}"; +var str2 = "${FOO}:${BAR} "; // note the space after the brace +var sub1 = substitute_var(str1, obj); +var sub2 = substitute_var(str2, obj); + +assert(str1 + " " == str2); +assert(sub1 + " " == sub2); +exit(0); -- cgit From 45719b6c80472972d43e9efd64d879448649d225 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Thu, 17 Aug 2006 20:21:14 +0000 Subject: r17597: fix prefix path handling (This used to be commit 25cde0f7300f37fec6c4a897ba0a80a3e5c26e15) --- testprogs/ejs/ldb.js | 36 ++++++++++++++++++------------------ testprogs/ejs/samba3sam.js | 10 +++++----- 2 files changed, 23 insertions(+), 23 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldb.js b/testprogs/ejs/ldb.js index b1dbad773d..680420eefd 100755 --- a/testprogs/ejs/ldb.js +++ b/testprogs/ejs/ldb.js @@ -18,7 +18,7 @@ if (options == undefined) { libinclude("base.js"); if (options.ARGV.length != 1) { - println("Usage: ldap.js "); + println("Usage: ldb.js "); return -1; } @@ -88,10 +88,10 @@ dn: cn=ROOTDSE defaultNamingContext: cn=Test dn: @PARTITION -partition: cn=SideTest:" + prefix + "testside.ldb -partition: cn=Sub,cn=PartTest:" + prefix + "testsub.ldb -partition: cn=PartTest:" + prefix + "testpartition.ldb -partition: cn=Sub,cn=Sub,cn=PartTest:" + prefix + "testsubsub.ldb +partition: cn=SideTest:" + prefix + "/" + "testside.ldb +partition: cn=Sub,cn=PartTest:" + prefix + "/" + "testsub.ldb +partition: cn=PartTest:" + prefix + "/" + "testpartition.ldb +partition: cn=Sub,cn=Sub,cn=PartTest:" + prefix + "/" + "testsubsub.ldb replicateEntries: @SUBCLASSES replicateEntries: @ATTRIBUTES replicateEntries: @INDEXLIST @@ -349,31 +349,31 @@ caseattr2: Xz sys = sys_init(); var dbfile = "test.ldb"; -sys.unlink(prefix + dbfile); -sys.unlink(prefix + "testpartition.ldb"); -sys.unlink(prefix + "testsub.ldb"); -sys.unlink(prefix + "testsubsub.ldb"); -sys.unlink(prefix + "testside.ldb"); +sys.unlink(prefix + "/" + dbfile); +sys.unlink(prefix + "/" + "testpartition.ldb"); +sys.unlink(prefix + "/" + "testsub.ldb"); +sys.unlink(prefix + "/" + "testsubsub.ldb"); +sys.unlink(prefix + "/" + "testside.ldb"); -var ok = ldb.connect("tdb://" + prefix + dbfile); +var ok = ldb.connect("tdb://" + prefix + "/" + dbfile); assert(ok); basic_tests(ldb); setup_modules(ldb); ldb = ldb_init(); -var ok = ldb.connect("tdb://" + prefix + dbfile); +var ok = ldb.connect("tdb://" + prefix + "/" + dbfile); assert(ok); parttestldb = ldb_init(); -var ok = parttestldb.connect("tdb://" + prefix + "testpartition.ldb"); +var ok = parttestldb.connect("tdb://" + prefix + "/" + "testpartition.ldb"); assert(ok); modules_test(ldb, parttestldb); -sys.unlink(prefix + dbfile); -sys.unlink(prefix + "testpartition.ldb"); -sys.unlink(prefix + "testsub.ldb"); -sys.unlink(prefix + "testsubsub.ldb"); -sys.unlink(prefix + "testside.ldb"); +sys.unlink(prefix + "/" + dbfile); +sys.unlink(prefix + "/" + "testpartition.ldb"); +sys.unlink(prefix + "/" + "testsub.ldb"); +sys.unlink(prefix + "/" + "testsubsub.ldb"); +sys.unlink(prefix + "/" + "testside.ldb"); return 0; diff --git a/testprogs/ejs/samba3sam.js b/testprogs/ejs/samba3sam.js index 15bcd42632..b25ca88d1d 100755 --- a/testprogs/ejs/samba3sam.js +++ b/testprogs/ejs/samba3sam.js @@ -27,7 +27,7 @@ prefix = options.ARGV[0]; datadir = options.ARGV[1]; function setup_modules(sys, ldb, from, to) { - var ldif = sys.file_load(datadir + "provision_samba3sam.ldif"); + var ldif = sys.file_load(datadir + "/" + "provision_samba3sam.ldif"); ldif = substitute_var(ldif, from); assert(ldif != undefined); var ok = ldb.add(ldif); @@ -52,7 +52,7 @@ replicateEntries: @INDEXLIST } function setup_data(sys, ldb, remote) { - var ldif = sys.file_load(datadir + "samba3.ldif"); + var ldif = sys.file_load(datadir + "/" + "samba3.ldif"); ldif = substitute_var(ldif, remote); assert(ldif != undefined); var ok = ldb.add(ldif); @@ -216,16 +216,16 @@ delete: description } sys = sys_init(); -var ldbfile = prefix + "test.ldb"; +var ldbfile = prefix + "/" + "test.ldb"; var ldburl = "tdb://" + ldbfile; var samba4 = new Object("samba4 partition info"); -var samba4.FILE = prefix + "samba4.ldb"; +var samba4.FILE = prefix + "/" + "samba4.ldb"; var samba4.URL = "tdb://" + samba4.FILE; var samba4.BASEDN = "dc=vernstok,dc=nl"; var samba3 = new Object("samba3 partition info"); -var samba3.FILE = prefix + "samba3.ldb"; +var samba3.FILE = prefix + "/" + "samba3.ldb"; var samba3.URL = "tdb://" + samba3.FILE; var samba3.BASEDN = "cn=Samba3Sam," + samba4.BASEDN; -- cgit From c69672dd9880abea579a26c95733e45cd88d0be6 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 17 Aug 2006 22:18:20 +0000 Subject: r17598: Patch from Martin Kühl to update the samba3sam test suite, which contains tests for the samba3sam and ldb_map modules, with a lot of tests for search requests. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The tests add a small set of known records to the database, half of them with only remote data, half of them split across the local and remote backends, and test searching these records by DN, by attribute and with a range of parse trees. This suite should be extensive enough to ensure that behaviour of search requests doesn't break. (This used to be commit 120f7891faf241057457db7234ce381bfe3fd847) --- testprogs/ejs/samba3sam.js | 615 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 570 insertions(+), 45 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam.js b/testprogs/ejs/samba3sam.js index b25ca88d1d..bac381fa01 100755 --- a/testprogs/ejs/samba3sam.js +++ b/testprogs/ejs/samba3sam.js @@ -8,58 +8,60 @@ var sys; var ldb = ldb_init(); -var smb3 = ldb_init(); -var smb4 = ldb_init(); var options = GetOptions(ARGV, "POPT_AUTOHELP", "POPT_COMMON_SAMBA"); if (options == undefined) { - println("Failed to parse options"); - return -1; + println("Failed to parse options"); + return -1; } libinclude("base.js"); if (options.ARGV.length != 2) { - println("Usage: samba3sam.js "); - return -1; + println("Usage: samba3sam.js "); + return -1; } -prefix = options.ARGV[0]; -datadir = options.ARGV[1]; +var prefix = options.ARGV[0]; +var datadir = options.ARGV[1]; -function setup_modules(sys, ldb, from, to) { - var ldif = sys.file_load(datadir + "/" + "provision_samba3sam.ldif"); - ldif = substitute_var(ldif, from); +function setup_data(obj, ldif) +{ + assert(ldif != undefined); + ldif = substitute_var(ldif, obj); + assert(ldif != undefined); + var ok = obj.db.add(ldif); + assert(ok); +} + +function setup_modules(ldb, s3, s4, ldif) +{ + assert(ldif != undefined); + ldif = substitute_var(ldif, s4); assert(ldif != undefined); var ok = ldb.add(ldif); assert(ok); - var ok = ldb.add(" + var ldif = " dn: @MAP=samba3sam -@FROM: " + from.BASEDN + " -@TO: " + to.BASEDN + " +@FROM: " + s4.BASEDN + " +@TO: " + s3.BASEDN + " dn: @MODULES @LIST: rootdse,paged_results,server_sort,extended_dn,asq,samldb,objectclass,password_hash,operational,objectguid,rdn_name,samba3sam,partition dn: @PARTITION -partition: " + from.BASEDN + ":" + from.URL + " -partition: " + to.BASEDN + ":" + to.URL + " +partition: " + s4.BASEDN + ":" + s4.url + " +partition: " + s3.BASEDN + ":" + s3.url + " replicateEntries: @SUBCLASSES replicateEntries: @ATTRIBUTES replicateEntries: @INDEXLIST -"); - assert(ok); -} - -function setup_data(sys, ldb, remote) { - var ldif = sys.file_load(datadir + "/" + "samba3.ldif"); - ldif = substitute_var(ldif, remote); - assert(ldif != undefined); +"; var ok = ldb.add(ldif); assert(ok); } -function search_tests(ldb) { +function test_s3sam_search(ldb) +{ println("Looking up by non-mapped attribute"); var msg = ldb.search("(cn=Administrator)"); assert(msg.length == 1); @@ -98,7 +100,8 @@ function search_tests(ldb) { } } -function modify_tests(ldb, remote) { +function test_s3sam_modify(ldb, s3) +{ println("Adding a record that will be fallbacked"); ok = ldb.add(" dn: cn=Foo,dc=idealx,dc=org @@ -139,19 +142,19 @@ cn: Niemand println("Checking for existence of record (local && remote)"); msg = ldb.search("(&(unixName=bin)(unicodePwd=geheim))", new Array('unixName','cn','dn', 'unicodePwd')); - assert(msg.length == 1); // TODO: should check with more records + assert(msg.length == 1); // TODO: should check with more records assert(msg[0].cn == "Niemand"); assert(msg[0].unixName == "bin"); assert(msg[0].unicodePwd == "geheim"); println("Checking for existence of record (local || remote)"); msg = ldb.search("(|(unixName=bin)(unicodePwd=geheim))", new Array('unixName','cn','dn', 'unicodePwd')); - assert(msg.length == 1); // TODO: should check with more records + assert(msg.length == 1); // TODO: should check with more records assert(msg[0].cn == "Niemand"); assert(msg[0].unixName == "bin" || msg[0].unicodePwd == "geheim"); println("Checking for data in destination database"); - msg = remote.search("(cn=Niemand)"); + msg = s3.db.search("(cn=Niemand)"); assert(msg.length >= 1); assert(msg[0].sambaSID == "S-1-5-21-4231626423-2410014848-2360679739-2001"); assert(msg[0].displayName == "Niemand"); @@ -215,45 +218,567 @@ delete: description assert(msg.length == 0); } +function test_map_search(ldb, s3, s4) +{ + println("Running search tests on mapped data"); + var res; + var dn; + var attrs; + + /* Add a set of split records */ + var ldif = " +dn: cn=X,sambaDomainName=TESTS,${BASEDN} +objectClass: user +cn: X +codePage: x +revision: x +objectCategory: x +nextRid: y +lastLogon: x +description: x +objectSid: S-1-5-21-4231626423-2410014848-2360679739-552 +primaryGroupID: 1-5-21-4231626423-2410014848-2360679739-512 + +dn: cn=Y,sambaDomainName=TESTS,${BASEDN} +objectClass: top +cn: Y +codePage: x +revision: x +objectCategory: y +nextRid: y +lastLogon: y +description: x + +dn: cn=Z,sambaDomainName=TESTS,${BASEDN} +objectClass: top +cn: Z +codePage: x +revision: y +objectCategory: z +nextRid: y +lastLogon: z +description: y +"; + ldif = substitute_var(ldif, s4); + assert(ldif != undefined); + var ok = ldb.add(ldif); + assert(ok); + + /* Add a set of remote records */ + var ldif = " +dn: cn=A,sambaDomainName=TESTS,${BASEDN} +objectClass: posixAccount +cn: A +sambaNextRid: x +sambaBadPasswordCount: x +sambaLogonTime: x +description: x +sambaSID: S-1-5-21-4231626423-2410014848-2360679739-552 +sambaPrimaryGroupSID: S-1-5-21-4231626423-2410014848-2360679739-512 + +dn: cn=B,sambaDomainName=TESTS,${BASEDN} +objectClass: top +cn:B +sambaNextRid: x +sambaBadPasswordCount: x +sambaLogonTime: y +description: x + +dn: cn=C,sambaDomainName=TESTS,${BASEDN} +objectClass: top +cn: C +sambaNextRid: x +sambaBadPasswordCount: y +sambaLogonTime: z +description: y +"; + ldif = substitute_var(ldif, s3); + assert(ldif != undefined); + var ok = s3.db.add(ldif); + assert(ok); + + println("Testing search by DN"); + + /* Search remote record by local DN */ + dn = "cn=A,sambaDomainName=TESTS," + s4.BASEDN; + attrs = new Array("objectCategory", "lastLogon"); + res = ldb.search("", dn, ldb.SCOPE_BASE, attrs); + assert(res != undefined); + assert(res.length == 1); + assert(res[0].dn == dn); + assert(res[0].objectCategory == undefined); + assert(res[0].lastLogon == "x"); + + /* Search remote record by remote DN */ + dn = "cn=A,sambaDomainName=TESTS," + s3.BASEDN; + attrs = new Array("objectCategory", "lastLogon", "sambaLogonTime"); + res = s3.db.search("", dn, ldb.SCOPE_BASE, attrs); + assert(res != undefined); + assert(res.length == 1); + assert(res[0].dn == dn); + assert(res[0].objectCategory == undefined); + assert(res[0].lastLogon == undefined); + assert(res[0].sambaLogonTime == "x"); + + /* Search split record by local DN */ + dn = "cn=X,sambaDomainName=TESTS," + s4.BASEDN; + attrs = new Array("objectCategory", "lastLogon"); + res = ldb.search("", dn, ldb.SCOPE_BASE, attrs); + assert(res != undefined); + assert(res.length == 1); + assert(res[0].dn == dn); + assert(res[0].objectCategory == "x"); + assert(res[0].lastLogon == "x"); + + /* Search split record by remote DN */ + dn = "cn=X,sambaDomainName=TESTS," + s3.BASEDN; + attrs = new Array("objectCategory", "lastLogon", "sambaLogonTime"); + res = s3.db.search("", dn, ldb.SCOPE_BASE, attrs); + assert(res != undefined); + assert(res.length == 1); + assert(res[0].dn == dn); + assert(res[0].objectCategory == undefined); + assert(res[0].lastLogon == undefined); + assert(res[0].sambaLogonTime == "x"); + + println("Testing search by attribute"); + + /* Search by ignored attribute */ + attrs = new Array("objectCategory", "lastLogon"); + res = ldb.search("(revision=x)", NULL, ldb. SCOPE_DEFAULT, attrs); + assert(res != undefined); + assert(res.length == 2); + assert(res[0].dn == ("cn=Y,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[0].objectCategory == "y"); + assert(res[0].lastLogon == "y"); + assert(res[1].dn == ("cn=X,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[1].objectCategory == "x"); + assert(res[1].lastLogon == "x"); + + /* Search by kept attribute */ + attrs = new Array("objectCategory", "lastLogon"); + res = ldb.search("(description=y)", NULL, ldb. SCOPE_DEFAULT, attrs); + assert(res != undefined); + assert(res.length == 2); + assert(res[0].dn == ("cn=Z,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[0].objectCategory == "z"); + assert(res[0].lastLogon == "z"); + assert(res[1].dn == ("cn=C,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[1].objectCategory == undefined); + assert(res[1].lastLogon == "z"); + + /* Search by renamed attribute */ + attrs = new Array("objectCategory", "lastLogon"); + res = ldb.search("(badPwdCount=x)", NULL, ldb. SCOPE_DEFAULT, attrs); + assert(res != undefined); + assert(res.length == 2); + assert(res[0].dn == ("cn=B,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[0].objectCategory == undefined); + assert(res[0].lastLogon == "y"); + assert(res[1].dn == ("cn=A,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[1].objectCategory == undefined); + assert(res[1].lastLogon == "x"); + + /* Search by converted attribute */ + attrs = new Array("objectCategory", "lastLogon", "objectSid"); + /* TODO: + Using the SID directly in the parse tree leads to conversion + errors, letting the search fail with no results. + res = ldb.search("(objectSid=S-1-5-21-4231626423-2410014848-2360679739-552)", NULL, ldb. SCOPE_DEFAULT, attrs); + */ + res = ldb.search("(objectSid=*)", NULL, ldb. SCOPE_DEFAULT, attrs); + assert(res != undefined); + assert(res.length == 2); + assert(res[0].dn == ("cn=X,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[0].objectCategory == "x"); + assert(res[0].lastLogon == "x"); + assert(res[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); + assert(res[1].dn == ("cn=A,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[1].objectCategory == undefined); + assert(res[1].lastLogon == "x"); + assert(res[1].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); + + /* Search by generated attribute */ + /* In most cases, this even works when the mapping is missing + * a `convert_operator' by enumerating the remote db. */ + attrs = new Array("objectCategory", "lastLogon", "primaryGroupID"); + res = ldb.search("(primaryGroupID=1-5-21-4231626423-2410014848-2360679739-512)", NULL, ldb. SCOPE_DEFAULT, attrs); + assert(res != undefined); + assert(res.length == 1); + assert(res[0].dn == ("cn=A,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[0].objectCategory == undefined); + assert(res[0].lastLogon == "x"); + assert(res[0].primaryGroupID == "1-5-21-4231626423-2410014848-2360679739-512"); + + /* TODO: There should actually be two results, A and X. The + * primaryGroupID of X seems to get corrupted somewhere, and the + * objectSid isn't available during the generation of remote (!) data, + * which can be observed with the following search. Also note that Xs + * objectSid seems to be fine in the previous search for objectSid... */ + /* + res = ldb.search("(primaryGroupID=*)", NULL, ldb. SCOPE_DEFAULT, attrs); + println(res.length + " results found"); + for (i=0;i Date: Mon, 21 Aug 2006 02:44:51 +0000 Subject: r17646: Use authentication if specified. Andrew Bartlett (This used to be commit 67c9cd508ed9b28b4d605b79f6de421071177fa7) --- testprogs/ejs/minschema.js | 2 ++ 1 file changed, 2 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/minschema.js b/testprogs/ejs/minschema.js index dd7e04270a..50aca64da5 100755 --- a/testprogs/ejs/minschema.js +++ b/testprogs/ejs/minschema.js @@ -27,6 +27,8 @@ if (options.ARGV.length != 2) { var url = options.ARGV[0]; var classfile = options.ARGV[1]; +/* use command line creds if available */ +ldb.credentials = options.get_credentials(); var ok = ldb.connect(url); assert(ok); -- cgit From a46beefeb798f63a92f73b2658fd03fa96b55fcb Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Mon, 21 Aug 2006 03:52:43 +0000 Subject: r17648: update minschema.js this version returns also oMSyntax and oMObjectClass and also use the right value for the objects CNs add a nasty hack to ejs' mprLdbMessage() to handle binary blobs situations (This used to be commit 8dd1c1c05bc592d76d6e34b303048faf05c0fa6e) --- testprogs/ejs/minschema.js | 48 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 11 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/minschema.js b/testprogs/ejs/minschema.js index 50aca64da5..31084ac326 100755 --- a/testprogs/ejs/minschema.js +++ b/testprogs/ejs/minschema.js @@ -54,7 +54,7 @@ class_attrs = new Array("objectClass", attrib_attrs = new Array("objectClass", "lDAPDisplayName", "isSingleValued", "linkID", "systemFlags", "systemOnly", "schemaIDGUID", "adminDisplayName", "attributeID", - "attributeSyntax"); + "attributeSyntax", "oMSyntax", "oMObjectClass"); /* notes: @@ -75,21 +75,37 @@ function dprintf() { } } +function get_object_cn(ldb, name) { + var attrs = new Array("cn"); + + var res = ldb.search(sprintf("(ldapDisplayName=%s)", name), rootDse.schemaNamingContext, ldb.SCOPE_SUBTREE, attrs); + assert(res != undefined); + assert(res.length == 1); + + var cn = res[0]["cn"]; + assert(cn != undefined); + if (typeof(cn) == "string") { + return cn; + } + return cn[0]; +} /* create an objectclass object */ -function obj_objectClass(name) { +function obj_objectClass(ldb, name) { var o = new Object(); o.name = name; + o.cn = get_object_cn(ldb, name); return o; } /* create an attribute object */ -function obj_attribute(name) { +function obj_attribute(ldb, name) { var o = new Object(); o.name = name; + o.cn = get_object_cn(ldb, name); return o; } @@ -142,14 +158,19 @@ function fix_dn(dn) { */ function write_ldif_one(o, attrs) { var i; - printf("dn: CN=%s,CN=Schema,CN=Configuration,${BASEDN}\n", o.name); - printf("cn: %s\n", o.name); - printf("name: %s\n", o.name); + printf("dn: CN=%s,CN=Schema,CN=Configuration,${BASEDN}\n", o.cn); + printf("cn: %s\n", o.cn); + printf("name: %s\n", o.cn); for (i=0;i Date: Mon, 21 Aug 2006 04:33:36 +0000 Subject: r17651: Commit the set of classess used to generate our schema and update the schema with the latest additions (This used to be commit 09a32726111200e421b6fcacf1586bfbe6024fa6) --- testprogs/ejs/minschema_classes.txt | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 testprogs/ejs/minschema_classes.txt (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/minschema_classes.txt b/testprogs/ejs/minschema_classes.txt new file mode 100644 index 0000000000..5532ece6dd --- /dev/null +++ b/testprogs/ejs/minschema_classes.txt @@ -0,0 +1,31 @@ +applicationSettings +builtinDomain +classSchema +computer +configuration +container +crossRef +crossRefContainer +dMD +domain +domainDNS +foreignSecurityPrincipal +group +infrastructureUpdate +leaf +nTDSDSA +nTDSService +organizationalPerson +organizationalUnit +person +primaryDomain +rIDManager +secret +server +serversContainer +site +sitesContainer +subSchema +user +displaySpecifier +foreignSecurityPrincipal -- cgit From 372c2ea4dc701c985afde4c9f292cc6cb7b04c16 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 21 Aug 2006 10:45:58 +0000 Subject: r17661: A patch from Martin Kuehl: This commit extends the samba3sam test suite, which contains tests for the samba3sam and ldb_map modules, with a lot of tests for inbound, i.e. add, modify, rename and delete requests. The tests each add a single record, modify it, rename it, and then delete it, at each step checking that the operations were successful and that the right data went into the right partitions. They are run for an unmapped record, a mapped record with data only in the remote partition, a mapped record with remote data that is later modified to include local data, and a mapped record with data in both the local and remote partitions. It also adds a function to the backend objects that makes construction of DNs for their respective partitions more comfortable. Cheers, Martin (This used to be commit 1ddd06f24d71c606241863cf4fe047833c64a6d2) --- testprogs/ejs/samba3sam.js | 535 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 464 insertions(+), 71 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam.js b/testprogs/ejs/samba3sam.js index bac381fa01..217ac6912a 100755 --- a/testprogs/ejs/samba3sam.js +++ b/testprogs/ejs/samba3sam.js @@ -227,7 +227,7 @@ function test_map_search(ldb, s3, s4) /* Add a set of split records */ var ldif = " -dn: cn=X,sambaDomainName=TESTS,${BASEDN} +dn: " + s4.dn("cn=X") + " objectClass: user cn: X codePage: x @@ -239,7 +239,7 @@ description: x objectSid: S-1-5-21-4231626423-2410014848-2360679739-552 primaryGroupID: 1-5-21-4231626423-2410014848-2360679739-512 -dn: cn=Y,sambaDomainName=TESTS,${BASEDN} +dn: " + s4.dn("cn=Y") + " objectClass: top cn: Y codePage: x @@ -249,7 +249,7 @@ nextRid: y lastLogon: y description: x -dn: cn=Z,sambaDomainName=TESTS,${BASEDN} +dn: " + s4.dn("cn=Z") + " objectClass: top cn: Z codePage: x @@ -266,7 +266,7 @@ description: y /* Add a set of remote records */ var ldif = " -dn: cn=A,sambaDomainName=TESTS,${BASEDN} +dn: " + s3.dn("cn=A") + " objectClass: posixAccount cn: A sambaNextRid: x @@ -276,7 +276,7 @@ description: x sambaSID: S-1-5-21-4231626423-2410014848-2360679739-552 sambaPrimaryGroupSID: S-1-5-21-4231626423-2410014848-2360679739-512 -dn: cn=B,sambaDomainName=TESTS,${BASEDN} +dn: " + s3.dn("cn=B") + " objectClass: top cn:B sambaNextRid: x @@ -284,7 +284,7 @@ sambaBadPasswordCount: x sambaLogonTime: y description: x -dn: cn=C,sambaDomainName=TESTS,${BASEDN} +dn: " + s3.dn("cn=C") + " objectClass: top cn: C sambaNextRid: x @@ -300,7 +300,7 @@ description: y println("Testing search by DN"); /* Search remote record by local DN */ - dn = "cn=A,sambaDomainName=TESTS," + s4.BASEDN; + dn = s4.dn("cn=A"); attrs = new Array("objectCategory", "lastLogon"); res = ldb.search("", dn, ldb.SCOPE_BASE, attrs); assert(res != undefined); @@ -310,7 +310,7 @@ description: y assert(res[0].lastLogon == "x"); /* Search remote record by remote DN */ - dn = "cn=A,sambaDomainName=TESTS," + s3.BASEDN; + dn = s3.dn("cn=A"); attrs = new Array("objectCategory", "lastLogon", "sambaLogonTime"); res = s3.db.search("", dn, ldb.SCOPE_BASE, attrs); assert(res != undefined); @@ -321,7 +321,7 @@ description: y assert(res[0].sambaLogonTime == "x"); /* Search split record by local DN */ - dn = "cn=X,sambaDomainName=TESTS," + s4.BASEDN; + dn = s4.dn("cn=X"); attrs = new Array("objectCategory", "lastLogon"); res = ldb.search("", dn, ldb.SCOPE_BASE, attrs); assert(res != undefined); @@ -331,7 +331,7 @@ description: y assert(res[0].lastLogon == "x"); /* Search split record by remote DN */ - dn = "cn=X,sambaDomainName=TESTS," + s3.BASEDN; + dn = s3.dn("cn=X"); attrs = new Array("objectCategory", "lastLogon", "sambaLogonTime"); res = s3.db.search("", dn, ldb.SCOPE_BASE, attrs); assert(res != undefined); @@ -348,10 +348,10 @@ description: y res = ldb.search("(revision=x)", NULL, ldb. SCOPE_DEFAULT, attrs); assert(res != undefined); assert(res.length == 2); - assert(res[0].dn == ("cn=Y,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[0].dn == s4.dn("cn=Y")); assert(res[0].objectCategory == "y"); assert(res[0].lastLogon == "y"); - assert(res[1].dn == ("cn=X,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[1].dn == s4.dn("cn=X")); assert(res[1].objectCategory == "x"); assert(res[1].lastLogon == "x"); @@ -360,10 +360,10 @@ description: y res = ldb.search("(description=y)", NULL, ldb. SCOPE_DEFAULT, attrs); assert(res != undefined); assert(res.length == 2); - assert(res[0].dn == ("cn=Z,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[0].dn == s4.dn("cn=Z")); assert(res[0].objectCategory == "z"); assert(res[0].lastLogon == "z"); - assert(res[1].dn == ("cn=C,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[1].dn == s4.dn("cn=C")); assert(res[1].objectCategory == undefined); assert(res[1].lastLogon == "z"); @@ -372,10 +372,10 @@ description: y res = ldb.search("(badPwdCount=x)", NULL, ldb. SCOPE_DEFAULT, attrs); assert(res != undefined); assert(res.length == 2); - assert(res[0].dn == ("cn=B,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[0].dn == s4.dn("cn=B")); assert(res[0].objectCategory == undefined); assert(res[0].lastLogon == "y"); - assert(res[1].dn == ("cn=A,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[1].dn == s4.dn("cn=A")); assert(res[1].objectCategory == undefined); assert(res[1].lastLogon == "x"); @@ -389,11 +389,11 @@ description: y res = ldb.search("(objectSid=*)", NULL, ldb. SCOPE_DEFAULT, attrs); assert(res != undefined); assert(res.length == 2); - assert(res[0].dn == ("cn=X,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[0].dn == s4.dn("cn=X")); assert(res[0].objectCategory == "x"); assert(res[0].lastLogon == "x"); assert(res[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); - assert(res[1].dn == ("cn=A,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[1].dn == s4.dn("cn=A")); assert(res[1].objectCategory == undefined); assert(res[1].lastLogon == "x"); assert(res[1].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); @@ -405,7 +405,7 @@ description: y res = ldb.search("(primaryGroupID=1-5-21-4231626423-2410014848-2360679739-512)", NULL, ldb. SCOPE_DEFAULT, attrs); assert(res != undefined); assert(res.length == 1); - assert(res[0].dn == ("cn=A,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[0].dn == s4.dn("cn=A")); assert(res[0].objectCategory == undefined); assert(res[0].lastLogon == "x"); assert(res[0].primaryGroupID == "1-5-21-4231626423-2410014848-2360679739-512"); @@ -437,12 +437,12 @@ description: y res = ldb.search("(objectClass=user)", NULL, ldb. SCOPE_DEFAULT, attrs); assert(res != undefined); assert(res.length == 2); - assert(res[0].dn == ("cn=X,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[0].dn == s4.dn("cn=X")); assert(res[0].objectCategory == "x"); assert(res[0].lastLogon == "x"); assert(res[0].objectClass != undefined); assert(res[0].objectClass[3] == "user"); - assert(res[1].dn == ("cn=A,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[1].dn == s4.dn("cn=A")); assert(res[1].objectCategory == undefined); assert(res[1].lastLogon == "x"); assert(res[1].objectClass != undefined); @@ -452,19 +452,19 @@ description: y res = ldb.search("(|(objectClass=user)(badPwdCount=x))", NULL, ldb. SCOPE_DEFAULT, attrs); assert(res != undefined); assert(res.length == 3); - assert(res[0].dn == ("cn=B,sambaDomainName=TESTS," + s4.BASEDN)); + assert(res[0].dn == s4.dn("cn=B")); assert(res[0].objectCategory == undefined); assert(res[0].lastLogon == "y"); assert(res[0].objectClass != undefined); for (i=0;i Date: Mon, 21 Aug 2006 13:04:14 +0000 Subject: r17662: some more enhancements to our schema extraction tool, with a nasty hack in minschema.js that I really hate (This used to be commit 74c40719f2965e2bc055e539f0933d95df070fbf) --- testprogs/ejs/minschema.js | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/minschema.js b/testprogs/ejs/minschema.js index 31084ac326..9ad39827ac 100755 --- a/testprogs/ejs/minschema.js +++ b/testprogs/ejs/minschema.js @@ -37,6 +37,7 @@ objectclasses = new Object(); attributes = new Object(); rootDse = new Object(); +objectclasses_expanded = new Object(); /* the attributes we need for objectclasses */ class_attrs = new Array("objectClass", @@ -599,8 +600,33 @@ for (i=0;i Date: Sat, 26 Aug 2006 15:38:01 +0000 Subject: r17839: do not reference possibleInferiors we have not extracted trim duplicate may attributes (This used to be commit 4975659fd70abdbae42ee378b7be766102f4df55) --- testprogs/ejs/minschema.js | 90 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 81 insertions(+), 9 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/minschema.js b/testprogs/ejs/minschema.js index 9ad39827ac..c51caaca84 100755 --- a/testprogs/ejs/minschema.js +++ b/testprogs/ejs/minschema.js @@ -399,7 +399,80 @@ function walk_naming_context(ldb, namingContext) { trim the may attributes for an objectClass */ function trim_objectclass_attributes(ldb, class) { - /* not implemented yet */ + var i,j,n; + + /* trim possibleInferiors, + * include only the classes we extracted */ + var possinf = class["possibleInferiors"]; + if (possinf != undefined) { + var newpossinf = new Array(); + if (typeof(possinf) == "string") { + possinf = new Array(possinf); + } + n = 0; + for (j = 0;j < possinf.length; j++) { + var x = possinf[j]; + if (objectclasses[x] != undefined) { + newpossinf[n] = x; + n++; + } + } + class["possibleInferiors"] = newpossinf; + } + + /* trim systemMayContain, + * remove duplicates */ + var sysmay = class["systemMayContain"]; + if (sysmay != undefined) { + var newsysmay = new Array(); + if (typeof(sysmay) == "string") { + sysmay = new Array(sysmay); + } + for (j = 0;j < sysmay.length; j++) { + var x = sysmay[j]; + var dup = false; + if (newsysmay[0] == undefined) { + newsysmay[0] = x; + } else { + for (n = 0; n < newsysmay.length; n++) { + if (newsysmay[n] == x) { + dup = true; + } + } + if (dup == false) { + newsysmay[n] = x; + } + } + } + class["systemMayContain"] = newsysmay; + } + + /* trim mayContain, + * remove duplicates */ + var may = class["mayContain"]; + if (may != undefined) { + var newmay = new Array(); + if (typeof(may) == "string") { + may = new Array(may); + } + for (j = 0;j < may.length; j++) { + var x = may[j]; + var dup = false; + if (newmay[0] == undefined) { + newmay[0] = x; + } else { + for (n = 0; n < newmay.length; n++) { + if (newmay[n] == x) { + dup = true; + } + } + if (dup == false) { + newmay[n] = x; + } + } + } + class["mayContain"] = newmay; + } } /* @@ -444,7 +517,6 @@ function list_append(a1, a2) { function attribute_list(class, attr1, attr2) { var a1 = class[attr1]; var a2 = class[attr2]; - var i; if (typeof(a1) == "string") { a1 = new Array(a1); } @@ -636,13 +708,6 @@ for (i in objectclasses) { find_objectclass_properties(ldb, objectclasses[i]); } -/* - trim the 'may' attribute lists to those really needed -*/ -for (i in objectclasses) { - trim_objectclass_attributes(ldb, objectclasses[i]); -} - /* form the full list of attributes */ @@ -655,6 +720,13 @@ for (i in attributes) { find_attribute_properties(ldb, attributes[i]); } +/* + trim the 'may' attribute lists to those really needed +*/ +for (i in objectclasses) { + trim_objectclass_attributes(ldb, objectclasses[i]); +} + /* dump an ldif form of the attributes and objectclasses */ -- cgit From 2ea2a705ceac7777137b4c9b0e555ee4c3ed1804 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 29 Aug 2006 22:38:59 +0000 Subject: r17925: Another class we need. Andrew Bartlett (This used to be commit 5ff3f10d4fbd47419797890f87df3a50b3bb31fa) --- testprogs/ejs/minschema_classes.txt | 1 + 1 file changed, 1 insertion(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/minschema_classes.txt b/testprogs/ejs/minschema_classes.txt index 5532ece6dd..e5161d4dc9 100644 --- a/testprogs/ejs/minschema_classes.txt +++ b/testprogs/ejs/minschema_classes.txt @@ -29,3 +29,4 @@ subSchema user displaySpecifier foreignSecurityPrincipal +trustedDomain -- cgit From f5fc8e35303cf0952446141c8e1ff7e1fe917d2e Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 15 Sep 2006 22:56:45 +0000 Subject: r18573: disable the echo.js testing of echo_TestCall() for now. Jelmer, we need to fix pidl to be able to handle the double pointers in the ejs generated code (This used to be commit 63760acbb7ef6bc32e82ac843adf4f0155f0cb0a) --- testprogs/ejs/echo.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js index efdbe5783d..3750baf0fb 100755 --- a/testprogs/ejs/echo.js +++ b/testprogs/ejs/echo.js @@ -222,7 +222,9 @@ test_AddOne(echo); test_EchoData(echo); test_SinkData(echo); test_SourceData(echo); -test_TestCall(echo); + +print("SKIPPING test_TestCall as pidl cannot generate code for it\n"); +/* test_TestCall(echo); */ test_TestCall2(echo); test_TestSleep(echo); test_TestEnum(echo); -- cgit From 6ca895542a629de2049609d290d3020c133e15a7 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 20 Sep 2006 17:18:21 +0000 Subject: r18720: Get rid of unused file. (This used to be commit 5c0451842b50e914bcc86ea59b066e86af5cae06) --- testprogs/ejs/samba3sam | 241 ------------------------------------------------ 1 file changed, 241 deletions(-) delete mode 100755 testprogs/ejs/samba3sam (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam b/testprogs/ejs/samba3sam deleted file mode 100755 index 5d9fd6f514..0000000000 --- a/testprogs/ejs/samba3sam +++ /dev/null @@ -1,241 +0,0 @@ -#!/usr/bin/env smbscript -/* (C) Jelmer Vernooij 2005 - Published under the GNU GPL - Sponsored by Google Summer of Code - */ - -libinclude("base.js"); -var mypath = substr(ARGV[0], 0, -strlen("samba3sam")); - -var sys = sys_init(); -var s3url = "tdb://samba3.ldb"; -var s4url = "tdb://samba4.ldb"; -var s3 = ldb_init(); -var s4 = ldb_init(); -var msg; -var ok; - -var local = new Object(); -local.BASEDN = "dc=vernstok,dc=nl"; -var remote = new Object(); -remote.BASEDN = "CN=Samba3Sam," + local.BASEDN; - -var prt_ldif = sprintf("dn: @PARTITION -partition: %s:%s -partition: %s:%s", remote.BASEDN, s3url, local.BASEDN, s4url); - -var map_ldif = sprintf("dn: @MAP=samba3sam -@FROM: %s -@TO: %s", local.BASEDN, remote.BASEDN); - -var mod_ldif = "dn: @MODULES -@LIST: rootdse,paged_results,server_sort,extended_dn,asq,samldb,objectclass,password_hash,operational,objectguid,rdn_name,samba3sam,partition"; - -sys.unlink("samba3.ldb"); -ok = s3.connect(s3url); -assert(ok); - -println("Initial samba3 LDIF..."); -var path = "../../testdata/samba3/samba3.ldif" -var ldif = sys.file_load(mypath + path); -ldif = substitute_var(ldif, remote); -assert(ldif != undefined); -ok = s3.add(ldif); -assert(ok); - -sys.unlink("samba4.ldb"); -ok = s4.connect("tdb://samba4.ldb"); -assert(ok); - -println("Initial samba4 LDIF..."); -var path = "../../testdata/samba3/provision_samba3sam.ldif" -var ldif = sys.file_load(mypath + path); -ldif = substitute_var(ldif, local); -assert(ldif != undefined); -ok = s4.add(ldif); -assert(ok); - -println("Registering partitions..."); -var ldif = substitute_var(prt_ldif, local); -assert(ldif != undefined); -ok = s4.add(ldif); -assert(ok); - -println("Registering mapping..."); -var ldif = substitute_var(map_ldif, local); -assert(ldif != undefined); -ok = s4.add(ldif); -assert(ok); - -println("Registering modules..."); -var ldif = substitute_var(mod_ldif, local); -assert(ldif != undefined); -ok = s4.add(ldif); -assert(ok); - -println("Reconnecting to LDB database..."); -s4 = ldb_init(); -ok = s4.connect(s4url); -assert(ok); - -println("Looking up by non-mapped attribute"); -msg = s4.search("(cn=Administrator)"); -assert(msg.length == 1); -assert(msg[0].cn == "Administrator"); - -println("Looking up by mapped attribute"); -msg = s4.search("(name=Backup Operators)"); -assert(msg.length == 1); -assert(msg[0].name == "Backup Operators"); - -println("Looking up by old name of renamed attribute"); -msg = s4.search("(displayName=Backup Operators)"); -assert(msg.length == 0); - -println("Looking up mapped entry containing SID"); -msg = s4.search("(cn=Replicator)"); -assert(msg.length == 1); -assert(msg[0].dn == "cn=Replicator,ou=Groups,sambaDomainName=TESTS,dc=vernstok,dc=nl"); -assert(msg[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); - -println("Checking mapping of objectClass"); -var oc = msg[0].objectClass; -assert(oc != undefined); -for (var i in oc) { - assert(oc[i] == "posixGroup" || oc[i] == "group"); -} - -println("Looking up by objectClass"); -msg = s4.search("(|(objectClass=user)(cn=Administrator))"); -assert(msg != undefined); -assert(msg.length == 2); -for (var i = 0; i < msg.length; i++) { - assert((msg[i].dn == "unixName=Administrator,ou=Users,sambaDomainName=TESTS,dc=vernstok,dc=nl") || - (msg[i].dn == "unixName=nobody,ou=Users,sambaDomainName=TESTS,dc=vernstok,dc=nl")); -} - -println("Looking up by objectClass"); -msg = s4.search("(|(objectClass=user)(cn=Administrator))"); -assert(msg != undefined); -assert(msg.length == 2); -for (var i = 0; i < msg.length; i++) { - assert((msg[i].dn == "unixName=Administrator,ou=Users,sambaDomainName=TESTS,dc=vernstok,dc=nl") || - (msg[i].dn == "unixName=nobody,ou=Users,sambaDomainName=TESTS,dc=vernstok,dc=nl")); -} - -println("Adding a record that will be fallbacked"); -ok = s4.add(" -dn: cn=Foo,dc=idealx,dc=org -foo: bar -blah: Blie -cn: Foo -showInAdvancedViewOnly: TRUE -"); -assert(ok); - -println("Checking for existence of record (local)"); -/* TODO: This record must be searched in the local database, which is currently only supported for base searches -msg = s4.search("(cn=Foo)", new Array('foo','blah','cn','showInAdvancedViewOnly')); -TODO: Actually, this version should work as well but doesn't... -msg = s4.search("(cn=Foo)", "dc=idealx,dc=org", s4.LDB_SCOPE_SUBTREE new Array('foo','blah','cn','showInAdvancedViewOnly')); -*/ -msg = s4.search("", "cn=Foo,dc=idealx,dc=org", s4.LDB_SCOPE_BASE new Array('foo','blah','cn','showInAdvancedViewOnly')); -assert(msg.length == 1); -assert(msg[0].showInAdvancedViewOnly == "TRUE"); -assert(msg[0].foo == "bar"); -assert(msg[0].blah == "Blie"); - -println("Adding record that will be mapped"); -ok = s4.add(" -dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl -objectClass: user -unixName: bin -unicodePwd: geheim -cn: Niemand -"); -assert(ok); - -println("Checking for existence of record (remote)"); -msg = s4.search("(unixName=bin)", new Array('unixName','cn','dn', 'unicodePwd')); -assert(msg.length == 1); -assert(msg[0].cn == "Niemand"); -assert(msg[0].unicodePwd == "geheim"); - -println("Checking for existence of record (local && remote)"); -msg = s4.search("(&(unixName=bin)(unicodePwd=geheim))", new Array('unixName','cn','dn', 'unicodePwd')); -assert(msg.length == 1); // TODO: should check with more records -assert(msg[0].cn == "Niemand"); -assert(msg[0].unixName == "bin"); -assert(msg[0].unicodePwd == "geheim"); - -println("Checking for existence of record (local || remote)"); -msg = s4.search("(|(unixName=bin)(unicodePwd=geheim))", new Array('unixName','cn','dn', 'unicodePwd')); -assert(msg.length == 1); // TODO: should check with more records -assert(msg[0].cn == "Niemand"); -assert(msg[0].unixName == "bin" || msg[0].unicodePwd == "geheim"); - -println("Checking for data in destination database"); -msg = s3.search("(cn=Niemand)"); -assert(msg.length >= 1); -assert(msg[0].sambaSID == "S-1-5-21-4231626423-2410014848-2360679739-2001"); -assert(msg[0].displayName == "Niemand"); - -println("Adding attribute..."); -ok = s4.modify(" -dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl -changetype: modify -add: description -description: Blah -"); -assert(ok); - -println("Checking whether changes are still there..."); -msg = s4.search("(cn=Niemand)"); -assert(msg.length >= 1); -assert(msg[0].cn == "Niemand"); -assert(msg[0].description == "Blah"); - -println("Modifying attribute..."); -ok = s4.modify(" -dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl -changetype: modify -replace: description -description: Blie -"); -assert(ok); - -println("Checking whether changes are still there..."); -msg = s4.search("(cn=Niemand)"); -assert(msg.length >= 1); -assert(msg[0].description == "Blie"); - -println("Deleting attribute..."); -ok = s4.modify(" -dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl -changetype: modify -delete: description -"); -assert(ok); - -println("Checking whether changes are no longer there..."); -msg = s4.search("(cn=Niemand)"); -assert(msg.length >= 1); -assert(msg[0].description == undefined); - -println("Renaming record..."); -ok = s4.rename("cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl", "cn=Niemand,dc=vernstok,dc=nl"); - -println("Checking whether DN has changed..."); -msg = s4.search("(cn=Niemand)"); -assert(msg.length == 1); -assert(msg[0].dn == "cn=Niemand,dc=vernstok,dc=nl"); - -println("Deleting record..."); -ok = s4.del("cn=Niemand,dc=vernstok,dc=nl"); -assert(ok); - -println("Checking whether record is gone..."); -msg = s4.search("(cn=Niemand)"); -assert(msg.length == 0); - -return 0; -- cgit From 324a77916752129b6b64b3596c493727b293fb52 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 20 Sep 2006 17:19:05 +0000 Subject: r18721: Fix base and samba3sam EJS tests to work without installation. (This used to be commit d062e101664a90f2f7bf0980449f920aa719ee76) --- testprogs/ejs/base.js | 8 ++++++++ testprogs/ejs/samba3sam.js | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/base.js b/testprogs/ejs/base.js index fddf64264c..3c998ee4f8 100755 --- a/testprogs/ejs/base.js +++ b/testprogs/ejs/base.js @@ -1,5 +1,13 @@ #!/bin/sh exec smbscript "$0" ${1+"$@"} + +var options = GetOptions(ARGV, + "POPT_COMMON_SAMBA"); +if (options == undefined) { + println("Failed to parse options"); + return -1; +} + libinclude("base.js"); var obj = new Object(); diff --git a/testprogs/ejs/samba3sam.js b/testprogs/ejs/samba3sam.js index 217ac6912a..446b39facf 100755 --- a/testprogs/ejs/samba3sam.js +++ b/testprogs/ejs/samba3sam.js @@ -7,7 +7,6 @@ */ var sys; -var ldb = ldb_init(); var options = GetOptions(ARGV, "POPT_AUTOHELP", "POPT_COMMON_SAMBA"); if (options == undefined) { println("Failed to parse options"); @@ -1108,6 +1107,8 @@ function make_dn(rdn) return rdn + ",sambaDomainName=TESTS," + this.BASEDN; } +var ldb = ldb_init(); + sys = sys_init(); var ldbfile = prefix + "/" + "test.ldb"; var ldburl = "tdb://" + ldbfile; -- cgit From 952ac3cba5a511ddbad82b826c1aa4b201a46891 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 21 Sep 2006 16:42:56 +0000 Subject: r18786: I moved the usnChanged code around, and it now loaded in a different module. I forgot to commit this last night. Andrew Bartlett (This used to be commit 6c5f4af01fea1e3b38d18d5b1491cb22701317cf) --- testprogs/ejs/ldb.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldb.js b/testprogs/ejs/ldb.js index 680420eefd..06b6ec7f50 100755 --- a/testprogs/ejs/ldb.js +++ b/testprogs/ejs/ldb.js @@ -154,6 +154,8 @@ cn: X9 var res = ldb.search("x=8", "cn=PartTest", ldb.SCOPE_DEFAULT); assert(res[0].objectGUID != undefined); + assert(res[0].uSNCreated != undefined); + assert(res[0].uSNChanged != undefined); assert(res[0].createTimestamp == undefined); assert(res[0].whenCreated != undefined); assert(res[0].name == "x8"); @@ -241,7 +243,7 @@ x: 11 var res8 = ldb.search("x=11", "cn=sub,cn=parttest", ldb.SCOPE_DEFAULT, attrs); assert(res8[0].objectGUID == undefined); /* The objectGUID module is not loaded here */ - assert(res8[0].uSNCreated != undefined); + assert(res8[0].uSNCreated == undefined); /* The objectGUID module is not loaded here */ assert(res8[0].name == "x11"); assert(res8[0].cn == "x11"); -- cgit From b7f7e8d4fddc38342f3d822abf73cf99d6457793 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Wed, 15 Nov 2006 18:14:37 +0000 Subject: r19727: make it possible to run the ldap.js tests against non global catalog servers metze (This used to be commit 463ed4c0040f52ef2b06337e122aac325ec01026) --- testprogs/ejs/ldap.js | 81 +++++++++++++++++++++++++++++---------------------- 1 file changed, 46 insertions(+), 35 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 37c109bbf4..4f810ae5eb 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -203,15 +203,17 @@ objectClass: user assert(res[0].dn == res3[0].dn); - println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog"); - var res3gc = gc_ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))"); - if (res3gc.length != 1) { - println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog"); - assert(res3gc.length == 1); + if (gc_ldb != undefined) { + println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog"); + var res3gc = gc_ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))"); + if (res3gc.length != 1) { + println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog"); + assert(res3gc.length == 1); + } + + assert(res[0].dn == res3gc[0].dn); } - assert(res[0].dn == res3gc[0].dn); - ok = ldb.del(res[0].dn); if (!ok) { println(ldb.errstring()); @@ -248,14 +250,16 @@ objectClass: user assert(res[0].dn == res2[0].dn); - println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + ")) in Global Catlog"); - var res2gc = gc_ldb.search("(&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); - if (res2gc.length != 1) { - println("Could not find (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + ")) in Global Catlog"); - assert(res2gc.length == 1); - } + if (gc_ldb != undefined) { + println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + ")) in Global Catlog"); + var res2gc = gc_ldb.search("(&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); + if (res2gc.length != 1) { + println("Could not find (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + ")) in Global Catlog"); + assert(res2gc.length == 1); + } - assert(res[0].dn == res2[0].dn); + assert(res[0].dn == res2gc[0].dn); + } println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=compuTER))"); var res3 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=compuTER))"); @@ -266,14 +270,16 @@ objectClass: user assert(res[0].dn == res3[0].dn); - println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=compuTER)) in Global Catalog"); - var res3gc = gc_ldb.search("(&(cn=ldaptestcomputer)(objectCategory=compuTER))"); - if (res3gc.length != 1) { - println("Could not find (&(cn=ldaptestcomputer)(objectCategory=compuTER)) in Global Catalog"); - assert(res3gc.length == 1); - } + if (gc_ldb != undefined) { + println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=compuTER)) in Global Catalog"); + var res3gc = gc_ldb.search("(&(cn=ldaptestcomputer)(objectCategory=compuTER))"); + if (res3gc.length != 1) { + println("Could not find (&(cn=ldaptestcomputer)(objectCategory=compuTER)) in Global Catalog"); + assert(res3gc.length == 1); + } - assert(res[0].dn == res3gc[0].dn); + assert(res[0].dn == res3gc[0].dn); + } println("Testing ldb.search for (&(cn=ldaptestcomp*r)(objectCategory=compuTER))"); var res4 = ldb.search("(&(cn=ldaptestcomp*r)(objectCategory=compuTER))"); @@ -399,20 +405,22 @@ objectClass: user var res = ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs); assert (res.length == 0); - println("Testing that we do find configuration elements in the global catlog"); - var attrs = new Array("cn"); - var res = gc_ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs); - assert (res.length > 0); - - println("Testing that we do find configuration elements and user elements at the same time"); - var attrs = new Array("cn"); - var res = gc_ldb.search("(|(objectClass=crossRef)(objectClass=person))", base_dn, ldb.SCOPE_SUBTREE, attrs); - assert (res.length > 0); - - println("Testing that we do find configuration elements in the global catlog, with the configuration basedn"); - var attrs = new Array("cn"); - var res = gc_ldb.search("objectClass=crossRef", configuration_dn, ldb.SCOPE_SUBTREE, attrs); - assert (res.length > 0); + if (gc_ldb != undefined) { + println("Testing that we do find configuration elements in the global catlog"); + var attrs = new Array("cn"); + var res = gc_ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs); + assert (res.length > 0); + + println("Testing that we do find configuration elements and user elements at the same time"); + var attrs = new Array("cn"); + var res = gc_ldb.search("(|(objectClass=crossRef)(objectClass=person))", base_dn, ldb.SCOPE_SUBTREE, attrs); + assert (res.length > 0); + + println("Testing that we do find configuration elements in the global catlog, with the configuration basedn"); + var attrs = new Array("cn"); + var res = gc_ldb.search("objectClass=crossRef", configuration_dn, ldb.SCOPE_SUBTREE, attrs); + assert (res.length > 0); + } println("Testing that we can get at the configuration DN on the main LDAP port"); var attrs = new Array("cn"); @@ -448,6 +456,9 @@ var configuration_dn = find_configurationdn(ldb); printf("baseDN: %s\n", base_dn); var ok = gc_ldb.connect("ldap://" + host + ":3268"); +if (!ok) { + gc_ldb = undefined; +} basic_tests(ldb, gc_ldb, base_dn, configuration_dn) -- cgit From 72ce2ab2ee51b67eaf85544d207316a45198cc1c Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Wed, 15 Nov 2006 18:33:53 +0000 Subject: r19729: - split basedn related tests to a new function - and add some 'netlogon' attriubte related tests metze (This used to be commit d643c3cc5cd4547dbb7cead768993a9abee4e2eb) --- testprogs/ejs/ldap.js | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 4f810ae5eb..1b7a8f891e 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -393,13 +393,6 @@ objectClass: user assert(res[0].cn == "ldaptestutf8user2 èùéìòà"); } - println("Testing for highestCommittedUSN"); - var attrs = new Array("highestCommittedUSN"); - var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); - assert(res.length == 1); - assert(res[0].highestCommittedUSN != undefined); - assert(res[0].highestCommittedUSN != 0); - println("Testing that we can't get at the configuration DN from the main search base"); var attrs = new Array("cn"); var res = ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs); @@ -429,6 +422,31 @@ objectClass: user } +function basedn_tests(ldb, gc_ldb) +{ + println("Testing for all rootDSE attributes"); + var attrs = new Array(); + var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); + assert(res.length == 1); + + println("Testing for highestCommittedUSN"); + var attrs = new Array("highestCommittedUSN"); + var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); + assert(res.length == 1); + assert(res[0].highestCommittedUSN != undefined); + assert(res[0].highestCommittedUSN != 0); + + println("Testing for netlogon via LDAP"); + var attrs = new Array("netlogon"); + var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); + assert(res.length == 0); + + println("Testing for netlogon and highestCommittedUSN via LDAP"); + var attrs = new Array("netlogon", "highestCommittedUSN"); + var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); + assert(res.length == 0); +} + function find_basedn(ldb) { var attrs = new Array("defaultNamingContext"); @@ -462,4 +480,6 @@ if (!ok) { basic_tests(ldb, gc_ldb, base_dn, configuration_dn) +basedn_tests(ldb, gc_ldb) + return 0; -- cgit From adae413042e15e7228bcc25321913b38ae61358a Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 16 Nov 2006 09:16:17 +0000 Subject: r19731: Modify the ldb_map infrustructure to always map from requested attributes to backend (remote) attributes. We can't do a reverse mapping safely where the remote attribute may be a source for multiple local attributes. (We end up with the wrong attributes returned). In doing this, I've modified the samba3sam.js test to be more realistic, and fixed some failures in the handling of primaryGroupID. I've added a new (private) helper function ldb_msg_remove_element() to avoid a double lookup of the element name. I've also re-formatted many of the function headers, to fit into standard editor widths. Andrew Bartlett (This used to be commit 186766e3095e71ba716c69e681592e217a3bc420) --- testprogs/ejs/samba3sam.js | 74 +++++++++++++++++++++++++++++++++------------- 1 file changed, 53 insertions(+), 21 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam.js b/testprogs/ejs/samba3sam.js index 446b39facf..076d434360 100755 --- a/testprogs/ejs/samba3sam.js +++ b/testprogs/ejs/samba3sam.js @@ -43,7 +43,7 @@ function setup_modules(ldb, s3, s4, ldif) var ldif = " dn: @MAP=samba3sam @FROM: " + s4.BASEDN + " -@TO: " + s3.BASEDN + " +@TO: sambaDomainName=TESTS," + s3.BASEDN + " dn: @MODULES @LIST: rootdse,paged_results,server_sort,extended_dn,asq,samldb,objectclass,password_hash,operational,objectguid,rdn_name,samba3sam,partition @@ -79,7 +79,7 @@ function test_s3sam_search(ldb) var msg = ldb.search("(cn=Replicator)"); assert(msg.length == 1); println(msg[0].dn); - assert(msg[0].dn == "cn=Replicator,ou=Groups,sambaDomainName=TESTS,dc=vernstok,dc=nl"); + assert(msg[0].dn == "cn=Replicator,ou=Groups,dc=vernstok,dc=nl"); assert(msg[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); println("Checking mapping of objectClass"); @@ -94,30 +94,36 @@ function test_s3sam_search(ldb) assert(msg != undefined); assert(msg.length == 2); for (var i = 0; i < msg.length; i++) { - assert((msg[i].dn == "unixName=Administrator,ou=Users,sambaDomainName=TESTS,dc=vernstok,dc=nl") || - (msg[i].dn == "unixName=nobody,ou=Users,sambaDomainName=TESTS,dc=vernstok,dc=nl")); + assert((msg[i].dn == "unixName=Administrator,ou=Users,dc=vernstok,dc=nl") || + (msg[i].dn == "unixName=nobody,ou=Users,dc=vernstok,dc=nl")); } } function test_s3sam_modify(ldb, s3) { + var msg, ok; println("Adding a record that will be fallbacked"); ok = ldb.add(" -dn: cn=Foo,dc=idealx,dc=org +dn: cn=Foo foo: bar blah: Blie cn: Foo showInAdvancedViewOnly: TRUE "); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } assert(ok); println("Checking for existence of record (local)"); /* TODO: This record must be searched in the local database, which is currently only supported for base searches * msg = ldb.search("(cn=Foo)", new Array('foo','blah','cn','showInAdvancedViewOnly')); * TODO: Actually, this version should work as well but doesn't... - * msg = ldb.search("(cn=Foo)", "dc=idealx,dc=org", ldb.LDB_SCOPE_SUBTREE new Array('foo','blah','cn','showInAdvancedViewOnly')); + * */ - msg = ldb.search("", "cn=Foo,dc=idealx,dc=org", ldb.LDB_SCOPE_BASE new Array('foo','blah','cn','showInAdvancedViewOnly')); + var attrs = new Array('foo','blah','cn','showInAdvancedViewOnly'); + msg = ldb.search("(cn=Foo)", "cn=Foo", ldb.LDB_SCOPE_BASE, attrs); assert(msg.length == 1); assert(msg[0].showInAdvancedViewOnly == "TRUE"); assert(msg[0].foo == "bar"); @@ -125,12 +131,16 @@ showInAdvancedViewOnly: TRUE println("Adding record that will be mapped"); ok = ldb.add(" -dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl +dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl objectClass: user unixName: bin unicodePwd: geheim cn: Niemand "); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } assert(ok); println("Checking for existence of record (remote)"); @@ -148,6 +158,7 @@ cn: Niemand println("Checking for existence of record (local || remote)"); msg = ldb.search("(|(unixName=bin)(unicodePwd=geheim))", new Array('unixName','cn','dn', 'unicodePwd')); + println("got " + msg.length + " replies"); assert(msg.length == 1); // TODO: should check with more records assert(msg[0].cn == "Niemand"); assert(msg[0].unixName == "bin" || msg[0].unicodePwd == "geheim"); @@ -160,11 +171,15 @@ cn: Niemand println("Adding attribute..."); ok = ldb.modify(" -dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl +dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl changetype: modify add: description description: Blah "); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } assert(ok); println("Checking whether changes are still there..."); @@ -175,11 +190,15 @@ description: Blah println("Modifying attribute..."); ok = ldb.modify(" -dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl +dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl changetype: modify replace: description description: Blie "); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } assert(ok); println("Checking whether changes are still there..."); @@ -189,10 +208,14 @@ description: Blie println("Deleting attribute..."); ok = ldb.modify(" -dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl +dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl changetype: modify delete: description "); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } assert(ok); println("Checking whether changes are no longer there..."); @@ -201,19 +224,23 @@ delete: description assert(msg[0].description == undefined); println("Renaming record..."); - ok = ldb.rename("cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl", "cn=Niemand,dc=vernstok,dc=nl"); + ok = ldb.rename("cn=Niemand,cn=Users,dc=vernstok,dc=nl", "cn=Niemand2,cn=Users,dc=vernstok,dc=nl"); + assert(ok); println("Checking whether DN has changed..."); - msg = ldb.search("(cn=Niemand)"); + msg = ldb.search("(cn=Niemand2)"); assert(msg.length == 1); - assert(msg[0].dn == "cn=Niemand,dc=vernstok,dc=nl"); + assert(msg[0].dn == "cn=Niemand2,cn=Users,dc=vernstok,dc=nl"); println("Deleting record..."); - ok = ldb.del("cn=Niemand,dc=vernstok,dc=nl"); - assert(ok); + ok = ldb.del("cn=Niemand2,cn=Users,dc=vernstok,dc=nl"); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } println("Checking whether record is gone..."); - msg = ldb.search("(cn=Niemand)"); + msg = ldb.search("(cn=Niemand2)"); assert(msg.length == 0); } @@ -401,13 +428,13 @@ description: y /* In most cases, this even works when the mapping is missing * a `convert_operator' by enumerating the remote db. */ attrs = new Array("objectCategory", "lastLogon", "primaryGroupID"); - res = ldb.search("(primaryGroupID=1-5-21-4231626423-2410014848-2360679739-512)", NULL, ldb. SCOPE_DEFAULT, attrs); + res = ldb.search("(primaryGroupID=512)", NULL, ldb. SCOPE_DEFAULT, attrs); assert(res != undefined); assert(res.length == 1); assert(res[0].dn == s4.dn("cn=A")); assert(res[0].objectCategory == undefined); assert(res[0].lastLogon == "x"); - assert(res[0].primaryGroupID == "1-5-21-4231626423-2410014848-2360679739-512"); + assert(res[0].primaryGroupID == "512"); /* TODO: There should actually be two results, A and X. The * primaryGroupID of X seems to get corrupted somewhere, and the @@ -1107,6 +1134,11 @@ function make_dn(rdn) return rdn + ",sambaDomainName=TESTS," + this.BASEDN; } +function make_s4dn(rdn) +{ + return rdn + "," + this.BASEDN; +} + var ldb = ldb_init(); sys = sys_init(); @@ -1118,12 +1150,12 @@ samba4.file = prefix + "/" + "samba4.ldb"; samba4.url = "tdb://" + samba4.file; samba4.BASEDN = "dc=vernstok,dc=nl"; samba4.db = ldb_init(); -samba4.dn = make_dn; +samba4.dn = make_s4dn; var samba3 = new Object("samba3 partition info"); samba3.file = prefix + "/" + "samba3.ldb"; samba3.url = "tdb://" + samba3.file; -samba3.BASEDN = "cn=Samba3Sam," + samba4.BASEDN; +samba3.BASEDN = "cn=Samba3Sam"; samba3.db = ldb_init(); samba3.dn = make_dn; -- cgit From ee7924732a067bffbcf4d38158b582d7c587878d Mon Sep 17 00:00:00 2001 From: Rafal Szczesniak Date: Thu, 30 Nov 2006 20:28:12 +0000 Subject: r19971: typo fix rafal (This used to be commit 2586958881f9be513e155d1e8fb9a34a8ccba3b6) --- testprogs/ejs/ejsnet.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ejsnet.js b/testprogs/ejs/ejsnet.js index f1d84ffde0..8df81a537e 100755 --- a/testprogs/ejs/ejsnet.js +++ b/testprogs/ejs/ejsnet.js @@ -20,7 +20,7 @@ var creds = options.get_credentials(); var ctx = NetContext(creds); var usr_ctx = ctx.UserMgr(options.ARGV[0]); if (usr_ctx == undefined) { - println("Couln't get user management context."); + println("Couldn't get user management context."); return -1; } -- cgit From a1af18217b9876327647552df1f328924ae726c4 Mon Sep 17 00:00:00 2001 From: Rafal Szczesniak Date: Tue, 12 Dec 2006 23:01:51 +0000 Subject: r20143: a bit of experiments before doing serious changes in ejsnet. rafal (This used to be commit 3cdd43ebcedfa7d1d59bd33b3bfed4e80560ec82) --- testprogs/ejs/ejsnet.js | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ejsnet.js b/testprogs/ejs/ejsnet.js index 8df81a537e..a40406d74e 100755 --- a/testprogs/ejs/ejsnet.js +++ b/testprogs/ejs/ejsnet.js @@ -30,6 +30,12 @@ if (status.is_ok != true) { return -1; } +var info = usr_ctx.Info(options.ARGV[1]); +println("UserInfo.AccountName = " + info.AccountName); +println("UserInfo.Description = " + info.Description); +println("UserInfo.FullName = " + info.FullName); +println("UserInfo.AcctExpiry = " + info.AcctExpiry); + var status = usr_ctx.Delete(options.ARGV[1]); if (status.is_ok != true) { println("Failed to delete user account " + options.ARGV[1] + ": " + status.errstr); -- cgit From 89bb9a47de00d979f68469b705fb2960142cb0cb Mon Sep 17 00:00:00 2001 From: Rafal Szczesniak Date: Thu, 14 Dec 2006 22:14:07 +0000 Subject: r20176: Info method returns null object if the user is not found. rafal (This used to be commit a20b05183d274a3a780ae197dc7014428739cc7a) --- testprogs/ejs/ejsnet.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ejsnet.js b/testprogs/ejs/ejsnet.js index a40406d74e..b39d888c39 100755 --- a/testprogs/ejs/ejsnet.js +++ b/testprogs/ejs/ejsnet.js @@ -30,11 +30,17 @@ if (status.is_ok != true) { return -1; } + var info = usr_ctx.Info(options.ARGV[1]); -println("UserInfo.AccountName = " + info.AccountName); -println("UserInfo.Description = " + info.Description); -println("UserInfo.FullName = " + info.FullName); -println("UserInfo.AcctExpiry = " + info.AcctExpiry); +if (info != null) { + println("UserInfo.AccountName = " + info.AccountName); + println("UserInfo.Description = " + info.Description); + println("UserInfo.FullName = " + info.FullName); + println("UserInfo.AcctExpiry = " + info.AcctExpiry); +} else { + println("Null UserInfo returned - account unknown"); +} + var status = usr_ctx.Delete(options.ARGV[1]); if (status.is_ok != true) { -- cgit From 42fcb90e7239ee8edb9b8fd3aeca7d7089952d0e Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 2 Jan 2007 03:36:02 +0000 Subject: r20457: Print more information before asserting (This used to be commit 0b7a5b7284f7820e5b2f48f40e85830243189b58) --- testprogs/ejs/samba3sam.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam.js b/testprogs/ejs/samba3sam.js index 076d434360..4c6f14b7b1 100755 --- a/testprogs/ejs/samba3sam.js +++ b/testprogs/ejs/samba3sam.js @@ -114,7 +114,6 @@ showInAdvancedViewOnly: TRUE println(ldb.errstring()); assert(ok); } - assert(ok); println("Checking for existence of record (local)"); /* TODO: This record must be searched in the local database, which is currently only supported for base searches @@ -288,7 +287,10 @@ description: y ldif = substitute_var(ldif, s4); assert(ldif != undefined); var ok = ldb.add(ldif); - assert(ok); + if (!ok) { + println(ldb.errstring()); + assert(ok); + } /* Add a set of remote records */ var ldif = " -- cgit From ba57c5030d2e08bc68c1e580a58141a0a0065698 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Wed, 24 Jan 2007 12:23:42 +0000 Subject: r20999: - update the list of attributes for classSchema and atttributeSchema objects - use ${SCHEMADN} instead of CN=Schema,CN=Configuration,${BASEDN} - do not include autogenerated values: instanceType, cn and name in the ldif output - take care of the systemOnly attribute and a resulting NO-USER-MODIFICATION metze (This used to be commit 30a0e8b26e4b49927d733ac05e6032350fe22e9f) --- testprogs/ejs/minschema.js | 102 ++++++++++++++++++++++++++++++++------------- 1 file changed, 74 insertions(+), 28 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/minschema.js b/testprogs/ejs/minschema.js index c51caaca84..299cd11aa0 100755 --- a/testprogs/ejs/minschema.js +++ b/testprogs/ejs/minschema.js @@ -40,22 +40,69 @@ rootDse = new Object(); objectclasses_expanded = new Object(); /* the attributes we need for objectclasses */ -class_attrs = new Array("objectClass", - "auxiliaryClass", "systemAuxiliaryClass", - "possSuperiors", "systemPossSuperiors", - "lDAPDisplayName", "governsID", - "rDNAttID", "mustContain", "systemMustContain", - "mayContain", "systemMayContain", - "objectClassCategory", "subClassOf", - "defaultObjectCategory", "defaultHidingValue", - "systemFlags", "systemOnly", "defaultSecurityDescriptor", - "objectCategory", "possibleInferiors", "displaySpecification", - "schemaIDGUID"); - -attrib_attrs = new Array("objectClass", "lDAPDisplayName", - "isSingleValued", "linkID", "systemFlags", "systemOnly", - "schemaIDGUID", "adminDisplayName", "attributeID", - "attributeSyntax", "oMSyntax", "oMObjectClass"); +class_attrs = new Array("objectClass", + "subClassOf", + "governsID", + "possSuperiors", + "mayContain", + "mustContain", + "auxiliaryClass", + "rDNAttID", + "showInAdvancedViewOnly", + "adminDisplayName", + "adminDescription", + "objectClassCategory", + "lDAPDisplayName", + "schemaIDGUID", + "systemOnly", + "systemPossSuperiors", + "systemMayContain", + "systemMustContain", + "systemAuxiliaryClass", + "defaultSecurityDescriptor", + "systemFlags", + "defaultHidingValue", + "objectCategory", + "defaultObjectCategory", + + /* this attributes are not used by w2k3 */ + "schemaFlagsEx", + "msDs-IntId", + "msDs-Schema-Extensions", + "classDisplayName", + "isDefunct"); + + +attrib_attrs = new Array("objectClass", + "attributeID", + "attributeSyntax", + "isSingleValued", + "rangeLower", + "rangeUpper", + "mAPIID", + "linkID", + "showInAdvancedViewOnly", + "adminDisplayName", + "oMObjectClass", + "adminDescription", + "oMSyntax", + "searchFlags", + "extendedCharsAllowed", + "lDAPDisplayName", + "schemaIDGUID", + "attributeSecurityGUID", + "systemOnly", + "systemFlags", + "isMemberOfPartialAttributeSet", + "objectCategory", + + /* this attributes are not used by w2k3 */ + "schemaFlagsEx", + "msDs-IntId", + "msDs-Schema-Extensions", + "classDisplayName", + "isEphemeral", + "isDefunct"); /* notes: @@ -144,14 +191,14 @@ function map_attribute_syntax(s) { /* - fix a string DN to use ${BASEDN} + fix a string DN to use ${SCHEMADN} */ function fix_dn(dn) { - var s = strstr(dn, rootDse.defaultNamingContext); + var s = strstr(dn, rootDse.schemaNamingContext); if (s == NULL) { return dn; } - return substr(dn, 0, strlen(dn) - strlen(s)) + "${BASEDN}"; + return substr(dn, 0, strlen(dn) - strlen(s)) + "${SCHEMADN}"; } /* @@ -159,9 +206,7 @@ function fix_dn(dn) { */ function write_ldif_one(o, attrs) { var i; - printf("dn: CN=%s,CN=Schema,CN=Configuration,${BASEDN}\n", o.cn); - printf("cn: %s\n", o.cn); - printf("name: %s\n", o.cn); + printf("dn: CN=%s,${SCHEMADN}\n", o.cn); for (i=0;i Date: Wed, 24 Jan 2007 12:46:26 +0000 Subject: r21000: add some options to control what ldif is dumped default is dump everything metze (This used to be commit 4ceb12f5d3c750273bb6ad58cefb1fd1b47643d4) --- testprogs/ejs/minschema.js | 48 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 5 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/minschema.js b/testprogs/ejs/minschema.js index 299cd11aa0..01fcc411c9 100755 --- a/testprogs/ejs/minschema.js +++ b/testprogs/ejs/minschema.js @@ -12,12 +12,41 @@ var options = GetOptions(ARGV, "POPT_AUTOHELP", "POPT_COMMON_SAMBA", "POPT_COMMON_CREDENTIALS", - "verbose"); + "verbose", + "classes", + "attributes", + "subschema", + "subschema-auto"); if (options == undefined) { println("Failed to parse options"); return -1; } verbose = options["verbose"]; +dump_all = "yes"; +dump_classes = options["classes"]; +dump_attributes = options["attributes"]; +dump_subschema = options["subschema"]; +dump_subschema_auto = options["subschema-auto"]; + +if (dump_classes != undefined) { + dump_all = undefined; +} +if (dump_attributes != undefined) { + dump_all = undefined; +} +if (dump_subschema != undefined) { + dump_all = undefined; +} +if (dump_subschema_auto != undefined) { + dump_all = undefined; + dump_subschema = "yes"; +} +if (dump_all != undefined) { + dump_classes = "yes"; + dump_attributes = "yes"; + dump_subschema = "yes"; + dump_subschema_auto = "yes"; +} if (options.ARGV.length != 2) { println("Usage: minschema.js "); @@ -678,6 +707,10 @@ function write_aggregate() { objectClass: subSchema objectCategory: CN=SubSchema,${SCHEMADN} "); + if (dump_subschema_auto == undefined) { + return; + } + for (i in objectclasses) { write_aggregate_objectclass(objectclasses[i]); } @@ -776,10 +809,15 @@ for (i in objectclasses) { /* dump an ldif form of the attributes and objectclasses */ -write_ldif(attributes, attrib_attrs); -write_ldif(objectclasses, class_attrs); - -write_aggregate(); +if (dump_attributes != undefined) { + write_ldif(attributes, attrib_attrs); +} +if (dump_classes != undefined) { + write_ldif(objectclasses, class_attrs); +} +if (dump_subschema != undefined) { + write_aggregate(); +} if (verbose == undefined) { exit(0); -- cgit From 7ca399c0755e186508a4ed9796cbbbe6f50181e9 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Wed, 14 Feb 2007 21:55:29 +0000 Subject: r21351: Change ldb ejs bindings return codes. We were returning just true/false and discarding error number and string. This checking probably breaks swat, will fix it in next round as swat is what made me look into this as I had no way to get back error messages to show to the users. Simo. (This used to be commit 35886b4ae68be475b0fc8b2689ca04d766661261) --- testprogs/ejs/ldap.js | 372 ++++++++-------- testprogs/ejs/ldb.js | 202 ++++----- testprogs/ejs/minschema.js | 54 +-- testprogs/ejs/samba3sam.js | 1035 ++++++++++++++++++++++---------------------- 4 files changed, 851 insertions(+), 812 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 1b7a8f891e..67eb28f6e3 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -37,11 +37,11 @@ objectClass: user objectClass: person cn: LDAPtestUSER "); - if (!ok) { + if (ok.error != 0) { ok = ldb.del("cn=ldaptestuser,cn=users," + base_dn); - if (!ok) { - println(ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } ok = ldb.add(" dn: cn=ldaptestuser,cn=users," + base_dn + " @@ -49,9 +49,9 @@ objectClass: user objectClass: person cn: LDAPtestUSER "); - if (!ok) { - println(ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } } @@ -60,20 +60,20 @@ dn: cn=ldaptestcomputer,cn=computers," + base_dn + " objectClass: computer cn: LDAPtestCOMPUTER "); - if (!ok) { + if (ok.error != 0) { ok = ldb.del("cn=ldaptestcomputer,cn=computers," + base_dn); - if (!ok) { - println(ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } ok = ldb.add(" dn: cn=ldaptestcomputer,cn=computers," + base_dn + " objectClass: computer cn: LDAPtestCOMPUTER "); - if (!ok) { - println(ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } } @@ -83,11 +83,11 @@ objectClass: computer cn: LDAPtest2COMPUTER userAccountControl: 4096 "); - if (!ok) { + if (ok.error != 0) { ok = ldb.del("cn=ldaptest2computer,cn=computers," + base_dn); - if (!ok) { - println(ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } ok = ldb.add(" dn: cn=ldaptest2computer,cn=computers," + base_dn + " @@ -95,9 +95,9 @@ objectClass: computer cn: LDAPtest2COMPUTER userAccountControl: 4096 "); - if (!ok) { - println(ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } } @@ -107,11 +107,11 @@ objectClass: person objectClass: user cn: LDAPtestUSER2 "); - if (!ok) { + if (ok.error != 0) { ok = ldb.del("cn=ldaptestuser2,cn=users," + base_dn); - if (!ok) { - println(ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } ok = ldb.add(" dn: cn=ldaptestuser2,cn=users," + base_dn + " @@ -119,9 +119,9 @@ objectClass: person objectClass: user cn: LDAPtestUSER2 "); - if (!ok) { - println(ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } } @@ -129,19 +129,19 @@ cn: LDAPtestUSER2 dn: cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn + " objectClass: user "); - if (!ok) { + if (ok.error != 0) { ok = ldb.del("cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn); - if (!ok) { - println(ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } ok = ldb.add(" dn: cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn + " objectClass: user "); - if (!ok) { - println(ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } } @@ -149,276 +149,296 @@ objectClass: user dn: cn=ldaptestutf8user2 èùéìòà ,cn=users," + base_dn + " objectClass: user "); - if (!ok) { + if (ok.error != 0) { ok = ldb.del("cn=ldaptestutf8user2 èùéìòà ,cn=users," + base_dn); - if (!ok) { - println(ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } ok = ldb.add(" dn: cn=ldaptestutf8user2 èùéìòà ,cn=users," + base_dn + " objectClass: user "); - if (!ok) { - println(ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } } println("Testing ldb.search for (&(cn=ldaptestuser)(objectClass=user))"); var res = ldb.search("(&(cn=ldaptestuser)(objectClass=user))"); - if (res.length != 1) { + if (res.error != 0 || res.msgs.length != 1) { println("Could not find (&(cn=ldaptestuser)(objectClass=user))"); - assert(res.length == 1); + assert(res.error == 0); + assert(res.msgs.length == 1); } - assert(res[0].dn == "cn=ldaptestuser,cn=users," + base_dn); - assert(res[0].cn == "ldaptestuser"); - assert(res[0].name == "ldaptestuser"); - assert(res[0].objectClass[0] == "top"); - assert(res[0].objectClass[1] == "person"); - assert(res[0].objectClass[2] == "organizationalPerson"); - assert(res[0].objectClass[3] == "user"); - assert(res[0].objectGUID != undefined); - assert(res[0].whenCreated != undefined); - assert(res[0].objectCategory == "cn=Person,cn=Schema,cn=Configuration," + base_dn); - assert(res[0].sAMAccountType == 805306368); + assert(res.msgs[0].dn == "cn=ldaptestuser,cn=users," + base_dn); + assert(res.msgs[0].cn == "ldaptestuser"); + assert(res.msgs[0].name == "ldaptestuser"); + assert(res.msgs[0].objectClass[0] == "top"); + assert(res.msgs[0].objectClass[1] == "person"); + assert(res.msgs[0].objectClass[2] == "organizationalPerson"); + assert(res.msgs[0].objectClass[3] == "user"); + assert(res.msgs[0].objectGUID != undefined); + assert(res.msgs[0].whenCreated != undefined); + assert(res.msgs[0].objectCategory == "cn=Person,cn=Schema,cn=Configuration," + base_dn); + assert(res.msgs[0].sAMAccountType == 805306368); // assert(res[0].userAccountControl == 546); println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))"); var res2 = ldb.search("(&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))"); - if (res2.length != 1) { + if (res2.error != 0 || res2.msgs.length != 1) { println("Could not find (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))"); - assert(res2.length == 1); + assert(res2.error == 0); + assert(res2.msgs.length == 1); } - assert(res[0].dn == res2[0].dn); + assert(res.msgs[0].dn == res2.msgs[0].dn); println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon))"); var res3 = ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))"); - if (res3.length != 1) { + if (res3.error != 0 || res3.msgs.length != 1) { println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon))"); - assert(res3.length == 1); + assert(res3.error == 0); + assert(res3.msgs.length == 1); } - assert(res[0].dn == res3[0].dn); + assert(res.msgs[0].dn == res3.msgs[0].dn); if (gc_ldb != undefined) { println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog"); var res3gc = gc_ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))"); - if (res3gc.length != 1) { + if (res3gc.error != 0 || res3gc.msgs.length != 1) { println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog"); - assert(res3gc.length == 1); + assert(res3gc.error == 0); + assert(res3gc.msgs.length == 1); } - assert(res[0].dn == res3gc[0].dn); + assert(res.msgs[0].dn == res3gc.msgs[0].dn); } - ok = ldb.del(res[0].dn); - if (!ok) { - println(ldb.errstring()); - assert(ok); + ok = ldb.del(res.msgs[0].dn); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectClass=user))"); var res = ldb.search("(&(cn=ldaptestcomputer)(objectClass=user))"); - if (res.length != 1) { + if (res.error != 0 || res.msgs.length != 1) { println("Could not find (&(cn=ldaptestuser)(objectClass=user))"); - assert(res.length == 1); + assert(res.error == 0); + assert(res.msgs.length == 1); } - assert(res[0].dn == "cn=ldaptestcomputer,cn=computers," + base_dn); - assert(res[0].cn == "ldaptestcomputer"); - assert(res[0].name == "ldaptestcomputer"); - assert(res[0].objectClass[0] == "top"); - assert(res[0].objectClass[1] == "person"); - assert(res[0].objectClass[2] == "organizationalPerson"); - assert(res[0].objectClass[3] == "user"); - assert(res[0].objectClass[4] == "computer"); - assert(res[0].objectGUID != undefined); - assert(res[0].whenCreated != undefined); - assert(res[0].objectCategory == "cn=Computer,cn=Schema,cn=Configuration," + base_dn); -// assert(res[0].sAMAccountType == 805306368); -// assert(res[0].userAccountControl == 546); + assert(res.msgs[0].dn == "cn=ldaptestcomputer,cn=computers," + base_dn); + assert(res.msgs[0].cn == "ldaptestcomputer"); + assert(res.msgs[0].name == "ldaptestcomputer"); + assert(res.msgs[0].objectClass[0] == "top"); + assert(res.msgs[0].objectClass[1] == "person"); + assert(res.msgs[0].objectClass[2] == "organizationalPerson"); + assert(res.msgs[0].objectClass[3] == "user"); + assert(res.msgs[0].objectClass[4] == "computer"); + assert(res.msgs[0].objectGUID != undefined); + assert(res.msgs[0].whenCreated != undefined); + assert(res.msgs[0].objectCategory == "cn=Computer,cn=Schema,cn=Configuration," + base_dn); +// assert(res.msgs[0].sAMAccountType == 805306368); +// assert(res.msgs[0].userAccountControl == 546); println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); var res2 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); - if (res2.length != 1) { + if (res2.error != 0 || res2.msgs.length != 1) { println("Could not find (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); - assert(res2.length == 1); + assert(res2.error == 0); + assert(res2.msgs.length == 1); } - assert(res[0].dn == res2[0].dn); + assert(res.msgs[0].dn == res2.msgs[0].dn); if (gc_ldb != undefined) { println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + ")) in Global Catlog"); var res2gc = gc_ldb.search("(&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); - if (res2gc.length != 1) { + if (res2gc.error != 0 || res2gc.msgs.length != 1) { println("Could not find (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + ")) in Global Catlog"); - assert(res2gc.length == 1); + assert(res2gc.error == 0); + assert(res2gc.msgs.length == 1); } - assert(res[0].dn == res2gc[0].dn); + assert(res.msgs[0].dn == res2gc.msgs[0].dn); } println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=compuTER))"); var res3 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=compuTER))"); - if (res3.length != 1) { + if (res3.error != 0 || res3.msgs.length != 1) { println("Could not find (&(cn=ldaptestcomputer)(objectCategory=compuTER))"); - assert(res3.length == 1); + assert(res3.error == 0); + assert(res3.msgs.length == 1); } - assert(res[0].dn == res3[0].dn); + assert(res.msgs[0].dn == res3.msgs[0].dn); if (gc_ldb != undefined) { println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=compuTER)) in Global Catalog"); var res3gc = gc_ldb.search("(&(cn=ldaptestcomputer)(objectCategory=compuTER))"); - if (res3gc.length != 1) { + if (res3gc.error != 0 || res3gc.msgs.length != 1) { println("Could not find (&(cn=ldaptestcomputer)(objectCategory=compuTER)) in Global Catalog"); - assert(res3gc.length == 1); + assert(res3gc.error == 0); + assert(res3gc.msgs.length == 1); } - assert(res[0].dn == res3gc[0].dn); + assert(res.msgs[0].dn == res3gc.msgs[0].dn); } println("Testing ldb.search for (&(cn=ldaptestcomp*r)(objectCategory=compuTER))"); var res4 = ldb.search("(&(cn=ldaptestcomp*r)(objectCategory=compuTER))"); - if (res4.length != 1) { + if (res4.error != 0 || res4.msgs.length != 1) { println("Could not find (&(cn=ldaptestcomp*r)(objectCategory=compuTER))"); - assert(res4.length == 1); + assert(res4.error == 0); + assert(res4.msgs.length == 1); } - assert(res[0].dn == res4[0].dn); + assert(res.msgs[0].dn == res4.msgs[0].dn); println("Testing ldb.search for (&(cn=ldaptestcomput*)(objectCategory=compuTER))"); var res5 = ldb.search("(&(cn=ldaptestcomput*)(objectCategory=compuTER))"); - if (res5.length != 1) { + if (res5.error != 0 || res5.msgs.length != 1) { println("Could not find (&(cn=ldaptestcomput*)(objectCategory=compuTER))"); - assert(res5.length == 1); + assert(res5.error == 0); + assert(res5.msgs.length == 1); } - assert(res[0].dn == res5[0].dn); + assert(res.msgs[0].dn == res5.msgs[0].dn); println("Testing ldb.search for (&(cn=*daptestcomputer)(objectCategory=compuTER))"); var res6 = ldb.search("(&(cn=*daptestcomputer)(objectCategory=compuTER))"); - if (res6.length != 1) { + if (res6.error != 0 || res6.msgs.length != 1) { println("Could not find (&(cn=*daptestcomputer)(objectCategory=compuTER))"); - assert(res6.length == 1); + assert(res6.error == 0); + assert(res6.msgs.length == 1); } - assert(res[0].dn == res6[0].dn); + assert(res.msgs[0].dn == res6.msgs[0].dn); - ok = ldb.del(res[0].dn); - if (!ok) { - println(ldb.errstring()); - assert(ok); + ok = ldb.del(res.msgs[0].dn); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } println("Testing ldb.search for (&(cn=ldaptest2computer)(objectClass=user))"); var res = ldb.search("(&(cn=ldaptest2computer)(objectClass=user))"); - if (res.length != 1) { + if (res.error != 0 || res.msgs.length != 1) { println("Could not find (&(cn=ldaptest2computer)(objectClass=user))"); - assert(res.length == 1); + assert(res.error == 0); + assert(res.msgs.length == 1); } - assert(res[0].dn == "cn=ldaptest2computer,cn=computers," + base_dn); - assert(res[0].cn == "ldaptest2computer"); - assert(res[0].name == "ldaptest2computer"); - assert(res[0].objectClass[0] == "top"); - assert(res[0].objectClass[1] == "person"); - assert(res[0].objectClass[2] == "organizationalPerson"); - assert(res[0].objectClass[3] == "user"); - assert(res[0].objectClass[4] == "computer"); - assert(res[0].objectGUID != undefined); - assert(res[0].whenCreated != undefined); - assert(res[0].objectCategory == "cn=Computer,cn=Schema,cn=Configuration," + base_dn); - assert(res[0].sAMAccountType == 805306369); -// assert(res[0].userAccountControl == 4098); + assert(res.msgs[0].dn == "cn=ldaptest2computer,cn=computers," + base_dn); + assert(res.msgs[0].cn == "ldaptest2computer"); + assert(res.msgs[0].name == "ldaptest2computer"); + assert(res.msgs[0].objectClass[0] == "top"); + assert(res.msgs[0].objectClass[1] == "person"); + assert(res.msgs[0].objectClass[2] == "organizationalPerson"); + assert(res.msgs[0].objectClass[3] == "user"); + assert(res.msgs[0].objectClass[4] == "computer"); + assert(res.msgs[0].objectGUID != undefined); + assert(res.msgs[0].whenCreated != undefined); + assert(res.msgs[0].objectCategory == "cn=Computer,cn=Schema,cn=Configuration," + base_dn); + assert(res.msgs[0].sAMAccountType == 805306369); +// assert(res.msgs[0].userAccountControl == 4098); println("Testing ldb.search for (&(cn=ldaptestUSer2)(objectClass=user))"); var res = ldb.search("(&(cn=ldaptestUSer2)(objectClass=user))"); - if (res.length != 1) { + if (res.error != 0 || res.msgs.length != 1) { println("Could not find (&(cn=ldaptestUSer2)(objectClass=user))"); - assert(res.length == 1); + assert(res.error == 0); + assert(res.msgs.length == 1); } - assert(res[0].dn == "cn=ldaptestuser2,cn=users," + base_dn); - assert(res[0].cn == "ldaptestuser2"); - assert(res[0].name == "ldaptestuser2"); - assert(res[0].objectClass[0] == "top"); - assert(res[0].objectClass[1] == "person"); - assert(res[0].objectClass[2] == "organizationalPerson"); - assert(res[0].objectClass[3] == "user"); - assert(res[0].objectGUID != undefined); - assert(res[0].whenCreated != undefined); - - ok = ldb.del(res[0].dn); - if (!ok) { - println(ldb.errstring()); - assert(ok); + assert(res.msgs[0].dn == "cn=ldaptestuser2,cn=users," + base_dn); + assert(res.msgs[0].cn == "ldaptestuser2"); + assert(res.msgs[0].name == "ldaptestuser2"); + assert(res.msgs[0].objectClass[0] == "top"); + assert(res.msgs[0].objectClass[1] == "person"); + assert(res.msgs[0].objectClass[2] == "organizationalPerson"); + assert(res.msgs[0].objectClass[3] == "user"); + assert(res.msgs[0].objectGUID != undefined); + assert(res.msgs[0].whenCreated != undefined); + + ok = ldb.del(res.msgs[0].dn); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } println("Testing ldb.search for (&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))"); var res = ldb.search("(&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))"); - if (res.length != 1) { + if (res.error != 0 || res.msgs.length != 1) { println("Could not find (&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))"); - assert(res.length == 1); + assert(res.error == 0); + assert(res.msgs.length == 1); } - assert(res[0].dn == "cn=ldaptestutf8user èùéìòà,cn=users," + base_dn); - assert(res[0].cn == "ldaptestutf8user èùéìòà"); - assert(res[0].name == "ldaptestutf8user èùéìòà"); - assert(res[0].objectClass[0] == "top"); - assert(res[0].objectClass[1] == "person"); - assert(res[0].objectClass[2] == "organizationalPerson"); - assert(res[0].objectClass[3] == "user"); - assert(res[0].objectGUID != undefined); - assert(res[0].whenCreated != undefined); - - ok = ldb.del(res[0].dn); - if (!ok) { - println(ldb.errstring()); - assert(ok); + assert(res.msgs[0].dn == "cn=ldaptestutf8user èùéìòà,cn=users," + base_dn); + assert(res.msgs[0].cn == "ldaptestutf8user èùéìòà"); + assert(res.msgs[0].name == "ldaptestutf8user èùéìòà"); + assert(res.msgs[0].objectClass[0] == "top"); + assert(res.msgs[0].objectClass[1] == "person"); + assert(res.msgs[0].objectClass[2] == "organizationalPerson"); + assert(res.msgs[0].objectClass[3] == "user"); + assert(res.msgs[0].objectGUID != undefined); + assert(res.msgs[0].whenCreated != undefined); + + ok = ldb.del(res.msgs[0].dn); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } println("Testing ldb.search for (&(cn=ldaptestutf8user2 ÈÙÉÌÒÀ)(objectClass=user))"); var res = ldb.search("(&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))"); - if (res.length != 1) { + if (res.error != 0 || res.msgs.length != 1) { println("Could not find (expect space collapse, win2k3 fails) (&(cn=ldaptestutf8user2 ÈÙÉÌÒÀ)(objectClass=user))"); } else { - assert(res[0].dn == "cn=ldaptestutf8user2 èùéìòà,cn=users," + base_dn); - assert(res[0].cn == "ldaptestutf8user2 èùéìòà"); + assert(res.msgs[0].dn == "cn=ldaptestutf8user2 èùéìòà,cn=users," + base_dn); + assert(res.msgs[0].cn == "ldaptestutf8user2 èùéìòà"); } println("Testing that we can't get at the configuration DN from the main search base"); var attrs = new Array("cn"); var res = ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs); - assert (res.length == 0); + assert(res.error == 0); + assert(res.msgs.length == 0); if (gc_ldb != undefined) { println("Testing that we do find configuration elements in the global catlog"); var attrs = new Array("cn"); var res = gc_ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs); - assert (res.length > 0); + assert(res.error == 0); + assert (res.msgs.length > 0); println("Testing that we do find configuration elements and user elements at the same time"); var attrs = new Array("cn"); var res = gc_ldb.search("(|(objectClass=crossRef)(objectClass=person))", base_dn, ldb.SCOPE_SUBTREE, attrs); - assert (res.length > 0); + assert(res.error == 0); + assert (res.msgs.length > 0); println("Testing that we do find configuration elements in the global catlog, with the configuration basedn"); var attrs = new Array("cn"); var res = gc_ldb.search("objectClass=crossRef", configuration_dn, ldb.SCOPE_SUBTREE, attrs); - assert (res.length > 0); + assert(res.error == 0); + assert (res.msgs.length > 0); } println("Testing that we can get at the configuration DN on the main LDAP port"); var attrs = new Array("cn"); var res = ldb.search("objectClass=crossRef", configuration_dn, ldb.SCOPE_SUBTREE, attrs); - assert (res.length > 0); + assert(res.error == 0); + assert (res.msgs.length > 0); } @@ -427,40 +447,46 @@ function basedn_tests(ldb, gc_ldb) println("Testing for all rootDSE attributes"); var attrs = new Array(); var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); - assert(res.length == 1); + assert(res.error == 0); + assert(res.msgs.length == 1); println("Testing for highestCommittedUSN"); var attrs = new Array("highestCommittedUSN"); var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); - assert(res.length == 1); - assert(res[0].highestCommittedUSN != undefined); - assert(res[0].highestCommittedUSN != 0); + assert(res.error == 0); + assert(res.msgs.length == 1); + assert(res.msgs[0].highestCommittedUSN != undefined); + assert(res.msgs[0].highestCommittedUSN != 0); println("Testing for netlogon via LDAP"); var attrs = new Array("netlogon"); var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); - assert(res.length == 0); + assert(res.error == 0); + assert(res.msgs.length == 0); println("Testing for netlogon and highestCommittedUSN via LDAP"); var attrs = new Array("netlogon", "highestCommittedUSN"); var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); - assert(res.length == 0); + assert(res.error == 0); + assert(res.msgs.length == 0); } function find_basedn(ldb) { var attrs = new Array("defaultNamingContext"); var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); - assert(res.length == 1); - return res[0].defaultNamingContext; + assert(res.error == 0); + assert(res.msgs.length == 1); + return res.msgs[0].defaultNamingContext; } function find_configurationdn(ldb) { var attrs = new Array("configurationNamingContext"); var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); - assert(res.length == 1); - return res[0].configurationNamingContext; + assert(res.error == 0); + assert(res.msgs.length == 1); + return res.msgs[0].configurationNamingContext; } /* use command line creds if available */ diff --git a/testprogs/ejs/ldb.js b/testprogs/ejs/ldb.js index 06b6ec7f50..774219a1ab 100755 --- a/testprogs/ejs/ldb.js +++ b/testprogs/ejs/ldb.js @@ -32,33 +32,33 @@ dn: cn=x,cn=test objectClass: foo x: 3 "); - assert(ok); + assert(ok.error == 0); println("Testing ldb.search"); var res = ldb.search("(objectClass=*)"); - assert(res[0].objectClass[0] == "foo"); - assert(res[0].dn == "cn=x,cn=test"); - assert(res[0].x == 3); + assert(res.msgs[0].objectClass[0] == "foo"); + assert(res.msgs[0].dn == "cn=x,cn=test"); + assert(res.msgs[0].x == 3); ok = ldb.add(" dn: cn=x2,cn=test objectClass: foo x: 4 "); - assert(ok); + assert(ok.error == 0); var attrs = new Array("x"); res = ldb.search("x=4", NULL, ldb.SCOPE_DEFAULT, attrs); - assert(res[0].x == 4); - assert(res[0].objectClass == undefined); - assert(res[0].dn == "cn=x2,cn=test"); + assert(res.msgs[0].x == 4); + assert(res.msgs[0].objectClass == undefined); + assert(res.msgs[0].dn == "cn=x2,cn=test"); ok = ldb.del("cn=x,cn=test"); - assert(ok); + assert(ok.error == 0); ok = ldb.rename("cn=x2,cn=test", "cn=x3,cn=test"); - assert(ok); + assert(ok.error == 0); res = ldb.search("x=4", NULL, ldb.SCOPE_DEFAULT, attrs); - assert(res[0].dn == "cn=x3,cn=test"); + assert(res.msgs[0].dn == "cn=x3,cn=test"); ok = ldb.modify(" dn: cn=x3,cn=test @@ -68,13 +68,13 @@ x: 7 "); res = ldb.search("x=7"); - assert(res.length == 1); - assert(res[0].x.length == 2); + assert(res.msgs.length == 1); + assert(res.msgs[0].x.length == 2); /* Check a few things before we add modules */ - assert(res[0].objectGUID == undefined); - assert(res[0].createTimestamp == undefined); - assert(res[0].whenCreated == undefined); + assert(res.msgs[0].objectGUID == undefined); + assert(res.msgs[0].createTimestamp == undefined); + assert(res.msgs[0].whenCreated == undefined); } @@ -111,23 +111,23 @@ dn: @ATTRIBUTES cn: CASE_INSENSITIVE caseattr: CASE_INSENSITIVE "); - if (!ok) { - println("Failed to add: " + ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println("Failed to add: " + ok.errstr); + assert(ok.error == 0); } /* Confirm that the attributes were replicated */ var res_attrs = parttestldb.search("cn=*", "@ATTRIBUTES", parttestldb.SCOPE_BASE); - assert(res_attrs[0].cn == "CASE_INSENSITIVE"); + assert(res_attrs.msgs[0].cn == "CASE_INSENSITIVE"); ok = ldb.add(" dn: cn=x8,cn=PartTest objectClass: foo x: 8 "); - if (!ok) { - println("Failed to add: " + ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println("Failed to add: " + ok.errstr); + assert(ok.error == 0); } ok = ldb.add(" @@ -136,9 +136,9 @@ objectClass: foo x: 9 cn: X9 "); - if (!ok) { - println("Failed to add: " + ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println("Failed to add: " + ok.errstr); + assert(ok.error == 0); } ok = ldb.add(" @@ -147,59 +147,59 @@ objectClass: foo x: 9 cn: X9 "); - if (ok) { + if (ok.error == 0) { println("Should have failed to add cn=X9,cn=PartTest"); - assert(!ok); + assert(ok.error != 0); } var res = ldb.search("x=8", "cn=PartTest", ldb.SCOPE_DEFAULT); - assert(res[0].objectGUID != undefined); - assert(res[0].uSNCreated != undefined); - assert(res[0].uSNChanged != undefined); - assert(res[0].createTimestamp == undefined); - assert(res[0].whenCreated != undefined); - assert(res[0].name == "x8"); - assert(res[0].cn == "x8"); + assert(res.msgs[0].objectGUID != undefined); + assert(res.msgs[0].uSNCreated != undefined); + assert(res.msgs[0].uSNChanged != undefined); + assert(res.msgs[0].createTimestamp == undefined); + assert(res.msgs[0].whenCreated != undefined); + assert(res.msgs[0].name == "x8"); + assert(res.msgs[0].cn == "x8"); /* Confirm that this ended up in the correct LDB */ var res_otherldb = parttestldb.search("x=8", "cn=PartTest", parttestldb.SCOPE_DEFAULT); - assert(res_otherldb[0].objectGUID != undefined); - assert(res_otherldb[0].createTimestamp == undefined); - assert(res_otherldb[0].whenCreated != undefined); - assert(res_otherldb[0].name == "x8"); - assert(res_otherldb[0].cn == "x8"); + assert(res_otherldb.msgs[0].objectGUID != undefined); + assert(res_otherldb.msgs[0].createTimestamp == undefined); + assert(res_otherldb.msgs[0].whenCreated != undefined); + assert(res_otherldb.msgs[0].name == "x8"); + assert(res_otherldb.msgs[0].cn == "x8"); var attrs = new Array("*", "createTimestamp"); var res2 = ldb.search("x=9", "cn=PartTest", ldb.SCOPE_DEFAULT, attrs); - assert(res2[0].objectGUID != undefined); - assert(res2[0].createTimestamp != undefined); - assert(res2[0].whenCreated != undefined); - assert(res2[0].name == "x9"); - assert(res2[0].cn == "x9"); + assert(res2.msgs[0].objectGUID != undefined); + assert(res2.msgs[0].createTimestamp != undefined); + assert(res2.msgs[0].whenCreated != undefined); + assert(res2.msgs[0].name == "x9"); + assert(res2.msgs[0].cn == "x9"); - assert(res[0].objectGUID != res2[0].objectGUID); + assert(res.msgs[0].objectGUID != res2.msgs[0].objectGUID); var attrs = new Array("*"); var res3 = ldb.search("", "", ldb.SCOPE_BASE, attrs); - assert(res3[0].cn == undefined); - assert(res3[0].distinguishedName == undefined); - assert(res3[0].name == undefined); - assert(res3[0].currentTime != undefined); - assert(res3[0].highestCommittedUSN != undefined); - - assert(res3[0].namingContexts[0] == "cn=Sub,cn=Sub,cn=PartTest"); - assert(res3[0].namingContexts[1] == "cn=Sub,cn=PartTest"); - assert(res3[0].namingContexts[2] == "cn=PartTest"); - assert(res3[0].namingContexts[3] == "cn=SideTest"); - var usn = res3[0].highestCommittedUSN; + assert(res3.msgs[0].cn == undefined); + assert(res3.msgs[0].distinguishedName == undefined); + assert(res3.msgs[0].name == undefined); + assert(res3.msgs[0].currentTime != undefined); + assert(res3.msgs[0].highestCommittedUSN != undefined); + + assert(res3.msgs[0].namingContexts[0] == "cn=Sub,cn=Sub,cn=PartTest"); + assert(res3.msgs[0].namingContexts[1] == "cn=Sub,cn=PartTest"); + assert(res3.msgs[0].namingContexts[2] == "cn=PartTest"); + assert(res3.msgs[0].namingContexts[3] == "cn=SideTest"); + var usn = res3.msgs[0].highestCommittedUSN; /* Start a transaction. We are going to abort it later, to * show we clean up all partitions */ ok = ldb.transaction_start() if (!ok) { - println("Failed to start a transaction: " + ldb.errstring()); - assert(ok); + println("Failed to start a transaction: " + ok.errstr); + assert(ok.error == 0); } @@ -208,53 +208,53 @@ dn: cn=x10,cn=parttest objectClass: foo x: 10 "); - if (!ok) { - println("Failed to add: " + ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println("Failed to add: " + ok.errstr); + assert(ok.error == 0); } var attrs = new Array("highestCommittedUSN"); var res4 = ldb.search("", "", ldb.SCOPE_BASE, attrs); - var usn2 = res4[0].highestCommittedUSN; - assert(usn < res4[0].highestCommittedUSN); + var usn2 = res4.msgs[0].highestCommittedUSN; + assert(usn < res4.msgs[0].highestCommittedUSN); ok = ldb.add(" dn: cn=x11,cn=sub,cn=parttest objectClass: foo x: 11 "); - if (!ok) { - println("Failed to add: " + ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println("Failed to add: " + ok.errstr); + assert(ok.error == 0); } var attrs = new Array("highestCommittedUSN"); var res5 = ldb.search("", "", ldb.SCOPE_BASE, attrs); - assert(usn2 < res5[0].highestCommittedUSN); + assert(usn2 < res5.msgs[0].highestCommittedUSN); var attrs = new Array("*", "createTimestamp"); var res6 = ldb.search("x=11", "cn=parttest", ldb.SCOPE_SUB, attrs); - assert(res6.length == 0); + assert(res6.msgs.length == 0); var attrs = new Array("*", "createTimestamp"); var res7 = ldb.search("x=10", "cn=sub,cn=parttest", ldb.SCOPE_DEFAULT, attrs); - assert(res7.length == 0); + assert(res7.msgs.length == 0); var res8 = ldb.search("x=11", "cn=sub,cn=parttest", ldb.SCOPE_DEFAULT, attrs); - assert(res8[0].objectGUID == undefined); /* The objectGUID module is not loaded here */ - assert(res8[0].uSNCreated == undefined); /* The objectGUID module is not loaded here */ - assert(res8[0].name == "x11"); - assert(res8[0].cn == "x11"); + assert(res8.msgs[0].objectGUID == undefined); /* The objectGUID module is not loaded here */ + assert(res8.msgs[0].uSNCreated == undefined); /* The objectGUID module is not loaded here */ + assert(res8.msgs[0].name == "x11"); + assert(res8.msgs[0].cn == "x11"); ok = ldb.add(" dn: caseattr=XY,cn=PartTest objectClass: foo x: Y "); - if (!ok) { - println("Failed to add: " + ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println("Failed to add: " + ok.errstr); + assert(ok.error == 0); } ok = ldb.add(" @@ -263,9 +263,9 @@ objectClass: foo x: Z caseattr: XZ "); - if (!ok) { - println("Failed to add: " + ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println("Failed to add: " + ok.errstr); + assert(ok.error == 0); } ok = ldb.add(" @@ -274,9 +274,9 @@ objectClass: foo x: Z caseattr: xz "); - if (ok) { + if (ok.error == 0) { println("Should have failed to add caseattr=xz,cn=PartTest"); - assert(!ok); + assert(ok.error != 0); } ok = ldb.add(" @@ -285,9 +285,9 @@ objectClass: foo x: Z caseattr2: XZ "); - if (!ok) { - println("Failed to add: " + ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println("Failed to add: " + ok.errstr); + assert(ok.error == 0); } ok = ldb.add(" @@ -296,35 +296,35 @@ objectClass: foo x: Z caseattr2: Xz "); - if (!ok) { - println("Failed to add: " + ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println("Failed to add: " + ok.errstr); + assert(ok.error == 0); } var resX = ldb.search("caseattr=xz", "cn=parttest", ldb.SCOPE_DEFAULT, attrs); - assert(resX.length == 1); - assert(resX[0].objectGUID != undefined); - assert(resX[0].createTimestamp != undefined); - assert(resX[0].whenCreated != undefined); - assert(resX[0].name == "XZ"); + assert(resX.msgs.length == 1); + assert(resX.msgs[0].objectGUID != undefined); + assert(resX.msgs[0].createTimestamp != undefined); + assert(resX.msgs[0].whenCreated != undefined); + assert(resX.msgs[0].name == "XZ"); var rescount = ldb.search("(|(caseattr=*)(cn=*))", "cn=parttest", ldb.SCOPE_DEFAULT, attrs); - assert(rescount.length == 5); + assert(rescount.msgs.length == 5); /* Check this attribute is *not* case sensitive */ var resXcount = ldb.search("caseattr=x*", "cn=parttest", ldb.SCOPE_DEFAULT, attrs); - assert(resXcount.length == 2); + assert(resXcount.msgs.length == 2); /* Check that this attribute *is* case sensitive */ var resXcount2 = ldb.search("caseattr2=xz", "cn=parttest", ldb.SCOPE_DEFAULT, attrs); - assert(resXcount2.length == 0); + assert(resXcount2.msgs.length == 0); /* Now abort the transaction to show that even with * partitions, it is aborted everywhere */ ok = ldb.transaction_cancel(); if (!ok) { - println("Failed to cancel a transaction: " + ldb.errstring()); + println("Failed to cancel a transaction: " + ok.errstr); assert(ok); } @@ -332,19 +332,19 @@ caseattr2: Xz var attrs = new Array("highestCommittedUSN"); var res9 = ldb.search("", "", ldb.SCOPE_BASE, attrs); - assert(usn == res9[0].highestCommittedUSN); + assert(usn == res9.msgs[0].highestCommittedUSN); var attrs = new Array("*"); var res10 = ldb.search("x=11", "cn=sub,cn=parttest", ldb.SCOPE_DEFAULT, attrs); - assert(res10.length == 0); + assert(res10.msgs.length == 0); var attrs = new Array("*"); var res11 = ldb.search("x=10", "cn=parttest", ldb.SCOPE_DEFAULT, attrs); - assert(res11.length == 0); + assert(res11.msgs.length == 0); var attrs = new Array("*"); var res12 = ldb.search("caseattr=*", "cn=parttest", ldb.SCOPE_DEFAULT, attrs); - assert(res12.length == 0); + assert(res12.msgs.length == 0); } diff --git a/testprogs/ejs/minschema.js b/testprogs/ejs/minschema.js index 01fcc411c9..ffa6db6669 100755 --- a/testprogs/ejs/minschema.js +++ b/testprogs/ejs/minschema.js @@ -157,9 +157,9 @@ function get_object_cn(ldb, name) { var res = ldb.search(sprintf("(ldapDisplayName=%s)", name), rootDse.schemaNamingContext, ldb.SCOPE_SUBTREE, attrs); assert(res != undefined); - assert(res.length == 1); + assert(res.msgs.length == 1); - var cn = res[0]["cn"]; + var cn = res.msgs[0]["cn"]; assert(cn != undefined); if (typeof(cn) == "string") { return cn; @@ -287,8 +287,8 @@ function find_objectclass_properties(ldb, o) { sprintf("(ldapDisplayName=%s)", o.name), rootDse.schemaNamingContext, ldb.SCOPE_SUBTREE, class_attrs); assert(res != undefined); - assert(res.length == 1); - var msg = res[0]; + assert(res.msgs.length == 1); + var msg = res.msgs[0]; var a; for (a in msg) { o[a] = msg[a]; @@ -303,8 +303,8 @@ function find_attribute_properties(ldb, o) { sprintf("(ldapDisplayName=%s)", o.name), rootDse.schemaNamingContext, ldb.SCOPE_SUBTREE, attrib_attrs); assert(res != undefined); - assert(res.length == 1); - var msg = res[0]; + assert(res.msgs.length == 1); + var msg = res.msgs[0]; var a; for (a in msg) { /* special case for oMObjectClass, which is a binary object */ @@ -332,18 +332,18 @@ function find_objectclass_auto(ldb, o) { var ldif = "dn: " + testdn; ldif = ldif + "\nobjectClass: " + o.name; ok = ldb.add(ldif); - if (!ok) { - dprintf("error adding %s: %s\n", o.name, ldb.errstring()); + if (ok.error != 0) { + dprintf("error adding %s: %s\n", o.name, ok.errstr); dprintf("%s\n", ldif); return; } var res = ldb.search("", testdn, ldb.SCOPE_BASE); ok = ldb.del(testdn); - assert(ok); + assert(ok.error == 0); var a; - for (a in res[0]) { + for (a in res.msgs[0]) { attributes[a].autocreate = true; } } @@ -363,8 +363,8 @@ function expand_objectclass(ldb, o) { var a; dprintf("Expanding class %s\n", o.name); assert(res != undefined); - assert(res.length == 1); - var msg = res[0]; + assert(res.msgs.length == 1); + var msg = res.msgs[0]; for (a=0;a= 1); - assert(msg[0].sambaSID == "S-1-5-21-4231626423-2410014848-2360679739-2001"); - assert(msg[0].displayName == "Niemand"); + assert(msg.error == 0); + assert(msg.msgs.length >= 1); + assert(msg.msgs[0].sambaSID == "S-1-5-21-4231626423-2410014848-2360679739-2001"); + assert(msg.msgs[0].displayName == "Niemand"); println("Adding attribute..."); ok = ldb.modify(" @@ -175,17 +183,18 @@ changetype: modify add: description description: Blah "); - if (!ok) { - println(ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } - assert(ok); + assert(ok.error == 0); println("Checking whether changes are still there..."); msg = ldb.search("(cn=Niemand)"); - assert(msg.length >= 1); - assert(msg[0].cn == "Niemand"); - assert(msg[0].description == "Blah"); + assert(msg.error == 0); + assert(msg.msgs.length >= 1); + assert(msg.msgs[0].cn == "Niemand"); + assert(msg.msgs[0].description == "Blah"); println("Modifying attribute..."); ok = ldb.modify(" @@ -194,16 +203,17 @@ changetype: modify replace: description description: Blie "); - if (!ok) { - println(ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } - assert(ok); + assert(ok.error == 0); println("Checking whether changes are still there..."); msg = ldb.search("(cn=Niemand)"); - assert(msg.length >= 1); - assert(msg[0].description == "Blie"); + assert(msg.error == 0); + assert(msg.msgs.length >= 1); + assert(msg.msgs[0].description == "Blie"); println("Deleting attribute..."); ok = ldb.modify(" @@ -211,36 +221,39 @@ dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl changetype: modify delete: description "); - if (!ok) { - println(ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } - assert(ok); + assert(ok.error == 0); println("Checking whether changes are no longer there..."); msg = ldb.search("(cn=Niemand)"); - assert(msg.length >= 1); - assert(msg[0].description == undefined); + assert(msg.error == 0); + assert(msg.msgs.length >= 1); + assert(msg.msgs[0].description == undefined); println("Renaming record..."); ok = ldb.rename("cn=Niemand,cn=Users,dc=vernstok,dc=nl", "cn=Niemand2,cn=Users,dc=vernstok,dc=nl"); - assert(ok); + assert(ok.error == 0); println("Checking whether DN has changed..."); msg = ldb.search("(cn=Niemand2)"); - assert(msg.length == 1); - assert(msg[0].dn == "cn=Niemand2,cn=Users,dc=vernstok,dc=nl"); + assert(msg.error == 0); + assert(msg.msgs.length == 1); + assert(msg.msgs[0].dn == "cn=Niemand2,cn=Users,dc=vernstok,dc=nl"); println("Deleting record..."); ok = ldb.del("cn=Niemand2,cn=Users,dc=vernstok,dc=nl"); - if (!ok) { - println(ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } println("Checking whether record is gone..."); msg = ldb.search("(cn=Niemand2)"); - assert(msg.length == 0); + assert(msg.error == 0); + assert(msg.msgs.length == 0); } function test_map_search(ldb, s3, s4) @@ -287,9 +300,9 @@ description: y ldif = substitute_var(ldif, s4); assert(ldif != undefined); var ok = ldb.add(ldif); - if (!ok) { - println(ldb.errstring()); - assert(ok); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); } /* Add a set of remote records */ @@ -323,7 +336,7 @@ description: y ldif = substitute_var(ldif, s3); assert(ldif != undefined); var ok = s3.db.add(ldif); - assert(ok); + assert(ok.error == 0); println("Testing search by DN"); @@ -331,81 +344,81 @@ description: y dn = s4.dn("cn=A"); attrs = new Array("objectCategory", "lastLogon"); res = ldb.search("", dn, ldb.SCOPE_BASE, attrs); - assert(res != undefined); - assert(res.length == 1); - assert(res[0].dn == dn); - assert(res[0].objectCategory == undefined); - assert(res[0].lastLogon == "x"); + assert(res.error == 0); + assert(res.msgs.length == 1); + assert(res.msgs[0].dn == dn); + assert(res.msgs[0].objectCategory == undefined); + assert(res.msgs[0].lastLogon == "x"); /* Search remote record by remote DN */ dn = s3.dn("cn=A"); attrs = new Array("objectCategory", "lastLogon", "sambaLogonTime"); res = s3.db.search("", dn, ldb.SCOPE_BASE, attrs); - assert(res != undefined); - assert(res.length == 1); - assert(res[0].dn == dn); - assert(res[0].objectCategory == undefined); - assert(res[0].lastLogon == undefined); - assert(res[0].sambaLogonTime == "x"); + assert(res.error == 0); + assert(res.msgs.length == 1); + assert(res.msgs[0].dn == dn); + assert(res.msgs[0].objectCategory == undefined); + assert(res.msgs[0].lastLogon == undefined); + assert(res.msgs[0].sambaLogonTime == "x"); /* Search split record by local DN */ dn = s4.dn("cn=X"); attrs = new Array("objectCategory", "lastLogon"); res = ldb.search("", dn, ldb.SCOPE_BASE, attrs); - assert(res != undefined); - assert(res.length == 1); - assert(res[0].dn == dn); - assert(res[0].objectCategory == "x"); - assert(res[0].lastLogon == "x"); + assert(res.error == 0); + assert(res.msgs.length == 1); + assert(res.msgs[0].dn == dn); + assert(res.msgs[0].objectCategory == "x"); + assert(res.msgs[0].lastLogon == "x"); /* Search split record by remote DN */ dn = s3.dn("cn=X"); attrs = new Array("objectCategory", "lastLogon", "sambaLogonTime"); res = s3.db.search("", dn, ldb.SCOPE_BASE, attrs); - assert(res != undefined); - assert(res.length == 1); - assert(res[0].dn == dn); - assert(res[0].objectCategory == undefined); - assert(res[0].lastLogon == undefined); - assert(res[0].sambaLogonTime == "x"); + assert(res.error == 0); + assert(res.msgs.length == 1); + assert(res.msgs[0].dn == dn); + assert(res.msgs[0].objectCategory == undefined); + assert(res.msgs[0].lastLogon == undefined); + assert(res.msgs[0].sambaLogonTime == "x"); println("Testing search by attribute"); /* Search by ignored attribute */ attrs = new Array("objectCategory", "lastLogon"); res = ldb.search("(revision=x)", NULL, ldb. SCOPE_DEFAULT, attrs); - assert(res != undefined); - assert(res.length == 2); - assert(res[0].dn == s4.dn("cn=Y")); - assert(res[0].objectCategory == "y"); - assert(res[0].lastLogon == "y"); - assert(res[1].dn == s4.dn("cn=X")); - assert(res[1].objectCategory == "x"); - assert(res[1].lastLogon == "x"); + assert(res.error == 0); + assert(res.msgs.length == 2); + assert(res.msgs[0].dn == s4.dn("cn=Y")); + assert(res.msgs[0].objectCategory == "y"); + assert(res.msgs[0].lastLogon == "y"); + assert(res.msgs[1].dn == s4.dn("cn=X")); + assert(res.msgs[1].objectCategory == "x"); + assert(res.msgs[1].lastLogon == "x"); /* Search by kept attribute */ attrs = new Array("objectCategory", "lastLogon"); res = ldb.search("(description=y)", NULL, ldb. SCOPE_DEFAULT, attrs); - assert(res != undefined); - assert(res.length == 2); - assert(res[0].dn == s4.dn("cn=Z")); - assert(res[0].objectCategory == "z"); - assert(res[0].lastLogon == "z"); - assert(res[1].dn == s4.dn("cn=C")); - assert(res[1].objectCategory == undefined); - assert(res[1].lastLogon == "z"); + assert(res.error == 0); + assert(res.msgs.length == 2); + assert(res.msgs[0].dn == s4.dn("cn=Z")); + assert(res.msgs[0].objectCategory == "z"); + assert(res.msgs[0].lastLogon == "z"); + assert(res.msgs[1].dn == s4.dn("cn=C")); + assert(res.msgs[1].objectCategory == undefined); + assert(res.msgs[1].lastLogon == "z"); /* Search by renamed attribute */ attrs = new Array("objectCategory", "lastLogon"); res = ldb.search("(badPwdCount=x)", NULL, ldb. SCOPE_DEFAULT, attrs); - assert(res != undefined); - assert(res.length == 2); - assert(res[0].dn == s4.dn("cn=B")); - assert(res[0].objectCategory == undefined); - assert(res[0].lastLogon == "y"); - assert(res[1].dn == s4.dn("cn=A")); - assert(res[1].objectCategory == undefined); - assert(res[1].lastLogon == "x"); + assert(res.error == 0); + assert(res.msgs.length == 2); + assert(res.msgs[0].dn == s4.dn("cn=B")); + assert(res.msgs[0].objectCategory == undefined); + assert(res.msgs[0].lastLogon == "y"); + assert(res.msgs[1].dn == s4.dn("cn=A")); + assert(res.msgs[1].objectCategory == undefined); + assert(res.msgs[1].lastLogon == "x"); /* Search by converted attribute */ attrs = new Array("objectCategory", "lastLogon", "objectSid"); @@ -415,28 +428,28 @@ description: y res = ldb.search("(objectSid=S-1-5-21-4231626423-2410014848-2360679739-552)", NULL, ldb. SCOPE_DEFAULT, attrs); */ res = ldb.search("(objectSid=*)", NULL, ldb. SCOPE_DEFAULT, attrs); - assert(res != undefined); - assert(res.length == 2); - assert(res[0].dn == s4.dn("cn=X")); - assert(res[0].objectCategory == "x"); - assert(res[0].lastLogon == "x"); - assert(res[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); - assert(res[1].dn == s4.dn("cn=A")); - assert(res[1].objectCategory == undefined); - assert(res[1].lastLogon == "x"); - assert(res[1].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); + assert(res.error == 0); + assert(res.msgs.length == 2); + assert(res.msgs[0].dn == s4.dn("cn=X")); + assert(res.msgs[0].objectCategory == "x"); + assert(res.msgs[0].lastLogon == "x"); + assert(res.msgs[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); + assert(res.msgs[1].dn == s4.dn("cn=A")); + assert(res.msgs[1].objectCategory == undefined); + assert(res.msgs[1].lastLogon == "x"); + assert(res.msgs[1].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); /* Search by generated attribute */ /* In most cases, this even works when the mapping is missing * a `convert_operator' by enumerating the remote db. */ attrs = new Array("objectCategory", "lastLogon", "primaryGroupID"); res = ldb.search("(primaryGroupID=512)", NULL, ldb. SCOPE_DEFAULT, attrs); - assert(res != undefined); - assert(res.length == 1); - assert(res[0].dn == s4.dn("cn=A")); - assert(res[0].objectCategory == undefined); - assert(res[0].lastLogon == "x"); - assert(res[0].primaryGroupID == "512"); + assert(res.error == 0); + assert(res.msgs.length == 1); + assert(res.msgs[0].dn == s4.dn("cn=A")); + assert(res.msgs[0].objectCategory == undefined); + assert(res.msgs[0].lastLogon == "x"); + assert(res.msgs[0].primaryGroupID == "512"); /* TODO: There should actually be two results, A and X. The * primaryGroupID of X seems to get corrupted somewhere, and the @@ -445,10 +458,10 @@ description: y * objectSid seems to be fine in the previous search for objectSid... */ /* res = ldb.search("(primaryGroupID=*)", NULL, ldb. SCOPE_DEFAULT, attrs); - println(res.length + " results found"); - for (i=0;i Date: Thu, 15 Feb 2007 12:51:44 +0000 Subject: r21361: let samba3sam.js pass when we'll use unicodePwd for storing the nt hash jelmer: what should this test really test? metze (This used to be commit c8d903b606afb5dd11b8f1048a36943db02370e0) --- testprogs/ejs/samba3sam.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam.js b/testprogs/ejs/samba3sam.js index d69a1c1053..e0fab647b5 100755 --- a/testprogs/ejs/samba3sam.js +++ b/testprogs/ejs/samba3sam.js @@ -137,7 +137,7 @@ showInAdvancedViewOnly: TRUE dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl objectClass: user unixName: bin -unicodePwd: geheim +sambaUnicodePwd: geheim cn: Niemand "); if (ok.error != 0) { @@ -147,27 +147,27 @@ cn: Niemand assert(ok.error == 0); println("Checking for existence of record (remote)"); - msg = ldb.search("(unixName=bin)", new Array('unixName','cn','dn', 'unicodePwd')); + msg = ldb.search("(unixName=bin)", new Array('unixName','cn','dn', 'sambaUnicodePwd')); assert(msg.error == 0); assert(msg.msgs.length == 1); assert(msg.msgs[0].cn == "Niemand"); - assert(msg.msgs[0].unicodePwd == "geheim"); + assert(msg.msgs[0].sambaUnicodePwd == "geheim"); println("Checking for existence of record (local && remote)"); - msg = ldb.search("(&(unixName=bin)(unicodePwd=geheim))", new Array('unixName','cn','dn', 'unicodePwd')); + msg = ldb.search("(&(unixName=bin)(sambaUnicodePwd=geheim))", new Array('unixName','cn','dn', 'sambaUnicodePwd')); assert(msg.error == 0); assert(msg.msgs.length == 1); // TODO: should check with more records assert(msg.msgs[0].cn == "Niemand"); assert(msg.msgs[0].unixName == "bin"); - assert(msg.msgs[0].unicodePwd == "geheim"); + assert(msg.msgs[0].sambaUnicodePwd == "geheim"); println("Checking for existence of record (local || remote)"); - msg = ldb.search("(|(unixName=bin)(unicodePwd=geheim))", new Array('unixName','cn','dn', 'unicodePwd')); + msg = ldb.search("(|(unixName=bin)(sambaUnicodePwd=geheim))", new Array('unixName','cn','dn', 'sambaUnicodePwd')); println("got " + msg.msgs.length + " replies"); assert(msg.error == 0); assert(msg.msgs.length == 1); // TODO: should check with more records assert(msg.msgs[0].cn == "Niemand"); - assert(msg.msgs[0].unixName == "bin" || msg.msgs[0].unicodePwd == "geheim"); + assert(msg.msgs[0].unixName == "bin" || msg.msgs[0].sambaUnicodePwd == "geheim"); println("Checking for data in destination database"); msg = s3.db.search("(cn=Niemand)"); -- cgit From 7dc7156bd76425df129102a42dd29a85fd8c7ebc Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 22 Feb 2007 01:54:40 +0000 Subject: r21496: A number of ldb control and LDAP changes, surrounding the 'phantom_root' flag in the search_options control - Add in support for LDB controls to the js layer - Test the behaviour - Implement support for the 'phantom_root' flag in the partitions module - Make the LDAP server set the 'phantom_root' flag in the search_options control - This replaces the global_catalog flag passed down as an opaque pointer - Rework the string-format control parsing function into ldb_parse_control_strings(), returning errors by ldb_errorstring() method, rather than with printf to stderr - Rework some of the ldb_control handling logic Andrew Bartlett (This used to be commit 2b3df7f38d7790358dbb4de1b8609bf794a351fb) --- testprogs/ejs/ldap.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 67eb28f6e3..9fab283b70 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -218,6 +218,18 @@ objectClass: user assert(res.msgs[0].dn == res3gc.msgs[0].dn); } + println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon)) in with 'phantom root' control"); + var attrs = new Array("cn"); + var controls = new Array("search_options:1:2"); + var res3control = gc_ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))", base_dn, ldb.SCOPE_SUBTREE, attrs, controls); + if (res3control.error != 0 || res3control.msgs.length != 1) { + println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog"); + assert(res3control.error == 0); + assert(res3control.msgs.length == 1); + } + + assert(res.msgs[0].dn == res3control.msgs[0].dn); + ok = ldb.del(res.msgs[0].dn); if (ok.error != 0) { println(ok.errstr); @@ -414,7 +426,21 @@ objectClass: user assert(res.error == 0); assert(res.msgs.length == 0); + println("Testing that we can get at the configuration DN from the main search base on the LDAP port with the 'phantom root' search_options control"); + var attrs = new Array("cn"); + var controls = new Array("search_options:1:2"); + var res = ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs, controls); + assert(res.error == 0); + assert(res.msgs.length > 0); + if (gc_ldb != undefined) { + println("Testing that we can get at the configuration DN from the main search base on the GC port with the search_options control == 0"); + var attrs = new Array("cn"); + var controls = new Array("search_options:1:0"); + var res = gc_ldb.search("objectClass=crossRef", base_dn, gc_ldb.SCOPE_SUBTREE, attrs, controls); + assert(res.error == 0); + assert(res.msgs.length > 0); + println("Testing that we do find configuration elements in the global catlog"); var attrs = new Array("cn"); var res = gc_ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs); -- cgit From 4362ce99ec3451ce5061a7de04851750c3bd7e23 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 7 Mar 2007 04:25:52 +0000 Subject: r21737: Print the error strings in the ejs ldb test. (This used to be commit fed42cf5a359e8dcbabd82dba5b18058260ddc07) --- testprogs/ejs/ldap.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 9fab283b70..41442ce1ed 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -198,9 +198,11 @@ objectClass: user println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon))"); var res3 = ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))"); - if (res3.error != 0 || res3.msgs.length != 1) { - println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon))"); + if (res3.error != 0) { + println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)): " + res3.errstr); assert(res3.error == 0); + } else if (res3.msgs.length != 1) { + println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)): matched " + res3.msgs.length); assert(res3.msgs.length == 1); } @@ -209,9 +211,11 @@ objectClass: user if (gc_ldb != undefined) { println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog"); var res3gc = gc_ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))"); - if (res3gc.error != 0 || res3gc.msgs.length != 1) { - println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog"); + if (res3gc.error != 0) { + println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog: " + res3gc.errstr); assert(res3gc.error == 0); + } else if (res3gc.msgs.length != 1) { + println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog: matched " + res3gc.msgs.length); assert(res3gc.msgs.length == 1); } -- cgit From 3d4c4c5fa3596646e98fa50f8f735ffc1cbe8240 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 23 Apr 2007 07:33:15 +0000 Subject: r22478: Update the LDAP backend code to handle initialisation of multiple partitions onto the target LDAP server. Make the LDAP provision run before smbd starts, then stop the LDAP server. This ensures this occurs synchronously, We then restart it for the 'real run' (with slapd's stdin being the FIFO). This required fixing a few things in the provision scripts, with more containers being created via a add/modify pair. Andrew Bartlett (This used to be commit 860dfa4ea1ab2b62d4d4fe0644e0a9b882fdafa1) --- testprogs/ejs/minschema_classes.txt | 3 +++ 1 file changed, 3 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/minschema_classes.txt b/testprogs/ejs/minschema_classes.txt index e5161d4dc9..fae07de2a4 100644 --- a/testprogs/ejs/minschema_classes.txt +++ b/testprogs/ejs/minschema_classes.txt @@ -30,3 +30,6 @@ user displaySpecifier foreignSecurityPrincipal trustedDomain +attributeSchema +subSchema +queryPolicy -- cgit From 78db3d4307761452ef58dea4584fe29799f76522 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 26 Apr 2007 09:32:26 +0000 Subject: r22523: Give a hint why this test fails (helped debugging backend issues). Andrew Bartlett (This used to be commit f86d3b47850a9f3f773226807bbafd1830182c59) --- testprogs/ejs/ldap.js | 3 +++ 1 file changed, 3 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 41442ce1ed..ecd50c3097 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -428,6 +428,9 @@ objectClass: user var attrs = new Array("cn"); var res = ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs); assert(res.error == 0); + if (res.msgs.length != 0) { + println("Got configuration DN " + res.msgs[0].dn + " which should not be able to be seen from main search base"); + } assert(res.msgs.length == 0); println("Testing that we can get at the configuration DN from the main search base on the LDAP port with the 'phantom root' search_options control"); -- cgit From 246f94725a77a3ad1b01bdc3e2da673d134b7ab2 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 21 May 2007 04:01:26 +0000 Subject: r23026: Add groupPolicyContainer, as we now require this schema element. Andrew Bartlett (This used to be commit 1c4d376d547df46cb036f088918562bd2493e087) --- testprogs/ejs/minschema_classes.txt | 1 + 1 file changed, 1 insertion(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/minschema_classes.txt b/testprogs/ejs/minschema_classes.txt index fae07de2a4..0479438fa5 100644 --- a/testprogs/ejs/minschema_classes.txt +++ b/testprogs/ejs/minschema_classes.txt @@ -33,3 +33,4 @@ trustedDomain attributeSchema subSchema queryPolicy +groupPolicyContainer -- cgit From 262dc06b99a4840f2487ee5e3ea913c1e5de588b Mon Sep 17 00:00:00 2001 From: Rafal Szczesniak Date: Tue, 29 May 2007 05:49:35 +0000 Subject: r23178: add simple js code I use for testing and which starts to look like ejsnet command line utility (perhaps to be moved to utils later...) rafal (This used to be commit 43f9d9ba71f51007e80b340600a55fb07d89fd4c) --- testprogs/ejs/ejsnet.js | 54 ++++++++++++-------------- testprogs/ejs/ejsnet/nethost.js | 45 +++++++++++++++++++++ testprogs/ejs/ejsnet/netusr.js | 86 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 155 insertions(+), 30 deletions(-) create mode 100644 testprogs/ejs/ejsnet/nethost.js create mode 100644 testprogs/ejs/ejsnet/netusr.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ejsnet.js b/testprogs/ejs/ejsnet.js index b39d888c39..a5570de34c 100755 --- a/testprogs/ejs/ejsnet.js +++ b/testprogs/ejs/ejsnet.js @@ -1,52 +1,46 @@ #!/usr/bin/env smbscript +libinclude("base.js"); + +/* note: these require specifying a proper path in "js include" parameter */ +libinclude("ejsnet/netusr.js"); +libinclude("ejsnet/nethost.js"); + +function PrintNetHelp() +{ + println("Usage: ejsnet.js [options]"); +} + +/* here we start */ + var options = GetOptions(ARGV, "POPT_AUTOHELP", "POPT_COMMON_SAMBA", "POPT_COMMON_CREDENTIALS"); if (options == undefined) { - println("Failed to parse options"); - return -1; + PrintNetHelp(); + return -1; } -if (options.ARGV.length != 2) { - println("Usage: ejsnet.js "); - return -1; +if (options.ARGV.length < 1) { + PrintNetHelp(); + return -1; } /* use command line creds if available */ var creds = options.get_credentials(); - var ctx = NetContext(creds); -var usr_ctx = ctx.UserMgr(options.ARGV[0]); -if (usr_ctx == undefined) { - println("Couldn't get user management context."); - return -1; -} -var status = usr_ctx.Create(options.ARGV[1]); -if (status.is_ok != true) { - println("Failed to create user account " + options.ARGV[1] + ": " + status.errstr); - return -1; -} +var cmd = options.ARGV[0]; +if (cmd == "user") { + UserManager(ctx, options); +} else if (cmd == "host") { + HostManager(ctx, options); -var info = usr_ctx.Info(options.ARGV[1]); -if (info != null) { - println("UserInfo.AccountName = " + info.AccountName); - println("UserInfo.Description = " + info.Description); - println("UserInfo.FullName = " + info.FullName); - println("UserInfo.AcctExpiry = " + info.AcctExpiry); } else { - println("Null UserInfo returned - account unknown"); -} - - -var status = usr_ctx.Delete(options.ARGV[1]); -if (status.is_ok != true) { - println("Failed to delete user account " + options.ARGV[1] + ": " + status.errstr); + PrintNetHelp(); return -1; } -print ("OK\n"); return 0; diff --git a/testprogs/ejs/ejsnet/nethost.js b/testprogs/ejs/ejsnet/nethost.js new file mode 100644 index 0000000000..9e11ae89c5 --- /dev/null +++ b/testprogs/ejs/ejsnet/nethost.js @@ -0,0 +1,45 @@ +function PrintNetHostHelp() +{ + println("Host management - available commands:"); + println("\t domainlist - list users in specified domain"); +} + + +function ListDomains(hostCtx) +{ + var domain; + + var list = hostCtx.DomainList(); + if (list == undefined) { + println("Error when listing domains"); + return -1; + } + + for (var i = 0; i < list.Count; i++) { + domain = list.Domains[i]; + printf("%s\n", domain.Name); + } + + printf("\nResult: %s\n", list.Status.errstr); +} + + +function HostManager(ctx, options) +{ + var hostCtx; + + if (options.ARGV.length < 2) { + PrintNetHostHelp(); + return -1; + } + + var hostCmd = options.ARGV[1]; + + if (hostCmd == "domainlist") { + hostCtx = ctx.HostMgr(); + ListDomains(hostCtx); + + } else { + println("unknown command"); + } +} diff --git a/testprogs/ejs/ejsnet/netusr.js b/testprogs/ejs/ejsnet/netusr.js new file mode 100644 index 0000000000..da6e851ce7 --- /dev/null +++ b/testprogs/ejs/ejsnet/netusr.js @@ -0,0 +1,86 @@ +function PrintNetUsrHelp(options) +{ + println("User management - available commands:"); + println("\t list - list users in specified domain"); + println("\t info - display user account information"); +} + + +function ListUsers(usrCtx) +{ + var list, user; + var finished = false; + + for (list = usrCtx.List(list); list.Status.is_ok && !finished; list = usrCtx.List(list)) { + for (i = 0; i < list.Count; i++) { + user = list.Users[i]; + printf("%s\n", user.Username); + } + + finished = list.EndOfList; + } + + printf("\nResult: %s\n", list.Status.errstr); +} + + +function UserInfo(usrCtx, username) +{ + var info; + + info = usrCtx.Info(username); + if (info == null) { + println("Account unknown"); + return -1; + } + + println("User account info:\n"); + printf("AccountName = %s\n", info.AccountName); + printf("Description = %s\n", info.Description); + printf("FullName = %s\n", info.FullName); + printf("AcctExpiry = %s\n", info.AcctExpiry); +} + + +function UserManager(ctx, options) +{ + var usrCtx; + + if (options.ARGV.length < 2) { + PrintNetUsrHelp(options); + return -1; + + } + + var usrCmd = options.ARGV[1]; + + if (usrCmd == "create") { + + } else if (usrCmd == "info") { + var userName; + + if (options.ARGV.length > 2) { + userName = options.ARGV[2]; + } else { + println("No username provided"); + return -1; + } + usrCtx = ctx.UserMgr(); + + UserInfo(usrCtx, userName); + + } else if (usrCmd == "list") { + + if (options.ARGV.length > 2) { + usrCtx = ctx.UserMgr(options.ARGV[2]); + } else { + usrCtx = ctx.UserMgr(); + } + + ListUsers(usrCtx); + + } else { + println("Unknown command specified."); + PrintNetUsrHelp(options); + } +} -- cgit From b0c5367f4f769a249ae4ef25426ea5e16ee68f0f Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 21 Jun 2007 05:14:13 +0000 Subject: r23558: MMC seems to ask for this, so I think we need to include it in our schema. Andrew Bartlett (This used to be commit ef1899054e2532c8975d03810b52a0636d2d5f8c) --- testprogs/ejs/minschema.js | 1 + 1 file changed, 1 insertion(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/minschema.js b/testprogs/ejs/minschema.js index ffa6db6669..b02286517a 100755 --- a/testprogs/ejs/minschema.js +++ b/testprogs/ejs/minschema.js @@ -73,6 +73,7 @@ class_attrs = new Array("objectClass", "subClassOf", "governsID", "possSuperiors", + "possibleInferiors", "mayContain", "mustContain", "auxiliaryClass", -- cgit From e9d19477e43b65f91bd152f5249b684dbefa5cc6 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 21 Jun 2007 10:18:20 +0000 Subject: r23560: - Activate metze's schema modules (from metze's schema-loading-13 patch). - samba3sam.js: rework the samba3sam test to not use objectCategory, as it's has special rules (dnsName a simple match) - ldap.js: Test the ordering of the objectClass attributes for the baseDN - schema_init.c: Load the mayContain and mustContain (and system...) attributes when reading the schema from ldb - To make the schema load not suck in terms of performance, write the schema into a static global variable - ldif_handlers.c: Match objectCategory for equality and canonicolisation based on the loaded schema, not simple tring manipuation - ldb_msg.c: don't duplicate attributes when adding attributes to a list - kludge_acl.c: return allowedAttributesEffective based on schema results and privilages Andrew Bartlett (This used to be commit dcff83ebe463bc7391841f55856d7915c204d000) --- testprogs/ejs/ldap.js | 41 +++++++++- testprogs/ejs/samba3sam.js | 198 ++++++++++++++++++++++----------------------- 2 files changed, 138 insertions(+), 101 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index ecd50c3097..7ea66a7998 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -25,7 +25,7 @@ if (options.ARGV.length != 1) { var host = options.ARGV[0]; -function basic_tests(ldb, gc_ldb, base_dn, configuration_dn) +function basic_tests(ldb, gc_ldb, base_dn, configuration_dn, schema_dn) { println("Running basic tests"); @@ -473,6 +473,33 @@ objectClass: user assert(res.error == 0); assert (res.msgs.length > 0); + println("Testing objectCategory canonacolisation"); + var attrs = new Array("cn"); + var res = ldb.search("objectCategory=ntDsDSA", configuration_dn, ldb.SCOPE_SUBTREE, attrs); + assert(res.error == 0); + if (res.msgs.length == 0) { + println("Didn't find any records with objectCategory=ntDsDSA"); + } + assert(res.msgs.length != 0); + + var attrs = new Array("cn"); + var res = ldb.search("objectCategory=CN=ntDs-DSA," + schema_dn, configuration_dn, ldb.SCOPE_SUBTREE, attrs); + assert(res.error == 0); + if (res.msgs.length == 0) { + println("Didn't find any records with objectCategory=CN=ntDs-DSA," + schema_dn); + } + assert(res.msgs.length != 0); + + println("Testing objectClass attribute order on "+ base_dn); + var attrs = new Array("objectclass"); + var res = ldb.search("objectClass=domain", base_dn, ldb.SCOPE_BASE, attrs); + assert(res.error == 0); + assert(res.msgs.length == 1); + + assert(res.msgs[0].objectClass[0] == "top"); + assert(res.msgs[0].objectClass[1] == "domain"); + assert(res.msgs[0].objectClass[2] == "domainDNS"); + } function basedn_tests(ldb, gc_ldb) @@ -522,6 +549,15 @@ function find_configurationdn(ldb) return res.msgs[0].configurationNamingContext; } +function find_schemadn(ldb) +{ + var attrs = new Array("schemaNamingContext"); + var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); + assert(res.error == 0); + assert(res.msgs.length == 1); + return res.msgs[0].schemaNamingContext; +} + /* use command line creds if available */ ldb.credentials = options.get_credentials(); gc_ldb.credentials = options.get_credentials(); @@ -529,6 +565,7 @@ gc_ldb.credentials = options.get_credentials(); var ok = ldb.connect("ldap://" + host); var base_dn = find_basedn(ldb); var configuration_dn = find_configurationdn(ldb); +var schema_dn = find_schemadn(ldb); printf("baseDN: %s\n", base_dn); @@ -537,7 +574,7 @@ if (!ok) { gc_ldb = undefined; } -basic_tests(ldb, gc_ldb, base_dn, configuration_dn) +basic_tests(ldb, gc_ldb, base_dn, configuration_dn, schema_dn) basedn_tests(ldb, gc_ldb) diff --git a/testprogs/ejs/samba3sam.js b/testprogs/ejs/samba3sam.js index e0fab647b5..5fa527a694 100755 --- a/testprogs/ejs/samba3sam.js +++ b/testprogs/ejs/samba3sam.js @@ -270,7 +270,7 @@ objectClass: user cn: X codePage: x revision: x -objectCategory: x +dnsHostName: x nextRid: y lastLogon: x description: x @@ -282,7 +282,7 @@ objectClass: top cn: Y codePage: x revision: x -objectCategory: y +dnsHostName: y nextRid: y lastLogon: y description: x @@ -292,7 +292,7 @@ objectClass: top cn: Z codePage: x revision: y -objectCategory: z +dnsHostName: z nextRid: y lastLogon: z description: y @@ -342,86 +342,86 @@ description: y /* Search remote record by local DN */ dn = s4.dn("cn=A"); - attrs = new Array("objectCategory", "lastLogon"); + attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("", dn, ldb.SCOPE_BASE, attrs); assert(res.error == 0); assert(res.msgs.length == 1); assert(res.msgs[0].dn == dn); - assert(res.msgs[0].objectCategory == undefined); + assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == "x"); /* Search remote record by remote DN */ dn = s3.dn("cn=A"); - attrs = new Array("objectCategory", "lastLogon", "sambaLogonTime"); + attrs = new Array("dnsHostName", "lastLogon", "sambaLogonTime"); res = s3.db.search("", dn, ldb.SCOPE_BASE, attrs); assert(res.error == 0); assert(res.msgs.length == 1); assert(res.msgs[0].dn == dn); - assert(res.msgs[0].objectCategory == undefined); + assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == undefined); assert(res.msgs[0].sambaLogonTime == "x"); /* Search split record by local DN */ dn = s4.dn("cn=X"); - attrs = new Array("objectCategory", "lastLogon"); + attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("", dn, ldb.SCOPE_BASE, attrs); assert(res.error == 0); assert(res.msgs.length == 1); assert(res.msgs[0].dn == dn); - assert(res.msgs[0].objectCategory == "x"); + assert(res.msgs[0].dnsHostName == "x"); assert(res.msgs[0].lastLogon == "x"); /* Search split record by remote DN */ dn = s3.dn("cn=X"); - attrs = new Array("objectCategory", "lastLogon", "sambaLogonTime"); + attrs = new Array("dnsHostName", "lastLogon", "sambaLogonTime"); res = s3.db.search("", dn, ldb.SCOPE_BASE, attrs); assert(res.error == 0); assert(res.msgs.length == 1); assert(res.msgs[0].dn == dn); - assert(res.msgs[0].objectCategory == undefined); + assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == undefined); assert(res.msgs[0].sambaLogonTime == "x"); println("Testing search by attribute"); /* Search by ignored attribute */ - attrs = new Array("objectCategory", "lastLogon"); + attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(revision=x)", NULL, ldb. SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 2); assert(res.msgs[0].dn == s4.dn("cn=Y")); - assert(res.msgs[0].objectCategory == "y"); + assert(res.msgs[0].dnsHostName == "y"); assert(res.msgs[0].lastLogon == "y"); assert(res.msgs[1].dn == s4.dn("cn=X")); - assert(res.msgs[1].objectCategory == "x"); + assert(res.msgs[1].dnsHostName == "x"); assert(res.msgs[1].lastLogon == "x"); /* Search by kept attribute */ - attrs = new Array("objectCategory", "lastLogon"); + attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(description=y)", NULL, ldb. SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 2); assert(res.msgs[0].dn == s4.dn("cn=Z")); - assert(res.msgs[0].objectCategory == "z"); + assert(res.msgs[0].dnsHostName == "z"); assert(res.msgs[0].lastLogon == "z"); assert(res.msgs[1].dn == s4.dn("cn=C")); - assert(res.msgs[1].objectCategory == undefined); + assert(res.msgs[1].dnsHostName == undefined); assert(res.msgs[1].lastLogon == "z"); /* Search by renamed attribute */ - attrs = new Array("objectCategory", "lastLogon"); + attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(badPwdCount=x)", NULL, ldb. SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 2); assert(res.msgs[0].dn == s4.dn("cn=B")); - assert(res.msgs[0].objectCategory == undefined); + assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == "y"); assert(res.msgs[1].dn == s4.dn("cn=A")); - assert(res.msgs[1].objectCategory == undefined); + assert(res.msgs[1].dnsHostName == undefined); assert(res.msgs[1].lastLogon == "x"); /* Search by converted attribute */ - attrs = new Array("objectCategory", "lastLogon", "objectSid"); + attrs = new Array("dnsHostName", "lastLogon", "objectSid"); /* TODO: Using the SID directly in the parse tree leads to conversion errors, letting the search fail with no results. @@ -431,23 +431,23 @@ description: y assert(res.error == 0); assert(res.msgs.length == 2); assert(res.msgs[0].dn == s4.dn("cn=X")); - assert(res.msgs[0].objectCategory == "x"); + assert(res.msgs[0].dnsHostName == "x"); assert(res.msgs[0].lastLogon == "x"); assert(res.msgs[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); assert(res.msgs[1].dn == s4.dn("cn=A")); - assert(res.msgs[1].objectCategory == undefined); + assert(res.msgs[1].dnsHostName == undefined); assert(res.msgs[1].lastLogon == "x"); assert(res.msgs[1].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); /* Search by generated attribute */ /* In most cases, this even works when the mapping is missing * a `convert_operator' by enumerating the remote db. */ - attrs = new Array("objectCategory", "lastLogon", "primaryGroupID"); + attrs = new Array("dnsHostName", "lastLogon", "primaryGroupID"); res = ldb.search("(primaryGroupID=512)", NULL, ldb. SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 1); assert(res.msgs[0].dn == s4.dn("cn=A")); - assert(res.msgs[0].objectCategory == undefined); + assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == "x"); assert(res.msgs[0].primaryGroupID == "512"); @@ -468,23 +468,23 @@ description: y */ /* Search by remote name of renamed attribute */ - attrs = new Array("objectCategory", "lastLogon"); + attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(sambaBadPasswordCount=*)", "", ldb. SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 0); /* Search by objectClass */ - attrs = new Array("objectCategory", "lastLogon", "objectClass"); + attrs = new Array("dnsHostName", "lastLogon", "objectClass"); res = ldb.search("(objectClass=user)", NULL, ldb. SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 2); assert(res.msgs[0].dn == s4.dn("cn=X")); - assert(res.msgs[0].objectCategory == "x"); + assert(res.msgs[0].dnsHostName == "x"); assert(res.msgs[0].lastLogon == "x"); assert(res.msgs[0].objectClass != undefined); assert(res.msgs[0].objectClass[3] == "user"); assert(res.msgs[1].dn == s4.dn("cn=A")); - assert(res.msgs[1].objectCategory == undefined); + assert(res.msgs[1].dnsHostName == undefined); assert(res.msgs[1].lastLogon == "x"); assert(res.msgs[1].objectClass != undefined); assert(res.msgs[1].objectClass[0] == "user"); @@ -494,19 +494,19 @@ description: y assert(res.error == 0); assert(res.msgs.length == 3); assert(res.msgs[0].dn == s4.dn("cn=B")); - assert(res.msgs[0].objectCategory == undefined); + assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == "y"); assert(res.msgs[0].objectClass != undefined); for (i=0;i Date: Thu, 5 Jul 2007 03:30:46 +0000 Subject: r23719: ejs being case sensitive, while LDAP is not is a real pain when dereferencing attributes. Fix the case to match between the attributes searched for and the ejs element. (Fixes LDAP-backend selftest) Andrew Bartlett (This used to be commit 51cf66bb96e5a58693a40d920d78632ac442ca1c) --- testprogs/ejs/ldap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 7ea66a7998..6cb7f2ce7f 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -491,7 +491,7 @@ objectClass: user assert(res.msgs.length != 0); println("Testing objectClass attribute order on "+ base_dn); - var attrs = new Array("objectclass"); + var attrs = new Array("objectClass"); var res = ldb.search("objectClass=domain", base_dn, ldb.SCOPE_BASE, attrs); assert(res.error == 0); assert(res.msgs.length == 1); -- cgit From b0db52b63aaf2278d72c5e0bafbbdb6582b85112 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 7 Jul 2007 04:34:36 +0000 Subject: r23737: Validate that we object to duplicate values in an add or replace. We can't ever allow duplicates, even if the client sends them Andrew Bartlett (This used to be commit 10277f27246b9e16ed36fb72eb4c318b43cb9395) --- testprogs/ejs/ldap.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 6cb7f2ce7f..72d8c9acf8 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -101,6 +101,21 @@ userAccountControl: 4096 } } + ok = ldb.modify(" +dn: cn=ldaptest2computer,cn=computers," + base_dn + " +changetype: modify +replace: servicePrincipalName +servicePrincipalName: host/ldaptest2computer +servicePrincipalName: host/ldaptest2computer +servicePrincipalName: cifs/ldaptest2computer +"); + +//LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS + if (ok.error != 20) { + println("Expected error LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS, got :" + ok.errstr); + assert(ok.error == 20); + } + ok = ldb.add(" dn: cn=ldaptestuser2,cn=users," + base_dn + " objectClass: person -- cgit From 2d2cde7d95e0871ea66ce8186a54c3b28834051b Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 9 Jul 2007 12:31:35 +0000 Subject: r23762: Fix DN renames over LDAP, and instrument the partition module. Add a test to prove the behaviour of LDAP renames etc. Fix LDB to return correct error code when failing to rename one DN onto another. Andrew Bartlett (This used to be commit 3f3da9c4710b7752ed97f55c2fc3d32a63d352af) --- testprogs/ejs/ldap.js | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 72d8c9acf8..a91285c3af 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -140,6 +140,60 @@ cn: LDAPtestUSER2 } } + ok = ldb.del("cn=ldaptestuser3,cn=users," + base_dn); + + ok = ldb.rename("cn=ldaptestuser2,cn=users," + base_dn, "cn=ldaptestuser3,cn=users," + base_dn); + if (ok.error != 0) { + println("Could not rename cn=ldaptestuser2,cn=users," + base_dn + " into cn=ldaptestuser3,cn=users," + base_dn + ": " + ok.errstr); + assert(ok.error == 0); + } + + // ensure we cannot add it again + ok = ldb.add(" +dn: cn=ldaptestuser3,cn=users," + base_dn + " +objectClass: person +objectClass: user +cn: LDAPtestUSER3 +"); +//LDB_ERR_ENTRY_ALREADY_EXISTS + if (ok.error != 68) { + println("expected error LDB_ERR_ENTRY_ALREADY_EXISTS, got: " + ok.errstr); + assert(ok.error == 68); + } + + // rename back + ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser2,cn=users," + base_dn); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + + // ensure we cannnot rename it twice + ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser2,cn=users," + base_dn); +//LDB_ERR_NO_SUCH_OBJECT + assert(ok.error == 32); + + // ensure can now use that name + ok = ldb.add(" +dn: cn=ldaptestuser3,cn=users," + base_dn + " +objectClass: person +objectClass: user +cn: LDAPtestUSER3 +"); + + // ensure we now cannnot rename + ok = ldb.rename("cn=ldaptestuser2,cn=users," + base_dn, "cn=ldaptestuser3,cn=users," + base_dn); +//LDB_ERR_ENTRY_ALREADY_EXISTS + if (ok.error != 68) { + println("expected error LDB_ERR_ENTRY_ALREADY_EXISTS, got: " + ok.errstr); + assert(ok.error == 68); + } + assert(ok.error == 68); + ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser3,cn=configuration," + base_dn); + assert(ok.error == 71); + + ok = ldb.del("cn=ldaptestuser3,cn=users," + base_dn); + ok = ldb.add(" dn: cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn + " objectClass: user -- cgit From 63c20026c4c27beffbcdb962da7bd844c2ed9c97 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 30 Jul 2007 10:05:47 +0000 Subject: r24076: Make ldap.js pass against Win2k3 again (looks like we don't match AD on this error code, but allow both for now). Also prove that bug #4829 needs a different solution: we can't fix this by changing the template. I think this fix needs to be in the SAMR server. Andrew Bartlett (This used to be commit c3554e3ee79cdb15f05e7968ccde62c086748c80) --- testprogs/ejs/ldap.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index a91285c3af..bb7e482ec8 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -190,7 +190,11 @@ cn: LDAPtestUSER3 } assert(ok.error == 68); ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser3,cn=configuration," + base_dn); - assert(ok.error == 71); + if (ok.error != 71 && ok.error != 64) { + println("expected error LDB_ERR_ENTRY_ALREADY_EXISTS or LDAP_NAMING_VIOLATION, got: " + ok.errstr); + assert(ok.error == 71 || ok.error == 64); + } + assert(ok.error == 71 || ok.error == 64); ok = ldb.del("cn=ldaptestuser3,cn=users," + base_dn); @@ -328,6 +332,7 @@ objectClass: user assert(res.msgs[0].objectGUID != undefined); assert(res.msgs[0].whenCreated != undefined); assert(res.msgs[0].objectCategory == "cn=Computer,cn=Schema,cn=Configuration," + base_dn); + assert(res.msgs[0].primaryGroupID == 513); // assert(res.msgs[0].sAMAccountType == 805306368); // assert(res.msgs[0].userAccountControl == 546); -- cgit From ae7819d715e80cfbd17c4bec1c93685198febe6a Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 7 Aug 2007 05:58:47 +0000 Subject: r24262: Set the objectCategory by default in the objectclass module, rather than using templates. Modify the samba3sam test to be less fussy, and not use the objectclass module (which requires proper schema stuff now). Andrew Bartlett (This used to be commit 53c248c2645e86fbc8720860aed92a479483b528) --- testprogs/ejs/samba3sam.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam.js b/testprogs/ejs/samba3sam.js index 5fa527a694..44a1f140b1 100755 --- a/testprogs/ejs/samba3sam.js +++ b/testprogs/ejs/samba3sam.js @@ -46,7 +46,7 @@ dn: @MAP=samba3sam @TO: sambaDomainName=TESTS," + s3.BASEDN + " dn: @MODULES -@LIST: rootdse,paged_results,server_sort,extended_dn,asq,samldb,objectclass,password_hash,operational,objectguid,rdn_name,samba3sam,partition +@LIST: rootdse,paged_results,server_sort,extended_dn,asq,samldb,password_hash,operational,objectguid,rdn_name,samba3sam,partition dn: @PARTITION partition: " + s4.BASEDN + ":" + s4.url + " @@ -482,7 +482,7 @@ description: y assert(res.msgs[0].dnsHostName == "x"); assert(res.msgs[0].lastLogon == "x"); assert(res.msgs[0].objectClass != undefined); - assert(res.msgs[0].objectClass[3] == "user"); + assert(res.msgs[0].objectClass[0] == "user"); assert(res.msgs[1].dn == s4.dn("cn=A")); assert(res.msgs[1].dnsHostName == undefined); assert(res.msgs[1].lastLogon == "x"); @@ -504,7 +504,7 @@ description: y assert(res.msgs[1].dnsHostName == "x"); assert(res.msgs[1].lastLogon == "x"); assert(res.msgs[1].objectClass != undefined); - assert(res.msgs[1].objectClass[3] == "user"); + assert(res.msgs[1].objectClass[0] == "user"); assert(res.msgs[2].dn == s4.dn("cn=A")); assert(res.msgs[2].dnsHostName == undefined); assert(res.msgs[2].lastLogon == "x"); -- cgit From c4e5fcc349ae8648e50c5fa893fd3fd47336fed2 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 7 Aug 2007 09:01:08 +0000 Subject: r24263: Fix bug 4846 (unable to copy users in MMC Active Directory Users and Computers). We now generate a security descriptor for each object, when it is created. This seems to keep MMC happy. The next step is to honour it. Andrew Bartlett (This used to be commit 72f4ae82463c5c1f9f6b7f18f125c4c8fb56ae4f) --- testprogs/ejs/ldap.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index bb7e482ec8..5735b8b391 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -258,7 +258,7 @@ objectClass: user assert(res.msgs[0].objectCategory == "cn=Person,cn=Schema,cn=Configuration," + base_dn); assert(res.msgs[0].sAMAccountType == 805306368); // assert(res[0].userAccountControl == 546); - + println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))"); var res2 = ldb.search("(&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))"); if (res2.error != 0 || res2.msgs.length != 1) { @@ -439,8 +439,9 @@ objectClass: user // assert(res.msgs[0].userAccountControl == 4098); + var attrs = new Array("cn", "name", "objectClass", "objectGUID", "whenCreated", "ntSecurityDescriptor"); println("Testing ldb.search for (&(cn=ldaptestUSer2)(objectClass=user))"); - var res = ldb.search("(&(cn=ldaptestUSer2)(objectClass=user))"); + var res = ldb.search("(&(cn=ldaptestUSer2)(objectClass=user))", base_dn, ldb.SCOPE_SUBTREE, attrs); if (res.error != 0 || res.msgs.length != 1) { println("Could not find (&(cn=ldaptestUSer2)(objectClass=user))"); assert(res.error == 0); @@ -456,6 +457,7 @@ objectClass: user assert(res.msgs[0].objectClass[3] == "user"); assert(res.msgs[0].objectGUID != undefined); assert(res.msgs[0].whenCreated != undefined); + assert(res.msgs[0].ntSecurityDescriptor != undefined); ok = ldb.del(res.msgs[0].dn); if (ok.error != 0) { -- cgit From 0eb3ee32049eb5b76308e8ef4dc6af3db544afbb Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 15 Aug 2007 13:14:38 +0000 Subject: r24459: Fix up ldap.js and test_ldb.sh to test the domain_scope control, and to test the behaviour of objectCategory=user searches. It turns out (thanks to a hint on http://blog.joeware.net/2005/12/08/147/) that objectCategory=user maps into objectCategory=CN=Person,... (by the defaultObjectCategory of that objectclass). Simplify the entryUUID module by using the fact that we now set the DN as the canoncical form of objectCategory. Andrew Bartlett (This used to be commit b474be9507df51982a604289215bb1868124fc24) --- testprogs/ejs/ldap.js | 46 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 5735b8b391..6515c7abfe 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -439,7 +439,7 @@ objectClass: user // assert(res.msgs[0].userAccountControl == 4098); - var attrs = new Array("cn", "name", "objectClass", "objectGUID", "whenCreated", "ntSecurityDescriptor"); + var attrs = new Array("cn", "name", "objectClass", "objectGUID", "whenCreated", "nTSecurityDescriptor"); println("Testing ldb.search for (&(cn=ldaptestUSer2)(objectClass=user))"); var res = ldb.search("(&(cn=ldaptestUSer2)(objectClass=user))", base_dn, ldb.SCOPE_SUBTREE, attrs); if (res.error != 0 || res.msgs.length != 1) { @@ -457,7 +457,8 @@ objectClass: user assert(res.msgs[0].objectClass[3] == "user"); assert(res.msgs[0].objectGUID != undefined); assert(res.msgs[0].whenCreated != undefined); - assert(res.msgs[0].ntSecurityDescriptor != undefined); + assert(res.msgs[0].nTSecurityDescriptor != undefined); + ok = ldb.del(res.msgs[0].dn); if (ok.error != 0) { @@ -575,6 +576,47 @@ objectClass: user assert(res.msgs[0].objectClass[0] == "top"); assert(res.msgs[0].objectClass[1] == "domain"); assert(res.msgs[0].objectClass[2] == "domainDNS"); + +// check enumeration + + var attrs = new Array("cn"); + println("Testing ldb.search for objectCategory=person"); + var res = ldb.search("objectCategory=person", base_dn, ldb.SCOPE_SUBTREE, attrs); + assert(res.error == 0); + assert(res.msgs.length > 0); + + var attrs = new Array("cn"); + var controls = new Array("domain_scope:1"); + println("Testing ldb.search for objectCategory=person with domain scope control"); + var res = ldb.search("objectCategory=person", base_dn, ldb.SCOPE_SUBTREE, attrs, controls); + assert(res.error == 0); + assert(res.msgs.length > 0); + + var attrs = new Array("cn"); + println("Testing ldb.search for objectCategory=user"); + var res = ldb.search("objectCategory=user", base_dn, ldb.SCOPE_SUBTREE, attrs); + assert(res.error == 0); + assert(res.msgs.length > 0); + + var attrs = new Array("cn"); + var controls = new Array("domain_scope:1"); + println("Testing ldb.search for objectCategory=user with domain scope control"); + var res = ldb.search("objectCategory=user", base_dn, ldb.SCOPE_SUBTREE, attrs, controls); + assert(res.error == 0); + assert(res.msgs.length > 0); + + var attrs = new Array("cn"); + println("Testing ldb.search for objectCategory=group"); + var res = ldb.search("objectCategory=group", base_dn, ldb.SCOPE_SUBTREE, attrs); + assert(res.error == 0); + assert(res.msgs.length > 0); + + var attrs = new Array("cn"); + var controls = new Array("domain_scope:1"); + println("Testing ldb.search for objectCategory=group with domain scope control"); + var res = ldb.search("objectCategory=group", base_dn, ldb.SCOPE_SUBTREE, attrs, controls); + assert(res.error == 0); + assert(res.msgs.length > 0); } -- cgit From 4e1d0cc8e3b7bfb51845fbe836812f7558c30c10 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 29 Aug 2007 01:40:58 +0000 Subject: r24761: Permit subtree renames in Samba4. The module is scary: On a rename, it does a search for all entries under that entry (including itself), and fires off a seperate rename call for each result. This will fail miserably on an LDAP backend, but I'll need to work on using hdb for OpenLDAP, and hope Fedora DS can implement subtree renames at some point. Andrew Bartlett (This used to be commit 13908a8cb4dd810503213203efb8d51f77f1f379) --- testprogs/ejs/ldap.js | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 6515c7abfe..83df3b1cec 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -196,8 +196,73 @@ cn: LDAPtestUSER3 } assert(ok.error == 71 || ok.error == 64); - ok = ldb.del("cn=ldaptestuser3,cn=users," + base_dn); + ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser5,cn=users," + base_dn); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + + ok = ldb.del("cn=ldaptestuser5,cn=users," + base_dn); + ok = ldb.add(" +dn: cn=ldaptestcontainer," + base_dn + " +objectClass: container +"); + + ok = ldb.add(" +dn: cn=ldaptestuser4,cn=ldaptestcontainer," + base_dn + " +objectClass: person +objectClass: user +cn: LDAPtestUSER4 +"); + if (ok.error != 0) { + ok = ldb.del("cn=ldaptestuser4,cn=ldaptestcontainer," + base_dn); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + ok = ldb.add(" +dn: cn=ldaptestuser4,cn=ldaptestcontainer," + base_dn + " +objectClass: person +objectClass: user +cn: LDAPtestUSER4 +"); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + } + + println("Testing ldb.rename of cn=ldaptestcontainer," + base_dn + "to cn=ldaptestcontainer2," + base_dn); + ok = ldb.rename("cn=ldaptestcontainer," + base_dn, "cn=ldaptestcontainer2," + base_dn); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + + println("Testing ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in renamed container"); + var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (&(cn=ldaptestuser4)(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + + assert(res.msgs[0].dn == "cn=ldaptestuser4,cn=ldaptestcontainer2," + base_dn); + + println("Testing delete of subtree renamed "+res.msgs[0].dn); + ok = ldb.del(res.msgs[0].dn); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + println("Testing delete of renamed cn=ldaptestcontainer2," + base_dn); + ok = ldb.del("cn=ldaptestcontainer2," + base_dn); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + ok = ldb.add(" dn: cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn + " objectClass: user -- cgit From 6a9a1bd913a7cdc865c88a290020e6bddb777f98 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 18 Sep 2007 06:36:07 +0000 Subject: r25204: Patch by Andrew Kroeger fixing bug #4958 - rename of ldb entries for a case change (only). I've modified the testsuite to verify this. Andrew Bartlett (This used to be commit 9cccd00dac44dd9152ec03cecf5ffac24f918445) --- testprogs/ejs/ldb.js | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldb.js b/testprogs/ejs/ldb.js index 774219a1ab..75c02d7091 100755 --- a/testprogs/ejs/ldb.js +++ b/testprogs/ejs/ldb.js @@ -60,6 +60,11 @@ x: 4 res = ldb.search("x=4", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.msgs[0].dn == "cn=x3,cn=test"); + ok = ldb.rename("cn=x3,cn=test", "cn=X3,cn=test"); + assert(ok.error == 0); + res = ldb.search("x=4", NULL, ldb.SCOPE_DEFAULT, attrs); + assert(res.msgs[0].dn == "cn=X3,cn=test"); + ok = ldb.modify(" dn: cn=x3,cn=test changetype: modify -- cgit From c64116e158080c7cd7304cdd3b80c8666f78c7c6 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 18 Sep 2007 22:43:06 +0000 Subject: r25218: After discussion with Simo, remove the subclass support from LDB. Subclass support was designed to avoid needing to spell out the full list of objectClasses that an entry was in. However, Samba4 now enforces this restriction in the objectClass module, and the way subclass matching was handled was complex and counter-intuitive in my opinion (and did not match LDAP). Andrew Bartlett (This used to be commit f5ce04b904e14445a2a7e7f92e7e1f64b645c6f2) --- testprogs/ejs/ldb.js | 1 - 1 file changed, 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldb.js b/testprogs/ejs/ldb.js index 75c02d7091..36b175f2c1 100755 --- a/testprogs/ejs/ldb.js +++ b/testprogs/ejs/ldb.js @@ -97,7 +97,6 @@ partition: cn=SideTest:" + prefix + "/" + "testside.ldb partition: cn=Sub,cn=PartTest:" + prefix + "/" + "testsub.ldb partition: cn=PartTest:" + prefix + "/" + "testpartition.ldb partition: cn=Sub,cn=Sub,cn=PartTest:" + prefix + "/" + "testsubsub.ldb -replicateEntries: @SUBCLASSES replicateEntries: @ATTRIBUTES replicateEntries: @INDEXLIST modules: cn=PartTest:objectguid -- cgit From 5cfa7732023e38b262b681efdb07c6d9f7d14cd7 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 24 Oct 2007 04:32:24 +0200 Subject: r25710: Finally fix subtree renames. Untested code is broken code and in this case an oddity of the javascript caused the test to 'pass'. For the same oddity, we have a failure in ldb's handling of spaces in DNs. We need to resolve that too. Andrew Bartlett (This used to be commit e8cbac1a46f4d3b083e6bb5a509ef1ba47bebff1) --- testprogs/ejs/ldap.js | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 83df3b1cec..4e6f5cb750 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -240,7 +240,7 @@ cn: LDAPtestUSER4 assert(ok.error == 0); } - println("Testing ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in renamed container"); + println("Testing ldb.search for (&(cn=ldaptestuser4)(objectClass=user))"); var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))"); if (res.error != 0 || res.msgs.length != 1) { println("Could not find (&(cn=ldaptestuser4)(objectClass=user))"); @@ -248,7 +248,17 @@ cn: LDAPtestUSER4 assert(res.msgs.length == 1); } - assert(res.msgs[0].dn == "cn=ldaptestuser4,cn=ldaptestcontainer2," + base_dn); + assert(res.msgs[0].dn == ("cn=ldaptestuser4,cn=ldaptestcontainer2," + base_dn)); + + println("Testing ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in renamed container"); + var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer2," + base_dn, ldb.SCOPE_SUBTREE); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (&(cn=ldaptestuser4)(objectClass=user)) under cn=ldaptestcontainer2," + base_dn); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + + assert(res.msgs[0].dn == ("cn=ldaptestuser4,cn=ldaptestcontainer2," + base_dn)); println("Testing delete of subtree renamed "+res.msgs[0].dn); ok = ldb.del(res.msgs[0].dn); @@ -311,7 +321,7 @@ objectClass: user assert(res.msgs.length == 1); } - assert(res.msgs[0].dn == "cn=ldaptestuser,cn=users," + base_dn); + assert(res.msgs[0].dn == ("cn=ldaptestuser,cn=users," + base_dn)); assert(res.msgs[0].cn == "ldaptestuser"); assert(res.msgs[0].name == "ldaptestuser"); assert(res.msgs[0].objectClass[0] == "top"); @@ -320,7 +330,7 @@ objectClass: user assert(res.msgs[0].objectClass[3] == "user"); assert(res.msgs[0].objectGUID != undefined); assert(res.msgs[0].whenCreated != undefined); - assert(res.msgs[0].objectCategory == "cn=Person,cn=Schema,cn=Configuration," + base_dn); + assert(res.msgs[0].objectCategory == ("CN=Person,CN=Schema,CN=Configuration," + base_dn)); assert(res.msgs[0].sAMAccountType == 805306368); // assert(res[0].userAccountControl == 546); @@ -386,7 +396,7 @@ objectClass: user assert(res.msgs.length == 1); } - assert(res.msgs[0].dn == "cn=ldaptestcomputer,cn=computers," + base_dn); + assert(res.msgs[0].dn == ("cn=ldaptestcomputer,cn=computers," + base_dn)); assert(res.msgs[0].cn == "ldaptestcomputer"); assert(res.msgs[0].name == "ldaptestcomputer"); assert(res.msgs[0].objectClass[0] == "top"); @@ -396,7 +406,7 @@ objectClass: user assert(res.msgs[0].objectClass[4] == "computer"); assert(res.msgs[0].objectGUID != undefined); assert(res.msgs[0].whenCreated != undefined); - assert(res.msgs[0].objectCategory == "cn=Computer,cn=Schema,cn=Configuration," + base_dn); + assert(res.msgs[0].objectCategory == ("CN=Computer,CN=Schema,CN=Configuration," + base_dn)); assert(res.msgs[0].primaryGroupID == 513); // assert(res.msgs[0].sAMAccountType == 805306368); // assert(res.msgs[0].userAccountControl == 546); @@ -489,7 +499,7 @@ objectClass: user assert(res.msgs.length == 1); } - assert(res.msgs[0].dn == "cn=ldaptest2computer,cn=computers," + base_dn); + assert(res.msgs[0].dn == ("cn=ldaptest2computer,cn=computers," + base_dn)); assert(res.msgs[0].cn == "ldaptest2computer"); assert(res.msgs[0].name == "ldaptest2computer"); assert(res.msgs[0].objectClass[0] == "top"); @@ -513,7 +523,7 @@ objectClass: user assert(res.msgs.length == 1); } - assert(res.msgs[0].dn == "cn=ldaptestuser2,cn=users," + base_dn); + assert(res.msgs[0].dn == ("cn=ldaptestuser2,cn=users," + base_dn)); assert(res.msgs[0].cn == "ldaptestuser2"); assert(res.msgs[0].name == "ldaptestuser2"); assert(res.msgs[0].objectClass[0] == "top"); @@ -540,7 +550,7 @@ objectClass: user assert(res.msgs.length == 1); } - assert(res.msgs[0].dn == "cn=ldaptestutf8user èùéìòà,cn=users," + base_dn); +// assert(res.msgs[0].dn == ("CN=ldaptestutf8user èùéìòà,CN=users," + base_dn)); assert(res.msgs[0].cn == "ldaptestutf8user èùéìòà"); assert(res.msgs[0].name == "ldaptestutf8user èùéìòà"); assert(res.msgs[0].objectClass[0] == "top"); @@ -562,7 +572,7 @@ objectClass: user if (res.error != 0 || res.msgs.length != 1) { println("Could not find (expect space collapse, win2k3 fails) (&(cn=ldaptestutf8user2 ÈÙÉÌÒÀ)(objectClass=user))"); } else { - assert(res.msgs[0].dn == "cn=ldaptestutf8user2 èùéìòà,cn=users," + base_dn); +// assert(res.msgs[0].dn == ("cn=ldaptestutf8user2 èùéìòà,cn=users," + base_dn)); assert(res.msgs[0].cn == "ldaptestutf8user2 èùéìòà"); } -- cgit From 16d039504763139f1221c3ff4643d1a5cb2bdc87 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 29 Oct 2007 21:25:26 +0100 Subject: r25750: Update the objectclass module to improve consistency in Samba4. The aim here is to ensure that if we have CN=Users,DC=samba,DC=example,DC=com that we cannot have a DN of the form cn=admin ,cn=useRS,DC=samba,DC=example,DC=com This module pulls apart the DN, fixes up the relative DN part, and searches for the parent to copy the base from. I've used the objectclass module, as I intend to also validate the placement of child objects, by reading the allowedChildClasses virtual attribute. In the future, I'll also force the attribute names to be consistant (using the case from the schema). Andrew Bartlett (This used to be commit c0a0c69ac5a81cfcb7c7d5ba38db59f8686c30ab) --- testprogs/ejs/ldap.js | 44 +++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 4e6f5cb750..080b0a981c 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -32,7 +32,7 @@ function basic_tests(ldb, gc_ldb, base_dn, configuration_dn, schema_dn) ldb.del("cn=ldaptestuser,cn=users," + base_dn); var ok = ldb.add(" -dn: cn=ldaptestuser,cn=users," + base_dn + " +dn: cn=ldaptestuser,cn=uSers," + base_dn + " objectClass: user objectClass: person cn: LDAPtestUSER @@ -44,7 +44,7 @@ cn: LDAPtestUSER assert(ok.error == 0); } ok = ldb.add(" -dn: cn=ldaptestuser,cn=users," + base_dn + " +dn: cn=ldaptestuser,cn=uSers," + base_dn + " objectClass: user objectClass: person cn: LDAPtestUSER @@ -117,7 +117,7 @@ servicePrincipalName: cifs/ldaptest2computer } ok = ldb.add(" -dn: cn=ldaptestuser2,cn=users," + base_dn + " +dn: cn=ldaptestuser2,cn=useRs," + base_dn + " objectClass: person objectClass: user cn: LDAPtestUSER2 @@ -129,7 +129,7 @@ cn: LDAPtestUSER2 assert(ok.error == 0); } ok = ldb.add(" -dn: cn=ldaptestuser2,cn=users," + base_dn + " +dn: cn=ldaptestuser2,cn=useRs," + base_dn + " objectClass: person objectClass: user cn: LDAPtestUSER2 @@ -142,6 +142,8 @@ cn: LDAPtestUSER2 ok = ldb.del("cn=ldaptestuser3,cn=users," + base_dn); + println("Testing Renames"); + ok = ldb.rename("cn=ldaptestuser2,cn=users," + base_dn, "cn=ldaptestuser3,cn=users," + base_dn); if (ok.error != 0) { println("Could not rename cn=ldaptestuser2,cn=users," + base_dn + " into cn=ldaptestuser3,cn=users," + base_dn + ": " + ok.errstr); @@ -150,7 +152,7 @@ cn: LDAPtestUSER2 // ensure we cannot add it again ok = ldb.add(" -dn: cn=ldaptestuser3,cn=users," + base_dn + " +dn: cn=ldaptestuser3,cn=userS," + base_dn + " objectClass: person objectClass: user cn: LDAPtestUSER3 @@ -204,13 +206,15 @@ cn: LDAPtestUSER3 ok = ldb.del("cn=ldaptestuser5,cn=users," + base_dn); + println("Testing subtree Renames"); + ok = ldb.add(" dn: cn=ldaptestcontainer," + base_dn + " objectClass: container "); ok = ldb.add(" -dn: cn=ldaptestuser4,cn=ldaptestcontainer," + base_dn + " +dn: CN=ldaptestuser4,CN=ldaptestcontainer," + base_dn + " objectClass: person objectClass: user cn: LDAPtestUSER4 @@ -222,7 +226,7 @@ cn: LDAPtestUSER4 assert(ok.error == 0); } ok = ldb.add(" -dn: cn=ldaptestuser4,cn=ldaptestcontainer," + base_dn + " +dn: CN=ldaptestuser4,CN=ldaptestcontainer," + base_dn + " objectClass: person objectClass: user cn: LDAPtestUSER4 @@ -233,8 +237,8 @@ cn: LDAPtestUSER4 } } - println("Testing ldb.rename of cn=ldaptestcontainer," + base_dn + "to cn=ldaptestcontainer2," + base_dn); - ok = ldb.rename("cn=ldaptestcontainer," + base_dn, "cn=ldaptestcontainer2," + base_dn); + println("Testing ldb.rename of cn=ldaptestcontainer," + base_dn + " to cn=ldaptestcontainer2," + base_dn); + ok = ldb.rename("CN=ldaptestcontainer," + base_dn, "CN=ldaptestcontainer2," + base_dn); if (ok.error != 0) { println(ok.errstr); assert(ok.error == 0); @@ -248,7 +252,7 @@ cn: LDAPtestUSER4 assert(res.msgs.length == 1); } - assert(res.msgs[0].dn == ("cn=ldaptestuser4,cn=ldaptestcontainer2," + base_dn)); + assert(res.msgs[0].dn == ("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn)); println("Testing ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in renamed container"); var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer2," + base_dn, ldb.SCOPE_SUBTREE); @@ -258,8 +262,14 @@ cn: LDAPtestUSER4 assert(res.msgs.length == 1); } - assert(res.msgs[0].dn == ("cn=ldaptestuser4,cn=ldaptestcontainer2," + base_dn)); + assert(res.msgs[0].dn == ("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn)); + println("Testing delete (should fail, not a leaf node) of renamed cn=ldaptestcontainer2," + base_dn); + ok = ldb.del("cn=ldaptestcontainer2," + base_dn); + if (ok.error != 66) { /* LDB_ERR_NOT_ALLOWED_ON_NON_LEAF */ + println(ok.errstr); + assert(ok.error == 66); + } println("Testing delete of subtree renamed "+res.msgs[0].dn); ok = ldb.del(res.msgs[0].dn); if (ok.error != 0) { @@ -321,7 +331,7 @@ objectClass: user assert(res.msgs.length == 1); } - assert(res.msgs[0].dn == ("cn=ldaptestuser,cn=users," + base_dn)); + assert(res.msgs[0].dn == ("CN=ldaptestuser,CN=Users," + base_dn)); assert(res.msgs[0].cn == "ldaptestuser"); assert(res.msgs[0].name == "ldaptestuser"); assert(res.msgs[0].objectClass[0] == "top"); @@ -396,7 +406,7 @@ objectClass: user assert(res.msgs.length == 1); } - assert(res.msgs[0].dn == ("cn=ldaptestcomputer,cn=computers," + base_dn)); + assert(res.msgs[0].dn == ("CN=ldaptestcomputer,CN=Computers," + base_dn)); assert(res.msgs[0].cn == "ldaptestcomputer"); assert(res.msgs[0].name == "ldaptestcomputer"); assert(res.msgs[0].objectClass[0] == "top"); @@ -499,7 +509,7 @@ objectClass: user assert(res.msgs.length == 1); } - assert(res.msgs[0].dn == ("cn=ldaptest2computer,cn=computers," + base_dn)); + assert(res.msgs[0].dn == ("CN=ldaptest2computer,CN=Computers," + base_dn)); assert(res.msgs[0].cn == "ldaptest2computer"); assert(res.msgs[0].name == "ldaptest2computer"); assert(res.msgs[0].objectClass[0] == "top"); @@ -523,7 +533,7 @@ objectClass: user assert(res.msgs.length == 1); } - assert(res.msgs[0].dn == ("cn=ldaptestuser2,cn=users," + base_dn)); + assert(res.msgs[0].dn == ("CN=ldaptestuser2,CN=Users," + base_dn)); assert(res.msgs[0].cn == "ldaptestuser2"); assert(res.msgs[0].name == "ldaptestuser2"); assert(res.msgs[0].objectClass[0] == "top"); @@ -550,7 +560,7 @@ objectClass: user assert(res.msgs.length == 1); } -// assert(res.msgs[0].dn == ("CN=ldaptestutf8user èùéìòà,CN=users," + base_dn)); + assert(res.msgs[0].dn == ("CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn)); assert(res.msgs[0].cn == "ldaptestutf8user èùéìòà"); assert(res.msgs[0].name == "ldaptestutf8user èùéìòà"); assert(res.msgs[0].objectClass[0] == "top"); @@ -572,7 +582,7 @@ objectClass: user if (res.error != 0 || res.msgs.length != 1) { println("Could not find (expect space collapse, win2k3 fails) (&(cn=ldaptestutf8user2 ÈÙÉÌÒÀ)(objectClass=user))"); } else { -// assert(res.msgs[0].dn == ("cn=ldaptestutf8user2 èùéìòà,cn=users," + base_dn)); + assert(res.msgs[0].dn == ("cn=ldaptestutf8user2 èùéìòà,cn=users," + base_dn)); assert(res.msgs[0].cn == "ldaptestutf8user2 èùéìòà"); } -- cgit From 47f6988c6d51d245ecacf2ab5c638382a7fdaeb5 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 30 Oct 2007 21:01:07 +0100 Subject: r25753: Move cn=rootdse to @ROOTDSE to avoid being caught up in schema restrictions. Andrew Bartlett (This used to be commit f3390c9054244c0e4381007b36bbac9a17800570) --- testprogs/ejs/ldb.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldb.js b/testprogs/ejs/ldb.js index 36b175f2c1..8c71994805 100755 --- a/testprogs/ejs/ldb.js +++ b/testprogs/ejs/ldb.js @@ -89,7 +89,7 @@ function setup_modules(ldb) dn: @MODULES @LIST: rootdse,operational,rdn_name,partition -dn: cn=ROOTDSE +dn: @ROOTDSE defaultNamingContext: cn=Test dn: @PARTITION -- cgit From 46210e11f14373a213ec6fa32a20e9e183d641bf Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 30 Oct 2007 21:03:54 +0100 Subject: r25754: More work on normal forms for ldb input. This patch is to ensure that all attributes are in the same case as the schema specifies. In the process, I ensure that all attributes are indeed in the schema. This ensures we use the schema case, not the user supplied case for future responses, which assists any (incorrect, but possible) case sensitive processing on a client. I've also removed more of the subtle 'schema &&' that metze objected to in the for loops, moving to a much more explicit 'if (schema)'. Andrew Bartlett (This used to be commit bfc96fff063e7cc278755c043b9da0ed4b75a615) --- testprogs/ejs/ldap.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 080b0a981c..65e13a479d 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -33,9 +33,9 @@ function basic_tests(ldb, gc_ldb, base_dn, configuration_dn, schema_dn) var ok = ldb.add(" dn: cn=ldaptestuser,cn=uSers," + base_dn + " -objectClass: user -objectClass: person -cn: LDAPtestUSER +objectclass: user +objectclass: person +cN: LDAPtestUSER "); if (ok.error != 0) { ok = ldb.del("cn=ldaptestuser,cn=users," + base_dn); @@ -45,9 +45,9 @@ cn: LDAPtestUSER } ok = ldb.add(" dn: cn=ldaptestuser,cn=uSers," + base_dn + " -objectClass: user -objectClass: person -cn: LDAPtestUSER +objectclass: user +objectclass: person +cN: LDAPtestUSER "); if (ok.error != 0) { println(ok.errstr); @@ -57,8 +57,8 @@ cn: LDAPtestUSER var ok = ldb.add(" dn: cn=ldaptestcomputer,cn=computers," + base_dn + " -objectClass: computer -cn: LDAPtestCOMPUTER +objectclass: computer +cN: LDAPtestCOMPUTER "); if (ok.error != 0) { ok = ldb.del("cn=ldaptestcomputer,cn=computers," + base_dn); -- cgit From dbb3c74464d84ff2b7bf1f98daa9db3db7d50734 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 31 Oct 2007 02:50:13 +0100 Subject: r25760: Test out relative distinguished name behaviour under renames. Andrew Bartlett (This used to be commit 0019596b715f888e7b7dbd71de832c6e2941c625) --- testprogs/ejs/ldap.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 65e13a479d..c3003355b5 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -150,6 +150,30 @@ cn: LDAPtestUSER2 assert(ok.error == 0); } + ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser3,cn=users," + base_dn); + if (ok.error != 0) { + println("Could not rename cn=ldaptestuser3,cn=users," + base_dn + " onto itself: " + ok.errstr); + assert(ok.error == 0); + } + + ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestUSER3,cn=users," + base_dn); + if (ok.error != 0) { + println("Could not rename cn=ldaptestuser3,cn=users," + base_dn + " into cn=ldaptestUSER3,cn=users," + base_dn + ": " + ok.errstr); + assert(ok.error == 0); + } + + println("Testing ldb.search for (&(cn=ldaptestuser3)(objectClass=user))"); + var res = ldb.search("(&(cn=ldaptestuser3)(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (&(cn=ldaptestuser3)(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + + assert(res.msgs[0].dn == ("CN=ldaptestUSER3,CN=Users," + base_dn)); + assert(res.msgs[0].cn == "ldaptestUSER3"); + assert(res.msgs[0].name == "ldaptestUSER3"); + // ensure we cannot add it again ok = ldb.add(" dn: cn=ldaptestuser3,cn=userS," + base_dn + " -- cgit From 464dd2ada160002a888e3b2dd17cf0072fbcedf3 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 31 Oct 2007 03:56:13 +0100 Subject: r25761: Rename to be a DN to be a child of itself wasn't being checked for. This prevents CN=test,dc=samba,dc=example,dc=com being renamed into CN=test2,cn=test,dc=samba,dc=example,dc=com Andrew Bartlett (This used to be commit 958a92ed0c6bee19d8b86df7c66330d2bba23e46) --- testprogs/ejs/ldap.js | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index c3003355b5..9be30c8eff 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -288,6 +288,13 @@ cn: LDAPtestUSER4 assert(res.msgs[0].dn == ("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn)); + println("Testing ldb.rename (into itself) of cn=ldaptestcontainer2," + base_dn + " to cn=ldaptestcontainer,cn=ldaptestcontainer2," + base_dn); + ok = ldb.rename("cn=ldaptestcontainer2," + base_dn, "cn=ldaptestcontainer,cn=ldaptestcontainer2," + base_dn); + if (ok.error != 53) { /* LDAP_UNWILLING_TO_PERFORM */ + println(ok.errstr); + assert(ok.error == 53); + } + println("Testing delete (should fail, not a leaf node) of renamed cn=ldaptestcontainer2," + base_dn); ok = ldb.del("cn=ldaptestcontainer2," + base_dn); if (ok.error != 66) { /* LDB_ERR_NOT_ALLOWED_ON_NON_LEAF */ -- cgit From a4c79f06ae84057cb635f8b9fbb280d865afce7b Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 31 Oct 2007 04:41:36 +0100 Subject: r25762: This test belongs best with the other checks for a valid parent, in the objectclass module. Andrew Bartlett (This used to be commit 16a292fcb134adec110cbc4c8f0fb03323750a45) --- testprogs/ejs/ldap.js | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 9be30c8eff..b5c73e4f65 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -295,6 +295,13 @@ cn: LDAPtestUSER4 assert(ok.error == 53); } + println("Testing ldb.rename (into non-existent container) of cn=ldaptestcontainer2," + base_dn + " to cn=ldaptestcontainer,cn=ldaptestcontainer3," + base_dn); + ok = ldb.rename("cn=ldaptestcontainer2," + base_dn, "cn=ldaptestcontainer,cn=ldaptestcontainer3," + base_dn); + if (ok.error != 53 && ok.error != 80) { /* LDAP_UNWILLING_TO_PERFORM or LDAP_OTHER*/ + println(ok.errstr); + assert(ok.error == 53 || ok.error == 80); + } + println("Testing delete (should fail, not a leaf node) of renamed cn=ldaptestcontainer2," + base_dn); ok = ldb.del("cn=ldaptestcontainer2," + base_dn); if (ok.error != 66) { /* LDB_ERR_NOT_ALLOWED_ON_NON_LEAF */ -- cgit From 8a8948a17a947bccf04df817f5011093c0c5c523 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 1 Nov 2007 12:34:06 +0100 Subject: r25781: Handle and test linked attribute renames. Andrew Bartlett (This used to be commit 56d9dd5140b6d7d7bbaa2f59ecdff7ee70c4faac) --- testprogs/ejs/ldap.js | 67 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 2 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index b5c73e4f65..c18e293780 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -55,6 +55,30 @@ cN: LDAPtestUSER } } + ldb.del("cn=ldaptestgroup,cn=users," + base_dn); + + var ok = ldb.add(" +dn: cn=ldaptestgroup,cn=uSers," + base_dn + " +objectclass: group +member: cn=ldaptestuser,cn=useRs," + base_dn + " +"); + if (ok.error != 0) { + ok = ldb.del("cn=ldaptestgroup,cn=users," + base_dn); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + ok = ldb.add(" +dn: cn=ldaptestgroup,cn=uSers," + base_dn + " +objectclass: group +member: cn=ldaptestuser,cn=useRs," + base_dn + " +"); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + } + var ok = ldb.add(" dn: cn=ldaptestcomputer,cn=computers," + base_dn + " objectclass: computer @@ -77,6 +101,11 @@ cn: LDAPtestCOMPUTER } } + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + var ok = ldb.add(" dn: cn=ldaptest2computer,cn=computers," + base_dn + " objectClass: computer @@ -140,6 +169,20 @@ cn: LDAPtestUSER2 } } + println("Testing Group Modifies"); + ok = ldb.modify(" +dn: cn=ldaptestgroup,cn=users," + base_dn + " +changetype: modify +add: member +member: cn=ldaptestuser2,cn=users," + base_dn + " +member: cn=ldaptestcomputer,cn=computers," + base_dn + " +"); + + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + ok = ldb.del("cn=ldaptestuser3,cn=users," + base_dn); println("Testing Renames"); @@ -230,6 +273,14 @@ cn: LDAPtestUSER3 ok = ldb.del("cn=ldaptestuser5,cn=users," + base_dn); + ok = ldb.del("cn=ldaptestgroup2,cn=users," + base_dn); + + ok = ldb.rename("cn=ldaptestgroup,cn=users," + base_dn, "cn=ldaptestgroup2,cn=users," + base_dn); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + println("Testing subtree Renames"); ok = ldb.add(" @@ -562,7 +613,13 @@ objectClass: user // assert(res.msgs[0].userAccountControl == 4098); - var attrs = new Array("cn", "name", "objectClass", "objectGUID", "whenCreated", "nTSecurityDescriptor"); + ok = ldb.del(res.msgs[0].dn); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + + var attrs = new Array("cn", "name", "objectClass", "objectGUID", "whenCreated", "nTSecurityDescriptor", "memberOf"); println("Testing ldb.search for (&(cn=ldaptestUSer2)(objectClass=user))"); var res = ldb.search("(&(cn=ldaptestUSer2)(objectClass=user))", base_dn, ldb.SCOPE_SUBTREE, attrs); if (res.error != 0 || res.msgs.length != 1) { @@ -581,7 +638,7 @@ objectClass: user assert(res.msgs[0].objectGUID != undefined); assert(res.msgs[0].whenCreated != undefined); assert(res.msgs[0].nTSecurityDescriptor != undefined); - + assert(res.msgs[0].memberOf[0] == ("CN=ldaptestgroup2,CN=Users," + base_dn)); ok = ldb.del(res.msgs[0].dn); if (ok.error != 0) { @@ -614,6 +671,12 @@ objectClass: user assert(ok.error == 0); } + ok = ldb.del(("CN=ldaptestgroup2,CN=Users," + base_dn)) + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + println("Testing ldb.search for (&(cn=ldaptestutf8user2 ÈÙÉÌÒÀ)(objectClass=user))"); var res = ldb.search("(&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))"); -- cgit From 96116b7f849779119beec701db67ff18d28fdede Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 2 Nov 2007 02:51:54 +0100 Subject: r25787: Assert that we handle the group membership updating correctly, including when we delete members from the DB. Andrew Bartlett (This used to be commit 2c95274e257da1d392a8a91bc291debc41c18f30) --- testprogs/ejs/ldap.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index c18e293780..dec45a7697 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -509,6 +509,7 @@ objectClass: user assert(res.msgs[0].primaryGroupID == 513); // assert(res.msgs[0].sAMAccountType == 805306368); // assert(res.msgs[0].userAccountControl == 546); + assert(res.msgs[0].memberOf[0] == ("CN=ldaptestgroup2,CN=Users," + base_dn)); println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); var res2 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); @@ -640,7 +641,26 @@ objectClass: user assert(res.msgs[0].nTSecurityDescriptor != undefined); assert(res.msgs[0].memberOf[0] == ("CN=ldaptestgroup2,CN=Users," + base_dn)); - ok = ldb.del(res.msgs[0].dn); + var attrs = new Array("cn", "name", "objectClass", "objectGUID", "whenCreated", "nTSecurityDescriptor", "member"); + println("Testing ldb.search for (&(cn=ldaptestgroup2)(objectClass=group))"); + var res = ldb.search("(&(cn=ldaptestgroup2)(objectClass=group))", base_dn, ldb.SCOPE_SUBTREE, attrs); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (&(cn=ldaptestgroup2)(objectClass=group))"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + + assert(res.msgs[0].dn == ("CN=ldaptestgroup2,CN=Users," + base_dn)); + assert(res.msgs[0].cn == "ldaptestgroup2"); + assert(res.msgs[0].name == "ldaptestgroup2"); + assert(res.msgs[0].objectClass[0] == "top"); + assert(res.msgs[0].objectClass[1] == "group"); + assert(res.msgs[0].objectGUID != undefined); + assert(res.msgs[0].whenCreated != undefined); + assert(res.msgs[0].nTSecurityDescriptor != undefined); + assert(res.msgs[0].member[0] == ("CN=ldaptestuser2,CN=Users," + base_dn)); + + ok = ldb.del(("CN=ldaptestuser2,CN=Users," + base_dn)); if (ok.error != 0) { println(ok.errstr); assert(ok.error == 0); -- cgit From b98169884b354741318ea1d1768d03215991f77f Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 2 Nov 2007 03:39:24 +0100 Subject: r25788: Use a single routine to handle the creation of modify requests in the linked_attributs code. This drasticly reduces the code duplication here. Andrew Bartlett (This used to be commit c66e188e6729a8e12854017d62067b4ae4a23af8) --- testprogs/ejs/ldap.js | 1 + 1 file changed, 1 insertion(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index dec45a7697..8376b15fbb 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -659,6 +659,7 @@ objectClass: user assert(res.msgs[0].whenCreated != undefined); assert(res.msgs[0].nTSecurityDescriptor != undefined); assert(res.msgs[0].member[0] == ("CN=ldaptestuser2,CN=Users," + base_dn)); + assert(res.msgs[0].member.length == 1); ok = ldb.del(("CN=ldaptestuser2,CN=Users," + base_dn)); if (ok.error != 0) { -- cgit From c112597ba794bfd24c1f56de7ba14bec4a70f38e Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 5 Nov 2007 02:29:17 +0100 Subject: r25826: Prove that adding a user or computer via LDAP doesn't magicly give them any more group memberships. Andrew Bartlett (This used to be commit c805934017af2c983b31738cb888103a5f972fdc) --- testprogs/ejs/ldap.js | 3 +++ 1 file changed, 3 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 8376b15fbb..56fbf4f0df 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -432,6 +432,8 @@ objectClass: user assert(res.msgs[0].objectCategory == ("CN=Person,CN=Schema,CN=Configuration," + base_dn)); assert(res.msgs[0].sAMAccountType == 805306368); // assert(res[0].userAccountControl == 546); + assert(res.msgs[0].memberOf[0] == ("CN=ldaptestgroup2,CN=Users," + base_dn)); + assert(res.msgs[0].memberOf.length == 1); println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))"); var res2 = ldb.search("(&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))"); @@ -510,6 +512,7 @@ objectClass: user // assert(res.msgs[0].sAMAccountType == 805306368); // assert(res.msgs[0].userAccountControl == 546); assert(res.msgs[0].memberOf[0] == ("CN=ldaptestgroup2,CN=Users," + base_dn)); + assert(res.msgs[0].memberOf.length == 1); println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); var res2 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); -- cgit From 27c9f6c235c3c625f4c4e60a73d8f2e86bd4a186 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 7 Nov 2007 05:35:16 +0100 Subject: r25891: Test that we get the correct return value when we attempt to reference invalid entries with a linked attribute. Make Samba4 pass that test, by fixing a silly bug in the linked_attributes module. (By passing down the 'original' request structure, tdb would override our handle, and therefore we would never be called for the 'wait', which collects the errors). Fix up the provision templates to handle the newly required referential integrity. Andrew Bartlett (This used to be commit 0377d85bbdcb2c4f110b0519005f0d1d10bc0c0b) --- testprogs/ejs/ldap.js | 46 +++++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 17 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 56fbf4f0df..c012f84bf0 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -31,6 +31,20 @@ function basic_tests(ldb, gc_ldb, base_dn, configuration_dn, schema_dn) ldb.del("cn=ldaptestuser,cn=users," + base_dn); + ldb.del("cn=ldaptestgroup,cn=users," + base_dn); + + println("Testing group add with invalid member"); + var ok = ldb.add(" +dn: cn=ldaptestgroup,cn=uSers," + base_dn + " +objectclass: group +member: cn=ldaptestuser,cn=useRs," + base_dn + " +"); + + if (ok.error != 32) { /* LDAP_NO_SUCH_OBJECT */ + println(ok.errstr); + assert(ok.error == 32); + } + var ok = ldb.add(" dn: cn=ldaptestuser,cn=uSers," + base_dn + " objectclass: user @@ -55,28 +69,14 @@ cN: LDAPtestUSER } } - ldb.del("cn=ldaptestgroup,cn=users," + base_dn); - var ok = ldb.add(" dn: cn=ldaptestgroup,cn=uSers," + base_dn + " objectclass: group member: cn=ldaptestuser,cn=useRs," + base_dn + " "); if (ok.error != 0) { - ok = ldb.del("cn=ldaptestgroup,cn=users," + base_dn); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - ok = ldb.add(" -dn: cn=ldaptestgroup,cn=uSers," + base_dn + " -objectclass: group -member: cn=ldaptestuser,cn=useRs," + base_dn + " -"); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } + println(ok.errstr); + assert(ok.error == 0); } var ok = ldb.add(" @@ -185,6 +185,18 @@ member: cn=ldaptestcomputer,cn=computers," + base_dn + " ok = ldb.del("cn=ldaptestuser3,cn=users," + base_dn); + println("Testing adding non-existent user to a group"); + ok = ldb.modify(" +dn: cn=ldaptestgroup,cn=users," + base_dn + " +changetype: modify +add: member +member: cn=ldaptestuser3,cn=users," + base_dn + " +"); + if (ok.error != 32) { /* LDAP_NO_SUCH_OBJECT */ + println(ok.errstr); + assert(ok.error == 32); + } + println("Testing Renames"); ok = ldb.rename("cn=ldaptestuser2,cn=users," + base_dn, "cn=ldaptestuser3,cn=users," + base_dn); @@ -895,7 +907,7 @@ var base_dn = find_basedn(ldb); var configuration_dn = find_configurationdn(ldb); var schema_dn = find_schemadn(ldb); -printf("baseDN: %s\n", base_dn); +println("baseDN: %s\n", base_dn); var ok = gc_ldb.connect("ldap://" + host + ":3268"); if (!ok) { -- cgit From 58f9b5702a432a39a8276367532635300034d180 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 14 Nov 2007 03:51:02 +0100 Subject: r25948: Fix up the samba3sam test (which is very fragile) to work with the new restrictions imposed by the samldb module. This module is worth keeping, because when we go back to do more extensive backend mapping, the testing of this module shows it is still possible. Andrew Bartlett (This used to be commit a10d2554dc1f9b57ce2a98ea20969b3b3c8aec53) --- testprogs/ejs/samba3sam.js | 54 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 12 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam.js b/testprogs/ejs/samba3sam.js index 44a1f140b1..e5639b8ec8 100755 --- a/testprogs/ejs/samba3sam.js +++ b/testprogs/ejs/samba3sam.js @@ -263,7 +263,20 @@ function test_map_search(ldb, s3, s4) var dn; var attrs; - /* Add a set of split records */ + + var ldif = " +dn: " + "sambaDomainName=TESTS," + s3.BASEDN + " +objectclass: sambaDomain +objectclass: top +sambaSID: S-1-5-21-4231626423-2410014848-2360679739 +sambaNextRid: 2000 +sambaDomainName: TESTS" + ldif = substitute_var(ldif, s3); + assert(ldif != undefined); + var ok = s3.db.add(ldif); + assert(ok.error == 0); + + printf("Add a set of split records"); var ldif = " dn: " + s4.dn("cn=X") + " objectClass: user @@ -297,6 +310,7 @@ nextRid: y lastLogon: z description: y "; + ldif = substitute_var(ldif, s4); assert(ldif != undefined); var ok = ldb.add(ldif); @@ -305,7 +319,8 @@ description: y assert(ok.error == 0); } - /* Add a set of remote records */ + println("Add a set of remote records"); + var ldif = " dn: " + s3.dn("cn=A") + " objectClass: posixAccount @@ -429,7 +444,7 @@ description: y */ res = ldb.search("(objectSid=*)", NULL, ldb. SCOPE_DEFAULT, attrs); assert(res.error == 0); - assert(res.msgs.length == 2); + assert(res.msgs.length == 3); assert(res.msgs[0].dn == s4.dn("cn=X")); assert(res.msgs[0].dnsHostName == "x"); assert(res.msgs[0].lastLogon == "x"); @@ -610,7 +625,7 @@ description: y attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(!(revision=x))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); - assert(res.msgs.length == 4); + assert(res.msgs.length == 5); assert(res.msgs[0].dn == s4.dn("cn=B")); assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == "y"); @@ -628,7 +643,7 @@ description: y attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(!(description=x))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); - assert(res.msgs.length == 2); + assert(res.msgs.length == 3); assert(res.msgs[0].dn == s4.dn("cn=Z")); assert(res.msgs[0].dnsHostName == "z"); assert(res.msgs[0].lastLogon == "z"); @@ -640,7 +655,7 @@ description: y attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(!(&(codePage=x)(revision=x)))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); - assert(res.msgs.length == 4); + assert(res.msgs.length == 5); assert(res.msgs[0].dn == s4.dn("cn=B")); assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == "y"); @@ -658,7 +673,7 @@ description: y attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(!(&(lastLogon=x)(description=x)))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); - assert(res.msgs.length == 4); + assert(res.msgs.length == 5); assert(res.msgs[0].dn == s4.dn("cn=Y")); assert(res.msgs[0].dnsHostName == "y"); assert(res.msgs[0].lastLogon == "y"); @@ -676,7 +691,7 @@ description: y attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(!(&(codePage=x)(description=x)))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); - assert(res.msgs.length == 4); + assert(res.msgs.length == 5); assert(res.msgs[0].dn == s4.dn("cn=B")); assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == "y"); @@ -711,7 +726,7 @@ description: y attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(!(|(badPwdCount=x)(lastLogon=x)))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); - assert(res.msgs.length == 3); + assert(res.msgs.length == 4); assert(res.msgs[0].dn == s4.dn("cn=Y")); assert(res.msgs[0].dnsHostName == "y"); assert(res.msgs[0].lastLogon == "y"); @@ -726,7 +741,7 @@ description: y attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(!(|(revision=x)(lastLogon=y)))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); - assert(res.msgs.length == 3); + assert(res.msgs.length == 4); assert(res.msgs[0].dn == s4.dn("cn=A")); assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == "x"); @@ -737,11 +752,11 @@ description: y assert(res.msgs[2].dnsHostName == undefined); assert(res.msgs[2].lastLogon == "z"); - /* Search by complex parse tree */ + println("Search by complex parse tree"); attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(|(&(revision=x)(dnsHostName=x))(!(&(description=x)(nextRid=y)))(badPwdCount=y))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); - assert(res.msgs.length == 5); + assert(res.msgs.length == 6); assert(res.msgs[0].dn == s4.dn("cn=B")); assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == "y"); @@ -1174,18 +1189,28 @@ samba3.BASEDN = "cn=Samba3Sam"; samba3.db = ldb_init(); samba3.dn = make_dn; +var templates = new Object("templates partition info"); +templates.file = prefix + "/" + "templates.ldb"; +templates.url = "tdb://" + templates.file; +templates.BASEDN = "cn=templates"; +templates.db = ldb_init(); + sys.unlink(ldbfile); sys.unlink(samba3.file); +sys.unlink(templates.file); sys.unlink(samba4.file); var ok = ldb.connect(ldburl); assert(ok); var ok = samba3.db.connect(samba3.url); assert(ok); +var ok = templates.db.connect(templates.url); +assert(ok); var ok = samba4.db.connect(samba4.url); assert(ok); setup_data(samba3, sys.file_load(datadir + "/" + "samba3.ldif")); +setup_data(templates, sys.file_load(datadir + "/" + "provision_samba3sam_templates.ldif")); setup_modules(ldb, samba3, samba4, sys.file_load(datadir + "/" + "provision_samba3sam.ldif")); ldb = ldb_init(); @@ -1197,6 +1222,7 @@ test_s3sam_modify(ldb, samba3); sys.unlink(ldbfile); sys.unlink(samba3.file); +sys.unlink(templates.file); sys.unlink(samba4.file); ldb = ldb_init(); @@ -1205,10 +1231,14 @@ assert(ok); samba3.db = ldb_init(); var ok = samba3.db.connect(samba3.url); assert(ok); +templates.db = ldb_init(); +var ok = templates.db.connect(templates.url); +assert(ok); samba4.db = ldb_init(); var ok = samba4.db.connect(samba4.url); assert(ok); +setup_data(templates, sys.file_load(datadir + "/" + "provision_samba3sam_templates.ldif")); setup_modules(ldb, samba3, samba4, sys.file_load(datadir + "provision_samba3sam.ldif")); ldb = ldb_init(); -- cgit From 3b6ff04631e51cfae9844db7ec7f49d6cdd03f1f Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 15 Nov 2007 02:46:13 +0100 Subject: r25961: Add new tests to verify basedn validation in LDAP searches. Andrew Bartlett (This used to be commit e178df4a180e7ce3eba1a14fb45b2fcc582f06c3) --- testprogs/ejs/ldap.js | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index c012f84bf0..ddf5d814f5 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -45,6 +45,7 @@ member: cn=ldaptestuser,cn=useRs," + base_dn + " assert(ok.error == 32); } + println("Testing user add"); var ok = ldb.add(" dn: cn=ldaptestuser,cn=uSers," + base_dn + " objectclass: user @@ -339,7 +340,19 @@ cn: LDAPtestUSER4 assert(res.msgs.length == 1); } - assert(res.msgs[0].dn == ("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn)); + println("Testing subtree ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in (just renamed from) cn=ldaptestcontainer," + base_dn); + var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer," + base_dn, ldb.SCOPE_SUBTREE); + if (res.error != 32) { + println(res.errstr); + assert(res.error == 32); + } + + println("Testing one-level ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in (just renamed from) cn=ldaptestcontainer," + base_dn); + var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer," + base_dn, ldb.SCOPE_ONELEVEL); + if (res.error != 32) { + println(res.errstr); + assert(res.error == 32); + } println("Testing ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in renamed container"); var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer2," + base_dn, ldb.SCOPE_SUBTREE); @@ -371,8 +384,31 @@ cn: LDAPtestUSER4 println(ok.errstr); assert(ok.error == 66); } - println("Testing delete of subtree renamed "+res.msgs[0].dn); - ok = ldb.del(res.msgs[0].dn); + + println("Testing base ldb.search for CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn); + var res = ldb.search("(objectclass=*)", ("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn), ldb.SCOPE_BASE); + if (res.error == 0 && res.count == 1) { + assert(res.error == 0 && res.count == 1); + } + var res = ldb.search("(cn=ldaptestuser40)", ("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn), ldb.SCOPE_BASE); + if (res.error == 0 && res.count == 0) { + assert(res.error == 0 && res.count == 0); + } + + println("Testing one-level ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in cn=ldaptestcontainer2," + base_dn); + var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer2," + base_dn, ldb.SCOPE_ONELEVEL); + if (res.error == 0 && res.count == 0) { + assert(res.error == 0 && res.count == 0); + } + + println("Testing one-level ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in cn=ldaptestcontainer2," + base_dn); + var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer2," + base_dn, ldb.SCOPE_SUBTREE); + if (res.error == 0 && res.count == 0) { + assert(res.error == 0 && res.count == 0); + } + + println("Testing delete of subtree renamed "+("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn)); + ok = ldb.del(("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn)); if (ok.error != 0) { println(ok.errstr); assert(ok.error == 0); @@ -904,6 +940,7 @@ gc_ldb.credentials = options.get_credentials(); var ok = ldb.connect("ldap://" + host); var base_dn = find_basedn(ldb); + var configuration_dn = find_configurationdn(ldb); var schema_dn = find_schemadn(ldb); -- cgit From 470043bf7ae038e590a011e90bbf610c76d53767 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 27 Nov 2007 04:43:20 +0100 Subject: r26140: Add a new test for searches by distinguieshedName and dn, and implement these in the simple ldap mapping module. We still don't pass this test, because we must get linked attributes into OpenLDAP. Andrew Bartlett (This used to be commit d41f34e979bb119f71ab3cc2fdb3c08e4b92849c) --- testprogs/ejs/ldap.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index ddf5d814f5..40ce404890 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -230,6 +230,28 @@ member: cn=ldaptestuser3,cn=users," + base_dn + " assert(res.msgs[0].cn == "ldaptestUSER3"); assert(res.msgs[0].name == "ldaptestUSER3"); + println("Testing ldb.search for (dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); + var res = ldb.search("(dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + assert(res.msgs[0].dn == ("CN=ldaptestUSER3,CN=Users," + base_dn)); + assert(res.msgs[0].cn == "ldaptestUSER3"); + assert(res.msgs[0].name == "ldaptestUSER3"); + + println("Testing ldb.search for (distinguishedName=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); + var res = ldb.search("(distinguishedName=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + assert(res.msgs[0].dn == ("CN=ldaptestUSER3,CN=Users," + base_dn)); + assert(res.msgs[0].cn == "ldaptestUSER3"); + assert(res.msgs[0].name == "ldaptestUSER3"); + // ensure we cannot add it again ok = ldb.add(" dn: cn=ldaptestuser3,cn=userS," + base_dn + " -- cgit From 37fdef233e3761d511c624ab79c8ef1587090fba Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 28 Nov 2007 04:24:12 +0100 Subject: r26182: Extend our linked attribute testsuite to cover many more possible modifications, and then extend our implementation to match. Andrew Bartlett (This used to be commit 65d17f0ad7ead438333abcccb0bd56b038ffb88e) --- testprogs/ejs/ldap.js | 139 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 129 insertions(+), 10 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 40ce404890..877240890d 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -230,16 +230,17 @@ member: cn=ldaptestuser3,cn=users," + base_dn + " assert(res.msgs[0].cn == "ldaptestUSER3"); assert(res.msgs[0].name == "ldaptestUSER3"); - println("Testing ldb.search for (dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); - var res = ldb.search("(dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - assert(res.msgs[0].dn == ("CN=ldaptestUSER3,CN=Users," + base_dn)); - assert(res.msgs[0].cn == "ldaptestUSER3"); - assert(res.msgs[0].name == "ldaptestUSER3"); +// This is a Samba special, and does not exist in real AD +// println("Testing ldb.search for (dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); +// var res = ldb.search("(dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); +// if (res.error != 0 || res.msgs.length != 1) { +// println("Could not find (dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); +// assert(res.error == 0); +// assert(res.msgs.length == 1); +// } +// assert(res.msgs[0].dn == ("CN=ldaptestUSER3,CN=Users," + base_dn)); +// assert(res.msgs[0].cn == "ldaptestUSER3"); +// assert(res.msgs[0].name == "ldaptestUSER3"); println("Testing ldb.search for (distinguishedName=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); var res = ldb.search("(distinguishedName=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); @@ -347,6 +348,18 @@ cn: LDAPtestUSER4 } } + ok = ldb.modify(" +dn: cn=ldaptestgroup2,cn=users," + base_dn + " +changetype: modify +add: member +member: cn=ldaptestuser4,cn=ldaptestcontainer," + base_dn + " +"); + if (ok.error != 0) { + println("Failure adding ldaptestuser4 to a group"); + println(ok.errstr); + assert(ok.error == 0); + } + println("Testing ldb.rename of cn=ldaptestcontainer," + base_dn + " to cn=ldaptestcontainer2," + base_dn); ok = ldb.rename("CN=ldaptestcontainer," + base_dn, "CN=ldaptestcontainer2," + base_dn); if (ok.error != 0) { @@ -385,6 +398,15 @@ cn: LDAPtestUSER4 } assert(res.msgs[0].dn == ("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn)); + assert(strupper(res.msgs[0].memberOf[0]) == strupper(("CN=ldaptestgroup2,CN=Users," + base_dn))); + + println("Testing ldb.search for (&(member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ")(objectclass=group)) to check subtree renames and linked attributes"); + var res = ldb.search("(&(member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ")(objectclass=group))", base_dn, ldb.SCOPE_SUBTREE); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (&(member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ")(objectclass=group)), perhaps linked attributes are not conistant with subtree renames?"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } println("Testing ldb.rename (into itself) of cn=ldaptestcontainer2," + base_dn + " to cn=ldaptestcontainer,cn=ldaptestcontainer2," + base_dn); ok = ldb.rename("cn=ldaptestcontainer2," + base_dn, "cn=ldaptestcontainer,cn=ldaptestcontainer2," + base_dn); @@ -734,12 +756,109 @@ objectClass: user assert(res.msgs[0].member[0] == ("CN=ldaptestuser2,CN=Users," + base_dn)); assert(res.msgs[0].member.length == 1); + ok = ldb.modify(" +dn: cn=ldaptestgroup2,cn=users," + base_dn + " +changetype: modify +replace: member +member: CN=ldaptestuser2,CN=Users," + base_dn + " +member: CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn + " +"); + if (ok.error != 0) { + println("Failure testing replace of linked attributes"); + println(ok.errstr); + assert(ok.error == 0); + } + + println("Testing Linked attribute behaviours"); + ok = ldb.modify(" +dn: cn=ldaptestgroup2,cn=users," + base_dn + " +changetype: modify +delete: member +"); + if (ok.error != 0) { + println("Failure testing delete of linked attributes"); + println(ok.errstr); + assert(ok.error == 0); + } + + ok = ldb.modify(" +dn: cn=ldaptestgroup2,cn=users," + base_dn + " +changetype: modify +add: member +member: CN=ldaptestuser2,CN=Users," + base_dn + " +member: CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn + " +"); + if (ok.error != 0) { + println("Failure testing add of linked attributes"); + println(ok.errstr); + assert(ok.error == 0); + } + + ok = ldb.modify(" +dn: cn=ldaptestgroup2,cn=users," + base_dn + " +changetype: modify +replace: member +"); + if (ok.error != 0) { + println("Failure testing replace of linked attributes"); + println(ok.errstr); + assert(ok.error == 0); + } + + ok = ldb.modify(" +dn: cn=ldaptestgroup2,cn=users," + base_dn + " +changetype: modify +add: member +member: CN=ldaptestuser2,CN=Users," + base_dn + " +member: CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn + " +"); + if (ok.error != 0) { + println("Failure testing add of linked attributes"); + println(ok.errstr); + assert(ok.error == 0); + } + + ok = ldb.modify(" +dn: cn=ldaptestgroup2,cn=users," + base_dn + " +changetype: modify +delete: member +member: CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn + " +"); + if (ok.error != 0) { + println("Failure testing replace of linked attributes"); + println(ok.errstr); + assert(ok.error == 0); + } + + var res = ldb.search("(&(cn=ldaptestgroup2)(objectClass=group))", base_dn, ldb.SCOPE_SUBTREE, attrs); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (&(cn=ldaptestgroup2)(objectClass=group))"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + + assert(res.msgs[0].dn == ("CN=ldaptestgroup2,CN=Users," + base_dn)); + assert(res.msgs[0].member[0] == ("CN=ldaptestuser2,CN=Users," + base_dn)); + assert(res.msgs[0].member.length == 1); + ok = ldb.del(("CN=ldaptestuser2,CN=Users," + base_dn)); if (ok.error != 0) { println(ok.errstr); assert(ok.error == 0); } + var attrs = new Array("cn", "name", "objectClass", "objectGUID", "whenCreated", "nTSecurityDescriptor", "member"); + println("Testing ldb.search for (&(cn=ldaptestgroup2)(objectClass=group)) to check linked delete"); + var res = ldb.search("(&(cn=ldaptestgroup2)(objectClass=group))", base_dn, ldb.SCOPE_SUBTREE, attrs); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (&(cn=ldaptestgroup2)(objectClass=group)) to check linked delete"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + + assert(res.msgs[0].dn == ("CN=ldaptestgroup2,CN=Users," + base_dn)); + assert(res.msgs[0].member == undefined); + println("Testing ldb.search for (&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))"); var res = ldb.search("(&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))"); -- cgit From 9d4d41f65dc8380d3c3ce19fceefbe3d00bd4e07 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 13 Dec 2007 03:07:38 +0100 Subject: r26419: Add a module to implement 'ambigious name resolution' by munging the incoming LDAP filter. Warning: Any anr search will perform a full index search. Untill ldb gets substring indexes, this is unavoidable. Also implement a testsutie to show we match AD behaviour for this important extension (used in the Active Directory Users and Computers MMC plugin, as a genereral 'find'). This will also be useful to OpenChange, as their server needs to implement this. Andrew Bartlett (This used to be commit 044b50947254ccd516c21cb156ab60ab9e3a582d) --- testprogs/ejs/ldap.js | 154 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 877240890d..7195b29e68 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -51,6 +51,8 @@ dn: cn=ldaptestuser,cn=uSers," + base_dn + " objectclass: user objectclass: person cN: LDAPtestUSER +givenname: ldap +sn: testy "); if (ok.error != 0) { ok = ldb.del("cn=ldaptestuser,cn=users," + base_dn); @@ -63,6 +65,8 @@ dn: cn=ldaptestuser,cn=uSers," + base_dn + " objectclass: user objectclass: person cN: LDAPtestUSER +givenname: ldap +sn: testy "); if (ok.error != 0) { println(ok.errstr); @@ -112,6 +116,7 @@ dn: cn=ldaptest2computer,cn=computers," + base_dn + " objectClass: computer cn: LDAPtest2COMPUTER userAccountControl: 4096 +displayname: ldap testy "); if (ok.error != 0) { ok = ldb.del("cn=ldaptest2computer,cn=computers," + base_dn); @@ -124,6 +129,7 @@ dn: cn=ldaptest2computer,cn=computers," + base_dn + " objectClass: computer cn: LDAPtest2COMPUTER userAccountControl: 4096 +displayname: ldap testy "); if (ok.error != 0) { println(ok.errstr); @@ -151,6 +157,8 @@ dn: cn=ldaptestuser2,cn=useRs," + base_dn + " objectClass: person objectClass: user cn: LDAPtestUSER2 +givenname: testy +sn: ldap user2 "); if (ok.error != 0) { ok = ldb.del("cn=ldaptestuser2,cn=users," + base_dn); @@ -163,6 +171,8 @@ dn: cn=ldaptestuser2,cn=useRs," + base_dn + " objectClass: person objectClass: user cn: LDAPtestUSER2 +givenname: testy +sn: ldap user2 "); if (ok.error != 0) { println(ok.errstr); @@ -170,6 +180,136 @@ cn: LDAPtestUSER2 } } + + println("Testing Ambigious Name Resolution"); + println("Testing ldb.search for (&(anr=ldap testy)(objectClass=user))"); + var res = ldb.search("(&(anr=ldap testy)(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 3) { + println("Could not find (&(anr=ldap testy)(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 3); + } + + println("Testing ldb.search for (&(anr=testy ldap)(objectClass=user))"); + var res = ldb.search("(&(anr=testy ldap)(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 2) { + println("Could not find (&(anr=testy ldap)(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 2); + } + + println("Testing ldb.search for (&(anr=ldap)(objectClass=user))"); + var res = ldb.search("(&(anr=ldap)(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 4) { + println("Found only " + res.msgs.length + " for (&(anr=ldap)(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 4); + } + + println("Testing ldb.search for (&(anr==ldap)(objectClass=user))"); + var res = ldb.search("(&(anr==ldap)(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (&(anr==ldap)(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + + assert(res.msgs[0].dn == ("CN=ldaptestuser,CN=Users," + base_dn)); + assert(res.msgs[0].cn == "ldaptestuser"); + assert(res.msgs[0].name == "ldaptestuser"); + + println("Testing ldb.search for (&(anr=testy)(objectClass=user))"); + var res = ldb.search("(&(anr=testy)(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 2) { + println("Could not find (&(anr=testy)(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 2); + } + + println("Testing ldb.search for (&(anr=ldap testy)(objectClass=user))"); + var res = ldb.search("(&(anr=testy ldap)(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 2) { + println("Could not find (&(anr=ldap testy)(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 2); + } + + println("Testing ldb.search for (&(anr==ldap testy)(objectClass=user))"); + var res = ldb.search("(&(anr==testy ldap)(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (&(anr==ldap testy)(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + + assert(res.msgs[0].dn == ("CN=ldaptestuser,CN=Users," + base_dn)); + assert(res.msgs[0].cn == "ldaptestuser"); + assert(res.msgs[0].name == "ldaptestuser"); + + println("Testing ldb.search for (&(anr==testy ldap)(objectClass=user))"); + var res = ldb.search("(&(anr==testy ldap)(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (&(anr==testy ldap)(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + + assert(res.msgs[0].dn == ("CN=ldaptestuser,CN=Users," + base_dn)); + assert(res.msgs[0].cn == "ldaptestuser"); + assert(res.msgs[0].name == "ldaptestuser"); + + println("Testing ldb.search for (&(anr=testy ldap user)(objectClass=user))"); + var res = ldb.search("(&(anr=testy ldap user)(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (&(anr=testy ldap user)(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + + assert(res.msgs[0].dn == ("CN=ldaptestuser2,CN=Users," + base_dn)); + assert(res.msgs[0].cn == "ldaptestuser2"); + assert(res.msgs[0].name == "ldaptestuser2"); + + println("Testing ldb.search for (&(anr==testy ldap user2)(objectClass=user))"); + var res = ldb.search("(&(anr==testy ldap user2)(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (&(anr==testy ldap user2)(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + + assert(res.msgs[0].dn == ("CN=ldaptestuser2,CN=Users," + base_dn)); + assert(res.msgs[0].cn == "ldaptestuser2"); + assert(res.msgs[0].name == "ldaptestuser2"); + + println("Testing ldb.search for (&(anr==ldap user2)(objectClass=user))"); + var res = ldb.search("(&(anr==ldap user2)(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (&(anr==ldap user2)(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + + assert(res.msgs[0].dn == ("CN=ldaptestuser2,CN=Users," + base_dn)); + assert(res.msgs[0].cn == "ldaptestuser2"); + assert(res.msgs[0].name == "ldaptestuser2"); + + println("Testing ldb.search for (&(anr==not ldap user2)(objectClass=user))"); + var res = ldb.search("(&(anr==not ldap user2)(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 0) { + println("Must not find (&(anr==not ldap user2)(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 0); + } + + println("Testing ldb.search for (&(anr=not ldap user2)(objectClass=user))"); + var res = ldb.search("(&(anr=not ldap user2)(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 0) { + println("Must not find (&(anr=not ldap user2)(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 0); + } + println("Testing Group Modifies"); ok = ldb.modify(" dn: cn=ldaptestgroup,cn=users," + base_dn + " @@ -884,6 +1024,20 @@ member: CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn + " assert(ok.error == 0); } + println("Testing ldb.search for (&(cn=ldaptestutf8user2*)(objectClass=user))"); + var res = ldb.search("(&(cn=ldaptestutf8user2*)(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (&(cn=ldaptestutf8user2*)(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + + ok = ldb.del(res.msgs[0].dn); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + ok = ldb.del(("CN=ldaptestgroup2,CN=Users," + base_dn)) if (ok.error != 0) { println(ok.errstr); -- cgit From f8bc24065b5b36da22e4cd33fac28f0347bc4a46 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 13 Dec 2007 07:04:57 +0100 Subject: r26420: Don't print a blow-by-blow description of every search we do, just the errors that occour. Andrew Bartlett (This used to be commit bf5b2f467f57528aa64d4af0e68ef2dffd00f8f6) --- testprogs/ejs/ldap.js | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 7195b29e68..bc7d8ec341 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -182,7 +182,7 @@ sn: ldap user2 println("Testing Ambigious Name Resolution"); - println("Testing ldb.search for (&(anr=ldap testy)(objectClass=user))"); +// Testing ldb.search for (&(anr=ldap testy)(objectClass=user)) var res = ldb.search("(&(anr=ldap testy)(objectClass=user))"); if (res.error != 0 || res.msgs.length != 3) { println("Could not find (&(anr=ldap testy)(objectClass=user))"); @@ -190,15 +190,15 @@ sn: ldap user2 assert(res.msgs.length == 3); } - println("Testing ldb.search for (&(anr=testy ldap)(objectClass=user))"); +// Testing ldb.search for (&(anr=testy ldap)(objectClass=user)) var res = ldb.search("(&(anr=testy ldap)(objectClass=user))"); if (res.error != 0 || res.msgs.length != 2) { - println("Could not find (&(anr=testy ldap)(objectClass=user))"); + println("Found only " + res.msgs.length + " for (&(anr=testy ldap)(objectClass=user))"); assert(res.error == 0); assert(res.msgs.length == 2); } - println("Testing ldb.search for (&(anr=ldap)(objectClass=user))"); +// Testing ldb.search for (&(anr=ldap)(objectClass=user)) var res = ldb.search("(&(anr=ldap)(objectClass=user))"); if (res.error != 0 || res.msgs.length != 4) { println("Found only " + res.msgs.length + " for (&(anr=ldap)(objectClass=user))"); @@ -206,9 +206,10 @@ sn: ldap user2 assert(res.msgs.length == 4); } - println("Testing ldb.search for (&(anr==ldap)(objectClass=user))"); +// Testing ldb.search for (&(anr==ldap)(objectClass=user)) var res = ldb.search("(&(anr==ldap)(objectClass=user))"); if (res.error != 0 || res.msgs.length != 1) { + println("Found only " + res.msgs.length + " for (&(anr=ldap)(objectClass=user))"); println("Could not find (&(anr==ldap)(objectClass=user))"); assert(res.error == 0); assert(res.msgs.length == 1); @@ -218,26 +219,26 @@ sn: ldap user2 assert(res.msgs[0].cn == "ldaptestuser"); assert(res.msgs[0].name == "ldaptestuser"); - println("Testing ldb.search for (&(anr=testy)(objectClass=user))"); +// Testing ldb.search for (&(anr=testy)(objectClass=user)) var res = ldb.search("(&(anr=testy)(objectClass=user))"); if (res.error != 0 || res.msgs.length != 2) { - println("Could not find (&(anr=testy)(objectClass=user))"); + println("Found only " + res.msgs.length + " for (&(anr=testy)(objectClass=user))"); assert(res.error == 0); assert(res.msgs.length == 2); } - println("Testing ldb.search for (&(anr=ldap testy)(objectClass=user))"); +// Testing ldb.search for (&(anr=ldap testy)(objectClass=user)) var res = ldb.search("(&(anr=testy ldap)(objectClass=user))"); if (res.error != 0 || res.msgs.length != 2) { - println("Could not find (&(anr=ldap testy)(objectClass=user))"); + println("Found only " + res.msgs.length + " for (&(anr=ldap testy)(objectClass=user))"); assert(res.error == 0); assert(res.msgs.length == 2); } - println("Testing ldb.search for (&(anr==ldap testy)(objectClass=user))"); +// Testing ldb.search for (&(anr==ldap testy)(objectClass=user)) var res = ldb.search("(&(anr==testy ldap)(objectClass=user))"); if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(anr==ldap testy)(objectClass=user))"); + println("Found only " + res.msgs.length + " for (&(anr==ldap testy)(objectClass=user))"); assert(res.error == 0); assert(res.msgs.length == 1); } @@ -246,7 +247,7 @@ sn: ldap user2 assert(res.msgs[0].cn == "ldaptestuser"); assert(res.msgs[0].name == "ldaptestuser"); - println("Testing ldb.search for (&(anr==testy ldap)(objectClass=user))"); +// Testing ldb.search for (&(anr==testy ldap)(objectClass=user)) var res = ldb.search("(&(anr==testy ldap)(objectClass=user))"); if (res.error != 0 || res.msgs.length != 1) { println("Could not find (&(anr==testy ldap)(objectClass=user))"); @@ -258,7 +259,7 @@ sn: ldap user2 assert(res.msgs[0].cn == "ldaptestuser"); assert(res.msgs[0].name == "ldaptestuser"); - println("Testing ldb.search for (&(anr=testy ldap user)(objectClass=user))"); + // Testing ldb.search for (&(anr=testy ldap user)(objectClass=user)) var res = ldb.search("(&(anr=testy ldap user)(objectClass=user))"); if (res.error != 0 || res.msgs.length != 1) { println("Could not find (&(anr=testy ldap user)(objectClass=user))"); @@ -270,7 +271,7 @@ sn: ldap user2 assert(res.msgs[0].cn == "ldaptestuser2"); assert(res.msgs[0].name == "ldaptestuser2"); - println("Testing ldb.search for (&(anr==testy ldap user2)(objectClass=user))"); + // Testing ldb.search for (&(anr==testy ldap user2)(objectClass=user)) var res = ldb.search("(&(anr==testy ldap user2)(objectClass=user))"); if (res.error != 0 || res.msgs.length != 1) { println("Could not find (&(anr==testy ldap user2)(objectClass=user))"); @@ -282,7 +283,7 @@ sn: ldap user2 assert(res.msgs[0].cn == "ldaptestuser2"); assert(res.msgs[0].name == "ldaptestuser2"); - println("Testing ldb.search for (&(anr==ldap user2)(objectClass=user))"); + // Testing ldb.search for (&(anr==ldap user2)(objectClass=user)) var res = ldb.search("(&(anr==ldap user2)(objectClass=user))"); if (res.error != 0 || res.msgs.length != 1) { println("Could not find (&(anr==ldap user2)(objectClass=user))"); @@ -294,7 +295,7 @@ sn: ldap user2 assert(res.msgs[0].cn == "ldaptestuser2"); assert(res.msgs[0].name == "ldaptestuser2"); - println("Testing ldb.search for (&(anr==not ldap user2)(objectClass=user))"); + // Testing ldb.search for (&(anr==not ldap user2)(objectClass=user)) var res = ldb.search("(&(anr==not ldap user2)(objectClass=user))"); if (res.error != 0 || res.msgs.length != 0) { println("Must not find (&(anr==not ldap user2)(objectClass=user))"); @@ -302,7 +303,7 @@ sn: ldap user2 assert(res.msgs.length == 0); } - println("Testing ldb.search for (&(anr=not ldap user2)(objectClass=user))"); + // Testing ldb.search for (&(anr=not ldap user2)(objectClass=user)) var res = ldb.search("(&(anr=not ldap user2)(objectClass=user))"); if (res.error != 0 || res.msgs.length != 0) { println("Must not find (&(anr=not ldap user2)(objectClass=user))"); -- cgit From 449c681d5bbab9ad4b432d8c5233046c863f954a Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 17 Dec 2007 02:13:41 +0100 Subject: r26479: Further test behaviour of 'attribute or value exists'. Andrew Bartlett (This used to be commit 11c153163c359fd07402daa61b93872387e12568) --- testprogs/ejs/ldap.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index bc7d8ec341..6af70971eb 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -137,6 +137,7 @@ displayname: ldap testy } } + println("Testing attribute or value exists behaviour"); ok = ldb.modify(" dn: cn=ldaptest2computer,cn=computers," + base_dn + " changetype: modify @@ -146,6 +147,32 @@ servicePrincipalName: host/ldaptest2computer servicePrincipalName: cifs/ldaptest2computer "); +//LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS + if (ok.error != 20) { + println("Expected error LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS, got :" + ok.errstr); + assert(ok.error == 20); + } + + ok = ldb.modify(" +dn: cn=ldaptest2computer,cn=computers," + base_dn + " +changetype: modify +replace: servicePrincipalName +servicePrincipalName: host/ldaptest2computer +servicePrincipalName: cifs/ldaptest2computer +"); + + if (ok.error != 0) { + println("Failed to replace servicePrincpalName:" + ok.errstr); + assert(ok.error == 20); + } + + ok = ldb.modify(" +dn: cn=ldaptest2computer,cn=computers," + base_dn + " +changetype: modify +add: servicePrincipalName +servicePrincipalName: host/ldaptest2computer +"); + //LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS if (ok.error != 20) { println("Expected error LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS, got :" + ok.errstr); -- cgit From dfc27ff863baa7fff6f0c039f48c9a336a0632fc Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 17 Dec 2007 05:56:42 +0100 Subject: r26488: Implement tests for the ranged_results module. Untested code is broken code, so rework the module until it passes... It turns out that AD puts search attributes onto the wire in the reverse order to what Samba does. This complicates exact value matching, so this is skipped for now. Andrew Bartlett (This used to be commit 91bcb60d31d54e52128d5bd107df4ceb87389889) --- testprogs/ejs/ldap.js | 160 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 152 insertions(+), 8 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 6af70971eb..c03dbe9ce2 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -161,10 +161,10 @@ servicePrincipalName: host/ldaptest2computer servicePrincipalName: cifs/ldaptest2computer "); - if (ok.error != 0) { - println("Failed to replace servicePrincpalName:" + ok.errstr); - assert(ok.error == 20); - } + if (ok.error != 0) { + println("Failed to replace servicePrincpalName:" + ok.errstr); + assert(ok.error == 20); + } ok = ldb.modify(" dn: cn=ldaptest2computer,cn=computers," + base_dn + " @@ -174,12 +174,156 @@ servicePrincipalName: host/ldaptest2computer "); //LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS - if (ok.error != 20) { - println("Expected error LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS, got :" + ok.errstr); + if (ok.error != 20) { + println("Expected error LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS, got :" + ok.errstr); assert(ok.error == 20); - } + } + + println("Testing ranged results"); + ok = ldb.modify(" +dn: cn=ldaptest2computer,cn=computers," + base_dn + " +changetype: modify +replace: servicePrincipalName +"); + if (ok.error != 0) { + println("Failed to replace servicePrincpalName:" + ok.errstr); + assert(ok.error == 0); + } + + ok = ldb.modify(" +dn: cn=ldaptest2computer,cn=computers," + base_dn + " +changetype: modify +add: servicePrincipalName +servicePrincipalName: host/ldaptest2computer0 +servicePrincipalName: host/ldaptest2computer1 +servicePrincipalName: host/ldaptest2computer2 +servicePrincipalName: host/ldaptest2computer3 +servicePrincipalName: host/ldaptest2computer4 +servicePrincipalName: host/ldaptest2computer5 +servicePrincipalName: host/ldaptest2computer6 +servicePrincipalName: host/ldaptest2computer7 +servicePrincipalName: host/ldaptest2computer8 +servicePrincipalName: host/ldaptest2computer9 +servicePrincipalName: host/ldaptest2computer10 +servicePrincipalName: host/ldaptest2computer11 +servicePrincipalName: host/ldaptest2computer12 +servicePrincipalName: host/ldaptest2computer13 +servicePrincipalName: host/ldaptest2computer14 +servicePrincipalName: host/ldaptest2computer15 +servicePrincipalName: host/ldaptest2computer16 +servicePrincipalName: host/ldaptest2computer17 +servicePrincipalName: host/ldaptest2computer18 +servicePrincipalName: host/ldaptest2computer19 +servicePrincipalName: host/ldaptest2computer20 +servicePrincipalName: host/ldaptest2computer21 +servicePrincipalName: host/ldaptest2computer22 +servicePrincipalName: host/ldaptest2computer23 +servicePrincipalName: host/ldaptest2computer24 +servicePrincipalName: host/ldaptest2computer25 +servicePrincipalName: host/ldaptest2computer26 +servicePrincipalName: host/ldaptest2computer27 +servicePrincipalName: host/ldaptest2computer28 +servicePrincipalName: host/ldaptest2computer29 +"); - ok = ldb.add(" + if (ok.error != 0) { + println("Failed to replace servicePrincpalName:" + ok.errstr); + assert(ok.error == 0); + } + + + var attrs = new Array("servicePrincipalName;range=0-*"); + var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (cn=ldaptest2computer)"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } +// println(res.msgs[0]["servicePrincipalName;range=0-*"].length); + assert(res.msgs[0]["servicePrincipalName;range=0-*"].length == 30); + + var attrs = new Array("servicePrincipalName;range=0-19"); + var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (cn=ldaptest2computer)"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } +// println(res.msgs[0]["servicePrincipalName;range=0-19"].length); + assert(res.msgs[0]["servicePrincipalName;range=0-19"].length == 20); + + var attrs = new Array("servicePrincipalName;range=0-30"); + var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (cn=ldaptest2computer)"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + assert(res.msgs[0]["servicePrincipalName;range=0-*"].length == 30); + + var attrs = new Array("servicePrincipalName;range=0-40"); + var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (cn=ldaptest2computer)"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + assert(res.msgs[0]["servicePrincipalName;range=0-*"].length == 30); + + var attrs = new Array("servicePrincipalName;range=30-40"); + var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (cn=ldaptest2computer)"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + assert(res.msgs[0]["servicePrincipalName;range=30-*"].length == 0); + + var attrs = new Array("servicePrincipalName;range=10-40"); + var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (cn=ldaptest2computer)"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + assert(res.msgs[0]["servicePrincipalName;range=10-*"].length == 20); +// var pos_11 = res.msgs[0]["servicePrincipalName;range=10-*"][18]; + + var attrs = new Array("servicePrincipalName;range=11-40"); + var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (cn=ldaptest2computer)"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + assert(res.msgs[0]["servicePrincipalName;range=11-*"].length == 19); +// println(res.msgs[0]["servicePrincipalName;range=11-*"][18]); +// println(pos_11); +// assert((res.msgs[0]["servicePrincipalName;range=11-*"][18]) == pos_11); + + var attrs = new Array("servicePrincipalName;range=11-15"); + var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (cn=ldaptest2computer)"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + assert(res.msgs[0]["servicePrincipalName;range=11-15"].length == 5); +// assert(res.msgs[0]["servicePrincipalName;range=11-15"][4] == pos_11); + + var attrs = new Array("servicePrincipalName"); + var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (cn=ldaptest2computer)"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } +// println(res.msgs[0]["servicePrincipalName"][18]); +// println(pos_11); + assert(res.msgs[0]["servicePrincipalName"].length == 30); +// assert(res.msgs[0]["servicePrincipalName"][18] == pos_11); + + ok = ldb.add(" dn: cn=ldaptestuser2,cn=useRs," + base_dn + " objectClass: person objectClass: user -- cgit From 0ec60cfd830536c8e525b98df85375f50af9c413 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 16 Jan 2008 08:57:28 +1100 Subject: Make ldap.js test easier to re-run in failure cases, by deleting more things that we will create later. Andrew Bartlett (This used to be commit 9b47b551a3762590fefa5308310d91c6d8b378e5) --- testprogs/ejs/ldap.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index c03dbe9ce2..836b726ad9 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -30,7 +30,12 @@ function basic_tests(ldb, gc_ldb, base_dn, configuration_dn, schema_dn) println("Running basic tests"); ldb.del("cn=ldaptestuser,cn=users," + base_dn); - + ldb.del("cn=ldaptestuser2,cn=users," + base_dn); + ldb.del("cn=ldaptestuser3,cn=users," + base_dn); + ldb.del("cn=ldaptestuser4,cn=users," + base_dn); + ldb.del("cn=ldaptestuser5,cn=users," + base_dn); + ldb.del("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn); + ldb.del("CN=ldaptestcontainer2," + base_dn); ldb.del("cn=ldaptestgroup,cn=users," + base_dn); println("Testing group add with invalid member"); -- cgit From 2eab4abf25453a1849adb28d65869c16b2479f57 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 23 Jan 2008 09:00:00 +1100 Subject: Make ranged results tests in ldap.js easier to debug. This adds some extra information to the failure message, to chase down which test is failing. Andrew Bartlett (This used to be commit 281bc76d3d7605f18ee914cf01dbf09062f5a5f0) --- testprogs/ejs/ldap.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 836b726ad9..090f93b6ca 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -240,7 +240,7 @@ servicePrincipalName: host/ldaptest2computer29 var attrs = new Array("servicePrincipalName;range=0-*"); var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (cn=ldaptest2computer)"); + println("Could not find (cn=ldaptest2computer) for servicePrincipalName;range=0-*"); assert(res.error == 0); assert(res.msgs.length == 1); } @@ -250,7 +250,7 @@ servicePrincipalName: host/ldaptest2computer29 var attrs = new Array("servicePrincipalName;range=0-19"); var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (cn=ldaptest2computer)"); + println("Could not find (cn=ldaptest2computer) for servicePrincipalName;range=0-19"); assert(res.error == 0); assert(res.msgs.length == 1); } @@ -260,7 +260,7 @@ servicePrincipalName: host/ldaptest2computer29 var attrs = new Array("servicePrincipalName;range=0-30"); var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (cn=ldaptest2computer)"); + println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=0-19"); assert(res.error == 0); assert(res.msgs.length == 1); } @@ -269,7 +269,7 @@ servicePrincipalName: host/ldaptest2computer29 var attrs = new Array("servicePrincipalName;range=0-40"); var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (cn=ldaptest2computer)"); + println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=0-40"); assert(res.error == 0); assert(res.msgs.length == 1); } @@ -278,7 +278,7 @@ servicePrincipalName: host/ldaptest2computer29 var attrs = new Array("servicePrincipalName;range=30-40"); var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (cn=ldaptest2computer)"); + println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=30-40"); assert(res.error == 0); assert(res.msgs.length == 1); } @@ -287,7 +287,7 @@ servicePrincipalName: host/ldaptest2computer29 var attrs = new Array("servicePrincipalName;range=10-40"); var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (cn=ldaptest2computer)"); + println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=10-40"); assert(res.error == 0); assert(res.msgs.length == 1); } @@ -297,7 +297,7 @@ servicePrincipalName: host/ldaptest2computer29 var attrs = new Array("servicePrincipalName;range=11-40"); var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (cn=ldaptest2computer)"); + println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=10-*"); assert(res.error == 0); assert(res.msgs.length == 1); } @@ -309,7 +309,7 @@ servicePrincipalName: host/ldaptest2computer29 var attrs = new Array("servicePrincipalName;range=11-15"); var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (cn=ldaptest2computer)"); + println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=11-15"); assert(res.error == 0); assert(res.msgs.length == 1); } @@ -319,7 +319,7 @@ servicePrincipalName: host/ldaptest2computer29 var attrs = new Array("servicePrincipalName"); var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (cn=ldaptest2computer)"); + println("Could not find (cn=ldaptest2computer) at servicePrincipalName"); assert(res.error == 0); assert(res.msgs.length == 1); } -- cgit From b2d47f9794bc805051fde55f1f94d29db96c6a62 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 9 Feb 2008 09:59:45 +1100 Subject: From a request from Peter Huang, include IPsec sechema. (We may need to include more defaults in the template, but I want to start small for now). Andrew Bartlett (This used to be commit a466dda118f785bf784548106637577a5e25a30e) --- testprogs/ejs/minschema_classes.txt | 3 +++ 1 file changed, 3 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/minschema_classes.txt b/testprogs/ejs/minschema_classes.txt index 0479438fa5..9327a4af2f 100644 --- a/testprogs/ejs/minschema_classes.txt +++ b/testprogs/ejs/minschema_classes.txt @@ -34,3 +34,6 @@ attributeSchema subSchema queryPolicy groupPolicyContainer +ipsecPolicy +ipsecISAKMPPolicy +ipsecNFA -- cgit From 655ec1aa063a103f8fc2da6396c58faa09afc38a Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 9 Feb 2008 14:48:56 +1100 Subject: A couple more ipsec classes for the schema. Andrew Bartlett (This used to be commit 41309dc8627e707cee226a76238b9a70d417a345) --- testprogs/ejs/minschema_classes.txt | 2 ++ 1 file changed, 2 insertions(+) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/minschema_classes.txt b/testprogs/ejs/minschema_classes.txt index 9327a4af2f..30f5b8ce96 100644 --- a/testprogs/ejs/minschema_classes.txt +++ b/testprogs/ejs/minschema_classes.txt @@ -37,3 +37,5 @@ groupPolicyContainer ipsecPolicy ipsecISAKMPPolicy ipsecNFA +ipsecFilter +ipsecNegotiationPolicy -- cgit From 0a6dc219559cb6385b6d2c5482e7588184e9ccc8 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 11 Feb 2008 13:38:07 +0100 Subject: Remove tests for Samba 3 EJS code. (This used to be commit 7aff2ddd8ca1ff68fc704fdb139d81d6daa51115) --- testprogs/ejs/samba3sam.js | 1255 -------------------------------------------- 1 file changed, 1255 deletions(-) delete mode 100755 testprogs/ejs/samba3sam.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam.js b/testprogs/ejs/samba3sam.js deleted file mode 100755 index e5639b8ec8..0000000000 --- a/testprogs/ejs/samba3sam.js +++ /dev/null @@ -1,1255 +0,0 @@ -#!/usr/bin/env smbscript -/* - (C) Jelmer Vernooij 2005 - (C) Martin Kuehl 2006 - Published under the GNU GPL - Sponsored by Google Summer of Code - */ - -var sys; -var options = GetOptions(ARGV, "POPT_AUTOHELP", "POPT_COMMON_SAMBA"); -if (options == undefined) { - println("Failed to parse options"); - return -1; -} - -libinclude("base.js"); - -if (options.ARGV.length != 2) { - println("Usage: samba3sam.js "); - return -1; -} - -var prefix = options.ARGV[0]; -var datadir = options.ARGV[1]; - -function setup_data(obj, ldif) -{ - assert(ldif != undefined); - ldif = substitute_var(ldif, obj); - assert(ldif != undefined); - var ok = obj.db.add(ldif); - assert(ok.error == 0); -} - -function setup_modules(ldb, s3, s4, ldif) -{ - assert(ldif != undefined); - ldif = substitute_var(ldif, s4); - assert(ldif != undefined); - var ok = ldb.add(ldif); - assert(ok.error == 0); - - var ldif = " -dn: @MAP=samba3sam -@FROM: " + s4.BASEDN + " -@TO: sambaDomainName=TESTS," + s3.BASEDN + " - -dn: @MODULES -@LIST: rootdse,paged_results,server_sort,extended_dn,asq,samldb,password_hash,operational,objectguid,rdn_name,samba3sam,partition - -dn: @PARTITION -partition: " + s4.BASEDN + ":" + s4.url + " -partition: " + s3.BASEDN + ":" + s3.url + " -replicateEntries: @SUBCLASSES -replicateEntries: @ATTRIBUTES -replicateEntries: @INDEXLIST -"; - var ok = ldb.add(ldif); - assert(ok.error == 0); -} - -function test_s3sam_search(ldb) -{ - println("Looking up by non-mapped attribute"); - var msg = ldb.search("(cn=Administrator)"); - assert(msg.error == 0); - assert(msg.msgs.length == 1); - assert(msg.msgs[0].cn == "Administrator"); - - println("Looking up by mapped attribute"); - var msg = ldb.search("(name=Backup Operators)"); - assert(msg.error == 0); - assert(msg.msgs.length == 1); - assert(msg.msgs[0].name == "Backup Operators"); - - println("Looking up by old name of renamed attribute"); - var msg = ldb.search("(displayName=Backup Operators)"); - assert(msg.msgs.length == 0); - - println("Looking up mapped entry containing SID"); - var msg = ldb.search("(cn=Replicator)"); - assert(msg.error == 0); - assert(msg.msgs.length == 1); - println(msg.msgs[0].dn); - assert(msg.msgs[0].dn == "cn=Replicator,ou=Groups,dc=vernstok,dc=nl"); - assert(msg.msgs[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); - - println("Checking mapping of objectClass"); - var oc = msg.msgs[0].objectClass; - assert(oc != undefined); - for (var i in oc) { - assert(oc[i] == "posixGroup" || oc[i] == "group"); - } - - println("Looking up by objectClass"); - var msg = ldb.search("(|(objectClass=user)(cn=Administrator))"); - assert(msg.error == 0); - assert(msg.msgs.length == 2); - for (var i = 0; i < msg.msgs.length; i++) { - assert((msg.msgs[i].dn == "unixName=Administrator,ou=Users,dc=vernstok,dc=nl") || - (msg.msgs[i].dn == "unixName=nobody,ou=Users,dc=vernstok,dc=nl")); - } -} - -function test_s3sam_modify(ldb, s3) -{ - var msg, ok; - println("Adding a record that will be fallbacked"); - ok = ldb.add(" -dn: cn=Foo -foo: bar -blah: Blie -cn: Foo -showInAdvancedViewOnly: TRUE -"); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - - println("Checking for existence of record (local)"); - /* TODO: This record must be searched in the local database, which is currently only supported for base searches - * msg = ldb.search("(cn=Foo)", new Array('foo','blah','cn','showInAdvancedViewOnly')); - * TODO: Actually, this version should work as well but doesn't... - * - */ - var attrs = new Array('foo','blah','cn','showInAdvancedViewOnly'); - msg = ldb.search("(cn=Foo)", "cn=Foo", ldb.LDB_SCOPE_BASE, attrs); - assert(msg.error == 0); - assert(msg.msgs.length == 1); - assert(msg.msgs[0].showInAdvancedViewOnly == "TRUE"); - assert(msg.msgs[0].foo == "bar"); - assert(msg.msgs[0].blah == "Blie"); - - println("Adding record that will be mapped"); - ok = ldb.add(" -dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl -objectClass: user -unixName: bin -sambaUnicodePwd: geheim -cn: Niemand -"); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - assert(ok.error == 0); - - println("Checking for existence of record (remote)"); - msg = ldb.search("(unixName=bin)", new Array('unixName','cn','dn', 'sambaUnicodePwd')); - assert(msg.error == 0); - assert(msg.msgs.length == 1); - assert(msg.msgs[0].cn == "Niemand"); - assert(msg.msgs[0].sambaUnicodePwd == "geheim"); - - println("Checking for existence of record (local && remote)"); - msg = ldb.search("(&(unixName=bin)(sambaUnicodePwd=geheim))", new Array('unixName','cn','dn', 'sambaUnicodePwd')); - assert(msg.error == 0); - assert(msg.msgs.length == 1); // TODO: should check with more records - assert(msg.msgs[0].cn == "Niemand"); - assert(msg.msgs[0].unixName == "bin"); - assert(msg.msgs[0].sambaUnicodePwd == "geheim"); - - println("Checking for existence of record (local || remote)"); - msg = ldb.search("(|(unixName=bin)(sambaUnicodePwd=geheim))", new Array('unixName','cn','dn', 'sambaUnicodePwd')); - println("got " + msg.msgs.length + " replies"); - assert(msg.error == 0); - assert(msg.msgs.length == 1); // TODO: should check with more records - assert(msg.msgs[0].cn == "Niemand"); - assert(msg.msgs[0].unixName == "bin" || msg.msgs[0].sambaUnicodePwd == "geheim"); - - println("Checking for data in destination database"); - msg = s3.db.search("(cn=Niemand)"); - assert(msg.error == 0); - assert(msg.msgs.length >= 1); - assert(msg.msgs[0].sambaSID == "S-1-5-21-4231626423-2410014848-2360679739-2001"); - assert(msg.msgs[0].displayName == "Niemand"); - - println("Adding attribute..."); - ok = ldb.modify(" -dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl -changetype: modify -add: description -description: Blah -"); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - assert(ok.error == 0); - - println("Checking whether changes are still there..."); - msg = ldb.search("(cn=Niemand)"); - assert(msg.error == 0); - assert(msg.msgs.length >= 1); - assert(msg.msgs[0].cn == "Niemand"); - assert(msg.msgs[0].description == "Blah"); - - println("Modifying attribute..."); - ok = ldb.modify(" -dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl -changetype: modify -replace: description -description: Blie -"); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - assert(ok.error == 0); - - println("Checking whether changes are still there..."); - msg = ldb.search("(cn=Niemand)"); - assert(msg.error == 0); - assert(msg.msgs.length >= 1); - assert(msg.msgs[0].description == "Blie"); - - println("Deleting attribute..."); - ok = ldb.modify(" -dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl -changetype: modify -delete: description -"); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - assert(ok.error == 0); - - println("Checking whether changes are no longer there..."); - msg = ldb.search("(cn=Niemand)"); - assert(msg.error == 0); - assert(msg.msgs.length >= 1); - assert(msg.msgs[0].description == undefined); - - println("Renaming record..."); - ok = ldb.rename("cn=Niemand,cn=Users,dc=vernstok,dc=nl", "cn=Niemand2,cn=Users,dc=vernstok,dc=nl"); - assert(ok.error == 0); - - println("Checking whether DN has changed..."); - msg = ldb.search("(cn=Niemand2)"); - assert(msg.error == 0); - assert(msg.msgs.length == 1); - assert(msg.msgs[0].dn == "cn=Niemand2,cn=Users,dc=vernstok,dc=nl"); - - println("Deleting record..."); - ok = ldb.del("cn=Niemand2,cn=Users,dc=vernstok,dc=nl"); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - - println("Checking whether record is gone..."); - msg = ldb.search("(cn=Niemand2)"); - assert(msg.error == 0); - assert(msg.msgs.length == 0); -} - -function test_map_search(ldb, s3, s4) -{ - println("Running search tests on mapped data"); - var res; - var dn; - var attrs; - - - var ldif = " -dn: " + "sambaDomainName=TESTS," + s3.BASEDN + " -objectclass: sambaDomain -objectclass: top -sambaSID: S-1-5-21-4231626423-2410014848-2360679739 -sambaNextRid: 2000 -sambaDomainName: TESTS" - ldif = substitute_var(ldif, s3); - assert(ldif != undefined); - var ok = s3.db.add(ldif); - assert(ok.error == 0); - - printf("Add a set of split records"); - var ldif = " -dn: " + s4.dn("cn=X") + " -objectClass: user -cn: X -codePage: x -revision: x -dnsHostName: x -nextRid: y -lastLogon: x -description: x -objectSid: S-1-5-21-4231626423-2410014848-2360679739-552 -primaryGroupID: 1-5-21-4231626423-2410014848-2360679739-512 - -dn: " + s4.dn("cn=Y") + " -objectClass: top -cn: Y -codePage: x -revision: x -dnsHostName: y -nextRid: y -lastLogon: y -description: x - -dn: " + s4.dn("cn=Z") + " -objectClass: top -cn: Z -codePage: x -revision: y -dnsHostName: z -nextRid: y -lastLogon: z -description: y -"; - - ldif = substitute_var(ldif, s4); - assert(ldif != undefined); - var ok = ldb.add(ldif); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - - println("Add a set of remote records"); - - var ldif = " -dn: " + s3.dn("cn=A") + " -objectClass: posixAccount -cn: A -sambaNextRid: x -sambaBadPasswordCount: x -sambaLogonTime: x -description: x -sambaSID: S-1-5-21-4231626423-2410014848-2360679739-552 -sambaPrimaryGroupSID: S-1-5-21-4231626423-2410014848-2360679739-512 - -dn: " + s3.dn("cn=B") + " -objectClass: top -cn:B -sambaNextRid: x -sambaBadPasswordCount: x -sambaLogonTime: y -description: x - -dn: " + s3.dn("cn=C") + " -objectClass: top -cn: C -sambaNextRid: x -sambaBadPasswordCount: y -sambaLogonTime: z -description: y -"; - ldif = substitute_var(ldif, s3); - assert(ldif != undefined); - var ok = s3.db.add(ldif); - assert(ok.error == 0); - - println("Testing search by DN"); - - /* Search remote record by local DN */ - dn = s4.dn("cn=A"); - attrs = new Array("dnsHostName", "lastLogon"); - res = ldb.search("", dn, ldb.SCOPE_BASE, attrs); - assert(res.error == 0); - assert(res.msgs.length == 1); - assert(res.msgs[0].dn == dn); - assert(res.msgs[0].dnsHostName == undefined); - assert(res.msgs[0].lastLogon == "x"); - - /* Search remote record by remote DN */ - dn = s3.dn("cn=A"); - attrs = new Array("dnsHostName", "lastLogon", "sambaLogonTime"); - res = s3.db.search("", dn, ldb.SCOPE_BASE, attrs); - assert(res.error == 0); - assert(res.msgs.length == 1); - assert(res.msgs[0].dn == dn); - assert(res.msgs[0].dnsHostName == undefined); - assert(res.msgs[0].lastLogon == undefined); - assert(res.msgs[0].sambaLogonTime == "x"); - - /* Search split record by local DN */ - dn = s4.dn("cn=X"); - attrs = new Array("dnsHostName", "lastLogon"); - res = ldb.search("", dn, ldb.SCOPE_BASE, attrs); - assert(res.error == 0); - assert(res.msgs.length == 1); - assert(res.msgs[0].dn == dn); - assert(res.msgs[0].dnsHostName == "x"); - assert(res.msgs[0].lastLogon == "x"); - - /* Search split record by remote DN */ - dn = s3.dn("cn=X"); - attrs = new Array("dnsHostName", "lastLogon", "sambaLogonTime"); - res = s3.db.search("", dn, ldb.SCOPE_BASE, attrs); - assert(res.error == 0); - assert(res.msgs.length == 1); - assert(res.msgs[0].dn == dn); - assert(res.msgs[0].dnsHostName == undefined); - assert(res.msgs[0].lastLogon == undefined); - assert(res.msgs[0].sambaLogonTime == "x"); - - println("Testing search by attribute"); - - /* Search by ignored attribute */ - attrs = new Array("dnsHostName", "lastLogon"); - res = ldb.search("(revision=x)", NULL, ldb. SCOPE_DEFAULT, attrs); - assert(res.error == 0); - assert(res.msgs.length == 2); - assert(res.msgs[0].dn == s4.dn("cn=Y")); - assert(res.msgs[0].dnsHostName == "y"); - assert(res.msgs[0].lastLogon == "y"); - assert(res.msgs[1].dn == s4.dn("cn=X")); - assert(res.msgs[1].dnsHostName == "x"); - assert(res.msgs[1].lastLogon == "x"); - - /* Search by kept attribute */ - attrs = new Array("dnsHostName", "lastLogon"); - res = ldb.search("(description=y)", NULL, ldb. SCOPE_DEFAULT, attrs); - assert(res.error == 0); - assert(res.msgs.length == 2); - assert(res.msgs[0].dn == s4.dn("cn=Z")); - assert(res.msgs[0].dnsHostName == "z"); - assert(res.msgs[0].lastLogon == "z"); - assert(res.msgs[1].dn == s4.dn("cn=C")); - assert(res.msgs[1].dnsHostName == undefined); - assert(res.msgs[1].lastLogon == "z"); - - /* Search by renamed attribute */ - attrs = new Array("dnsHostName", "lastLogon"); - res = ldb.search("(badPwdCount=x)", NULL, ldb. SCOPE_DEFAULT, attrs); - assert(res.error == 0); - assert(res.msgs.length == 2); - assert(res.msgs[0].dn == s4.dn("cn=B")); - assert(res.msgs[0].dnsHostName == undefined); - assert(res.msgs[0].lastLogon == "y"); - assert(res.msgs[1].dn == s4.dn("cn=A")); - assert(res.msgs[1].dnsHostName == undefined); - assert(res.msgs[1].lastLogon == "x"); - - /* Search by converted attribute */ - attrs = new Array("dnsHostName", "lastLogon", "objectSid"); - /* TODO: - Using the SID directly in the parse tree leads to conversion - errors, letting the search fail with no results. - res = ldb.search("(objectSid=S-1-5-21-4231626423-2410014848-2360679739-552)", NULL, ldb. SCOPE_DEFAULT, attrs); - */ - res = ldb.search("(objectSid=*)", NULL, ldb. SCOPE_DEFAULT, attrs); - assert(res.error == 0); - assert(res.msgs.length == 3); - assert(res.msgs[0].dn == s4.dn("cn=X")); - assert(res.msgs[0].dnsHostName == "x"); - assert(res.msgs[0].lastLogon == "x"); - assert(res.msgs[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); - assert(res.msgs[1].dn == s4.dn("cn=A")); - assert(res.msgs[1].dnsHostName == undefined); - assert(res.msgs[1].lastLogon == "x"); - assert(res.msgs[1].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); - - /* Search by generated attribute */ - /* In most cases, this even works when the mapping is missing - * a `convert_operator' by enumerating the remote db. */ - attrs = new Array("dnsHostName", "lastLogon", "primaryGroupID"); - res = ldb.search("(primaryGroupID=512)", NULL, ldb. SCOPE_DEFAULT, attrs); - assert(res.error == 0); - assert(res.msgs.length == 1); - assert(res.msgs[0].dn == s4.dn("cn=A")); - assert(res.msgs[0].dnsHostName == undefined); - assert(res.msgs[0].lastLogon == "x"); - assert(res.msgs[0].primaryGroupID == "512"); - - /* TODO: There should actually be two results, A and X. The - * primaryGroupID of X seems to get corrupted somewhere, and the - * objectSid isn't available during the generation of remote (!) data, - * which can be observed with the following search. Also note that Xs - * objectSid seems to be fine in the previous search for objectSid... */ - /* - res = ldb.search("(primaryGroupID=*)", NULL, ldb. SCOPE_DEFAULT, attrs); - println(res.msgs.length + " results found"); - for (i=0;i Date: Tue, 12 Feb 2008 01:42:58 +0100 Subject: Reintroduce samba3sam EJS test, at least until the Python test is ready. (This used to be commit 13deb25214b2711836e243a87166b63a4a87270b) --- testprogs/ejs/samba3sam.js | 1255 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1255 insertions(+) create mode 100644 testprogs/ejs/samba3sam.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samba3sam.js b/testprogs/ejs/samba3sam.js new file mode 100644 index 0000000000..e5639b8ec8 --- /dev/null +++ b/testprogs/ejs/samba3sam.js @@ -0,0 +1,1255 @@ +#!/usr/bin/env smbscript +/* + (C) Jelmer Vernooij 2005 + (C) Martin Kuehl 2006 + Published under the GNU GPL + Sponsored by Google Summer of Code + */ + +var sys; +var options = GetOptions(ARGV, "POPT_AUTOHELP", "POPT_COMMON_SAMBA"); +if (options == undefined) { + println("Failed to parse options"); + return -1; +} + +libinclude("base.js"); + +if (options.ARGV.length != 2) { + println("Usage: samba3sam.js "); + return -1; +} + +var prefix = options.ARGV[0]; +var datadir = options.ARGV[1]; + +function setup_data(obj, ldif) +{ + assert(ldif != undefined); + ldif = substitute_var(ldif, obj); + assert(ldif != undefined); + var ok = obj.db.add(ldif); + assert(ok.error == 0); +} + +function setup_modules(ldb, s3, s4, ldif) +{ + assert(ldif != undefined); + ldif = substitute_var(ldif, s4); + assert(ldif != undefined); + var ok = ldb.add(ldif); + assert(ok.error == 0); + + var ldif = " +dn: @MAP=samba3sam +@FROM: " + s4.BASEDN + " +@TO: sambaDomainName=TESTS," + s3.BASEDN + " + +dn: @MODULES +@LIST: rootdse,paged_results,server_sort,extended_dn,asq,samldb,password_hash,operational,objectguid,rdn_name,samba3sam,partition + +dn: @PARTITION +partition: " + s4.BASEDN + ":" + s4.url + " +partition: " + s3.BASEDN + ":" + s3.url + " +replicateEntries: @SUBCLASSES +replicateEntries: @ATTRIBUTES +replicateEntries: @INDEXLIST +"; + var ok = ldb.add(ldif); + assert(ok.error == 0); +} + +function test_s3sam_search(ldb) +{ + println("Looking up by non-mapped attribute"); + var msg = ldb.search("(cn=Administrator)"); + assert(msg.error == 0); + assert(msg.msgs.length == 1); + assert(msg.msgs[0].cn == "Administrator"); + + println("Looking up by mapped attribute"); + var msg = ldb.search("(name=Backup Operators)"); + assert(msg.error == 0); + assert(msg.msgs.length == 1); + assert(msg.msgs[0].name == "Backup Operators"); + + println("Looking up by old name of renamed attribute"); + var msg = ldb.search("(displayName=Backup Operators)"); + assert(msg.msgs.length == 0); + + println("Looking up mapped entry containing SID"); + var msg = ldb.search("(cn=Replicator)"); + assert(msg.error == 0); + assert(msg.msgs.length == 1); + println(msg.msgs[0].dn); + assert(msg.msgs[0].dn == "cn=Replicator,ou=Groups,dc=vernstok,dc=nl"); + assert(msg.msgs[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); + + println("Checking mapping of objectClass"); + var oc = msg.msgs[0].objectClass; + assert(oc != undefined); + for (var i in oc) { + assert(oc[i] == "posixGroup" || oc[i] == "group"); + } + + println("Looking up by objectClass"); + var msg = ldb.search("(|(objectClass=user)(cn=Administrator))"); + assert(msg.error == 0); + assert(msg.msgs.length == 2); + for (var i = 0; i < msg.msgs.length; i++) { + assert((msg.msgs[i].dn == "unixName=Administrator,ou=Users,dc=vernstok,dc=nl") || + (msg.msgs[i].dn == "unixName=nobody,ou=Users,dc=vernstok,dc=nl")); + } +} + +function test_s3sam_modify(ldb, s3) +{ + var msg, ok; + println("Adding a record that will be fallbacked"); + ok = ldb.add(" +dn: cn=Foo +foo: bar +blah: Blie +cn: Foo +showInAdvancedViewOnly: TRUE +"); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + + println("Checking for existence of record (local)"); + /* TODO: This record must be searched in the local database, which is currently only supported for base searches + * msg = ldb.search("(cn=Foo)", new Array('foo','blah','cn','showInAdvancedViewOnly')); + * TODO: Actually, this version should work as well but doesn't... + * + */ + var attrs = new Array('foo','blah','cn','showInAdvancedViewOnly'); + msg = ldb.search("(cn=Foo)", "cn=Foo", ldb.LDB_SCOPE_BASE, attrs); + assert(msg.error == 0); + assert(msg.msgs.length == 1); + assert(msg.msgs[0].showInAdvancedViewOnly == "TRUE"); + assert(msg.msgs[0].foo == "bar"); + assert(msg.msgs[0].blah == "Blie"); + + println("Adding record that will be mapped"); + ok = ldb.add(" +dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl +objectClass: user +unixName: bin +sambaUnicodePwd: geheim +cn: Niemand +"); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + assert(ok.error == 0); + + println("Checking for existence of record (remote)"); + msg = ldb.search("(unixName=bin)", new Array('unixName','cn','dn', 'sambaUnicodePwd')); + assert(msg.error == 0); + assert(msg.msgs.length == 1); + assert(msg.msgs[0].cn == "Niemand"); + assert(msg.msgs[0].sambaUnicodePwd == "geheim"); + + println("Checking for existence of record (local && remote)"); + msg = ldb.search("(&(unixName=bin)(sambaUnicodePwd=geheim))", new Array('unixName','cn','dn', 'sambaUnicodePwd')); + assert(msg.error == 0); + assert(msg.msgs.length == 1); // TODO: should check with more records + assert(msg.msgs[0].cn == "Niemand"); + assert(msg.msgs[0].unixName == "bin"); + assert(msg.msgs[0].sambaUnicodePwd == "geheim"); + + println("Checking for existence of record (local || remote)"); + msg = ldb.search("(|(unixName=bin)(sambaUnicodePwd=geheim))", new Array('unixName','cn','dn', 'sambaUnicodePwd')); + println("got " + msg.msgs.length + " replies"); + assert(msg.error == 0); + assert(msg.msgs.length == 1); // TODO: should check with more records + assert(msg.msgs[0].cn == "Niemand"); + assert(msg.msgs[0].unixName == "bin" || msg.msgs[0].sambaUnicodePwd == "geheim"); + + println("Checking for data in destination database"); + msg = s3.db.search("(cn=Niemand)"); + assert(msg.error == 0); + assert(msg.msgs.length >= 1); + assert(msg.msgs[0].sambaSID == "S-1-5-21-4231626423-2410014848-2360679739-2001"); + assert(msg.msgs[0].displayName == "Niemand"); + + println("Adding attribute..."); + ok = ldb.modify(" +dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl +changetype: modify +add: description +description: Blah +"); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + assert(ok.error == 0); + + println("Checking whether changes are still there..."); + msg = ldb.search("(cn=Niemand)"); + assert(msg.error == 0); + assert(msg.msgs.length >= 1); + assert(msg.msgs[0].cn == "Niemand"); + assert(msg.msgs[0].description == "Blah"); + + println("Modifying attribute..."); + ok = ldb.modify(" +dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl +changetype: modify +replace: description +description: Blie +"); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + assert(ok.error == 0); + + println("Checking whether changes are still there..."); + msg = ldb.search("(cn=Niemand)"); + assert(msg.error == 0); + assert(msg.msgs.length >= 1); + assert(msg.msgs[0].description == "Blie"); + + println("Deleting attribute..."); + ok = ldb.modify(" +dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl +changetype: modify +delete: description +"); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + assert(ok.error == 0); + + println("Checking whether changes are no longer there..."); + msg = ldb.search("(cn=Niemand)"); + assert(msg.error == 0); + assert(msg.msgs.length >= 1); + assert(msg.msgs[0].description == undefined); + + println("Renaming record..."); + ok = ldb.rename("cn=Niemand,cn=Users,dc=vernstok,dc=nl", "cn=Niemand2,cn=Users,dc=vernstok,dc=nl"); + assert(ok.error == 0); + + println("Checking whether DN has changed..."); + msg = ldb.search("(cn=Niemand2)"); + assert(msg.error == 0); + assert(msg.msgs.length == 1); + assert(msg.msgs[0].dn == "cn=Niemand2,cn=Users,dc=vernstok,dc=nl"); + + println("Deleting record..."); + ok = ldb.del("cn=Niemand2,cn=Users,dc=vernstok,dc=nl"); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + + println("Checking whether record is gone..."); + msg = ldb.search("(cn=Niemand2)"); + assert(msg.error == 0); + assert(msg.msgs.length == 0); +} + +function test_map_search(ldb, s3, s4) +{ + println("Running search tests on mapped data"); + var res; + var dn; + var attrs; + + + var ldif = " +dn: " + "sambaDomainName=TESTS," + s3.BASEDN + " +objectclass: sambaDomain +objectclass: top +sambaSID: S-1-5-21-4231626423-2410014848-2360679739 +sambaNextRid: 2000 +sambaDomainName: TESTS" + ldif = substitute_var(ldif, s3); + assert(ldif != undefined); + var ok = s3.db.add(ldif); + assert(ok.error == 0); + + printf("Add a set of split records"); + var ldif = " +dn: " + s4.dn("cn=X") + " +objectClass: user +cn: X +codePage: x +revision: x +dnsHostName: x +nextRid: y +lastLogon: x +description: x +objectSid: S-1-5-21-4231626423-2410014848-2360679739-552 +primaryGroupID: 1-5-21-4231626423-2410014848-2360679739-512 + +dn: " + s4.dn("cn=Y") + " +objectClass: top +cn: Y +codePage: x +revision: x +dnsHostName: y +nextRid: y +lastLogon: y +description: x + +dn: " + s4.dn("cn=Z") + " +objectClass: top +cn: Z +codePage: x +revision: y +dnsHostName: z +nextRid: y +lastLogon: z +description: y +"; + + ldif = substitute_var(ldif, s4); + assert(ldif != undefined); + var ok = ldb.add(ldif); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + + println("Add a set of remote records"); + + var ldif = " +dn: " + s3.dn("cn=A") + " +objectClass: posixAccount +cn: A +sambaNextRid: x +sambaBadPasswordCount: x +sambaLogonTime: x +description: x +sambaSID: S-1-5-21-4231626423-2410014848-2360679739-552 +sambaPrimaryGroupSID: S-1-5-21-4231626423-2410014848-2360679739-512 + +dn: " + s3.dn("cn=B") + " +objectClass: top +cn:B +sambaNextRid: x +sambaBadPasswordCount: x +sambaLogonTime: y +description: x + +dn: " + s3.dn("cn=C") + " +objectClass: top +cn: C +sambaNextRid: x +sambaBadPasswordCount: y +sambaLogonTime: z +description: y +"; + ldif = substitute_var(ldif, s3); + assert(ldif != undefined); + var ok = s3.db.add(ldif); + assert(ok.error == 0); + + println("Testing search by DN"); + + /* Search remote record by local DN */ + dn = s4.dn("cn=A"); + attrs = new Array("dnsHostName", "lastLogon"); + res = ldb.search("", dn, ldb.SCOPE_BASE, attrs); + assert(res.error == 0); + assert(res.msgs.length == 1); + assert(res.msgs[0].dn == dn); + assert(res.msgs[0].dnsHostName == undefined); + assert(res.msgs[0].lastLogon == "x"); + + /* Search remote record by remote DN */ + dn = s3.dn("cn=A"); + attrs = new Array("dnsHostName", "lastLogon", "sambaLogonTime"); + res = s3.db.search("", dn, ldb.SCOPE_BASE, attrs); + assert(res.error == 0); + assert(res.msgs.length == 1); + assert(res.msgs[0].dn == dn); + assert(res.msgs[0].dnsHostName == undefined); + assert(res.msgs[0].lastLogon == undefined); + assert(res.msgs[0].sambaLogonTime == "x"); + + /* Search split record by local DN */ + dn = s4.dn("cn=X"); + attrs = new Array("dnsHostName", "lastLogon"); + res = ldb.search("", dn, ldb.SCOPE_BASE, attrs); + assert(res.error == 0); + assert(res.msgs.length == 1); + assert(res.msgs[0].dn == dn); + assert(res.msgs[0].dnsHostName == "x"); + assert(res.msgs[0].lastLogon == "x"); + + /* Search split record by remote DN */ + dn = s3.dn("cn=X"); + attrs = new Array("dnsHostName", "lastLogon", "sambaLogonTime"); + res = s3.db.search("", dn, ldb.SCOPE_BASE, attrs); + assert(res.error == 0); + assert(res.msgs.length == 1); + assert(res.msgs[0].dn == dn); + assert(res.msgs[0].dnsHostName == undefined); + assert(res.msgs[0].lastLogon == undefined); + assert(res.msgs[0].sambaLogonTime == "x"); + + println("Testing search by attribute"); + + /* Search by ignored attribute */ + attrs = new Array("dnsHostName", "lastLogon"); + res = ldb.search("(revision=x)", NULL, ldb. SCOPE_DEFAULT, attrs); + assert(res.error == 0); + assert(res.msgs.length == 2); + assert(res.msgs[0].dn == s4.dn("cn=Y")); + assert(res.msgs[0].dnsHostName == "y"); + assert(res.msgs[0].lastLogon == "y"); + assert(res.msgs[1].dn == s4.dn("cn=X")); + assert(res.msgs[1].dnsHostName == "x"); + assert(res.msgs[1].lastLogon == "x"); + + /* Search by kept attribute */ + attrs = new Array("dnsHostName", "lastLogon"); + res = ldb.search("(description=y)", NULL, ldb. SCOPE_DEFAULT, attrs); + assert(res.error == 0); + assert(res.msgs.length == 2); + assert(res.msgs[0].dn == s4.dn("cn=Z")); + assert(res.msgs[0].dnsHostName == "z"); + assert(res.msgs[0].lastLogon == "z"); + assert(res.msgs[1].dn == s4.dn("cn=C")); + assert(res.msgs[1].dnsHostName == undefined); + assert(res.msgs[1].lastLogon == "z"); + + /* Search by renamed attribute */ + attrs = new Array("dnsHostName", "lastLogon"); + res = ldb.search("(badPwdCount=x)", NULL, ldb. SCOPE_DEFAULT, attrs); + assert(res.error == 0); + assert(res.msgs.length == 2); + assert(res.msgs[0].dn == s4.dn("cn=B")); + assert(res.msgs[0].dnsHostName == undefined); + assert(res.msgs[0].lastLogon == "y"); + assert(res.msgs[1].dn == s4.dn("cn=A")); + assert(res.msgs[1].dnsHostName == undefined); + assert(res.msgs[1].lastLogon == "x"); + + /* Search by converted attribute */ + attrs = new Array("dnsHostName", "lastLogon", "objectSid"); + /* TODO: + Using the SID directly in the parse tree leads to conversion + errors, letting the search fail with no results. + res = ldb.search("(objectSid=S-1-5-21-4231626423-2410014848-2360679739-552)", NULL, ldb. SCOPE_DEFAULT, attrs); + */ + res = ldb.search("(objectSid=*)", NULL, ldb. SCOPE_DEFAULT, attrs); + assert(res.error == 0); + assert(res.msgs.length == 3); + assert(res.msgs[0].dn == s4.dn("cn=X")); + assert(res.msgs[0].dnsHostName == "x"); + assert(res.msgs[0].lastLogon == "x"); + assert(res.msgs[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); + assert(res.msgs[1].dn == s4.dn("cn=A")); + assert(res.msgs[1].dnsHostName == undefined); + assert(res.msgs[1].lastLogon == "x"); + assert(res.msgs[1].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); + + /* Search by generated attribute */ + /* In most cases, this even works when the mapping is missing + * a `convert_operator' by enumerating the remote db. */ + attrs = new Array("dnsHostName", "lastLogon", "primaryGroupID"); + res = ldb.search("(primaryGroupID=512)", NULL, ldb. SCOPE_DEFAULT, attrs); + assert(res.error == 0); + assert(res.msgs.length == 1); + assert(res.msgs[0].dn == s4.dn("cn=A")); + assert(res.msgs[0].dnsHostName == undefined); + assert(res.msgs[0].lastLogon == "x"); + assert(res.msgs[0].primaryGroupID == "512"); + + /* TODO: There should actually be two results, A and X. The + * primaryGroupID of X seems to get corrupted somewhere, and the + * objectSid isn't available during the generation of remote (!) data, + * which can be observed with the following search. Also note that Xs + * objectSid seems to be fine in the previous search for objectSid... */ + /* + res = ldb.search("(primaryGroupID=*)", NULL, ldb. SCOPE_DEFAULT, attrs); + println(res.msgs.length + " results found"); + for (i=0;i Date: Thu, 28 Feb 2008 08:37:11 +1100 Subject: Extend the ldap.js test Now we verify sAMAccountType and userAccountControl, as well as rename and DN mismatch semantics. Andrew Bartlett (This used to be commit 0a5fa41dd7ed76e4848fe4a779edff2a12e8ea67) --- testprogs/ejs/ldap.js | 168 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 158 insertions(+), 10 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 090f93b6ca..c30f29e249 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -29,14 +29,19 @@ function basic_tests(ldb, gc_ldb, base_dn, configuration_dn, schema_dn) { println("Running basic tests"); + ldb.del("cn=ldaptestcomputer,cn=computers," + base_dn); + ldb.del("cn=ldaptestcomputer3,cn=computers," + base_dn); + ldb.del("cn=ldaptest2computer,cn=computers," + base_dn); ldb.del("cn=ldaptestuser,cn=users," + base_dn); ldb.del("cn=ldaptestuser2,cn=users," + base_dn); ldb.del("cn=ldaptestuser3,cn=users," + base_dn); ldb.del("cn=ldaptestuser4,cn=users," + base_dn); ldb.del("cn=ldaptestuser5,cn=users," + base_dn); ldb.del("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn); + ldb.del("cn=ldaptestuser7,cn=users," + base_dn); ldb.del("CN=ldaptestcontainer2," + base_dn); ldb.del("cn=ldaptestgroup,cn=users," + base_dn); + ldb.del("cn=ldaptestgroup2,cn=users," + base_dn); println("Testing group add with invalid member"); var ok = ldb.add(" @@ -127,7 +132,7 @@ displayname: ldap testy ok = ldb.del("cn=ldaptest2computer,cn=computers," + base_dn); if (ok.error != 0) { println(ok.errstr); - assert(ok.error == 0); + // assert(ok.error == 0); } ok = ldb.add(" dn: cn=ldaptest2computer,cn=computers," + base_dn + " @@ -142,6 +147,113 @@ displayname: ldap testy } } + var ok = ldb.add(" +dn: cn=ldaptestcomputer3,cn=computers," + base_dn + " +objectClass: computer +cn: LDAPtest2COMPUTER +"); + if (ok.error != 34) { + println("Did not reject invalid RDN compared with DN: " + ok.errstr); + assert(ok.error == 34); + } + + var ok = ldb.add(" +dn: cn=ldaptestcomputer3,cn=computers," + base_dn + " +objectClass: computer +cn: LDAPtestCOMPUTER3 +sAMAccountType: 805306368 +"); + + if (ok.error != 53) { + println("Did not reject invalid 'sAMAccountType: 805306368': " + ok.errstr); + assert(ok.error == 53); + } + + var ok = ldb.add(" +dn: cn=ldaptestcomputer3,cn=computers," + base_dn + " +objectClass: computer +cn: LDAPtestCOMPUTER3 +userAccountControl: 0 +"); + + if (ok.error != 53) { + println("Did not reject invalid 'userAccountControl: 0': " + ok.errstr); + assert(ok.error == 53); + } + + var ok = ldb.add(" +dn: cn=ldaptestuser7,cn=users," + base_dn + " +objectClass: user +cn: LDAPtestuser7 +userAccountControl: 0 +"); + + if (ok.error != 53) { + println("Did not reject invalid 'userAccountControl: 0': " + ok.errstr); + assert(ok.error == 53); + } + + var ok = ldb.add(" +dn: cn=ldaptestuser7,cn=users," + base_dn + " +objectClass: user +cn: LDAPtestuser7 +userAccountControl: 2 +"); + + if (ok.error != 0) { + println("Did not accept 'userAccountControl: 2': " + ok.errstr); + assert(ok.error == 0); + } + + ldb.del("cn=ldaptestuser7,cn=users," + base_dn); + + var ok = ldb.add(" +dn: cn=ldaptestcomputer3,cn=computers," + base_dn + " +objectclass: computer +cN: LDAPtestCOMPUTER3 +"); + if (ok.error != 0) { + ok = ldb.del("cn=ldaptestcomputer3,cn=computers," + base_dn); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + ok = ldb.add(" +dn: cn=ldaptestcomputer3,cn=computers," + base_dn + " +objectClass: computer +cn: LDAPtestCOMPUTER3 +"); + if (ok.error != 0) { + println(ok.errstr); + assert(ok.error == 0); + } + } + + println("Testing ldb.search for (&(cn=ldaptestcomputer3)(objectClass=user))"); + var res = ldb.search("(&(cn=ldaptestcomputer3)(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (&(cn=ldaptestcomputer3)(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + + assert(res.msgs[0].dn == ("CN=ldaptestcomputer3,CN=Computers," + base_dn)); + assert(res.msgs[0].cn == "ldaptestcomputer3"); + assert(res.msgs[0].name == "ldaptestcomputer3"); + assert(res.msgs[0].objectClass[0] == "top"); + assert(res.msgs[0].objectClass[1] == "person"); + assert(res.msgs[0].objectClass[2] == "organizationalPerson"); + assert(res.msgs[0].objectClass[3] == "user"); + assert(res.msgs[0].objectClass[4] == "computer"); + assert(res.msgs[0].objectGUID != undefined); + assert(res.msgs[0].whenCreated != undefined); + assert(res.msgs[0].objectCategory == ("CN=Computer,CN=Schema,CN=Configuration," + base_dn)); + assert(res.msgs[0].primaryGroupID == 513); + assert(res.msgs[0].sAMAccountType == 805306368); + assert(res.msgs[0].userAccountControl == 546); + + ldb.del(res.msgs[0].dn); + println("Testing attribute or value exists behaviour"); ok = ldb.modify(" dn: cn=ldaptest2computer,cn=computers," + base_dn + " @@ -374,6 +486,13 @@ sn: ldap user2 assert(res.msgs.length == 2); } + var res = ldb.search("(&(anr=testy ldap)(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 2) { + println("Found only " + res.msgs.length + " for (&(anr=\"testy ldap\")(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 2); + } + // Testing ldb.search for (&(anr=ldap)(objectClass=user)) var res = ldb.search("(&(anr=ldap)(objectClass=user))"); if (res.error != 0 || res.msgs.length != 4) { @@ -547,6 +666,38 @@ member: cn=ldaptestuser3,cn=users," + base_dn + " assert(res.msgs[0].cn == "ldaptestUSER3"); assert(res.msgs[0].name == "ldaptestUSER3"); + println("Testing ldb.search for (&(&(cn=ldaptestuser3)(userAccountControl=*))(objectClass=user))"); + var res = ldb.search("(&(&(cn=ldaptestuser3)(userAccountControl=*))(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (&(cn=ldaptestuser3)(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + + assert(res.msgs[0].dn == ("CN=ldaptestUSER3,CN=Users," + base_dn)); + assert(res.msgs[0].cn == "ldaptestUSER3"); + assert(res.msgs[0].name == "ldaptestUSER3"); + + println("Testing ldb.search for (&(&(cn=ldaptestuser3)(userAccountControl=546))(objectClass=user))"); + var res = ldb.search("(&(&(cn=ldaptestuser3)(userAccountControl=546))(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 1) { + println("Could not find (&(&(cn=ldaptestuser3)(userAccountControl=546))(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 1); + } + + assert(res.msgs[0].dn == ("CN=ldaptestUSER3,CN=Users," + base_dn)); + assert(res.msgs[0].cn == "ldaptestUSER3"); + assert(res.msgs[0].name == "ldaptestUSER3"); + + println("Testing ldb.search for (&(&(cn=ldaptestuser3)(userAccountControl=547))(objectClass=user))"); + var res = ldb.search("(&(&(cn=ldaptestuser3)(userAccountControl=547))(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 0) { + println("Should not find (&(&(cn=ldaptestuser3)(userAccountControl=547))(objectClass=user))"); + assert(res.error == 0); + assert(res.msgs.length == 0); + } + // This is a Samba special, and does not exist in real AD // println("Testing ldb.search for (dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); // var res = ldb.search("(dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); @@ -840,7 +991,7 @@ objectClass: user assert(res.msgs[0].whenCreated != undefined); assert(res.msgs[0].objectCategory == ("CN=Person,CN=Schema,CN=Configuration," + base_dn)); assert(res.msgs[0].sAMAccountType == 805306368); -// assert(res[0].userAccountControl == 546); + assert(res.msgs[0].userAccountControl == 546); assert(res.msgs[0].memberOf[0] == ("CN=ldaptestgroup2,CN=Users," + base_dn)); assert(res.msgs[0].memberOf.length == 1); @@ -901,7 +1052,7 @@ objectClass: user println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectClass=user))"); var res = ldb.search("(&(cn=ldaptestcomputer)(objectClass=user))"); if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(cn=ldaptestuser)(objectClass=user))"); + println("Could not find (&(cn=ldaptestcomputer)(objectClass=user))"); assert(res.error == 0); assert(res.msgs.length == 1); } @@ -916,12 +1067,9 @@ objectClass: user assert(res.msgs[0].objectClass[4] == "computer"); assert(res.msgs[0].objectGUID != undefined); assert(res.msgs[0].whenCreated != undefined); - assert(res.msgs[0].objectCategory == ("CN=Computer,CN=Schema,CN=Configuration," + base_dn)); - assert(res.msgs[0].primaryGroupID == 513); -// assert(res.msgs[0].sAMAccountType == 805306368); -// assert(res.msgs[0].userAccountControl == 546); - assert(res.msgs[0].memberOf[0] == ("CN=ldaptestgroup2,CN=Users," + base_dn)); - assert(res.msgs[0].memberOf.length == 1); + assert(res.msgs[0].objectCategory == "cn=Computer,cn=Schema,cn=Configuration," + base_dn); + assert(res.msgs[0].sAMAccountType == 805306368); + assert(res.msgs[0].userAccountControl == 546); println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); var res2 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); @@ -1023,7 +1171,7 @@ objectClass: user assert(res.msgs[0].whenCreated != undefined); assert(res.msgs[0].objectCategory == "cn=Computer,cn=Schema,cn=Configuration," + base_dn); assert(res.msgs[0].sAMAccountType == 805306369); -// assert(res.msgs[0].userAccountControl == 4098); + assert(res.msgs[0].userAccountControl == 4096); ok = ldb.del(res.msgs[0].dn); -- cgit From 736ae6a56653a8d20f57a7b8a6221eb45dba720c Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 4 Mar 2008 11:27:57 +1100 Subject: Don't hardcode objectCategory into the schema, even in the schema. We now load the schema early enough that we can generate this too! Andrew Bartlett (This used to be commit 1adc74c65a3219fc110964ccdf9a9d60a84831da) --- testprogs/ejs/minschema.js | 3 --- 1 file changed, 3 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/minschema.js b/testprogs/ejs/minschema.js index b02286517a..5f873dd6c4 100755 --- a/testprogs/ejs/minschema.js +++ b/testprogs/ejs/minschema.js @@ -92,7 +92,6 @@ class_attrs = new Array("objectClass", "defaultSecurityDescriptor", "systemFlags", "defaultHidingValue", - "objectCategory", "defaultObjectCategory", /* this attributes are not used by w2k3 */ @@ -124,7 +123,6 @@ attrib_attrs = new Array("objectClass", "systemOnly", "systemFlags", "isMemberOfPartialAttributeSet", - "objectCategory", /* this attributes are not used by w2k3 */ "schemaFlagsEx", @@ -706,7 +704,6 @@ function write_aggregate() { printf("dn: CN=Aggregate,${SCHEMADN}\n"); print("objectClass: top objectClass: subSchema -objectCategory: CN=SubSchema,${SCHEMADN} "); if (dump_subschema_auto == undefined) { return; -- cgit From 3cdf0c64ddf5c10037e9f02b7dd568342d0609b2 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 19 Mar 2008 12:12:24 +1100 Subject: Extend the ldap.js test to prove faults with the LDAP backend. Try to provide more information to see why OpenLDAP isn't quite up to being a Samba4 Backend. Andrew Bartlett (This used to be commit 89458c7d8b46cf5cf6c0dc514bb7e658f48c2adf) --- testprogs/ejs/ldap.js | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index c30f29e249..44e4c83e67 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -866,12 +866,30 @@ member: cn=ldaptestuser4,cn=ldaptestcontainer," + base_dn + " } assert(res.msgs[0].dn == ("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn)); - assert(strupper(res.msgs[0].memberOf[0]) == strupper(("CN=ldaptestgroup2,CN=Users," + base_dn))); + assert(strupper(res.msgs[0].memberOf[0]) == (strupper("CN=ldaptestgroup2,CN=Users," + base_dn))); - println("Testing ldb.search for (&(member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ")(objectclass=group)) to check subtree renames and linked attributes"); - var res = ldb.search("(&(member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ")(objectclass=group))", base_dn, ldb.SCOPE_SUBTREE); + println("Testing ldb.search for (&(cn=ldaptestgroup2)(objectClass=group)) in cn=users"); + var res_group = ldb.search("(&(cn=ldaptestgroup2)(objectClass=group))", "cn=users," + base_dn, ldb.SCOPE_SUBTREE); + if (res_group.error != 0 || res_group.msgs.length != 1) { + println("Could not find (&(cn=ldaptestgroup2)(objectClass=group)) under cn=users," + base_dn); + assert(res_group.error == 0); + assert(res_group.msgs.length == 1); + } + + println("Testing ldb.search for (member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ") to check subtree renames and linked attributes"); + var res = ldb.search("(member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ")", base_dn, ldb.SCOPE_SUBTREE); if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ")(objectclass=group)), perhaps linked attributes are not conistant with subtree renames?"); + for (i=0; i < res_group.msgs[0].member.length; i++) { + println("res_group.member[" + i + "]: " + res_group.msgs[0].member[i]); + } + + println("Could not find (member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + "), perhaps linked attributes are not conistant with subtree renames?"); + println("Testing ldb.search for (member=CN=ldaptestuser4,CN=ldaptestcontainer," + base_dn + ") to check if it just hasn't been updated"); + var res2 = ldb.search("(member=CN=ldaptestuser4,CN=ldaptestcontainer," + base_dn + ")", base_dn, ldb.SCOPE_SUBTREE); + if (res2.error != 0 || res2.msgs.length != 1) { + println("Could not find (member=CN=ldaptestuser4,CN=ldaptestcontainer," + base_dn + "), very odd, it wasn't here at all.."); + } + assert(res.error == 0); assert(res.msgs.length == 1); } @@ -992,7 +1010,7 @@ objectClass: user assert(res.msgs[0].objectCategory == ("CN=Person,CN=Schema,CN=Configuration," + base_dn)); assert(res.msgs[0].sAMAccountType == 805306368); assert(res.msgs[0].userAccountControl == 546); - assert(res.msgs[0].memberOf[0] == ("CN=ldaptestgroup2,CN=Users," + base_dn)); + assert(strupper(res.msgs[0].memberOf[0]) == strupper("CN=ldaptestgroup2,CN=Users," + base_dn)); assert(res.msgs[0].memberOf.length == 1); println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))"); -- cgit From c6132465d166c2760b6ab291fea90c216b920372 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 22 May 2008 12:34:50 +0200 Subject: Remove unused EJS testprogs. (This used to be commit e14c9302009b371f385612d2fd500773d238006a) --- testprogs/ejs/loadparm.js | 25 ------------------------- testprogs/ejs/resolveName.js | 13 ------------- 2 files changed, 38 deletions(-) delete mode 100644 testprogs/ejs/loadparm.js delete mode 100644 testprogs/ejs/resolveName.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/loadparm.js b/testprogs/ejs/loadparm.js deleted file mode 100644 index f56ca9f7fc..0000000000 --- a/testprogs/ejs/loadparm.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - demonstrate access to loadparm functions from ejs -*/ - -loadparm_init(local); - -function showParameter(name) { - print(name + ": "); - printVars(get(name)); -} - -for (v in ARGV) { - showParameter(ARGV[v]); -} - -print("defined services: "); -printVars(services()); - -showParameter("server services"); -showParameter("netbios name"); -showParameter("security"); -showParameter("workgroup"); -showParameter("log level"); -showParameter("server signing"); -showParameter("interfaces"); diff --git a/testprogs/ejs/resolveName.js b/testprogs/ejs/resolveName.js deleted file mode 100644 index 1619b69d69..0000000000 --- a/testprogs/ejs/resolveName.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Demonstrate use of resolveName() js function -*/ - -var result = new Object(); - -res = resolveName(result, ARGV[0]); - -if (res.is_ok) { - println(result.value); -} else { - println(res.errstr); -} -- cgit From 27005cb7a2182c50c8bf9e683de1bea2613a3078 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 22 May 2008 05:13:31 +0200 Subject: Convert samr test to python. (This used to be commit 88d473b202e82b462ef82ffdeb4f1710918ffda5) --- testprogs/ejs/samr.js | 126 -------------------------------------------------- 1 file changed, 126 deletions(-) delete mode 100755 testprogs/ejs/samr.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/samr.js b/testprogs/ejs/samr.js deleted file mode 100755 index fbdae974be..0000000000 --- a/testprogs/ejs/samr.js +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/env smbscript -/* - test samr calls from ejs -*/ - -var options = GetOptions(ARGV, - "POPT_AUTOHELP", - "POPT_COMMON_SAMBA", - "POPT_COMMON_CREDENTIALS"); -if (options == undefined) { - println("Failed to parse options"); - return -1; -} - -libinclude("base.js"); -libinclude("samr.js"); - - -/* - test the samr_Connect interface -*/ -function test_Connect(samr) -{ - print("Testing samr_Connect\n"); - return samrConnect(samr); -} - - -/* - test the samr_LookupDomain interface -*/ -function test_LookupDomain(samr, handle, domain) -{ - print("Testing samr_LookupDomain\n"); - return samrLookupDomain(samr, handle, domain); -} - -/* - test the samr_OpenDomain interface -*/ -function test_OpenDomain(samr, handle, sid) -{ - print("Testing samr_OpenDomain\n"); - return samrOpenDomain(samr, handle, sid); -} - -/* - test the samr_EnumDomainUsers interface -*/ -function test_EnumDomainUsers(samr, dom_handle) -{ - var i, users; - print("Testing samr_EnumDomainUsers\n"); - users = samrEnumDomainUsers(samr, dom_handle); - print("Found " + users.length + " users\n"); - for (i=0;i"); - return -1; -} -var binding = options.ARGV[0]; -var samr = samr_init(); - -print("Connecting to " + binding + "\n"); -status = samr.connect(binding); -if (status.is_ok != true) { - print("Failed to connect to " + binding + " - " + status.errstr + "\n"); - return -1; -} - -handle = test_Connect(samr); -test_EnumDomains(samr, handle); -samrClose(samr, handle); - -print("All OK\n"); -return 0; -- cgit From fb7e359561b77444feae0c71b034c7cac1820694 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 22 May 2008 05:23:50 +0200 Subject: Remove unused echo ejs script. (This used to be commit 3a6b009d505503b2eb22acadeaac485151ed0173) --- testprogs/ejs/echo.js | 235 -------------------------------------------------- 1 file changed, 235 deletions(-) delete mode 100755 testprogs/ejs/echo.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/echo.js b/testprogs/ejs/echo.js deleted file mode 100755 index 3750baf0fb..0000000000 --- a/testprogs/ejs/echo.js +++ /dev/null @@ -1,235 +0,0 @@ -#!/usr/bin/env smbscript -/* - test echo pipe calls from ejs -*/ - -var options = GetOptions(ARGV, - "POPT_AUTOHELP", - "POPT_COMMON_SAMBA", - "POPT_COMMON_CREDENTIALS"); -if (options == undefined) { - println("Failed to parse options"); - return -1; -} - -libinclude("base.js"); - -/* - generate a ramp as an integer array - */ -function ramp_array(N) -{ - var a = new Array(N); - var data = datablob_init(); - for (i=0;i"); - return -1; -} -var binding = options.ARGV[0]; -var echo = rpcecho_init(); -datablob_init(echo); - -print("Connecting to " + binding + "\n"); -status = echo.connect(binding); -if (status.is_ok != true) { - printf("Failed to connect to %s - %s\n", binding, status.errstr); - return; -} - -test_AddOne(echo); -test_EchoData(echo); -test_SinkData(echo); -test_SourceData(echo); - -print("SKIPPING test_TestCall as pidl cannot generate code for it\n"); -/* test_TestCall(echo); */ -test_TestCall2(echo); -test_TestSleep(echo); -test_TestEnum(echo); -test_TestSurrounding(echo); -test_TestDoublePointer(echo); - -println("All OK\n"); -return 0; -- cgit From 9e37d25a92eaa7c65bb5d4822832fbf98a9504cb Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 26 May 2008 13:34:36 +0200 Subject: Remove unused scripts. (This used to be commit 3d22b72bb780065059f45ebeb6025d1bceb1f5b6) --- testprogs/ejs/argv.js | 14 -------------- testprogs/ejs/nbtstats | 33 --------------------------------- 2 files changed, 47 deletions(-) delete mode 100644 testprogs/ejs/argv.js delete mode 100755 testprogs/ejs/nbtstats (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/argv.js b/testprogs/ejs/argv.js deleted file mode 100644 index ffb6e007eb..0000000000 --- a/testprogs/ejs/argv.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - demonstrate use of GetOptions -*/ - -var options = GetOptions(ARGV, - "POPT_AUTOHELP", - "POPT_COMMON_SAMBA", - "myopt=s", - "intopt=i", - "noopt"); - -println("You called this script with arguments:"); - -printVars(options); diff --git a/testprogs/ejs/nbtstats b/testprogs/ejs/nbtstats deleted file mode 100755 index 1c8a6a5e7e..0000000000 --- a/testprogs/ejs/nbtstats +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env smbscript -/* - demonstrate access to irpc calls from ejs -*/ - -var options = GetOptions(ARGV, - "POPT_AUTOHELP", - "POPT_COMMON_SAMBA"); -if (options == undefined) { - println("Failed to parse options"); - return -1; -} - -var conn = new Object(); -var irpc = irpc_init(); - -status = irpc_connect(conn, "nbt_server"); -assert(status.is_ok == true); - -io = new Object(); -io.input = new Object(); -io.input.level = irpc.NBTD_INFO_STATISTICS; -status = irpc.nbtd_information(conn, io); -assert(status.is_ok == true); -assert(io.results.length == 1); - -print("nbt_server statistics:\n"); -stats = io.results[0].info.stats; - -for (r in stats) { - print("\t" + r + ":\t" + stats[r] + "\n"); -} -return 0; -- cgit From 4e9ca6caf913016292a3f7555bd91768d6f90efd Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 26 May 2008 14:00:28 +0200 Subject: Remove unused EJS net bindings. (This used to be commit 3923414849c5a3b14379e2cd3e61d862150800a6) --- testprogs/ejs/ejsnet.js | 46 ---------------------- testprogs/ejs/ejsnet/nethost.js | 45 --------------------- testprogs/ejs/ejsnet/netusr.js | 86 ----------------------------------------- 3 files changed, 177 deletions(-) delete mode 100755 testprogs/ejs/ejsnet.js delete mode 100644 testprogs/ejs/ejsnet/nethost.js delete mode 100644 testprogs/ejs/ejsnet/netusr.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ejsnet.js b/testprogs/ejs/ejsnet.js deleted file mode 100755 index a5570de34c..0000000000 --- a/testprogs/ejs/ejsnet.js +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env smbscript - -libinclude("base.js"); - -/* note: these require specifying a proper path in "js include" parameter */ -libinclude("ejsnet/netusr.js"); -libinclude("ejsnet/nethost.js"); - -function PrintNetHelp() -{ - println("Usage: ejsnet.js [options]"); -} - -/* here we start */ - -var options = GetOptions(ARGV, - "POPT_AUTOHELP", - "POPT_COMMON_SAMBA", - "POPT_COMMON_CREDENTIALS"); -if (options == undefined) { - PrintNetHelp(); - return -1; -} - -if (options.ARGV.length < 1) { - PrintNetHelp(); - return -1; -} - -/* use command line creds if available */ -var creds = options.get_credentials(); -var ctx = NetContext(creds); - -var cmd = options.ARGV[0]; -if (cmd == "user") { - UserManager(ctx, options); - -} else if (cmd == "host") { - HostManager(ctx, options); - -} else { - PrintNetHelp(); - return -1; -} - -return 0; diff --git a/testprogs/ejs/ejsnet/nethost.js b/testprogs/ejs/ejsnet/nethost.js deleted file mode 100644 index 9e11ae89c5..0000000000 --- a/testprogs/ejs/ejsnet/nethost.js +++ /dev/null @@ -1,45 +0,0 @@ -function PrintNetHostHelp() -{ - println("Host management - available commands:"); - println("\t domainlist - list users in specified domain"); -} - - -function ListDomains(hostCtx) -{ - var domain; - - var list = hostCtx.DomainList(); - if (list == undefined) { - println("Error when listing domains"); - return -1; - } - - for (var i = 0; i < list.Count; i++) { - domain = list.Domains[i]; - printf("%s\n", domain.Name); - } - - printf("\nResult: %s\n", list.Status.errstr); -} - - -function HostManager(ctx, options) -{ - var hostCtx; - - if (options.ARGV.length < 2) { - PrintNetHostHelp(); - return -1; - } - - var hostCmd = options.ARGV[1]; - - if (hostCmd == "domainlist") { - hostCtx = ctx.HostMgr(); - ListDomains(hostCtx); - - } else { - println("unknown command"); - } -} diff --git a/testprogs/ejs/ejsnet/netusr.js b/testprogs/ejs/ejsnet/netusr.js deleted file mode 100644 index da6e851ce7..0000000000 --- a/testprogs/ejs/ejsnet/netusr.js +++ /dev/null @@ -1,86 +0,0 @@ -function PrintNetUsrHelp(options) -{ - println("User management - available commands:"); - println("\t list - list users in specified domain"); - println("\t info - display user account information"); -} - - -function ListUsers(usrCtx) -{ - var list, user; - var finished = false; - - for (list = usrCtx.List(list); list.Status.is_ok && !finished; list = usrCtx.List(list)) { - for (i = 0; i < list.Count; i++) { - user = list.Users[i]; - printf("%s\n", user.Username); - } - - finished = list.EndOfList; - } - - printf("\nResult: %s\n", list.Status.errstr); -} - - -function UserInfo(usrCtx, username) -{ - var info; - - info = usrCtx.Info(username); - if (info == null) { - println("Account unknown"); - return -1; - } - - println("User account info:\n"); - printf("AccountName = %s\n", info.AccountName); - printf("Description = %s\n", info.Description); - printf("FullName = %s\n", info.FullName); - printf("AcctExpiry = %s\n", info.AcctExpiry); -} - - -function UserManager(ctx, options) -{ - var usrCtx; - - if (options.ARGV.length < 2) { - PrintNetUsrHelp(options); - return -1; - - } - - var usrCmd = options.ARGV[1]; - - if (usrCmd == "create") { - - } else if (usrCmd == "info") { - var userName; - - if (options.ARGV.length > 2) { - userName = options.ARGV[2]; - } else { - println("No username provided"); - return -1; - } - usrCtx = ctx.UserMgr(); - - UserInfo(usrCtx, userName); - - } else if (usrCmd == "list") { - - if (options.ARGV.length > 2) { - usrCtx = ctx.UserMgr(options.ARGV[2]); - } else { - usrCtx = ctx.UserMgr(); - } - - ListUsers(usrCtx); - - } else { - println("Unknown command specified."); - PrintNetUsrHelp(options); - } -} -- cgit From 446748bfe1f06d0900e44fe8acafdf856d54486e Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 3 Jun 2008 23:27:22 +1000 Subject: Align the Python and EJS ldap tests. We should now (need to review and compare them once more) be able to remove ldap.js (and once samba3sam.js is done, smbscript). Andrew Bartlett (This used to be commit f65e43e9456e8e951d172779cba53ab417114b20) --- testprogs/ejs/ldap.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js index 44e4c83e67..a5e6ab37c4 100755 --- a/testprogs/ejs/ldap.js +++ b/testprogs/ejs/ldap.js @@ -486,11 +486,11 @@ sn: ldap user2 assert(res.msgs.length == 2); } - var res = ldb.search("(&(anr=testy ldap)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 2) { - println("Found only " + res.msgs.length + " for (&(anr=\"testy ldap\")(objectClass=user))"); + var res = ldb.search("(&(anr=\"testy ldap\")(objectClass=user))"); + if (res.error != 0 || res.msgs.length != 0) { + println("Found " + res.msgs.length + " for (&(anr=\"testy ldap\")(objectClass=user))"); assert(res.error == 0); - assert(res.msgs.length == 2); + assert(res.msgs.length == 0); } // Testing ldb.search for (&(anr=ldap)(objectClass=user)) -- cgit From 48100ca5c6ccfda390ca7804ddbb6726e8631428 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 19 Jun 2008 14:53:14 +1000 Subject: Remove old ldap.js test, we have replicated it in python now. This will soon allow the removal of smbscript, once the samba3sam test conversion is complete. Andrew Bartlett (This used to be commit 60c93b9777d9bd7dce89f9024ba767f5404ac72d) --- testprogs/ejs/ldap.js | 1596 ------------------------------------------------- 1 file changed, 1596 deletions(-) delete mode 100755 testprogs/ejs/ldap.js (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/ldap.js b/testprogs/ejs/ldap.js deleted file mode 100755 index a5e6ab37c4..0000000000 --- a/testprogs/ejs/ldap.js +++ /dev/null @@ -1,1596 +0,0 @@ -#!/bin/sh -exec smbscript "$0" ${1+"$@"} -/* - test certin LDAP behaviours -*/ - -var ldb = ldb_init(); -var gc_ldb = ldb_init(); - -var options = GetOptions(ARGV, - "POPT_AUTOHELP", - "POPT_COMMON_SAMBA", - "POPT_COMMON_CREDENTIALS"); -if (options == undefined) { - println("Failed to parse options"); - return -1; -} - -libinclude("base.js"); - -if (options.ARGV.length != 1) { - println("Usage: ldap.js "); - return -1; -} - -var host = options.ARGV[0]; - -function basic_tests(ldb, gc_ldb, base_dn, configuration_dn, schema_dn) -{ - println("Running basic tests"); - - ldb.del("cn=ldaptestcomputer,cn=computers," + base_dn); - ldb.del("cn=ldaptestcomputer3,cn=computers," + base_dn); - ldb.del("cn=ldaptest2computer,cn=computers," + base_dn); - ldb.del("cn=ldaptestuser,cn=users," + base_dn); - ldb.del("cn=ldaptestuser2,cn=users," + base_dn); - ldb.del("cn=ldaptestuser3,cn=users," + base_dn); - ldb.del("cn=ldaptestuser4,cn=users," + base_dn); - ldb.del("cn=ldaptestuser5,cn=users," + base_dn); - ldb.del("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn); - ldb.del("cn=ldaptestuser7,cn=users," + base_dn); - ldb.del("CN=ldaptestcontainer2," + base_dn); - ldb.del("cn=ldaptestgroup,cn=users," + base_dn); - ldb.del("cn=ldaptestgroup2,cn=users," + base_dn); - - println("Testing group add with invalid member"); - var ok = ldb.add(" -dn: cn=ldaptestgroup,cn=uSers," + base_dn + " -objectclass: group -member: cn=ldaptestuser,cn=useRs," + base_dn + " -"); - - if (ok.error != 32) { /* LDAP_NO_SUCH_OBJECT */ - println(ok.errstr); - assert(ok.error == 32); - } - - println("Testing user add"); - var ok = ldb.add(" -dn: cn=ldaptestuser,cn=uSers," + base_dn + " -objectclass: user -objectclass: person -cN: LDAPtestUSER -givenname: ldap -sn: testy -"); - if (ok.error != 0) { - ok = ldb.del("cn=ldaptestuser,cn=users," + base_dn); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - ok = ldb.add(" -dn: cn=ldaptestuser,cn=uSers," + base_dn + " -objectclass: user -objectclass: person -cN: LDAPtestUSER -givenname: ldap -sn: testy -"); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - } - - var ok = ldb.add(" -dn: cn=ldaptestgroup,cn=uSers," + base_dn + " -objectclass: group -member: cn=ldaptestuser,cn=useRs," + base_dn + " -"); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - - var ok = ldb.add(" -dn: cn=ldaptestcomputer,cn=computers," + base_dn + " -objectclass: computer -cN: LDAPtestCOMPUTER -"); - if (ok.error != 0) { - ok = ldb.del("cn=ldaptestcomputer,cn=computers," + base_dn); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - ok = ldb.add(" -dn: cn=ldaptestcomputer,cn=computers," + base_dn + " -objectClass: computer -cn: LDAPtestCOMPUTER -"); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - } - - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - - var ok = ldb.add(" -dn: cn=ldaptest2computer,cn=computers," + base_dn + " -objectClass: computer -cn: LDAPtest2COMPUTER -userAccountControl: 4096 -displayname: ldap testy -"); - if (ok.error != 0) { - ok = ldb.del("cn=ldaptest2computer,cn=computers," + base_dn); - if (ok.error != 0) { - println(ok.errstr); - // assert(ok.error == 0); - } - ok = ldb.add(" -dn: cn=ldaptest2computer,cn=computers," + base_dn + " -objectClass: computer -cn: LDAPtest2COMPUTER -userAccountControl: 4096 -displayname: ldap testy -"); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - } - - var ok = ldb.add(" -dn: cn=ldaptestcomputer3,cn=computers," + base_dn + " -objectClass: computer -cn: LDAPtest2COMPUTER -"); - if (ok.error != 34) { - println("Did not reject invalid RDN compared with DN: " + ok.errstr); - assert(ok.error == 34); - } - - var ok = ldb.add(" -dn: cn=ldaptestcomputer3,cn=computers," + base_dn + " -objectClass: computer -cn: LDAPtestCOMPUTER3 -sAMAccountType: 805306368 -"); - - if (ok.error != 53) { - println("Did not reject invalid 'sAMAccountType: 805306368': " + ok.errstr); - assert(ok.error == 53); - } - - var ok = ldb.add(" -dn: cn=ldaptestcomputer3,cn=computers," + base_dn + " -objectClass: computer -cn: LDAPtestCOMPUTER3 -userAccountControl: 0 -"); - - if (ok.error != 53) { - println("Did not reject invalid 'userAccountControl: 0': " + ok.errstr); - assert(ok.error == 53); - } - - var ok = ldb.add(" -dn: cn=ldaptestuser7,cn=users," + base_dn + " -objectClass: user -cn: LDAPtestuser7 -userAccountControl: 0 -"); - - if (ok.error != 53) { - println("Did not reject invalid 'userAccountControl: 0': " + ok.errstr); - assert(ok.error == 53); - } - - var ok = ldb.add(" -dn: cn=ldaptestuser7,cn=users," + base_dn + " -objectClass: user -cn: LDAPtestuser7 -userAccountControl: 2 -"); - - if (ok.error != 0) { - println("Did not accept 'userAccountControl: 2': " + ok.errstr); - assert(ok.error == 0); - } - - ldb.del("cn=ldaptestuser7,cn=users," + base_dn); - - var ok = ldb.add(" -dn: cn=ldaptestcomputer3,cn=computers," + base_dn + " -objectclass: computer -cN: LDAPtestCOMPUTER3 -"); - if (ok.error != 0) { - ok = ldb.del("cn=ldaptestcomputer3,cn=computers," + base_dn); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - ok = ldb.add(" -dn: cn=ldaptestcomputer3,cn=computers," + base_dn + " -objectClass: computer -cn: LDAPtestCOMPUTER3 -"); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - } - - println("Testing ldb.search for (&(cn=ldaptestcomputer3)(objectClass=user))"); - var res = ldb.search("(&(cn=ldaptestcomputer3)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(cn=ldaptestcomputer3)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - assert(res.msgs[0].dn == ("CN=ldaptestcomputer3,CN=Computers," + base_dn)); - assert(res.msgs[0].cn == "ldaptestcomputer3"); - assert(res.msgs[0].name == "ldaptestcomputer3"); - assert(res.msgs[0].objectClass[0] == "top"); - assert(res.msgs[0].objectClass[1] == "person"); - assert(res.msgs[0].objectClass[2] == "organizationalPerson"); - assert(res.msgs[0].objectClass[3] == "user"); - assert(res.msgs[0].objectClass[4] == "computer"); - assert(res.msgs[0].objectGUID != undefined); - assert(res.msgs[0].whenCreated != undefined); - assert(res.msgs[0].objectCategory == ("CN=Computer,CN=Schema,CN=Configuration," + base_dn)); - assert(res.msgs[0].primaryGroupID == 513); - assert(res.msgs[0].sAMAccountType == 805306368); - assert(res.msgs[0].userAccountControl == 546); - - ldb.del(res.msgs[0].dn); - - println("Testing attribute or value exists behaviour"); - ok = ldb.modify(" -dn: cn=ldaptest2computer,cn=computers," + base_dn + " -changetype: modify -replace: servicePrincipalName -servicePrincipalName: host/ldaptest2computer -servicePrincipalName: host/ldaptest2computer -servicePrincipalName: cifs/ldaptest2computer -"); - -//LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS - if (ok.error != 20) { - println("Expected error LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS, got :" + ok.errstr); - assert(ok.error == 20); - } - - ok = ldb.modify(" -dn: cn=ldaptest2computer,cn=computers," + base_dn + " -changetype: modify -replace: servicePrincipalName -servicePrincipalName: host/ldaptest2computer -servicePrincipalName: cifs/ldaptest2computer -"); - - if (ok.error != 0) { - println("Failed to replace servicePrincpalName:" + ok.errstr); - assert(ok.error == 20); - } - - ok = ldb.modify(" -dn: cn=ldaptest2computer,cn=computers," + base_dn + " -changetype: modify -add: servicePrincipalName -servicePrincipalName: host/ldaptest2computer -"); - -//LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS - if (ok.error != 20) { - println("Expected error LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS, got :" + ok.errstr); - assert(ok.error == 20); - } - - println("Testing ranged results"); - ok = ldb.modify(" -dn: cn=ldaptest2computer,cn=computers," + base_dn + " -changetype: modify -replace: servicePrincipalName -"); - if (ok.error != 0) { - println("Failed to replace servicePrincpalName:" + ok.errstr); - assert(ok.error == 0); - } - - ok = ldb.modify(" -dn: cn=ldaptest2computer,cn=computers," + base_dn + " -changetype: modify -add: servicePrincipalName -servicePrincipalName: host/ldaptest2computer0 -servicePrincipalName: host/ldaptest2computer1 -servicePrincipalName: host/ldaptest2computer2 -servicePrincipalName: host/ldaptest2computer3 -servicePrincipalName: host/ldaptest2computer4 -servicePrincipalName: host/ldaptest2computer5 -servicePrincipalName: host/ldaptest2computer6 -servicePrincipalName: host/ldaptest2computer7 -servicePrincipalName: host/ldaptest2computer8 -servicePrincipalName: host/ldaptest2computer9 -servicePrincipalName: host/ldaptest2computer10 -servicePrincipalName: host/ldaptest2computer11 -servicePrincipalName: host/ldaptest2computer12 -servicePrincipalName: host/ldaptest2computer13 -servicePrincipalName: host/ldaptest2computer14 -servicePrincipalName: host/ldaptest2computer15 -servicePrincipalName: host/ldaptest2computer16 -servicePrincipalName: host/ldaptest2computer17 -servicePrincipalName: host/ldaptest2computer18 -servicePrincipalName: host/ldaptest2computer19 -servicePrincipalName: host/ldaptest2computer20 -servicePrincipalName: host/ldaptest2computer21 -servicePrincipalName: host/ldaptest2computer22 -servicePrincipalName: host/ldaptest2computer23 -servicePrincipalName: host/ldaptest2computer24 -servicePrincipalName: host/ldaptest2computer25 -servicePrincipalName: host/ldaptest2computer26 -servicePrincipalName: host/ldaptest2computer27 -servicePrincipalName: host/ldaptest2computer28 -servicePrincipalName: host/ldaptest2computer29 -"); - - if (ok.error != 0) { - println("Failed to replace servicePrincpalName:" + ok.errstr); - assert(ok.error == 0); - } - - - var attrs = new Array("servicePrincipalName;range=0-*"); - var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (cn=ldaptest2computer) for servicePrincipalName;range=0-*"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } -// println(res.msgs[0]["servicePrincipalName;range=0-*"].length); - assert(res.msgs[0]["servicePrincipalName;range=0-*"].length == 30); - - var attrs = new Array("servicePrincipalName;range=0-19"); - var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (cn=ldaptest2computer) for servicePrincipalName;range=0-19"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } -// println(res.msgs[0]["servicePrincipalName;range=0-19"].length); - assert(res.msgs[0]["servicePrincipalName;range=0-19"].length == 20); - - var attrs = new Array("servicePrincipalName;range=0-30"); - var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=0-19"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - assert(res.msgs[0]["servicePrincipalName;range=0-*"].length == 30); - - var attrs = new Array("servicePrincipalName;range=0-40"); - var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=0-40"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - assert(res.msgs[0]["servicePrincipalName;range=0-*"].length == 30); - - var attrs = new Array("servicePrincipalName;range=30-40"); - var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=30-40"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - assert(res.msgs[0]["servicePrincipalName;range=30-*"].length == 0); - - var attrs = new Array("servicePrincipalName;range=10-40"); - var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=10-40"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - assert(res.msgs[0]["servicePrincipalName;range=10-*"].length == 20); -// var pos_11 = res.msgs[0]["servicePrincipalName;range=10-*"][18]; - - var attrs = new Array("servicePrincipalName;range=11-40"); - var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=10-*"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - assert(res.msgs[0]["servicePrincipalName;range=11-*"].length == 19); -// println(res.msgs[0]["servicePrincipalName;range=11-*"][18]); -// println(pos_11); -// assert((res.msgs[0]["servicePrincipalName;range=11-*"][18]) == pos_11); - - var attrs = new Array("servicePrincipalName;range=11-15"); - var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=11-15"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - assert(res.msgs[0]["servicePrincipalName;range=11-15"].length == 5); -// assert(res.msgs[0]["servicePrincipalName;range=11-15"][4] == pos_11); - - var attrs = new Array("servicePrincipalName"); - var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (cn=ldaptest2computer) at servicePrincipalName"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } -// println(res.msgs[0]["servicePrincipalName"][18]); -// println(pos_11); - assert(res.msgs[0]["servicePrincipalName"].length == 30); -// assert(res.msgs[0]["servicePrincipalName"][18] == pos_11); - - ok = ldb.add(" -dn: cn=ldaptestuser2,cn=useRs," + base_dn + " -objectClass: person -objectClass: user -cn: LDAPtestUSER2 -givenname: testy -sn: ldap user2 -"); - if (ok.error != 0) { - ok = ldb.del("cn=ldaptestuser2,cn=users," + base_dn); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - ok = ldb.add(" -dn: cn=ldaptestuser2,cn=useRs," + base_dn + " -objectClass: person -objectClass: user -cn: LDAPtestUSER2 -givenname: testy -sn: ldap user2 -"); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - } - - - println("Testing Ambigious Name Resolution"); -// Testing ldb.search for (&(anr=ldap testy)(objectClass=user)) - var res = ldb.search("(&(anr=ldap testy)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 3) { - println("Could not find (&(anr=ldap testy)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 3); - } - -// Testing ldb.search for (&(anr=testy ldap)(objectClass=user)) - var res = ldb.search("(&(anr=testy ldap)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 2) { - println("Found only " + res.msgs.length + " for (&(anr=testy ldap)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 2); - } - - var res = ldb.search("(&(anr=\"testy ldap\")(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 0) { - println("Found " + res.msgs.length + " for (&(anr=\"testy ldap\")(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 0); - } - -// Testing ldb.search for (&(anr=ldap)(objectClass=user)) - var res = ldb.search("(&(anr=ldap)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 4) { - println("Found only " + res.msgs.length + " for (&(anr=ldap)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 4); - } - -// Testing ldb.search for (&(anr==ldap)(objectClass=user)) - var res = ldb.search("(&(anr==ldap)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 1) { - println("Found only " + res.msgs.length + " for (&(anr=ldap)(objectClass=user))"); - println("Could not find (&(anr==ldap)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - assert(res.msgs[0].dn == ("CN=ldaptestuser,CN=Users," + base_dn)); - assert(res.msgs[0].cn == "ldaptestuser"); - assert(res.msgs[0].name == "ldaptestuser"); - -// Testing ldb.search for (&(anr=testy)(objectClass=user)) - var res = ldb.search("(&(anr=testy)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 2) { - println("Found only " + res.msgs.length + " for (&(anr=testy)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 2); - } - -// Testing ldb.search for (&(anr=ldap testy)(objectClass=user)) - var res = ldb.search("(&(anr=testy ldap)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 2) { - println("Found only " + res.msgs.length + " for (&(anr=ldap testy)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 2); - } - -// Testing ldb.search for (&(anr==ldap testy)(objectClass=user)) - var res = ldb.search("(&(anr==testy ldap)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 1) { - println("Found only " + res.msgs.length + " for (&(anr==ldap testy)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - assert(res.msgs[0].dn == ("CN=ldaptestuser,CN=Users," + base_dn)); - assert(res.msgs[0].cn == "ldaptestuser"); - assert(res.msgs[0].name == "ldaptestuser"); - -// Testing ldb.search for (&(anr==testy ldap)(objectClass=user)) - var res = ldb.search("(&(anr==testy ldap)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(anr==testy ldap)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - assert(res.msgs[0].dn == ("CN=ldaptestuser,CN=Users," + base_dn)); - assert(res.msgs[0].cn == "ldaptestuser"); - assert(res.msgs[0].name == "ldaptestuser"); - - // Testing ldb.search for (&(anr=testy ldap user)(objectClass=user)) - var res = ldb.search("(&(anr=testy ldap user)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(anr=testy ldap user)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - assert(res.msgs[0].dn == ("CN=ldaptestuser2,CN=Users," + base_dn)); - assert(res.msgs[0].cn == "ldaptestuser2"); - assert(res.msgs[0].name == "ldaptestuser2"); - - // Testing ldb.search for (&(anr==testy ldap user2)(objectClass=user)) - var res = ldb.search("(&(anr==testy ldap user2)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(anr==testy ldap user2)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - assert(res.msgs[0].dn == ("CN=ldaptestuser2,CN=Users," + base_dn)); - assert(res.msgs[0].cn == "ldaptestuser2"); - assert(res.msgs[0].name == "ldaptestuser2"); - - // Testing ldb.search for (&(anr==ldap user2)(objectClass=user)) - var res = ldb.search("(&(anr==ldap user2)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(anr==ldap user2)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - assert(res.msgs[0].dn == ("CN=ldaptestuser2,CN=Users," + base_dn)); - assert(res.msgs[0].cn == "ldaptestuser2"); - assert(res.msgs[0].name == "ldaptestuser2"); - - // Testing ldb.search for (&(anr==not ldap user2)(objectClass=user)) - var res = ldb.search("(&(anr==not ldap user2)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 0) { - println("Must not find (&(anr==not ldap user2)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 0); - } - - // Testing ldb.search for (&(anr=not ldap user2)(objectClass=user)) - var res = ldb.search("(&(anr=not ldap user2)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 0) { - println("Must not find (&(anr=not ldap user2)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 0); - } - - println("Testing Group Modifies"); - ok = ldb.modify(" -dn: cn=ldaptestgroup,cn=users," + base_dn + " -changetype: modify -add: member -member: cn=ldaptestuser2,cn=users," + base_dn + " -member: cn=ldaptestcomputer,cn=computers," + base_dn + " -"); - - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - - ok = ldb.del("cn=ldaptestuser3,cn=users," + base_dn); - - println("Testing adding non-existent user to a group"); - ok = ldb.modify(" -dn: cn=ldaptestgroup,cn=users," + base_dn + " -changetype: modify -add: member -member: cn=ldaptestuser3,cn=users," + base_dn + " -"); - if (ok.error != 32) { /* LDAP_NO_SUCH_OBJECT */ - println(ok.errstr); - assert(ok.error == 32); - } - - println("Testing Renames"); - - ok = ldb.rename("cn=ldaptestuser2,cn=users," + base_dn, "cn=ldaptestuser3,cn=users," + base_dn); - if (ok.error != 0) { - println("Could not rename cn=ldaptestuser2,cn=users," + base_dn + " into cn=ldaptestuser3,cn=users," + base_dn + ": " + ok.errstr); - assert(ok.error == 0); - } - - ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser3,cn=users," + base_dn); - if (ok.error != 0) { - println("Could not rename cn=ldaptestuser3,cn=users," + base_dn + " onto itself: " + ok.errstr); - assert(ok.error == 0); - } - - ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestUSER3,cn=users," + base_dn); - if (ok.error != 0) { - println("Could not rename cn=ldaptestuser3,cn=users," + base_dn + " into cn=ldaptestUSER3,cn=users," + base_dn + ": " + ok.errstr); - assert(ok.error == 0); - } - - println("Testing ldb.search for (&(cn=ldaptestuser3)(objectClass=user))"); - var res = ldb.search("(&(cn=ldaptestuser3)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(cn=ldaptestuser3)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - assert(res.msgs[0].dn == ("CN=ldaptestUSER3,CN=Users," + base_dn)); - assert(res.msgs[0].cn == "ldaptestUSER3"); - assert(res.msgs[0].name == "ldaptestUSER3"); - - println("Testing ldb.search for (&(&(cn=ldaptestuser3)(userAccountControl=*))(objectClass=user))"); - var res = ldb.search("(&(&(cn=ldaptestuser3)(userAccountControl=*))(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(cn=ldaptestuser3)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - assert(res.msgs[0].dn == ("CN=ldaptestUSER3,CN=Users," + base_dn)); - assert(res.msgs[0].cn == "ldaptestUSER3"); - assert(res.msgs[0].name == "ldaptestUSER3"); - - println("Testing ldb.search for (&(&(cn=ldaptestuser3)(userAccountControl=546))(objectClass=user))"); - var res = ldb.search("(&(&(cn=ldaptestuser3)(userAccountControl=546))(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(&(cn=ldaptestuser3)(userAccountControl=546))(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - assert(res.msgs[0].dn == ("CN=ldaptestUSER3,CN=Users," + base_dn)); - assert(res.msgs[0].cn == "ldaptestUSER3"); - assert(res.msgs[0].name == "ldaptestUSER3"); - - println("Testing ldb.search for (&(&(cn=ldaptestuser3)(userAccountControl=547))(objectClass=user))"); - var res = ldb.search("(&(&(cn=ldaptestuser3)(userAccountControl=547))(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 0) { - println("Should not find (&(&(cn=ldaptestuser3)(userAccountControl=547))(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 0); - } - -// This is a Samba special, and does not exist in real AD -// println("Testing ldb.search for (dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); -// var res = ldb.search("(dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); -// if (res.error != 0 || res.msgs.length != 1) { -// println("Could not find (dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); -// assert(res.error == 0); -// assert(res.msgs.length == 1); -// } -// assert(res.msgs[0].dn == ("CN=ldaptestUSER3,CN=Users," + base_dn)); -// assert(res.msgs[0].cn == "ldaptestUSER3"); -// assert(res.msgs[0].name == "ldaptestUSER3"); - - println("Testing ldb.search for (distinguishedName=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); - var res = ldb.search("(distinguishedName=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - assert(res.msgs[0].dn == ("CN=ldaptestUSER3,CN=Users," + base_dn)); - assert(res.msgs[0].cn == "ldaptestUSER3"); - assert(res.msgs[0].name == "ldaptestUSER3"); - - // ensure we cannot add it again - ok = ldb.add(" -dn: cn=ldaptestuser3,cn=userS," + base_dn + " -objectClass: person -objectClass: user -cn: LDAPtestUSER3 -"); -//LDB_ERR_ENTRY_ALREADY_EXISTS - if (ok.error != 68) { - println("expected error LDB_ERR_ENTRY_ALREADY_EXISTS, got: " + ok.errstr); - assert(ok.error == 68); - } - - // rename back - ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser2,cn=users," + base_dn); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - - // ensure we cannnot rename it twice - ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser2,cn=users," + base_dn); -//LDB_ERR_NO_SUCH_OBJECT - assert(ok.error == 32); - - // ensure can now use that name - ok = ldb.add(" -dn: cn=ldaptestuser3,cn=users," + base_dn + " -objectClass: person -objectClass: user -cn: LDAPtestUSER3 -"); - - // ensure we now cannnot rename - ok = ldb.rename("cn=ldaptestuser2,cn=users," + base_dn, "cn=ldaptestuser3,cn=users," + base_dn); -//LDB_ERR_ENTRY_ALREADY_EXISTS - if (ok.error != 68) { - println("expected error LDB_ERR_ENTRY_ALREADY_EXISTS, got: " + ok.errstr); - assert(ok.error == 68); - } - assert(ok.error == 68); - ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser3,cn=configuration," + base_dn); - if (ok.error != 71 && ok.error != 64) { - println("expected error LDB_ERR_ENTRY_ALREADY_EXISTS or LDAP_NAMING_VIOLATION, got: " + ok.errstr); - assert(ok.error == 71 || ok.error == 64); - } - assert(ok.error == 71 || ok.error == 64); - - ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser5,cn=users," + base_dn); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - - ok = ldb.del("cn=ldaptestuser5,cn=users," + base_dn); - - ok = ldb.del("cn=ldaptestgroup2,cn=users," + base_dn); - - ok = ldb.rename("cn=ldaptestgroup,cn=users," + base_dn, "cn=ldaptestgroup2,cn=users," + base_dn); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - - println("Testing subtree Renames"); - - ok = ldb.add(" -dn: cn=ldaptestcontainer," + base_dn + " -objectClass: container -"); - - ok = ldb.add(" -dn: CN=ldaptestuser4,CN=ldaptestcontainer," + base_dn + " -objectClass: person -objectClass: user -cn: LDAPtestUSER4 -"); - if (ok.error != 0) { - ok = ldb.del("cn=ldaptestuser4,cn=ldaptestcontainer," + base_dn); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - ok = ldb.add(" -dn: CN=ldaptestuser4,CN=ldaptestcontainer," + base_dn + " -objectClass: person -objectClass: user -cn: LDAPtestUSER4 -"); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - } - - ok = ldb.modify(" -dn: cn=ldaptestgroup2,cn=users," + base_dn + " -changetype: modify -add: member -member: cn=ldaptestuser4,cn=ldaptestcontainer," + base_dn + " -"); - if (ok.error != 0) { - println("Failure adding ldaptestuser4 to a group"); - println(ok.errstr); - assert(ok.error == 0); - } - - println("Testing ldb.rename of cn=ldaptestcontainer," + base_dn + " to cn=ldaptestcontainer2," + base_dn); - ok = ldb.rename("CN=ldaptestcontainer," + base_dn, "CN=ldaptestcontainer2," + base_dn); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - - println("Testing ldb.search for (&(cn=ldaptestuser4)(objectClass=user))"); - var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(cn=ldaptestuser4)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - println("Testing subtree ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in (just renamed from) cn=ldaptestcontainer," + base_dn); - var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer," + base_dn, ldb.SCOPE_SUBTREE); - if (res.error != 32) { - println(res.errstr); - assert(res.error == 32); - } - - println("Testing one-level ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in (just renamed from) cn=ldaptestcontainer," + base_dn); - var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer," + base_dn, ldb.SCOPE_ONELEVEL); - if (res.error != 32) { - println(res.errstr); - assert(res.error == 32); - } - - println("Testing ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in renamed container"); - var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer2," + base_dn, ldb.SCOPE_SUBTREE); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(cn=ldaptestuser4)(objectClass=user)) under cn=ldaptestcontainer2," + base_dn); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - assert(res.msgs[0].dn == ("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn)); - assert(strupper(res.msgs[0].memberOf[0]) == (strupper("CN=ldaptestgroup2,CN=Users," + base_dn))); - - println("Testing ldb.search for (&(cn=ldaptestgroup2)(objectClass=group)) in cn=users"); - var res_group = ldb.search("(&(cn=ldaptestgroup2)(objectClass=group))", "cn=users," + base_dn, ldb.SCOPE_SUBTREE); - if (res_group.error != 0 || res_group.msgs.length != 1) { - println("Could not find (&(cn=ldaptestgroup2)(objectClass=group)) under cn=users," + base_dn); - assert(res_group.error == 0); - assert(res_group.msgs.length == 1); - } - - println("Testing ldb.search for (member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ") to check subtree renames and linked attributes"); - var res = ldb.search("(member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ")", base_dn, ldb.SCOPE_SUBTREE); - if (res.error != 0 || res.msgs.length != 1) { - for (i=0; i < res_group.msgs[0].member.length; i++) { - println("res_group.member[" + i + "]: " + res_group.msgs[0].member[i]); - } - - println("Could not find (member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + "), perhaps linked attributes are not conistant with subtree renames?"); - println("Testing ldb.search for (member=CN=ldaptestuser4,CN=ldaptestcontainer," + base_dn + ") to check if it just hasn't been updated"); - var res2 = ldb.search("(member=CN=ldaptestuser4,CN=ldaptestcontainer," + base_dn + ")", base_dn, ldb.SCOPE_SUBTREE); - if (res2.error != 0 || res2.msgs.length != 1) { - println("Could not find (member=CN=ldaptestuser4,CN=ldaptestcontainer," + base_dn + "), very odd, it wasn't here at all.."); - } - - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - println("Testing ldb.rename (into itself) of cn=ldaptestcontainer2," + base_dn + " to cn=ldaptestcontainer,cn=ldaptestcontainer2," + base_dn); - ok = ldb.rename("cn=ldaptestcontainer2," + base_dn, "cn=ldaptestcontainer,cn=ldaptestcontainer2," + base_dn); - if (ok.error != 53) { /* LDAP_UNWILLING_TO_PERFORM */ - println(ok.errstr); - assert(ok.error == 53); - } - - println("Testing ldb.rename (into non-existent container) of cn=ldaptestcontainer2," + base_dn + " to cn=ldaptestcontainer,cn=ldaptestcontainer3," + base_dn); - ok = ldb.rename("cn=ldaptestcontainer2," + base_dn, "cn=ldaptestcontainer,cn=ldaptestcontainer3," + base_dn); - if (ok.error != 53 && ok.error != 80) { /* LDAP_UNWILLING_TO_PERFORM or LDAP_OTHER*/ - println(ok.errstr); - assert(ok.error == 53 || ok.error == 80); - } - - println("Testing delete (should fail, not a leaf node) of renamed cn=ldaptestcontainer2," + base_dn); - ok = ldb.del("cn=ldaptestcontainer2," + base_dn); - if (ok.error != 66) { /* LDB_ERR_NOT_ALLOWED_ON_NON_LEAF */ - println(ok.errstr); - assert(ok.error == 66); - } - - println("Testing base ldb.search for CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn); - var res = ldb.search("(objectclass=*)", ("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn), ldb.SCOPE_BASE); - if (res.error == 0 && res.count == 1) { - assert(res.error == 0 && res.count == 1); - } - var res = ldb.search("(cn=ldaptestuser40)", ("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn), ldb.SCOPE_BASE); - if (res.error == 0 && res.count == 0) { - assert(res.error == 0 && res.count == 0); - } - - println("Testing one-level ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in cn=ldaptestcontainer2," + base_dn); - var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer2," + base_dn, ldb.SCOPE_ONELEVEL); - if (res.error == 0 && res.count == 0) { - assert(res.error == 0 && res.count == 0); - } - - println("Testing one-level ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in cn=ldaptestcontainer2," + base_dn); - var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer2," + base_dn, ldb.SCOPE_SUBTREE); - if (res.error == 0 && res.count == 0) { - assert(res.error == 0 && res.count == 0); - } - - println("Testing delete of subtree renamed "+("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn)); - ok = ldb.del(("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn)); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - println("Testing delete of renamed cn=ldaptestcontainer2," + base_dn); - ok = ldb.del("cn=ldaptestcontainer2," + base_dn); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - - ok = ldb.add(" -dn: cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn + " -objectClass: user -"); - if (ok.error != 0) { - ok = ldb.del("cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - ok = ldb.add(" -dn: cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn + " -objectClass: user -"); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - } - - ok = ldb.add(" -dn: cn=ldaptestutf8user2 èùéìòà ,cn=users," + base_dn + " -objectClass: user -"); - if (ok.error != 0) { - ok = ldb.del("cn=ldaptestutf8user2 èùéìòà ,cn=users," + base_dn); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - ok = ldb.add(" -dn: cn=ldaptestutf8user2 èùéìòà ,cn=users," + base_dn + " -objectClass: user -"); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - } - - println("Testing ldb.search for (&(cn=ldaptestuser)(objectClass=user))"); - var res = ldb.search("(&(cn=ldaptestuser)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(cn=ldaptestuser)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - assert(res.msgs[0].dn == ("CN=ldaptestuser,CN=Users," + base_dn)); - assert(res.msgs[0].cn == "ldaptestuser"); - assert(res.msgs[0].name == "ldaptestuser"); - assert(res.msgs[0].objectClass[0] == "top"); - assert(res.msgs[0].objectClass[1] == "person"); - assert(res.msgs[0].objectClass[2] == "organizationalPerson"); - assert(res.msgs[0].objectClass[3] == "user"); - assert(res.msgs[0].objectGUID != undefined); - assert(res.msgs[0].whenCreated != undefined); - assert(res.msgs[0].objectCategory == ("CN=Person,CN=Schema,CN=Configuration," + base_dn)); - assert(res.msgs[0].sAMAccountType == 805306368); - assert(res.msgs[0].userAccountControl == 546); - assert(strupper(res.msgs[0].memberOf[0]) == strupper("CN=ldaptestgroup2,CN=Users," + base_dn)); - assert(res.msgs[0].memberOf.length == 1); - - println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))"); - var res2 = ldb.search("(&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))"); - if (res2.error != 0 || res2.msgs.length != 1) { - println("Could not find (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))"); - assert(res2.error == 0); - assert(res2.msgs.length == 1); - } - - assert(res.msgs[0].dn == res2.msgs[0].dn); - - println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon))"); - var res3 = ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))"); - if (res3.error != 0) { - println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)): " + res3.errstr); - assert(res3.error == 0); - } else if (res3.msgs.length != 1) { - println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)): matched " + res3.msgs.length); - assert(res3.msgs.length == 1); - } - - assert(res.msgs[0].dn == res3.msgs[0].dn); - - if (gc_ldb != undefined) { - println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog"); - var res3gc = gc_ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))"); - if (res3gc.error != 0) { - println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog: " + res3gc.errstr); - assert(res3gc.error == 0); - } else if (res3gc.msgs.length != 1) { - println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog: matched " + res3gc.msgs.length); - assert(res3gc.msgs.length == 1); - } - - assert(res.msgs[0].dn == res3gc.msgs[0].dn); - } - - println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon)) in with 'phantom root' control"); - var attrs = new Array("cn"); - var controls = new Array("search_options:1:2"); - var res3control = gc_ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))", base_dn, ldb.SCOPE_SUBTREE, attrs, controls); - if (res3control.error != 0 || res3control.msgs.length != 1) { - println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog"); - assert(res3control.error == 0); - assert(res3control.msgs.length == 1); - } - - assert(res.msgs[0].dn == res3control.msgs[0].dn); - - ok = ldb.del(res.msgs[0].dn); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - - println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectClass=user))"); - var res = ldb.search("(&(cn=ldaptestcomputer)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(cn=ldaptestcomputer)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - assert(res.msgs[0].dn == ("CN=ldaptestcomputer,CN=Computers," + base_dn)); - assert(res.msgs[0].cn == "ldaptestcomputer"); - assert(res.msgs[0].name == "ldaptestcomputer"); - assert(res.msgs[0].objectClass[0] == "top"); - assert(res.msgs[0].objectClass[1] == "person"); - assert(res.msgs[0].objectClass[2] == "organizationalPerson"); - assert(res.msgs[0].objectClass[3] == "user"); - assert(res.msgs[0].objectClass[4] == "computer"); - assert(res.msgs[0].objectGUID != undefined); - assert(res.msgs[0].whenCreated != undefined); - assert(res.msgs[0].objectCategory == "cn=Computer,cn=Schema,cn=Configuration," + base_dn); - assert(res.msgs[0].sAMAccountType == 805306368); - assert(res.msgs[0].userAccountControl == 546); - - println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); - var res2 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); - if (res2.error != 0 || res2.msgs.length != 1) { - println("Could not find (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); - assert(res2.error == 0); - assert(res2.msgs.length == 1); - } - - assert(res.msgs[0].dn == res2.msgs[0].dn); - - if (gc_ldb != undefined) { - println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + ")) in Global Catlog"); - var res2gc = gc_ldb.search("(&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))"); - if (res2gc.error != 0 || res2gc.msgs.length != 1) { - println("Could not find (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + ")) in Global Catlog"); - assert(res2gc.error == 0); - assert(res2gc.msgs.length == 1); - } - - assert(res.msgs[0].dn == res2gc.msgs[0].dn); - } - - println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=compuTER))"); - var res3 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=compuTER))"); - if (res3.error != 0 || res3.msgs.length != 1) { - println("Could not find (&(cn=ldaptestcomputer)(objectCategory=compuTER))"); - assert(res3.error == 0); - assert(res3.msgs.length == 1); - } - - assert(res.msgs[0].dn == res3.msgs[0].dn); - - if (gc_ldb != undefined) { - println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=compuTER)) in Global Catalog"); - var res3gc = gc_ldb.search("(&(cn=ldaptestcomputer)(objectCategory=compuTER))"); - if (res3gc.error != 0 || res3gc.msgs.length != 1) { - println("Could not find (&(cn=ldaptestcomputer)(objectCategory=compuTER)) in Global Catalog"); - assert(res3gc.error == 0); - assert(res3gc.msgs.length == 1); - } - - assert(res.msgs[0].dn == res3gc.msgs[0].dn); - } - - println("Testing ldb.search for (&(cn=ldaptestcomp*r)(objectCategory=compuTER))"); - var res4 = ldb.search("(&(cn=ldaptestcomp*r)(objectCategory=compuTER))"); - if (res4.error != 0 || res4.msgs.length != 1) { - println("Could not find (&(cn=ldaptestcomp*r)(objectCategory=compuTER))"); - assert(res4.error == 0); - assert(res4.msgs.length == 1); - } - - assert(res.msgs[0].dn == res4.msgs[0].dn); - - println("Testing ldb.search for (&(cn=ldaptestcomput*)(objectCategory=compuTER))"); - var res5 = ldb.search("(&(cn=ldaptestcomput*)(objectCategory=compuTER))"); - if (res5.error != 0 || res5.msgs.length != 1) { - println("Could not find (&(cn=ldaptestcomput*)(objectCategory=compuTER))"); - assert(res5.error == 0); - assert(res5.msgs.length == 1); - } - - assert(res.msgs[0].dn == res5.msgs[0].dn); - - println("Testing ldb.search for (&(cn=*daptestcomputer)(objectCategory=compuTER))"); - var res6 = ldb.search("(&(cn=*daptestcomputer)(objectCategory=compuTER))"); - if (res6.error != 0 || res6.msgs.length != 1) { - println("Could not find (&(cn=*daptestcomputer)(objectCategory=compuTER))"); - assert(res6.error == 0); - assert(res6.msgs.length == 1); - } - - assert(res.msgs[0].dn == res6.msgs[0].dn); - - ok = ldb.del(res.msgs[0].dn); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - - println("Testing ldb.search for (&(cn=ldaptest2computer)(objectClass=user))"); - var res = ldb.search("(&(cn=ldaptest2computer)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(cn=ldaptest2computer)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - assert(res.msgs[0].dn == ("CN=ldaptest2computer,CN=Computers," + base_dn)); - assert(res.msgs[0].cn == "ldaptest2computer"); - assert(res.msgs[0].name == "ldaptest2computer"); - assert(res.msgs[0].objectClass[0] == "top"); - assert(res.msgs[0].objectClass[1] == "person"); - assert(res.msgs[0].objectClass[2] == "organizationalPerson"); - assert(res.msgs[0].objectClass[3] == "user"); - assert(res.msgs[0].objectClass[4] == "computer"); - assert(res.msgs[0].objectGUID != undefined); - assert(res.msgs[0].whenCreated != undefined); - assert(res.msgs[0].objectCategory == "cn=Computer,cn=Schema,cn=Configuration," + base_dn); - assert(res.msgs[0].sAMAccountType == 805306369); - assert(res.msgs[0].userAccountControl == 4096); - - - ok = ldb.del(res.msgs[0].dn); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - - var attrs = new Array("cn", "name", "objectClass", "objectGUID", "whenCreated", "nTSecurityDescriptor", "memberOf"); - println("Testing ldb.search for (&(cn=ldaptestUSer2)(objectClass=user))"); - var res = ldb.search("(&(cn=ldaptestUSer2)(objectClass=user))", base_dn, ldb.SCOPE_SUBTREE, attrs); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(cn=ldaptestUSer2)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - assert(res.msgs[0].dn == ("CN=ldaptestuser2,CN=Users," + base_dn)); - assert(res.msgs[0].cn == "ldaptestuser2"); - assert(res.msgs[0].name == "ldaptestuser2"); - assert(res.msgs[0].objectClass[0] == "top"); - assert(res.msgs[0].objectClass[1] == "person"); - assert(res.msgs[0].objectClass[2] == "organizationalPerson"); - assert(res.msgs[0].objectClass[3] == "user"); - assert(res.msgs[0].objectGUID != undefined); - assert(res.msgs[0].whenCreated != undefined); - assert(res.msgs[0].nTSecurityDescriptor != undefined); - assert(res.msgs[0].memberOf[0] == ("CN=ldaptestgroup2,CN=Users," + base_dn)); - - var attrs = new Array("cn", "name", "objectClass", "objectGUID", "whenCreated", "nTSecurityDescriptor", "member"); - println("Testing ldb.search for (&(cn=ldaptestgroup2)(objectClass=group))"); - var res = ldb.search("(&(cn=ldaptestgroup2)(objectClass=group))", base_dn, ldb.SCOPE_SUBTREE, attrs); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(cn=ldaptestgroup2)(objectClass=group))"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - assert(res.msgs[0].dn == ("CN=ldaptestgroup2,CN=Users," + base_dn)); - assert(res.msgs[0].cn == "ldaptestgroup2"); - assert(res.msgs[0].name == "ldaptestgroup2"); - assert(res.msgs[0].objectClass[0] == "top"); - assert(res.msgs[0].objectClass[1] == "group"); - assert(res.msgs[0].objectGUID != undefined); - assert(res.msgs[0].whenCreated != undefined); - assert(res.msgs[0].nTSecurityDescriptor != undefined); - assert(res.msgs[0].member[0] == ("CN=ldaptestuser2,CN=Users," + base_dn)); - assert(res.msgs[0].member.length == 1); - - ok = ldb.modify(" -dn: cn=ldaptestgroup2,cn=users," + base_dn + " -changetype: modify -replace: member -member: CN=ldaptestuser2,CN=Users," + base_dn + " -member: CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn + " -"); - if (ok.error != 0) { - println("Failure testing replace of linked attributes"); - println(ok.errstr); - assert(ok.error == 0); - } - - println("Testing Linked attribute behaviours"); - ok = ldb.modify(" -dn: cn=ldaptestgroup2,cn=users," + base_dn + " -changetype: modify -delete: member -"); - if (ok.error != 0) { - println("Failure testing delete of linked attributes"); - println(ok.errstr); - assert(ok.error == 0); - } - - ok = ldb.modify(" -dn: cn=ldaptestgroup2,cn=users," + base_dn + " -changetype: modify -add: member -member: CN=ldaptestuser2,CN=Users," + base_dn + " -member: CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn + " -"); - if (ok.error != 0) { - println("Failure testing add of linked attributes"); - println(ok.errstr); - assert(ok.error == 0); - } - - ok = ldb.modify(" -dn: cn=ldaptestgroup2,cn=users," + base_dn + " -changetype: modify -replace: member -"); - if (ok.error != 0) { - println("Failure testing replace of linked attributes"); - println(ok.errstr); - assert(ok.error == 0); - } - - ok = ldb.modify(" -dn: cn=ldaptestgroup2,cn=users," + base_dn + " -changetype: modify -add: member -member: CN=ldaptestuser2,CN=Users," + base_dn + " -member: CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn + " -"); - if (ok.error != 0) { - println("Failure testing add of linked attributes"); - println(ok.errstr); - assert(ok.error == 0); - } - - ok = ldb.modify(" -dn: cn=ldaptestgroup2,cn=users," + base_dn + " -changetype: modify -delete: member -member: CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn + " -"); - if (ok.error != 0) { - println("Failure testing replace of linked attributes"); - println(ok.errstr); - assert(ok.error == 0); - } - - var res = ldb.search("(&(cn=ldaptestgroup2)(objectClass=group))", base_dn, ldb.SCOPE_SUBTREE, attrs); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(cn=ldaptestgroup2)(objectClass=group))"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - assert(res.msgs[0].dn == ("CN=ldaptestgroup2,CN=Users," + base_dn)); - assert(res.msgs[0].member[0] == ("CN=ldaptestuser2,CN=Users," + base_dn)); - assert(res.msgs[0].member.length == 1); - - ok = ldb.del(("CN=ldaptestuser2,CN=Users," + base_dn)); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - - var attrs = new Array("cn", "name", "objectClass", "objectGUID", "whenCreated", "nTSecurityDescriptor", "member"); - println("Testing ldb.search for (&(cn=ldaptestgroup2)(objectClass=group)) to check linked delete"); - var res = ldb.search("(&(cn=ldaptestgroup2)(objectClass=group))", base_dn, ldb.SCOPE_SUBTREE, attrs); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(cn=ldaptestgroup2)(objectClass=group)) to check linked delete"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - assert(res.msgs[0].dn == ("CN=ldaptestgroup2,CN=Users," + base_dn)); - assert(res.msgs[0].member == undefined); - - println("Testing ldb.search for (&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))"); - var res = ldb.search("(&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))"); - - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - assert(res.msgs[0].dn == ("CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn)); - assert(res.msgs[0].cn == "ldaptestutf8user èùéìòà"); - assert(res.msgs[0].name == "ldaptestutf8user èùéìòà"); - assert(res.msgs[0].objectClass[0] == "top"); - assert(res.msgs[0].objectClass[1] == "person"); - assert(res.msgs[0].objectClass[2] == "organizationalPerson"); - assert(res.msgs[0].objectClass[3] == "user"); - assert(res.msgs[0].objectGUID != undefined); - assert(res.msgs[0].whenCreated != undefined); - - ok = ldb.del(res.msgs[0].dn); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - - println("Testing ldb.search for (&(cn=ldaptestutf8user2*)(objectClass=user))"); - var res = ldb.search("(&(cn=ldaptestutf8user2*)(objectClass=user))"); - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (&(cn=ldaptestutf8user2*)(objectClass=user))"); - assert(res.error == 0); - assert(res.msgs.length == 1); - } - - ok = ldb.del(res.msgs[0].dn); - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - - ok = ldb.del(("CN=ldaptestgroup2,CN=Users," + base_dn)) - if (ok.error != 0) { - println(ok.errstr); - assert(ok.error == 0); - } - - println("Testing ldb.search for (&(cn=ldaptestutf8user2 ÈÙÉÌÒÀ)(objectClass=user))"); - var res = ldb.search("(&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))"); - - if (res.error != 0 || res.msgs.length != 1) { - println("Could not find (expect space collapse, win2k3 fails) (&(cn=ldaptestutf8user2 ÈÙÉÌÒÀ)(objectClass=user))"); - } else { - assert(res.msgs[0].dn == ("cn=ldaptestutf8user2 èùéìòà,cn=users," + base_dn)); - assert(res.msgs[0].cn == "ldaptestutf8user2 èùéìòà"); - } - - println("Testing that we can't get at the configuration DN from the main search base"); - var attrs = new Array("cn"); - var res = ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs); - assert(res.error == 0); - if (res.msgs.length != 0) { - println("Got configuration DN " + res.msgs[0].dn + " which should not be able to be seen from main search base"); - } - assert(res.msgs.length == 0); - - println("Testing that we can get at the configuration DN from the main search base on the LDAP port with the 'phantom root' search_options control"); - var attrs = new Array("cn"); - var controls = new Array("search_options:1:2"); - var res = ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs, controls); - assert(res.error == 0); - assert(res.msgs.length > 0); - - if (gc_ldb != undefined) { - println("Testing that we can get at the configuration DN from the main search base on the GC port with the search_options control == 0"); - var attrs = new Array("cn"); - var controls = new Array("search_options:1:0"); - var res = gc_ldb.search("objectClass=crossRef", base_dn, gc_ldb.SCOPE_SUBTREE, attrs, controls); - assert(res.error == 0); - assert(res.msgs.length > 0); - - println("Testing that we do find configuration elements in the global catlog"); - var attrs = new Array("cn"); - var res = gc_ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs); - assert(res.error == 0); - assert (res.msgs.length > 0); - - println("Testing that we do find configuration elements and user elements at the same time"); - var attrs = new Array("cn"); - var res = gc_ldb.search("(|(objectClass=crossRef)(objectClass=person))", base_dn, ldb.SCOPE_SUBTREE, attrs); - assert(res.error == 0); - assert (res.msgs.length > 0); - - println("Testing that we do find configuration elements in the global catlog, with the configuration basedn"); - var attrs = new Array("cn"); - var res = gc_ldb.search("objectClass=crossRef", configuration_dn, ldb.SCOPE_SUBTREE, attrs); - assert(res.error == 0); - assert (res.msgs.length > 0); - } - - println("Testing that we can get at the configuration DN on the main LDAP port"); - var attrs = new Array("cn"); - var res = ldb.search("objectClass=crossRef", configuration_dn, ldb.SCOPE_SUBTREE, attrs); - assert(res.error == 0); - assert (res.msgs.length > 0); - - println("Testing objectCategory canonacolisation"); - var attrs = new Array("cn"); - var res = ldb.search("objectCategory=ntDsDSA", configuration_dn, ldb.SCOPE_SUBTREE, attrs); - assert(res.error == 0); - if (res.msgs.length == 0) { - println("Didn't find any records with objectCategory=ntDsDSA"); - } - assert(res.msgs.length != 0); - - var attrs = new Array("cn"); - var res = ldb.search("objectCategory=CN=ntDs-DSA," + schema_dn, configuration_dn, ldb.SCOPE_SUBTREE, attrs); - assert(res.error == 0); - if (res.msgs.length == 0) { - println("Didn't find any records with objectCategory=CN=ntDs-DSA," + schema_dn); - } - assert(res.msgs.length != 0); - - println("Testing objectClass attribute order on "+ base_dn); - var attrs = new Array("objectClass"); - var res = ldb.search("objectClass=domain", base_dn, ldb.SCOPE_BASE, attrs); - assert(res.error == 0); - assert(res.msgs.length == 1); - - assert(res.msgs[0].objectClass[0] == "top"); - assert(res.msgs[0].objectClass[1] == "domain"); - assert(res.msgs[0].objectClass[2] == "domainDNS"); - -// check enumeration - - var attrs = new Array("cn"); - println("Testing ldb.search for objectCategory=person"); - var res = ldb.search("objectCategory=person", base_dn, ldb.SCOPE_SUBTREE, attrs); - assert(res.error == 0); - assert(res.msgs.length > 0); - - var attrs = new Array("cn"); - var controls = new Array("domain_scope:1"); - println("Testing ldb.search for objectCategory=person with domain scope control"); - var res = ldb.search("objectCategory=person", base_dn, ldb.SCOPE_SUBTREE, attrs, controls); - assert(res.error == 0); - assert(res.msgs.length > 0); - - var attrs = new Array("cn"); - println("Testing ldb.search for objectCategory=user"); - var res = ldb.search("objectCategory=user", base_dn, ldb.SCOPE_SUBTREE, attrs); - assert(res.error == 0); - assert(res.msgs.length > 0); - - var attrs = new Array("cn"); - var controls = new Array("domain_scope:1"); - println("Testing ldb.search for objectCategory=user with domain scope control"); - var res = ldb.search("objectCategory=user", base_dn, ldb.SCOPE_SUBTREE, attrs, controls); - assert(res.error == 0); - assert(res.msgs.length > 0); - - var attrs = new Array("cn"); - println("Testing ldb.search for objectCategory=group"); - var res = ldb.search("objectCategory=group", base_dn, ldb.SCOPE_SUBTREE, attrs); - assert(res.error == 0); - assert(res.msgs.length > 0); - - var attrs = new Array("cn"); - var controls = new Array("domain_scope:1"); - println("Testing ldb.search for objectCategory=group with domain scope control"); - var res = ldb.search("objectCategory=group", base_dn, ldb.SCOPE_SUBTREE, attrs, controls); - assert(res.error == 0); - assert(res.msgs.length > 0); - -} - -function basedn_tests(ldb, gc_ldb) -{ - println("Testing for all rootDSE attributes"); - var attrs = new Array(); - var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); - assert(res.error == 0); - assert(res.msgs.length == 1); - - println("Testing for highestCommittedUSN"); - var attrs = new Array("highestCommittedUSN"); - var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); - assert(res.error == 0); - assert(res.msgs.length == 1); - assert(res.msgs[0].highestCommittedUSN != undefined); - assert(res.msgs[0].highestCommittedUSN != 0); - - println("Testing for netlogon via LDAP"); - var attrs = new Array("netlogon"); - var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); - assert(res.error == 0); - assert(res.msgs.length == 0); - - println("Testing for netlogon and highestCommittedUSN via LDAP"); - var attrs = new Array("netlogon", "highestCommittedUSN"); - var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); - assert(res.error == 0); - assert(res.msgs.length == 0); -} - -function find_basedn(ldb) -{ - var attrs = new Array("defaultNamingContext"); - var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); - assert(res.error == 0); - assert(res.msgs.length == 1); - return res.msgs[0].defaultNamingContext; -} - -function find_configurationdn(ldb) -{ - var attrs = new Array("configurationNamingContext"); - var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); - assert(res.error == 0); - assert(res.msgs.length == 1); - return res.msgs[0].configurationNamingContext; -} - -function find_schemadn(ldb) -{ - var attrs = new Array("schemaNamingContext"); - var res = ldb.search("", "", ldb.SCOPE_BASE, attrs); - assert(res.error == 0); - assert(res.msgs.length == 1); - return res.msgs[0].schemaNamingContext; -} - -/* use command line creds if available */ -ldb.credentials = options.get_credentials(); -gc_ldb.credentials = options.get_credentials(); - -var ok = ldb.connect("ldap://" + host); -var base_dn = find_basedn(ldb); - -var configuration_dn = find_configurationdn(ldb); -var schema_dn = find_schemadn(ldb); - -println("baseDN: %s\n", base_dn); - -var ok = gc_ldb.connect("ldap://" + host + ":3268"); -if (!ok) { - gc_ldb = undefined; -} - -basic_tests(ldb, gc_ldb, base_dn, configuration_dn, schema_dn) - -basedn_tests(ldb, gc_ldb) - -return 0; -- cgit From 16112762e70879b50f1dfc49452d6d278bd256cf Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 15 Aug 2008 20:40:57 +1000 Subject: Generate the subSchema in cn=Aggregate This reads the schema from the in-memory structure, when the magic attributes are requested. The code is a modified version of that used in the ad2oLschema tool (now shared). The schema_fsmo module handles the insertion of the generated result. As such, this commit also removes these entries from the setup/schema.ldif Metze's previous stub of this functionality is also removed. Andrew Bartlett (This used to be commit c7c32ec7b42bdf0f7b669644516438c71b364e60) --- testprogs/ejs/minschema.js | 41 +---------------------------------------- 1 file changed, 1 insertion(+), 40 deletions(-) (limited to 'testprogs/ejs') diff --git a/testprogs/ejs/minschema.js b/testprogs/ejs/minschema.js index 5f873dd6c4..f088501c1d 100755 --- a/testprogs/ejs/minschema.js +++ b/testprogs/ejs/minschema.js @@ -14,9 +14,7 @@ var options = GetOptions(ARGV, "POPT_COMMON_CREDENTIALS", "verbose", "classes", - "attributes", - "subschema", - "subschema-auto"); + "attributes"); if (options == undefined) { println("Failed to parse options"); return -1; @@ -25,8 +23,6 @@ verbose = options["verbose"]; dump_all = "yes"; dump_classes = options["classes"]; dump_attributes = options["attributes"]; -dump_subschema = options["subschema"]; -dump_subschema_auto = options["subschema-auto"]; if (dump_classes != undefined) { dump_all = undefined; @@ -34,18 +30,9 @@ if (dump_classes != undefined) { if (dump_attributes != undefined) { dump_all = undefined; } -if (dump_subschema != undefined) { - dump_all = undefined; -} -if (dump_subschema_auto != undefined) { - dump_all = undefined; - dump_subschema = "yes"; -} if (dump_all != undefined) { dump_classes = "yes"; dump_attributes = "yes"; - dump_subschema = "yes"; - dump_subschema_auto = "yes"; } if (options.ARGV.length != 2) { @@ -697,28 +684,6 @@ function write_aggregate_attribute(attrib) { } -/* - write the aggregate record -*/ -function write_aggregate() { - printf("dn: CN=Aggregate,${SCHEMADN}\n"); - print("objectClass: top -objectClass: subSchema -"); - if (dump_subschema_auto == undefined) { - return; - } - - for (i in objectclasses) { - write_aggregate_objectclass(objectclasses[i]); - } - for (i in attributes) { - write_aggregate_attribute(attributes[i]); - } - for (i in objectclasses) { - write_aggregate_ditcontentrule(objectclasses[i]); - } -} /* load a list from a file @@ -813,10 +778,6 @@ if (dump_attributes != undefined) { if (dump_classes != undefined) { write_ldif(objectclasses, class_attrs); } -if (dump_subschema != undefined) { - write_aggregate(); -} - if (verbose == undefined) { exit(0); } -- cgit