summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2009-12-02 14:25:31 +0100
committerGünther Deschner <gd@samba.org>2009-12-02 14:56:17 +0100
commit5f60855ba2eb822dcb867378ff09278c42931b89 (patch)
treee1d8ba7df8711f464e3c61a4adc7f41a7f146abe /source3
parent292af4fc046ff39ebd3ec853c402dc267a863fa6 (diff)
downloadsamba-5f60855ba2eb822dcb867378ff09278c42931b89.tar.gz
samba-5f60855ba2eb822dcb867378ff09278c42931b89.tar.bz2
samba-5f60855ba2eb822dcb867378ff09278c42931b89.zip
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
Diffstat (limited to 'source3')
-rw-r--r--source3/rpc_client/cli_spoolss.c24
-rw-r--r--source3/rpc_server/srv_spoolss_nt.c2
2 files changed, 5 insertions, 21 deletions
diff --git a/source3/rpc_client/cli_spoolss.c b/source3/rpc_client/cli_spoolss.c
index a4622d07cf..047cb709ac 100644
--- a/source3/rpc_client/cli_spoolss.c
+++ b/source3/rpc_client/cli_spoolss.c
@@ -810,44 +810,28 @@ WERROR rpccli_spoolss_enumprinterkey(struct rpc_pipe_client *cli,
NTSTATUS status;
WERROR werror;
uint32_t needed;
- uint16_t *buffer = NULL;
-
- *key_buffer = NULL;
-
- if (offered) {
- buffer = talloc_array(mem_ctx, uint16_t, offered/2);
- W_ERROR_HAVE_NO_MEMORY(buffer);
- }
+ struct spoolss_StringArray2 _key_buffer;
status = rpccli_spoolss_EnumPrinterKey(cli, mem_ctx,
handle,
key_name,
- buffer,
+ &_key_buffer,
offered,
&needed,
&werror);
if (W_ERROR_EQUAL(werror, WERR_MORE_DATA)) {
offered = needed;
- buffer = talloc_realloc(mem_ctx, buffer, uint16_t, needed/2);
- W_ERROR_HAVE_NO_MEMORY(buffer);
status = rpccli_spoolss_EnumPrinterKey(cli, mem_ctx,
handle,
key_name,
- buffer,
+ &_key_buffer,
offered,
&needed,
&werror);
}
- if (W_ERROR_IS_OK(werror)) {
- const char **array;
- DATA_BLOB blob = data_blob_const((uint8_t *)buffer, offered);
- if (!pull_reg_multi_sz(mem_ctx, &blob, &array)) {
- return WERR_NOMEM;
- }
- *key_buffer = array;
- }
+ *key_buffer = _key_buffer.string;
return werror;
}
diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c
index d74204800a..4a3f07f849 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -9157,7 +9157,7 @@ WERROR _spoolss_EnumPrinterKey(pipes_struct *p,
result = WERR_MORE_DATA;
} else {
result = WERR_OK;
- memcpy(r->out.key_buffer, blob.data, blob.length);
+ r->out.key_buffer->string = array;
}
done: