r26639: librpc: Pass iconv convenience on from RPC connection to NDR library, so...
[sfrench/samba-autobuild/.git] / source4 / libcli / raw / rawfileinfo.c
index 8481995c1a06b4a18bd34d42dd3e478ee6c65f99..ed5475e9265c261acc2cc7f8be84f2788f6132e6 100644 (file)
@@ -22,6 +22,7 @@
 #include "includes.h"
 #include "libcli/raw/libcliraw.h"
 #include "librpc/gen_ndr/ndr_security.h"
+#include "param/param.h"
 
 /* local macros to make the code more readable */
 #define FINFO_CHECK_MIN_SIZE(size) if (blob->length < (size)) { \
@@ -61,7 +62,9 @@ NTSTATUS smbcli_parse_stream_info(DATA_BLOB blob, TALLOC_CTX *mem_ctx,
                if (nlen > blob.length - (ofs + 24)) {
                        return NT_STATUS_INFO_LENGTH_MISMATCH;
                }
-               size = convert_string_talloc(io->streams, CH_UTF16, CH_UNIX,
+               size = convert_string_talloc(io->streams, 
+                                            lp_iconv_convenience(global_loadparm),
+                                            CH_UTF16, CH_UNIX,
                                             blob.data+ofs+24, nlen, &vstr);
                if (size == -1) {
                        return NT_STATUS_ILLEGAL_CHARACTER;
@@ -245,15 +248,17 @@ NTSTATUS smb_raw_fileinfo_passthru_parse(const DATA_BLOB *blob, TALLOC_CTX *mem_
                return NT_STATUS_OK;
 
        case RAW_FILEINFO_SEC_DESC: {
-               NTSTATUS status;
+               enum ndr_err_code ndr_err;
 
                parms->query_secdesc.out.sd = talloc(mem_ctx, struct security_descriptor);
                NT_STATUS_HAVE_NO_MEMORY(parms->query_secdesc.out.sd);
 
-               status = ndr_pull_struct_blob(blob, mem_ctx,
-                                             parms->query_secdesc.out.sd,
-                                             (ndr_pull_flags_fn_t)ndr_pull_security_descriptor);
-               NT_STATUS_NOT_OK_RETURN(status);
+               ndr_err = ndr_pull_struct_blob(blob, mem_ctx, NULL, 
+                                              parms->query_secdesc.out.sd,
+                                              (ndr_pull_flags_fn_t)ndr_pull_security_descriptor);
+               if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+                       return ndr_map_error2ntstatus(ndr_err);
+               }
 
                return NT_STATUS_OK;
        }