svn commit: samba r8516 - in branches/SAMBA_4_0/source/scripting/ejs: .

idra at samba.org idra at samba.org
Sat Jul 16 18:17:09 GMT 2005


Author: idra
Date: 2005-07-16 18:17:08 +0000 (Sat, 16 Jul 2005)
New Revision: 8516

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

Log:

let us use all parameters of ldbsearch in ldb.search


Modified:
   branches/SAMBA_4_0/source/scripting/ejs/smbcalls_ldb.c


Changeset:
Modified: branches/SAMBA_4_0/source/scripting/ejs/smbcalls_ldb.c
===================================================================
--- branches/SAMBA_4_0/source/scripting/ejs/smbcalls_ldb.c	2005-07-16 18:16:32 UTC (rev 8515)
+++ branches/SAMBA_4_0/source/scripting/ejs/smbcalls_ldb.c	2005-07-16 18:17:08 UTC (rev 8516)
@@ -44,22 +44,26 @@
      res = ldb.search("expression");
      var attrs = new Array("attr1", "attr2", "attr3");
      ldb.search("expression", attrs);
+     var basedn = "cn=this,dc=is,dc=a,dc=test";
+     ldb.search("expression", attrs, ldb.SCOPE_SUBTREE, basedn);
 */
 static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv)
 {
 	const char **attrs = NULL;
 	const char *expression;
+	const char *basedn = NULL;
+	int scope = LDB_SCOPE_DEFAULT;
 	TALLOC_CTX *tmp_ctx = talloc_new(mprMemCtx());
 	struct ldb_context *ldb;
 	int ret;
 	struct ldb_message **res;
 
 	/* validate arguments */
-	if (argc < 1 || argc > 2) {
-		ejsSetErrorMsg(eid, "ldb.search invalid arguments");
+	if (argc < 1 || argc > 4) {
+		ejsSetErrorMsg(eid, "ldb.search invalid number of arguments");
 		goto failed;
 	}
-	if (argc == 2 && argv[1]->type != MPR_TYPE_OBJECT) {
+	if (argc > 3 && argv[3]->type != MPR_TYPE_OBJECT) {
 		ejsSetErrorMsg(eid, "ldb.search attributes must be an object");
 		goto failed;
 	}
@@ -71,14 +75,30 @@
 	
 	expression = mprToString(argv[0]);
 	if (expression == NULL) {
-		ejsSetErrorMsg(eid, "ldb.search invalid arguments");
+		ejsSetErrorMsg(eid, "ldb.search invalid expression");
 		goto failed;
 	}
-	if (argc == 2) {
-		attrs = mprToList(tmp_ctx, argv[1]);
+	if (argc > 1) {
+		basedn = mprToString(argv[1]);
+		/* a null basedn is valid */
 	}
-
-	ret = ldb_search(ldb, NULL, LDB_SCOPE_DEFAULT, expression, attrs, &res);
+	if (argc > 2) {
+		scope = mprToInt(argv[2]);
+		switch (scope) {
+			case LDB_SCOPE_DEFAULT:
+			case LDB_SCOPE_BASE:
+			case LDB_SCOPE_ONELEVEL:
+			case LDB_SCOPE_SUBTREE:
+				break; /* ok */
+			default:
+				ejsSetErrorMsg(eid, "ldb.search invalid scope");
+				goto failed;
+		}
+	}
+	if (argc > 3) {
+		attrs = mprToList(tmp_ctx, argv[3]);
+	}
+	ret = ldb_search(ldb, basedn, scope, expression, attrs, &res);
 	if (ret == -1) {
 		ejsSetErrorMsg(eid, "ldb.search failed - %s", ldb_errstring(ldb));
 		mpr_Return(eid, mprCreateUndefinedVar());
@@ -261,6 +281,9 @@
 	mprSetCFunction(ldb, "modify", ejs_ldbModify);
 	mprSetCFunction(ldb, "delete", ejs_ldbDelete);
 	mprSetCFunction(ldb, "rename", ejs_ldbRename);
+	mprSetVar(ldb, "SCOPE_BASE", mprCreateNumberVar(LDB_SCOPE_BASE));
+	mprSetVar(ldb, "SCOPE_ONE", mprCreateNumberVar(LDB_SCOPE_ONELEVEL));
+	mprSetVar(ldb, "SCOPE_SUBTREE", mprCreateNumberVar(LDB_SCOPE_SUBTREE));
 
 	return 0;
 }



More information about the samba-cvs mailing list