summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2003-11-20 05:34:02 +0000
committerAndrew Tridgell <tridge@samba.org>2003-11-20 05:34:02 +0000
commita6e5654b3dbfcefde863dead8031630ae476b5b9 (patch)
tree8e19d05481a4e820da9ee608858ebd60698656a7
parent4730469cd87b5c19d0c7e8da9194f3c8f6fb8d24 (diff)
downloadsamba-a6e5654b3dbfcefde863dead8031630ae476b5b9.tar.gz
samba-a6e5654b3dbfcefde863dead8031630ae476b5b9.tar.bz2
samba-a6e5654b3dbfcefde863dead8031630ae476b5b9.zip
fixed srvsvc_NetShareEnumAll()
(This used to be commit ab4056e25ccfde5136ff3a1cd5d1efa78f1eee1b)
-rw-r--r--source4/librpc/idl/srvsvc.idl24
-rw-r--r--source4/librpc/ndr/ndr_srvsvc.c150
-rw-r--r--source4/librpc/ndr/ndr_srvsvc.h13
-rw-r--r--source4/torture/rpc/srvsvc.c13
4 files changed, 37 insertions, 163 deletions
diff --git a/source4/librpc/idl/srvsvc.idl b/source4/librpc/idl/srvsvc.idl
index 31399520c0..530b19d6cf 100644
--- a/source4/librpc/idl/srvsvc.idl
+++ b/source4/librpc/idl/srvsvc.idl
@@ -314,28 +314,22 @@
unistr *comment;
} srvsvc_NetShare1004;
- typedef struct {
- uint32 count;
- [size_is(count)] srvsvc_NetShare1004 *array;
- } srvsvc_NetShareCtr1004;
-
typedef union {
[case(0)] srvsvc_NetShareCtr0 *ctr0;
[case(1)] srvsvc_NetShareCtr1 *ctr1;
[case(2)] srvsvc_NetShareCtr2 *ctr2;
[case(501)] srvsvc_NetShareCtr501 *ctr501;
[case(502)] srvsvc_NetShareCtr502 *ctr502;
- [case(1004)] srvsvc_NetShareCtr1004 *ctr1004;
[default] ;
- } srvsvc_NetShareCtr;
+ } srvsvc_NetShareUnion;
- WERROR srvsvc_NetShareEnumAll(
- [in] unistr *server_unc,
- [in,out] uint32 level,
- [in,out,switch_is(level)] srvsvc_NetShareCtr ctr,
- [in] uint32 preferred_len,
- [out] uint32 totalentries,
- [in,out] uint32 *resume_handle
+ WERROR srvsvc_NetShareEnumAll (
+ [in] unistr *server_unc,
+ [in,out] uint32 level,
+ [in,out,switch_is(level)] srvsvc_NetShareUnion ctr,
+ [in] uint32 max_buffer,
+ [out] uint32 totalentries,
+ [in,out] uint32 *resume_handle
);
/******************/
@@ -561,7 +555,7 @@
WERROR srvsvc_NetShareEnum(
[in] unistr *server_unc,
[in,out] uint32 level,
- [in,out,switch_is(level)] srvsvc_NetShareCtr ctr,
+ [in,out,switch_is(level)] srvsvc_NetShareUnion ctr,
[in] uint32 preferred_len,
[out] uint32 totalentries,
[in,out] uint32 *resume_handle
diff --git a/source4/librpc/ndr/ndr_srvsvc.c b/source4/librpc/ndr/ndr_srvsvc.c
index 50aece53a4..64cc7c944c 100644
--- a/source4/librpc/ndr/ndr_srvsvc.c
+++ b/source4/librpc/ndr/ndr_srvsvc.c
@@ -877,41 +877,7 @@ done:
return NT_STATUS_OK;
}
-NTSTATUS ndr_push_srvsvc_NetShare1004(struct ndr_push *ndr, int ndr_flags, struct srvsvc_NetShare1004 *r)
-{
- if (!(ndr_flags & NDR_SCALARS)) goto buffers;
- NDR_CHECK(ndr_push_struct_start(ndr));
- NDR_CHECK(ndr_push_align(ndr, 4));
- NDR_CHECK(ndr_push_ptr(ndr, r->comment));
- ndr_push_struct_end(ndr);
-buffers:
- if (!(ndr_flags & NDR_BUFFERS)) goto done;
- if (r->comment) {
- NDR_CHECK(ndr_push_unistr(ndr, r->comment));
- }
-done:
- return NT_STATUS_OK;
-}
-
-NTSTATUS ndr_push_srvsvc_NetShareCtr1004(struct ndr_push *ndr, int ndr_flags, struct srvsvc_NetShareCtr1004 *r)
-{
- if (!(ndr_flags & NDR_SCALARS)) goto buffers;
- NDR_CHECK(ndr_push_struct_start(ndr));
- NDR_CHECK(ndr_push_align(ndr, 4));
- NDR_CHECK(ndr_push_uint32(ndr, r->count));
- NDR_CHECK(ndr_push_ptr(ndr, r->array));
- ndr_push_struct_end(ndr);
-buffers:
- if (!(ndr_flags & NDR_BUFFERS)) goto done;
- if (r->array) {
- NDR_CHECK(ndr_push_uint32(ndr, r->count));
- NDR_CHECK(ndr_push_array(ndr, NDR_SCALARS|NDR_BUFFERS, r->array, sizeof(r->array[0]), r->count, (ndr_push_flags_fn_t)ndr_push_srvsvc_NetShare1004));
- }
-done:
- return NT_STATUS_OK;
-}
-
-NTSTATUS ndr_push_srvsvc_NetShareCtr(struct ndr_push *ndr, int ndr_flags, uint16 level, union srvsvc_NetShareCtr *r)
+NTSTATUS ndr_push_srvsvc_NetShareUnion(struct ndr_push *ndr, int ndr_flags, uint16 level, union srvsvc_NetShareUnion *r)
{
if (!(ndr_flags & NDR_SCALARS)) goto buffers;
NDR_CHECK(ndr_push_struct_start(ndr));
@@ -936,10 +902,6 @@ NTSTATUS ndr_push_srvsvc_NetShareCtr(struct ndr_push *ndr, int ndr_flags, uint16
NDR_CHECK(ndr_push_ptr(ndr, r->ctr502));
break;
- case 1004:
- NDR_CHECK(ndr_push_ptr(ndr, r->ctr1004));
- break;
-
default:
break;
@@ -978,12 +940,6 @@ buffers:
}
break;
- case 1004:
- if (r->ctr1004) {
- NDR_CHECK(ndr_push_srvsvc_NetShareCtr1004(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1004));
- }
- break;
-
default:
break;
@@ -1000,8 +956,8 @@ NTSTATUS ndr_push_srvsvc_NetShareEnumAll(struct ndr_push *ndr, struct srvsvc_Net
}
NDR_CHECK(ndr_push_uint32(ndr, r->in.level));
NDR_CHECK(ndr_push_uint32(ndr, r->in.level));
- NDR_CHECK(ndr_push_srvsvc_NetShareCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.level, &r->in.ctr));
- NDR_CHECK(ndr_push_uint32(ndr, r->in.preferred_len));
+ NDR_CHECK(ndr_push_srvsvc_NetShareUnion(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.level, &r->in.ctr));
+ NDR_CHECK(ndr_push_uint32(ndr, r->in.max_buffer));
NDR_CHECK(ndr_push_ptr(ndr, r->in.resume_handle));
if (r->in.resume_handle) {
NDR_CHECK(ndr_push_uint32(ndr, *r->in.resume_handle));
@@ -1352,7 +1308,7 @@ NTSTATUS ndr_push_srvsvc_NetShareEnum(struct ndr_push *ndr, struct srvsvc_NetSha
}
NDR_CHECK(ndr_push_uint32(ndr, r->in.level));
NDR_CHECK(ndr_push_uint32(ndr, r->in.level));
- NDR_CHECK(ndr_push_srvsvc_NetShareCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.level, &r->in.ctr));
+ NDR_CHECK(ndr_push_srvsvc_NetShareUnion(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.level, &r->in.ctr));
NDR_CHECK(ndr_push_uint32(ndr, r->in.preferred_len));
NDR_CHECK(ndr_push_ptr(ndr, r->in.resume_handle));
if (r->in.resume_handle) {
@@ -2690,60 +2646,7 @@ done:
return NT_STATUS_OK;
}
-NTSTATUS ndr_pull_srvsvc_NetShare1004(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShare1004 *r)
-{
- uint32 _ptr_comment;
- NDR_CHECK(ndr_pull_struct_start(ndr));
- if (!(ndr_flags & NDR_SCALARS)) goto buffers;
- NDR_CHECK(ndr_pull_align(ndr, 4));
- NDR_CHECK(ndr_pull_uint32(ndr, &_ptr_comment));
- if (_ptr_comment) {
- NDR_ALLOC(ndr, r->comment);
- } else {
- r->comment = NULL;
- }
- ndr_pull_struct_end(ndr);
-buffers:
- if (!(ndr_flags & NDR_BUFFERS)) goto done;
- if (r->comment) {
- NDR_CHECK(ndr_pull_unistr(ndr, &r->comment));
- }
-done:
- return NT_STATUS_OK;
-}
-
-NTSTATUS ndr_pull_srvsvc_NetShareCtr1004(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareCtr1004 *r)
-{
- uint32 _ptr_array;
- NDR_CHECK(ndr_pull_struct_start(ndr));
- if (!(ndr_flags & NDR_SCALARS)) goto buffers;
- NDR_CHECK(ndr_pull_align(ndr, 4));
- NDR_CHECK(ndr_pull_uint32(ndr, &r->count));
- NDR_CHECK(ndr_pull_uint32(ndr, &_ptr_array));
- if (_ptr_array) {
- NDR_ALLOC(ndr, r->array);
- } else {
- r->array = NULL;
- }
- ndr_pull_struct_end(ndr);
-buffers:
- if (!(ndr_flags & NDR_BUFFERS)) goto done;
- if (r->array) {
- {
- uint32 _array_size;
- NDR_CHECK(ndr_pull_uint32(ndr, &_array_size));
- if (r->count > _array_size) {
- return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should be %u", _array_size, r->count);
- }
- }
- NDR_ALLOC_N_SIZE(ndr, r->array, r->count, sizeof(r->array[0]));
- NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->array, sizeof(r->array[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_srvsvc_NetShare1004));
- }
-done:
- return NT_STATUS_OK;
-}
-
-NTSTATUS ndr_pull_srvsvc_NetShareCtr(struct ndr_pull *ndr, int ndr_flags, uint16 level, union srvsvc_NetShareCtr *r)
+NTSTATUS ndr_pull_srvsvc_NetShareUnion(struct ndr_pull *ndr, int ndr_flags, uint16 level, union srvsvc_NetShareUnion *r)
{
if (!(ndr_flags & NDR_SCALARS)) goto buffers;
NDR_CHECK(ndr_pull_struct_start(ndr));
@@ -2798,16 +2701,6 @@ NTSTATUS ndr_pull_srvsvc_NetShareCtr(struct ndr_pull *ndr, int ndr_flags, uint16
}
break; }
- case 1004: {
- uint32 _ptr_ctr1004;
- NDR_CHECK(ndr_pull_uint32(ndr, &_ptr_ctr1004));
- if (_ptr_ctr1004) {
- NDR_ALLOC(ndr, r->ctr1004);
- } else {
- r->ctr1004 = NULL;
- }
- break; }
-
default: {
break; }
@@ -2846,12 +2739,6 @@ buffers:
}
break;
- case 1004:
- if (r->ctr1004) {
- NDR_CHECK(ndr_pull_srvsvc_NetShareCtr1004(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1004));
- }
- break;
-
default:
break;
@@ -2869,7 +2756,7 @@ NTSTATUS ndr_pull_srvsvc_NetShareEnumAll(struct ndr_pull *ndr, struct srvsvc_Net
NDR_CHECK(ndr_pull_uint32(ndr, &_level));
if (_level != r->in.level) return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u in ctr");
}
- NDR_CHECK(ndr_pull_srvsvc_NetShareCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.level, &r->out.ctr));
+ NDR_CHECK(ndr_pull_srvsvc_NetShareUnion(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.level, &r->out.ctr));
NDR_CHECK(ndr_pull_uint32(ndr, &r->out.totalentries));
NDR_CHECK(ndr_pull_uint32(ndr, &_ptr_resume_handle));
if (_ptr_resume_handle) {
@@ -3454,7 +3341,7 @@ NTSTATUS ndr_pull_srvsvc_NetShareEnum(struct ndr_pull *ndr, struct srvsvc_NetSha
NDR_CHECK(ndr_pull_uint32(ndr, &_level));
if (_level != r->in.level) return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u in ctr");
}
- NDR_CHECK(ndr_pull_srvsvc_NetShareCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.level, &r->out.ctr));
+ NDR_CHECK(ndr_pull_srvsvc_NetShareUnion(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.level, &r->out.ctr));
NDR_CHECK(ndr_pull_uint32(ndr, &r->out.totalentries));
NDR_CHECK(ndr_pull_uint32(ndr, &_ptr_resume_handle));
if (_ptr_resume_handle) {
@@ -4518,9 +4405,9 @@ void ndr_print_srvsvc_NetShareCtr1004(struct ndr_print *ndr, const char *name, s
ndr->depth--;
}
-void ndr_print_srvsvc_NetShareCtr(struct ndr_print *ndr, const char *name, uint16 level, union srvsvc_NetShareCtr *r)
+void ndr_print_srvsvc_NetShareUnion(struct ndr_print *ndr, const char *name, uint16 level, union srvsvc_NetShareUnion *r)
{
- ndr_print_union(ndr, name, level, "srvsvc_NetShareCtr");
+ ndr_print_union(ndr, name, level, "srvsvc_NetShareUnion");
switch (level) {
case 0:
ndr_print_ptr(ndr, "ctr0", r->ctr0);
@@ -4567,15 +4454,6 @@ void ndr_print_srvsvc_NetShareCtr(struct ndr_print *ndr, const char *name, uint1
ndr->depth--;
break;
- case 1004:
- ndr_print_ptr(ndr, "ctr1004", r->ctr1004);
- ndr->depth++;
- if (r->ctr1004) {
- ndr_print_srvsvc_NetShareCtr1004(ndr, "ctr1004", r->ctr1004);
- }
- ndr->depth--;
- break;
-
default:
break;
@@ -4596,8 +4474,8 @@ void ndr_print_srvsvc_NetShareEnumAll(struct ndr_print *ndr, const char *name, i
}
ndr->depth--;
ndr_print_uint32(ndr, "level", r->in.level);
- ndr_print_srvsvc_NetShareCtr(ndr, "ctr", r->in.level, &r->in.ctr);
- ndr_print_uint32(ndr, "preferred_len", r->in.preferred_len);
+ ndr_print_srvsvc_NetShareUnion(ndr, "ctr", r->in.level, &r->in.ctr);
+ ndr_print_uint32(ndr, "max_buffer", r->in.max_buffer);
ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
ndr->depth++;
if (r->in.resume_handle) {
@@ -4610,7 +4488,7 @@ void ndr_print_srvsvc_NetShareEnumAll(struct ndr_print *ndr, const char *name, i
ndr_print_struct(ndr, "out", "srvsvc_NetShareEnumAll");
ndr->depth++;
ndr_print_uint32(ndr, "level", r->out.level);
- ndr_print_srvsvc_NetShareCtr(ndr, "ctr", r->in.level, &r->out.ctr);
+ ndr_print_srvsvc_NetShareUnion(ndr, "ctr", r->in.level, &r->out.ctr);
ndr_print_uint32(ndr, "totalentries", r->out.totalentries);
ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
ndr->depth++;
@@ -5343,7 +5221,7 @@ void ndr_print_srvsvc_NetShareEnum(struct ndr_print *ndr, const char *name, int
}
ndr->depth--;
ndr_print_uint32(ndr, "level", r->in.level);
- ndr_print_srvsvc_NetShareCtr(ndr, "ctr", r->in.level, &r->in.ctr);
+ ndr_print_srvsvc_NetShareUnion(ndr, "ctr", r->in.level, &r->in.ctr);
ndr_print_uint32(ndr, "preferred_len", r->in.preferred_len);
ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
ndr->depth++;
@@ -5357,7 +5235,7 @@ void ndr_print_srvsvc_NetShareEnum(struct ndr_print *ndr, const char *name, int
ndr_print_struct(ndr, "out", "srvsvc_NetShareEnum");
ndr->depth++;
ndr_print_uint32(ndr, "level", r->out.level);
- ndr_print_srvsvc_NetShareCtr(ndr, "ctr", r->in.level, &r->out.ctr);
+ ndr_print_srvsvc_NetShareUnion(ndr, "ctr", r->in.level, &r->out.ctr);
ndr_print_uint32(ndr, "totalentries", r->out.totalentries);
ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
ndr->depth++;
diff --git a/source4/librpc/ndr/ndr_srvsvc.h b/source4/librpc/ndr/ndr_srvsvc.h
index 881ed80c01..cae06371c6 100644
--- a/source4/librpc/ndr/ndr_srvsvc.h
+++ b/source4/librpc/ndr/ndr_srvsvc.h
@@ -434,27 +434,26 @@ struct srvsvc_NetShareCtr1004 {
struct srvsvc_NetShare1004 *array;
};
-union srvsvc_NetShareCtr {
+union srvsvc_NetShareUnion {
/* [case(0)] */ struct srvsvc_NetShareCtr0 *ctr0;
/* [case(1)] */ struct srvsvc_NetShareCtr1 *ctr1;
/* [case(2)] */ struct srvsvc_NetShareCtr2 *ctr2;
/* [case(501)] */ struct srvsvc_NetShareCtr501 *ctr501;
/* [case(502)] */ struct srvsvc_NetShareCtr502 *ctr502;
-/* [case(1004)] */ struct srvsvc_NetShareCtr1004 *ctr1004;
/* [case(default)] */ };
struct srvsvc_NetShareEnumAll {
struct {
const char *server_unc;
uint32 level;
- union srvsvc_NetShareCtr ctr;
- uint32 preferred_len;
+ union srvsvc_NetShareUnion ctr;
+ uint32 max_buffer;
uint32 *resume_handle;
} in;
struct {
uint32 level;
- union srvsvc_NetShareCtr ctr;
+ union srvsvc_NetShareUnion ctr;
uint32 totalentries;
uint32 *resume_handle;
WERROR result;
@@ -783,14 +782,14 @@ struct srvsvc_NetShareEnum {
struct {
const char *server_unc;
uint32 level;
- union srvsvc_NetShareCtr ctr;
+ union srvsvc_NetShareUnion ctr;
uint32 preferred_len;
uint32 *resume_handle;
} in;
struct {
uint32 level;
- union srvsvc_NetShareCtr ctr;
+ union srvsvc_NetShareUnion ctr;
uint32 totalentries;
uint32 *resume_handle;
WERROR result;
diff --git a/source4/torture/rpc/srvsvc.c b/source4/torture/rpc/srvsvc.c
index 7111d59a3d..1f93357907 100644
--- a/source4/torture/rpc/srvsvc.c
+++ b/source4/torture/rpc/srvsvc.c
@@ -118,7 +118,7 @@ static BOOL test_NetSessEnum(struct dcerpc_pipe *p,
}
static BOOL test_NetShareEnumAll(struct dcerpc_pipe *p,
- TALLOC_CTX *mem_ctx)
+ TALLOC_CTX *mem_ctx)
{
NTSTATUS status;
struct srvsvc_NetShareEnumAll r;
@@ -126,15 +126,18 @@ static BOOL test_NetShareEnumAll(struct dcerpc_pipe *p,
uint32 levels[] = {0, 1, 2, 501, 502, 1004};
int i;
BOOL ret = True;
+ uint32 resume_handle;
+
+ ZERO_STRUCT(c0);
r.in.server_unc = talloc_asprintf(mem_ctx,"\\\\%s",dcerpc_server_name(p));
r.in.ctr.ctr0 = &c0;
- r.in.ctr.ctr0->count = 0;
- r.in.ctr.ctr0->array = NULL;
- r.in.preferred_len = (uint32)-1;
- r.in.resume_handle = NULL;
+ r.in.max_buffer = (uint32)-1;
+ r.in.resume_handle = &resume_handle;
+ r.out.resume_handle = &resume_handle;
for (i=0;i<ARRAY_SIZE(levels);i++) {
+ resume_handle = 0;
r.in.level = levels[i];
printf("testing NetShareEnumAll level %u\n", r.in.level);
status = dcerpc_srvsvc_NetShareEnumAll(p, mem_ctx, &r);