Author: metze
Date: 2007-05-18 08:16:50 +0000 (Fri, 18 May 2007)
New Revision: 22993

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

Log:
- 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
Modified:
   branches/SAMBA_4_0/source/scripting/ejs/config.mk
   branches/SAMBA_4_0/source/scripting/ejs/smbcalls_ldb.c


Changeset:
Modified: branches/SAMBA_4_0/source/scripting/ejs/config.mk
===================================================================
--- branches/SAMBA_4_0/source/scripting/ejs/config.mk   2007-05-18 08:13:06 UTC 
(rev 22992)
+++ branches/SAMBA_4_0/source/scripting/ejs/config.mk   2007-05-18 08:16:50 UTC 
(rev 22993)
@@ -15,6 +15,7 @@
 OBJ_FILES = smbcalls_ldb.o
 SUBSYSTEM = smbcalls
 INIT_FUNCTION = smb_setup_ejs_ldb
+PRIVATE_DEPENDENCIES = LIBLDB SAMDB LIBNDR
 
 [MODULE::smbcalls_nbt]
 OBJ_FILES = smbcalls_nbt.o

Modified: branches/SAMBA_4_0/source/scripting/ejs/smbcalls_ldb.c
===================================================================
--- branches/SAMBA_4_0/source/scripting/ejs/smbcalls_ldb.c      2007-05-18 
08:13:06 UTC (rev 22992)
+++ branches/SAMBA_4_0/source/scripting/ejs/smbcalls_ldb.c      2007-05-18 
08:16:50 UTC (rev 22993)
@@ -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
@@ -566,6 +568,123 @@
 }
 
 /*
+  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
 */
 static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv)
@@ -586,6 +705,12 @@
        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));

Reply via email to