The branch, master has been updated
       via  d1c30ab lib: call_backtrace() is no more
       via  d978e05 librpc: add clusapi_ResourceControlCode to IDL.
       via  f9788a8 s4-torture: also test CLUSCTL_CLUSTER_CHECK_VOTER_DOWN.
       via  4075d1c s4-torture: add test for CreateGroupEnum.
       via  8142b38 librpc: add ClusterResTypeEnumType to IDL.
       via  8ce0aae s4-torture: add test for CreateResTypeEnum().
       via  31d0ef9 s4-torture: test CLUSCTL_GROUP_GET_FLAGS GroupControl.
       via  de11f1b librpc: add CLUS_RESOURCE_CLASS_INFO to IDL
       via  058032c s4-torture: add test for clusapi_CreateGroupResourceEnum
       via  6fe2a2b librpc: add ClusterGroupEnumType enum to IDL.
       via  6ee7617 s4-torture: add new tests for clusapi resourcetypes.
       via  71d3abb s4-torture: Fix logic errors in node and group control 
clusapi tests.
       via  04d5a22 librpc: add clusapi_ResourceTypeControlCode enum.
       via  be9a44a s4-torture: test multiple different cluster control codes.
      from  82778a6 pidl: fix field2name wireshark dissector test.

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit d1c30aba04dd25fd9abc04005c9aff300ca79c4a
Author: Volker Lendecke <v...@samba.org>
Date:   Tue Sep 6 11:46:39 2016 +0200

    lib: call_backtrace() is no more
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Martin Schwenke <mar...@meltin.net>
    
    Autobuild-User(master): Jeremy Allison <j...@samba.org>
    Autobuild-Date(master): Thu Sep  8 03:51:34 CEST 2016 on sn-devel-144

commit d978e058a5131c98a32dda2992b406042990eaa0
Author: Günther Deschner <g...@samba.org>
Date:   Wed May 11 14:18:02 2016 +0200

    librpc: add clusapi_ResourceControlCode to IDL.
    
    Guenther
    
    Signed-off-by: Guenther Deschner <g...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit f9788a84247f5709a1df65cc2cd7ab83d658a693
Author: Günther Deschner <g...@samba.org>
Date:   Sat May 7 01:24:28 2016 +0200

    s4-torture: also test CLUSCTL_CLUSTER_CHECK_VOTER_DOWN.
    
    Guenther
    
    Signed-off-by: Guenther Deschner <g...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 4075d1c2640c7d20aa7b862a637ba05eaaf07701
Author: Günther Deschner <g...@samba.org>
Date:   Wed May 4 01:34:20 2016 +0200

    s4-torture: add test for CreateGroupEnum.
    
    Guenther
    
    Signed-off-by: Guenther Deschner <g...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 8142b38c02a73e2f873d5172394dbe93c0783a52
Author: Günther Deschner <g...@samba.org>
Date:   Wed May 4 00:40:10 2016 +0200

    librpc: add ClusterResTypeEnumType to IDL.
    
    Guenther
    
    Signed-off-by: Guenther Deschner <g...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 8ce0aaef505ddfc3df87ce159c38773becfa42e1
Author: Günther Deschner <g...@samba.org>
Date:   Wed May 4 00:39:48 2016 +0200

    s4-torture: add test for CreateResTypeEnum().
    
    Guenther
    
    Signed-off-by: Guenther Deschner <g...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 31d0ef96f8e91d74015eed09d4ae9b8d3312a01c
Author: Günther Deschner <g...@samba.org>
Date:   Tue May 3 17:38:29 2016 +0200

    s4-torture: test CLUSCTL_GROUP_GET_FLAGS GroupControl.
    
    Guenther
    
    Signed-off-by: Guenther Deschner <g...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit de11f1b32b0ed75a3227ef3a10d744224dec06dd
Author: Günther Deschner <g...@samba.org>
Date:   Tue May 3 17:18:40 2016 +0200

    librpc: add CLUS_RESOURCE_CLASS_INFO to IDL
    
    Guenther
    
    Signed-off-by: Guenther Deschner <g...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 058032c58b5c0d76bb2d491c862f123d76afd5c9
Author: Günther Deschner <g...@samba.org>
Date:   Tue May 3 12:59:24 2016 +0200

    s4-torture: add test for clusapi_CreateGroupResourceEnum
    
    Guenther
    
    Signed-off-by: Guenther Deschner <g...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 6fe2a2bb9d6786e4977aad2b0ae75c48f05f3ea5
Author: Günther Deschner <g...@samba.org>
Date:   Tue May 3 12:58:07 2016 +0200

    librpc: add ClusterGroupEnumType enum to IDL.
    
    Guenther
    
    Signed-off-by: Guenther Deschner <g...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 6ee7617207a1fef04245be86ba14ebcb65982181
Author: Günther Deschner <g...@samba.org>
Date:   Tue May 3 11:19:38 2016 +0200

    s4-torture: add new tests for clusapi resourcetypes.
    
    Guenther
    
    Signed-off-by: Guenther Deschner <g...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 71d3abbdc45ba5b5a1bcafa98949a89968dbb0fc
Author: Günther Deschner <g...@samba.org>
Date:   Mon May 2 17:53:38 2016 +0200

    s4-torture: Fix logic errors in node and group control clusapi tests.
    
    Guenther
    
    Signed-off-by: Guenther Deschner <g...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 04d5a228c0fa6433909763b0c6cd70607f056d17
Author: Günther Deschner <g...@samba.org>
Date:   Mon May 2 17:07:04 2016 +0200

    librpc: add clusapi_ResourceTypeControlCode enum.
    
    Guenther
    
    Signed-off-by: Guenther Deschner <g...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit be9a44a0f0e7f7195e9cb8805cbff207e9ec405c
Author: Günther Deschner <g...@samba.org>
Date:   Mon May 2 14:53:13 2016 +0200

    s4-torture: test multiple different cluster control codes.
    
    Guenther
    
    Signed-off-by: Guenther Deschner <g...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

-----------------------------------------------------------------------

Summary of changes:
 lib/util/samba_util.h         |   2 -
 librpc/idl/clusapi.idl        | 133 +++++++++++-
 source4/torture/rpc/clusapi.c | 490 +++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 611 insertions(+), 14 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/util/samba_util.h b/lib/util/samba_util.h
index c339161..416fde8 100644
--- a/lib/util/samba_util.h
+++ b/lib/util/samba_util.h
@@ -66,8 +66,6 @@ extern const char *panic_action;
 /**
  * Write backtrace to debug log
  */
-_PUBLIC_ void call_backtrace(void);
-
 _PUBLIC_ void dump_core_setup(const char *progname, const char *logfile);
 
 /**
diff --git a/librpc/idl/clusapi.idl b/librpc/idl/clusapi.idl
index 8c4a227..6c86f10 100644
--- a/librpc/idl/clusapi.idl
+++ b/librpc/idl/clusapi.idl
@@ -791,10 +791,15 @@ import "winreg.idl", "misc.idl";
        /*****************/
        /* Function 0x35 */
 
+       typedef [bitmap32bit] bitmap {
+               CLUSTER_GROUP_ENUM_CONTAINS             = 0x00000001,
+               CLUSTER_GROUP_ENUM_NODES                = 0x00000002
+       } ClusterGroupEnumType;
+
        WERROR
        clusapi_CreateGroupResourceEnum(
                [ in ] HGROUP_RPC hGroup,
-               [ in ] uint32 dwType,
+               [ in ] ClusterGroupEnumType dwType,
                [ out ] ENUM_LIST **ReturnEnum,
                [ out ] WERROR *rpc_status
        );
@@ -1042,10 +1047,83 @@ import "winreg.idl", "misc.idl";
        /*****************/
        /* Function 0x49 */
 
+       typedef [v1_enum] enum {
+               CLUS_RESCLASS_UNKNOWN   = 0x00000000,
+               CLUS_RESCLASS_STORAGE   = 0x00000001,
+               CLUS_RESCLASS_NETWORK   = 0x00000002
+       } clusapi_ResourceClass;
+
+       typedef [public] struct {
+               clusapi_ResourceClass Class;
+               uint32 SubClass;
+       } CLUS_RESOURCE_CLASS_INFO;
+
+       typedef [v1_enum] enum {
+               CLUSCTL_RESOURCE_UNKNOWN                        = 0x01000000,
+               CLUSCTL_RESOURCE_GET_CHARACTERISTICS            = 0x01000005,
+               CLUSCTL_RESOURCE_GET_FLAGS                      = 0x01000009,
+               CLUSCTL_RESOURCE_GET_CLASS_INFO                 = 0x0100000D,
+               CLUSCTL_RESOURCE_GET_REQUIRED_DEPENDENCIES      = 0x01000011,
+               CLUSCTL_RESOURCE_GET_NAME                       = 0x01000029,
+               CLUSCTL_RESOURCE_GET_RESOURCE_TYPE              = 0x0100002D,
+               CLUSCTL_RESOURCE_GET_ID                         = 0x01000039,
+               CLUSCTL_RESOURCE_ENUM_COMMON_PROPERTIES         = 0x01000051,
+               CLUSCTL_RESOURCE_GET_RO_COMMON_PROPERTIES       = 0x01000055,
+               CLUSCTL_RESOURCE_GET_COMMON_PROPERTIES          = 0x01000059,
+               CLUSCTL_RESOURCE_SET_COMMON_PROPERTIES          = 0x0140005E,
+               CLUSCTL_RESOURCE_VALIDATE_COMMON_PROPERTIES     = 0x01000061,
+               CLUSCTL_RESOURCE_GET_COMMON_PROPERTY_FMTS       = 0x01000065,
+               CLUSCTL_RESOURCE_ENUM_PRIVATE_PROPERTIES        = 0x01000079,
+               CLUSCTL_RESOURCE_GET_RO_PRIVATE_PROPERTIES      = 0x0100007D,
+               CLUSCTL_RESOURCE_GET_PRIVATE_PROPERTIES         = 0x01000081,
+               CLUSCTL_RESOURCE_SET_PRIVATE_PROPERTIES         = 0x01400086,
+               CLUSCTL_RESOURCE_VALIDATE_PRIVATE_PROPERTIES    = 0x01000089,
+               CLUSCTL_RESOURCE_GET_PRIVATE_PROPERTY_FMTS      = 0x0100008D,
+               CLUSCTL_RESOURCE_ADD_REGISTRY_CHECKPOINT        = 0x014000A2,
+               CLUSCTL_RESOURCE_DELETE_REGISTRY_CHECKPOINT     = 0x014000A6,
+               CLUSCTL_RESOURCE_GET_REGISTRY_CHECKPOINTS       = 0x010000A9,
+               CLUSCTL_RESOURCE_ADD_CRYPTO_CHECKPOINT          = 0x014000AE,
+               CLUSCTL_RESOURCE_DELETE_CRYPTO_CHECKPOINT       = 0x014000B2,
+               CLUSCTL_RESOURCE_GET_CRYPTO_CHECKPOINTS         = 0x010000B5,
+               CLUSCTL_RESOURCE_UPGRADE_DLL                    = 0x014000BA,
+               CLUSCTL_RESOURCE_ADD_REGISTRY_CHECKPOINT_64BIT  = 0x014000BE,
+               CLUSCTL_RESOURCE_ADD_REGISTRY_CHECKPOINT_32BIT  = 0x014000C2,
+               CLUSCTL_RESOURCE_GET_NETWORK_NAME               = 0x01000169,
+               CLUSCTL_RESOURCE_NETNAME_REGISTER_DNS_RECORDS   = 0x01000172,
+               CLUSCTL_RESOURCE_GET_DNS_NAME                   = 0x01000175,
+               CLUSCTL_RESOURCE_NETNAME_SET_PWD_INFO           = 0x0100017A,
+               CLUSCTL_RESOURCE_NETNAME_DELETE_CO              = 0x0100017E,
+               CLUSCTL_RESOURCE_NETNAME_VALIDATE_VCO           = 0x01000181,
+               CLUSCTL_RESOURCE_NETNAME_RESET_VCO              = 0x01000185,
+               CLUSCTL_RESOURCE_NETNAME_CREDS_UPDATED          = 0x01c0018a,
+               CLUSCTL_RESOURCE_STORAGE_GET_DISK_INFO          = 0x01000191,
+               CLUSCTL_RESOURCE_STORAGE_IS_PATH_VALID          = 0x01000199,
+               CLUSCTL_RESOURCE_IPADDRESS_RENEW_LEASE          = 0x014001BE,
+               CLUSCTL_RESOURCE_IPADDRESS_RELEASE_LEASE        = 0x014001C2,
+               CLUSCTL_RESOURCE_QUERY_MAINTENANCE_MODE         = 0x010001E1,
+               CLUSCTL_RESOURCE_SET_MAINTENANCE_MODE           = 0x014001E6,
+               CLUSCTL_RESOURCE_STORAGE_SET_DRIVELETTER        = 0x014001EA,
+               CLUSCTL_RESOURCE_STORAGE_GET_DISK_INFO_EX       = 0x010001F1,
+               CLUSCTL_RESOURCE_STORAGE_GET_DIRTY              = 0x01000219,
+               CLUSCTL_RESOURCE_STORAGE_GET_MOUNTPOINTS        = 0x01000211,
+               CLUSCTL_RESOURCE_STORAGE_GET_SHARED_VOLUME_INFO = 0x01000225,
+               CLUSCTL_RESOURCE_VM_START_MIGRATION             = 0x01600004,
+               CLUSCTL_RESOURCE_VM_CANCEL_MIGRATION            = 0x01600008,
+               CLUSCTL_RESOURCE_SET_CSV_MAINTENANCE_MODE       = 0x01400296,
+               CLUSCTL_RESOURCE_ENABLE_SHARED_VOLUME_DIRECTIO  = 0x0140028a,
+               CLUSCTL_RESOURCE_DISABLE_SHARED_VOLUME_DIRECTIO = 0x0140028e,
+               CLUSCTL_RESOURCE_SET_SHARED_VOLUME_BACKUP_MODE  = 0x0140029a,
+               CLUSCTL_RESOURCE_GET_RELATED_RESOURCE_NAMES     = 0x01001fad,
+               CLUSCTL_RESOURCE_POOL_GET_DRIVE_INFO            = 0x010002b5,
+               CLUSCTL_RESOURCE_CLOUD_WITNESS_UPDATE_TOKEN     = 0x014020e6,
+               CLUSCTL_RESOURCE_NETNAME_CHECK_OU_PERMISSIONS   = 0x07002121,
+               CLUSCTL_RESOURCE_NETNAME_CHECK_AD_STATE         = 0x07002125
+       } clusapi_ResourceControlCode;
+
        WERROR
        clusapi_ResourceControl(
                [ in ] HRES_RPC hResource,
-               [ in ] uint32 dwControlCode,
+               [ in ] clusapi_ResourceControlCode dwControlCode,
                [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer,
                [ in ] uint32 nInBufferSize,
                [ out, size_is(nOutBufferSize),
@@ -1078,11 +1156,53 @@ import "winreg.idl", "misc.idl";
        /*****************/
        /* Function 0x4B */
 
+       typedef [v1_enum] enum {
+               CLUSCTL_RESOURCE_TYPE_UNKNOWN                           = 
0x02000000,
+               CLUSCTL_RESOURCE_TYPE_GET_CHARACTERISTICS               = 
0x02000005,
+               CLUSCTL_RESOURCE_TYPE_GET_FLAGS                         = 
0x02000009,
+               CLUSCTL_RESOURCE_TYPE_GET_CLASS_INFO                    = 
0x0200000D,
+               CLUSCTL_RESOURCE_TYPE_GET_REQUIRED_DEPENDENCIES         = 
0x02000011,
+               CLUSCTL_RESOURCE_TYPE_GET_ARB_TIMEOUT                   = 
0x02000015,
+               CLUSCTL_RESOURCE_TYPE_ENUM_COMMON_PROPERTIES            = 
0x02000051,
+               CLUSCTL_RESOURCE_TYPE_GET_RO_COMMON_PROPERTIES          = 
0x02000055,
+               CLUSCTL_RESOURCE_TYPE_GET_COMMON_PROPERTIES             = 
0x02000059,
+               CLUSCTL_RESOURCE_TYPE_SET_COMMON_PROPERTIES             = 
0x0240005E,
+               CLUSCTL_RESOURCE_TYPE_VALIDATE_COMMON_PROPERTIES        = 
0x02000061,
+               CLUSCTL_RESOURCE_TYPE_GET_COMMON_PROPERTY_FMTS          = 
0x02000065,
+               CLUSCTL_RESOURCE_TYPE_GET_COMMON_RESOURCE_PROPERTY_FMTS = 
0x02000069,
+               CLUSCTL_RESOURCE_TYPE_ENUM_PRIVATE_PROPERTIES           = 
0x02000079,
+               CLUSCTL_RESOURCE_TYPE_GET_RO_PRIVATE_PROPERTIES         = 
0x0200007D,
+               CLUSCTL_RESOURCE_TYPE_GET_PRIVATE_PROPERTIES            = 
0x02000081,
+               CLUSCTL_RESOURCE_TYPE_SET_PRIVATE_PROPERTIES            = 
0x02400086,
+               CLUSCTL_RESOURCE_TYPE_VALIDATE_PRIVATE_PROPERTIES       = 
0x02000089,
+               CLUSCTL_RESOURCE_TYPE_GET_PRIVATE_PROPERTY_FMTS         = 
0x0200008D,
+               CLUSCTL_RESOURCE_TYPE_GET_PRIVATE_RESOURCE_PROPERTY_FMTS= 
0x02000091,
+               CLUSCTL_RESOURCE_TYPE_STORAGE_GET_AVAILABLE_DISKS       = 
0x02000195,
+               CLUSCTL_RESOURCE_TYPE_NETNAME_VALIDATE_NETNAME          = 
0x02000235,
+               CLUSCTL_RESOURCE_TYPE_VALIDATE_PATH                     = 
0x02000231,
+               CLUSCTL_RESOURCE_TYPE_GEN_APP_VALIDATE_DIRECTORY        = 
0x02000239,
+               CLUSCTL_RESOURCE_TYPE_STORAGE_GET_DRIVELETTERS          = 
0x020001ED,
+               CLUSCTL_RESOURCE_TYPE_STORAGE_GET_AVAILABLE_DISKS_EX    = 
0x020001F5,
+               CLUSCTL_RESOURCE_TYPE_STORAGE_REMAP_DRIVELETTER         = 
0x02000201,
+               CLUSCTL_RESOURCE_TYPE_STORAGE_GET_DISKID                = 
0x02000205,
+               CLUSCTL_RESOURCE_TYPE_STORAGE_IS_CLUSTERABLE            = 
0x02000209,
+               CLUSCTL_RESOURCE_TYPE_STORAGE_RELEASE_OWNERSHIP         = 
0x0240020E,
+               CLUSCTL_RESOURCE_TYPE_STORAGE_IS_CSV_FILE               = 
0x1000229,
+               CLUSCTL_RESOURCE_TYPE_CLOUD_WITNESS_VALIDATE_CREDENTIALS= 
0x020020e1,
+               CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_ELIGIBLE_LOGDISKS = 
0x02002149,
+               CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_ELIGIBLE_TARGET_DATADISKS 
= 0x0200214D,
+               CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_ELIGIBLE_SOURCE_DATADISKS 
= 0x02002151,
+               CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_REPLICA_VOLUMES   = 
0x02002159,
+               CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_LOG_VOLUME        = 
0x0200215D,
+               CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_REPLICATED_DISKS  = 
0x02002155,
+               CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_RESOURCE_GROUP    = 
0x02002161
+       } clusapi_ResourceTypeControlCode;
+
        WERROR
        clusapi_ResourceTypeControl(
                [ in ] HCLUSTER_RPC hCluster,
                [ in, string ] [charset(UTF16)] uint16 *lpszResourceTypeName,
-               [ in ] uint32 dwControlCode,
+               [ in ] clusapi_ResourceTypeControlCode dwControlCode,
                [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer,
                [ in ] uint32 nInBufferSize,
                [ out, size_is(nOutBufferSize),
@@ -1507,10 +1627,15 @@ import "winreg.idl", "misc.idl";
        /*****************/
        /* Function 0x67 */
 
+       typedef [bitmap32bit] bitmap {
+               CLUSTER_RESOURCE_TYPE_ENUM_NODES        = 0x00000001,
+               CLUSTER_RESOURCE_TYPE_ENUM_RESOURCES    = 0x00000002
+       } ClusterResTypeEnumType;
+
        WERROR
        clusapi_CreateResTypeEnum(
                [ in, string ] [charset(UTF16)] uint16 *lpszTypeName,
-               [ in ] uint32 dwType,
+               [ in ] ClusterResTypeEnumType dwType,
                [ out ] ENUM_LIST **ReturnEnum,
                [ out ] WERROR *rpc_status
        );
diff --git a/source4/torture/rpc/clusapi.c b/source4/torture/rpc/clusapi.c
index d59f24f..eebfa38 100644
--- a/source4/torture/rpc/clusapi.c
+++ b/source4/torture/rpc/clusapi.c
@@ -1148,6 +1148,129 @@ static bool test_GetResourceNetworkName(struct 
torture_context *tctx,
        return ret;
 }
 
+static bool test_ResourceTypeControl_int(struct torture_context *tctx,
+                                        struct dcerpc_pipe *p,
+                                        struct policy_handle *Cluster,
+                                        const char *resource_type,
+                                        enum clusapi_ClusterControlCode 
dwControlCode)
+{
+       struct dcerpc_binding_handle *b = p->binding_handle;
+       struct clusapi_ResourceTypeControl r;
+       uint32_t lpBytesReturned;
+       uint32_t lpcbRequired;
+       WERROR rpc_status;
+
+       r.in.hCluster = *Cluster;
+       r.in.lpszResourceTypeName = resource_type;
+       r.in.dwControlCode = 0;
+       r.in.lpInBuffer = NULL;
+       r.in.nInBufferSize = 0;
+       r.in.nOutBufferSize = 0;
+       r.out.lpOutBuffer = NULL;
+       r.out.lpBytesReturned = &lpBytesReturned;
+       r.out.lpcbRequired = &lpcbRequired;
+       r.out.rpc_status = &rpc_status;
+
+       torture_assert_ntstatus_ok(tctx,
+               dcerpc_clusapi_ResourceTypeControl_r(b, tctx, &r),
+               "ResourceTypeControl failed");
+
+       if (strequal(r.in.lpszResourceTypeName, "MSMQ") ||
+           strequal(r.in.lpszResourceTypeName, "MSMQTriggers")) {
+               torture_assert_werr_equal(tctx,
+                       r.out.result,
+                       WERR_CLUSTER_RESTYPE_NOT_SUPPORTED,
+                       "ResourceTypeControl failed");
+               return true;
+       }
+
+       torture_assert_werr_equal(tctx,
+               r.out.result,
+               WERR_INVALID_FUNCTION,
+               "ResourceTypeControl failed");
+
+       r.in.dwControlCode = dwControlCode;
+
+       torture_assert_ntstatus_ok(tctx,
+               dcerpc_clusapi_ResourceTypeControl_r(b, tctx, &r),
+               "ResourceTypeControl failed");
+
+       if (W_ERROR_EQUAL(r.out.result, WERR_MORE_DATA)) {
+               r.out.lpOutBuffer = talloc_zero_array(tctx, uint8_t, 
*r.out.lpcbRequired);
+               r.in.nOutBufferSize = *r.out.lpcbRequired;
+               torture_assert_ntstatus_ok(tctx,
+                       dcerpc_clusapi_ResourceTypeControl_r(b, tctx, &r),
+                       "ResourceTypeControl failed");
+       }
+       torture_assert_werr_ok(tctx,
+               r.out.result,
+               "ResourceTypeControl failed");
+
+       /* now try what happens when we query with a buffer large enough to hold
+        * the entire packet */
+
+       r.in.nOutBufferSize = 0x400;
+       r.out.lpOutBuffer = talloc_zero_array(tctx, uint8_t, 
r.in.nOutBufferSize);
+
+       torture_assert_ntstatus_ok(tctx,
+               dcerpc_clusapi_ResourceTypeControl_r(b, tctx, &r),
+               "ResourceTypeControl failed");
+       torture_assert_werr_ok(tctx,
+               r.out.result,
+               "ResourceTypeControl failed");
+       torture_assert(tctx, *r.out.lpBytesReturned < r.in.nOutBufferSize,
+               "lpBytesReturned expected to be smaller than input size 
nOutBufferSize");
+
+       return true;
+}
+
+static bool test_ResourceTypeControl(struct torture_context *tctx,
+                                    struct dcerpc_pipe *p,
+                                    const char *resourcetype_name)
+{
+       struct policy_handle Cluster;
+       bool ret;
+       uint32_t control_codes[] = {
+               CLUSCTL_RESOURCE_TYPE_GET_CLASS_INFO,
+               CLUSCTL_RESOURCE_TYPE_GET_CHARACTERISTICS,
+               CLUSCTL_RESOURCE_TYPE_GET_COMMON_PROPERTIES,
+               CLUSCTL_RESOURCE_TYPE_GET_RO_COMMON_PROPERTIES,
+               CLUSCTL_RESOURCE_TYPE_GET_PRIVATE_PROPERTIES
+       };
+       int i;
+
+       if (!test_OpenCluster_int(tctx, p, &Cluster)) {
+               return false;
+       }
+
+       for (i=0; i < ARRAY_SIZE(control_codes); i++) {
+               ret = test_ResourceTypeControl_int(tctx, p, &Cluster,
+                                                  resourcetype_name,
+                                                  control_codes[i]);
+               if (!ret) {
+                       goto done;
+               }
+       }
+
+ done:
+       test_CloseCluster_int(tctx, p, &Cluster);
+
+       return ret;
+}
+
+
+
+static bool test_one_resourcetype(struct torture_context *tctx,
+                                 struct dcerpc_pipe *p,
+                                 const char *resourcetype_name)
+{
+       torture_assert(tctx,
+               test_ResourceTypeControl(tctx, p, resourcetype_name),
+               "failed to query ResourceTypeControl");
+
+       return true;
+}
+
 static bool test_one_resource(struct torture_context *tctx,
                              struct dcerpc_pipe *p,
                              const char *resource_name)
@@ -1224,6 +1347,44 @@ static bool test_all_resources(struct torture_context 
*tctx,
        return true;
 }
 
+static bool test_all_resourcetypes(struct torture_context *tctx,
+                                  void *data)
+{
+       struct torture_clusapi_context *t =
+               talloc_get_type_abort(data, struct torture_clusapi_context);
+       struct dcerpc_binding_handle *b = t->p->binding_handle;
+       struct clusapi_CreateEnum r;
+       uint32_t dwType = CLUSTER_ENUM_RESTYPE;
+       struct ENUM_LIST *ReturnEnum;
+       WERROR rpc_status;
+       int i;
+
+       r.in.dwType = dwType;
+       r.out.ReturnEnum = &ReturnEnum;
+       r.out.rpc_status = &rpc_status;
+
+       torture_assert_ntstatus_ok(tctx,
+               dcerpc_clusapi_CreateEnum_r(b, tctx, &r),
+               "CreateEnum failed");
+       torture_assert_werr_ok(tctx,
+               r.out.result,
+               "CreateEnum failed");
+
+       for (i=0; i < ReturnEnum->EntryCount; i++) {
+
+               struct ENUM_ENTRY e = ReturnEnum->Entry[i];
+
+               torture_assert_int_equal(tctx, e.Type, CLUSTER_ENUM_RESTYPE, 
"type mismatch");
+
+               torture_assert(tctx,
+                       test_one_resourcetype(tctx, t->p, e.Name),
+                       "failed to test one resourcetype");
+       }
+
+       return true;
+}
+
+
 static bool test_OpenNode_int(struct torture_context *tctx,
                              struct dcerpc_pipe *p,
                              const char *lpszNodeName,
@@ -1522,12 +1683,12 @@ static bool test_NodeControl(struct torture_context 
*tctx,
        }
 
        ret = test_NodeControl_int(tctx, t->p, &hNode, 
CLUSCTL_NODE_GET_RO_COMMON_PROPERTIES);
-       if (ret) {
+       if (!ret) {
                return false;
        }
 
        ret = test_NodeControl_int(tctx, t->p, &hNode, CLUSCTL_NODE_GET_ID);
-       if (ret) {
+       if (!ret) {
                return false;
        }
 
@@ -1993,6 +2154,60 @@ static bool test_GroupControl_int(struct torture_context 
*tctx,
        return true;
 }
 
+static bool test_CreateGroupResourceEnum_int(struct torture_context *tctx,
+                                            struct dcerpc_pipe *p,
+                                            struct policy_handle *hGroup)
+{
+       struct dcerpc_binding_handle *b = p->binding_handle;
+       struct clusapi_CreateGroupResourceEnum r;
+       uint32_t dwType[] = {
+               CLUSTER_GROUP_ENUM_CONTAINS,
+               CLUSTER_GROUP_ENUM_NODES
+       };
+       uint32_t dwType_invalid[] = {
+               0x00000040,
+               0x00000080,
+               0x00000100 /* and many more ... */
+       };
+       struct ENUM_LIST *ReturnEnum;
+       WERROR rpc_status;
+       int i;
+
+       r.in.hGroup = *hGroup;
+
+       for (i=0; i < ARRAY_SIZE(dwType); i++) {
+
+               r.in.hGroup = *hGroup;
+               r.in.dwType = dwType[i];
+               r.out.ReturnEnum = &ReturnEnum;
+               r.out.rpc_status = &rpc_status;
+
+               torture_assert_ntstatus_ok(tctx,
+                       dcerpc_clusapi_CreateGroupResourceEnum_r(b, tctx, &r),
+                       "CreateGroupResourceEnum failed");
+               torture_assert_werr_ok(tctx,
+                       r.out.result,
+                       "CreateGroupResourceEnum failed");
+       }
+
+       for (i=0; i < ARRAY_SIZE(dwType_invalid); i++) {
+
+               r.in.dwType = dwType_invalid[i];
+               r.out.ReturnEnum = &ReturnEnum;
+               r.out.rpc_status = &rpc_status;
+
+               torture_assert_ntstatus_ok(tctx,
+                       dcerpc_clusapi_CreateGroupResourceEnum_r(b, tctx, &r),
+                       "CreateGroupResourceEnum failed");
+               torture_assert_werr_ok(tctx,
+                       r.out.result,
+                       "CreateGroupResourceEnum failed");
+       }
+
+       return true;
+}
+
+
 static bool test_GroupControl(struct torture_context *tctx,
                              void *data)
 {
@@ -2006,12 +2221,17 @@ static bool test_GroupControl(struct torture_context 
*tctx,
        }
 
        ret = test_GroupControl_int(tctx, t->p, &hGroup, 
CLUSCTL_GROUP_GET_CHARACTERISTICS);
-       if (ret) {
+       if (!ret) {
                return false;
        }
 
        ret = test_GroupControl_int(tctx, t->p, &hGroup, 
CLUSCTL_GROUP_GET_RO_COMMON_PROPERTIES);
-       if (ret) {
+       if (!ret) {
+               return false;
+       }
+
+       ret = test_GroupControl_int(tctx, t->p, &hGroup, 
CLUSCTL_GROUP_GET_FLAGS);
+       if (!ret) {
                return false;
        }
 
@@ -2122,6 +2342,14 @@ static bool test_one_group(struct torture_context *tctx,
                test_GetGroupState_int(tctx, p, &hGroup),
                "failed to query group id");
 
+       torture_assert(tctx,
+               test_GroupControl_int(tctx, p, &hGroup, 
CLUSCTL_GROUP_GET_FLAGS),
+               "failed to query group control");
+
+       torture_assert(tctx,
+               test_CreateGroupResourceEnum_int(tctx, p, &hGroup),
+               "failed to query resource enum");
+
        test_CloseGroup_int(tctx, p, &hGroup);
 
        return true;
@@ -2217,7 +2445,8 @@ static bool test_SetServiceAccountPassword(struct 
torture_context *tctx,
 
 static bool test_ClusterControl_int(struct torture_context *tctx,
                                    struct dcerpc_pipe *p,
-                                   struct policy_handle *Cluster)
+                                   struct policy_handle *Cluster,
+                                   enum clusapi_ClusterControlCode 
dwControlCode)
 {
        struct dcerpc_binding_handle *b = p->binding_handle;
        struct clusapi_ClusterControl r;
@@ -2243,7 +2472,7 @@ static bool test_ClusterControl_int(struct 
torture_context *tctx,
                WERR_INVALID_FUNCTION,
                "ClusterControl failed");
 
-       r.in.dwControlCode = CLUSCTL_CLUSTER_GET_RO_COMMON_PROPERTIES;
+       r.in.dwControlCode = dwControlCode;
 
        torture_assert_ntstatus_ok(tctx,
                dcerpc_clusapi_ClusterControl_r(b, tctx, &r),


-- 
Samba Shared Repository

Reply via email to