s4-srvsvc: merge srvsvc_NetCharDevEnum from s3 idl.
authorGünther Deschner <gd@samba.org>
Thu, 30 Oct 2008 15:34:28 +0000 (16:34 +0100)
committerGünther Deschner <gd@samba.org>
Fri, 31 Oct 2008 01:44:33 +0000 (02:44 +0100)
Guenther

source4/librpc/idl/srvsvc.idl
source4/rpc_server/srvsvc/dcesrv_srvsvc.c
source4/torture/rpc/srvsvc.c

index 755339ecfe3c08276fdb1ff63bf78ed063c3ffed..43f2004c23f351f42006533df238baa19b98254e 100644 (file)
@@ -51,14 +51,18 @@ import "security.idl", "svcctl.idl";
                [default] ;
        } srvsvc_NetCharDevCtr;
 
+       typedef struct {
+               uint32 level;
+               [switch_is(level)] srvsvc_NetCharDevCtr ctr;
+       } srvsvc_NetCharDevInfoCtr;
+
        /******************/
        /* Function: 0x00 */
        WERROR srvsvc_NetCharDevEnum(
                [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
-               [in,out]   uint32 level,
-               [in,out,switch_is(level)]   srvsvc_NetCharDevCtr ctr,
+               [in,out,ref]  srvsvc_NetCharDevInfoCtr *info_ctr,
                [in]   uint32 max_buffer,
-               [out]   uint32 totalentries,
+               [out,ref]   uint32 *totalentries,
                [in,out,unique]   uint32 *resume_handle
                );
 
@@ -684,6 +688,7 @@ import "security.idl", "svcctl.idl";
                uint32 sessreqs;
                uint32 opensearch;
                uint32 activelocks;
+               uint32 numreqbufs;
                uint32 sizereqbufs;
                uint32 numbigbufs;
                uint32 numfiletasks;
@@ -717,6 +722,7 @@ import "security.idl", "svcctl.idl";
                uint32 sessreqs;
                uint32 opensearch;
                uint32 activelocks;
+               uint32 numreqbufs;
                uint32 sizereqbufs;
                uint32 numbigbufs;
                uint32 numfiletasks;
index dc115547cf8a6c06eca5199e5386018cbe4679c5..ce6172b2e7538b1c1b101cd1113ea534b781a8e8 100644 (file)
 static WERROR dcesrv_srvsvc_NetCharDevEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
                                      struct srvsvc_NetCharDevEnum *r)
 {
-       r->out.level = r->in.level;
-       r->out.totalentries = 0;
-       r->out.resume_handle = NULL;
+       *r->out.totalentries = 0;
 
-       switch (r->in.level) {
+       switch (r->in.info_ctr->level) {
        case 0:
-               r->out.ctr.ctr0 = talloc(mem_ctx, struct srvsvc_NetCharDevCtr0);
-               W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr0);
+               r->out.info_ctr->ctr.ctr0 = talloc(mem_ctx, struct srvsvc_NetCharDevCtr0);
+               W_ERROR_HAVE_NO_MEMORY(r->out.info_ctr->ctr.ctr0);
 
-               r->out.ctr.ctr0->count = 0;
-               r->out.ctr.ctr0->array = NULL;
+               r->out.info_ctr->ctr.ctr0->count = 0;
+               r->out.info_ctr->ctr.ctr0->array = NULL;
 
                return WERR_NOT_SUPPORTED;
 
        case 1:
-               r->out.ctr.ctr1 = talloc(mem_ctx, struct srvsvc_NetCharDevCtr1);
-               W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr1);
+               r->out.info_ctr->ctr.ctr1 = talloc(mem_ctx, struct srvsvc_NetCharDevCtr1);
+               W_ERROR_HAVE_NO_MEMORY(r->out.info_ctr->ctr.ctr1);
 
-               r->out.ctr.ctr1->count = 0;
-               r->out.ctr.ctr1->array = NULL;
+               r->out.info_ctr->ctr.ctr1->count = 0;
+               r->out.info_ctr->ctr.ctr1->array = NULL;
 
                return WERR_NOT_SUPPORTED;
 
index b513ccc9738a77ad709da09c8cec4dfb46eb6890..aa10955a37b2acb7a15ae4cf0dffd1693d83f4c0 100644 (file)
@@ -81,23 +81,39 @@ static bool test_NetCharDevEnum(struct torture_context *tctx,
 {
        NTSTATUS status;
        struct srvsvc_NetCharDevEnum r;
+       struct srvsvc_NetCharDevInfoCtr info_ctr;
        struct srvsvc_NetCharDevCtr0 c0;
+       struct srvsvc_NetCharDevCtr0 c1;
+       uint32_t totalentries = 0;
        uint32_t levels[] = {0, 1};
        int i;
 
+       ZERO_STRUCT(info_ctr);
+
        r.in.server_unc = talloc_asprintf(tctx,"\\\\%s",dcerpc_server_name(p));
-       r.in.ctr.ctr0 = &c0;
-       r.in.ctr.ctr0->count = 0;
-       r.in.ctr.ctr0->array = NULL;
+       r.in.info_ctr = &info_ctr;
        r.in.max_buffer = (uint32_t)-1;
        r.in.resume_handle = NULL;
+       r.out.info_ctr = &info_ctr;
+       r.out.totalentries = &totalentries;
 
        for (i=0;i<ARRAY_SIZE(levels);i++) {
                int j;
 
-               ZERO_STRUCT(r.out);
-               r.in.level = levels[i];
-               torture_comment(tctx, "testing NetCharDevEnum level %u\n", r.in.level);
+               info_ctr.level = levels[i];
+
+               switch(info_ctr.level) {
+               case 0:
+                       ZERO_STRUCT(c0);
+                       info_ctr.ctr.ctr0 = &c0;
+                       break;
+               case 1:
+                       ZERO_STRUCT(c1);
+                       info_ctr.ctr.ctr0 = &c1;
+                       break;
+               }
+
+               torture_comment(tctx, "testing NetCharDevEnum level %u\n", info_ctr.level);
                status = dcerpc_srvsvc_NetCharDevEnum(p, tctx, &r);
                torture_assert_ntstatus_ok(tctx, status, "NetCharDevEnum failed");
                if (!W_ERROR_IS_OK(r.out.result)) {
@@ -106,10 +122,10 @@ static bool test_NetCharDevEnum(struct torture_context *tctx,
                }
 
                /* call test_NetCharDevGetInfo and test_NetCharDevControl for each returned share */
-               if (r.in.level == 1) {
-                       for (j=0;j<r.out.ctr.ctr1->count;j++) {
+               if (info_ctr.level == 1) {
+                       for (j=0;j<r.out.info_ctr->ctr.ctr1->count;j++) {
                                const char *device;
-                               device = r.out.ctr.ctr1->array[j].device;
+                               device = r.out.info_ctr->ctr.ctr1->array[j].device;
                                if (!test_NetCharDevGetInfo(p, tctx, device)) {
                                        return false;
                                }