diff options
author | Günther Deschner <gd@samba.org> | 2009-12-02 14:25:31 +0100 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2009-12-08 09:15:24 +0100 |
commit | cfd6bec042faec6454a93b9a43232b75ed473566 (patch) | |
tree | 36d6e88f65cdc752e8baaba1781ba8c74053d15e /source4 | |
parent | ad0be569c4b4f81766e9c3c96acdbd111908c8e8 (diff) | |
download | samba-cfd6bec042faec6454a93b9a43232b75ed473566.tar.gz |
samba-spoolss: use spoolss_StringArray2 in spoolss_EnumPrinterKey.
This should finally resolve the endian issues we were seeing on sparc and is
much cleaner for spoolss clients and servers.
Guenther
(cherry picked from commit 5f60855ba2eb822dcb867378ff09278c42931b89)
(cherry picked from commit 91e9afbcd65500a37f947442955d9ca3e080982e)
Diffstat (limited to 'source4')
-rw-r--r-- | source4/torture/rpc/spoolss.c | 19 | ||||
-rw-r--r-- | source4/torture/rpc/spoolss_win.c | 19 |
2 files changed, 6 insertions, 32 deletions
diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c index 396ed75d251..e341b713072 100644 --- a/source4/torture/rpc/spoolss.c +++ b/source4/torture/rpc/spoolss.c @@ -3043,44 +3043,31 @@ bool test_printer_keys(struct torture_context *tctx, struct dcerpc_pipe *p, struct policy_handle *handle) { - DATA_BLOB blob; const char **key_array = NULL; int i; { struct spoolss_EnumPrinterKey r; uint32_t needed; - uint16_t *key_buffer = talloc_zero_array(tctx, uint16_t, 0); + struct spoolss_StringArray2 key_buffer; r.in.handle = handle; r.in.key_name = ""; r.in.offered = 0; - r.out.key_buffer = key_buffer; + r.out.key_buffer = &key_buffer; r.out.needed = &needed; torture_assert_ntstatus_ok(tctx, dcerpc_spoolss_EnumPrinterKey(p, tctx, &r), "failed to call EnumPrinterKey"); if (W_ERROR_EQUAL(r.out.result, WERR_MORE_DATA)) { r.in.offered = needed; - key_buffer = talloc_zero_array(tctx, uint16_t, needed/2); - r.out.key_buffer = key_buffer; torture_assert_ntstatus_ok(tctx, dcerpc_spoolss_EnumPrinterKey(p, tctx, &r), "failed to call EnumPrinterKey"); } torture_assert_werr_ok(tctx, r.out.result, "failed to call EnumPrinterKey"); - blob = data_blob_const(key_buffer, needed); - } - - { - union winreg_Data data; - enum ndr_err_code ndr_err; - ndr_err = ndr_pull_union_blob(&blob, tctx, lp_iconv_convenience(tctx->lp_ctx), - &data, REG_MULTI_SZ, - (ndr_pull_flags_fn_t)ndr_pull_winreg_Data); - torture_assert_ndr_success(tctx, ndr_err, "failed to pull REG_MULTI_SZ"); - key_array = data.string_array; + key_array = key_buffer.string; } for (i=0; key_array[i]; i++) { diff --git a/source4/torture/rpc/spoolss_win.c b/source4/torture/rpc/spoolss_win.c index df1a47d7ace..5439d9d57e9 100644 --- a/source4/torture/rpc/spoolss_win.c +++ b/source4/torture/rpc/spoolss_win.c @@ -386,17 +386,15 @@ static bool test_EnumPrinterKey(struct torture_context *tctx, NTSTATUS status; struct spoolss_EnumPrinterKey epk; uint32_t needed = 0; - uint16_t *key_buffer; + struct spoolss_StringArray2 key_buffer; torture_comment(tctx, "Testing EnumPrinterKey(%s)\n", key); - key_buffer = talloc_zero_array(tctx, uint16_t, 0); - epk.in.handle = handle; epk.in.key_name = talloc_strdup(tctx, key); epk.in.offered = 0; epk.out.needed = &needed; - epk.out.key_buffer = key_buffer; + epk.out.key_buffer = &key_buffer; status = dcerpc_spoolss_EnumPrinterKey(p, tctx, &epk); torture_assert_ntstatus_ok(tctx, status, "EnumPrinterKey failed"); @@ -404,8 +402,6 @@ static bool test_EnumPrinterKey(struct torture_context *tctx, if (W_ERROR_EQUAL(epk.out.result, WERR_MORE_DATA)) { epk.in.offered = needed; - key_buffer = talloc_zero_array(tctx, uint16_t, needed/2); - epk.out.key_buffer = key_buffer; status = dcerpc_spoolss_EnumPrinterKey(p, tctx, &epk); torture_assert_ntstatus_ok(tctx, status, "EnumPrinterKey failed"); @@ -413,16 +409,7 @@ static bool test_EnumPrinterKey(struct torture_context *tctx, torture_assert_werr_ok(tctx, epk.out.result, "EnumPrinterKey failed"); - { - union winreg_Data data; - enum ndr_err_code ndr_err; - DATA_BLOB blob = data_blob_const(key_buffer, needed); - ndr_err = ndr_pull_union_blob(&blob, tctx, lp_iconv_convenience(tctx->lp_ctx), - &data, REG_MULTI_SZ, - (ndr_pull_flags_fn_t)ndr_pull_winreg_Data); - torture_assert_ndr_success(tctx, ndr_err, "failed to pull REG_MULTI_SZ"); - ctx->printer_keys = data.string_array; - } + ctx->printer_keys = key_buffer.string; return true; } |