s3-spoolss: simplify _spoolss_EnumPrinterKey a little more.
authorGünther Deschner <gd@samba.org>
Thu, 26 Nov 2009 18:01:54 +0000 (19:01 +0100)
committerGünther Deschner <gd@samba.org>
Fri, 27 Nov 2009 17:31:13 +0000 (18:31 +0100)
Guenther

source3/rpc_server/srv_spoolss_nt.c

index c704418334c52fa497d6211de3cf14f5bbe4a7d0..8d7973d13e53cd9661ac8c43659190ca71bcd4d8 100644 (file)
@@ -9125,10 +9125,6 @@ WERROR _spoolss_EnumPrinterKey(pipes_struct *p,
                goto done;
        }
 
-       /* two byte termination (a multisz) */
-
-       *r->out.needed = 2;
-
        array = talloc_zero_array(r->out.key_buffer, const char *, num_keys + 1);
        if (!array) {
                result = WERR_NOMEM;
@@ -9145,23 +9141,19 @@ WERROR _spoolss_EnumPrinterKey(pipes_struct *p,
                        result = WERR_NOMEM;
                        goto done;
                }
-
-               *r->out.needed += strlen_m_term(keynames[i]) * 2;
-       }
-
-       if (r->in.offered < *r->out.needed) {
-               result = WERR_MORE_DATA;
-               goto done;
        }
 
-       result = WERR_OK;
-
        if (!push_reg_multi_sz(p->mem_ctx, &blob, array)) {
                result = WERR_NOMEM;
                goto done;
        }
 
-       if (r->in.offered >= blob.length) {
+       *r->out.needed = blob.length;
+
+       if (r->in.offered < *r->out.needed) {
+               result = WERR_MORE_DATA;
+       } else {
+               result = WERR_OK;
                memcpy(r->out.key_buffer, blob.data, blob.length);
        }