r26638: libndr: Require explicitly specifying iconv_convenience for ndr_struct_push_b...
authorJelmer Vernooij <jelmer@samba.org>
Wed, 2 Jan 2008 04:05:05 +0000 (22:05 -0600)
committerStefan Metzmacher <metze@samba.org>
Tue, 1 Jan 2008 22:12:11 +0000 (16:12 -0600)
(This used to be commit 61ad78ac98937ef7a9aa32075a91a1c95b7606b3)

41 files changed:
source4/auth/gensec/schannel.c
source4/auth/kerberos/kerberos_pac.c
source4/cluster/ctdb/opendb_ctdb.c
source4/dsdb/common/util.c
source4/dsdb/repl/replicated_objects.c
source4/dsdb/samdb/ldb_modules/objectclass.c
source4/dsdb/samdb/ldb_modules/objectguid.c
source4/dsdb/samdb/ldb_modules/password_hash.c
source4/dsdb/samdb/ldb_modules/repl_meta_data.c
source4/dsdb/samdb/ldb_modules/samba3sam.c
source4/dsdb/samdb/ldb_modules/samldb.c
source4/dsdb/samdb/ldb_modules/simple_ldap_map.c
source4/dsdb/schema/schema_init.c
source4/dsdb/schema/schema_syntax.c
source4/kdc/pac-glue.c
source4/lib/ldb-samba/ldif_handlers.c
source4/lib/registry/regf.c
source4/libcli/dgram/browse.c
source4/libcli/dgram/dgramsocket.c
source4/libcli/dgram/netlogon.c
source4/libcli/dgram/ntlogon.c
source4/libcli/ldap/ldap_ndr.c
source4/libcli/nbt/nbtname.c
source4/libcli/nbt/nbtsocket.c
source4/libcli/raw/rawfile.c
source4/libcli/raw/rawsetfileinfo.c
source4/libcli/wrepl/winsrepl.c
source4/libnet/libnet_become_dc.c
source4/libnet/libnet_samsync_ldb.c
source4/librpc/ndr/ndr.c
source4/ntptr/simple_ldb/ntptr_simple_ldb.c
source4/ntvfs/common/notify.c
source4/ntvfs/common/opendb_tdb.c
source4/ntvfs/posix/pvfs_xattr.c
source4/smb_server/blob.c
source4/smb_server/smb/nttrans.c
source4/smb_server/smb2/fileinfo.c
source4/torture/rpc/autoidl.c
source4/torture/rpc/winreg.c
source4/winbind/wb_pam_auth.c
source4/wrepl_server/wrepl_in_connection.c

index b14e741311a92c8b2b5b68d95e8df3b7e9e40dcc..f37a29032ac9d68ab916ac3a9fa91df4f4a153c8 100644 (file)
@@ -82,7 +82,8 @@ static NTSTATUS schannel_update(struct gensec_security *gensec_security, TALLOC_
                bind_schannel.u.info3.workstation = cli_credentials_get_workstation(gensec_security->credentials);
 #endif
                
-               ndr_err = ndr_push_struct_blob(out, out_mem_ctx, &bind_schannel,
+               ndr_err = ndr_push_struct_blob(out, out_mem_ctx, 
+                                              lp_iconv_convenience(gensec_security->lp_ctx), &bind_schannel,
                                               (ndr_push_flags_fn_t)ndr_push_schannel_bind);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        status = ndr_map_error2ntstatus(ndr_err);
@@ -137,7 +138,8 @@ static NTSTATUS schannel_update(struct gensec_security *gensec_security, TALLOC_
                bind_schannel_ack.unknown2 = 0;
                bind_schannel_ack.unknown3 = 0x6c0000;
                
-               ndr_err = ndr_push_struct_blob(out, out_mem_ctx, &bind_schannel_ack,
+               ndr_err = ndr_push_struct_blob(out, out_mem_ctx, 
+                                              lp_iconv_convenience(gensec_security->lp_ctx), &bind_schannel_ack,
                                               (ndr_push_flags_fn_t)ndr_push_schannel_bind_ack);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        status = ndr_map_error2ntstatus(ndr_err);
index 6eea053e2b2ddbaaac6b22a73663b1c03f668455..705f66a64b0e37651a2067d0ca7610704bb7b0b1 100644 (file)
@@ -29,6 +29,7 @@
 #include "librpc/gen_ndr/ndr_krb5pac.h"
 #include "lib/ldb/include/ldb.h"
 #include "auth/auth_sam_reply.h"
+#include "param/param.h"
 
 static krb5_error_code check_pac_checksum(TALLOC_CTX *mem_ctx, 
                                          DATA_BLOB pac_data,
@@ -85,6 +86,7 @@ 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;
@@ -229,7 +231,9 @@ static krb5_error_code check_pac_checksum(TALLOC_CTX *mem_ctx,
        memset(srv_sig_wipe->signature.data, '\0', srv_sig_wipe->signature.length);
        
        /* and reencode, back into the same place it came from */
-       ndr_err = ndr_push_struct_blob(kdc_sig_blob, pac_data_raw, kdc_sig_wipe,
+       ndr_err = ndr_push_struct_blob(kdc_sig_blob, pac_data_raw, 
+                                      iconv_convenience,
+                                      kdc_sig_wipe,
                                       (ndr_push_flags_fn_t)ndr_push_PAC_SIGNATURE_DATA);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                status = ndr_map_error2ntstatus(ndr_err);
@@ -237,7 +241,9 @@ static krb5_error_code check_pac_checksum(TALLOC_CTX *mem_ctx,
                        nt_errstr(status)));
                return status;
        }
-       ndr_err = ndr_push_struct_blob(srv_sig_blob, pac_data_raw, srv_sig_wipe,
+       ndr_err = ndr_push_struct_blob(srv_sig_blob, pac_data_raw, 
+                                      iconv_convenience,
+                                      srv_sig_wipe,
                                       (ndr_push_flags_fn_t)ndr_push_PAC_SIGNATURE_DATA);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                status = ndr_map_error2ntstatus(ndr_err);
@@ -247,7 +253,9 @@ static krb5_error_code check_pac_checksum(TALLOC_CTX *mem_ctx,
        }
 
        /* push out the whole structure, but now with zero'ed signatures */
-       ndr_err = ndr_push_struct_blob(&modified_pac_blob, pac_data_raw, pac_data_raw,
+       ndr_err = ndr_push_struct_blob(&modified_pac_blob, pac_data_raw, 
+                                      iconv_convenience,
+                                      pac_data_raw,
                                       (ndr_push_flags_fn_t)ndr_push_PAC_DATA_RAW);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                status = ndr_map_error2ntstatus(ndr_err);
@@ -472,7 +480,9 @@ static krb5_error_code make_pac_checksum(TALLOC_CTX *mem_ctx,
        memset(kdc_checksum->signature.data, '\0', kdc_checksum->signature.length);
        memset(srv_checksum->signature.data, '\0', srv_checksum->signature.length);
 
-       ndr_err = ndr_push_struct_blob(&tmp_blob, mem_ctx, pac_data,
+       ndr_err = ndr_push_struct_blob(&tmp_blob, mem_ctx, 
+                                      lp_iconv_convenience(global_loadparm),
+                                      pac_data,
                                       (ndr_push_flags_fn_t)ndr_push_PAC_DATA);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                nt_status = ndr_map_error2ntstatus(ndr_err);
@@ -495,7 +505,9 @@ static krb5_error_code make_pac_checksum(TALLOC_CTX *mem_ctx,
        }
 
        /* And push it out again, this time to the world.  This relies on determanistic pointer values */
-       ndr_err = ndr_push_struct_blob(&tmp_blob, mem_ctx, pac_data,
+       ndr_err = ndr_push_struct_blob(&tmp_blob, mem_ctx, 
+                                      lp_iconv_convenience(global_loadparm),
+                                      pac_data,
                                       (ndr_push_flags_fn_t)ndr_push_PAC_DATA);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                nt_status = ndr_map_error2ntstatus(ndr_err);
index bb8ae26d3d49112c935823a01f7bbb5614b94d70..4972dab0cf67e5589736b3c4f2315f98709176d3 100644 (file)
@@ -231,7 +231,9 @@ static NTSTATUS odb_push_record(struct odb_lock *lck, struct opendb_file *file)
                return NT_STATUS_OK;
        }
 
-       ndr_err = ndr_push_struct_blob(&blob, lck, file, (ndr_push_flags_fn_t)ndr_push_opendb_file);
+       ndr_err = ndr_push_struct_blob(&blob, lck, 
+                                      lp_iconv_convenience(global_loadparm),
+                                      file, (ndr_push_flags_fn_t)ndr_push_opendb_file);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                return ndr_map_error2ntstatus(ndr_err);
        }
index efc1b20ae053e2ce2a161869c9b60faae36725bd..ea623a3d4ac12a920fbbee179731535af481fb13 100644 (file)
@@ -31,6 +31,7 @@
 #include "dsdb/common/flags.h"
 #include "dsdb/common/proto.h"
 #include "libcli/ldap/ldap_ndr.h"
+#include "param/param.h"
 #include "libcli/auth/libcli_auth.h"
 
 /*
@@ -674,7 +675,9 @@ int samdb_msg_add_dom_sid(struct ldb_context *sam_ldb, TALLOC_CTX *mem_ctx, stru
        struct ldb_val v;
        enum ndr_err_code ndr_err;
 
-       ndr_err = ndr_push_struct_blob(&v, mem_ctx, sid,
+       ndr_err = ndr_push_struct_blob(&v, mem_ctx, 
+                                      lp_iconv_convenience(ldb_get_opaque(sam_ldb, "loadparm")),
+                                      sid,
                                       (ndr_push_flags_fn_t)ndr_push_dom_sid);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                return -1;
index c47108559de28a8d259e815c2a03ab131a44d815..8aff1340a5a7513ca0c5a8186b51c64bd527df25 100644 (file)
@@ -28,6 +28,7 @@
 #include "librpc/gen_ndr/ndr_drsblobs.h"
 #include "lib/crypto/crypto.h"
 #include "libcli/auth/libcli_auth.h"
+#include "param/param.h"
 
 static WERROR dsdb_decrypt_attribute_value(TALLOC_CTX *mem_ctx,
                                           const DATA_BLOB *gensec_skey,
@@ -322,7 +323,9 @@ static WERROR dsdb_convert_object(struct ldb_context *ldb,
        whenChanged_s = ldb_timestring(msg, whenChanged_t);
        W_ERROR_HAVE_NO_MEMORY(whenChanged_s);
 
-       ndr_err = ndr_push_struct_blob(&guid_value, msg, &in->object.identifier->guid,
+       ndr_err = ndr_push_struct_blob(&guid_value, msg, 
+                                      lp_iconv_convenience(ldb_get_opaque(ldb, "loadparm")),
+                                      &in->object.identifier->guid,
                                         (ndr_push_flags_fn_t)ndr_push_GUID);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                nt_status = ndr_map_error2ntstatus(ndr_err);
index da5cae1c658461468395d7fc751a86e4b8e39f90..d3beedc689ccb488d1c81f2ef921c19206de0ca9 100644 (file)
@@ -43,6 +43,7 @@
 #include "librpc/gen_ndr/ndr_security.h"
 #include "libcli/security/security.h"
 #include "auth/auth.h"
+#include "param/param.h"
 
 struct oc_context {
 
@@ -273,7 +274,9 @@ static DATA_BLOB *get_sd(struct ldb_module *module, TALLOC_CTX *mem_ctx,
                return NULL;
        }
 
-       ndr_err = ndr_push_struct_blob(linear_sd, mem_ctx, sd,
+       ndr_err = ndr_push_struct_blob(linear_sd, mem_ctx, 
+                                       lp_iconv_convenience(ldb_get_opaque(module->ldb, "loadparm")),
+                                      sd,
                                       (ndr_push_flags_fn_t)ndr_push_security_descriptor);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                return NULL;
index e9d699d59c1168cf412b4be14361b016f2fead43..bf57f5c21ba6194ba685244f06b0e1bc6c9c2f08 100644 (file)
@@ -36,6 +36,7 @@
 #include "includes.h"
 #include "ldb/include/ldb_includes.h"
 #include "librpc/gen_ndr/ndr_misc.h"
+#include "param/param.h"
 
 static struct ldb_message_element *objectguid_find_attribute(const struct ldb_message *msg, const char *name)
 {
@@ -143,7 +144,9 @@ static int objectguid_add(struct ldb_module *module, struct ldb_request *req)
        /* a new GUID */
        guid = GUID_random();
 
-       ndr_err = ndr_push_struct_blob(&v, msg, &guid,
+       ndr_err = ndr_push_struct_blob(&v, msg, 
+                                      lp_iconv_convenience(ldb_get_opaque(module->ldb, "loadparm")),
+                                      &guid,
                                       (ndr_push_flags_fn_t)ndr_push_GUID);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                talloc_free(down_req);
index d139cc23a432c1a6b95cf2950f8f3feefe67ece1..a69459cfefbb028776e40922813cd55e3129da6a 100644 (file)
@@ -913,7 +913,9 @@ static int setup_supplemental_field(struct setup_password_fields_io *io)
                return ret;
        }
 
-       ndr_err = ndr_push_struct_blob(&pkb_blob, io->ac, &pkb,
+       ndr_err = ndr_push_struct_blob(&pkb_blob, io->ac, 
+                                      lp_iconv_convenience(ldb_get_opaque(io->ac->module->ldb, "loadparm")),
+                                      &pkb,
                                       (ndr_push_flags_fn_t)ndr_push_package_PrimaryKerberosBlob);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                NTSTATUS status = ndr_map_error2ntstatus(ndr_err);
@@ -952,7 +954,9 @@ static int setup_supplemental_field(struct setup_password_fields_io *io)
                return ret;
        }
 
-       ndr_err = ndr_push_struct_blob(&pdb_blob, io->ac, &pdb,
+       ndr_err = ndr_push_struct_blob(&pdb_blob, io->ac, 
+                                      lp_iconv_convenience(ldb_get_opaque(io->ac->module->ldb, "loadparm")),
+                                      &pdb,
                                       (ndr_push_flags_fn_t)ndr_push_package_PrimaryWDigestBlob);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                NTSTATUS status = ndr_map_error2ntstatus(ndr_err);
@@ -979,7 +983,9 @@ static int setup_supplemental_field(struct setup_password_fields_io *io)
 
                pcb.cleartext   = io->n.cleartext;
 
-               ndr_err = ndr_push_struct_blob(&pcb_blob, io->ac, &pcb,
+               ndr_err = ndr_push_struct_blob(&pcb_blob, io->ac, 
+                                              lp_iconv_convenience(ldb_get_opaque(io->ac->module->ldb, "loadparm")),
+                                              &pcb,
                                               (ndr_push_flags_fn_t)ndr_push_package_PrimaryCLEARTEXTBlob);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        NTSTATUS status = ndr_map_error2ntstatus(ndr_err);
@@ -1002,7 +1008,9 @@ static int setup_supplemental_field(struct setup_password_fields_io *io)
        /*
         * setup 'Packages' element
         */
-       ndr_err = ndr_push_struct_blob(&pb_blob, io->ac, &pb,
+       ndr_err = ndr_push_struct_blob(&pb_blob, io->ac, 
+                                      lp_iconv_convenience(ldb_get_opaque(io->ac->module->ldb, "loadparm")), 
+                                      &pb,
                                       (ndr_push_flags_fn_t)ndr_push_package_PackagesBlob);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                NTSTATUS status = ndr_map_error2ntstatus(ndr_err);
@@ -1027,7 +1035,9 @@ static int setup_supplemental_field(struct setup_password_fields_io *io)
        scb.sub.num_packages    = num_packages;
        scb.sub.packages        = packages;
 
-       ndr_err = ndr_push_struct_blob(&io->g.supplemental, io->ac, &scb,
+       ndr_err = ndr_push_struct_blob(&io->g.supplemental, io->ac, 
+                                      lp_iconv_convenience(ldb_get_opaque(io->ac->module->ldb, "loadparm")),
+                                      &scb,
                                       (ndr_push_flags_fn_t)ndr_push_supplementalCredentialsBlob);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                NTSTATUS status = ndr_map_error2ntstatus(ndr_err);
index 497ee373dea418fbfed69b0e00831209ea5b2253..87b9302139d7a68f7e903db4a92db35159de502e 100644 (file)
@@ -47,6 +47,7 @@
 #include "librpc/gen_ndr/ndr_misc.h"
 #include "librpc/gen_ndr/ndr_drsuapi.h"
 #include "librpc/gen_ndr/ndr_drsblobs.h"
+#include "param/param.h"
 
 struct replmd_replicated_request {
        struct ldb_module *module;
@@ -518,13 +519,17 @@ static int replmd_add_originating(struct ldb_module *module,
        replmd_replPropertyMetaDataCtr1_sort(&nmd.ctr.ctr1, &rdn_attr->attributeID_id);
 
        /* generated NDR encoded values */
-       ndr_err = ndr_push_struct_blob(&guid_value, msg, &guid,
+       ndr_err = ndr_push_struct_blob(&guid_value, msg, 
+                                      NULL,
+                                      &guid,
                                       (ndr_push_flags_fn_t)ndr_push_GUID);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                ldb_oom(module->ldb);
                return LDB_ERR_OPERATIONS_ERROR;
        }
-       ndr_err = ndr_push_struct_blob(&nmd_value, msg, &nmd,
+       ndr_err = ndr_push_struct_blob(&nmd_value, msg, 
+                                      lp_iconv_convenience(ldb_get_opaque(module->ldb, "loadparm")),
+                                      &nmd,
                                       (ndr_push_flags_fn_t)ndr_push_replPropertyMetaDataBlob);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                talloc_free(down_req);
@@ -773,7 +778,9 @@ static int replmd_replicated_apply_add(struct replmd_replicated_request *ar)
        for (i=0; i < md->ctr.ctr1.count; i++) {
                md->ctr.ctr1.array[i].local_usn = seq_num;
        }
-       ndr_err = ndr_push_struct_blob(&md_value, msg, md,
+       ndr_err = ndr_push_struct_blob(&md_value, msg, 
+                                      lp_iconv_convenience(global_loadparm),
+                                      md,
                                       (ndr_push_flags_fn_t)ndr_push_replPropertyMetaDataBlob);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                NTSTATUS nt_status = ndr_map_error2ntstatus(ndr_err);
@@ -985,7 +992,9 @@ static int replmd_replicated_apply_merge(struct replmd_replicated_request *ar)
        }
 
        /* create the meta data value */
-       ndr_err = ndr_push_struct_blob(&nmd_value, msg, &nmd,
+       ndr_err = ndr_push_struct_blob(&nmd_value, msg, 
+                                      lp_iconv_convenience(global_loadparm),
+                                      &nmd,
                                       (ndr_push_flags_fn_t)ndr_push_replPropertyMetaDataBlob);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                NTSTATUS nt_status = ndr_map_error2ntstatus(ndr_err);
@@ -1350,7 +1359,9 @@ static int replmd_replicated_uptodate_modify(struct replmd_replicated_request *a
        if (!msg) return replmd_replicated_request_werror(ar, WERR_NOMEM);
        msg->dn = ar->sub.search_msg->dn;
 
-       ndr_err = ndr_push_struct_blob(&nuv_value, msg, &nuv,
+       ndr_err = ndr_push_struct_blob(&nuv_value, msg, 
+                                      lp_iconv_convenience(global_loadparm), 
+                                      &nuv,
                                       (ndr_push_flags_fn_t)ndr_push_replUpToDateVectorBlob);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                NTSTATUS nt_status = ndr_map_error2ntstatus(ndr_err);
@@ -1437,7 +1448,9 @@ static int replmd_replicated_uptodate_modify(struct replmd_replicated_request *a
        }
 
        /* we now fill the value which is already attached to ldb_message */
-       ndr_err = ndr_push_struct_blob(nrf_value, msg, &nrf,
+       ndr_err = ndr_push_struct_blob(nrf_value, msg, 
+                                      lp_iconv_convenience(global_loadparm),
+                                      &nrf,
                                       (ndr_push_flags_fn_t)ndr_push_repsFromToBlob);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                NTSTATUS nt_status = ndr_map_error2ntstatus(ndr_err);
index 0d4fead2b5b26d8105878601ab19a0f13e23ef62..c8266a5f4644db8707b27baaaa4f3a39e2a0a4bb 100644 (file)
@@ -187,8 +187,9 @@ static struct ldb_val encode_sid(struct ldb_module *module, TALLOC_CTX *ctx, con
                return out;
        }
 
-       ndr_err = ndr_push_struct_blob(&out, ctx, sid,
-                                      (ndr_push_flags_fn_t)ndr_push_dom_sid);
+       ndr_err = ndr_push_struct_blob(&out, ctx, 
+                                      NULL,
+                                      sid, (ndr_push_flags_fn_t)ndr_push_dom_sid);
        talloc_free(sid);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                return out;
index 3638b917996cfefe2edcd22f0fadbf99b8eb1cde..8a80260a692d50e8d7fa7a15da84aeb2d3c3d65f 100644 (file)
@@ -50,7 +50,7 @@ static bool samldb_msg_add_sid(struct ldb_module *module, struct ldb_message *ms
        struct ldb_val v;
        enum ndr_err_code ndr_err;
 
-       ndr_err = ndr_push_struct_blob(&v, msg, sid,
+       ndr_err = ndr_push_struct_blob(&v, msg, NULL, sid,
                                       (ndr_push_flags_fn_t)ndr_push_dom_sid);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                return false;
index 7efcccc9ffcac8af41a418ee33034705e47cbf42..070ce6ae6974aa202d90bdf5a127deceb2fd1e01 100644 (file)
@@ -49,7 +49,7 @@ static struct ldb_val encode_guid(struct ldb_module *module, TALLOC_CTX *ctx, co
        if (!NT_STATUS_IS_OK(status)) {
                return out;
        }
-       ndr_err = ndr_push_struct_blob(&out, ctx, &guid,
+       ndr_err = ndr_push_struct_blob(&out, ctx, NULL, &guid,
                                       (ndr_push_flags_fn_t)ndr_push_GUID);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                return out;
@@ -93,7 +93,7 @@ static struct ldb_val encode_ns_guid(struct ldb_module *module, TALLOC_CTX *ctx,
        if (!NT_STATUS_IS_OK(status)) {
                return out;
        }
-       ndr_err = ndr_push_struct_blob(&out, ctx, &guid,
+       ndr_err = ndr_push_struct_blob(&out, ctx, NULL, &guid,
                                       (ndr_push_flags_fn_t)ndr_push_GUID);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                return out;
index f15b03c9b47a76a801958a460782456f8d3c49b9..80cd8040e4ab32214453769e2dac1f85741392b1 100644 (file)
@@ -174,7 +174,7 @@ WERROR dsdb_get_oid_mappings_ldb(const struct dsdb_schema *schema,
        pfm.reserved    = 0;
        pfm.ctr.dsdb    = *ctr;
 
-       ndr_err = ndr_push_struct_blob(prefixMap, mem_ctx, &pfm,
+       ndr_err = ndr_push_struct_blob(prefixMap, mem_ctx, lp_iconv_convenience(global_loadparm), &pfm,
                                       (ndr_push_flags_fn_t)ndr_push_prefixMapBlob);
        talloc_free(ctr);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
index a8fe4a3b9db881dffafdf07bbf385fa25512f366..6490e8740f1f803c2247a553701bf1b98fd96f58 100644 (file)
@@ -898,8 +898,7 @@ static WERROR dsdb_syntax_DN_ldb_to_drsuapi(const struct dsdb_schema *schema,
                ZERO_STRUCT(id3);
                id3.dn = (const char *)in->values[i].data;
 
-               ndr_err = ndr_push_struct_blob(&blobs[i], blobs, &id3,
-                                              (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
+               ndr_err = ndr_push_struct_blob(&blobs[i], blobs, lp_iconv_convenience(global_loadparm), &id3, (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        NTSTATUS status = ndr_map_error2ntstatus(ndr_err);
                        return ntstatus_to_werror(status);
@@ -998,7 +997,7 @@ static WERROR dsdb_syntax_DN_BINARY_ldb_to_drsuapi(const struct dsdb_schema *sch
                id3b.dn         = (const char *)in->values[i].data;
                id3b.binary     = data_blob(NULL, 0);
 
-               ndr_err = ndr_push_struct_blob(&blobs[i], blobs, &id3b,
+               ndr_err = ndr_push_struct_blob(&blobs[i], blobs, lp_iconv_convenience(global_loadparm), &id3b,
                                               (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3Binary);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        NTSTATUS status = ndr_map_error2ntstatus(ndr_err);
index 32f96ee7ab3c6293e9f6b84b0e132b871f2c3ac2..9f9b5454b470be21d82588eea250c000ea35358c 100644 (file)
@@ -73,7 +73,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, &logon_info,
+       ndr_err = ndr_push_struct_blob(&pac_out, mem_ctx, lp_iconv_convenience(global_loadparm), &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);
index f8e35056556bacb6907e46754f9ab8c073ac3fb1..30ca88264ac661562d740129f89c89b586774420 100644 (file)
@@ -40,7 +40,7 @@ static int ldif_read_objectSid(struct ldb_context *ldb, void *mem_ctx,
        if (sid == NULL) {
                return -1;
        }
-       ndr_err = ndr_push_struct_blob(out, mem_ctx, sid,
+       ndr_err = ndr_push_struct_blob(out, mem_ctx, NULL, sid,
                                       (ndr_push_flags_fn_t)ndr_push_dom_sid);
        talloc_free(sid);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
@@ -147,7 +147,7 @@ static int ldif_read_objectGUID(struct ldb_context *ldb, void *mem_ctx,
                return -1;
        }
 
-       ndr_err = ndr_push_struct_blob(out, mem_ctx, &guid,
+       ndr_err = ndr_push_struct_blob(out, mem_ctx, NULL, &guid,
                                       (ndr_push_flags_fn_t)ndr_push_GUID);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                return -1;
@@ -252,7 +252,7 @@ static int ldif_read_ntSecurityDescriptor(struct ldb_context *ldb, void *mem_ctx
        if (sd == NULL) {
                return -1;
        }
-       ndr_err = ndr_push_struct_blob(out, mem_ctx, sd,
+       ndr_err = ndr_push_struct_blob(out, mem_ctx, NULL, sd,
                                       (ndr_push_flags_fn_t)ndr_push_security_descriptor);
        talloc_free(sd);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
index 28bd0ad461130f449b16d179992850c9fa8fd448..7d2df182fe2c051535ef41dae926b8eaf6dcaa4a 100644 (file)
@@ -1041,8 +1041,8 @@ static WERROR regf_set_sec_desc(struct hive_key *key,
                     (tdr_pull_fn_t) tdr_pull_nk_block, &root);
 
        /* Push the security descriptor to a blob */
-       if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_struct_blob(&data, regf, sec_desc,
-                            (ndr_push_flags_fn_t)ndr_push_security_descriptor))) {
+       if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_struct_blob(&data, regf, NULL, 
+                                                         sec_desc, (ndr_push_flags_fn_t)ndr_push_security_descriptor))) {
                DEBUG(0, ("Unable to push security descriptor\n"));
                return WERR_GENERAL_FAILURE;
        }
index ab831df8ccb96f4991de29a3dceef7cf6d7531a8..d70cda02ee02c42bcb500a9c4558dae3513709ef 100644 (file)
@@ -38,7 +38,7 @@ NTSTATUS dgram_mailslot_browse_send(struct nbt_dgram_socket *dgmsock,
        DATA_BLOB blob;
        TALLOC_CTX *tmp_ctx = talloc_new(dgmsock);
 
-       ndr_err = ndr_push_struct_blob(&blob, tmp_ctx, request,
+       ndr_err = ndr_push_struct_blob(&blob, tmp_ctx, lp_iconv_convenience(global_loadparm), request,
                                      (ndr_push_flags_fn_t)ndr_push_nbt_browse_packet);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                talloc_free(tmp_ctx);
@@ -66,7 +66,7 @@ NTSTATUS dgram_mailslot_browse_reply(struct nbt_dgram_socket *dgmsock,
        struct nbt_name myname;
        struct socket_address *dest;
 
-       ndr_err = ndr_push_struct_blob(&blob, tmp_ctx, reply,
+       ndr_err = ndr_push_struct_blob(&blob, tmp_ctx, lp_iconv_convenience(global_loadparm), reply,
                                      (ndr_push_flags_fn_t)ndr_push_nbt_browse_packet);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                talloc_free(tmp_ctx);
index 1af252c0bf5ae5ca174922c9f1b3549e0b12131f..cd3ac6630fda5890017d88672e18f23e3396d2ae 100644 (file)
@@ -24,6 +24,7 @@
 #include "lib/util/dlinklist.h"
 #include "libcli/dgram/libdgram.h"
 #include "lib/socket/socket.h"
+#include "param/param.h"
 #include "librpc/gen_ndr/ndr_nbt.h"
 
 
@@ -228,7 +229,7 @@ NTSTATUS nbt_dgram_send(struct nbt_dgram_socket *dgmsock,
        req->dest = dest;
        if (talloc_reference(req, dest) == NULL) goto failed;
 
-       ndr_err = ndr_push_struct_blob(&req->encoded, req, packet,
+       ndr_err = ndr_push_struct_blob(&req->encoded, req, lp_iconv_convenience(global_loadparm), packet,
                                      (ndr_push_flags_fn_t)ndr_push_nbt_dgram_packet);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                status = ndr_map_error2ntstatus(ndr_err);
index 92a66cddfff77db0c0b1d7aab5fa8f1511710dcc..161d48cbbca9907b9f9638a63125b638b31b6806 100644 (file)
@@ -40,7 +40,9 @@ NTSTATUS dgram_mailslot_netlogon_send(struct nbt_dgram_socket *dgmsock,
        DATA_BLOB blob;
        TALLOC_CTX *tmp_ctx = talloc_new(dgmsock);
 
-       ndr_err = ndr_push_struct_blob(&blob, tmp_ctx, request,
+       ndr_err = ndr_push_struct_blob(&blob, tmp_ctx, 
+                                      lp_iconv_convenience(global_loadparm),
+                                      request,
                                      (ndr_push_flags_fn_t)ndr_push_nbt_netlogon_packet);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                talloc_free(tmp_ctx);
@@ -73,7 +75,9 @@ NTSTATUS dgram_mailslot_netlogon_reply(struct nbt_dgram_socket *dgmsock,
        struct nbt_name myname;
        struct socket_address *dest;
 
-       ndr_err = ndr_push_struct_blob(&blob, tmp_ctx, reply,
+       ndr_err = ndr_push_struct_blob(&blob, tmp_ctx, 
+                                      lp_iconv_convenience(global_loadparm),
+                                      reply,
                                      (ndr_push_flags_fn_t)ndr_push_nbt_netlogon_packet);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                talloc_free(tmp_ctx);
index 8cd69176a591365ce27127635446b5c1c13d77f3..bbcfc1b2dc7dc6c60435481b7638f97849ee3dde 100644 (file)
@@ -41,7 +41,8 @@ NTSTATUS dgram_mailslot_ntlogon_send(struct nbt_dgram_socket *dgmsock,
        DATA_BLOB blob;
        TALLOC_CTX *tmp_ctx = talloc_new(dgmsock);
 
-       ndr_err = ndr_push_struct_blob(&blob, tmp_ctx, request,
+       ndr_err = ndr_push_struct_blob(&blob, tmp_ctx, lp_iconv_convenience(global_loadparm), 
+                                      request,
                                      (ndr_push_flags_fn_t)ndr_push_nbt_ntlogon_packet);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                talloc_free(tmp_ctx);
@@ -74,7 +75,7 @@ NTSTATUS dgram_mailslot_ntlogon_reply(struct nbt_dgram_socket *dgmsock,
        struct nbt_name myname;
        struct socket_address *dest;
 
-       ndr_err = ndr_push_struct_blob(&blob, tmp_ctx, reply,
+       ndr_err = ndr_push_struct_blob(&blob, tmp_ctx, lp_iconv_convenience(global_loadparm), reply,
                                      (ndr_push_flags_fn_t)ndr_push_nbt_ntlogon_packet);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                talloc_free(tmp_ctx);
index 468c366c85fc74fa9eb7b0801efb7a9cc5c177cd..fde623bece2879087f652bceaf51ae0b38de9e6d 100644 (file)
@@ -46,7 +46,7 @@ char *ldap_encode_ndr_dom_sid(TALLOC_CTX *mem_ctx, const struct dom_sid *sid)
        DATA_BLOB blob;
        enum ndr_err_code ndr_err;
        char *ret;
-       ndr_err = ndr_push_struct_blob(&blob, mem_ctx, sid,
+       ndr_err = ndr_push_struct_blob(&blob, mem_ctx, NULL, sid,
                                       (ndr_push_flags_fn_t)ndr_push_dom_sid);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                return NULL;
@@ -65,7 +65,7 @@ char *ldap_encode_ndr_GUID(TALLOC_CTX *mem_ctx, struct GUID *guid)
        DATA_BLOB blob;
        enum ndr_err_code ndr_err;
        char *ret;
-       ndr_err = ndr_push_struct_blob(&blob, mem_ctx, guid,
+       ndr_err = ndr_push_struct_blob(&blob, mem_ctx, NULL, guid,
                                       (ndr_push_flags_fn_t)ndr_push_GUID);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                return NULL;
index bdcd012556fc8d30f5692adc1992b9c6e0870616..079d0595de25c9c4e3e03ef3c5e99c8c0bdadee4 100644 (file)
@@ -27,6 +27,7 @@
 #include "librpc/gen_ndr/ndr_nbt.h"
 #include "librpc/gen_ndr/ndr_misc.h"
 #include "system/locale.h"
+#include "param/param.h"
 
 /* don't allow an unlimited number of name components */
 #define MAX_COMPONENTS 10
@@ -384,8 +385,7 @@ _PUBLIC_ NTSTATUS nbt_name_to_blob(TALLOC_CTX *mem_ctx, DATA_BLOB *blob, struct
 {
        enum ndr_err_code ndr_err;
 
-       ndr_err = ndr_push_struct_blob(blob, mem_ctx, name,
-                                      (ndr_push_flags_fn_t)ndr_push_nbt_name);
+       ndr_err = ndr_push_struct_blob(blob, mem_ctx, lp_iconv_convenience(global_loadparm), name, (ndr_push_flags_fn_t)ndr_push_nbt_name);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                return ndr_map_error2ntstatus(ndr_err);
        }
index 743f2b0f19873136a4df5417a54b55727db04c93..3716d409412fabff017a42799071f08bc8cb5e01 100644 (file)
@@ -394,7 +394,9 @@ struct nbt_name_request *nbt_name_request_send(struct nbt_name_socket *nbtsock,
        
        talloc_set_destructor(req, nbt_name_request_destructor);        
 
-       ndr_err = ndr_push_struct_blob(&req->encoded, req, request,
+       ndr_err = ndr_push_struct_blob(&req->encoded, req, 
+                                      lp_iconv_convenience(global_loadparm),
+                                      request,
                                       (ndr_push_flags_fn_t)ndr_push_nbt_name_packet);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) goto failed;
 
@@ -441,7 +443,9 @@ NTSTATUS nbt_name_reply_send(struct nbt_name_socket *nbtsock,
                NDR_PRINT_DEBUG(nbt_name_packet, request);              
        }
 
-       ndr_err = ndr_push_struct_blob(&req->encoded, req, request,
+       ndr_err = ndr_push_struct_blob(&req->encoded, req, 
+                                      lp_iconv_convenience(global_loadparm),
+                                      request,
                                       (ndr_push_flags_fn_t)ndr_push_nbt_name_packet);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                talloc_free(req);
index c34cb9c52f3b673180845ae3ba73c994a0a20616..3b6ca685269fb10c96146e7bed9ef4b3c66319ae 100644 (file)
@@ -276,7 +276,7 @@ static struct smbcli_request *smb_raw_nttrans_create_send(struct smbcli_tree *tr
 
        if (parms->ntcreatex.in.sec_desc) {
                enum ndr_err_code ndr_err;
-               ndr_err = ndr_push_struct_blob(&sd_blob, mem_ctx,
+               ndr_err = ndr_push_struct_blob(&sd_blob, mem_ctx, NULL,
                                               parms->ntcreatex.in.sec_desc,
                                               (ndr_push_flags_fn_t)ndr_push_security_descriptor);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
index 67dadf328701cfcc093b37ca6899ab96150b70d2..a9a1a3547ecf975c7f84cb3b303e15c857b5f494 100644 (file)
@@ -88,7 +88,7 @@ bool smb_raw_setfileinfo_passthru(TALLOC_CTX *mem_ctx,
        case RAW_FILEINFO_SEC_DESC: {
                enum ndr_err_code ndr_err;
 
-               ndr_err = ndr_push_struct_blob(blob, mem_ctx,
+               ndr_err = ndr_push_struct_blob(blob, mem_ctx, NULL,
                                               parms->set_secdesc.in.sd,
                                               (ndr_push_flags_fn_t)ndr_push_security_descriptor);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
index 63b0a60f6c214b90e0625995579bbcf4dea06f68..381df902b40e9a6e1b78ab85bc1ffb560e6fb5c2 100644 (file)
@@ -494,7 +494,7 @@ struct wrepl_request *wrepl_request_send(struct wrepl_socket *wrepl_socket,
        }
 
        wrap.packet = *packet;
-       ndr_err = ndr_push_struct_blob(&blob, req, &wrap,
+       ndr_err = ndr_push_struct_blob(&blob, req, lp_iconv_convenience(global_loadparm), &wrap, 
                                       (ndr_push_flags_fn_t)ndr_push_wrepl_wrap);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                status = ndr_map_error2ntstatus(ndr_err);
index 4d09422becb661bd67d04e17546b0faa95178947..e51a2feadf0ac7e76c3f82e4b89f2657648a7535 100644 (file)
@@ -1785,7 +1785,7 @@ static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s)
                                               NULL);
                if (composite_nomem(v, c)) return;
 
-               ndr_err = ndr_push_struct_blob(&vd[0], vd, v,(ndr_push_flags_fn_t)ndr_push_security_descriptor);
+               ndr_err = ndr_push_struct_blob(&vd[0], vd, NULL, v,(ndr_push_flags_fn_t)ndr_push_security_descriptor);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        c->status = ndr_map_error2ntstatus(ndr_err);
                        if (!composite_is_ok(c)) return;
@@ -1844,7 +1844,7 @@ static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s)
                                                          s->forest.schema_dn_str);
                if (composite_nomem(v[0].dn, c)) return;
 
-               ndr_err = ndr_push_struct_blob(&vd[0], vd, &v[0],
+               ndr_err = ndr_push_struct_blob(&vd[0], vd, NULL, &v[0], 
                                               (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        c->status = ndr_map_error2ntstatus(ndr_err);
@@ -1874,7 +1874,7 @@ static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s)
 
                v = &s->dest_dsa.invocation_id;
 
-               ndr_err = ndr_push_struct_blob(&vd[0], vd, v, (ndr_push_flags_fn_t)ndr_push_GUID);
+               ndr_err = ndr_push_struct_blob(&vd[0], vd, NULL, v, (ndr_push_flags_fn_t)ndr_push_GUID);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        c->status = ndr_map_error2ntstatus(ndr_err);
                        if (!composite_is_ok(c)) return;
@@ -1913,21 +1913,21 @@ static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s)
                v[2].sid                = s->zero_sid;
                v[2].dn                 = s->forest.schema_dn_str;
 
-               ndr_err = ndr_push_struct_blob(&vd[0], vd, &v[0],
+               ndr_err = ndr_push_struct_blob(&vd[0], vd, NULL, &v[0],
                                               (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        c->status = ndr_map_error2ntstatus(ndr_err);
                        if (!composite_is_ok(c)) return;
                }
 
-               ndr_err = ndr_push_struct_blob(&vd[1], vd, &v[1],
+               ndr_err = ndr_push_struct_blob(&vd[1], vd, NULL, &v[1],
                                               (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        c->status = ndr_map_error2ntstatus(ndr_err);
                        if (!composite_is_ok(c)) return;
                }
 
-               ndr_err = ndr_push_struct_blob(&vd[2], vd, &v[2],
+               ndr_err = ndr_push_struct_blob(&vd[2], vd, NULL, &v[2],
                                               (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        c->status = ndr_map_error2ntstatus(ndr_err);
@@ -1969,21 +1969,21 @@ static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s)
                v[2].sid                = s->zero_sid;
                v[2].dn                 = s->forest.schema_dn_str;
 
-               ndr_err = ndr_push_struct_blob(&vd[0], vd, &v[0],
+               ndr_err = ndr_push_struct_blob(&vd[0], vd, NULL, &v[0],
                                               (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        c->status = ndr_map_error2ntstatus(ndr_err);
                        if (!composite_is_ok(c)) return;
                }
 
-               ndr_err = ndr_push_struct_blob(&vd[1], vd, &v[1],
+               ndr_err = ndr_push_struct_blob(&vd[1], vd, NULL, &v[1],
                                               (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        c->status = ndr_map_error2ntstatus(ndr_err);
                        if (!composite_is_ok(c)) return;
                }
 
-               ndr_err = ndr_push_struct_blob(&vd[2], vd, &v[2],
+               ndr_err = ndr_push_struct_blob(&vd[2], vd, NULL, &v[2],
                                               (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        c->status = ndr_map_error2ntstatus(ndr_err);
@@ -2017,7 +2017,7 @@ static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s)
                v[0].sid                = s->zero_sid;
                v[0].dn                 = s->forest.schema_dn_str;
 
-               ndr_err = ndr_push_struct_blob(&vd[0], vd, &v[0],
+               ndr_err = ndr_push_struct_blob(&vd[0], vd, lp_iconv_convenience(global_loadparm), &v[0],
                                               (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        c->status = ndr_map_error2ntstatus(ndr_err);
@@ -2049,7 +2049,7 @@ static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s)
                v[0].sid                = s->zero_sid;
                v[0].dn                 = s->domain.dn_str;
 
-               ndr_err = ndr_push_struct_blob(&vd[0], vd, &v[0],
+               ndr_err = ndr_push_struct_blob(&vd[0], vd, lp_iconv_convenience(global_loadparm), &v[0],
                                               (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        c->status = ndr_map_error2ntstatus(ndr_err);
@@ -2131,7 +2131,7 @@ static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s)
                v[0].sid                = s->zero_sid;
                v[0].dn                 = s->dest_dsa.computer_dn_str;
 
-               ndr_err = ndr_push_struct_blob(&vd[0], vd, &v[0],
+               ndr_err = ndr_push_struct_blob(&vd[0], vd, lp_iconv_convenience(global_loadparm), &v[0],
                                               (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        c->status = ndr_map_error2ntstatus(ndr_err);
index 23cfe630d54a8c73e672f2789b7d1afcf8963ca9..a60b05189b0bcff5f5c3d6ce900219ecb2f370ec 100644 (file)
@@ -168,7 +168,8 @@ static NTSTATUS samsync_ldb_handle_domain(TALLOC_CTX *mem_ctx,
                if (state->samsync_state->domain_guid) {
                        enum ndr_err_code ndr_err;
                        struct ldb_val v;
-                       ndr_err = ndr_push_struct_blob(&v, msg, state->samsync_state->domain_guid,
+                       ndr_err = ndr_push_struct_blob(&v, msg, NULL, 
+                                                      state->samsync_state->domain_guid,
                                                         (ndr_push_flags_fn_t)ndr_push_GUID);
                        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                                *error_string = talloc_asprintf(mem_ctx, "ndr_push of domain GUID failed!");
index 0dafda70860c5b47bc20b9ab3556baef8b4ac399..fc1a5750ddc2cd395c72fb0efba06183e16d4329 100644 (file)
@@ -755,11 +755,10 @@ _PUBLIC_ enum ndr_err_code ndr_pull_union_blob_all(const DATA_BLOB *blob, TALLOC
 /*
   push a struct to a blob using NDR
 */
-_PUBLIC_ enum ndr_err_code ndr_push_struct_blob(DATA_BLOB *blob, TALLOC_CTX *mem_ctx, const void *p,
-                             ndr_push_flags_fn_t fn)
+_PUBLIC_ enum ndr_err_code ndr_push_struct_blob(DATA_BLOB *blob, TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, const void *p, ndr_push_flags_fn_t fn)
 {
        struct ndr_push *ndr;
-       ndr = ndr_push_init_ctx(mem_ctx, lp_iconv_convenience(global_loadparm));
+       ndr = ndr_push_init_ctx(mem_ctx, iconv_convenience);
        NDR_ERR_HAVE_NO_MEMORY(ndr);
 
        NDR_CHECK(fn(ndr, NDR_SCALARS|NDR_BUFFERS, p));
index 4e6586db65d980a16289a6c631b173af56053d9c..f311966422ca355af9afebdea78878eaf2a17acb 100644 (file)
@@ -175,7 +175,7 @@ static WERROR sptr_GetPrintServerData(struct ntptr_GenericHandle *server, TALLOC
                os.build                = dcesrv_common_get_version_build(mem_ctx, server->ntptr->lp_ctx);
                os.extra_string         = "";
 
-               ndr_err = ndr_push_struct_blob(&blob, mem_ctx, &os, (ndr_push_flags_fn_t)ndr_push_spoolss_OSVersion);
+               ndr_err = ndr_push_struct_blob(&blob, mem_ctx, lp_iconv_convenience(global_loadparm), &os, (ndr_push_flags_fn_t)ndr_push_spoolss_OSVersion);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        return WERR_GENERAL_FAILURE;
                }
@@ -195,7 +195,7 @@ static WERROR sptr_GetPrintServerData(struct ntptr_GenericHandle *server, TALLOC
                os_ex.unknown2          = 0;
                os_ex.unknown3          = 0;
 
-               ndr_err = ndr_push_struct_blob(&blob, mem_ctx, &os_ex, (ndr_push_flags_fn_t)ndr_push_spoolss_OSVersionEx);
+               ndr_err = ndr_push_struct_blob(&blob, mem_ctx, lp_iconv_convenience(global_loadparm), &os_ex, (ndr_push_flags_fn_t)ndr_push_spoolss_OSVersionEx);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        return WERR_GENERAL_FAILURE;
                }
index 8bbf2d04b3fd2c8957ce77f133d46d8f1b1e9454..ad0a55da79fadeb1aa27066874d8d1f1ad3be095 100644 (file)
@@ -219,7 +219,7 @@ static NTSTATUS notify_save(struct notify_context *notify)
        tmp_ctx = talloc_new(notify);
        NT_STATUS_HAVE_NO_MEMORY(tmp_ctx);
 
-       ndr_err = ndr_push_struct_blob(&blob, tmp_ctx, notify->array,
+       ndr_err = ndr_push_struct_blob(&blob, tmp_ctx, lp_iconv_convenience(global_loadparm), notify->array,
                                       (ndr_push_flags_fn_t)ndr_push_notify_array);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                talloc_free(tmp_ctx);
@@ -554,8 +554,7 @@ static void notify_send(struct notify_context *notify, struct notify_entry *e,
 
        tmp_ctx = talloc_new(notify);
 
-       ndr_err = ndr_push_struct_blob(&data, tmp_ctx, &ev,
-                                     (ndr_push_flags_fn_t)ndr_push_notify_event);
+       ndr_err = ndr_push_struct_blob(&data, tmp_ctx, lp_iconv_convenience(global_loadparm), &ev, (ndr_push_flags_fn_t)ndr_push_notify_event);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                talloc_free(tmp_ctx);
                return;
index 41b5ad2ebe238e7c28dce6c0bf88ab287046337c..7408f3a3dfbb90f78b2de7f4959293a760cd0453 100644 (file)
@@ -233,7 +233,7 @@ static NTSTATUS odb_push_record(struct odb_lock *lck, struct opendb_file *file)
                return NT_STATUS_OK;
        }
 
-       ndr_err = ndr_push_struct_blob(&blob, lck, file, (ndr_push_flags_fn_t)ndr_push_opendb_file);
+       ndr_err = ndr_push_struct_blob(&blob, lck, lp_iconv_convenience(global_loadparm), file, (ndr_push_flags_fn_t)ndr_push_opendb_file);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                return ndr_map_error2ntstatus(ndr_err);
        }
index f723aad95537974224a38ccf2f5324002a41ade8..c0a04b4099b59cfd1f3c452343118bab466011ed 100644 (file)
@@ -23,6 +23,7 @@
 #include "vfs_posix.h"
 #include "lib/util/unix_privs.h"
 #include "librpc/gen_ndr/ndr_xattr.h"
+#include "param/param.h"
 
 /*
   pull a xattr as a blob
@@ -138,7 +139,7 @@ _PUBLIC_ NTSTATUS pvfs_xattr_ndr_save(struct pvfs_state *pvfs,
        NTSTATUS status;
        enum ndr_err_code ndr_err;
 
-       ndr_err = ndr_push_struct_blob(&blob, mem_ctx, p, (ndr_push_flags_fn_t)push_fn);
+       ndr_err = ndr_push_struct_blob(&blob, mem_ctx, lp_iconv_convenience(global_loadparm), p, (ndr_push_flags_fn_t)push_fn);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                talloc_free(mem_ctx);
                return ndr_map_error2ntstatus(ndr_err);
index 21cddc4d7dada0c5bbb8c8b3e0cdb4bacc0a954c..2b870118ba6cfa154441796d47ebf825133969c5 100644 (file)
@@ -278,7 +278,7 @@ NTSTATUS smbsrv_push_passthru_fsinfo(TALLOC_CTX *mem_ctx,
 
                BLOB_CHECK(smbsrv_blob_grow_data(mem_ctx, blob, 64));
 
-               ndr_err = ndr_push_struct_blob(&guid_blob, mem_ctx,
+               ndr_err = ndr_push_struct_blob(&guid_blob, mem_ctx, NULL, 
                                               &fsinfo->objectid_information.out.guid,
                                               (ndr_push_flags_fn_t)ndr_push_GUID);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
index 34f9df87066abdb92fdb73f5aa81c1745ccea6e3..279da7318581bc1fee983fe604c69141d94282be 100644 (file)
@@ -204,7 +204,7 @@ static NTSTATUS nttrans_query_sec_desc_send(struct nttrans_op *op)
        NT_STATUS_NOT_OK_RETURN(status);
        params = op->trans->out.params.data;
 
-       ndr_err = ndr_push_struct_blob(&op->trans->out.data, op,
+       ndr_err = ndr_push_struct_blob(&op->trans->out.data, op, NULL,
                                       io->query_secdesc.out.sd,
                                       (ndr_push_flags_fn_t)ndr_push_security_descriptor);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
index 8715279dad9f85870f172830d0840997e5e4b37d..bbd784bf8fa1688a3f939dc7a8d9c414e3a1363e 100644 (file)
@@ -145,7 +145,7 @@ static NTSTATUS smb2srv_getinfo_security_send(struct smb2srv_getinfo_op *op)
        union smb_fileinfo *io = talloc_get_type(op->io_ptr, union smb_fileinfo);
        enum ndr_err_code ndr_err;
 
-       ndr_err = ndr_push_struct_blob(&op->info->out.blob, op->req,
+       ndr_err = ndr_push_struct_blob(&op->info->out.blob, op->req, NULL,
                                       io->query_secdesc.out.sd,
                                       (ndr_push_flags_fn_t)ndr_push_security_descriptor);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
index 6dde3ed6423039b22cd61281c0d7ca308f05099a..71965397f6081506e627ea6a90bd871c355c11c6 100644 (file)
@@ -82,7 +82,7 @@ static void fill_blob_handle(DATA_BLOB *blob, TALLOC_CTX *mem_ctx,
                return;
        }
 
-       ndr_push_struct_blob(&b2, mem_ctx, handle, (ndr_push_flags_fn_t)ndr_push_policy_handle);
+       ndr_push_struct_blob(&b2, mem_ctx, NULL, handle, (ndr_push_flags_fn_t)ndr_push_policy_handle);
 
        memcpy(blob->data, b2.data, 20);
 }
index 45954f2c7113a1fb337178edc229f1e7115799d3..72435f8054726058254006d03771ea809cdc96bf 100644 (file)
@@ -156,7 +156,7 @@ static bool test_CreateKey_sd(struct dcerpc_pipe *p,
                                        NULL);
 
        torture_assert_ndr_success(tctx,
-               ndr_push_struct_blob(&sdblob, tctx, sd,
+               ndr_push_struct_blob(&sdblob, tctx, NULL, sd,
                                     (ndr_push_flags_fn_t)ndr_push_security_descriptor),
                                     "Failed to push security_descriptor ?!\n");
 
@@ -265,7 +265,7 @@ static bool _test_SetKeySecurity(struct dcerpc_pipe *p,
        }
 
        torture_assert_ndr_success(tctx,
-               ndr_push_struct_blob(&sdblob, tctx, sd,
+               ndr_push_struct_blob(&sdblob, tctx, NULL, sd,
                                     (ndr_push_flags_fn_t)ndr_push_security_descriptor),
                                     "push_security_descriptor failed");
 
index c8e81e09f2bb0341f335e07212bf819c75abc759..a34f3fbdd0a8fe6558f697b8dafa05b8c707d2b2 100644 (file)
@@ -143,7 +143,8 @@ static void pam_auth_crap_recv_logon(struct composite_context *ctx)
        if (!composite_is_ok(state->ctx)) return;
 
        ndr_err = ndr_push_struct_blob(
-               &tmp_blob, state, state->req->out.validation.sam3,
+               &tmp_blob, state, lp_iconv_convenience(global_loadparm), 
+               state->req->out.validation.sam3,
                (ndr_push_flags_fn_t)ndr_push_netr_SamInfo3);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                state->ctx->status = ndr_map_error2ntstatus(ndr_err);
index 4d834a6a5ac4bb2142a36642b148817f3143f0cf..f9a2e30ed70fd01cf943fb6fc287b29a0c35e6db 100644 (file)
@@ -88,7 +88,9 @@ static NTSTATUS wreplsrv_recv_request(void *private, DATA_BLOB blob)
 
        /* and now encode the reply */
        packet_out_wrap.packet = call->rep_packet;
-       ndr_err = ndr_push_struct_blob(&packet_out_blob, call, &packet_out_wrap,
+       ndr_err = ndr_push_struct_blob(&packet_out_blob, call, 
+                                      lp_iconv_convenience(global_loadparm),
+                                      &packet_out_wrap,
                                      (ndr_push_flags_fn_t)ndr_push_wrepl_wrap);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                return ndr_map_error2ntstatus(ndr_err);