Re-run make idl.
authorGünther Deschner <gd@samba.org>
Thu, 20 Mar 2008 00:35:58 +0000 (01:35 +0100)
committerGünther Deschner <gd@samba.org>
Thu, 20 Mar 2008 00:35:58 +0000 (01:35 +0100)
Guenther
(This used to be commit fe7203090c0c51e4561a3b5ce0d5d131d280ba8e)

source3/librpc/gen_ndr/cli_svcctl.c
source3/librpc/gen_ndr/cli_svcctl.h
source3/librpc/gen_ndr/ndr_svcctl.c
source3/librpc/gen_ndr/srv_svcctl.c
source3/librpc/gen_ndr/svcctl.h

index b8f18afe1c037fa8eaafbc0545b93e0f33df51c1..1d3bc57c49c77ae20511ff6eb8350258188c2f12 100644 (file)
@@ -661,7 +661,7 @@ NTSTATUS rpccli_svcctl_EnumDependentServicesW(struct rpc_pipe_client *cli,
                                              TALLOC_CTX *mem_ctx,
                                              struct policy_handle *service,
                                              uint32_t state,
-                                             struct ENUM_SERVICE_STATUS *service_status,
+                                             uint8_t *service_status,
                                              uint32_t buf_size,
                                              uint32_t *bytes_needed,
                                              uint32_t *services_returned,
@@ -699,9 +699,7 @@ NTSTATUS rpccli_svcctl_EnumDependentServicesW(struct rpc_pipe_client *cli,
        }
 
        /* Return variables */
-       if (service_status && r.out.service_status) {
-               *service_status = *r.out.service_status;
-       }
+       memcpy(service_status, r.out.service_status, r.in.buf_size);
        *bytes_needed = *r.out.bytes_needed;
        *services_returned = *r.out.services_returned;
 
index 7c625191875d85882c0b3a38db26c880eb29bc50..5f724ed09ed8e7736debd4d39ce4f160a320c653 100644 (file)
@@ -94,7 +94,7 @@ NTSTATUS rpccli_svcctl_EnumDependentServicesW(struct rpc_pipe_client *cli,
                                              TALLOC_CTX *mem_ctx,
                                              struct policy_handle *service,
                                              uint32_t state,
-                                             struct ENUM_SERVICE_STATUS *service_status,
+                                             uint8_t *service_status,
                                              uint32_t buf_size,
                                              uint32_t *bytes_needed,
                                              uint32_t *services_returned,
index 16e0416288921f2bcb13c2a0c63298030f30cb43..f7e787415a8b365e405d335047c8f4e218413894 100644 (file)
@@ -1693,10 +1693,11 @@ static enum ndr_err_code ndr_push_svcctl_EnumDependentServicesW(struct ndr_push
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
        }
        if (flags & NDR_OUT) {
-               NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.service_status));
-               if (r->out.service_status) {
-                       NDR_CHECK(ndr_push_ENUM_SERVICE_STATUS(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.service_status));
+               if (r->out.service_status == NULL) {
+                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
+               NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.service_status, r->in.buf_size));
                if (r->out.bytes_needed == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
@@ -1712,9 +1713,7 @@ static enum ndr_err_code ndr_push_svcctl_EnumDependentServicesW(struct ndr_push
 
 static enum ndr_err_code ndr_pull_svcctl_EnumDependentServicesW(struct ndr_pull *ndr, int flags, struct svcctl_EnumDependentServicesW *r)
 {
-       uint32_t _ptr_service_status;
        TALLOC_CTX *_mem_save_service_0;
-       TALLOC_CTX *_mem_save_service_status_0;
        TALLOC_CTX *_mem_save_bytes_needed_0;
        TALLOC_CTX *_mem_save_services_returned_0;
        if (flags & NDR_IN) {
@@ -1729,30 +1728,31 @@ static enum ndr_err_code ndr_pull_svcctl_EnumDependentServicesW(struct ndr_pull
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_service_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.state));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buf_size));
+               if (r->in.buf_size < 0 || r->in.buf_size > 0x40000) {
+                       return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
+               }
+               NDR_PULL_ALLOC_N(ndr, r->out.service_status, r->in.buf_size);
+               memset(r->out.service_status, 0, (r->in.buf_size) * sizeof(*r->out.service_status));
                NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
                ZERO_STRUCTP(r->out.bytes_needed);
                NDR_PULL_ALLOC(ndr, r->out.services_returned);
                ZERO_STRUCTP(r->out.services_returned);
        }
        if (flags & NDR_OUT) {
-               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_service_status));
-               if (_ptr_service_status) {
-                       NDR_PULL_ALLOC(ndr, r->out.service_status);
-               } else {
-                       r->out.service_status = NULL;
-               }
-               if (r->out.service_status) {
-                       _mem_save_service_status_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                       NDR_PULL_SET_MEM_CTX(ndr, r->out.service_status, 0);
-                       NDR_CHECK(ndr_pull_ENUM_SERVICE_STATUS(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.service_status));
-                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_service_status_0, 0);
+               NDR_CHECK(ndr_pull_array_size(ndr, &r->out.service_status));
+               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+                       NDR_PULL_ALLOC_N(ndr, r->out.service_status, ndr_get_array_size(ndr, &r->out.service_status));
                }
+               NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.service_status, ndr_get_array_size(ndr, &r->out.service_status)));
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
                        NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
                }
                _mem_save_bytes_needed_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.bytes_needed, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.bytes_needed));
+               if (*r->out.bytes_needed < 0 || *r->out.bytes_needed > 0x40000) {
+                       return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
+               }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_bytes_needed_0, LIBNDR_FLAG_REF_ALLOC);
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
                        NDR_PULL_ALLOC(ndr, r->out.services_returned);
@@ -1760,8 +1760,14 @@ static enum ndr_err_code ndr_pull_svcctl_EnumDependentServicesW(struct ndr_pull
                _mem_save_services_returned_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.services_returned, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.services_returned));
+               if (*r->out.services_returned < 0 || *r->out.services_returned > 0x40000) {
+                       return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
+               }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_services_returned_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
+               if (r->out.service_status) {
+                       NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->out.service_status, r->in.buf_size));
+               }
        }
        return NDR_ERR_SUCCESS;
 }
@@ -1789,9 +1795,7 @@ _PUBLIC_ void ndr_print_svcctl_EnumDependentServicesW(struct ndr_print *ndr, con
                ndr->depth++;
                ndr_print_ptr(ndr, "service_status", r->out.service_status);
                ndr->depth++;
-               if (r->out.service_status) {
-                       ndr_print_ENUM_SERVICE_STATUS(ndr, "service_status", r->out.service_status);
-               }
+               ndr_print_array_uint8(ndr, "service_status", r->out.service_status, r->in.buf_size);
                ndr->depth--;
                ndr_print_ptr(ndr, "bytes_needed", r->out.bytes_needed);
                ndr->depth++;
index 10db3204520e774170dd1b2407c096651f6be98e..264dea347436cf6627ce953a5371474b60025e6f 100644 (file)
@@ -1047,7 +1047,7 @@ static bool api_svcctl_EnumDependentServicesW(pipes_struct *p)
        }
 
        ZERO_STRUCT(r->out);
-       r->out.service_status = talloc_zero(r, struct ENUM_SERVICE_STATUS);
+       r->out.service_status = talloc_zero_array(r, uint8_t, r->in.buf_size);
        if (r->out.service_status == NULL) {
                talloc_free(r);
                return false;
index c13e96b2a0c900df660f42c890992ac618bd93db..fad51c446b17f7047e1a8dd0058d8601c24a4fe0 100644 (file)
@@ -274,13 +274,13 @@ struct svcctl_EnumDependentServicesW {
        struct {
                struct policy_handle *service;/* [ref] */
                uint32_t state;
-               uint32_t buf_size;
+               uint32_t buf_size;/* [range(0,0x40000)] */
        } in;
 
        struct {
-               struct ENUM_SERVICE_STATUS *service_status;/* [unique] */
-               uint32_t *bytes_needed;/* [ref] */
-               uint32_t *services_returned;/* [ref] */
+               uint8_t *service_status;/* [ref,size_is(buf_size)] */
+               uint32_t *bytes_needed;/* [ref,range(0,0x40000)] */
+               uint32_t *services_returned;/* [ref,range(0,0x40000)] */
                WERROR result;
        } out;