svn commit: samba r12180 - in branches/tmp/samba4_ldap_controls/source/lib/ldb: modules tools

idra at samba.org idra at samba.org
Sun Dec 11 10:09:33 GMT 2005


Author: idra
Date: 2005-12-11 10:09:32 +0000 (Sun, 11 Dec 2005)
New Revision: 12180

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

Log:

The ber encoding of the control now seems correct
but I am not yet able to get any results from w2k3
this time I do not get back any error (so it seems
the parsing is ok) but we time out the connection
after 60 second before any reply is received.


Modified:
   branches/tmp/samba4_ldap_controls/source/lib/ldb/modules/sort.c
   branches/tmp/samba4_ldap_controls/source/lib/ldb/tools/ldbtest_controls.c


Changeset:
Modified: branches/tmp/samba4_ldap_controls/source/lib/ldb/modules/sort.c
===================================================================
--- branches/tmp/samba4_ldap_controls/source/lib/ldb/modules/sort.c	2005-12-11 08:31:46 UTC (rev 12179)
+++ branches/tmp/samba4_ldap_controls/source/lib/ldb/modules/sort.c	2005-12-11 10:09:32 UTC (rev 12180)
@@ -59,7 +59,7 @@
 {
 	struct ldb_result *sort_result;
 	struct ldb_control **saved_controls;
-	struct ldb_server_sort_control *sort_ctrl;
+	struct ldb_server_sort_control **sort_ctrls;
 	struct ldb_sort_resp_control *sort_resp;
 	int i, cnum, ret;
 
@@ -79,8 +79,13 @@
 	}
 
 	/* sort_ctrl = talloc_get_type(req->controls[i]->data, struct ldb_server_sort_control); */
-	sort_ctrl = (struct ldb_server_sort_control *)req->controls[cnum]->data;
+	sort_ctrls = (struct ldb_server_sort_control **)req->controls[cnum]->data;
 
+	/* FIXME: we do not support more than one attribute for sorting right now */
+	if (sort_ctrls[1] != NULL) {
+		return LDB_ERR_UNSUPPORTED_CRITICAL_EXTENSION;
+	}
+
 	/* save it locally and remove it from the list */
 	saved_controls = req->controls;
 	for (i = 0; req->controls[i]; i++);
@@ -109,9 +114,9 @@
 
 	/* SORT HERE */
 	sort_result = req->op.search.res;
-	sort_control = sort_ctrl;
+	sort_control = sort_ctrls[0];
 	ldbctx = module->ldb;
-	h = ldb_attrib_handler(module->ldb, sort_ctrl->attributeName);
+	h = ldb_attrib_handler(ldbctx, sort_control->attributeName);
 
 	/* FIXME: I don't like to use a static structure like sort_control
 	 * we need to either:

Modified: branches/tmp/samba4_ldap_controls/source/lib/ldb/tools/ldbtest_controls.c
===================================================================
--- branches/tmp/samba4_ldap_controls/source/lib/ldb/tools/ldbtest_controls.c	2005-12-11 08:31:46 UTC (rev 12179)
+++ branches/tmp/samba4_ldap_controls/source/lib/ldb/tools/ldbtest_controls.c	2005-12-11 10:09:32 UTC (rev 12180)
@@ -73,7 +73,6 @@
 
 	ctrl = talloc_array(ldb, struct ldb_control *, 2);
 	ctrl[0] = talloc(ldb, struct ldb_control);
-	ctrl[1] = NULL;
 	ctrl[0]->oid = LDB_CONTROL_PAGED_RESULTS_OID;
 	ctrl[0]->critical = True;
 	paged_control = talloc(ctrl[0], struct ldb_paged_control);
@@ -81,6 +80,7 @@
 	paged_control->cookie = NULL;
 	paged_control->cookie_len = 0;
 	ctrl[0]->data = paged_control;
+	ctrl[1] = NULL;
 	
 	req.operation = LDB_REQ_SEARCH;
 	req.op.search.base = basedn;
@@ -155,12 +155,12 @@
 
 	ctrl = talloc_array(ldb, struct ldb_control *, 2);
 	ctrl[0] = talloc(ldb, struct ldb_control);
-	ctrl[1] = NULL;
 	ctrl[0]->oid = LDB_CONTROL_EXTENDED_DN_OID;
 	ctrl[0]->critical = True;
 	extended_control = talloc(ctrl[0], struct ldb_extended_dn_control);
 	extended_control->type = 0;
 	ctrl[0]->data = extended_control;
+	ctrl[1] = NULL;
 	
 	req.operation = LDB_REQ_SEARCH;
 	req.op.search.base = basedn;
@@ -210,23 +210,25 @@
 	struct ldb_request req;
 	struct ldb_result *result = NULL;
 	struct ldb_control **ctrl;
-	struct ldb_server_sort_control *sort_control;
+	struct ldb_server_sort_control **sort_control;
 	struct ldb_sort_resp_control *sort_result;
 
 	ctrl = talloc_array(ldb, struct ldb_control *, 2);
 	ctrl[0] = talloc(ldb, struct ldb_control);
-	ctrl[1] = NULL;
 	ctrl[0]->oid = LDB_CONTROL_SERVER_SORT_OID;
 	ctrl[0]->critical = True;
-	sort_control = talloc(ctrl[0], struct ldb_server_sort_control);
+	sort_control = talloc_array(ctrl[0], struct ldb_server_sort_control *, 2);
+	sort_control[0] = talloc(sort_control, struct ldb_server_sort_control);
 	if (attrs) {
-		sort_control->attributeName = talloc_strdup(sort_control, attrs[0]);
+		sort_control[0]->attributeName = talloc_strdup(sort_control[0], attrs[0]);
 	} else {
-		sort_control->attributeName = "distinguishedName";
+		sort_control[0]->attributeName = "distinguishedName";
 	}
-	sort_control->orderingRule = NULL;
-	sort_control->reverse = True;
+	sort_control[0]->orderingRule = NULL;
+	sort_control[0]->reverse = True;
+	sort_control[1] = NULL;
 	ctrl[0]->data = sort_control;
+	ctrl[1] = NULL;
 	
 	req.operation = LDB_REQ_SEARCH;
 	req.op.search.base = basedn;



More information about the samba-cvs mailing list