s3-spoolss: fixes for _spoolss_EnumPrinterKey client and server.
authorGünther Deschner <gd@samba.org>
Tue, 24 Nov 2009 14:22:04 +0000 (15:22 +0100)
committerGünther Deschner <gd@samba.org>
Tue, 24 Nov 2009 14:49:35 +0000 (15:49 +0100)
Thanks Metze for review!

Guenther

source3/rpc_client/cli_spoolss.c
source3/rpc_server/srv_spoolss_nt.c

index 2dba103..6d6d5df 100644 (file)
@@ -815,7 +815,7 @@ WERROR rpccli_spoolss_enumprinterkey(struct rpc_pipe_client *cli,
        *key_buffer = NULL;
 
        if (offered) {
-               buffer = talloc_array(mem_ctx, uint16_t, offered);
+               buffer = talloc_array(mem_ctx, uint16_t, offered/2);
                W_ERROR_HAVE_NO_MEMORY(buffer);
        }
 
@@ -829,7 +829,7 @@ WERROR rpccli_spoolss_enumprinterkey(struct rpc_pipe_client *cli,
 
        if (W_ERROR_EQUAL(werror, WERR_MORE_DATA)) {
                offered = needed;
-               buffer = talloc_realloc(mem_ctx, buffer, uint16_t, 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,
index 072090b..703dca1 100644 (file)
@@ -9203,7 +9203,7 @@ WERROR _spoolss_EnumPrinterKey(pipes_struct *p,
                goto done;
        }
 
-       if (r->in.offered == blob.length) {
+       if (r->in.offered >= blob.length) {
                memcpy(r->out.key_buffer, blob.data, blob.length);
        }