From f84d007c438dd43f2cd5a9b6ca583976c8e777fa Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Sat, 4 Jun 2005 07:04:43 +0000 Subject: r7266: Split the different types of js function defines into separate files, as there are going to be a lot more of them. (This used to be commit b086768589ee27de6616945bbea42b18b40d25d5) --- source4/scripting/ejs/smbcalls_ldb.c | 93 ++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 source4/scripting/ejs/smbcalls_ldb.c (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c new file mode 100644 index 0000000000..cae3857686 --- /dev/null +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -0,0 +1,93 @@ +/* + Unix SMB/CIFS implementation. + + provide hooks into smbd C calls from ejs scripts + + Copyright (C) Andrew Tridgell 2005 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" +#include "lib/ejs/ejs.h" +#include "lib/ldb/include/ldb.h" + +/* + perform an ldb search, returning an array of results + + syntax: + ldbSearch("dbfile", "expression"); + var attrs = new Array("attr1", "attr2", "attr3"); + ldbSearch("dbfile", "expression", attrs); +*/ +static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) +{ + const char **attrs = NULL; + const char *expression, *dbfile; + TALLOC_CTX *tmp_ctx = talloc_new(mprMemCtx()); + struct ldb_context *ldb; + int ret; + struct ldb_message **res; + + /* validate arguments */ + if (argc < 2 || argc > 3 || + argv[0]->type != MPR_TYPE_STRING) { + ejsSetErrorMsg(eid, "ldbSearch invalid arguments"); + goto failed; + } + if (argc == 3 && argv[2]->type != MPR_TYPE_OBJECT) { + ejsSetErrorMsg(eid, "ldbSearch attributes must be an object"); + goto failed; + } + + dbfile = mprToString(argv[0]); + expression = mprToString(argv[1]); + if (argc > 2) { + attrs = mprToList(tmp_ctx, argv[2]); + } + if (dbfile == NULL || expression == NULL) { + ejsSetErrorMsg(eid, "ldbSearch invalid arguments"); + goto failed; + } + + ldb = ldb_wrap_connect(tmp_ctx, dbfile, 0, NULL); + if (ldb == NULL) { + ejsSetErrorMsg(eid, "ldbSearch failed to open %s", dbfile); + goto failed; + } + + ret = ldb_search(ldb, NULL, LDB_SCOPE_DEFAULT, expression, attrs, &res); + if (ret == -1) { + ejsSetErrorMsg(eid, "ldbSearch failed - %s", ldb_errstring(ldb)); + goto failed; + } + + ejsSetReturnValue(eid, mprLdbArray(res, ret, "ldb_message")); + + talloc_free(tmp_ctx); + return 0; + +failed: + talloc_free(tmp_ctx); + return -1; +} + +/* + setup C functions that be called from ejs +*/ +void smb_setup_ejs_ldb(void) +{ + ejsDefineCFunction(-1, "ldbSearch", ejs_ldbSearch, NULL, MPR_VAR_SCRIPT_HANDLE); +} -- cgit From 60ec75cbc7dccfceec9c57799e2af5be21a08609 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 10 Jul 2005 02:37:50 +0000 Subject: r8276: fixed the remaining memory leaks in smbscript. We can now loop doing lots of rpc calls without memory usage increasing. (This used to be commit 9c885a7edb771486793eb287288158157b34e8f3) --- source4/scripting/ejs/smbcalls_ldb.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index cae3857686..414251a31c 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -21,6 +21,7 @@ */ #include "includes.h" +#include "scripting/ejs/smbcalls.h" #include "lib/ejs/ejs.h" #include "lib/ldb/include/ldb.h" @@ -74,7 +75,7 @@ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) goto failed; } - ejsSetReturnValue(eid, mprLdbArray(res, ret, "ldb_message")); + mpr_Return(eid, mprLdbArray(res, ret, "ldb_message")); talloc_free(tmp_ctx); return 0; -- cgit From 1bb2b0603126188e639d7adb6309166c64b5e9df Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 12 Jul 2005 02:54:09 +0000 Subject: r8339: added ldbAdd(), ldbModify(), ldbDelete() and ldbRename() to ejs ldb functions (This used to be commit 322c2137835ff2d76b3183901bf680780f164b5e) --- source4/scripting/ejs/smbcalls_ldb.c | 144 +++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 414251a31c..309271a29d 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -85,10 +85,154 @@ failed: return -1; } + +/* + perform an ldb add or modify +*/ +static int ejs_ldbAddModify(MprVarHandle eid, int argc, char **argv, + int fn(struct ldb_context *, const struct ldb_message *)) +{ + const char *ldifstring, *dbfile; + struct ldb_context *ldb; + struct ldb_ldif *ldif; + int ret; + + if (argc != 2) { + ejsSetErrorMsg(eid, "ldbAddModify invalid arguments"); + return -1; + } + + dbfile = argv[0]; + ldifstring = argv[1]; + + ldb = ldb_wrap_connect(mprMemCtx(), dbfile, 0, NULL); + if (ldb == NULL) { + ejsSetErrorMsg(eid, "ldbAddModify failed to open %s", dbfile); + goto failed; + } + + ldif = ldb_ldif_read_string(ldb, ldifstring); + if (ldif == NULL) { + ejsSetErrorMsg(eid, "ldbAddModify invalid ldif"); + goto failed; + } + ret = fn(ldb, ldif->msg); + + mpr_Return(eid, mprCreateBoolVar(ret == 0)); + talloc_free(ldb); + return 0; + +failed: + talloc_free(ldb); + return -1; +} + + +/* + perform an ldb delete + usage: + ok = ldbDelete(dbfile, dn); +*/ +static int ejs_ldbDelete(MprVarHandle eid, int argc, char **argv) +{ + const char *dn, *dbfile; + struct ldb_context *ldb; + int ret; + + if (argc != 2) { + ejsSetErrorMsg(eid, "ldbDelete invalid arguments"); + return -1; + } + + dbfile = argv[0]; + dn = argv[1]; + + ldb = ldb_wrap_connect(mprMemCtx(), dbfile, 0, NULL); + if (ldb == NULL) { + ejsSetErrorMsg(eid, "ldbDelete failed to open %s", dbfile); + goto failed; + } + + ret = ldb_delete(ldb, dn); + + mpr_Return(eid, mprCreateBoolVar(ret == 0)); + talloc_free(ldb); + return 0; + +failed: + talloc_free(ldb); + return -1; +} + +/* + perform an ldb rename + usage: + ok = ldbRename(dbfile, dn1, dn2); +*/ +static int ejs_ldbRename(MprVarHandle eid, int argc, char **argv) +{ + const char *dn1, *dn2, *dbfile; + struct ldb_context *ldb; + int ret; + + if (argc != 3) { + ejsSetErrorMsg(eid, "ldbRename invalid arguments"); + return -1; + } + + dbfile = argv[0]; + dn1 = argv[1]; + dn2 = argv[2]; + + ldb = ldb_wrap_connect(mprMemCtx(), dbfile, 0, NULL); + if (ldb == NULL) { + ejsSetErrorMsg(eid, "ldbRename failed to open %s", dbfile); + goto failed; + } + + ret = ldb_rename(ldb, dn1, dn2); + + mpr_Return(eid, mprCreateBoolVar(ret == 0)); + talloc_free(ldb); + return 0; + +failed: + talloc_free(ldb); + return -1; +} + +/* + perform an ldb modify + + syntax: + ok = ldbModify("dbfile", ldifstring); +*/ +static int ejs_ldbAdd(MprVarHandle eid, int argc, char **argv) +{ + return ejs_ldbAddModify(eid, argc, argv, ldb_add); +} + +/* + perform an ldb add + + syntax: + ok = ldbAdd("dbfile", ldifstring); +*/ +static int ejs_ldbModify(MprVarHandle eid, int argc, char **argv) +{ + return ejs_ldbAddModify(eid, argc, argv, ldb_modify); +} + + + /* setup C functions that be called from ejs */ void smb_setup_ejs_ldb(void) { ejsDefineCFunction(-1, "ldbSearch", ejs_ldbSearch, NULL, MPR_VAR_SCRIPT_HANDLE); + ejsDefineStringCFunction(-1, "ldbAdd", ejs_ldbAdd, NULL, MPR_VAR_SCRIPT_HANDLE); + ejsDefineStringCFunction(-1, "ldbModify", ejs_ldbModify, NULL, MPR_VAR_SCRIPT_HANDLE); + ejsDefineStringCFunction(-1, "ldbDelete", ejs_ldbDelete, NULL, MPR_VAR_SCRIPT_HANDLE); + ejsDefineStringCFunction(-1, "ldbRename", ejs_ldbRename, NULL, MPR_VAR_SCRIPT_HANDLE); } -- cgit From 9f86e202865807ed898eff684d7cf3be7daae0fc Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 12 Jul 2005 05:53:51 +0000 Subject: r8340: - added sys_gmtime() - added sys_unlink() - added sys_file_load() and sys_file_save() - use mprString() instead of mprCreateStringVar() to cope with NULL strings - removed smbcalls_irpc.c as its not needed any more - allow ldbAdd() and ldbModify() to take multiple ldif records - added a sprintf() function to ejs. Quite complex, but very useful! (This used to be commit 625628a3f6e78349d2240ebcc79081f350672070) --- source4/scripting/ejs/smbcalls_ldb.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 309271a29d..9876fe151f 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -111,12 +111,10 @@ static int ejs_ldbAddModify(MprVarHandle eid, int argc, char **argv, goto failed; } - ldif = ldb_ldif_read_string(ldb, ldifstring); - if (ldif == NULL) { - ejsSetErrorMsg(eid, "ldbAddModify invalid ldif"); - goto failed; + while ((ldif = ldb_ldif_read_string(ldb, &ldifstring))) { + ret = fn(ldb, ldif->msg); + talloc_free(ldif); } - ret = fn(ldb, ldif->msg); mpr_Return(eid, mprCreateBoolVar(ret == 0)); talloc_free(ldb); -- cgit From adbb1612c12d03fa94e4ee23fbc2fa96c09d9dcd Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 13 Jul 2005 00:06:38 +0000 Subject: r8399: move the ejs and esp code closer to the directory layout used by the upstream sources. This makes it much easier to keep it up to date. I will separate out the mpr code into lib/appweb/mpr next (This used to be commit 52db7a052baeb0f11361ed69b71cb790039e3cc9) --- source4/scripting/ejs/smbcalls_ldb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 9876fe151f..69ebe39567 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -22,7 +22,7 @@ #include "includes.h" #include "scripting/ejs/smbcalls.h" -#include "lib/ejs/ejs.h" +#include "lib/appweb/ejs/ejs.h" #include "lib/ldb/include/ldb.h" /* -- cgit From e2881aca86936ef4712c431b01dfab11427aea89 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 13 Jul 2005 02:16:58 +0000 Subject: r8406: make sure we give an error in ldbAdd() if any record fails (This used to be commit 632f99017ded607c80022f730b6ec7e37bd13642) --- source4/scripting/ejs/smbcalls_ldb.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 69ebe39567..2df53ace4f 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -114,6 +114,7 @@ static int ejs_ldbAddModify(MprVarHandle eid, int argc, char **argv, while ((ldif = ldb_ldif_read_string(ldb, &ldifstring))) { ret = fn(ldb, ldif->msg); talloc_free(ldif); + if (ret != 0) break; } mpr_Return(eid, mprCreateBoolVar(ret == 0)); -- 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) --- source4/scripting/ejs/smbcalls_ldb.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 2df53ace4f..659ac11b1b 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -222,6 +222,22 @@ static int ejs_ldbModify(MprVarHandle eid, int argc, char **argv) return ejs_ldbAddModify(eid, argc, argv, ldb_modify); } +/* + initialise ldb ejs subsystem +*/ +static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv) +{ + struct MprVar ldb = mprObject("ldb"); + + mprSetCFunction(&ldb, "search", ejs_ldbSearch); + mprSetStringCFunction(&ldb, "add", ejs_ldbAdd); + mprSetStringCFunction(&ldb, "modify", ejs_ldbModify); + mprSetStringCFunction(&ldb, "delete", ejs_ldbDelete); + mprSetStringCFunction(&ldb, "rename", ejs_ldbRename); + + mpr_Return(eid, ldb); + return 0; +} /* @@ -229,9 +245,5 @@ static int ejs_ldbModify(MprVarHandle eid, int argc, char **argv) */ void smb_setup_ejs_ldb(void) { - ejsDefineCFunction(-1, "ldbSearch", ejs_ldbSearch, NULL, MPR_VAR_SCRIPT_HANDLE); - ejsDefineStringCFunction(-1, "ldbAdd", ejs_ldbAdd, NULL, MPR_VAR_SCRIPT_HANDLE); - ejsDefineStringCFunction(-1, "ldbModify", ejs_ldbModify, NULL, MPR_VAR_SCRIPT_HANDLE); - ejsDefineStringCFunction(-1, "ldbDelete", ejs_ldbDelete, NULL, MPR_VAR_SCRIPT_HANDLE); - ejsDefineStringCFunction(-1, "ldbRename", ejs_ldbRename, NULL, MPR_VAR_SCRIPT_HANDLE); + ejsDefineCFunction(-1, "ldb_init", ejs_ldb_init, NULL, MPR_VAR_SCRIPT_HANDLE); } -- 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) --- source4/scripting/ejs/smbcalls_ldb.c | 174 ++++++++++++++++++++--------------- 1 file changed, 101 insertions(+), 73 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 659ac11b1b..be54ac79ac 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -25,58 +25,67 @@ #include "lib/appweb/ejs/ejs.h" #include "lib/ldb/include/ldb.h" +/* + get the connected db + */ +static struct ldb_context *ejs_ldb_db(int eid, struct MprVar *v) +{ + struct ldb_context *ldb = mprGetPtr(v, "ldb"); + if (ldb == NULL) { + ejsSetErrorMsg(eid, "invalid ldb connection"); + } + return ldb; +} + /* perform an ldb search, returning an array of results syntax: - ldbSearch("dbfile", "expression"); + res = ldb.search(db, "expression"); var attrs = new Array("attr1", "attr2", "attr3"); - ldbSearch("dbfile", "expression", attrs); + ldb.search(db, "expression", attrs); */ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) { const char **attrs = NULL; - const char *expression, *dbfile; + const char *expression; TALLOC_CTX *tmp_ctx = talloc_new(mprMemCtx()); struct ldb_context *ldb; int ret; struct ldb_message **res; /* validate arguments */ - if (argc < 2 || argc > 3 || - argv[0]->type != MPR_TYPE_STRING) { - ejsSetErrorMsg(eid, "ldbSearch invalid arguments"); + if (argc < 2 || argc > 3) { + ejsSetErrorMsg(eid, "ldb.search invalid arguments"); goto failed; } if (argc == 3 && argv[2]->type != MPR_TYPE_OBJECT) { - ejsSetErrorMsg(eid, "ldbSearch attributes must be an object"); + ejsSetErrorMsg(eid, "ldb.search attributes must be an object"); goto failed; } - dbfile = mprToString(argv[0]); - expression = mprToString(argv[1]); - if (argc > 2) { - attrs = mprToList(tmp_ctx, argv[2]); + ldb = ejs_ldb_db(eid, argv[0]); + if (ldb == NULL) { + return -1; } - if (dbfile == NULL || expression == NULL) { - ejsSetErrorMsg(eid, "ldbSearch invalid arguments"); + + expression = mprToString(argv[1]); + if (expression == NULL) { + ejsSetErrorMsg(eid, "ldb.search invalid arguments"); goto failed; } - - ldb = ldb_wrap_connect(tmp_ctx, dbfile, 0, NULL); - if (ldb == NULL) { - ejsSetErrorMsg(eid, "ldbSearch failed to open %s", dbfile); - goto failed; + if (argc > 2) { + attrs = mprToList(tmp_ctx, argv[2]); } ret = ldb_search(ldb, NULL, LDB_SCOPE_DEFAULT, expression, attrs, &res); if (ret == -1) { - ejsSetErrorMsg(eid, "ldbSearch failed - %s", ldb_errstring(ldb)); - goto failed; + ejsSetErrorMsg(eid, "ldb.search failed - %s", ldb_errstring(ldb)); + mpr_Return(eid, mprCreateUndefinedVar()); + } else { + mpr_Return(eid, mprLdbArray(res, ret, "ldb_message")); } - mpr_Return(eid, mprLdbArray(res, ret, "ldb_message")); - talloc_free(tmp_ctx); return 0; @@ -89,26 +98,28 @@ failed: /* perform an ldb add or modify */ -static int ejs_ldbAddModify(MprVarHandle eid, int argc, char **argv, +static int ejs_ldbAddModify(MprVarHandle eid, int argc, struct MprVar **argv, int fn(struct ldb_context *, const struct ldb_message *)) { - const char *ldifstring, *dbfile; + const char *ldifstring; struct ldb_context *ldb; struct ldb_ldif *ldif; int ret; if (argc != 2) { - ejsSetErrorMsg(eid, "ldbAddModify invalid arguments"); + ejsSetErrorMsg(eid, "ldb.add/modify invalid arguments"); return -1; } - dbfile = argv[0]; - ldifstring = argv[1]; + ldifstring = mprToString(argv[1]); + if (ldifstring == NULL) { + ejsSetErrorMsg(eid, "ldb.add/modify invalid arguments"); + return -1; + } - ldb = ldb_wrap_connect(mprMemCtx(), dbfile, 0, NULL); + ldb = ejs_ldb_db(eid, argv[0]); if (ldb == NULL) { - ejsSetErrorMsg(eid, "ldbAddModify failed to open %s", dbfile); - goto failed; + return -1; } while ((ldif = ldb_ldif_read_string(ldb, &ldifstring))) { @@ -118,95 +129,79 @@ static int ejs_ldbAddModify(MprVarHandle eid, int argc, char **argv, } mpr_Return(eid, mprCreateBoolVar(ret == 0)); - talloc_free(ldb); return 0; - -failed: - talloc_free(ldb); - return -1; } /* perform an ldb delete usage: - ok = ldbDelete(dbfile, dn); + ok = ldb.delete(db, dn); */ -static int ejs_ldbDelete(MprVarHandle eid, int argc, char **argv) +static int ejs_ldbDelete(MprVarHandle eid, int argc, struct MprVar **argv) { - const char *dn, *dbfile; + const char *dn; struct ldb_context *ldb; int ret; if (argc != 2) { - ejsSetErrorMsg(eid, "ldbDelete invalid arguments"); + ejsSetErrorMsg(eid, "ldb.delete invalid arguments"); return -1; } - dbfile = argv[0]; - dn = argv[1]; + dn = mprToString(argv[1]); - ldb = ldb_wrap_connect(mprMemCtx(), dbfile, 0, NULL); + ldb = ejs_ldb_db(eid, argv[0]); if (ldb == NULL) { - ejsSetErrorMsg(eid, "ldbDelete failed to open %s", dbfile); - goto failed; + return -1; } - ret = ldb_delete(ldb, dn); mpr_Return(eid, mprCreateBoolVar(ret == 0)); - talloc_free(ldb); return 0; - -failed: - talloc_free(ldb); - return -1; } /* perform an ldb rename usage: - ok = ldbRename(dbfile, dn1, dn2); + ok = ldb.rename(db, dn1, dn2); */ -static int ejs_ldbRename(MprVarHandle eid, int argc, char **argv) +static int ejs_ldbRename(MprVarHandle eid, int argc, struct MprVar **argv) { - const char *dn1, *dn2, *dbfile; + const char *dn1, *dn2; struct ldb_context *ldb; int ret; if (argc != 3) { - ejsSetErrorMsg(eid, "ldbRename invalid arguments"); + ejsSetErrorMsg(eid, "ldb.rename invalid arguments"); return -1; } - dbfile = argv[0]; - dn1 = argv[1]; - dn2 = argv[2]; + dn1 = mprToString(argv[1]); + dn2 = mprToString(argv[2]); + if (dn1 == NULL || dn2 == NULL) { + ejsSetErrorMsg(eid, "ldb.rename invalid arguments"); + return -1; + } - ldb = ldb_wrap_connect(mprMemCtx(), dbfile, 0, NULL); + ldb = ejs_ldb_db(eid, argv[0]); if (ldb == NULL) { - ejsSetErrorMsg(eid, "ldbRename failed to open %s", dbfile); - goto failed; + return -1; } ret = ldb_rename(ldb, dn1, dn2); mpr_Return(eid, mprCreateBoolVar(ret == 0)); - talloc_free(ldb); return 0; - -failed: - talloc_free(ldb); - return -1; } /* perform an ldb modify syntax: - ok = ldbModify("dbfile", ldifstring); + ok = ldb.modify(db, ldifstring); */ -static int ejs_ldbAdd(MprVarHandle eid, int argc, char **argv) +static int ejs_ldbAdd(MprVarHandle eid, int argc, struct MprVar **argv) { return ejs_ldbAddModify(eid, argc, argv, ldb_add); } @@ -215,13 +210,45 @@ static int ejs_ldbAdd(MprVarHandle eid, int argc, char **argv) perform an ldb add syntax: - ok = ldbAdd("dbfile", ldifstring); + ok = ldb.add(db, ldifstring); */ -static int ejs_ldbModify(MprVarHandle eid, int argc, char **argv) +static int ejs_ldbModify(MprVarHandle eid, int argc, struct MprVar **argv) { return ejs_ldbAddModify(eid, argc, argv, ldb_modify); } +/* + connect to a database + usage: + db = ldb.connect(dbfile); +*/ +static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) +{ + struct ldb_context *ldb; + const char *dbfile; + struct MprVar v; + + if (argc != 1) { + ejsSetErrorMsg(eid, "ldb.connect invalid arguments"); + return -1; + } + + dbfile = argv[0]; + + ldb = ldb_wrap_connect(mprMemCtx(), dbfile, 0, NULL); + if (ldb == NULL) { + ejsSetErrorMsg(eid, "ldb.connect failed to open %s", dbfile); + mpr_Return(eid, mprCreateUndefinedVar()); + } + + v = mprObject("db"); + mprSetPtrChild(&v, "ldb", ldb); + + mpr_Return(eid, v); + return 0; +} + + /* initialise ldb ejs subsystem */ @@ -229,11 +256,12 @@ static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv) { struct MprVar ldb = mprObject("ldb"); + mprSetStringCFunction(&ldb, "connect", ejs_ldbConnect); mprSetCFunction(&ldb, "search", ejs_ldbSearch); - mprSetStringCFunction(&ldb, "add", ejs_ldbAdd); - mprSetStringCFunction(&ldb, "modify", ejs_ldbModify); - mprSetStringCFunction(&ldb, "delete", ejs_ldbDelete); - mprSetStringCFunction(&ldb, "rename", ejs_ldbRename); + mprSetCFunction(&ldb, "add", ejs_ldbAdd); + mprSetCFunction(&ldb, "modify", ejs_ldbModify); + mprSetCFunction(&ldb, "delete", ejs_ldbDelete); + mprSetCFunction(&ldb, "rename", ejs_ldbRename); mpr_Return(eid, ldb); return 0; -- 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) --- source4/scripting/ejs/smbcalls_ldb.c | 78 ++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 39 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index be54ac79ac..924a9665b3 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -28,9 +28,10 @@ /* get the connected db */ -static struct ldb_context *ejs_ldb_db(int eid, struct MprVar *v) +static struct ldb_context *ejs_ldb_db(int eid) { - struct ldb_context *ldb = mprGetPtr(v, "ldb"); + struct MprVar *this = mprGetProperty(ejsGetLocalObject(eid), "this", 0); + struct ldb_context *ldb = mprGetPtr(this, "db"); if (ldb == NULL) { ejsSetErrorMsg(eid, "invalid ldb connection"); } @@ -41,9 +42,9 @@ static struct ldb_context *ejs_ldb_db(int eid, struct MprVar *v) perform an ldb search, returning an array of results syntax: - res = ldb.search(db, "expression"); + res = ldb.search("expression"); var attrs = new Array("attr1", "attr2", "attr3"); - ldb.search(db, "expression", attrs); + ldb.search("expression", attrs); */ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) { @@ -55,27 +56,27 @@ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) struct ldb_message **res; /* validate arguments */ - if (argc < 2 || argc > 3) { + if (argc < 1 || argc > 2) { ejsSetErrorMsg(eid, "ldb.search invalid arguments"); goto failed; } - if (argc == 3 && argv[2]->type != MPR_TYPE_OBJECT) { + if (argc == 2 && argv[1]->type != MPR_TYPE_OBJECT) { ejsSetErrorMsg(eid, "ldb.search attributes must be an object"); goto failed; } - ldb = ejs_ldb_db(eid, argv[0]); + ldb = ejs_ldb_db(eid); if (ldb == NULL) { return -1; } - expression = mprToString(argv[1]); + expression = mprToString(argv[0]); if (expression == NULL) { ejsSetErrorMsg(eid, "ldb.search invalid arguments"); goto failed; } - if (argc > 2) { - attrs = mprToList(tmp_ctx, argv[2]); + if (argc == 2) { + attrs = mprToList(tmp_ctx, argv[1]); } ret = ldb_search(ldb, NULL, LDB_SCOPE_DEFAULT, expression, attrs, &res); @@ -106,18 +107,18 @@ static int ejs_ldbAddModify(MprVarHandle eid, int argc, struct MprVar **argv, struct ldb_ldif *ldif; int ret; - if (argc != 2) { + if (argc != 1) { ejsSetErrorMsg(eid, "ldb.add/modify invalid arguments"); return -1; } - ldifstring = mprToString(argv[1]); + ldifstring = mprToString(argv[0]); if (ldifstring == NULL) { ejsSetErrorMsg(eid, "ldb.add/modify invalid arguments"); return -1; } - ldb = ejs_ldb_db(eid, argv[0]); + ldb = ejs_ldb_db(eid); if (ldb == NULL) { return -1; } @@ -136,7 +137,7 @@ static int ejs_ldbAddModify(MprVarHandle eid, int argc, struct MprVar **argv, /* perform an ldb delete usage: - ok = ldb.delete(db, dn); + ok = ldb.delete(dn); */ static int ejs_ldbDelete(MprVarHandle eid, int argc, struct MprVar **argv) { @@ -144,14 +145,14 @@ static int ejs_ldbDelete(MprVarHandle eid, int argc, struct MprVar **argv) struct ldb_context *ldb; int ret; - if (argc != 2) { + if (argc != 1) { ejsSetErrorMsg(eid, "ldb.delete invalid arguments"); return -1; } - dn = mprToString(argv[1]); + dn = mprToString(argv[0]); - ldb = ejs_ldb_db(eid, argv[0]); + ldb = ejs_ldb_db(eid); if (ldb == NULL) { return -1; } @@ -164,7 +165,7 @@ static int ejs_ldbDelete(MprVarHandle eid, int argc, struct MprVar **argv) /* perform an ldb rename usage: - ok = ldb.rename(db, dn1, dn2); + ok = ldb.rename(dn1, dn2); */ static int ejs_ldbRename(MprVarHandle eid, int argc, struct MprVar **argv) { @@ -172,19 +173,19 @@ static int ejs_ldbRename(MprVarHandle eid, int argc, struct MprVar **argv) struct ldb_context *ldb; int ret; - if (argc != 3) { + if (argc != 2) { ejsSetErrorMsg(eid, "ldb.rename invalid arguments"); return -1; } - dn1 = mprToString(argv[1]); - dn2 = mprToString(argv[2]); + dn1 = mprToString(argv[0]); + dn2 = mprToString(argv[1]); if (dn1 == NULL || dn2 == NULL) { ejsSetErrorMsg(eid, "ldb.rename invalid arguments"); return -1; } - ldb = ejs_ldb_db(eid, argv[0]); + ldb = ejs_ldb_db(eid); if (ldb == NULL) { return -1; } @@ -199,7 +200,7 @@ static int ejs_ldbRename(MprVarHandle eid, int argc, struct MprVar **argv) perform an ldb modify syntax: - ok = ldb.modify(db, ldifstring); + ok = ldb.modify(ldifstring); */ static int ejs_ldbAdd(MprVarHandle eid, int argc, struct MprVar **argv) { @@ -210,7 +211,7 @@ static int ejs_ldbAdd(MprVarHandle eid, int argc, struct MprVar **argv) perform an ldb add syntax: - ok = ldb.add(db, ldifstring); + ok = ldb.add(ldifstring); */ static int ejs_ldbModify(MprVarHandle eid, int argc, struct MprVar **argv) { @@ -220,13 +221,13 @@ static int ejs_ldbModify(MprVarHandle eid, int argc, struct MprVar **argv) /* connect to a database usage: - db = ldb.connect(dbfile); + ok = ldb.connect(dbfile); */ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) { struct ldb_context *ldb; const char *dbfile; - struct MprVar v; + struct MprVar *this = mprGetProperty(ejsGetLocalObject(eid), "this", 0); if (argc != 1) { ejsSetErrorMsg(eid, "ldb.connect invalid arguments"); @@ -238,13 +239,10 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) ldb = ldb_wrap_connect(mprMemCtx(), dbfile, 0, NULL); if (ldb == NULL) { ejsSetErrorMsg(eid, "ldb.connect failed to open %s", dbfile); - mpr_Return(eid, mprCreateUndefinedVar()); } - v = mprObject("db"); - mprSetPtrChild(&v, "ldb", ldb); - - mpr_Return(eid, v); + mprSetPtrChild(this, "db", ldb); + mpr_Return(eid, mprCreateBoolVar(ldb != NULL)); return 0; } @@ -254,16 +252,18 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) */ static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv) { - struct MprVar ldb = mprObject("ldb"); + struct MprVar *ldb; + mpr_Return(eid, mprObject("ldb")); + + ldb = ejsGetReturnValue(eid); - mprSetStringCFunction(&ldb, "connect", ejs_ldbConnect); - mprSetCFunction(&ldb, "search", ejs_ldbSearch); - mprSetCFunction(&ldb, "add", ejs_ldbAdd); - mprSetCFunction(&ldb, "modify", ejs_ldbModify); - mprSetCFunction(&ldb, "delete", ejs_ldbDelete); - mprSetCFunction(&ldb, "rename", ejs_ldbRename); + mprSetStringCFunction(ldb, "connect", ejs_ldbConnect); + mprSetCFunction(ldb, "search", ejs_ldbSearch); + mprSetCFunction(ldb, "add", ejs_ldbAdd); + mprSetCFunction(ldb, "modify", ejs_ldbModify); + mprSetCFunction(ldb, "delete", ejs_ldbDelete); + mprSetCFunction(ldb, "rename", ejs_ldbRename); - mpr_Return(eid, ldb); return 0; } -- cgit From 84e3efd8ea1cdb48e20f2f42c32f3ffa7b822352 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 15 Jul 2005 11:23:17 +0000 Subject: r8489: neaten up the object handling (This used to be commit ccf20b2b13b11ac07b59988809b6c5160388a616) --- source4/scripting/ejs/smbcalls_ldb.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 924a9665b3..cdf3b3dd6c 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -30,8 +30,7 @@ */ static struct ldb_context *ejs_ldb_db(int eid) { - struct MprVar *this = mprGetProperty(ejsGetLocalObject(eid), "this", 0); - struct ldb_context *ldb = mprGetPtr(this, "db"); + struct ldb_context *ldb = mprGetThisPtr(eid, "db"); if (ldb == NULL) { ejsSetErrorMsg(eid, "invalid ldb connection"); } @@ -227,7 +226,6 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) { struct ldb_context *ldb; const char *dbfile; - struct MprVar *this = mprGetProperty(ejsGetLocalObject(eid), "this", 0); if (argc != 1) { ejsSetErrorMsg(eid, "ldb.connect invalid arguments"); @@ -241,7 +239,7 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) ejsSetErrorMsg(eid, "ldb.connect failed to open %s", dbfile); } - mprSetPtrChild(this, "db", ldb); + mprSetThisPtr(eid, "db", ldb); mpr_Return(eid, mprCreateBoolVar(ldb != NULL)); return 0; } -- cgit From 7d4004a129c1daf0d9010ff61c45a57d8b19dd2d Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Fri, 15 Jul 2005 13:19:16 +0000 Subject: r8499: clearer function name (This used to be commit 5a6c2170ff83c29ed1d7f0f5329f2d9aa00c223a) --- source4/scripting/ejs/smbcalls_ldb.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index cdf3b3dd6c..c8c6366f2d 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -28,7 +28,7 @@ /* get the connected db */ -static struct ldb_context *ejs_ldb_db(int eid) +static struct ldb_context *ejs_get_ldb_context(int eid) { struct ldb_context *ldb = mprGetThisPtr(eid, "db"); if (ldb == NULL) { @@ -64,7 +64,7 @@ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) goto failed; } - ldb = ejs_ldb_db(eid); + ldb = ejs_get_ldb_context(eid); if (ldb == NULL) { return -1; } @@ -117,7 +117,7 @@ static int ejs_ldbAddModify(MprVarHandle eid, int argc, struct MprVar **argv, return -1; } - ldb = ejs_ldb_db(eid); + ldb = ejs_get_ldb_context(eid); if (ldb == NULL) { return -1; } @@ -151,7 +151,7 @@ static int ejs_ldbDelete(MprVarHandle eid, int argc, struct MprVar **argv) dn = mprToString(argv[0]); - ldb = ejs_ldb_db(eid); + ldb = ejs_get_ldb_context(eid); if (ldb == NULL) { return -1; } @@ -184,7 +184,7 @@ static int ejs_ldbRename(MprVarHandle eid, int argc, struct MprVar **argv) return -1; } - ldb = ejs_ldb_db(eid); + ldb = ejs_get_ldb_context(eid); if (ldb == NULL) { return -1; } -- cgit From 54c30b05854e15031eb490fc5f45205329c81001 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sat, 16 Jul 2005 18:17:08 +0000 Subject: r8516: let us use all parameters of ldbsearch in ldb.search (This used to be commit e709e3792846e2bd48b55112c74395d1ab3a1b6a) --- source4/scripting/ejs/smbcalls_ldb.c | 39 ++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index c8c6366f2d..4151eaedab 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -44,22 +44,26 @@ static struct ldb_context *ejs_get_ldb_context(int eid) 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 @@ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) 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 @@ static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv) 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; } -- cgit From 0752efe05554de05eea1812a4dd721692ca8bf95 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 18 Jul 2005 23:57:37 +0000 Subject: r8557: expose ldb_errstring() in ldb ejs code (This used to be commit 21ca972d06bbf4694569855f39a1649d799c05c7) --- source4/scripting/ejs/smbcalls_ldb.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 4151eaedab..b56a3da7a1 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -215,6 +215,24 @@ static int ejs_ldbRename(MprVarHandle eid, int argc, struct MprVar **argv) return 0; } +/* + get last error message + usage: + ok = ldb.errstring(); +*/ +static int ejs_ldbErrstring(MprVarHandle eid, int argc, struct MprVar **argv) +{ + struct ldb_context *ldb; + + ldb = ejs_get_ldb_context(eid); + if (ldb == NULL) { + return -1; + } + + mpr_Return(eid, mprString(ldb_errstring(ldb))); + return 0; +} + /* perform an ldb modify @@ -281,6 +299,7 @@ static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv) mprSetCFunction(ldb, "modify", ejs_ldbModify); mprSetCFunction(ldb, "delete", ejs_ldbDelete); mprSetCFunction(ldb, "rename", ejs_ldbRename); + mprSetCFunction(ldb, "errstring", ejs_ldbErrstring); mprSetVar(ldb, "SCOPE_BASE", mprCreateNumberVar(LDB_SCOPE_BASE)); mprSetVar(ldb, "SCOPE_ONE", mprCreateNumberVar(LDB_SCOPE_ONELEVEL)); mprSetVar(ldb, "SCOPE_SUBTREE", mprCreateNumberVar(LDB_SCOPE_SUBTREE)); -- cgit From 09708a2012330419db82f2fb45fdccc52cbd2b01 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 19 Jul 2005 02:09:05 +0000 Subject: r8569: delete is a js reserved word, so use del instead (This used to be commit 9af48b8fc201822e290a1071d9e61afe519558f5) --- source4/scripting/ejs/smbcalls_ldb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index b56a3da7a1..30d0d354b4 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -297,7 +297,7 @@ static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv) mprSetCFunction(ldb, "search", ejs_ldbSearch); mprSetCFunction(ldb, "add", ejs_ldbAdd); mprSetCFunction(ldb, "modify", ejs_ldbModify); - mprSetCFunction(ldb, "delete", ejs_ldbDelete); + mprSetCFunction(ldb, "del", ejs_ldbDelete); mprSetCFunction(ldb, "rename", ejs_ldbRename); mprSetCFunction(ldb, "errstring", ejs_ldbErrstring); mprSetVar(ldb, "SCOPE_BASE", mprCreateNumberVar(LDB_SCOPE_BASE)); -- cgit From da88ef65e0f625e8baab07251839171d0ae5aa1b Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 19 Jul 2005 11:54:33 +0000 Subject: r8602: allow options in ldb connect calls (This used to be commit 4c1d6a97c0c9df2848a16afb1b4eed4b20963bef) --- source4/scripting/ejs/smbcalls_ldb.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 30d0d354b4..0795db9018 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -259,20 +259,21 @@ static int ejs_ldbModify(MprVarHandle eid, int argc, struct MprVar **argv) connect to a database usage: ok = ldb.connect(dbfile); + ok = ldb.connect(dbfile, "modules:modlist"); */ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) { struct ldb_context *ldb; const char *dbfile; - if (argc != 1) { + if (argc < 1) { ejsSetErrorMsg(eid, "ldb.connect invalid arguments"); return -1; } dbfile = argv[0]; - ldb = ldb_wrap_connect(mprMemCtx(), dbfile, 0, NULL); + ldb = ldb_wrap_connect(mprMemCtx(), dbfile, 0, argv+1); if (ldb == NULL) { ejsSetErrorMsg(eid, "ldb.connect failed to open %s", dbfile); } -- cgit From 240ca36cf2a3ceb89e46b73486865a4a57339c89 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 20 Jul 2005 06:20:36 +0000 Subject: r8635: make object inheritance with the builtin objects easy by allowing callers to optionally supply an existing object to add the properties to. So you can do: var rpc = samr_init(); lsa_init(rpc); and you end up with 'rpc' having both the samr and lsa functions and constants available. (This used to be commit 6a1ed328e27769bd52899fc2437a43fc17104eff) --- source4/scripting/ejs/smbcalls_ldb.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 0795db9018..f09039731f 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -273,7 +273,7 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) dbfile = argv[0]; - ldb = ldb_wrap_connect(mprMemCtx(), dbfile, 0, argv+1); + ldb = ldb_wrap_connect(mprMemCtx(), dbfile, 0, (const char **)(argv+1)); if (ldb == NULL) { ejsSetErrorMsg(eid, "ldb.connect failed to open %s", dbfile); } @@ -289,10 +289,7 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) */ static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv) { - struct MprVar *ldb; - mpr_Return(eid, mprObject("ldb")); - - ldb = ejsGetReturnValue(eid); + struct MprVar *ldb = mprInitObject(eid, "ldb", argc, argv); mprSetStringCFunction(ldb, "connect", ejs_ldbConnect); mprSetCFunction(ldb, "search", ejs_ldbSearch); -- cgit From 7a8ac7588720ebd1ea61a539ca4040d322c4fcf2 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 21 Jul 2005 01:56:22 +0000 Subject: r8659: return ldif formatted attributes in the ejs ldb search call, so sids show up as strings not binary blobs (This used to be commit d2c29a5a51f68cabb9ef587376bf0a6b936cdd76) --- source4/scripting/ejs/smbcalls_ldb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index f09039731f..50ba6fce68 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -103,7 +103,7 @@ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) ejsSetErrorMsg(eid, "ldb.search failed - %s", ldb_errstring(ldb)); mpr_Return(eid, mprCreateUndefinedVar()); } else { - mpr_Return(eid, mprLdbArray(res, ret, "ldb_message")); + mpr_Return(eid, mprLdbArray(ldb, res, ret, "ldb_message")); } talloc_free(tmp_ctx); -- cgit From 3e4c4cff2177af33efdb15f03a1bbcb639505cee Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Thu, 18 Aug 2005 15:02:01 +0000 Subject: r9391: Convert all the code to use struct ldb_dn to ohandle ldap like distinguished names Provide more functions to handle DNs in this form (This used to be commit 692e35b7797e39533dd2a1c4b63d9da30f1eb5ba) --- source4/scripting/ejs/smbcalls_ldb.c | 42 +++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 12 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 50ba6fce68..7d268d09f6 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -51,7 +51,8 @@ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) { const char **attrs = NULL; const char *expression; - const char *basedn = NULL; + const char *base = NULL; + struct ldb_dn *basedn = NULL; int scope = LDB_SCOPE_DEFAULT; TALLOC_CTX *tmp_ctx = talloc_new(mprMemCtx()); struct ldb_context *ldb; @@ -79,9 +80,16 @@ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) goto failed; } if (argc > 1) { - basedn = mprToString(argv[1]); + base = mprToString(argv[1]); /* a null basedn is valid */ } + if (base != NULL) { + basedn = ldb_dn_explode(tmp_ctx, base); + if (basedn == NULL) { + ejsSetErrorMsg(eid, "ldb.search malformed base dn"); + goto failed; + } + } if (argc > 2) { scope = mprToInt(argv[2]); switch (scope) { @@ -160,7 +168,7 @@ static int ejs_ldbAddModify(MprVarHandle eid, int argc, struct MprVar **argv, */ static int ejs_ldbDelete(MprVarHandle eid, int argc, struct MprVar **argv) { - const char *dn; + struct ldb_dn *dn; struct ldb_context *ldb; int ret; @@ -169,14 +177,21 @@ static int ejs_ldbDelete(MprVarHandle eid, int argc, struct MprVar **argv) return -1; } - dn = mprToString(argv[0]); - ldb = ejs_get_ldb_context(eid); if (ldb == NULL) { return -1; } + + dn = ldb_dn_explode(ldb, mprToString(argv[0])); + if (dn == NULL) { + ejsSetErrorMsg(eid, "ldb.delete malformed dn"); + return -1; + } + ret = ldb_delete(ldb, dn); + talloc_free(dn); + mpr_Return(eid, mprCreateBoolVar(ret == 0)); return 0; } @@ -188,7 +203,7 @@ static int ejs_ldbDelete(MprVarHandle eid, int argc, struct MprVar **argv) */ static int ejs_ldbRename(MprVarHandle eid, int argc, struct MprVar **argv) { - const char *dn1, *dn2; + struct ldb_dn *dn1, *dn2; struct ldb_context *ldb; int ret; @@ -197,20 +212,23 @@ static int ejs_ldbRename(MprVarHandle eid, int argc, struct MprVar **argv) return -1; } - dn1 = mprToString(argv[0]); - dn2 = mprToString(argv[1]); - if (dn1 == NULL || dn2 == NULL) { - ejsSetErrorMsg(eid, "ldb.rename invalid arguments"); + ldb = ejs_get_ldb_context(eid); + if (ldb == NULL) { return -1; } - ldb = ejs_get_ldb_context(eid); - if (ldb == NULL) { + dn1 = ldb_dn_explode(ldb, mprToString(argv[0])); + dn2 = ldb_dn_explode(ldb, mprToString(argv[1])); + if (dn1 == NULL || dn2 == NULL) { + ejsSetErrorMsg(eid, "ldb.rename invalid or malformed arguments"); return -1; } ret = ldb_rename(ldb, dn1, dn2); + talloc_free(dn1); + talloc_free(dn2); + mpr_Return(eid, mprCreateBoolVar(ret == 0)); return 0; } -- cgit From cfa981c65667fb63c2c2af8a48149dc6e89f461c Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 24 Aug 2005 08:28:49 +0000 Subject: r9566: fix an uninitialised variable (This used to be commit 7082440a70c5f85606538b7a35a1cc8f41eb7eeb) --- source4/scripting/ejs/smbcalls_ldb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 7d268d09f6..899cba5460 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -132,7 +132,7 @@ static int ejs_ldbAddModify(MprVarHandle eid, int argc, struct MprVar **argv, const char *ldifstring; struct ldb_context *ldb; struct ldb_ldif *ldif; - int ret; + int ret = 0; if (argc != 1) { ejsSetErrorMsg(eid, "ldb.add/modify invalid arguments"); -- cgit From 8da7ab52ebcb6fb20aa87a19f5065d931cac853c Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 28 Aug 2005 02:38:00 +0000 Subject: r9706: r11042@blu: tridge | 2005-08-28 12:40:09 +1000 a NULL expression is valid in a ldb search (This used to be commit a8748cab865c765f844336087a386c01e60add62) --- source4/scripting/ejs/smbcalls_ldb.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 899cba5460..aaed14dd8c 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -75,10 +75,6 @@ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) } expression = mprToString(argv[0]); - if (expression == NULL) { - ejsSetErrorMsg(eid, "ldb.search invalid expression"); - goto failed; - } if (argc > 1) { base = mprToString(argv[1]); /* a null basedn is valid */ -- cgit From ec934124db8a5234d8c83799a23c7bdced5dd95a Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 29 Aug 2005 22:01:18 +0000 Subject: r9762: Add support for reading good old smbpasswd files Fix password support Make base64 decode/encode functions available to EJS (This used to be commit 1376a1fe44cd6b01709819095a711c14626b1d3e) --- source4/scripting/ejs/smbcalls_ldb.c | 61 ++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index aaed14dd8c..662da0d971 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -4,6 +4,7 @@ provide hooks into smbd C calls from ejs scripts Copyright (C) Andrew Tridgell 2005 + Copyright (C) Jelmer Vernooij 2005 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -247,6 +248,64 @@ static int ejs_ldbErrstring(MprVarHandle eid, int argc, struct MprVar **argv) return 0; } +/* + base64 encode + usage: + dataout = ldb.encode(datain) + */ +static int ejs_base64encode(MprVarHandle eid, int argc, struct MprVar **argv) +{ + char *ret; + DATA_BLOB *blob; + + if (argc != 1) { + ejsSetErrorMsg(eid, "ldb.base64encode invalid argument count"); + return -1; + } + + blob = mprToDataBlob(argv[0]); + ret = ldb_base64_encode(mprMemCtx(), (char *)blob->data, blob->length); + + if (!ret) { + mpr_Return(eid, mprCreateUndefinedVar()); + } else { + mpr_Return(eid, mprString(ret)); + } + + talloc_free(ret); + + return 0; +} + +/* + base64 decode + usage: + dataout = ldb.decode(datain) + */ +static int ejs_base64decode(MprVarHandle eid, int argc, struct MprVar **argv) +{ + char *tmp; + int ret; + + if (argc != 1) { + ejsSetErrorMsg(eid, "ldb.base64encode invalid argument count"); + return -1; + } + + tmp = talloc_strdup(mprMemCtx(), mprToString(argv[0])); + ret = ldb_base64_decode(tmp); + if (ret == -1) { + mpr_Return(eid, mprCreateUndefinedVar()); + } else { + mpr_Return(eid, mprData((uint8_t *)tmp, ret)); + } + + talloc_free(tmp); + + return 0; +} + + /* perform an ldb modify @@ -312,6 +371,8 @@ static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv) mprSetCFunction(ldb, "del", ejs_ldbDelete); mprSetCFunction(ldb, "rename", ejs_ldbRename); mprSetCFunction(ldb, "errstring", ejs_ldbErrstring); + mprSetCFunction(ldb, "encode", ejs_base64encode); + mprSetCFunction(ldb, "decode", ejs_base64decode); mprSetVar(ldb, "SCOPE_BASE", mprCreateNumberVar(LDB_SCOPE_BASE)); mprSetVar(ldb, "SCOPE_ONE", mprCreateNumberVar(LDB_SCOPE_ONELEVEL)); mprSetVar(ldb, "SCOPE_SUBTREE", mprCreateNumberVar(LDB_SCOPE_SUBTREE)); -- cgit From 7be4cf8c1ded42daf7e86ecd2c0dbfeeed312b22 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 30 Aug 2005 00:41:02 +0000 Subject: r9770: Couple other bugfixes Update TODO-list (This used to be commit d9541535e3f9e1c058410eeb0a54d60181572f2b) --- source4/scripting/ejs/smbcalls_ldb.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 662da0d971..aabd43d1ac 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -264,6 +264,7 @@ static int ejs_base64encode(MprVarHandle eid, int argc, struct MprVar **argv) } blob = mprToDataBlob(argv[0]); + mprAssert(blob); ret = ldb_base64_encode(mprMemCtx(), (char *)blob->data, blob->length); if (!ret) { @@ -297,7 +298,10 @@ static int ejs_base64decode(MprVarHandle eid, int argc, struct MprVar **argv) if (ret == -1) { mpr_Return(eid, mprCreateUndefinedVar()); } else { - mpr_Return(eid, mprData((uint8_t *)tmp, ret)); + DATA_BLOB blob; + blob.data = (uint8_t *)tmp; + blob.length = ret; + mpr_Return(eid, mprDataBlob(blob)); } talloc_free(tmp); -- 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) --- source4/scripting/ejs/smbcalls_ldb.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index aabd43d1ac..855dd157f7 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -311,10 +311,10 @@ static int ejs_base64decode(MprVarHandle eid, int argc, struct MprVar **argv) /* - perform an ldb modify + perform an ldb add syntax: - ok = ldb.modify(ldifstring); + ok = ldb.add(ldifstring); */ static int ejs_ldbAdd(MprVarHandle eid, int argc, struct MprVar **argv) { @@ -322,10 +322,10 @@ static int ejs_ldbAdd(MprVarHandle eid, int argc, struct MprVar **argv) } /* - perform an ldb add + perform an ldb modify syntax: - ok = ldb.add(ldifstring); + ok = ldb.modify(ldifstring); */ static int ejs_ldbModify(MprVarHandle eid, int argc, struct MprVar **argv) { -- 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) --- source4/scripting/ejs/smbcalls_ldb.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 855dd157f7..f536fbe547 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -256,17 +256,23 @@ static int ejs_ldbErrstring(MprVarHandle eid, int argc, struct MprVar **argv) static int ejs_base64encode(MprVarHandle eid, int argc, struct MprVar **argv) { char *ret; - DATA_BLOB *blob; if (argc != 1) { ejsSetErrorMsg(eid, "ldb.base64encode invalid argument count"); return -1; } - blob = mprToDataBlob(argv[0]); - mprAssert(blob); - ret = ldb_base64_encode(mprMemCtx(), (char *)blob->data, blob->length); + if (argv[0]->type == MPR_TYPE_STRING) { + const char *orig = mprToString(argv[0]); + ret = ldb_base64_encode(mprMemCtx(), orig, strlen(orig)); + } else { + DATA_BLOB *blob; + blob = mprToDataBlob(argv[0]); + mprAssert(blob); + ret = ldb_base64_encode(mprMemCtx(), (char *)blob->data, blob->length); + } + if (!ret) { mpr_Return(eid, mprCreateUndefinedVar()); } else { -- cgit From 68974a1c7205a4b06045217ed01a2f75ea8bccdd Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 13 Sep 2005 01:01:55 +0000 Subject: r10192: r11631@blu: tridge | 2005-08-30 23:06:37 +1000 added a ldb.close() method in js. Useful for re-opening the db (This used to be commit 1f12364a0f23ba39fd3d29b510fdef2423685f0d) --- source4/scripting/ejs/smbcalls_ldb.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index f536fbe547..8c66bde571 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -367,6 +367,31 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) } +/* + close a db connection +*/ +static int ejs_ldbClose(MprVarHandle eid, int argc, struct MprVar **argv) +{ + struct ldb_context *ldb; + + if (argc != 0) { + ejsSetErrorMsg(eid, "ldb.close invalid arguments"); + return -1; + } + + ldb = ejs_get_ldb_context(eid); + if (ldb == NULL) { + return -1; + } + + talloc_free(ldb); + + mprSetThisPtr(eid, "db", NULL); + mpr_Return(eid, mprCreateBoolVar(True)); + return 0; +} + + /* initialise ldb ejs subsystem */ @@ -383,6 +408,7 @@ static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv) mprSetCFunction(ldb, "errstring", ejs_ldbErrstring); mprSetCFunction(ldb, "encode", ejs_base64encode); mprSetCFunction(ldb, "decode", ejs_base64decode); + mprSetCFunction(ldb, "close", ejs_ldbClose); mprSetVar(ldb, "SCOPE_BASE", mprCreateNumberVar(LDB_SCOPE_BASE)); mprSetVar(ldb, "SCOPE_ONE", mprCreateNumberVar(LDB_SCOPE_ONELEVEL)); mprSetVar(ldb, "SCOPE_SUBTREE", mprCreateNumberVar(LDB_SCOPE_SUBTREE)); -- cgit From 95040e934175eb877ce6d83690fd06ce5d2b028c Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 16 Sep 2005 03:18:49 +0000 Subject: r10252: a recent checkin from simo changed the handling of BASE and SUBTREE searches in ldb to be more ldap compliant, but broke the wins server and the ejs ldb code. This fixes those up so 'make test' passes again. (This used to be commit dff660c23c97114d0c1be705f4d6a9c114b60456) --- source4/scripting/ejs/smbcalls_ldb.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 8c66bde571..ec2748a426 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -412,6 +412,7 @@ static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv) mprSetVar(ldb, "SCOPE_BASE", mprCreateNumberVar(LDB_SCOPE_BASE)); mprSetVar(ldb, "SCOPE_ONE", mprCreateNumberVar(LDB_SCOPE_ONELEVEL)); mprSetVar(ldb, "SCOPE_SUBTREE", mprCreateNumberVar(LDB_SCOPE_SUBTREE)); + mprSetVar(ldb, "SCOPE_DEFAULT", mprCreateNumberVar(LDB_SCOPE_DEFAULT)); return 0; } -- cgit From e0ab3485eeeee130cf43b333562f30f09a29cfd8 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 28 Oct 2005 04:10:47 +0000 Subject: r11354: - generate a ejs error on bad ldif to add/modify - fixed a double free error in ldb.close() (This used to be commit 7f797e7097cffa1f5b5bac34e100af77d4026f89) --- source4/scripting/ejs/smbcalls_ldb.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index ec2748a426..83d5f1ae44 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -129,7 +129,7 @@ static int ejs_ldbAddModify(MprVarHandle eid, int argc, struct MprVar **argv, const char *ldifstring; struct ldb_context *ldb; struct ldb_ldif *ldif; - int ret = 0; + int ret = 0, count=0; if (argc != 1) { ejsSetErrorMsg(eid, "ldb.add/modify invalid arguments"); @@ -148,11 +148,17 @@ static int ejs_ldbAddModify(MprVarHandle eid, int argc, struct MprVar **argv, } while ((ldif = ldb_ldif_read_string(ldb, &ldifstring))) { + count++; ret = fn(ldb, ldif->msg); talloc_free(ldif); if (ret != 0) break; } + if (count == 0) { + ejsSetErrorMsg(eid, "ldb.add/modify invalid ldif"); + return -1; + } + mpr_Return(eid, mprCreateBoolVar(ret == 0)); return 0; } @@ -384,8 +390,6 @@ static int ejs_ldbClose(MprVarHandle eid, int argc, struct MprVar **argv) return -1; } - talloc_free(ldb); - mprSetThisPtr(eid, "db", NULL); mpr_Return(eid, mprCreateBoolVar(True)); return 0; -- cgit From c845ab1e60f2c97410fa4d530aa594f1f3d5fe55 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 2 Nov 2005 06:41:11 +0000 Subject: r11474: - enable ldb transactions from ejs - speed up provisioning a bit using a ldb transaction (also means you can't end up with a ldb being half done) (This used to be commit 91dfe304cf688bb81b69ff3192ac84b78b34b311) --- source4/scripting/ejs/smbcalls_ldb.c | 81 ++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 83d5f1ae44..b77736dc36 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -396,6 +396,84 @@ static int ejs_ldbClose(MprVarHandle eid, int argc, struct MprVar **argv) } +/* + start a ldb transaction + usage: + ok = ldb.transaction_start(); +*/ +static int ejs_ldbTransactionStart(MprVarHandle eid, int argc, struct MprVar **argv) +{ + struct ldb_context *ldb; + int ret; + + if (argc != 0) { + ejsSetErrorMsg(eid, "ldb.transaction_start invalid arguments"); + return -1; + } + + ldb = ejs_get_ldb_context(eid); + if (ldb == NULL) { + return -1; + } + + ret = ldb_transaction_start(ldb); + + mpr_Return(eid, mprCreateBoolVar(ret == 0)); + return 0; +} + +/* + cancel a ldb transaction + usage: + ok = ldb.transaction_cancel(); +*/ +static int ejs_ldbTransactionCancel(MprVarHandle eid, int argc, struct MprVar **argv) +{ + struct ldb_context *ldb; + int ret; + + if (argc != 0) { + ejsSetErrorMsg(eid, "ldb.transaction_cancel invalid arguments"); + return -1; + } + + ldb = ejs_get_ldb_context(eid); + if (ldb == NULL) { + return -1; + } + + ret = ldb_transaction_cancel(ldb); + + mpr_Return(eid, mprCreateBoolVar(ret == 0)); + return 0; +} + +/* + commit a ldb transaction + usage: + ok = ldb.transaction_commit(); +*/ +static int ejs_ldbTransactionCommit(MprVarHandle eid, int argc, struct MprVar **argv) +{ + struct ldb_context *ldb; + int ret; + + if (argc != 0) { + ejsSetErrorMsg(eid, "ldb.transaction_commit invalid arguments"); + return -1; + } + + ldb = ejs_get_ldb_context(eid); + if (ldb == NULL) { + return -1; + } + + ret = ldb_transaction_commit(ldb); + + mpr_Return(eid, mprCreateBoolVar(ret == 0)); + return 0; +} + /* initialise ldb ejs subsystem */ @@ -413,6 +491,9 @@ static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv) mprSetCFunction(ldb, "encode", ejs_base64encode); mprSetCFunction(ldb, "decode", ejs_base64decode); mprSetCFunction(ldb, "close", ejs_ldbClose); + mprSetCFunction(ldb, "transaction_start", ejs_ldbTransactionStart); + mprSetCFunction(ldb, "transaction_cancel", ejs_ldbTransactionCancel); + mprSetCFunction(ldb, "transaction_commit", ejs_ldbTransactionCommit); mprSetVar(ldb, "SCOPE_BASE", mprCreateNumberVar(LDB_SCOPE_BASE)); mprSetVar(ldb, "SCOPE_ONE", mprCreateNumberVar(LDB_SCOPE_ONELEVEL)); mprSetVar(ldb, "SCOPE_SUBTREE", mprCreateNumberVar(LDB_SCOPE_SUBTREE)); -- cgit From 5c9590587197dcb95007fdc54318187d5716c7c6 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Tue, 8 Nov 2005 00:11:45 +0000 Subject: r11567: Ldb API change patch. This patch changes the way lsb_search is called and the meaning of the returned integer. The last argument of ldb_search is changed from struct ldb_message to struct ldb_result which contains a pointer to a struct ldb_message list and a count of the number of messages. The return is not the count of messages anymore but instead it is an ldb error value. I tryed to keep the patch as tiny as possible bu as you can guess I had to change a good amount of places. I also tried to double check all my changes being sure that the calling functions would still behave as before. But this patch is big enough that I fear some bug may have been introduced anyway even if it passes the test suite. So if you are currently working on any file being touched please give it a deep look and blame me for any error. Simo. (This used to be commit 22c8c97e6fb466b41859e090e959d7f1134be780) --- source4/scripting/ejs/smbcalls_ldb.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index b77736dc36..d3db85db86 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -25,6 +25,7 @@ #include "scripting/ejs/smbcalls.h" #include "lib/appweb/ejs/ejs.h" #include "lib/ldb/include/ldb.h" +#include "lib/ldb/include/ldb_errors.h" /* get the connected db @@ -58,7 +59,7 @@ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) TALLOC_CTX *tmp_ctx = talloc_new(mprMemCtx()); struct ldb_context *ldb; int ret; - struct ldb_message **res; + struct ldb_result *res; /* validate arguments */ if (argc < 1 || argc > 4) { @@ -104,11 +105,11 @@ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) attrs = mprToList(tmp_ctx, argv[3]); } ret = ldb_search(ldb, basedn, scope, expression, attrs, &res); - if (ret == -1) { + if (ret != LDB_SUCCESS) { ejsSetErrorMsg(eid, "ldb.search failed - %s", ldb_errstring(ldb)); mpr_Return(eid, mprCreateUndefinedVar()); } else { - mpr_Return(eid, mprLdbArray(ldb, res, ret, "ldb_message")); + mpr_Return(eid, mprLdbArray(ldb, res->msgs, res->count, "ldb_message")); } talloc_free(tmp_ctx); -- cgit From a1827a1deba04e0b4b2a508dc4e4e66603a46d16 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 14 Dec 2005 07:22:25 +0000 Subject: r12227: I realised that I wasn't yet seeing authenticated LDAP for the ldb backend. The idea is that every time we open an LDB, we can provide a session_info and/or credentials. This would allow any ldb to be remote to LDAP. We should also support provisioning to a authenticated ldap server. (They are separate so we can say authenticate as foo for remote, but here we just want a token of SYSTEM). Andrew Bartlett (This used to be commit ae2f3a64ee0b07575624120db45299c65204210b) --- source4/scripting/ejs/smbcalls_ldb.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index d3db85db86..709ed27e5e 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -350,10 +350,16 @@ static int ejs_ldbModify(MprVarHandle eid, int argc, struct MprVar **argv) usage: ok = ldb.connect(dbfile); ok = ldb.connect(dbfile, "modules:modlist"); + + ldb.credentials or ldb.session_info may be setup first + */ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) { struct ldb_context *ldb; + struct auth_session_info *session_info; + struct cli_credentials *creds; + const char *dbfile; if (argc < 1) { @@ -361,9 +367,15 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) return -1; } + session_info = mprGetThisPtr(eid, "session_info"); + + creds = mprGetThisPtr(eid, "credentials"); + dbfile = argv[0]; - ldb = ldb_wrap_connect(mprMemCtx(), dbfile, 0, (const char **)(argv+1)); + ldb = ldb_wrap_connect(mprMemCtx(), dbfile, + session_info, creds, + 0, (const char **)(argv+1)); if (ldb == NULL) { ejsSetErrorMsg(eid, "ldb.connect failed to open %s", dbfile); } -- cgit From ac3f676f62f7a09339abfb7bb8e6790040d1551b Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 18 Dec 2005 22:14:14 +0000 Subject: r12322: automatically use cmdline_credentials if the ldb object doesn't have its own credentials element (This used to be commit de8975bdd3dc9b4f4d65000e126bbd11c43b3f06) --- source4/scripting/ejs/smbcalls_ldb.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 709ed27e5e..7c81b8c826 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -26,6 +26,7 @@ #include "lib/appweb/ejs/ejs.h" #include "lib/ldb/include/ldb.h" #include "lib/ldb/include/ldb_errors.h" +#include "lib/cmdline/popt_common.h" /* get the connected db @@ -370,6 +371,9 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) session_info = mprGetThisPtr(eid, "session_info"); creds = mprGetThisPtr(eid, "credentials"); + if (creds == NULL) { + creds = cmdline_credentials; + } dbfile = argv[0]; -- cgit From 4ee24ce2ba9755184d516bd47d73b296a4640f3c Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 18 Dec 2005 22:27:26 +0000 Subject: r12323: fixeed the use of options.get_credentials() for ldb (This used to be commit b27d81dca9fd07c83b11a5bb3a883ec3f28cca6a) --- source4/scripting/ejs/smbcalls_ldb.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 7c81b8c826..e9dba94eaa 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -360,6 +360,8 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) struct ldb_context *ldb; struct auth_session_info *session_info; struct cli_credentials *creds; + struct MprVar *credentials; + struct MprVar *this = mprGetProperty(ejsGetLocalObject(eid), "this", 0); const char *dbfile; @@ -370,8 +372,10 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) session_info = mprGetThisPtr(eid, "session_info"); - creds = mprGetThisPtr(eid, "credentials"); - if (creds == NULL) { + credentials = mprGetProperty(this, "credentials", NULL); + if (credentials) { + creds = mprGetPtr(credentials, "creds"); + } else { creds = cmdline_credentials; } -- cgit From 34be0772d2a24c3836cfe7a335184ba2d8902e81 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 3 Jan 2006 19:39:53 +0000 Subject: r12699: correctly escape invalid DN characters (reported by Steinar H. Gunderson). this still doesn't work as a bug in ldb causes it to not understand escaped characters in DNs when parsing DNs (This used to be commit 10da56fb6cc57b6c0650a8dc81ded5faa643a96e) --- source4/scripting/ejs/smbcalls_ldb.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index e9dba94eaa..78063ed6b4 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -322,7 +322,35 @@ static int ejs_base64decode(MprVarHandle eid, int argc, struct MprVar **argv) return 0; } - + +/* + escape a DN + usage: + dataout = ldb.dn_escape(datain) + */ +static int ejs_dn_escape(MprVarHandle eid, int argc, struct MprVar **argv) +{ + char *ret; + struct ldb_val val; + + if (argc != 1) { + ejsSetErrorMsg(eid, "ldb.dn_escape invalid argument count"); + return -1; + } + + val.data = mprToString(argv[0]); + val.length = strlen((const char *)val.data); + + ret = ldb_dn_escape_value(mprMemCtx(), val); + if (ret == NULL) { + mpr_Return(eid, mprCreateUndefinedVar()); + } else { + mpr_Return(eid, mprString(ret)); + talloc_free(ret); + } + + return 0; +} /* perform an ldb add @@ -511,6 +539,7 @@ static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv) mprSetCFunction(ldb, "errstring", ejs_ldbErrstring); mprSetCFunction(ldb, "encode", ejs_base64encode); mprSetCFunction(ldb, "decode", ejs_base64decode); + mprSetCFunction(ldb, "dn_escape", ejs_dn_escape); mprSetCFunction(ldb, "close", ejs_ldbClose); mprSetCFunction(ldb, "transaction_start", ejs_ldbTransactionStart); mprSetCFunction(ldb, "transaction_cancel", ejs_ldbTransactionCancel); -- cgit From 81e05038b6fca971b060b649899999ae156091cd Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 4 Jan 2006 01:28:03 +0000 Subject: r12708: This is equivilant, but doesn't cause a warning. Andrew Bartlett (This used to be commit 964f7fc6ca4ac7578ca0d467392d4e174211b6e2) --- source4/scripting/ejs/smbcalls_ldb.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 78063ed6b4..f1d59ec2af 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -338,8 +338,7 @@ static int ejs_dn_escape(MprVarHandle eid, int argc, struct MprVar **argv) return -1; } - val.data = mprToString(argv[0]); - val.length = strlen((const char *)val.data); + val = data_blob_string_const(mprToString(argv[0])); ret = ldb_dn_escape_value(mprMemCtx(), val); if (ret == NULL) { -- cgit From a2cad19bbddfdbef6a01d6cf300dabbc9cf96165 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Jan 2006 19:37:13 +0000 Subject: r12744: For correctly written scripts, we don't need this anymore. Only use the cmdline credentials if we ask for it. Andrew Bartlett (This used to be commit 874dd09759eb0243988f39363c94785ae2e68485) --- source4/scripting/ejs/smbcalls_ldb.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index f1d59ec2af..798747b36c 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -386,7 +386,7 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) { struct ldb_context *ldb; struct auth_session_info *session_info; - struct cli_credentials *creds; + struct cli_credentials *creds = NULL; struct MprVar *credentials; struct MprVar *this = mprGetProperty(ejsGetLocalObject(eid), "this", 0); @@ -402,8 +402,6 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) credentials = mprGetProperty(this, "credentials", NULL); if (credentials) { creds = mprGetPtr(credentials, "creds"); - } else { - creds = cmdline_credentials; } dbfile = argv[0]; -- cgit From a8eec313549905724a8186a1a4c14480658e2967 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Jan 2006 21:04:32 +0000 Subject: r12746: An initial version of the kludge_acls module. This should be replaced with real ACLs, which tridge is working on. In the meantime, the rules are very simple: - SYSTEM and Administrators can read all. - Users and anonymous cannot read passwords, can read everything else - list of 'password' attributes is hard-coded Most of the difficult work in this was fighting with the C/js interface to add a system_session() all, as it still doesn't get on with me :-) Andrew Bartlett (This used to be commit be9d0cae8989429ef47a713d8f0a82f12966fc78) --- source4/scripting/ejs/smbcalls_ldb.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 798747b36c..39698947d7 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -385,9 +385,9 @@ static int ejs_ldbModify(MprVarHandle eid, int argc, struct MprVar **argv) static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) { struct ldb_context *ldb; - struct auth_session_info *session_info; + struct auth_session_info *session_info = NULL; struct cli_credentials *creds = NULL; - struct MprVar *credentials; + struct MprVar *credentials, *session; struct MprVar *this = mprGetProperty(ejsGetLocalObject(eid), "this", 0); const char *dbfile; @@ -397,13 +397,16 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) return -1; } - session_info = mprGetThisPtr(eid, "session_info"); - credentials = mprGetProperty(this, "credentials", NULL); if (credentials) { creds = mprGetPtr(credentials, "creds"); } + session = mprGetProperty(this, "session_info", NULL); + if (session) { + session_info = mprGetPtr(session, "session_info"); + } + dbfile = argv[0]; ldb = ldb_wrap_connect(mprMemCtx(), dbfile, -- cgit From 195f5c3635159013fa14fbe0d34283b8237b0667 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 10 Jan 2006 09:43:00 +0000 Subject: r12822: Given that talloc gives us this extra level of safety, use it. Andrew Bartlett (This used to be commit a6028558dc19b0d105b1bfe4126a2b24afaf8dd2) --- source4/scripting/ejs/smbcalls_ldb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 39698947d7..1a224605ee 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -399,12 +399,12 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) credentials = mprGetProperty(this, "credentials", NULL); if (credentials) { - creds = mprGetPtr(credentials, "creds"); + creds = talloc_get_type(mprGetPtr(credentials, "creds"), struct cli_credentials); } session = mprGetProperty(this, "session_info", NULL); if (session) { - session_info = mprGetPtr(session, "session_info"); + session_info = talloc_get_type(mprGetPtr(session, "session_info"), struct auth_session_info); } dbfile = argv[0]; -- cgit From 4ac2be99588b48b0652a524bf12fb1aa9c3f5fbb Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 7 Mar 2006 11:07:23 +0000 Subject: r13924: Split more prototypes out of include/proto.h + initial work on header file dependencies (This used to be commit 122835876748a3eaf5e8d31ad1abddab9acb8781) --- source4/scripting/ejs/smbcalls_ldb.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 1a224605ee..9ba7668a38 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -27,6 +27,7 @@ #include "lib/ldb/include/ldb.h" #include "lib/ldb/include/ldb_errors.h" #include "lib/cmdline/popt_common.h" +#include "db_wrap.h" /* get the connected db -- cgit From 3064782735e927de63cdfa34a19c95a9d099a82a Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 13 May 2006 21:03:47 +0000 Subject: r15581: Remove unused include (This used to be commit b79092d7ee0c463e644ead2bfeb9692fc82d9c74) --- source4/scripting/ejs/smbcalls_ldb.c | 1 - 1 file changed, 1 deletion(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 9ba7668a38..f6b4ffc6b0 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -26,7 +26,6 @@ #include "lib/appweb/ejs/ejs.h" #include "lib/ldb/include/ldb.h" #include "lib/ldb/include/ldb_errors.h" -#include "lib/cmdline/popt_common.h" #include "db_wrap.h" /* -- cgit From 0dcecc314899b6f36e9215e0b3881220062ba4f9 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 20 May 2006 03:08:44 +0000 Subject: r15731: module init functions should return NTSTATUS, not void (This used to be commit c6d20c22454b87b4dea3527f0efcecd373679848) --- source4/scripting/ejs/smbcalls_ldb.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index f6b4ffc6b0..ea6f70a41e 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -556,7 +556,8 @@ static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv) /* setup C functions that be called from ejs */ -void smb_setup_ejs_ldb(void) +NTSTATUS smb_setup_ejs_ldb(void) { ejsDefineCFunction(-1, "ldb_init", ejs_ldb_init, NULL, MPR_VAR_SCRIPT_HANDLE); + return NT_STATUS_OK; } -- cgit From 481991e1b99f83f3f855ac7028f9209c4e83b7b2 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 12 Jun 2006 20:08:19 +0000 Subject: r16168: Make the example match the actual function. This was very confusing until I really looked at it. Andrew Bartlett (This used to be commit 0053d06d9f85f2304191ab8f68eee7f48b2f2aa8) --- source4/scripting/ejs/smbcalls_ldb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index ea6f70a41e..d5735dce70 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -48,7 +48,7 @@ static struct ldb_context *ejs_get_ldb_context(int eid) 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); + ldb.search("expression", basedn, ldb.SCOPE_SUBTREE, attrs); */ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) { -- cgit From d08f8ab4336583150ca072250bd71076a5c1e366 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 15 Oct 2006 21:40:49 +0000 Subject: r19297: fixed a leak in the ejs ldb interface (This used to be commit 6978225ffcc12ffdda0d3404e855219808c0597c) --- source4/scripting/ejs/smbcalls_ldb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index d5735dce70..f8296b9d36 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -60,7 +60,7 @@ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) TALLOC_CTX *tmp_ctx = talloc_new(mprMemCtx()); struct ldb_context *ldb; int ret; - struct ldb_result *res; + struct ldb_result *res=NULL; /* validate arguments */ if (argc < 1 || argc > 4) { @@ -112,7 +112,7 @@ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) } else { mpr_Return(eid, mprLdbArray(ldb, res->msgs, res->count, "ldb_message")); } - + talloc_free(res); talloc_free(tmp_ctx); return 0; -- cgit From 84138215cade4bd427a4a04810696cbb89434928 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 16 Nov 2006 09:34:19 +0000 Subject: r19732: The 'res' from ldb_search is only valid if the call returns LDB_SUCCESS. This seems to show up (as an abort() from talloc) particularly under ldb_ildap. Andrew Bartlett (This used to be commit 9890af534d845d471d2a98268c408a907b29e016) --- source4/scripting/ejs/smbcalls_ldb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index f8296b9d36..0af9738b60 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -111,8 +111,8 @@ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) mpr_Return(eid, mprCreateUndefinedVar()); } else { mpr_Return(eid, mprLdbArray(ldb, res->msgs, res->count, "ldb_message")); + talloc_free(res); } - talloc_free(res); talloc_free(tmp_ctx); return 0; -- cgit From 4889eb9f7aae9349e426d0f6d2217adff67eaebd Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Wed, 22 Nov 2006 00:59:34 +0000 Subject: r19831: Big ldb_dn optimization and interfaces enhancement patch This patch changes a lot of the code in ldb_dn.c, and also removes and add a number of manipulation functions around. The aim is to avoid validating a dn if not necessary as the validation code is necessarily slow. This is mainly to speed up internal operations where input is not user generated and so we can assume the DNs need no validation. The code is designed to keep the data as a string if possible. The code is not yet 100% perfect, but pass all the tests so far. A memleak is certainly present, I'll work on that next. Simo. (This used to be commit a580c871d3784602a9cce32d33419e63c8236e63) --- source4/scripting/ejs/smbcalls_ldb.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 0af9738b60..3c368bba4f 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -83,8 +83,8 @@ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) /* a null basedn is valid */ } if (base != NULL) { - basedn = ldb_dn_explode(tmp_ctx, base); - if (basedn == NULL) { + basedn = ldb_dn_new(tmp_ctx, ldb, base); + if ( ! ldb_dn_validate(basedn)) { ejsSetErrorMsg(eid, "ldb.search malformed base dn"); goto failed; } @@ -187,8 +187,8 @@ static int ejs_ldbDelete(MprVarHandle eid, int argc, struct MprVar **argv) return -1; } - dn = ldb_dn_explode(ldb, mprToString(argv[0])); - if (dn == NULL) { + dn = ldb_dn_new(ldb, ldb, mprToString(argv[0])); + if ( ! ldb_dn_validate(dn)) { ejsSetErrorMsg(eid, "ldb.delete malformed dn"); return -1; } @@ -222,9 +222,9 @@ static int ejs_ldbRename(MprVarHandle eid, int argc, struct MprVar **argv) return -1; } - dn1 = ldb_dn_explode(ldb, mprToString(argv[0])); - dn2 = ldb_dn_explode(ldb, mprToString(argv[1])); - if (dn1 == NULL || dn2 == NULL) { + dn1 = ldb_dn_new(ldb, ldb, mprToString(argv[0])); + dn2 = ldb_dn_new(ldb, ldb, mprToString(argv[1])); + if ( ! ldb_dn_validate(dn1) || ! ldb_dn_validate(dn2)) { ejsSetErrorMsg(eid, "ldb.rename invalid or malformed arguments"); return -1; } -- 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) --- source4/scripting/ejs/smbcalls_ldb.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 3c368bba4f..fc44862985 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -108,9 +108,9 @@ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) ret = ldb_search(ldb, basedn, scope, expression, attrs, &res); if (ret != LDB_SUCCESS) { ejsSetErrorMsg(eid, "ldb.search failed - %s", ldb_errstring(ldb)); - mpr_Return(eid, mprCreateUndefinedVar()); + mpr_Return(eid, mprLdbResult(ldb, ret, NULL)); } else { - mpr_Return(eid, mprLdbArray(ldb, res->msgs, res->count, "ldb_message")); + mpr_Return(eid, mprLdbResult(ldb, ret, res)); talloc_free(res); } talloc_free(tmp_ctx); @@ -161,7 +161,7 @@ static int ejs_ldbAddModify(MprVarHandle eid, int argc, struct MprVar **argv, return -1; } - mpr_Return(eid, mprCreateBoolVar(ret == 0)); + mpr_Return(eid, mprLdbResult(ldb, ret, NULL)); return 0; } @@ -197,7 +197,7 @@ static int ejs_ldbDelete(MprVarHandle eid, int argc, struct MprVar **argv) talloc_free(dn); - mpr_Return(eid, mprCreateBoolVar(ret == 0)); + mpr_Return(eid, mprLdbResult(ldb, ret, NULL)); return 0; } @@ -234,7 +234,7 @@ static int ejs_ldbRename(MprVarHandle eid, int argc, struct MprVar **argv) talloc_free(dn1); talloc_free(dn2); - mpr_Return(eid, mprCreateBoolVar(ret == 0)); + mpr_Return(eid, mprLdbResult(ldb, ret, NULL)); return 0; } -- 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) --- source4/scripting/ejs/smbcalls_ldb.c | 48 +++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index fc44862985..3f970cea58 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -49,6 +49,7 @@ static struct ldb_context *ejs_get_ldb_context(int eid) ldb.search("expression", attrs); var basedn = "cn=this,dc=is,dc=a,dc=test"; ldb.search("expression", basedn, ldb.SCOPE_SUBTREE, attrs); + ldb.search("expression", basedn, ldb.SCOPE_SUBTREE, attrs, controls); */ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) { @@ -60,10 +61,12 @@ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) TALLOC_CTX *tmp_ctx = talloc_new(mprMemCtx()); struct ldb_context *ldb; int ret; + struct ldb_control **parsed_controls = NULL; struct ldb_result *res=NULL; + struct ldb_request *req; /* validate arguments */ - if (argc < 1 || argc > 4) { + if (argc < 1 || argc > 5) { ejsSetErrorMsg(eid, "ldb.search invalid number of arguments"); goto failed; } @@ -88,6 +91,8 @@ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) ejsSetErrorMsg(eid, "ldb.search malformed base dn"); goto failed; } + } else { + basedn = ldb_get_default_basedn(ldb); } if (argc > 2) { scope = mprToInt(argv[2]); @@ -105,14 +110,51 @@ static int ejs_ldbSearch(MprVarHandle eid, int argc, struct MprVar **argv) if (argc > 3) { attrs = mprToList(tmp_ctx, argv[3]); } - ret = ldb_search(ldb, basedn, scope, expression, attrs, &res); + if (argc > 4) { + const char **controls; + controls = mprToList(tmp_ctx, argv[4]); + if (controls) { + parsed_controls = ldb_parse_control_strings(ldb, tmp_ctx, controls); + if (!parsed_controls) { + ejsSetErrorMsg(eid, "ldb.search cannot parse controls: %s", + ldb_errstring(ldb)); + goto failed; + } + } + } + + res = talloc_zero(tmp_ctx, struct ldb_result); + if (!res) { + return LDB_ERR_OPERATIONS_ERROR; + } + + ret = ldb_build_search_req(&req, ldb, tmp_ctx, + basedn, + scope, + expression, + attrs, + parsed_controls, + res, + ldb_search_default_callback); + + if (ret == LDB_SUCCESS) { + + ldb_set_timeout(ldb, req, 0); /* use default timeout */ + + ret = ldb_request(ldb, req); + + if (ret == LDB_SUCCESS) { + ret = ldb_wait(req->handle, LDB_WAIT_ALL); + } + } + if (ret != LDB_SUCCESS) { ejsSetErrorMsg(eid, "ldb.search failed - %s", ldb_errstring(ldb)); mpr_Return(eid, mprLdbResult(ldb, ret, NULL)); } else { mpr_Return(eid, mprLdbResult(ldb, ret, res)); - talloc_free(res); } + talloc_free(tmp_ctx); return 0; -- cgit From 47e5c163d63ae04381a67cd4d5cc428f22374bb6 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 18 May 2007 08:16:50 +0000 Subject: r22993: - make it possible to load a dsdb_schema from ldif via the ejs bindings - make it possible to set ntds_objectGUID and ntds_invocationId via the ejy bindings metze (This used to be commit df7863ea1c964ec58feedd0bf72ef64456e3a3d1) --- source4/scripting/ejs/smbcalls_ldb.c | 125 +++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 3f970cea58..33f371cd4e 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -27,6 +27,8 @@ #include "lib/ldb/include/ldb.h" #include "lib/ldb/include/ldb_errors.h" #include "db_wrap.h" +#include "dsdb/samdb/samdb.h" +#include "librpc/ndr/libndr.h" /* get the connected db @@ -565,6 +567,123 @@ static int ejs_ldbTransactionCommit(MprVarHandle eid, int argc, struct MprVar ** return 0; } +/* + commit a ldb attach a dsdb_schema from ldif files + usage: + ok = ldb.attach_dsdb_schema_from_ldif("prefixMap ldif content", "definition ldif content") +*/ +static int ejs_ldb_attach_dsdb_schema_from_ldif(MprVarHandle eid, int argc, char **argv) +{ + struct ldb_context *ldb; + WERROR status; + char *pf_name; + char *df_name; + const char *pf; + const char *df; + + if (argc != 2) { + ejsSetErrorMsg(eid, "ldb.attach_dsdb_schema_from_ldif invalid arguments"); + return -1; + } + + ldb = ejs_get_ldb_context(eid); + if (ldb == NULL) { + return -1; + } + + pf = argv[0]; + df = argv[1]; + + status = dsdb_attach_schema_from_ldif_file(ldb, pf, df); + + mpr_Return(eid, mprWERROR(status)); + return 0; +} + +/* + commit a ldb attach a dsdb_schema from ldif files + usage: + ok = ldb.set_ntds_invocationId("7729aa4b-f990-41ad-b81a-8b6a14090f41"); +*/ +static int ejs_ldb_set_ntds_invocationId(MprVarHandle eid, int argc, char **argv) +{ + struct ldb_context *ldb; + NTSTATUS status; + struct GUID guid; + char *guid_str; + bool ok; + + if (argc != 1) { + ejsSetErrorMsg(eid, "ldb.set_ntds_invocationId invalid arguments"); + return -1; + } + + ldb = ejs_get_ldb_context(eid); + if (ldb == NULL) { + return -1; + } + + guid_str = argv[0]; + + status = GUID_from_string(guid_str, &guid); + if (!NT_STATUS_IS_OK(status)) { + ejsSetErrorMsg(eid, "ldb.set_ntds_invocationId - failed to parse GUID '%s' %s\n", + guid_str, nt_errstr(status)); + return -1; + } + + ok = samdb_set_ntds_invocation_id(ldb, &guid); + if (!ok) { + ejsSetErrorMsg(eid, "ldb.set_ntds_invocationId - failed to set cached ntds invocationId\n"); + return -1; + } + + mpr_Return(eid, mprCreateBoolVar(ok)); + return 0; +} + +/* + commit a ldb attach a dsdb_schema from ldif files + usage: + ok = ldb.get_ntds_objectGUID("7729aa4b-f990-41ad-b81a-8b6a14090f41"); +*/ +static int ejs_ldb_set_ntds_objectGUID(MprVarHandle eid, int argc, char **argv) +{ + struct ldb_context *ldb; + NTSTATUS status; + struct GUID guid; + char *guid_str; + bool ok; + + if (argc != 1) { + ejsSetErrorMsg(eid, "ldb.set_ntds_objectGUID invalid arguments"); + return -1; + } + + ldb = ejs_get_ldb_context(eid); + if (ldb == NULL) { + return -1; + } + + guid_str = argv[0]; + + status = GUID_from_string(guid_str, &guid); + if (!NT_STATUS_IS_OK(status)) { + ejsSetErrorMsg(eid, "ldb.set_ntds_objectGUID - failed to parse GUID '%s' %s\n", + guid_str, nt_errstr(status)); + return -1; + } + + ok = samdb_set_ntds_invocation_id(ldb, &guid); + if (!ok) { + ejsSetErrorMsg(eid, "ldb.set_ntds_objectGUID - failed to set cached ntds invocationId\n"); + return -1; + } + + mpr_Return(eid, mprCreateBoolVar(ok)); + return 0; +} + /* initialise ldb ejs subsystem */ @@ -586,6 +705,12 @@ static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv) mprSetCFunction(ldb, "transaction_start", ejs_ldbTransactionStart); mprSetCFunction(ldb, "transaction_cancel", ejs_ldbTransactionCancel); mprSetCFunction(ldb, "transaction_commit", ejs_ldbTransactionCommit); + mprSetStringCFunction(ldb, "attach_dsdb_schema_from_ldif", + ejs_ldb_attach_dsdb_schema_from_ldif); + mprSetStringCFunction(ldb, "set_ntds_invocationId", + ejs_ldb_set_ntds_invocationId); + mprSetStringCFunction(ldb, "set_ntds_objectGUID", + ejs_ldb_set_ntds_objectGUID); mprSetVar(ldb, "SCOPE_BASE", mprCreateNumberVar(LDB_SCOPE_BASE)); mprSetVar(ldb, "SCOPE_ONE", mprCreateNumberVar(LDB_SCOPE_ONELEVEL)); mprSetVar(ldb, "SCOPE_SUBTREE", mprCreateNumberVar(LDB_SCOPE_SUBTREE)); -- cgit From 0479a2f1cbae51fcd8dbdc3c148c808421fb4d25 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 10 Jul 2007 02:07:03 +0000 Subject: r23792: convert Samba4 to GPLv3 There are still a few tidyups of old FSF addresses to come (in both s3 and s4). More commits soon. (This used to be commit fcf38a38ac691abd0fa51b89dc951a08e89fdafa) --- source4/scripting/ejs/smbcalls_ldb.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 33f371cd4e..06384c8dbd 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -8,7 +8,7 @@ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -17,8 +17,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with this program. If not, see . */ #include "includes.h" -- cgit From b409d4120f9ae451f93a2322267c0f346531d9f3 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 26 Aug 2007 15:16:40 +0000 Subject: r24667: Finally merge the registry improvements that Wilco Baan Hofman and I have been working on for at least half a year now. Contains the following improvements: * proper layering (finally!) for the registry library. Distinction is now made between 'real' backends (local, remote, wine, etc) and the low-level hive backends (regf, creg, ldb, ...) that are only used by the local registry backend * tests for all important hive and registry operations * re-enable RPC-WINREG tests (still needs more work though, as some return values aren't checked yet) * write support for REGF files * dir backend now supports setting/reading values, creating keys * support for storing security descriptors * remove CREG backend as it was incomplete, didn't match the data model and wasn't used at all anyway * support for parsing ADM files as used by the policy editor (see lib/policy) * support for parsing PREG files (format used by .POL files) * new streaming interface for registry diffs (improves speed and memory usage for regdiff/regpatch significantly) ... and fixes a large number of bugs in the registry code (This used to be commit 7a1eec6358bc863dfc671c542b7185d3e39d7b5a) --- source4/scripting/ejs/smbcalls_ldb.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 06384c8dbd..7b143ae4d9 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -575,8 +575,6 @@ static int ejs_ldb_attach_dsdb_schema_from_ldif(MprVarHandle eid, int argc, char { struct ldb_context *ldb; WERROR status; - char *pf_name; - char *df_name; const char *pf; const char *df; -- cgit From dccf3f99e45137b6cd18c1de1c79808ad67130d1 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 8 Sep 2007 13:27:14 +0000 Subject: r25027: Fix more warnings. (This used to be commit 5085c53fcfade614e83d21fc2c1a5bc43bb2a729) --- source4/scripting/ejs/smbcalls_ldb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 7b143ae4d9..1e55d1c563 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -34,7 +34,7 @@ */ static struct ldb_context *ejs_get_ldb_context(int eid) { - struct ldb_context *ldb = mprGetThisPtr(eid, "db"); + struct ldb_context *ldb = (struct ldb_context *)mprGetThisPtr(eid, "db"); if (ldb == NULL) { ejsSetErrorMsg(eid, "invalid ldb connection"); } -- cgit From 2f3551ca7cee59d4d053cceb87abdf1da1b3a1ad Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 1 Oct 2007 18:52:55 +0000 Subject: r25446: Merge some changes I made on the way home from SFO: 2007-09-29 More higher-level passing around of lp_ctx. 2007-09-29 Fix warning. 2007-09-29 Pass loadparm contexts on a higher level. 2007-09-29 Avoid using global loadparm context. (This used to be commit 3468952e771ab31f90b6c374ade01c5550810f42) --- source4/scripting/ejs/smbcalls_ldb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 1e55d1c563..42105e7965 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -452,7 +452,7 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) dbfile = argv[0]; - ldb = ldb_wrap_connect(mprMemCtx(), dbfile, + ldb = ldb_wrap_connect(mprMemCtx(), global_loadparm, dbfile, session_info, creds, 0, (const char **)(argv+1)); if (ldb == NULL) { -- cgit From 2151cde58014ea2e822c13d2f8a369b45dc19ca8 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 6 Oct 2007 22:28:14 +0000 Subject: r25554: Convert last instances of BOOL, True and False to the standard types. (This used to be commit 566aa14139510788548a874e9213d91317f83ca9) --- source4/scripting/ejs/smbcalls_ldb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 42105e7965..04162830b4 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -483,7 +483,7 @@ static int ejs_ldbClose(MprVarHandle eid, int argc, struct MprVar **argv) } mprSetThisPtr(eid, "db", NULL); - mpr_Return(eid, mprCreateBoolVar(True)); + mpr_Return(eid, mprCreateBoolVar(true)); return 0; } -- cgit From ca0b72a1fdb7bd965065e833df34662afef0423e Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 16 Nov 2007 20:12:00 +0100 Subject: r26003: Split up DB_WRAP, as first step in an attempt to sanitize dependencies. (This used to be commit 56dfcb4f2f8e74c9d8b2fe3a0df043781188a555) --- source4/scripting/ejs/smbcalls_ldb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 04162830b4..b8c35d267e 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -25,7 +25,7 @@ #include "lib/appweb/ejs/ejs.h" #include "lib/ldb/include/ldb.h" #include "lib/ldb/include/ldb_errors.h" -#include "db_wrap.h" +#include "ldb_wrap.h" #include "dsdb/samdb/samdb.h" #include "librpc/ndr/libndr.h" -- cgit From f5860b5a853c40c9e48f5bb0a87c086d268c53bd Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 5 Dec 2007 00:40:48 +0100 Subject: r26298: Use metze's schema loading code to pre-initialise the schema into the samdb before we start writing entries into it. In doing so, I realised we still used 'dnsDomain', which is not part of the standard schema (now removed). We also set the 'wrong' side of the linked attributes for the masteredBy on each partition - this is now set in provision_self_join and backlinks via the linked attributes code. When we have the schema loaded, we must also have a valid domain SID loaded, so that the objectclass module works. This required some ejs glue. Andrew Bartlett (This used to be commit b0de08916e8cb59ce6a2ea94bbc9ac0679830ac1) --- source4/scripting/ejs/smbcalls_ldb.c | 51 +++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index b8c35d267e..7599cbf443 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -28,6 +28,7 @@ #include "ldb_wrap.h" #include "dsdb/samdb/samdb.h" #include "librpc/ndr/libndr.h" +#include "libcli/security/security.h" /* get the connected db @@ -598,7 +599,7 @@ static int ejs_ldb_attach_dsdb_schema_from_ldif(MprVarHandle eid, int argc, char } /* - commit a ldb attach a dsdb_schema from ldif files + set a particular invocationId against the running LDB usage: ok = ldb.set_ntds_invocationId("7729aa4b-f990-41ad-b81a-8b6a14090f41"); */ @@ -640,9 +641,9 @@ static int ejs_ldb_set_ntds_invocationId(MprVarHandle eid, int argc, char **argv } /* - commit a ldb attach a dsdb_schema from ldif files + attach a particular ntds objectGUID against the current ldb usage: - ok = ldb.get_ntds_objectGUID("7729aa4b-f990-41ad-b81a-8b6a14090f41"); + ok = ldb.set_ntds_objectGUID("7729aa4b-f990-41ad-b81a-8b6a14090f41"); */ static int ejs_ldb_set_ntds_objectGUID(MprVarHandle eid, int argc, char **argv) { @@ -681,6 +682,48 @@ static int ejs_ldb_set_ntds_objectGUID(MprVarHandle eid, int argc, char **argv) return 0; } +/* + attach a particular domain SID against the current ldb + usage: + ok = ldb.set_domain_sid("S-S-1-5-21-3065342217-3567412576-2214182334"); +*/ +static int ejs_ldb_set_domain_sid(MprVarHandle eid, int argc, char **argv) +{ + struct ldb_context *ldb; + struct dom_sid *dom_sid; + char *dom_sid_str; + bool ok; + + if (argc != 1) { + ejsSetErrorMsg(eid, "ldb.set_domain_sid invalid arguments"); + return -1; + } + + ldb = ejs_get_ldb_context(eid); + if (ldb == NULL) { + return -1; + } + + dom_sid_str = argv[0]; + + dom_sid = dom_sid_parse_talloc(NULL, dom_sid_str); + if (!dom_sid) { + ejsSetErrorMsg(eid, "ldb.set_domain_sid - failed to parse domain sid '%s'\n", + dom_sid_str); + return -1; + } + + ok = samdb_set_domain_sid(ldb, dom_sid); + talloc_free(dom_sid); + if (!ok) { + ejsSetErrorMsg(eid, "ldb.set_domain_sid - failed to set cached ntds invocationId\n"); + return -1; + } + + mpr_Return(eid, mprCreateBoolVar(ok)); + return 0; +} + /* initialise ldb ejs subsystem */ @@ -708,6 +751,8 @@ static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv) ejs_ldb_set_ntds_invocationId); mprSetStringCFunction(ldb, "set_ntds_objectGUID", ejs_ldb_set_ntds_objectGUID); + mprSetStringCFunction(ldb, "set_domain_sid", + ejs_ldb_set_domain_sid); mprSetVar(ldb, "SCOPE_BASE", mprCreateNumberVar(LDB_SCOPE_BASE)); mprSetVar(ldb, "SCOPE_ONE", mprCreateNumberVar(LDB_SCOPE_ONELEVEL)); mprSetVar(ldb, "SCOPE_SUBTREE", mprCreateNumberVar(LDB_SCOPE_SUBTREE)); -- cgit From e11c61bc5cd487dce06fc38bb0ee8c4e24b04e8c Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 21 Feb 2008 18:21:44 +0100 Subject: Introduce mprLpCtx() similar to mprMemCtx() for loadparm_context used by all EJS code. (This used to be commit 184988866fe8e740f58e3683eefcaa70f8b51d11) --- source4/scripting/ejs/smbcalls_ldb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index 7599cbf443..f47920b9bb 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -453,7 +453,7 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) dbfile = argv[0]; - ldb = ldb_wrap_connect(mprMemCtx(), global_loadparm, dbfile, + ldb = ldb_wrap_connect(mprMemCtx(), mprLpCtx(), dbfile, session_info, creds, 0, (const char **)(argv+1)); if (ldb == NULL) { -- cgit From 21fc7673780aa1d7c0caab7b17ff9171238913ba Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 17 Apr 2008 12:23:44 +0200 Subject: Specify event_context to ldb_wrap_connect explicitly. (This used to be commit b4e1ae07a284c044704322446c94351c2decff91) --- source4/scripting/ejs/smbcalls_ldb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/scripting/ejs/smbcalls_ldb.c') diff --git a/source4/scripting/ejs/smbcalls_ldb.c b/source4/scripting/ejs/smbcalls_ldb.c index f47920b9bb..4a157945af 100644 --- a/source4/scripting/ejs/smbcalls_ldb.c +++ b/source4/scripting/ejs/smbcalls_ldb.c @@ -453,7 +453,7 @@ static int ejs_ldbConnect(MprVarHandle eid, int argc, char **argv) dbfile = argv[0]; - ldb = ldb_wrap_connect(mprMemCtx(), mprLpCtx(), dbfile, + ldb = ldb_wrap_connect(mprMemCtx(), mprEventCtx(), mprLpCtx(), dbfile, session_info, creds, 0, (const char **)(argv+1)); if (ldb == NULL) { -- cgit