[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Thu Sep 8 01:52:04 UTC 2016


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 <vl at samba.org>
Date:   Tue Sep 6 11:46:39 2016 +0200

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

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

    librpc: add clusapi_ResourceControlCode to IDL.
    
    Guenther
    
    Signed-off-by: Guenther Deschner <gd at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit f9788a84247f5709a1df65cc2cd7ab83d658a693
Author: Günther Deschner <gd at 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 <gd at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

    s4-torture: add test for CreateGroupEnum.
    
    Guenther
    
    Signed-off-by: Guenther Deschner <gd at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

    librpc: add ClusterResTypeEnumType to IDL.
    
    Guenther
    
    Signed-off-by: Guenther Deschner <gd at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

    s4-torture: add test for CreateResTypeEnum().
    
    Guenther
    
    Signed-off-by: Guenther Deschner <gd at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 31d0ef96f8e91d74015eed09d4ae9b8d3312a01c
Author: Günther Deschner <gd at 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 <gd at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit de11f1b32b0ed75a3227ef3a10d744224dec06dd
Author: Günther Deschner <gd at 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 <gd at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

    s4-torture: add test for clusapi_CreateGroupResourceEnum
    
    Guenther
    
    Signed-off-by: Guenther Deschner <gd at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

    librpc: add ClusterGroupEnumType enum to IDL.
    
    Guenther
    
    Signed-off-by: Guenther Deschner <gd at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 6ee7617207a1fef04245be86ba14ebcb65982181
Author: Günther Deschner <gd at 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 <gd at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 71d3abbdc45ba5b5a1bcafa98949a89968dbb0fc
Author: Günther Deschner <gd at 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 <gd at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

    librpc: add clusapi_ResourceTypeControlCode enum.
    
    Guenther
    
    Signed-off-by: Guenther Deschner <gd at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit be9a44a0f0e7f7195e9cb8805cbff207e9ec405c
Author: Günther Deschner <gd at 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 <gd at samba.org>
    Reviewed-by: Jeremy Allison <jra at 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



More information about the samba-cvs mailing list