svcctl: use offered/needed for buffer sizes as in spoolss.
[ira/wip.git] / source3 / rpc_server / srv_svcctl_nt.c
index 6aafd5ab2cfcae7ac3a039720f432ae2209f635b..ddfe0df10b9f1ff2ee67776d2e054d6527299a5e 100644 (file)
@@ -444,7 +444,7 @@ WERROR _svcctl_EnumServicesStatusW(pipes_struct *p,
 
        buffer_size += buffer_size % 4;
 
-       if (buffer_size > r->in.buf_size ) {
+       if (buffer_size > r->in.offered) {
                num_services = 0;
                result = WERR_MORE_DATA;
        }
@@ -466,12 +466,12 @@ WERROR _svcctl_EnumServicesStatusW(pipes_struct *p,
                }
 
                blob = ndr_push_blob(ndr);
-               if (blob.length >= r->in.buf_size) {
-                       memcpy(r->out.service, blob.data, r->in.buf_size);
+               if (blob.length >= r->in.offered) {
+                       memcpy(r->out.service, blob.data, r->in.offered);
                }
        }
 
-       *r->out.bytes_needed            = (buffer_size > r->in.buf_size) ? buffer_size : r->in.buf_size;
+       *r->out.needed                  = (buffer_size > r->in.offered) ? buffer_size : r->in.offered;
        *r->out.services_returned       = (uint32)num_services;
        *r->out.resume_handle           = 0x0;
 
@@ -552,7 +552,7 @@ WERROR _svcctl_EnumDependentServicesW(pipes_struct *p,
           incoming buffer size (even in the case of failure */
        /* this is done in the autogenerated server already - gd */
 
-       *r->out.bytes_needed = r->in.buf_size;
+       *r->out.needed = r->in.offered;
 
        /* no dependent services...basically a stub function */
        *r->out.services_returned = 0;
@@ -580,7 +580,7 @@ WERROR _svcctl_QueryServiceStatusEx(pipes_struct *p,
 
        /* we have to set the outgoing buffer size to the same as the
           incoming buffer size (even in the case of failure) */
-       *r->out.bytes_needed = r->in.buf_size;
+       *r->out.needed = r->in.offered;
 
        switch ( r->in.info_level ) {
                case SVC_STATUS_PROCESS_INFO:
@@ -612,9 +612,9 @@ WERROR _svcctl_QueryServiceStatusEx(pipes_struct *p,
 
 
         buffer_size += buffer_size % 4;
-       *r->out.bytes_needed = (buffer_size > r->in.buf_size) ? buffer_size : r->in.buf_size;
+       *r->out.needed = (buffer_size > r->in.offered) ? buffer_size : r->in.offered;
 
-        if (buffer_size > r->in.buf_size ) {
+        if (buffer_size > r->in.offered ) {
                 return WERR_INSUFFICIENT_BUFFER;
        }
 
@@ -697,7 +697,7 @@ WERROR _svcctl_QueryServiceConfigW(pipes_struct *p,
        /* we have to set the outgoing buffer size to the same as the
           incoming buffer size (even in the case of failure */
 
-       *r->out.bytes_needed = r->in.buf_size;
+       *r->out.needed = r->in.offered;
 
        wresult = fill_svc_config( p->mem_ctx, info->name, r->out.query,
                                   p->server_info->ptok);
@@ -705,9 +705,9 @@ WERROR _svcctl_QueryServiceConfigW(pipes_struct *p,
                return wresult;
 
        buffer_size = ndr_size_QUERY_SERVICE_CONFIG(r->out.query, NULL, 0);
-       *r->out.bytes_needed = (buffer_size > r->in.buf_size) ? buffer_size : r->in.buf_size;
+       *r->out.needed = (buffer_size > r->in.offered) ? buffer_size : r->in.offered;
 
-        if (buffer_size > r->in.buf_size ) {
+        if (buffer_size > r->in.offered ) {
                ZERO_STRUCTP(r->out.query);
                 return WERR_INSUFFICIENT_BUFFER;
        }
@@ -735,7 +735,7 @@ WERROR _svcctl_QueryServiceConfig2W(pipes_struct *p,
 
        /* we have to set the outgoing buffer size to the same as the
           incoming buffer size (even in the case of failure */
-       *r->out.bytes_needed = r->in.buf_size;
+       *r->out.needed = r->in.offered;
 
        switch ( r->in.info_level ) {
        case SERVICE_CONFIG_DESCRIPTION:
@@ -792,9 +792,9 @@ WERROR _svcctl_QueryServiceConfig2W(pipes_struct *p,
        }
 
        buffer_size += buffer_size % 4;
-       *r->out.bytes_needed = (buffer_size > r->in.buf_size) ? buffer_size : r->in.buf_size;
+       *r->out.needed = (buffer_size > r->in.offered) ? buffer_size : r->in.offered;
 
-        if (buffer_size > r->in.buf_size )
+        if (buffer_size > r->in.offered)
                 return WERR_INSUFFICIENT_BUFFER;
 
        return WERR_OK;