[SCM] Samba Shared Repository - branch master updated - tevent-0-9-8-790-gb0a6649

Günther Deschner gd at samba.org
Tue Sep 29 16:33:21 MDT 2009


The branch, master has been updated
       via  b0a66496f571cd7003292a7c8fe0e072df18a0a2 (commit)
       via  fc1c243348a12d58b8f433901947253e3d998690 (commit)
       via  661342ee2f753110b31d0b809517ba94e091a310 (commit)
       via  f8016cfee922cba97b70f56c752827e4584da6c6 (commit)
       via  2d6e5e160b9fd1a21bbbe699f6786c570daa0467 (commit)
       via  1b0f3b7e3a3eadb1c9997b38dd41aa4c09c41a46 (commit)
       via  a50cc61ee6bc973f913a8c26a082ae99f63091db (commit)
       via  2c11b73391551723e4ada8664b1ba77873420217 (commit)
       via  fcee9d2c97a673347baf58f749f35785a896e468 (commit)
      from  d31e4c2944a7ef0b903e14db5fb444d626fa3500 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit b0a66496f571cd7003292a7c8fe0e072df18a0a2
Author: Günther Deschner <gd at samba.org>
Date:   Tue Sep 29 23:22:46 2009 +0200

    s3: use pull_reg_multi_sz in rpcclient and net.
    
    Guenther

commit fc1c243348a12d58b8f433901947253e3d998690
Author: Günther Deschner <gd at samba.org>
Date:   Fri Sep 25 11:35:46 2009 +0200

    s3-util: use pull_reg_multi_sz in reg_pull_multi_sz.
    
    Guenther

commit 661342ee2f753110b31d0b809517ba94e091a310
Author: Günther Deschner <gd at samba.org>
Date:   Fri Sep 25 00:55:56 2009 +0200

    s3-registry: use pull_reg_multi_sz().
    
    Guenther

commit f8016cfee922cba97b70f56c752827e4584da6c6
Author: Günther Deschner <gd at samba.org>
Date:   Fri Sep 25 00:56:17 2009 +0200

    s3-util: add pull_reg_sz() and pull_reg_multi_sz() convenience functions.
    
    Guenther

commit 2d6e5e160b9fd1a21bbbe699f6786c570daa0467
Author: Günther Deschner <gd at samba.org>
Date:   Fri Sep 25 00:36:43 2009 +0200

    s3: use push_reg_multi_sz().
    
    Guenther

commit 1b0f3b7e3a3eadb1c9997b38dd41aa4c09c41a46
Author: Günther Deschner <gd at samba.org>
Date:   Thu Sep 24 15:01:32 2009 +0200

    s3-registry: use regval_ctr_addvalue_sz().
    
    Greatly simplifies and cleanes up the code.
    
    Guenther

commit a50cc61ee6bc973f913a8c26a082ae99f63091db
Author: Günther Deschner <gd at samba.org>
Date:   Thu Sep 24 11:30:45 2009 +0200

    s3-registry: add regval_ctr_addvalue_sz.
    
    Guenther

commit 2c11b73391551723e4ada8664b1ba77873420217
Author: Günther Deschner <gd at samba.org>
Date:   Wed Sep 23 20:46:08 2009 +0200

    s3-registry: use push_reg_sz().
    
    Guenther

commit fcee9d2c97a673347baf58f749f35785a896e468
Author: Günther Deschner <gd at samba.org>
Date:   Wed Sep 23 20:42:20 2009 +0200

    s3-util: add push_reg_sz() and push_reg_multi_sz() convenience functions.
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 source3/include/proto.h                        |    5 +
 source3/lib/util_reg.c                         |   95 ++++++++++++++++++------
 source3/printing/nt_printing.c                 |   34 ++-------
 source3/registry/reg_backend_current_version.c |   12 +--
 source3/registry/reg_backend_db.c              |    8 +--
 source3/registry/reg_backend_printing.c        |   65 +++++------------
 source3/registry/reg_backend_prod_options.c    |    7 +--
 source3/registry/reg_backend_tcpip_params.c    |   19 +----
 source3/registry/reg_eventlog.c                |   79 +++++++++-----------
 source3/registry/reg_objects.c                 |   17 ++++
 source3/registry/reg_perfcount.c               |   10 +-
 source3/registry/reg_util.c                    |   16 ++--
 source3/rpc_server/srv_ntsvcs_nt.c             |   14 ++--
 source3/rpc_server/srv_spoolss_nt.c            |   32 ++++----
 source3/rpcclient/cmd_spoolss.c                |   13 ++--
 source3/services/services_db.c                 |   46 +++++-------
 source3/utils/net_rpc_printer.c                |   31 ++++----
 17 files changed, 236 insertions(+), 267 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/proto.h b/source3/include/proto.h
index d664a26..5de6ebf 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -1259,6 +1259,10 @@ struct passwd *getpwuid_alloc(TALLOC_CTX *mem_ctx, uid_t uid) ;
 const char *reg_type_lookup(enum winreg_Type type);
 WERROR reg_pull_multi_sz(TALLOC_CTX *mem_ctx, const void *buf, size_t len,
 			 uint32 *num_values, char ***values);
+bool push_reg_sz(TALLOC_CTX *mem_ctx, DATA_BLOB *blob, const char *s);
+bool push_reg_multi_sz(TALLOC_CTX *mem_ctx, DATA_BLOB *blob, const char **a);
+bool pull_reg_sz(TALLOC_CTX *mem_ctx, const DATA_BLOB *blob, const char **s);
+bool pull_reg_multi_sz(TALLOC_CTX *mem_ctx, const DATA_BLOB *blob, const char ***a);
 
 /* The following definitions come from lib/util_reg_api.c  */
 
@@ -5115,6 +5119,7 @@ struct regval_blob *regval_compose(TALLOC_CTX *ctx, const char *name,
 				   const char *data_p, size_t size);
 int regval_ctr_addvalue(struct regval_ctr *ctr, const char *name, uint16 type,
 			const char *data_p, size_t size);
+int regval_ctr_addvalue_sz(struct regval_ctr *ctr, const char *name, const char *data);
 int regval_ctr_copyvalue(struct regval_ctr *ctr, struct regval_blob *val);
 int regval_ctr_delvalue(struct regval_ctr *ctr, const char *name);
 struct regval_blob* regval_ctr_getvalue(struct regval_ctr *ctr,
diff --git a/source3/lib/util_reg.c b/source3/lib/util_reg.c
index 1e1bcfe..ca46f86 100644
--- a/source3/lib/util_reg.c
+++ b/source3/lib/util_reg.c
@@ -18,6 +18,7 @@
  */
 
 #include "includes.h"
+#include "../librpc/gen_ndr/ndr_winreg.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_REGISTRY
@@ -75,38 +76,86 @@ const char *reg_type_lookup(enum winreg_Type type)
 WERROR reg_pull_multi_sz(TALLOC_CTX *mem_ctx, const void *buf, size_t len,
 			 uint32 *num_values, char ***values)
 {
-	const smb_ucs2_t *p = (const smb_ucs2_t *)buf;
-	*num_values = 0;
+	DATA_BLOB blob;
+	const char **vals;
+	int i;
 
-	/*
-	 * Make sure that a talloc context for the strings retrieved exists
-	 */
+	blob = data_blob_const((uint8_t *)buf, len);
 
-	if (!(*values = TALLOC_ARRAY(mem_ctx, char *, 1))) {
+	if (!pull_reg_multi_sz(mem_ctx, &blob, &vals)) {
 		return WERR_NOMEM;
 	}
 
-	len /= 2; 		/* buf is a set of UCS2 strings */
+	for (i=0; vals[i]; i++) {
+		;;
+	}
 
-	while (len > 0) {
-		char *val;
-		size_t dstlen, thislen;
+	*num_values = i;
+	*values = (char **)vals;
 
-		thislen = strnlen_w(p, len) + 1;
-		if (!convert_string_talloc(*values, CH_UTF16LE, CH_UNIX,
-			p, thislen*2, (void *)&val, &dstlen, true)) {
-			TALLOC_FREE(*values);
-			return WERR_NOMEM;
-		}
+	return WERR_OK;
+}
 
-		ADD_TO_ARRAY(*values, char *, val, values, num_values);
-		if (*values == NULL) {
-			return WERR_NOMEM;
-		}
+/*******************************************************************
+ push a string in unix charset into a REG_SZ UCS2 null terminated blob
+ ********************************************************************/
 
-		p += thislen;
-		len -= thislen;
+bool push_reg_sz(TALLOC_CTX *mem_ctx, DATA_BLOB *blob, const char *s)
+{
+	union winreg_Data data;
+	enum ndr_err_code ndr_err;
+	data.string = s;
+	ndr_err = ndr_push_union_blob(blob, mem_ctx, NULL, &data, REG_SZ,
+			(ndr_push_flags_fn_t)ndr_push_winreg_Data);
+	return NDR_ERR_CODE_IS_SUCCESS(ndr_err);
+}
+
+/*******************************************************************
+ push a string_array in unix charset into a REG_MULTI_SZ UCS2 double-null
+ terminated blob
+ ********************************************************************/
+
+bool push_reg_multi_sz(TALLOC_CTX *mem_ctx, DATA_BLOB *blob, const char **a)
+{
+	union winreg_Data data;
+	enum ndr_err_code ndr_err;
+	data.string_array = a;
+	ndr_err = ndr_push_union_blob(blob, mem_ctx, NULL, &data, REG_MULTI_SZ,
+			(ndr_push_flags_fn_t)ndr_push_winreg_Data);
+	return NDR_ERR_CODE_IS_SUCCESS(ndr_err);
+}
+
+/*******************************************************************
+ pull a string in unix charset out of a REG_SZ UCS2 null terminated blob
+ ********************************************************************/
+
+bool pull_reg_sz(TALLOC_CTX *mem_ctx, const DATA_BLOB *blob, const char **s)
+{
+	union winreg_Data data;
+	enum ndr_err_code ndr_err;
+	ndr_err = ndr_pull_union_blob(blob, mem_ctx, NULL, &data, REG_SZ,
+			(ndr_pull_flags_fn_t)ndr_pull_winreg_Data);
+	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+		return false;
 	}
+	*s = data.string;
+	return true;
+}
 
-	return WERR_OK;
+/*******************************************************************
+ pull a string_array in unix charset out of a REG_MULTI_SZ UCS2 double-null
+ terminated blob
+ ********************************************************************/
+
+bool pull_reg_multi_sz(TALLOC_CTX *mem_ctx, const DATA_BLOB *blob, const char ***a)
+{
+	union winreg_Data data;
+	enum ndr_err_code ndr_err;
+	ndr_err = ndr_pull_union_blob(blob, mem_ctx, NULL, &data, REG_MULTI_SZ,
+			(ndr_pull_flags_fn_t)ndr_pull_winreg_Data);
+	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+		return false;
+	}
+	*a = data.string_array;
+	return true;
 }
diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c
index b75e30b..f09615c 100644
--- a/source3/printing/nt_printing.c
+++ b/source3/printing/nt_printing.c
@@ -3033,14 +3033,8 @@ done:
 static void map_sz_into_ctr(struct regval_ctr *ctr, const char *val_name,
 			    const char *sz)
 {
-	smb_ucs2_t conv_str[1024];
-	size_t str_size;
-
 	regval_ctr_delvalue(ctr, val_name);
-	str_size = push_ucs2(NULL, conv_str, sz, sizeof(conv_str),
-			     STR_TERMINATE | STR_NOALIGN);
-	regval_ctr_addvalue(ctr, val_name, REG_SZ,
-			    (char *) conv_str, str_size);
+	regval_ctr_addvalue_sz(ctr, val_name, sz);
 }
 
 static void map_dword_into_ctr(struct regval_ctr *ctr, const char *val_name,
@@ -3167,7 +3161,6 @@ static void store_printer_guid(NT_PRINTER_INFO_LEVEL_2 *info2,
 {
 	int i;
 	struct regval_ctr *ctr=NULL;
-	UNISTR2 unistr_guid;
 
 	/* find the DsSpooler key */
 	if ((i = lookup_printerkey(info2->data, SPOOL_DSSPOOLER_KEY)) < 0)
@@ -3179,15 +3172,8 @@ static void store_printer_guid(NT_PRINTER_INFO_LEVEL_2 *info2,
 	/* We used to store this as a REG_BINARY but that causes
 	   Vista to whine */
 
-	ZERO_STRUCT( unistr_guid );
-
-	init_unistr2( &unistr_guid, GUID_string(talloc_tos(), &guid),
-		      UNI_STR_TERMINATE );
-
-	regval_ctr_addvalue(ctr, "objectGUID", REG_SZ,
-			    (char *)unistr_guid.buffer,
-			    unistr_guid.uni_max_len*2);
-
+	regval_ctr_addvalue_sz(ctr, "objectGUID",
+			       GUID_string(talloc_tos(), &guid));
 }
 
 static WERROR nt_printer_publish_ads(ADS_STRUCT *ads,
@@ -3784,22 +3770,14 @@ static int unpack_values(NT_PRINTER_DATA *printer_data, const uint8 *buf, int bu
 		     strequal( valuename, "objectGUID" ) )
 		{
 			struct GUID guid;
-			UNISTR2 unistr_guid;
-
-			ZERO_STRUCT( unistr_guid );
 
 			/* convert the GUID to a UNICODE string */
 
 			memcpy( &guid, data_p, sizeof(struct GUID) );
 
-			init_unistr2( &unistr_guid,
-				      GUID_string(talloc_tos(), &guid),
-				      UNI_STR_TERMINATE );
-
-			regval_ctr_addvalue( printer_data->keys[key_index].values,
-					     valuename, REG_SZ,
-					     (const char *)unistr_guid.buffer,
-					     unistr_guid.uni_str_len*2 );
+			regval_ctr_addvalue_sz(printer_data->keys[key_index].values,
+					       valuename,
+					       GUID_string(talloc_tos(), &guid));
 
 		} else {
 			/* add the value */
diff --git a/source3/registry/reg_backend_current_version.c b/source3/registry/reg_backend_current_version.c
index 1a3b281..386c580 100644
--- a/source3/registry/reg_backend_current_version.c
+++ b/source3/registry/reg_backend_current_version.c
@@ -37,8 +37,6 @@ static int current_version_fetch_values(const char *key, struct regval_ctr *valu
 {
 	const char *sysroot_string = "c:\\Windows";
 	fstring sysversion;
-	fstring value;
-	uint32 value_length;
 	char *path = NULL;
 	TALLOC_CTX *ctx = talloc_tos();
 
@@ -55,16 +53,12 @@ static int current_version_fetch_values(const char *key, struct regval_ctr *valu
 		return regdb_ops.fetch_values(key, values);
 	}
 
-	value_length = push_ucs2(value, value, sysroot_string, sizeof(value),
-				 STR_TERMINATE|STR_NOALIGN );
-	regval_ctr_addvalue(values, "SystemRoot", REG_SZ, value, value_length);
+	regval_ctr_addvalue_sz(values, "SystemRoot", sysroot_string);
 
 	fstr_sprintf(sysversion, "%d.%d", lp_major_announce_version(),
 		     lp_minor_announce_version());
-	value_length = push_ucs2(value, value, sysversion, sizeof(value),
-				 STR_TERMINATE|STR_NOALIGN);
-	regval_ctr_addvalue(values, "CurrentVersion", REG_SZ, value,
-			    value_length);
+
+	regval_ctr_addvalue_sz(values, "CurrentVersion", sysversion);
 
 	return regval_ctr_numvals(values);
 }
diff --git a/source3/registry/reg_backend_db.c b/source3/registry/reg_backend_db.c
index dec43ae..2b6259c 100644
--- a/source3/registry/reg_backend_db.c
+++ b/source3/registry/reg_backend_db.c
@@ -250,8 +250,6 @@ WERROR init_registry_key(const char *add_path)
 static void regdb_ctr_add_value(struct regval_ctr *ctr,
 				struct builtin_regkey_value *value)
 {
-	UNISTR2 data;
-
 	switch(value->type) {
 	case REG_DWORD:
 		regval_ctr_addvalue(ctr, value->valuename, REG_DWORD,
@@ -260,10 +258,8 @@ static void regdb_ctr_add_value(struct regval_ctr *ctr,
 		break;
 
 	case REG_SZ:
-		init_unistr2(&data, value->data.string, UNI_STR_TERMINATE);
-		regval_ctr_addvalue(ctr, value->valuename, REG_SZ,
-				    (char*)data.buffer,
-				    data.uni_str_len*sizeof(uint16));
+		regval_ctr_addvalue_sz(ctr, value->valuename,
+				       value->data.string);
 		break;
 
 	default:
diff --git a/source3/registry/reg_backend_printing.c b/source3/registry/reg_backend_printing.c
index 8c6f673..cc44f87 100644
--- a/source3/registry/reg_backend_printing.c
+++ b/source3/registry/reg_backend_printing.c
@@ -386,7 +386,6 @@ static bool key_printers_store_keys( const char *key, struct regsubkey_ctr *subk
 static void fill_in_printer_values(NT_PRINTER_INFO_LEVEL_2 *info2, struct regval_ctr *values)
 {
 	struct spoolss_DeviceMode *devmode;
-	UNISTR2		data;
 	char 		*p;
 	uint32 printer_status = PRINTER_STATUS_OK;
 	
@@ -406,35 +405,17 @@ static void fill_in_printer_values(NT_PRINTER_INFO_LEVEL_2 *info2, struct regval
 		p = info2->printername;
 	else
 		p++;
-	init_unistr2( &data, p, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Name", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
 
-	init_unistr2( &data, info2->location, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Location", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
-
-	init_unistr2( &data, info2->comment, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Description", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
-
-	init_unistr2( &data, info2->parameters, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Parameters", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
-
-	init_unistr2( &data, info2->portname, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Port", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
-
-	init_unistr2( &data, info2->sharename, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Share Name", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
-
-	init_unistr2( &data, info2->drivername, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Printer Driver", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
-
-	init_unistr2( &data, info2->sepfile, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Separator File", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
-
-	init_unistr2( &data, "WinPrint", UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Print Processor",  REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
-
-	init_unistr2( &data, "RAW", UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Datatype", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
+	regval_ctr_addvalue_sz(values, "Name", p);
+	regval_ctr_addvalue_sz(values, "Location", info2->location);
+	regval_ctr_addvalue_sz(values, "Description", info2->comment);
+	regval_ctr_addvalue_sz(values, "Parameters", info2->parameters);
+	regval_ctr_addvalue_sz(values, "Port", info2->portname);
+	regval_ctr_addvalue_sz(values, "Share Name", info2->sharename);
+	regval_ctr_addvalue_sz(values, "Printer Driver", info2->drivername);
+	regval_ctr_addvalue_sz(values, "Separator File", info2->sepfile);
+	regval_ctr_addvalue_sz(values, "Print Processor", "WinPrint");
+	regval_ctr_addvalue_sz(values, "Datatype", "RAW");
 
 	/* stream the device mode */
 
@@ -894,31 +875,21 @@ static void fill_in_driver_values(NT_PRINTER_DRIVER_INFO_LEVEL_3 *info3, struct
 	int buffer_size = 0;
 	int i, length;
 	const char *filename;
-	UNISTR2	data;
+	DATA_BLOB data;
 
 	filename = dos_basename( info3->driverpath );
-	init_unistr2( &data, filename, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Driver", REG_SZ, (char*)data.buffer,
-		data.uni_str_len*sizeof(uint16) );
+	regval_ctr_addvalue_sz(values, "Driver", filename);
 
 	filename = dos_basename( info3->configfile );
-	init_unistr2( &data, filename, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Configuration File", REG_SZ, (char*)data.buffer, 
-		data.uni_str_len*sizeof(uint16) );
+	regval_ctr_addvalue_sz(values, "Configuration File", filename);
 
 	filename = dos_basename( info3->datafile );
-	init_unistr2( &data, filename, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Data File", REG_SZ, (char*)data.buffer,
-		data.uni_str_len*sizeof(uint16) );
+	regval_ctr_addvalue_sz(values, "Data File", filename);
 
 	filename = dos_basename( info3->helpfile );
-	init_unistr2( &data, filename, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Help File", REG_SZ, (char*)data.buffer,
-		data.uni_str_len*sizeof(uint16) );
+	regval_ctr_addvalue_sz(values, "Help File", filename);
 
-	init_unistr2( &data, info3->defaultdatatype, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Data Type", REG_SZ, (char*)data.buffer,
-		data.uni_str_len*sizeof(uint16) );
+	regval_ctr_addvalue_sz(values, "Data Type", info3->defaultdatatype);
 
 	regval_ctr_addvalue( values, "Version", REG_DWORD, (char*)&info3->cversion, 
 		sizeof(info3->cversion) );
@@ -940,8 +911,8 @@ static void fill_in_driver_values(NT_PRINTER_DRIVER_INFO_LEVEL_3 *info3, struct
 				break;
 			}
 
-			init_unistr2( &data, filename, UNI_STR_TERMINATE);
-			memcpy( buffer+buffer_size, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
+			push_reg_sz(talloc_tos(), &data, filename);
+			memcpy( buffer+buffer_size, (char*)data.data, data.length);
 
 			buffer_size += (length + 1)*sizeof(uint16);
 		}
diff --git a/source3/registry/reg_backend_prod_options.c b/source3/registry/reg_backend_prod_options.c
index cdc1f37..786bc99 100644
--- a/source3/registry/reg_backend_prod_options.c
+++ b/source3/registry/reg_backend_prod_options.c
@@ -34,8 +34,6 @@ extern struct registry_ops regdb_ops;
 static int prod_options_fetch_values(const char *key, struct regval_ctr *regvals)
 {
 	const char *value_ascii = "";
-	fstring value;
-	int value_length;
 
 	switch (lp_server_role()) {
 		case ROLE_DOMAIN_PDC:
@@ -50,10 +48,7 @@ static int prod_options_fetch_values(const char *key, struct regval_ctr *regvals
 			break;
 	}
 
-	value_length = push_ucs2(value, value, value_ascii, sizeof(value),
-				 STR_TERMINATE|STR_NOALIGN );
-	regval_ctr_addvalue(regvals, "ProductType", REG_SZ, value,
-			    value_length);
+	regval_ctr_addvalue_sz(regvals, "ProductType", value_ascii);
 
 	return regval_ctr_numvals( regvals );
 }
diff --git a/source3/registry/reg_backend_tcpip_params.c b/source3/registry/reg_backend_tcpip_params.c
index 30f7f71..fbad043 100644
--- a/source3/registry/reg_backend_tcpip_params.c
+++ b/source3/registry/reg_backend_tcpip_params.c
@@ -33,24 +33,9 @@ extern struct registry_ops regdb_ops;
 
 static int tcpip_params_fetch_values(const char *key, struct regval_ctr *regvals)
 {
-	fstring value;
-	int value_length;
-	char *hname;
-	char *mydomainname = NULL;
+	regval_ctr_addvalue_sz(regvals, "Hostname", myhostname());
 
-	hname = myhostname();
-	value_length = push_ucs2(value, value, hname, sizeof(value),
-				 STR_TERMINATE|STR_NOALIGN);
-	regval_ctr_addvalue(regvals, "Hostname",REG_SZ, value, value_length);
-
-	mydomainname = get_mydnsdomname(talloc_tos());
-	if (!mydomainname) {
-		return -1;
-	}
-
-	value_length = push_ucs2(value, value, mydomainname, sizeof(value),
-				 STR_TERMINATE|STR_NOALIGN);
-	regval_ctr_addvalue(regvals, "Domain", REG_SZ, value, value_length);
+	regval_ctr_addvalue_sz(regvals, "Domain", get_mydnsdomname(talloc_tos()));
 
 	return regval_ctr_numvals(regvals);
 }
diff --git a/source3/registry/reg_eventlog.c b/source3/registry/reg_eventlog.c
index 45ade52..722cd58 100644
--- a/source3/registry/reg_eventlog.c
+++ b/source3/registry/reg_eventlog.c
@@ -40,7 +40,7 @@ bool eventlog_init_keys(void)
 	uint32 uiMaxSize;
 	uint32 uiRetention;
 	uint32 uiCategoryCount;
-	UNISTR2 data;
+	DATA_BLOB data;
 	TALLOC_CTX *ctx = talloc_tos();
 	WERROR werr;
 
@@ -114,18 +114,13 @@ bool eventlog_init_keys(void)
 			regval_ctr_addvalue(values, "Retention", REG_DWORD,
 					     (char *)&uiRetention,
 					     sizeof(uint32));
-			init_unistr2(&data, *elogs, UNI_STR_TERMINATE);
 
-			regval_ctr_addvalue(values, "PrimaryModule", REG_SZ,
-					     (char *)data.buffer,
-					     data.uni_str_len *
-					     sizeof(uint16));
-			init_unistr2(&data, *elogs, UNI_STR_TERMINATE);
+			regval_ctr_addvalue_sz(values, "PrimaryModule", *elogs);
+			push_reg_sz(talloc_tos(), &data, *elogs);
 
 			regval_ctr_addvalue(values, "Sources", REG_MULTI_SZ,
-					     (char *)data.buffer,
-					     data.uni_str_len *
-					     sizeof(uint16));
+					     (char *)data.data,
+					     data.length);
 
 			evtfilepath = talloc_asprintf(ctx,
 					"%%SystemRoot%%\\system32\\config\\%s.tdb",
@@ -133,9 +128,9 @@ bool eventlog_init_keys(void)
 			if (!evtfilepath) {
 				TALLOC_FREE(values);
 			}
-			init_unistr2(&data, evtfilepath, UNI_STR_TERMINATE);
-			regval_ctr_addvalue(values, "File", REG_EXPAND_SZ, (char *)data.buffer,
-					     data.uni_str_len * sizeof(uint16));
+			push_reg_sz(talloc_tos(), &data, evtfilepath);
+			regval_ctr_addvalue(values, "File", REG_EXPAND_SZ, (char *)data.data,
+					     data.length);
 			regdb_store_values(evtlogpath, values);
 
 		}
@@ -166,15 +161,13 @@ bool eventlog_init_keys(void)
 					     REG_DWORD,
 					     ( char * ) &uiCategoryCount,
 					     sizeof( uint32 ) );
-			init_unistr2( &data,
-				      "%SystemRoot%\\system32\\eventlog.dll",
-				      UNI_STR_TERMINATE );
+			push_reg_sz(talloc_tos(), &data,
+				      "%SystemRoot%\\system32\\eventlog.dll");
 
 			regval_ctr_addvalue( values, "CategoryMessageFile",
 					     REG_EXPAND_SZ,


-- 
Samba Shared Repository


More information about the samba-cvs mailing list