[SCM] Samba Shared Repository - branch v4-0-test updated - release-4-0-0alpha2-979-g52a8d06

Jelmer Vernooij jelmer at samba.org
Thu Feb 21 15:11:35 GMT 2008


The branch, v4-0-test has been updated
       via  52a8d06f00ab3900e2186e047902dbcbe3138a01 (commit)
       via  bf08b682586f6b9a17d4ec3934836be957ef955c (commit)
       via  3430cc60972b94d0d238bc39f473feed96949c5d (commit)
       via  a1715b1f48ba44bd94844418cc9299649aaf1a5e (commit)
       via  58a5b1de2b093fe642eb11d76d12db0edf60c25c (commit)
       via  230355d2e6e27918dff40823eb238904c7a1870e (commit)
       via  47d05ecf6fef66c90994f666b8c63e2e7b5a6cd8 (commit)
       via  c5a95bbe0ce55c29e135a9c6058bf192ec3bb546 (commit)
      from  f5ff4a571cdf7d00d065f4a4996880020f1f459f (commit)

http://gitweb.samba.org/?samba.git;a=shortlog;h=v4-0-test


- Log -----------------------------------------------------------------
commit 52a8d06f00ab3900e2186e047902dbcbe3138a01
Merge: bf08b682586f6b9a17d4ec3934836be957ef955c f5ff4a571cdf7d00d065f4a4996880020f1f459f
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Thu Feb 21 16:11:13 2008 +0100

    Merge branch 'v4-0-test' of ssh://git.samba.org/data/git/samba into v4-0-trivial

commit bf08b682586f6b9a17d4ec3934836be957ef955c
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Thu Feb 21 16:10:07 2008 +0100

    Remove extra whitespace, use public variable in IDL.

commit 3430cc60972b94d0d238bc39f473feed96949c5d
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Thu Feb 21 16:01:19 2008 +0100

    Remove more uses of global_loadparm.

commit a1715b1f48ba44bd94844418cc9299649aaf1a5e
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Thu Feb 21 15:45:32 2008 +0100

    Remove more uses of global_loadparm.

commit 58a5b1de2b093fe642eb11d76d12db0edf60c25c
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Thu Feb 21 15:38:35 2008 +0100

    Remove more uses of global_loadparm.

commit 230355d2e6e27918dff40823eb238904c7a1870e
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Thu Feb 21 15:21:45 2008 +0100

    Remove more uses of global_loadparm.

commit 47d05ecf6fef66c90994f666b8c63e2e7b5a6cd8
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Thu Feb 21 14:50:57 2008 +0100

    Remove more uses of global_loadparm.

commit c5a95bbe0ce55c29e135a9c6058bf192ec3bb546
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Thu Feb 21 14:16:02 2008 +0100

    Avoid use of global_loadparm.

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

Summary of changes:
 source/auth/auth_util.c                     |    2 +-
 source/auth/gensec/gensec_gssapi.c          |    2 +-
 source/auth/gensec/gensec_krb5.c            |    4 ++-
 source/auth/kerberos/kerberos.h             |    4 ++
 source/auth/kerberos/kerberos_pac.c         |   11 +++++--
 source/kdc/hdb-ldb.c                        |   12 +++++--
 source/kdc/kdc.h                            |    2 +
 source/kdc/pac-glue.c                       |   11 ++++---
 source/lib/charset/charcnv.c                |    2 +-
 source/lib/registry/patchfile.c             |    4 ++-
 source/lib/registry/patchfile_dotreg.c      |   10 +++++-
 source/lib/registry/registry.h              |    7 ++--
 source/lib/registry/tests/generic.c         |   14 ++++----
 source/lib/registry/tools/regshell.c        |    7 ++--
 source/lib/registry/tools/regtree.c         |    2 +-
 source/lib/registry/util.c                  |   18 +++++++----
 source/lib/tdr/tdr.c                        |    2 +-
 source/lib/util/ms_fnmatch.c                |   15 +++++----
 source/libcli/auth/smbencrypt.c             |   11 ++++--
 source/libcli/dgram/browse.c                |    6 ++--
 source/libcli/dgram/dgramsocket.c           |    5 ++-
 source/libcli/dgram/libdgram.h              |    1 +
 source/libcli/dgram/netlogon.c              |    6 ++--
 source/libcli/dgram/ntlogon.c               |    6 ++--
 source/libcli/nbt/nbtname.c                 |    4 +-
 source/libcli/raw/clitransport.c            |    5 ++-
 source/libcli/smb_composite/fetchfile.c     |    4 +-
 source/libcli/smb_composite/sesssetup.c     |    4 +-
 source/libcli/smb_composite/smb_composite.h |    1 +
 source/librpc/idl/drsblobs.idl              |    2 +-
 source/nsswitch/wbinfo.c                    |    2 +-
 source/ntvfs/posix/pvfs_rename.c            |   14 +++++----
 source/ntvfs/posix/pvfs_resolve.c           |    5 ++-
 source/ntvfs/posix/pvfs_shortname.c         |    6 +++-
 source/torture/auth/pac.c                   |   34 ++++++++++++++++-----
 source/torture/basic/utable.c               |    6 ++--
 source/torture/rap/rap.c                    |   43 +++++++++++++++------------
 source/torture/raw/composite.c              |    1 +
 source/torture/rpc/netlogon.c               |    2 +-
 source/torture/rpc/samba3rpc.c              |   31 ++++++++++++-------
 source/torture/rpc/samlogon.c               |   15 +++++----
 source/torture/rpc/schannel.c               |    2 +-
 source/winbind/wb_pam_auth.c                |    1 +
 43 files changed, 214 insertions(+), 132 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/auth/auth_util.c b/source/auth/auth_util.c
index b1f0e60..5d2bc6b 100644
--- a/source/auth/auth_util.c
+++ b/source/auth/auth_util.c
@@ -144,7 +144,7 @@ NTSTATUS encrypt_user_info(TALLOC_CTX *mem_ctx, struct auth_context *auth_contex
 			
 			chall_blob = data_blob_talloc(mem_ctx, challenge, 8);
 			if (lp_client_ntlmv2_auth(auth_context->lp_ctx)) {
-				DATA_BLOB names_blob = NTLMv2_generate_names_blob(mem_ctx, lp_netbios_name(auth_context->lp_ctx), lp_workgroup(auth_context->lp_ctx));
+				DATA_BLOB names_blob = NTLMv2_generate_names_blob(mem_ctx, lp_iconv_convenience(auth_context->lp_ctx), lp_netbios_name(auth_context->lp_ctx), lp_workgroup(auth_context->lp_ctx));
 				DATA_BLOB lmv2_response, ntlmv2_response, lmv2_session_key, ntlmv2_session_key;
 				
 				if (!SMBNTLMv2encrypt_hash(user_info_temp,
diff --git a/source/auth/gensec/gensec_gssapi.c b/source/auth/gensec/gensec_gssapi.c
index 8361b11..d8cdb90 100644
--- a/source/auth/gensec/gensec_gssapi.c
+++ b/source/auth/gensec/gensec_gssapi.c
@@ -1298,7 +1298,7 @@ static NTSTATUS gensec_gssapi_session_info(struct gensec_security *gensec_securi
 		}
 		
 		/* decode and verify the pac */
-		nt_status = kerberos_pac_logon_info(mem_ctx, &logon_info, pac_blob,
+		nt_status = kerberos_pac_logon_info(mem_ctx, lp_iconv_convenience(gensec_security->lp_ctx), &logon_info, pac_blob,
 						    gensec_gssapi_state->smb_krb5_context->krb5_context,
 						    NULL, keyblock, principal, authtime, NULL);
 		krb5_free_principal(gensec_gssapi_state->smb_krb5_context->krb5_context, principal);
diff --git a/source/auth/gensec/gensec_krb5.c b/source/auth/gensec/gensec_krb5.c
index d9addca..88432c7 100644
--- a/source/auth/gensec/gensec_krb5.c
+++ b/source/auth/gensec/gensec_krb5.c
@@ -617,7 +617,9 @@ static NTSTATUS gensec_krb5_session_info(struct gensec_security *gensec_security
 		}
 
 		/* decode and verify the pac */
-		nt_status = kerberos_pac_logon_info(gensec_krb5_state, &logon_info, pac,
+		nt_status = kerberos_pac_logon_info(gensec_krb5_state, 
+						    lp_iconv_convenience(gensec_security->lp_ctx),
+						    &logon_info, pac,
 						    gensec_krb5_state->smb_krb5_context->krb5_context,
 						    NULL, gensec_krb5_state->keyblock,
 						    client_principal,
diff --git a/source/auth/kerberos/kerberos.h b/source/auth/kerberos/kerberos.h
index bafd58a..8585aa3 100644
--- a/source/auth/kerberos/kerberos.h
+++ b/source/auth/kerberos/kerberos.h
@@ -111,6 +111,7 @@ krb5_error_code principal_from_credentials(TALLOC_CTX *parent_ctx,
 					   struct smb_krb5_context *smb_krb5_context,
 					   krb5_principal *princ);
 NTSTATUS kerberos_decode_pac(TALLOC_CTX *mem_ctx,
+			     struct smb_iconv_convenience *iconv_convenience,
 			     struct PAC_DATA **pac_data_out,
 			     DATA_BLOB blob,
 			     krb5_context context,
@@ -120,6 +121,7 @@ NTSTATUS kerberos_decode_pac(TALLOC_CTX *mem_ctx,
 			     time_t tgs_authtime,
 			     krb5_error_code *k5ret);
  NTSTATUS kerberos_pac_logon_info(TALLOC_CTX *mem_ctx,
+				  struct smb_iconv_convenience *iconv_convenience,
 				  struct PAC_LOGON_INFO **logon_info,
 				  DATA_BLOB blob,
 				  krb5_context context,
@@ -129,12 +131,14 @@ NTSTATUS kerberos_decode_pac(TALLOC_CTX *mem_ctx,
 				  time_t tgs_authtime, 
 				  krb5_error_code *k5ret);
  krb5_error_code kerberos_encode_pac(TALLOC_CTX *mem_ctx,
+				     struct smb_iconv_convenience *iconv_convenience,
 				    struct PAC_DATA *pac_data,
 				    krb5_context context,
 				    const krb5_keyblock *krbtgt_keyblock,
 				    const krb5_keyblock *service_keyblock,
 				    DATA_BLOB *pac);
  krb5_error_code kerberos_create_pac(TALLOC_CTX *mem_ctx,
+				     struct smb_iconv_convenience *iconv_convenience,
 				     struct auth_serversupplied_info *server_info,
 				     krb5_context context,
 				     const krb5_keyblock *krbtgt_keyblock,
diff --git a/source/auth/kerberos/kerberos_pac.c b/source/auth/kerberos/kerberos_pac.c
index c46e06b..e485f75 100644
--- a/source/auth/kerberos/kerberos_pac.c
+++ b/source/auth/kerberos/kerberos_pac.c
@@ -66,6 +66,7 @@ static krb5_error_code check_pac_checksum(TALLOC_CTX *mem_ctx,
 }
 
  NTSTATUS kerberos_decode_pac(TALLOC_CTX *mem_ctx,
+			      struct smb_iconv_convenience *iconv_convenience,
 			      struct PAC_DATA **pac_data_out,
 			      DATA_BLOB blob,
 			      krb5_context context,
@@ -86,7 +87,6 @@ static krb5_error_code check_pac_checksum(TALLOC_CTX *mem_ctx,
 	struct PAC_LOGON_NAME *logon_name = NULL;
 	struct PAC_DATA *pac_data;
 	struct PAC_DATA_RAW *pac_data_raw;
-	struct smb_iconv_convenience *iconv_convenience = lp_iconv_convenience(global_loadparm);
 
 	DATA_BLOB *srv_sig_blob = NULL;
 	DATA_BLOB *kdc_sig_blob = NULL;
@@ -340,6 +340,7 @@ static krb5_error_code check_pac_checksum(TALLOC_CTX *mem_ctx,
 }
 
 _PUBLIC_  NTSTATUS kerberos_pac_logon_info(TALLOC_CTX *mem_ctx,
+				  struct smb_iconv_convenience *iconv_convenience,
 				  struct PAC_LOGON_INFO **logon_info,
 				  DATA_BLOB blob,
 				  krb5_context context,
@@ -352,7 +353,9 @@ _PUBLIC_  NTSTATUS kerberos_pac_logon_info(TALLOC_CTX *mem_ctx,
 	NTSTATUS nt_status;
 	struct PAC_DATA *pac_data;
 	int i;
-	nt_status = kerberos_decode_pac(mem_ctx, &pac_data,
+	nt_status = kerberos_decode_pac(mem_ctx, 
+					iconv_convenience,
+					&pac_data,
 					blob,
 					context,
 					krbtgt_keyblock,
@@ -423,6 +426,7 @@ static krb5_error_code make_pac_checksum(TALLOC_CTX *mem_ctx,
 }
 
  krb5_error_code kerberos_encode_pac(TALLOC_CTX *mem_ctx,
+				     struct smb_iconv_convenience *iconv_convenience,
 				    struct PAC_DATA *pac_data,
 				    krb5_context context,
 				    const krb5_keyblock *krbtgt_keyblock,
@@ -437,7 +441,6 @@ static krb5_error_code make_pac_checksum(TALLOC_CTX *mem_ctx,
 	struct PAC_SIGNATURE_DATA *kdc_checksum = NULL;
 	struct PAC_SIGNATURE_DATA *srv_checksum = NULL;
 	int i;
-	struct smb_iconv_convenience *iconv_convenience = lp_iconv_convenience(global_loadparm);
 
 	/* First, just get the keytypes filled in (and lengths right, eventually) */
 	for (i=0; i < pac_data->num_buffers; i++) {
@@ -528,6 +531,7 @@ static krb5_error_code make_pac_checksum(TALLOC_CTX *mem_ctx,
 
 
  krb5_error_code kerberos_create_pac(TALLOC_CTX *mem_ctx,
+				     struct smb_iconv_convenience *iconv_convenience,
 				     struct auth_serversupplied_info *server_info,
 				     krb5_context context,
 				     const krb5_keyblock *krbtgt_keyblock,
@@ -640,6 +644,7 @@ static krb5_error_code make_pac_checksum(TALLOC_CTX *mem_ctx,
 	unix_to_nt_time(&LOGON_NAME->logon_time, tgs_authtime);
 
 	ret = kerberos_encode_pac(mem_ctx, 
+				  iconv_convenience,
 				  pac_data, 
 				  context,
 				  krbtgt_keyblock,
diff --git a/source/kdc/hdb-ldb.c b/source/kdc/hdb-ldb.c
index 51726a0..ff226e5 100644
--- a/source/kdc/hdb-ldb.c
+++ b/source/kdc/hdb-ldb.c
@@ -180,6 +180,7 @@ static void hdb_ldb_free_entry(krb5_context context, hdb_entry_ex *entry_ex)
 }
 
 static krb5_error_code LDB_message2entry_keys(krb5_context context,
+					      struct smb_iconv_convenience *iconv_convenience,
 					      TALLOC_CTX *mem_ctx,
 					      struct ldb_message *msg,
 					      unsigned int userAccountControl,
@@ -213,7 +214,7 @@ static krb5_error_code LDB_message2entry_keys(krb5_context context,
 
 	/* supplementalCredentials if present */
 	if (sc_val) {
-		ndr_err = ndr_pull_struct_blob_all(sc_val, mem_ctx, lp_iconv_convenience(global_loadparm), &scb,
+		ndr_err = ndr_pull_struct_blob_all(sc_val, mem_ctx, iconv_convenience, &scb,
 						   (ndr_pull_flags_fn_t)ndr_pull_supplementalCredentialsBlob);
 		if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
 			dump_data(0, sc_val->data, sc_val->length);
@@ -250,7 +251,7 @@ static krb5_error_code LDB_message2entry_keys(krb5_context context,
 		talloc_steal(mem_ctx, blob.data);
 
 		/* TODO: use ndr_pull_struct_blob_all(), when the ndr layer handles it correct with relative pointers */
-		ndr_err = ndr_pull_struct_blob(&blob, mem_ctx, lp_iconv_convenience(global_loadparm), &_pkb,
+		ndr_err = ndr_pull_struct_blob(&blob, mem_ctx, iconv_convenience, &_pkb,
 					       (ndr_pull_flags_fn_t)ndr_pull_package_PrimaryKerberosBlob);
 		if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
 			krb5_set_error_string(context, "LDB_message2entry_keys: could not parse package_PrimaryKerberosBlob");
@@ -393,6 +394,7 @@ static krb5_error_code LDB_message2entry(krb5_context context, HDB *db,
 	krb5_boolean is_computer = FALSE;
 	const char *dnsdomain = ldb_msg_find_attr_as_string(realm_ref_msg, "dnsRoot", NULL);
 	char *realm = strupper_talloc(mem_ctx, dnsdomain);
+	struct loadparm_context *lp_ctx = ldb_get_opaque((struct ldb_context *)db->hdb_db, "loadparm");
 	struct ldb_dn *domain_dn = samdb_result_dn((struct ldb_context *)db->hdb_db,
 							mem_ctx,
 							realm_ref_msg,
@@ -428,6 +430,8 @@ static krb5_error_code LDB_message2entry(krb5_context context, HDB *db,
 	}
 
 	private->entry_ex = entry_ex;
+	private->iconv_convenience = lp_iconv_convenience(lp_ctx);
+	private->netbios_name = lp_netbios_name(lp_ctx);
 
 	talloc_set_destructor(private, hdb_ldb_destrutor);
 
@@ -481,7 +485,7 @@ static krb5_error_code LDB_message2entry(krb5_context context, HDB *db,
 		entry_ex->entry.flags.ok_as_delegate = 1;
 	}
 
-	if (lp_parm_bool(global_loadparm, NULL, "kdc", "require spn for service", true)) {
+	if (lp_parm_bool(lp_ctx, NULL, "kdc", "require spn for service", true)) {
 		if (!is_computer && !ldb_msg_find_attr_as_string(msg, "servicePrincipalName", NULL)) {
 			entry_ex->entry.flags.server = 0;
 		}
@@ -544,7 +548,7 @@ static krb5_error_code LDB_message2entry(krb5_context context, HDB *db,
 	entry_ex->entry.generation = NULL;
 
 	/* Get keys from the db */
-	ret = LDB_message2entry_keys(context, private, msg, userAccountControl, entry_ex);
+	ret = LDB_message2entry_keys(context, private->iconv_convenience, private, msg, userAccountControl, entry_ex);
 	if (ret) {
 		/* Could be bougus data in the entry, or out of memory */
 		goto out;
diff --git a/source/kdc/kdc.h b/source/kdc/kdc.h
index 9d031b8..3a1f9bd 100644
--- a/source/kdc/kdc.h
+++ b/source/kdc/kdc.h
@@ -51,7 +51,9 @@ struct kdc_server {
 
 struct hdb_ldb_private {
 	struct ldb_context *samdb;
+	struct smb_iconv_convenience *iconv_convenience;
 	struct ldb_message *msg;
 	struct ldb_message *realm_ref_msg;
 	hdb_entry_ex *entry_ex;
+	const char *netbios_name;
 };
diff --git a/source/kdc/pac-glue.c b/source/kdc/pac-glue.c
index 5f3a718..a99cf6d 100644
--- a/source/kdc/pac-glue.c
+++ b/source/kdc/pac-glue.c
@@ -47,6 +47,7 @@ void	samba_kdc_plugin_fini(void *ptr)
 
 static krb5_error_code make_pac(krb5_context context,
 				TALLOC_CTX *mem_ctx, 
+				struct smb_iconv_convenience *iconv_convenience,
 				struct auth_serversupplied_info *server_info,
 				krb5_pac *pac) 
 {
@@ -73,7 +74,7 @@ static krb5_error_code make_pac(krb5_context context,
 
 	logon_info.info->info3 = *info3;
 
-	ndr_err = ndr_push_struct_blob(&pac_out, mem_ctx, lp_iconv_convenience(global_loadparm), &logon_info,
+	ndr_err = ndr_push_struct_blob(&pac_out, mem_ctx, iconv_convenience, &logon_info,
 				       (ndr_push_flags_fn_t)ndr_push_PAC_LOGON_INFO_CTR);
 	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
 		nt_status = ndr_map_error2ntstatus(ndr_err);
@@ -126,7 +127,7 @@ krb5_error_code samba_kdc_get_pac(void *priv,
 	}
 
 	nt_status = authsam_make_server_info(mem_ctx, private->samdb, 
-					     lp_netbios_name(global_loadparm),
+					     private->netbios_name,
 					     private->msg, 
 					     private->realm_ref_msg,
 					     data_blob(NULL, 0),
@@ -138,7 +139,7 @@ krb5_error_code samba_kdc_get_pac(void *priv,
 		return ENOMEM;
 	}
 
-	ret = make_pac(context, mem_ctx, server_info, pac);
+	ret = make_pac(context, mem_ctx, private->iconv_convenience, server_info, pac);
 
 	talloc_free(mem_ctx);
 	return ret;
@@ -190,7 +191,7 @@ krb5_error_code samba_kdc_reget_pac(void *priv, krb5_context context,
 		return ENOMEM;
 	}
 		
-	ndr_err = ndr_pull_struct_blob(&pac_in, mem_ctx, lp_iconv_convenience(global_loadparm), &logon_info,
+	ndr_err = ndr_pull_struct_blob(&pac_in, mem_ctx, private->iconv_convenience, &logon_info,
 				       (ndr_pull_flags_fn_t)ndr_pull_PAC_LOGON_INFO_CTR);
 	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err) || !logon_info.info) {
 		nt_status = ndr_map_error2ntstatus(ndr_err);
@@ -213,7 +214,7 @@ krb5_error_code samba_kdc_reget_pac(void *priv, krb5_context context,
 	/* We will compleatly regenerate this pac */
 	krb5_pac_free(context, *pac);
 
-	ret = make_pac(context, mem_ctx, server_info_out, pac);
+	ret = make_pac(context, mem_ctx, private->iconv_convenience, server_info_out, pac);
 
 	talloc_free(mem_ctx);
 	return ret;
diff --git a/source/lib/charset/charcnv.c b/source/lib/charset/charcnv.c
index 54a0676..0465be6 100644
--- a/source/lib/charset/charcnv.c
+++ b/source/lib/charset/charcnv.c
@@ -677,7 +677,7 @@ _PUBLIC_ codepoint_t next_codepoint(struct smb_iconv_convenience *ic,
 	   with codepoints above 64k */
 	olen = 2;
 	outbuf = (char *)buf;
-	smb_iconv(descriptor,  &str, &ilen, &outbuf, &olen);
+	smb_iconv(descriptor, &str, &ilen, &outbuf, &olen);
 	if (olen == 2) {
 		olen = 4;
 		outbuf = (char *)buf;
diff --git a/source/lib/registry/patchfile.c b/source/lib/registry/patchfile.c
index fa1367b..a457901 100644
--- a/source/lib/registry/patchfile.c
+++ b/source/lib/registry/patchfile.c
@@ -23,6 +23,7 @@
 #include "lib/registry/patchfile.h"
 #include "lib/registry/registry.h"
 #include "system/filesys.h"
+#include "param/param.h"
 
 
 _PUBLIC_ WERROR reg_preg_diff_load(int fd,
@@ -30,6 +31,7 @@ _PUBLIC_ WERROR reg_preg_diff_load(int fd,
 				   void *callback_data);
 
 _PUBLIC_ WERROR reg_dotreg_diff_load(int fd,
+				     struct smb_iconv_convenience *iconv_convenience,
 				     const struct reg_diff_callbacks *callbacks,
 				     void *callback_data);
 
@@ -306,7 +308,7 @@ _PUBLIC_ WERROR reg_diff_load(const char *filename,
 		return reg_preg_diff_load(fd, callbacks, callback_data);
 	} else {
 		/* Must be a normal .REG file */
-		return reg_dotreg_diff_load(fd, callbacks, callback_data);
+		return reg_dotreg_diff_load(fd, lp_iconv_convenience(global_loadparm), callbacks, callback_data);
 	}
 }
 
diff --git a/source/lib/registry/patchfile_dotreg.c b/source/lib/registry/patchfile_dotreg.c
index ebcafc9..46ea7c0 100644
--- a/source/lib/registry/patchfile_dotreg.c
+++ b/source/lib/registry/patchfile_dotreg.c
@@ -26,6 +26,7 @@
 #include "lib/registry/patchfile.h"
 #include "lib/registry/registry.h"
 #include "system/filesys.h"
+#include "param/param.h"
 
 /**
  * @file
@@ -36,6 +37,7 @@
 
 struct dotreg_data {
 	int fd;
+	struct smb_iconv_convenience *iconv_convenience;
 };
 
 static WERROR reg_dotreg_diff_add_key(void *_data, const char *key_name)
@@ -64,7 +66,7 @@ static WERROR reg_dotreg_diff_set_value(void *_data, const char *path,
 
 	fdprintf(data->fd, "\"%s\"=%s:%s\n",
 			value_name, str_regtype(value_type),
-			reg_val_data_string(NULL, value_type, value));
+			reg_val_data_string(NULL, data->iconv_convenience, value_type, value));
 
 	return WERR_OK;
 }
@@ -107,6 +109,8 @@ _PUBLIC_ WERROR reg_dotreg_diff_save(TALLOC_CTX *ctx, const char *filename,
 	data = talloc_zero(ctx, struct dotreg_data);
 	*callback_data = data;
 
+	data->iconv_convenience = lp_iconv_convenience(global_loadparm);
+
 	if (filename) {
 		data->fd = open(filename, O_CREAT, 0755);
 		if (data->fd == -1) {
@@ -135,6 +139,7 @@ _PUBLIC_ WERROR reg_dotreg_diff_save(TALLOC_CTX *ctx, const char *filename,
  * Load diff file
  */
 _PUBLIC_ WERROR reg_dotreg_diff_load(int fd,
+				     struct smb_iconv_convenience *iconv_convenience,
 				     const struct reg_diff_callbacks *callbacks,
 				     void *callback_data)
 {
@@ -239,7 +244,8 @@ _PUBLIC_ WERROR reg_dotreg_diff_load(int fd,
 			q++;
 		}
 
-		reg_string_to_val(line, q?p:"REG_SZ", q?q:p,
+		reg_string_to_val(line, iconv_convenience, 
+				  q?p:"REG_SZ", q?q:p,
 				  &value_type, &value);
 
 		error = callbacks->set_value(callback_data, curkey, line,
diff --git a/source/lib/registry/registry.h b/source/lib/registry/registry.h
index fac9180..5e0b971 100644
--- a/source/lib/registry/registry.h
+++ b/source/lib/registry/registry.h
@@ -254,11 +254,10 @@ WERROR reg_create_key(TALLOC_CTX *mem_ctx,
 
 /* Utility functions */
 const char *str_regtype(int type);
-char *reg_val_data_string(TALLOC_CTX *mem_ctx, uint32_t type,
-			  const DATA_BLOB data);
-char *reg_val_description(TALLOC_CTX *mem_ctx, const char *name,
+char *reg_val_data_string(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, uint32_t type, const DATA_BLOB data);
+char *reg_val_description(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, const char *name,
 			  uint32_t type, const DATA_BLOB data);
-bool reg_string_to_val(TALLOC_CTX *mem_ctx, const char *type_str,
+bool reg_string_to_val(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, const char *type_str,
 		       const char *data_str, uint32_t *type, DATA_BLOB *data);
 WERROR reg_open_key_abs(TALLOC_CTX *mem_ctx, struct registry_context *handle,
 			const char *name, struct registry_key **result);
diff --git a/source/lib/registry/tests/generic.c b/source/lib/registry/tests/generic.c
index 25a8979..145e599 100644
--- a/source/lib/registry/tests/generic.c
+++ b/source/lib/registry/tests/generic.c
@@ -45,7 +45,7 @@ static bool test_reg_val_data_string_dword(struct torture_context *ctx)
 	uint32_t d = 0x20;
 	DATA_BLOB db = { (uint8_t *)&d, sizeof(d) };
 	torture_assert_str_equal(ctx, "0x20",
-				 reg_val_data_string(ctx, REG_DWORD, db),
+				 reg_val_data_string(ctx, lp_iconv_convenience(ctx->lp_ctx), REG_DWORD, db),
 				 "dword failed");
 	return true;
 }
@@ -56,11 +56,11 @@ static bool test_reg_val_data_string_sz(struct torture_context *ctx)
 	db.length = convert_string_talloc(ctx, lp_iconv_convenience(ctx->lp_ctx), CH_UNIX, CH_UTF16,
 					  "bla", 3, (void **)&db.data);
 	torture_assert_str_equal(ctx, "bla",
-				 reg_val_data_string(ctx, REG_SZ, db),
+				 reg_val_data_string(ctx, lp_iconv_convenience(ctx->lp_ctx), REG_SZ, db),
 				 "sz failed");
 	db.length = 4;
 	torture_assert_str_equal(ctx, "bl",
-				 reg_val_data_string(ctx, REG_SZ, db),
+				 reg_val_data_string(ctx, lp_iconv_convenience(ctx->lp_ctx), REG_SZ, db),
 				 "sz failed");
 	return true;
 }
@@ -70,7 +70,7 @@ static bool test_reg_val_data_string_binary(struct torture_context *ctx)
 	uint8_t x[] = { 0x1, 0x2, 0x3, 0x4 };
 	DATA_BLOB db = { x, 4 };
 	torture_assert_str_equal(ctx, "01020304",
-				 reg_val_data_string(ctx, REG_BINARY, db),
+				 reg_val_data_string(ctx, lp_iconv_convenience(ctx->lp_ctx), REG_BINARY, db),
 				 "binary failed");
 	return true;
 }
@@ -80,7 +80,7 @@ static bool test_reg_val_data_string_empty(struct torture_context *ctx)
 {
 	DATA_BLOB db = { NULL, 0 };
 	torture_assert_str_equal(ctx, "",
-				 reg_val_data_string(ctx, REG_BINARY, db),
+				 reg_val_data_string(ctx, lp_iconv_convenience(ctx->lp_ctx), REG_BINARY, db),
 				 "empty failed");
 	return true;
 }
@@ -93,7 +93,7 @@ static bool test_reg_val_description(struct torture_context *ctx)
 					    strlen("stationary traveller"),
 					    (void **)&data.data);
 	torture_assert_str_equal(ctx, "camel = REG_SZ : stationary traveller",
-				 reg_val_description(ctx, "camel", REG_SZ, data),
+				 reg_val_description(ctx, lp_iconv_convenience(ctx->lp_ctx), "camel", REG_SZ, data),
 				 "reg_val_description failed");
 	return true;
 }
@@ -107,7 +107,7 @@ static bool test_reg_val_description_nullname(struct torture_context *ctx)
 					    strlen("west berlin"),
 					    (void **)&data.data);
 	torture_assert_str_equal(ctx, "<No Name> = REG_SZ : west berlin",
-				 reg_val_description(ctx, NULL, REG_SZ, data),
+				 reg_val_description(ctx, lp_iconv_convenience(ctx->lp_ctx), NULL, REG_SZ, data),
 				 "description with null name failed");
 	return true;
 }
diff --git a/source/lib/registry/tools/regshell.c b/source/lib/registry/tools/regshell.c
index d5c506a..58f64cb 100644
--- a/source/lib/registry/tools/regshell.c
+++ b/source/lib/registry/tools/regshell.c
@@ -141,7 +141,8 @@ static WERROR cmd_set(struct regshell_context *ctx, int argc, char **argv)
 		return WERR_INVALID_PARAM;
 	}
 
-	if (!reg_string_to_val(ctx, argv[2], argv[3], &val.data_type,
+	if (!reg_string_to_val(ctx, lp_iconv_convenience(cmdline_lp_ctx), 
+			       argv[2], argv[3], &val.data_type,
 			       &val.data)) {
 		fprintf(stderr, "Unable to interpret data\n");
 		return WERR_INVALID_PARAM;
@@ -199,7 +200,7 @@ static WERROR cmd_print(struct regshell_context *ctx, int argc, char **argv)
 	}
 
 	printf("%s\n%s\n", str_regtype(value_type),
-		   reg_val_data_string(ctx, value_type, value_data));
+		   reg_val_data_string(ctx, lp_iconv_convenience(cmdline_lp_ctx), value_type, value_data));
 
 	return WERR_OK;
 }
@@ -233,7 +234,7 @@ static WERROR cmd_ls(struct regshell_context *ctx, int argc, char **argv)
 								     &data_type,
 								     &data)); i++) {
 		printf("V \"%s\" %s %s\n", name, str_regtype(data_type),
-			   reg_val_data_string(ctx, data_type, data));
+			   reg_val_data_string(ctx, lp_iconv_convenience(cmdline_lp_ctx), data_type, data));
 	}
 
 	return WERR_OK;
diff --git a/source/lib/registry/tools/regtree.c b/source/lib/registry/tools/regtree.c
index 0f47d8f..424d351 100644
--- a/source/lib/registry/tools/regtree.c
+++ b/source/lib/registry/tools/regtree.c
@@ -82,7 +82,7 @@ static void print_tree(int level, struct registry_key *p,


-- 
Samba Shared Repository


More information about the samba-cvs mailing list