s3-spoolss: fix enumprinter key client and server.
[ira/wip.git] / source3 / rpc_server / srv_spoolss_nt.c
index 1e66c7c021cb051768bd2ab06e2ea372ef22c290..0028ec01880711fedb226ec45501d2833a09f46b 100644 (file)
@@ -8786,12 +8786,20 @@ WERROR _spoolss_EnumPrinterKey(pipes_struct *p,
                goto done;
        }
 
                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 (!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",
        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;
        }
 
                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.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:
        }
 
  done: