diff options
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: |