Author: jelmer Date: 2007-08-27 13:13:08 +0000 (Mon, 27 Aug 2007) New Revision: 24703
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=24703 Log: Use standard registry diff files when provisioning rather than LDIF files for the registry files. Added: branches/SAMBA_4_0/source/scripting/ejs/smbcalls_reg.c Removed: branches/SAMBA_4_0/source/setup/hklm.ldif Modified: branches/SAMBA_4_0/ branches/SAMBA_4_0/source/lib/registry/hive.c branches/SAMBA_4_0/source/lib/registry/patchfile.c branches/SAMBA_4_0/source/lib/registry/samba.c branches/SAMBA_4_0/source/scripting/ejs/config.mk branches/SAMBA_4_0/source/scripting/libjs/provision.js branches/SAMBA_4_0/source/setup/provision.reg Changeset: Property changes on: branches/SAMBA_4_0 ___________________________________________________________________ Name: bzr:revision-info ...skipped... Name: bzr:file-ids ...skipped... Name: bzr:revision-id:v3-trunk0 ...skipped... Modified: branches/SAMBA_4_0/source/lib/registry/hive.c =================================================================== --- branches/SAMBA_4_0/source/lib/registry/hive.c 2007-08-27 12:04:09 UTC (rev 24702) +++ branches/SAMBA_4_0/source/lib/registry/hive.c 2007-08-27 13:13:08 UTC (rev 24703) @@ -39,6 +39,8 @@ fd = open(location, O_RDWR); if (fd == -1) { + if (errno == ENOENT) + return WERR_NOT_FOUND; return WERR_BADFILE; } Modified: branches/SAMBA_4_0/source/lib/registry/patchfile.c =================================================================== --- branches/SAMBA_4_0/source/lib/registry/patchfile.c 2007-08-27 12:04:09 UTC (rev 24702) +++ branches/SAMBA_4_0/source/lib/registry/patchfile.c 2007-08-27 13:13:08 UTC (rev 24703) @@ -252,7 +252,9 @@ /** * Load diff file */ -_PUBLIC_ WERROR reg_diff_load(const char *filename, const struct reg_diff_callbacks *callbacks, void *callback_data) +_PUBLIC_ WERROR reg_diff_load(const char *filename, + const struct reg_diff_callbacks *callbacks, + void *callback_data) { int fd; char hdr[4]; Modified: branches/SAMBA_4_0/source/lib/registry/samba.c =================================================================== --- branches/SAMBA_4_0/source/lib/registry/samba.c 2007-08-27 12:04:09 UTC (rev 24702) +++ branches/SAMBA_4_0/source/lib/registry/samba.c 2007-08-27 13:13:08 UTC (rev 24703) @@ -36,7 +36,12 @@ location = talloc_asprintf(ctx, "%s/%s.ldb", lp_private_dir(), name); + error = reg_open_hive(ctx, location, auth_info, creds, &hive); + + if (W_ERROR_EQUAL(error, WERR_NOT_FOUND)) + error = reg_open_ldb_file(ctx, location, auth_info, creds, &hive); + if (!W_ERROR_IS_OK(error)) return error; Modified: branches/SAMBA_4_0/source/scripting/ejs/config.mk =================================================================== --- branches/SAMBA_4_0/source/scripting/ejs/config.mk 2007-08-27 12:04:09 UTC (rev 24702) +++ branches/SAMBA_4_0/source/scripting/ejs/config.mk 2007-08-27 13:13:08 UTC (rev 24703) @@ -17,6 +17,12 @@ 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 Added: branches/SAMBA_4_0/source/scripting/ejs/smbcalls_reg.c =================================================================== --- branches/SAMBA_4_0/source/scripting/ejs/smbcalls_reg.c 2007-08-27 12:04:09 UTC (rev 24702) +++ branches/SAMBA_4_0/source/scripting/ejs/smbcalls_reg.c 2007-08-27 13:13:08 UTC (rev 24703) @@ -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; +} Modified: branches/SAMBA_4_0/source/scripting/libjs/provision.js =================================================================== --- branches/SAMBA_4_0/source/scripting/libjs/provision.js 2007-08-27 12:04:09 UTC (rev 24702) +++ branches/SAMBA_4_0/source/scripting/libjs/provision.js 2007-08-27 13:13:08 UTC (rev 24703) @@ -376,12 +376,6 @@ 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 @@ 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 */ Deleted: branches/SAMBA_4_0/source/setup/hklm.ldif =================================================================== --- branches/SAMBA_4_0/source/setup/hklm.ldif 2007-08-27 12:04:09 UTC (rev 24702) +++ branches/SAMBA_4_0/source/setup/hklm.ldif 2007-08-27 13:13:08 UTC (rev 24703) @@ -1,43 +0,0 @@ -dn: @INDEXLIST [EMAIL PROTECTED]: key - -dn: @ATTRIBUTES -key: CASE_INSENSITIVE -value: CASE_INSENSITIVE - -dn: key=control,key=currentcontrolset,key=system,hive=NONE -key: control - -dn: value=ProductType,key=productoptions,key=control,key=currentcontrolset,key=system,hive=NONE -value: ProductType -data: LanmanNT -type: 1 - -dn: key=productoptions,key=control,key=currentcontrolset,key=system,hive=NONE -key: productoptions - -dn: key=system,hive=NONE -key: system - -dn: key=print,key=control,key=currentcontrolset,key=system,hive=NONE -key: print - -dn: key=currentcontrolset,key=system,hive=NONE -key: currentcontrolset - -dn: key=Terminal Server,key=control,key=currentcontrolset,key=system,hive=NONE -key: Terminal Server - -dn: key=Services,key=CurrentControlSet,key=System,hive=NONE -key: Services - -dn: key=Netlogon,key=Services,key=CurrentControlSet,key=System,hive=NONE -key: Netlogon - -dn: key=Parameters,key=Netlogon,key=Services,key=CurrentControlSet,key=System,hive=NONE -key: Parameters - -dn: value=RefusePasswordChange,key=Parameters,key=Netlogon,key=Services,key=CurrentControlSet,key=System,hive=NONE -value: RefusePasswordChange -type: 4 -data: 0 Modified: branches/SAMBA_4_0/source/setup/provision.reg =================================================================== --- branches/SAMBA_4_0/source/setup/provision.reg 2007-08-27 12:04:09 UTC (rev 24702) +++ branches/SAMBA_4_0/source/setup/provision.reg 2007-08-27 13:13:08 UTC (rev 24703) @@ -2,6 +2,12 @@ [HKEY_LOCAL_MACHINE] +[HKEY_LOCAL_MACHINE\System] + +[HKEY_LOCAL_MACHINE\System\CurrentControlSet] + +[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control] + [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ProductOptions] ProductType="LanmanNT"