s4-drsuapi: merge drsuapi_DsGetDomainControllerInfo from s3 drsuapi idl.
authorGünther Deschner <gd@samba.org>
Fri, 17 Oct 2008 17:10:22 +0000 (19:10 +0200)
committerGünther Deschner <gd@samba.org>
Sat, 18 Oct 2008 21:06:24 +0000 (23:06 +0200)
Guenther

source4/librpc/idl/drsuapi.idl
source4/rpc_server/drsuapi/dcesrv_drsuapi.c
source4/torture/rpc/drsuapi.c

index a4aab0f4417b82ad5c117816e01a3bdc4a3b5a75..820ca1c62d572627f4c51808fc47397b2bc87fae 100644 (file)
@@ -1116,9 +1116,9 @@ interface drsuapi
        WERROR drsuapi_DsGetDomainControllerInfo(
                [in] policy_handle *bind_handle,
                [in] int32 level,
-               [in,switch_is(level)] drsuapi_DsGetDCInfoRequest req,
-               [out] int32 level_out,
-               [out,switch_is(level_out)] drsuapi_DsGetDCInfoCtr ctr
+               [in,ref,switch_is(level)] drsuapi_DsGetDCInfoRequest *req,
+               [out,ref] int32 *level_out,
+               [out,ref,switch_is(*level_out)] drsuapi_DsGetDCInfoCtr *ctr
                );
 
        /*****************/
index de1fefb186000af6adedaa96cc3d42aeea0a5152..4408b17b8c4ca53302b9b3b513b49d15a6a67090 100644 (file)
@@ -522,14 +522,16 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta
 
        int ret, i;
 
-       r->out.level_out = r->in.req.req1.level;
+       *r->out.level_out = r->in.req->req1.level;
+       r->out.ctr = talloc(mem_ctx, union drsuapi_DsGetDCInfoCtr);
+       W_ERROR_HAVE_NO_MEMORY(r->out.ctr);
 
        sites_dn = samdb_sites_dn(b_state->sam_ctx, mem_ctx);
        if (!sites_dn) {
                return WERR_DS_OBJ_NOT_FOUND;
        }
 
-       switch (r->out.level_out) {
+       switch (*r->out.level_out) {
        case -1:
                /* this level is not like the others */
                return WERR_UNKNOWN_LEVEL;
@@ -552,9 +554,9 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta
                return WERR_GENERAL_FAILURE;
        }
 
-       switch (r->out.level_out) {
+       switch (*r->out.level_out) {
        case 1:
-               ctr1 = &r->out.ctr.ctr1;
+               ctr1 = &r->out.ctr->ctr1;
                ctr1->count = res->count;
                ctr1->array = talloc_zero_array(mem_ctx, 
                                                struct drsuapi_DsGetDCInfo1, 
@@ -617,7 +619,7 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta
                }
                break;
        case 2:
-               ctr2 = &r->out.ctr.ctr2;
+               ctr2 = &r->out.ctr->ctr2;
                ctr2->count = res->count;
                ctr2->array = talloc_zero_array(mem_ctx, 
                                                 struct drsuapi_DsGetDCInfo2, 
index fb0e6d9d4c71338b5f0d1bcd708624078bf31f43..5b0af7b0a8ccc464a1c4db28b29272b225b35c0f 100644 (file)
@@ -62,6 +62,8 @@ static bool test_DsGetDomainControllerInfo(struct dcerpc_pipe *p, struct torture
 {
        NTSTATUS status;
        struct drsuapi_DsGetDomainControllerInfo r;
+       union drsuapi_DsGetDCInfoCtr ctr;
+       int32_t level_out = 0;
        bool found = false;
        int i, j, k;
        
@@ -91,16 +93,21 @@ static bool test_DsGetDomainControllerInfo(struct dcerpc_pipe *p, struct torture
 
        for (i=0; i < ARRAY_SIZE(levels); i++) {
                for (j=0; j < ARRAY_SIZE(names); j++) {
+                       union drsuapi_DsGetDCInfoRequest req;
                        level = levels[i];
                        r.in.bind_handle = &priv->bind_handle;
                        r.in.level = 1;
+                       r.in.req = &req;
                        
-                       r.in.req.req1.domain_name = names[j].name;
-                       r.in.req.req1.level = level;
+                       r.in.req->req1.domain_name = names[j].name;
+                       r.in.req->req1.level = level;
+
+                       r.out.ctr = &ctr;
+                       r.out.level_out = &level_out;
                        
                        torture_comment(torture,
                                   "testing DsGetDomainControllerInfo level %d on domainname '%s'\n",
-                              r.in.req.req1.level, r.in.req.req1.domain_name);
+                              r.in.req->req1.level, r.in.req->req1.domain_name);
                
                        status = dcerpc_drsuapi_DsGetDomainControllerInfo(p, torture, &r);
                        torture_assert_ntstatus_ok(torture, status,
@@ -115,13 +122,13 @@ static bool test_DsGetDomainControllerInfo(struct dcerpc_pipe *p, struct torture
                        }
 
                        torture_assert_int_equal(torture, 
-                                                                        r.in.req.req1.level, r.out.level_out, 
+                                                                        r.in.req->req1.level, *r.out.level_out,
                                                                         "dcerpc_drsuapi_DsGetDomainControllerInfo level"); 
 
                        switch (level) {
                        case 1:
-                               for (k=0; k < r.out.ctr.ctr1.count; k++) {
-                                       if (strcasecmp_m(r.out.ctr.ctr1.array[k].netbios_name, 
+                               for (k=0; k < r.out.ctr->ctr1.count; k++) {
+                                       if (strcasecmp_m(r.out.ctr->ctr1.array[k].netbios_name,
                                                         torture_join_netbios_name(priv->join)) == 0) {
                                                found = true;
                                                break;
@@ -129,11 +136,11 @@ static bool test_DsGetDomainControllerInfo(struct dcerpc_pipe *p, struct torture
                                }
                                break;
                        case 2:
-                               for (k=0; k < r.out.ctr.ctr2.count; k++) {
-                                       if (strcasecmp_m(r.out.ctr.ctr2.array[k].netbios_name, 
+                               for (k=0; k < r.out.ctr->ctr2.count; k++) {
+                                       if (strcasecmp_m(r.out.ctr->ctr2.array[k].netbios_name,
                                                         torture_join_netbios_name(priv->join)) == 0) {
                                                found = true;
-                                               priv->dcinfo    = r.out.ctr.ctr2.array[k];
+                                               priv->dcinfo    = r.out.ctr->ctr2.array[k];
                                                break;
                                        }
                                }
@@ -146,12 +153,15 @@ static bool test_DsGetDomainControllerInfo(struct dcerpc_pipe *p, struct torture
 
        r.in.bind_handle = &priv->bind_handle;
        r.in.level = 1;
-       
-       r.in.req.req1.domain_name = "__UNKNOWN_DOMAIN__"; /* This is clearly ignored for this level */
-       r.in.req.req1.level = -1;
+
+       r.out.ctr = &ctr;
+       r.out.level_out = &level_out;
+
+       r.in.req->req1.domain_name = "__UNKNOWN_DOMAIN__"; /* This is clearly ignored for this level */
+       r.in.req->req1.level = -1;
        
        printf("testing DsGetDomainControllerInfo level %d on domainname '%s'\n",
-              r.in.req.req1.level, r.in.req.req1.domain_name);
+              r.in.req->req1.level, r.in.req->req1.domain_name);
        
        status = dcerpc_drsuapi_DsGetDomainControllerInfo(p, torture, &r);
 
@@ -164,8 +174,8 @@ static bool test_DsGetDomainControllerInfo(struct dcerpc_pipe *p, struct torture
                const char *dc_account = talloc_asprintf(torture, "%s\\%s$",
                                                         torture_join_dom_netbios_name(priv->join), 
                                                         priv->dcinfo.netbios_name);
-               for (k=0; k < r.out.ctr.ctr01.count; k++) {
-                       if (strcasecmp_m(r.out.ctr.ctr01.array[k].client_account, 
+               for (k=0; k < r.out.ctr->ctr01.count; k++) {
+                       if (strcasecmp_m(r.out.ctr->ctr01.array[k].client_account,
                                         dc_account)) {
                                found = true;
                                break;