[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(&registry_key, values)
-	    || !store_reg_keys(&registry_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(&registry_key, subkeys);
-	fetch_reg_values(&registry_key, values);
-
-	result = regkey_get_secdesc(regfile->mem_ctx, &registry_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