svn commit: samba r15530 - in branches/SAMBA_4_0/source/torture/ldap: .

tridge at samba.org tridge at samba.org
Thu May 11 02:57:42 GMT 2006


Author: tridge
Date: 2006-05-11 02:57:41 +0000 (Thu, 11 May 2006)
New Revision: 15530

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=15530

Log:

added testing of generic CLDAP requests, looking at the rootDSE. Jerry
has found that w2k3 does respond to rootDSE cldap requests. This test
shows that it does indeed work, but the expression handling is not
what you would expect

Modified:
   branches/SAMBA_4_0/source/torture/ldap/cldap.c


Changeset:
Modified: branches/SAMBA_4_0/source/torture/ldap/cldap.c
===================================================================
--- branches/SAMBA_4_0/source/torture/ldap/cldap.c	2006-05-10 22:33:10 UTC (rev 15529)
+++ branches/SAMBA_4_0/source/torture/ldap/cldap.c	2006-05-11 02:57:41 UTC (rev 15530)
@@ -23,8 +23,10 @@
 
 #include "includes.h"
 #include "libcli/cldap/cldap.h"
+#include "libcli/ldap/ldap.h"
 #include "librpc/gen_ndr/ndr_nbt.h"
 #include "torture/torture.h"
+#include "lib/ldb/include/ldb.h"
 
 #define CHECK_STATUS(status, correct) do { \
 	if (!NT_STATUS_EQUAL(status, correct)) { \
@@ -33,11 +35,6 @@
 		ret = False; \
 		goto done; \
 	} \
-	if (DEBUGLVL(10)) { \
-		NDR_PRINT_UNION_DEBUG(nbt_cldap_netlogon, \
-				      search.in.version & 0xF, \
-				      &search.out.netlogon); \
-	} \
 } while (0)
 
 /*
@@ -165,6 +162,92 @@
 	return ret;	
 }
 
+/*
+  convert a ldap result message to a ldb message. This allows us to
+  use the convenient ldif dump routines in ldb to print out cldap
+  search results
+*/
+static struct ldb_message *ldap_msg_to_ldb(TALLOC_CTX *mem_ctx, struct ldap_SearchResEntry *res)
+{
+	struct ldb_message *msg;
+
+	msg = ldb_msg_new(mem_ctx);
+	msg->dn = ldb_dn_explode_or_special(msg, res->dn);
+	msg->num_elements = res->num_attributes;
+	msg->elements = talloc_steal(msg, res->attributes);
+	return msg;
+}
+
+/*
+  dump a set of cldap results
+*/
+static void cldap_dump_results(struct cldap_search *search)
+{
+	struct ldb_ldif ldif;
+	struct ldb_context *ldb;
+
+	/* we need a ldb context to use ldb_ldif_write_file() */
+	ldb = ldb_init(NULL);
+
+	ZERO_STRUCT(ldif);
+	ldif.msg = ldap_msg_to_ldb(ldb, search->out.response);
+
+	ldb_ldif_write_file(ldb, stdout, &ldif);
+
+	talloc_free(ldb);
+}
+
+/*
+  test generic cldap operations
+*/
+static BOOL test_cldap_generic(TALLOC_CTX *mem_ctx, const char *dest)
+{
+	struct cldap_socket *cldap = cldap_socket_init(mem_ctx, NULL);
+	NTSTATUS status;
+	struct cldap_search search;
+	BOOL ret = True;
+	const char *attrs[] = { "currentTime", "highestCommittedUSN", NULL };
+
+	ZERO_STRUCT(search);
+	search.in.dest_address = dest;
+	search.in.timeout = 10;
+	search.in.retries = 3;
+
+	status = cldap_search(cldap, mem_ctx, &search);
+	CHECK_STATUS(status, NT_STATUS_OK);
+
+	printf("fetching whole rootDSE\n");
+	search.in.filter = "(objectclass=*)";
+	search.in.attributes = NULL;
+
+	status = cldap_search(cldap, mem_ctx, &search);
+	CHECK_STATUS(status, NT_STATUS_OK);
+
+	if (DEBUGLVL(3)) cldap_dump_results(&search);
+
+	printf("fetching currentTime and USN\n");
+	search.in.filter = "(objectclass=*)";
+	search.in.attributes = attrs;
+
+	status = cldap_search(cldap, mem_ctx, &search);
+	CHECK_STATUS(status, NT_STATUS_OK);
+	
+	if (DEBUGLVL(3)) cldap_dump_results(&search);
+
+	printf("Testing a false expression\n");
+	search.in.filter = "(&(objectclass=*)(highestCommittedUSN=2))";
+	search.in.attributes = attrs;
+
+	status = cldap_search(cldap, mem_ctx, &search);
+	CHECK_STATUS(status, NT_STATUS_OK);
+	
+	if (DEBUGLVL(3)) cldap_dump_results(&search);
+	
+
+done:
+	return ret;	
+}
+
 BOOL torture_cldap(struct torture_context *torture)
 {
 	TALLOC_CTX *mem_ctx;
@@ -175,6 +258,9 @@
 
 	ret &= test_cldap_netlogon(mem_ctx, host);
 
+	/* at the moment don't consider this failing to be a failure */
+	test_cldap_generic(mem_ctx, host);
+
 	talloc_free(mem_ctx);
 
 	return ret;



More information about the samba-cvs mailing list