s4-srvsvc: merge srvsvc_NetSessEnum from s3 idl.
[ira/wip.git] / source4 / torture / rpc / srvsvc.c
index b513ccc9738a77ad709da09c8cec4dfb46eb6890..783dfd328bcbb67675f4f262524e4199abce43a6 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;
                                }
@@ -212,24 +228,39 @@ static bool test_NetCharDevQEnum(struct torture_context *tctx,
 {
        NTSTATUS status;
        struct srvsvc_NetCharDevQEnum r;
+       struct srvsvc_NetCharDevQInfoCtr info_ctr;
        struct srvsvc_NetCharDevQCtr0 c0;
+       struct srvsvc_NetCharDevQCtr1 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.user = talloc_asprintf(tctx,"%s","Administrator");
-       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.totalentries = &totalentries;
+       r.out.info_ctr = &info_ctr;
 
        for (i=0;i<ARRAY_SIZE(levels);i++) {
                int j;
 
-               ZERO_STRUCT(r.out);
-               r.in.level = levels[i];
-               torture_comment(tctx, "testing NetCharDevQEnum 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.ctr1 = &c1;
+                       break;
+               }
+               torture_comment(tctx, "testing NetCharDevQEnum level %u\n", info_ctr.level);
                status = dcerpc_srvsvc_NetCharDevQEnum(p, tctx, &r);
                torture_assert_ntstatus_ok(tctx, status, "NetCharDevQEnum failed");
                if (!W_ERROR_IS_OK(r.out.result)) {
@@ -238,10 +269,10 @@ static bool test_NetCharDevQEnum(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_NetCharDevQGetInfo(p, tctx, device)) {
                                        return false;
                                }
@@ -260,22 +291,38 @@ static bool test_NetConnEnum(struct torture_context *tctx,
 {
        NTSTATUS status;
        struct srvsvc_NetConnEnum r;
+       struct srvsvc_NetConnInfoCtr info_ctr;
        struct srvsvc_NetConnCtr0 c0;
+       struct srvsvc_NetConnCtr1 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.path = talloc_asprintf(tctx,"%s","ADMIN$");
-       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.totalentries = &totalentries;
+       r.out.info_ctr = &info_ctr;
 
        for (i=0;i<ARRAY_SIZE(levels);i++) {
-               ZERO_STRUCT(r.out);
-               r.in.level = levels[i];
-               torture_comment(tctx, "testing NetConnEnum 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.ctr1 = &c1;
+                       break;
+               }
+
+               torture_comment(tctx, "testing NetConnEnum level %u\n", info_ctr.level);
                status = dcerpc_srvsvc_NetConnEnum(p, tctx, &r);
                torture_assert_ntstatus_ok(tctx, status, "NetConnEnum failed");
                if (!W_ERROR_IS_OK(r.out.result)) {
@@ -294,23 +341,38 @@ static bool test_NetFileEnum(struct torture_context *tctx,
 {
        NTSTATUS status;
        struct srvsvc_NetFileEnum r;
+       struct srvsvc_NetFileInfoCtr info_ctr;
+       struct srvsvc_NetFileCtr2 c2;
        struct srvsvc_NetFileCtr3 c3;
+       uint32_t totalentries = 0;
        uint32_t levels[] = {2, 3};
        int i;
 
+       ZERO_STRUCT(info_ctr);
+
        r.in.server_unc = talloc_asprintf(tctx,"\\\\%s",dcerpc_server_name(p));
        r.in.path = NULL;
        r.in.user = NULL;
-       r.in.ctr.ctr3 = &c3;
-       r.in.ctr.ctr3->count = 0;
-       r.in.ctr.ctr3->array = NULL;
+       r.in.info_ctr = &info_ctr;
        r.in.max_buffer = (uint32_t)4096;
        r.in.resume_handle = NULL;
+       r.out.totalentries = &totalentries;
+       r.out.info_ctr = &info_ctr;
 
        for (i=0;i<ARRAY_SIZE(levels);i++) {
-               ZERO_STRUCT(r.out);
-               r.in.level = levels[i];
-               torture_comment(tctx, "testing NetFileEnum level %u\n", r.in.level);
+               info_ctr.level = levels[i];
+
+               switch (info_ctr.level) {
+               case 2:
+                       ZERO_STRUCT(c2);
+                       info_ctr.ctr.ctr2 = &c2;
+                       break;
+               case 3:
+                       ZERO_STRUCT(c3);
+                       info_ctr.ctr.ctr3 = &c3;
+                       break;
+               }
+               torture_comment(tctx, "testing NetFileEnum level %u\n", info_ctr.level);
                status = dcerpc_srvsvc_NetFileEnum(p, tctx, &r);
                torture_assert_ntstatus_ok(tctx, status, "NetFileEnum failed");
                if (!W_ERROR_IS_OK(r.out.result)) {
@@ -329,23 +391,54 @@ static bool test_NetSessEnum(struct torture_context *tctx,
 {
        NTSTATUS status;
        struct srvsvc_NetSessEnum r;
+       struct srvsvc_NetSessInfoCtr info_ctr;
        struct srvsvc_NetSessCtr0 c0;
+       struct srvsvc_NetSessCtr1 c1;
+       struct srvsvc_NetSessCtr2 c2;
+       struct srvsvc_NetSessCtr10 c10;
+       struct srvsvc_NetSessCtr502 c502;
+       uint32_t totalentries = 0;
        uint32_t levels[] = {0, 1, 2, 10, 502};
        int i;
 
+       ZERO_STRUCT(info_ctr);
+
        r.in.server_unc = talloc_asprintf(tctx,"\\\\%s",dcerpc_server_name(p));
        r.in.client = NULL;
        r.in.user = NULL;
-       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.totalentries = &totalentries;
+       r.out.info_ctr = &info_ctr;
 
        for (i=0;i<ARRAY_SIZE(levels);i++) {
-               ZERO_STRUCT(r.out);
-               r.in.level = levels[i];
-               torture_comment(tctx, "testing NetSessEnum 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.ctr1 = &c1;
+                       break;
+               case 2:
+                       ZERO_STRUCT(c2);
+                       info_ctr.ctr.ctr2 = &c2;
+                       break;
+               case 10:
+                       ZERO_STRUCT(c10);
+                       info_ctr.ctr.ctr10 = &c10;
+                       break;
+               case 502:
+                       ZERO_STRUCT(c502);
+                       info_ctr.ctr.ctr502 = &c502;
+                       break;
+               }
+
+               torture_comment(tctx, "testing NetSessEnum level %u\n", info_ctr.level);
                status = dcerpc_srvsvc_NetSessEnum(p, tctx, &r);
                torture_assert_ntstatus_ok(tctx, status, "NetSessEnum failed");
                if (!W_ERROR_IS_OK(r.out.result)) {