diff options
author | Günther Deschner <gd@samba.org> | 2009-12-10 14:20:22 +0100 |
---|---|---|
committer | Günther Deschner <gd@samba.org> | 2009-12-10 17:48:50 +0100 |
commit | f20effc437970d826c5bd4f047ff47e23e7a1a73 (patch) | |
tree | 0c1f5c0efb90f29ac5b5572f154a819477c83392 /source3 | |
parent | fa413d167bc3ea9aff3dcff97152ef07a1173939 (diff) | |
download | samba-f20effc437970d826c5bd4f047ff47e23e7a1a73.tar.gz samba-f20effc437970d826c5bd4f047ff47e23e7a1a73.tar.xz samba-f20effc437970d826c5bd4f047ff47e23e7a1a73.zip |
s3-spoolss: fix enumprinter key client and server.
Guenther
Diffstat (limited to 'source3')
-rw-r--r-- | source3/rpc_client/cli_spoolss.c | 7 | ||||
-rw-r--r-- | source3/rpc_server/srv_spoolss_nt.c | 13 |
2 files changed, 16 insertions, 4 deletions
diff --git a/source3/rpc_client/cli_spoolss.c b/source3/rpc_client/cli_spoolss.c index 047cb709ac..d0781a0e65 100644 --- a/source3/rpc_client/cli_spoolss.c +++ b/source3/rpc_client/cli_spoolss.c @@ -810,11 +810,13 @@ WERROR rpccli_spoolss_enumprinterkey(struct rpc_pipe_client *cli, NTSTATUS status; WERROR werror; uint32_t needed; - struct spoolss_StringArray2 _key_buffer; + union spoolss_KeyNames _key_buffer; + uint32_t _ndr_size; status = rpccli_spoolss_EnumPrinterKey(cli, mem_ctx, handle, key_name, + &_ndr_size, &_key_buffer, offered, &needed, @@ -825,13 +827,14 @@ WERROR rpccli_spoolss_enumprinterkey(struct rpc_pipe_client *cli, status = rpccli_spoolss_EnumPrinterKey(cli, mem_ctx, handle, key_name, + &_ndr_size, &_key_buffer, offered, &needed, &werror); } - *key_buffer = _key_buffer.string; + *key_buffer = _key_buffer.string_array; return werror; } diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 1e66c7c021..0028ec0188 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -8786,12 +8786,20 @@ WERROR _spoolss_EnumPrinterKey(pipes_struct *p, goto done; } - array = talloc_zero_array(r->out.key_buffer, const char *, num_keys + 1); + array = talloc_zero_array(r->out.key_buffer, const char *, num_keys + 2); if (!array) { result = WERR_NOMEM; goto done; } + if (!num_keys) { + array[0] = talloc_strdup(array, ""); + if (!array[0]) { + result = WERR_NOMEM; + goto done; + } + } + for (i=0; i < num_keys; i++) { DEBUG(10,("_spoolss_EnumPrinterKey: adding keyname: %s\n", @@ -8809,13 +8817,14 @@ WERROR _spoolss_EnumPrinterKey(pipes_struct *p, goto done; } + *r->out._ndr_size = r->in.offered / 2; *r->out.needed = blob.length; if (r->in.offered < *r->out.needed) { result = WERR_MORE_DATA; } else { result = WERR_OK; - r->out.key_buffer->string = array; + r->out.key_buffer->string_array = array; } done: |