From 2edf63b6d647eba131e213bd9dbc543100396930 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 27 Aug 2007 13:13:08 +0000 Subject: r24703: Use standard registry diff files when provisioning rather than LDIF files for the registry files. (This used to be commit 67ad556b7388e5d82756e0a3cfc596e44136329c) --- source4/scripting/ejs/smbcalls_reg.c | 91 ++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 source4/scripting/ejs/smbcalls_reg.c (limited to 'source4/scripting/ejs/smbcalls_reg.c') 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 . +*/ + +#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; +} -- cgit