[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