[SCM] Samba Shared Repository - branch v3-6-test updated
Günther Deschner
gd at samba.org
Tue Sep 21 00:35:47 MDT 2010
The branch, v3-6-test has been updated
via 8b14b88 s3-waf: add net.
via 6561289 s3-waf: Build libwbclient as dynamic library (cherry picked from commit dbfb42c1b50e9372184ad170f10ba75b87565965)
via d9be9ea s3-waf: add libnetapi (cherry picked from commit 99d898938c7d656d852e4c91f7534e2cba99c5f8)
via 6028aac s3-waf: fix the file locations of gen_ndr'ed files.
via 2328105 s3-waf: fix the build after reg_api changes.
via 9300480 s3-registry: move regf based reg_api calls into own file.
via 328ee6a s3-registry: add reg_querymultiplevalues to reg_api matching table.
via bb4f37d s3-waf: add rpcclient to the waf build.
via de59fea s3-rpcclient: add some winreg commands.
from 5742ccf lib/tdb: fix c++ build warning in tdb_header_hash().
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test
- Log -----------------------------------------------------------------
commit 8b14b883b2c29f1804060ddee0d931993eaf6f90
Author: Günther Deschner <gd at samba.org>
Date: Sun Sep 19 22:35:26 2010 +0200
s3-waf: add net.
Guenther
(cherry picked from commit c9e17edfc6f9dc7f3ae251102dbb7bfcf08a770d)
commit 65612896705c1f8f903eec5ab3d9474137b266da
Author: Kai Blin <kai at samba.org>
Date: Sun Sep 19 15:41:45 2010 -0700
s3-waf: Build libwbclient as dynamic library
(cherry picked from commit dbfb42c1b50e9372184ad170f10ba75b87565965)
commit d9be9ea4092b8018476c12153e129f0203d3d643
Author: Günther Deschner <gd at samba.org>
Date: Mon Sep 20 09:47:21 2010 -0700
s3-waf: add libnetapi
(cherry picked from commit 99d898938c7d656d852e4c91f7534e2cba99c5f8)
commit 6028aac67b800a0a5a5b73618c9da95c0d006954
Author: Günther Deschner <gd at samba.org>
Date: Mon Sep 20 03:18:49 2010 +0200
s3-waf: fix the file locations of gen_ndr'ed files.
Guenther
(cherry picked from commit c1a6820c85334da43ad47fcc1975a9b4c9577479)
commit 232810567fbc046c23ef05ffea39cdbcf3dfe4b1
Author: Günther Deschner <gd at samba.org>
Date: Mon Sep 20 03:10:43 2010 +0200
s3-waf: fix the build after reg_api changes.
Guenther
(cherry picked from commit ad8533c0b0cffa037f1395d586381d8db642e93a)
commit 9300480fd458d4793eef9a6d397f94c5c8ec19ae
Author: Günther Deschner <gd at samba.org>
Date: Mon Sep 20 02:10:43 2010 +0200
s3-registry: move regf based reg_api calls into own file.
Guenther
(cherry picked from commit 91e8f8ded2f78bdd5b1db11562a575488a024322)
commit 328ee6ad3b915d0deb1d06c4fbd553b3aebd1af6
Author: Günther Deschner <gd at samba.org>
Date: Mon Sep 20 01:51:54 2010 +0200
s3-registry: add reg_querymultiplevalues to reg_api matching table.
Guenther
(cherry picked from commit 323f729df07794da6b79db5e72b1389fb79b8bde)
commit bb4f37d4ac6d6330775321a78a998b9b24f17a66
Author: Günther Deschner <gd at samba.org>
Date: Thu Aug 12 15:42:16 2010 +0200
s3-waf: add rpcclient to the waf build.
Guenther
(cherry picked from commit 3f55c2ee7ac89f96e902b1f1b782e3e033e42f43)
commit de59fea8f4ea8fbd2888a947a897d41592373754
Author: Günther Deschner <gd at samba.org>
Date: Fri Sep 17 13:17:12 2010 +0200
s3-rpcclient: add some winreg commands.
Guenther
(cherry picked from commit 9e058c6e7292b628ca08bb34b5930d0f4a77ef27)
-----------------------------------------------------------------------
Summary of changes:
source3/Makefile.in | 11 +-
source3/build/dynconfig.py | 4 +-
source3/build/wscript | 3 +
source3/include/registry.h | 7 +-
source3/registry/reg_api.c | 276 +---------------------------------
source3/registry/reg_api_regf.c | 301 ++++++++++++++++++++++++++++++++++++
source3/rpcclient/cmd_winreg.c | 321 +++++++++++++++++++++++++++++++++++++++
source3/rpcclient/rpcclient.c | 2 +
source3/wscript_build | 214 +++++++++++++++++++++-----
9 files changed, 818 insertions(+), 321 deletions(-)
create mode 100644 source3/registry/reg_api_regf.c
create mode 100644 source3/rpcclient/cmd_winreg.c
Changeset truncated at 500 lines:
diff --git a/source3/Makefile.in b/source3/Makefile.in
index 0908166..e76ab23 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -616,6 +616,8 @@ REG_INIT_FULL_OBJ = registry/reg_init_full.o
REGFIO_OBJ = registry/regfio.o \
$(REG_PARSE_PRS_OBJ)
+REG_API_REGF_OBJ = registry/reg_api_regf.o
+
REGOBJS_OBJ = registry/reg_objects.o
REG_BACKENDS_BASE_OBJ = registry/reg_backend_db.o
@@ -634,7 +636,6 @@ REG_BACKENDS_EXTRA_OBJ = registry/reg_backend_printing.o \
REG_BASE_OBJ = registry/reg_api.o \
registry/reg_dispatcher.o \
registry/reg_cachehook.o \
- $(REGFIO_OBJ) \
$(REGOBJS_OBJ) \
registry/reg_util_internal.o \
lib/util_nttoken.o \
@@ -750,7 +751,8 @@ PROFILES_OBJ = utils/profiles.o \
$(LIBSMB_ERR_OBJ) \
$(PARAM_OBJ) \
$(LIB_OBJ) $(LIB_DUMMY_OBJ) \
- $(POPT_LIB_OBJ)
+ $(POPT_LIB_OBJ) \
+ $(REGFIO_OBJ)
OPLOCK_OBJ = smbd/oplock.o smbd/oplock_irix.o smbd/oplock_linux.o \
smbd/oplock_onefs.o
@@ -897,6 +899,8 @@ SMBD_OBJ_BASE = $(PARAM_WITHOUT_REG_OBJ) $(SMBD_OBJ_SRV) $(LIBSMB_OBJ) \
$(SMBLDAP_OBJ) $(LIBNET_OBJ) \
$(LIBSMBCONF_OBJ) \
$(PRIVILEGES_BASIC_OBJ) \
+ $(REGFIO_OBJ) \
+ $(REG_API_REGF_OBJ) \
$(LIBNDR_XATTR_OBJ)
PRINTING_OBJ = printing/pcap.o printing/print_svid.o printing/print_aix.o \
@@ -999,6 +1003,7 @@ RPCCLIENT_OBJ1 = rpcclient/rpcclient.o rpcclient/cmd_lsarpc.o \
rpcclient/cmd_shutdown.o rpcclient/cmd_test.o \
rpcclient/cmd_wkssvc.o rpcclient/cmd_ntsvcs.o \
rpcclient/cmd_drsuapi.o rpcclient/cmd_eventlog.o \
+ rpcclient/cmd_winreg.o \
$(DISPLAY_SEC_OBJ)
RPCCLIENT_OBJ = $(RPCCLIENT_OBJ1) \
@@ -1018,6 +1023,7 @@ RPCCLIENT_OBJ = $(RPCCLIENT_OBJ1) \
$(LIBCLI_SRVSVC_OBJ) \
$(LIBCLI_LSA_OBJ) \
$(LIBCLI_SAMR_OBJ) \
+ $(LIBCLI_WINREG_OBJ) \
$(LIBCLI_NETLOGON_OBJ) \
$(RPC_CLIENT_SCHANNEL_OBJ) \
rpc_client/init_netlogon.o \
@@ -1154,6 +1160,7 @@ NET_OBJ = $(NET_OBJ1) \
$(REG_SMBCONF_OBJ) \
$(LIBNET_OBJ) $(LIBNET_DSSYNC_OBJ) $(LIBNET_SAMSYNC_OBJ) \
$(LIBSMBCONF_OBJ) \
+ $(REGFIO_OBJ) \
$(PRIVILEGES_BASIC_OBJ) \
$(LIB_EVENTLOG_OBJ) localedir.o
diff --git a/source3/build/dynconfig.py b/source3/build/dynconfig.py
index 65798a3..7382516 100644
--- a/source3/build/dynconfig.py
+++ b/source3/build/dynconfig.py
@@ -10,7 +10,8 @@ dir_options = {
'with-lockdir' : [ '${PREFIX}/var/locks', 'where to put lock files' ],
'with-codepagedir' : [ '${PREFIX}/lib/samba', 'where to put codepages' ],
'with-privatedir' : [ '${PREFIX}/private', 'where to put smbpasswd' ],
- 'with-cachedir' : [ '${PREFIX}/var/locks', 'where to put temporary cache files' ]
+ 'with-cachedir' : [ '${PREFIX}/var/locks', 'where to put temporary cache files' ],
+ 'with-localedir' : [ '${PREFIX}/share/locale', 'Where to put po files' ]
}
# list of cflags to use for dynconfig.c
@@ -37,6 +38,7 @@ dyn_cflags = {
'NTP_SIGND_SOCKET_DIR' : '${NTP_SIGND_SOCKET_DIR}',
'CODEPAGEDIR' : '${CODEPAGEDIR}',
'CACHEDIR' : '${CACHEDIR}',
+ 'LOCALEDIR' : '${LOCALEDIR}',
'SMB_PASSWD_FILE' : '${PRIVATEDIR}/smbpasswd',
}
diff --git a/source3/build/wscript b/source3/build/wscript
index f27e279..2cbcbe6 100644
--- a/source3/build/wscript
+++ b/source3/build/wscript
@@ -43,6 +43,9 @@ def build(bld):
'../dynconfig.c',
deps='replace talloc tdb popt',
cflags=cflags)
+ bld.SAMBA_SUBSYSTEM('LOCALE_DIR',
+ '../localedir.c',
+ cflags=cflags)
def dynconfig_cflags(bld):
'''work out the extra CFLAGS for dynconfig.c'''
diff --git a/source3/include/registry.h b/source3/include/registry.h
index ca3a1d0..7543ffb 100644
--- a/source3/include/registry.h
+++ b/source3/include/registry.h
@@ -169,8 +169,6 @@ WERROR reg_getkeysecurity(TALLOC_CTX *mem_ctx, struct registry_key *key,
WERROR reg_setkeysecurity(struct registry_key *key,
struct security_descriptor *psecdesc);
WERROR reg_getversion(uint32_t *version);
-WERROR reg_restorekey(struct registry_key *key, const char *fname);
-WERROR reg_savekey(struct registry_key *key, const char *fname);
WERROR reg_deleteallvalues(struct registry_key *key);
WERROR reg_open_path(TALLOC_CTX *mem_ctx, const char *orig_path,
uint32 desired_access, const struct nt_user_token *token,
@@ -189,6 +187,11 @@ WERROR reg_create_path(TALLOC_CTX *mem_ctx, const char *orig_path,
WERROR reg_delete_path(const struct nt_user_token *token,
const char *orig_path);
+/* The following definitions come from registry/reg_api_regf.c */
+
+WERROR reg_restorekey(struct registry_key *key, const char *fname);
+WERROR reg_savekey(struct registry_key *key, const char *fname);
+
/* The following definitions come from registry/reg_init_basic.c */
WERROR registry_init_common(void);
diff --git a/source3/registry/reg_api.c b/source3/registry/reg_api.c
index 4e3d871..7a6f10c 100644
--- a/source3/registry/reg_api.c
+++ b/source3/registry/reg_api.c
@@ -53,19 +53,18 @@
* 0x1a winreg_GetVersion reg_getversion
* 0x1b winreg_OpenHKCC
* 0x1c winreg_OpenHKDD
- * 0x1d winreg_QueryMultipleValues
+ * 0x1d winreg_QueryMultipleValues reg_querymultiplevalues
* 0x1e winreg_InitiateSystemShutdownEx
* 0x1f winreg_SaveKeyEx
* 0x20 winreg_OpenHKPT
* 0x21 winreg_OpenHKPN
- * 0x22 winreg_QueryMultipleValues2
+ * 0x22 winreg_QueryMultipleValues2 reg_querymultiplevalues
*
*/
#include "includes.h"
#include "registry.h"
#include "reg_cachehook.h"
-#include "regfio.h"
#include "reg_util_internal.h"
#include "reg_backend_db.h"
#include "reg_dispatcher.h"
@@ -748,277 +747,6 @@ WERROR reg_getversion(uint32_t *version)
return WERR_OK;
}
-/*******************************************************************
- Note: topkeypat is the *full* path that this *key will be
- loaded into (including the name of the key)
- ********************************************************************/
-
-static WERROR reg_load_tree(REGF_FILE *regfile, const char *topkeypath,
- REGF_NK_REC *key)
-{
- REGF_NK_REC *subkey;
- struct registry_key_handle registry_key;
- struct regval_ctr *values;
- struct regsubkey_ctr *subkeys;
- int i;
- char *path = NULL;
- WERROR result = WERR_OK;
-
- /* initialize the struct registry_key_handle structure */
-
- registry_key.ops = reghook_cache_find(topkeypath);
- if (!registry_key.ops) {
- DEBUG(0, ("reg_load_tree: Failed to assign registry_ops "
- "to [%s]\n", topkeypath));
- return WERR_BADFILE;
- }
-
- registry_key.name = talloc_strdup(regfile->mem_ctx, topkeypath);
- if (!registry_key.name) {
- DEBUG(0, ("reg_load_tree: Talloc failed for reg_key.name!\n"));
- return WERR_NOMEM;
- }
-
- /* now start parsing the values and subkeys */
-
- result = regsubkey_ctr_init(regfile->mem_ctx, &subkeys);
- W_ERROR_NOT_OK_RETURN(result);
-
- result = regval_ctr_init(subkeys, &values);
- W_ERROR_NOT_OK_RETURN(result);
-
- /* copy values into the struct regval_ctr */
-
- for (i=0; i<key->num_values; i++) {
- regval_ctr_addvalue(values, key->values[i].valuename,
- key->values[i].type,
- key->values[i].data,
- (key->values[i].data_size & ~VK_DATA_IN_OFFSET));
- }
-
- /* copy subkeys into the struct regsubkey_ctr */
-
- key->subkey_index = 0;
- while ((subkey = regfio_fetch_subkey( regfile, key ))) {
- result = regsubkey_ctr_addkey(subkeys, subkey->keyname);
- if (!W_ERROR_IS_OK(result)) {
- TALLOC_FREE(subkeys);
- return result;
- }
- }
-
- /* write this key and values out */
-
- if (!store_reg_values(®istry_key, values)
- || !store_reg_keys(®istry_key, subkeys))
- {
- DEBUG(0,("reg_load_tree: Failed to load %s!\n", topkeypath));
- result = WERR_REG_IO_FAILURE;
- }
-
- TALLOC_FREE(subkeys);
-
- if (!W_ERROR_IS_OK(result)) {
- return result;
- }
-
- /* now continue to load each subkey registry tree */
-
- key->subkey_index = 0;
- while ((subkey = regfio_fetch_subkey(regfile, key))) {
- path = talloc_asprintf(regfile->mem_ctx,
- "%s\\%s",
- topkeypath,
- subkey->keyname);
- if (path == NULL) {
- return WERR_NOMEM;
- }
- result = reg_load_tree(regfile, path, subkey);
- if (!W_ERROR_IS_OK(result)) {
- break;
- }
- }
-
- return result;
-}
-
-/*******************************************************************
- ********************************************************************/
-
-static WERROR restore_registry_key(struct registry_key_handle *krecord,
- const char *fname)
-{
- REGF_FILE *regfile;
- REGF_NK_REC *rootkey;
- WERROR result;
-
- /* open the registry file....fail if the file already exists */
-
- regfile = regfio_open(fname, (O_RDONLY), 0);
- if (regfile == NULL) {
- DEBUG(0, ("restore_registry_key: failed to open \"%s\" (%s)\n",
- fname, strerror(errno)));
- return ntstatus_to_werror(map_nt_error_from_unix(errno));
- }
-
- /* get the rootkey from the regf file and then load the tree
- via recursive calls */
-
- if (!(rootkey = regfio_rootkey(regfile))) {
- regfio_close(regfile);
- return WERR_REG_FILE_INVALID;
- }
-
- result = reg_load_tree(regfile, krecord->name, rootkey);
-
- /* cleanup */
-
- regfio_close(regfile);
-
- return result;
-}
-
-WERROR reg_restorekey(struct registry_key *key, const char *fname)
-{
- return restore_registry_key(key->key, fname);
-}
-
-/********************************************************************
-********************************************************************/
-
-static WERROR reg_write_tree(REGF_FILE *regfile, const char *keypath,
- REGF_NK_REC *parent)
-{
- REGF_NK_REC *key;
- struct regval_ctr *values;
- struct regsubkey_ctr *subkeys;
- int i, num_subkeys;
- char *key_tmp = NULL;
- char *keyname, *parentpath;
- char *subkeypath = NULL;
- char *subkeyname;
- struct registry_key_handle registry_key;
- WERROR result = WERR_OK;
- struct security_descriptor *sec_desc = NULL;
-
- if (!regfile) {
- return WERR_GENERAL_FAILURE;
- }
-
- if (!keypath) {
- return WERR_OBJECT_PATH_INVALID;
- }
-
- /* split up the registry key path */
-
- key_tmp = talloc_strdup(regfile->mem_ctx, keypath);
- if (!key_tmp) {
- return WERR_NOMEM;
- }
- if (!reg_split_key(key_tmp, &parentpath, &keyname)) {
- return WERR_OBJECT_PATH_INVALID;
- }
-
- if (!keyname) {
- keyname = parentpath;
- }
-
- /* we need a registry_key_handle object here to enumerate subkeys and values */
-
- ZERO_STRUCT(registry_key);
-
- registry_key.name = talloc_strdup(regfile->mem_ctx, keypath);
- if (registry_key.name == NULL) {
- return WERR_NOMEM;
- }
-
- registry_key.ops = reghook_cache_find(registry_key.name);
- if (registry_key.ops == NULL) {
- return WERR_BADFILE;
- }
-
- /* lookup the values and subkeys */
-
- result = regsubkey_ctr_init(regfile->mem_ctx, &subkeys);
- W_ERROR_NOT_OK_RETURN(result);
-
- result = regval_ctr_init(subkeys, &values);
- W_ERROR_NOT_OK_RETURN(result);
-
- fetch_reg_keys(®istry_key, subkeys);
- fetch_reg_values(®istry_key, values);
-
- result = regkey_get_secdesc(regfile->mem_ctx, ®istry_key, &sec_desc);
- if (!W_ERROR_IS_OK(result)) {
- goto done;
- }
-
- /* write out this key */
-
- key = regfio_write_key(regfile, keyname, values, subkeys, sec_desc,
- parent);
- if (key == NULL) {
- result = WERR_CAN_NOT_COMPLETE;
- goto done;
- }
-
- /* write each one of the subkeys out */
-
- num_subkeys = regsubkey_ctr_numkeys(subkeys);
- for (i=0; i<num_subkeys; i++) {
- subkeyname = regsubkey_ctr_specific_key(subkeys, i);
- subkeypath = talloc_asprintf(regfile->mem_ctx, "%s\\%s",
- keypath, subkeyname);
- if (subkeypath == NULL) {
- result = WERR_NOMEM;
- goto done;
- }
- result = reg_write_tree(regfile, subkeypath, key);
- if (!W_ERROR_IS_OK(result))
- goto done;
- }
-
- DEBUG(6, ("reg_write_tree: wrote key [%s]\n", keypath));
-
-done:
- TALLOC_FREE(subkeys);
- TALLOC_FREE(registry_key.name);
-
- return result;
-}
-
-static WERROR backup_registry_key(struct registry_key_handle *krecord,
- const char *fname)
-{
- REGF_FILE *regfile;
- WERROR result;
-
- /* open the registry file....fail if the file already exists */
-
- regfile = regfio_open(fname, (O_RDWR|O_CREAT|O_EXCL),
- (S_IREAD|S_IWRITE));
- if (regfile == NULL) {
- DEBUG(0,("backup_registry_key: failed to open \"%s\" (%s)\n",
- fname, strerror(errno) ));
- return ntstatus_to_werror(map_nt_error_from_unix(errno));
- }
-
- /* write the registry tree to the file */
-
- result = reg_write_tree(regfile, krecord->name, NULL);
-
- /* cleanup */
-
- regfio_close(regfile);
-
- return result;
-}
-
-WERROR reg_savekey(struct registry_key *key, const char *fname)
-{
- return backup_registry_key(key->key, fname);
-}
-
/**********************************************************************
* Higher level utility functions
**********************************************************************/
diff --git a/source3/registry/reg_api_regf.c b/source3/registry/reg_api_regf.c
new file mode 100644
index 0000000..8f249b5
--- /dev/null
+++ b/source3/registry/reg_api_regf.c
@@ -0,0 +1,301 @@
+/*
+ * Unix SMB/CIFS implementation.
+ * Virtual Windows Registry Layer
+ * Copyright (C) Volker Lendecke 2006
+ * Copyright (C) Michael Adam 2007-2008
+ *
+ * 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 "registry.h"
+#include "reg_cachehook.h"
+#include "regfio.h"
+#include "reg_util_internal.h"
+#include "reg_dispatcher.h"
+#include "reg_objects.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_REGISTRY
+
+/*******************************************************************
+ Note: topkeypat is the *full* path that this *key will be
+ loaded into (including the name of the key)
+ ********************************************************************/
+
+static WERROR reg_load_tree(REGF_FILE *regfile, const char *topkeypath,
+ REGF_NK_REC *key)
+{
+ REGF_NK_REC *subkey;
+ struct registry_key_handle registry_key;
+ struct regval_ctr *values;
+ struct regsubkey_ctr *subkeys;
+ int i;
+ char *path = NULL;
+ WERROR result = WERR_OK;
+
+ /* initialize the struct registry_key_handle structure */
+
+ registry_key.ops = reghook_cache_find(topkeypath);
+ if (!registry_key.ops) {
+ DEBUG(0, ("reg_load_tree: Failed to assign registry_ops "
+ "to [%s]\n", topkeypath));
+ return WERR_BADFILE;
+ }
+
+ registry_key.name = talloc_strdup(regfile->mem_ctx, topkeypath);
+ if (!registry_key.name) {
+ DEBUG(0, ("reg_load_tree: Talloc failed for reg_key.name!\n"));
+ return WERR_NOMEM;
+ }
+
+ /* now start parsing the values and subkeys */
+
+ result = regsubkey_ctr_init(regfile->mem_ctx, &subkeys);
--
Samba Shared Repository
More information about the samba-cvs
mailing list