diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2007-08-27 13:13:08 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 15:02:50 -0500 |
commit | 2edf63b6d647eba131e213bd9dbc543100396930 (patch) | |
tree | 7416510a7f86dc10a41e64800f336f7870d34689 /source4/scripting | |
parent | e56566f3df59fcbca5f15757bf93d23ee9bd9851 (diff) | |
download | samba-2edf63b6d647eba131e213bd9dbc543100396930.tar.gz samba-2edf63b6d647eba131e213bd9dbc543100396930.tar.bz2 samba-2edf63b6d647eba131e213bd9dbc543100396930.zip |
r24703: Use standard registry diff files when provisioning rather than
LDIF files for the registry files.
(This used to be commit 67ad556b7388e5d82756e0a3cfc596e44136329c)
Diffstat (limited to 'source4/scripting')
-rw-r--r-- | source4/scripting/ejs/config.mk | 6 | ||||
-rw-r--r-- | source4/scripting/ejs/smbcalls_reg.c | 91 | ||||
-rw-r--r-- | source4/scripting/libjs/provision.js | 11 |
3 files changed, 100 insertions, 8 deletions
diff --git a/source4/scripting/ejs/config.mk b/source4/scripting/ejs/config.mk index f1c17ad21d..5d562ee344 100644 --- a/source4/scripting/ejs/config.mk +++ b/source4/scripting/ejs/config.mk @@ -17,6 +17,12 @@ SUBSYSTEM = smbcalls INIT_FUNCTION = smb_setup_ejs_ldb PRIVATE_DEPENDENCIES = LIBLDB SAMDB LIBNDR +[MODULE::smbcalls_reg] +OBJ_FILES = smbcalls_reg.o +SUBSYSTEM = smbcalls +INIT_FUNCTION = smb_setup_ejs_reg +PRIVATE_DEPENDENCIES = registry SAMDB LIBNDR + [MODULE::smbcalls_nbt] OBJ_FILES = smbcalls_nbt.o SUBSYSTEM = smbcalls diff --git a/source4/scripting/ejs/smbcalls_reg.c b/source4/scripting/ejs/smbcalls_reg.c new file mode 100644 index 0000000000..4d84587fa4 --- /dev/null +++ b/source4/scripting/ejs/smbcalls_reg.c @@ -0,0 +1,91 @@ +/* + Unix SMB/CIFS implementation. + + provide hooks into smbd C calls from ejs scripts + + Copyright (C) Jelmer Vernooij 2007 + + 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 3 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, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" +#include "scripting/ejs/smbcalls.h" +#include "lib/appweb/ejs/ejs.h" +#include "db_wrap.h" +#include "dsdb/samdb/samdb.h" +#include "librpc/ndr/libndr.h" +#include "lib/registry/registry.h" + +/* + get the connected db + */ +static struct registry_context *ejs_get_reg_context(int eid) +{ + struct registry_context *rctx = mprGetThisPtr(eid, "registry"); + if (rctx == NULL) { + ejsSetErrorMsg(eid, "unable to find registry"); + } + return rctx; +} + +static int ejs_apply_patchfile(MprVarHandle eid, int argc, struct MprVar **argv) +{ + struct registry_context *rctx; + WERROR error; + + /* validate arguments */ + if (argc != 1) { + ejsSetErrorMsg(eid, "reg.apply_patchfile invalid number of arguments"); + return -1; + } + + rctx = ejs_get_reg_context(eid); + if (rctx == NULL) { + return -1; + } + + error = reg_diff_apply(mprToString(argv[0]), rctx); + + mpr_Return(eid, mprWERROR(error)); + + return 0; +} + +/* + initialise registry ejs subsystem +*/ +static int ejs_reg_open(MprVarHandle eid, int argc, struct MprVar **argv) +{ + struct MprVar *reg = mprInitObject(eid, "registry", argc, argv); + struct registry_context *rctx; + WERROR error; + + error = reg_open_samba(mprMemCtx(), &rctx, NULL, NULL); + SMB_ASSERT(W_ERROR_IS_OK(error)); + + mprSetPtrChild(reg, "registry", rctx); + mprSetCFunction(reg, "apply_patchfile", ejs_apply_patchfile); + + return 0; +} + + +/* + setup C functions that be called from ejs +*/ +NTSTATUS smb_setup_ejs_reg(void) +{ + ejsDefineCFunction(-1, "reg_open", ejs_reg_open, NULL, MPR_VAR_SCRIPT_HANDLE); + return NT_STATUS_OK; +} diff --git a/source4/scripting/libjs/provision.js b/source4/scripting/libjs/provision.js index 1054a9a508..6ec29748f6 100644 --- a/source4/scripting/libjs/provision.js +++ b/source4/scripting/libjs/provision.js @@ -376,12 +376,6 @@ function provision_default_paths(subobj) var paths = new Object(); paths.smbconf = lp.get("config file"); paths.shareconf = lp.get("private dir") + "/" + "share.ldb"; - paths.hklm = "hklm.ldb"; - paths.hkcu = "hkcu.ldb"; - paths.hkcr = "hkcr.ldb"; - paths.hku = "hku.ldb"; - paths.hkpd = "hkpd.ldb"; - paths.hkpt = "hkpt.ldb"; paths.samdb = lp.get("sam database"); paths.secrets = lp.get("secrets database"); paths.keytab = "secrets.keytab"; @@ -582,8 +576,9 @@ function provision(subobj, message, blank, paths, session_info, credentials, lda setup_ldb("secrets_init.ldif", info, paths.secrets); setup_ldb("secrets.ldif", info, paths.secrets, false); - message("Setting up hklm.ldb\n"); - setup_ldb("hklm.ldif", info, paths.hklm); + message("Setting up the registry\n"); + var reg = reg_open(); + reg.apply_patchfile(lp.get("setup directory") + "/provision.reg") message("Setting up sam.ldb partitions\n"); /* Also wipes the database */ |