r4461: finished the remaining information levels in the DSSETUP pipe. The pipe is...
authorAndrew Tridgell <tridge@samba.org>
Sat, 1 Jan 2005 01:32:01 +0000 (01:32 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:07:53 +0000 (13:07 -0500)
The only glitch is that I am returning DS_ROLE_MEMBER_SERVER when I
should be returning DS_ROLE_PRIMARY_DC. This is needed for the moment
or ACL editing doesn't work from w2k3. Once we have some more ADS
calls we should be able to fix this.
(This used to be commit 6566dc2805a9f6473ebab70b0dbd381c4dbd42c8)

source4/librpc/idl/dssetup.idl
source4/rpc_server/dssetup/dcesrv_dssetup.c
source4/torture/rpc/dssetup.c

index dc57e86a112e0a40076c01e20cfa2878c58db8a0..25045c587959e32482c8133fc1143f8ebed32020 100644 (file)
        /**********************************************/
        /* Function 0x00                              */
 
+       typedef enum {
+               DS_ROLE_STANDALONE_WORKSTATION = 0,
+               DS_ROLE_MEMBER_WORKSTATION     = 1,
+               DS_ROLE_STANDALONE_SERVER      = 2,
+               DS_ROLE_MEMBER_SERVER          = 3,
+               DS_ROLE_BACKUP_DC              = 4,
+               DS_ROLE_PRIMARY_DC             = 5
+       } ds_Role;
+
        typedef struct {
                uint16    role;
                uint32    flags;
                unistr    *forest;
                GUID domain_guid;
        } ds_DomainBasicInformation;
+
+       typedef enum {
+               DS_NOT_UPGRADING = 0,
+               DS_UPGRADING     = 1
+       } ds_UpgradeStatus;
+
+       typedef enum {
+               DS_PREVIOUS_UNKNOWN = 0,
+               DS_PREVIOUS_PRIMARY = 1,
+               DS_PREVIOUS_BACKUP  = 2
+       } ds_PreviousStatus;
+
+       typedef struct {
+               uint32 upgrading;
+               uint16 previous_role;
+       } ds_DomainUpgradeStatus;
+
+       typedef enum {
+               DS_STATUS_IDLE         = 0,
+               DS_STATUS_ACTIVE       = 1,
+               DS_STATUS_NEEDS_REBOOT = 2
+       } ds_Status;
+
+       typedef struct {
+               uint16 status;
+       } ds_RoleOpStatus;
        
+       typedef enum {
+               DS_BASIC_INFORMATION = 1,
+               DS_UPGRADE_STATUS    = 2,
+               DS_ROLE_OP_STATUS    = 3
+       } ds_InformationLevel;
+
        typedef union {
-               [case(1)] ds_DomainBasicInformation basic;
+               [case(DS_BASIC_INFORMATION)] ds_DomainBasicInformation basic;
+               [case(DS_UPGRADE_STATUS)]    ds_DomainUpgradeStatus    upgrade;
+               [case(DS_ROLE_OP_STATUS)]    ds_RoleOpStatus           status;
        } ds_DomainInformation;
 
        WERROR ds_RolerGetPrimaryDomainInformation(
                [out,switch_is(level)] ds_DomainInformation *info
                );
 
-
+       /*
+         w2k3 has removed all the calls below from their implementation.
+         These stubs are left here only as a way of documenting the names
+         of the calls in case they ever turn up on the wire.
+       */
        WERROR ds_RolerDnsNameToFlatName();
        WERROR ds_RolerDcAsDc();
        WERROR ds_RolerDcAsReplica();
index bdf1c5af90209d4b0f2bd9448c3fd7961cf83957..cde2b4d69ab02069a39d8a17e23de8a66e9e738a 100644 (file)
@@ -50,20 +50,31 @@ static WERROR ds_RolerGetPrimaryDomainInformation(struct dcesrv_call_state *dce_
                return WERR_SERVER_UNAVAILABLE;
        }
 
+       r->out.info = talloc_p(mem_ctx, union ds_DomainInformation);
+       if (r->out.info == NULL) {
+               return WERR_NOMEM;
+       }
+
        switch (r->in.level) {
-       case 1:
-               r->out.info = talloc_p(mem_ctx, union ds_DomainInformation);
-               if (r->out.info == NULL) {
-                       return WERR_NOMEM;
-               }
-               r->out.info->basic.role = lp_server_role();
-               r->out.info->basic.flags = 0x01000003;
-               r->out.info->basic.domain = samdb_result_string(res[0], "name", NULL);
-               r->out.info->basic.dns_domain = samdb_result_string(res[0], "dnsDomain", NULL);
-               r->out.info->basic.forest = samdb_result_string(res[0], "dnsDomain", NULL);
+       case DS_BASIC_INFORMATION:
+               /* incorrect,  but needed for the moment */
+               r->out.info->basic.role        = DS_ROLE_MEMBER_SERVER; 
+               r->out.info->basic.flags       = 0x01000003;
+               r->out.info->basic.domain      = samdb_result_string(res[0], "name", NULL);
+               r->out.info->basic.dns_domain  = samdb_result_string(res[0], "dnsDomain", NULL);
+               r->out.info->basic.forest      = samdb_result_string(res[0], "dnsDomain", NULL);
                r->out.info->basic.domain_guid = samdb_result_guid(res[0], "objectGUID");
                break;
 
+       case DS_UPGRADE_STATUS:
+               r->out.info->upgrade.upgrading     = DS_NOT_UPGRADING;
+               r->out.info->upgrade.previous_role = DS_PREVIOUS_UNKNOWN;
+               break;
+
+       case DS_ROLE_OP_STATUS:
+               r->out.info->status.status = DS_STATUS_IDLE;
+               break;
+
        default:
                err = WERR_INVALID_PARAM;
                break;
@@ -73,11 +84,18 @@ static WERROR ds_RolerGetPrimaryDomainInformation(struct dcesrv_call_state *dce_
 }
 
 
+/*****************************************
+NOTE! The remaining calls below were
+removed in w2k3, so the DCESRV_FAULT()
+replies are the correct implementation. Do
+not try and fill these in with anything else
+******************************************/
+
 /* 
   ds_RolerDnsNameToFlatName 
 */
 static WERROR ds_RolerDnsNameToFlatName(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
-                      struct ds_RolerDnsNameToFlatName *r)
+                                       struct ds_RolerDnsNameToFlatName *r)
 {
        DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
 }
@@ -87,7 +105,7 @@ static WERROR ds_RolerDnsNameToFlatName(struct dcesrv_call_state *dce_call, TALL
   ds_RolerDcAsDc 
 */
 static WERROR ds_RolerDcAsDc(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
-                      struct ds_RolerDcAsDc *r)
+                            struct ds_RolerDcAsDc *r)
 {
        DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
 }
@@ -97,7 +115,7 @@ static WERROR ds_RolerDcAsDc(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem
   ds_RolerDcAsReplica 
 */
 static WERROR ds_RolerDcAsReplica(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
-                      struct ds_RolerDcAsReplica *r)
+                                 struct ds_RolerDcAsReplica *r)
 {
        DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
 }
@@ -107,7 +125,7 @@ static WERROR ds_RolerDcAsReplica(struct dcesrv_call_state *dce_call, TALLOC_CTX
   ds_RolerDemoteDc 
 */
 static WERROR ds_RolerDemoteDc(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
-                      struct ds_RolerDemoteDc *r)
+                              struct ds_RolerDemoteDc *r)
 {
        DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
 }
@@ -117,7 +135,7 @@ static WERROR ds_RolerDemoteDc(struct dcesrv_call_state *dce_call, TALLOC_CTX *m
   ds_RolerGetDcOperationProgress 
 */
 static WERROR ds_RolerGetDcOperationProgress(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
-                      struct ds_RolerGetDcOperationProgress *r)
+                                            struct ds_RolerGetDcOperationProgress *r)
 {
        DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
 }
@@ -127,7 +145,7 @@ static WERROR ds_RolerGetDcOperationProgress(struct dcesrv_call_state *dce_call,
   ds_RolerGetDcOperationResults 
 */
 static WERROR ds_RolerGetDcOperationResults(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
-                      struct ds_RolerGetDcOperationResults *r)
+                                           struct ds_RolerGetDcOperationResults *r)
 {
        DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
 }
@@ -137,7 +155,7 @@ static WERROR ds_RolerGetDcOperationResults(struct dcesrv_call_state *dce_call,
   ds_RolerCancel 
 */
 static WERROR ds_RolerCancel(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
-                      struct ds_RolerCancel *r)
+                            struct ds_RolerCancel *r)
 {
        DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
 }
@@ -147,7 +165,7 @@ static WERROR ds_RolerCancel(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem
   ds_RolerServerSaveStateForUpgrade 
 */
 static WERROR ds_RolerServerSaveStateForUpgrade(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
-                      struct ds_RolerServerSaveStateForUpgrade *r)
+                                               struct ds_RolerServerSaveStateForUpgrade *r)
 {
        DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
 }
@@ -157,7 +175,7 @@ static WERROR ds_RolerServerSaveStateForUpgrade(struct dcesrv_call_state *dce_ca
   ds_RolerUpgradeDownlevelServer 
 */
 static WERROR ds_RolerUpgradeDownlevelServer(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
-                      struct ds_RolerUpgradeDownlevelServer *r)
+                                            struct ds_RolerUpgradeDownlevelServer *r)
 {
        DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
 }
@@ -167,7 +185,7 @@ static WERROR ds_RolerUpgradeDownlevelServer(struct dcesrv_call_state *dce_call,
   ds_RolerAbortDownlevelServerUpgrade 
 */
 static WERROR ds_RolerAbortDownlevelServerUpgrade(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
-                      struct ds_RolerAbortDownlevelServerUpgrade *r)
+                                                 struct ds_RolerAbortDownlevelServerUpgrade *r)
 {
        DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
 }
index 1819c523a54a5e63cf7fea5849cb513d1505b849..7e63243e8a9240a20738d669acdb2f17402f6c27 100644 (file)
@@ -28,18 +28,23 @@ static BOOL test_RolerGetPrimaryDomainInformation(struct dcerpc_pipe *p, TALLOC_
 {
        struct ds_RolerGetPrimaryDomainInformation r;
        NTSTATUS status;
+       BOOL ret = True;
+       int i;
 
        printf("\ntesting RolerGetPrimaryDomainInformation\n");
 
-       r.in.level = 1;
+       for (i=DS_BASIC_INFORMATION;i<=DS_ROLE_OP_STATUS;i++) {
+               r.in.level = i;
 
-       status = dcerpc_ds_RolerGetPrimaryDomainInformation(p, mem_ctx, &r);
-       if (!NT_STATUS_IS_OK(status)) {
-               printf("RolerGetPrimaryDomainInformation failed - %s\n", nt_errstr(status));
-               return False;
+               status = dcerpc_ds_RolerGetPrimaryDomainInformation(p, mem_ctx, &r);
+               if (!NT_STATUS_IS_OK(status)) {
+                       printf("RolerGetPrimaryDomainInformation level %d failed - %s\n",
+                              i, nt_errstr(status));
+                       ret = False;
+               }
        }
 
-       return True;
+       return ret;
 }
 
 BOOL torture_rpc_dssetup(void)