r26427: Avoid global_smb_iconv_convenience.
authorJelmer Vernooij <jelmer@samba.org>
Thu, 13 Dec 2007 11:19:33 +0000 (12:19 +0100)
committerStefan Metzmacher <metze@samba.org>
Fri, 21 Dec 2007 04:49:53 +0000 (05:49 +0100)
source/auth/ntlm_check.c
source/kdc/kpasswdd.c
source/lib/charset/tests/iconv.c
source/lib/registry/tests/generic.c
source/libnet/libnet_samdump.c
source/librpc/ndr/libndr.h
source/librpc/ndr/ndr.c
source/librpc/ndr/ndr_string.c
source/param/util.c

index a0846f00deccff5b4b989e95ed9ac9cf6829acc3..55f2595f44bab88a11543f456514ac61f1641efd 100644 (file)
@@ -320,7 +320,7 @@ NTSTATUS ntlm_password_check(TALLOC_CTX *mem_ctx,
                mdfour(client_nt.hash, nt_response->data, nt_response->length);
                
                if (lm_response->length && 
-                   (convert_string_talloc(mem_ctx, global_smb_iconv_convenience, CH_DOS, CH_UNIX, 
+                   (convert_string_talloc(mem_ctx, lp_iconv_convenience(lp_ctx), CH_DOS, CH_UNIX, 
                                          lm_response->data, lm_response->length, 
                                           (void **)&unix_pw) != -1)) {
                        if (E_deshash(unix_pw, client_lm.hash)) {
index c8c569b7edc0f023fbb977195d32fc78728e8064..0a3bfe1219ef06eaf3b30b9d991c9030a8284e75 100644 (file)
@@ -62,7 +62,7 @@ static bool kpasswdd_make_error_reply(struct kdc_server *kdc,
        
        DEBUG(result_code ? 3 : 10, ("kpasswdd: %s\n", error_string));
 
-       len = push_utf8_talloc(mem_ctx, global_smb_iconv_convenience, &error_string_utf8, error_string);
+       len = push_utf8_talloc(mem_ctx, lp_iconv_convenience(kdc->task->lp_ctx), &error_string_utf8, error_string);
        if (len == -1) {
                return false;
        }
index ca13dc503a772e6a998bbdc2215f32fe3226d250..d47390b814a64572be372d9673f6cc501b373f47 100644 (file)
@@ -288,7 +288,7 @@ static bool test_codepoint(struct torture_context *tctx, unsigned int codepoint)
        size_t size, size2;
        codepoint_t c;
 
-       size = push_codepoint(global_smb_iconv_convenience, (char *)buf, codepoint);
+       size = push_codepoint(lp_iconv_convenience(tctx->lp_ctx), (char *)buf, codepoint);
        torture_assert(tctx, size != -1 || (codepoint >= 0xd800 && codepoint <= 0x10000), 
                       "Invalid Codepoint range");
 
@@ -299,7 +299,7 @@ static bool test_codepoint(struct torture_context *tctx, unsigned int codepoint)
        buf[size+2] = random();
        buf[size+3] = random();
 
-       c = next_codepoint(global_smb_iconv_convenience, (char *)buf, &size2);
+       c = next_codepoint(lp_iconv_convenience(tctx->lp_ctx), (char *)buf, &size2);
 
        torture_assert(tctx, c == codepoint, 
                       talloc_asprintf(tctx, 
index 1acb6342e7d2882c3bbba76dc4d36e9db711f707..25a89793bd4cc4f7301d084ac17bd498c4146db2 100644 (file)
@@ -23,6 +23,7 @@
 #include "lib/registry/registry.h"
 #include "torture/torture.h"
 #include "librpc/gen_ndr/winreg.h"
+#include "param/param.h"
 
 struct torture_suite *torture_registry_hive(TALLOC_CTX *mem_ctx);
 struct torture_suite *torture_registry_registry(TALLOC_CTX *mem_ctx);
@@ -52,7 +53,7 @@ static bool test_reg_val_data_string_dword(struct torture_context *ctx)
 static bool test_reg_val_data_string_sz(struct torture_context *ctx)
 {
        DATA_BLOB db;
-       db.length = convert_string_talloc(ctx, global_smb_iconv_convenience, CH_UNIX, CH_UTF16,
+       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),
@@ -87,7 +88,7 @@ static bool test_reg_val_data_string_empty(struct torture_context *ctx)
 static bool test_reg_val_description(struct torture_context *ctx)
 {
        DATA_BLOB data;
-       data.length = convert_string_talloc(ctx, global_smb_iconv_convenience, CH_UNIX, CH_UTF16,
+       data.length = convert_string_talloc(ctx, lp_iconv_convenience(ctx->lp_ctx), CH_UNIX, CH_UTF16,
                                            "stationary traveller",
                                            strlen("stationary traveller"),
                                            (void **)&data.data);
@@ -101,7 +102,7 @@ static bool test_reg_val_description(struct torture_context *ctx)
 static bool test_reg_val_description_nullname(struct torture_context *ctx)
 {
        DATA_BLOB data;
-       data.length = convert_string_talloc(ctx, global_smb_iconv_convenience, CH_UNIX, CH_UTF16,
+       data.length = convert_string_talloc(ctx, lp_iconv_convenience(ctx->lp_ctx), CH_UNIX, CH_UTF16,
                                            "west berlin",
                                            strlen("west berlin"),
                                            (void **)&data.data);
index 93e25aa428a8fad2a950437be54de6803eae4b87..9d417d280d71a9d44fa625210fa4b5aa6d9dad49 100644 (file)
@@ -185,7 +185,7 @@ NTSTATUS libnet_SamDump(struct libnet_context *ctx, TALLOC_CTX *mem_ctx,
                        if (strcasecmp_m(s->name, secret_name) != 0) {
                                continue;
                        }
-                       if (convert_string_talloc(mem_ctx, global_smb_iconv_convenience, CH_UTF16, CH_UNIX, 
+                       if (convert_string_talloc(mem_ctx, lp_iconv_convenience(ctx->lp_ctx), CH_UTF16, CH_UNIX, 
                                                  s->secret.data, s->secret.length, 
                                                  (void **)&secret_string) == -1) {
                                r->out.error_string = talloc_asprintf(mem_ctx, 
index 2ac0b86f57d7fca657a5a1eb7f5b8b67f4f0a829..1ecc6f3c3839d1649827ba2a75fe4daa6080f803 100644 (file)
@@ -52,6 +52,8 @@ struct ndr_pull {
        uint32_t data_size;
        uint32_t offset;
 
+       struct smb_iconv_convenience *iconv_convenience;
+
        uint32_t relative_base_offset;
        struct ndr_token_list *relative_base_list;
 
@@ -84,6 +86,8 @@ struct ndr_push {
 
        /* this is used to ensure we generate unique reference IDs */
        uint32_t ptr_count;
+
+       struct smb_iconv_convenience *iconv_convenience;
 };
 
 /* structure passed to functions that print IDL structures */
index 40afeacebfcdbd4c38fb454790952a4af41e3715..a1535d3043119ac287ad931b00b57343f93d5ba7 100644 (file)
@@ -66,6 +66,7 @@ _PUBLIC_ struct ndr_pull *ndr_pull_init_blob(const DATA_BLOB *blob, TALLOC_CTX *
 
        ndr->data = blob->data;
        ndr->data_size = blob->length;
+       ndr->iconv_convenience = talloc_reference(ndr, global_smb_iconv_convenience);
 
        return ndr;
 }
@@ -114,6 +115,7 @@ _PUBLIC_ struct ndr_push *ndr_push_init_ctx(TALLOC_CTX *mem_ctx)
        if (!ndr->data) {
                return NULL;
        }
+       ndr->iconv_convenience = talloc_reference(ndr, global_smb_iconv_convenience);
 
        return ndr;
 }
@@ -438,6 +440,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_subcontext_start(struct ndr_pull *ndr,
        subndr->data = ndr->data + ndr->offset;
        subndr->offset = 0;
        subndr->data_size = r_content_size;
+       subndr->iconv_convenience = talloc_reference(subndr, ndr->iconv_convenience);
 
        *_subndr = subndr;
        return NDR_ERR_SUCCESS;
index 7e84211e87bf1e77297cecbb8af73571760da2ac..69a7eca1a89e66627622e9351e3fec12b173a03e 100644 (file)
@@ -82,7 +82,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_string(struct ndr_pull *ndr, int ndr_flags,
                        as = talloc_strdup(ndr->current_mem_ctx, "");
                } else {
                        ret = convert_string_talloc(ndr->current_mem_ctx,
-                                                   global_smb_iconv_convenience, chset, CH_UNIX, 
+                                                   ndr->iconv_convenience, chset, CH_UNIX, 
                                                    ndr->data+ndr->offset, 
                                                    (len2 + c_len_term)*byte_mul,
                                                    (void **)&as);
@@ -119,7 +119,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_string(struct ndr_pull *ndr, int ndr_flags,
                        as = talloc_strdup(ndr->current_mem_ctx, "");
                } else {
                        ret = convert_string_talloc(ndr->current_mem_ctx,
-                                                   global_smb_iconv_convenience, 
+                                                   ndr->iconv_convenience, 
                                                    chset, CH_UNIX, 
                                                    ndr->data+ndr->offset, 
                                                    (len1 + c_len_term)*byte_mul,
@@ -158,7 +158,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_string(struct ndr_pull *ndr, int ndr_flags,
                        as = talloc_strdup(ndr->current_mem_ctx, "");
                } else {
                        ret = convert_string_talloc(ndr->current_mem_ctx,
-                                                   global_smb_iconv_convenience, 
+                                                   ndr->iconv_convenience, 
                                                    chset, CH_UNIX, 
                                                    ndr->data+ndr->offset, 
                                                    (len1 + c_len_term)*byte_mul,
@@ -193,7 +193,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_string(struct ndr_pull *ndr, int ndr_flags,
                        as = talloc_strdup(ndr->current_mem_ctx, "");
                } else {
                        ret = convert_string_talloc(ndr->current_mem_ctx,
-                                                   global_smb_iconv_convenience,
+                                                   ndr->iconv_convenience,
                                                    chset, CH_UNIX, 
                                                    ndr->data+ndr->offset, 
                                                    (len3 + c_len_term)*byte_mul,
@@ -226,7 +226,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_string(struct ndr_pull *ndr, int ndr_flags,
                        as = talloc_strdup(ndr->current_mem_ctx, "");
                } else {
                        ret = convert_string_talloc(ndr->current_mem_ctx,
-                                                   global_smb_iconv_convenience, 
+                                                   ndr->iconv_convenience, 
                                                    chset, CH_UNIX, 
                                                    ndr->data+ndr->offset, 
                                                    len3,
@@ -247,7 +247,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_string(struct ndr_pull *ndr, int ndr_flags,
                        len1 = utf16_len_n(ndr->data+ndr->offset, ndr->data_size - ndr->offset);
                }
                ret = convert_string_talloc(ndr->current_mem_ctx,
-                                           global_smb_iconv_convenience, chset, CH_UNIX, 
+                                           ndr->iconv_convenience, chset, CH_UNIX, 
                                            ndr->data+ndr->offset, 
                                            len1,
                                            (void **)&as);
@@ -264,7 +264,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_string(struct ndr_pull *ndr, int ndr_flags,
                len1 = (flags & LIBNDR_FLAG_STR_FIXLEN32)?32:15;
                NDR_PULL_NEED_BYTES(ndr, len1*byte_mul);
                ret = convert_string_talloc(ndr->current_mem_ctx,
-                                           global_smb_iconv_convenience,
+                                           ndr->iconv_convenience,
                                            chset, CH_UNIX, 
                                            ndr->data+ndr->offset, 
                                            len1*byte_mul,
@@ -290,7 +290,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_string(struct ndr_pull *ndr, int ndr_flags,
                        as = talloc_strdup(ndr->current_mem_ctx, "");
                } else {
                        ret = convert_string_talloc(ndr->current_mem_ctx,
-                                                   global_smb_iconv_convenience,
+                                                   ndr->iconv_convenience,
                                                    chset, CH_UNIX, 
                                                    ndr->data+ndr->offset, 
                                                    len1,
@@ -355,7 +355,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_string(struct ndr_push *ndr, int ndr_flags,
               LIBNDR_FLAG_STR_FIXLEN32))) {
                s_len++;
        }
-       d_len = convert_string_talloc(ndr, global_smb_iconv_convenience, CH_UNIX, chset, s, s_len, (void **)&dest);
+       d_len = convert_string_talloc(ndr, ndr->iconv_convenience, CH_UNIX, chset, s, s_len, (void **)&dest);
        if (d_len == -1) {
                return ndr_push_error(ndr, NDR_ERR_CHARCNV, 
                                      "Bad character conversion");
@@ -689,7 +689,8 @@ _PUBLIC_ enum ndr_err_code ndr_pull_charset(struct ndr_pull *ndr, int ndr_flags,
 
        NDR_PULL_NEED_BYTES(ndr, length*byte_mul);
 
-       ret = convert_string_talloc(ndr->current_mem_ctx, global_smb_iconv_convenience,
+       ret = convert_string_talloc(ndr->current_mem_ctx, 
+                                   ndr->iconv_convenience,
                                    chset, CH_UNIX, 
                                    ndr->data+ndr->offset, 
                                    length*byte_mul,
@@ -714,7 +715,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_charset(struct ndr_push *ndr, int ndr_flags,
        required = byte_mul * length;
        
        NDR_PUSH_NEED_BYTES(ndr, required);
-       ret = convert_string(global_smb_iconv_convenience, CH_UNIX, chset, 
+       ret = convert_string(ndr->iconv_convenience, CH_UNIX, chset, 
                             var, strlen(var),
                             ndr->data+ndr->offset, required);
        if (ret == -1) {
index 89498b57a66e4098b5b79828d58e98e4b626f6bb..281d32f35f8ed9dd6c3d0de911ee77f3860e96c8 100644 (file)
@@ -285,6 +285,11 @@ _PUBLIC_ const char *lp_messaging_path(TALLOC_CTX *mem_ctx,
 
 struct smb_iconv_convenience *global_smb_iconv_convenience = NULL;
 
+struct smb_iconv_convenience *lp_iconv_convenience(struct loadparm_context *lp_ctx)
+{
+       return global_smb_iconv_convenience;
+}
+
 struct smb_iconv_convenience *smb_iconv_convenience_init_lp(TALLOC_CTX *mem_ctx,
                                                         struct loadparm_context *lp_ctx)
 {