diff options
Diffstat (limited to 'source3/rpcclient')
-rw-r--r-- | source3/rpcclient/cmd_clusapi.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/source3/rpcclient/cmd_clusapi.c b/source3/rpcclient/cmd_clusapi.c index 5b290d7864d..c18b79f16c0 100644 --- a/source3/rpcclient/cmd_clusapi.c +++ b/source3/rpcclient/cmd_clusapi.c @@ -342,6 +342,64 @@ static WERROR cmd_clusapi_offline_resource(struct rpc_pipe_client *cli, return WERR_OK; } +static WERROR cmd_clusapi_get_resource_state(struct rpc_pipe_client *cli, + TALLOC_CTX *mem_ctx, + int argc, + const char **argv) +{ + struct dcerpc_binding_handle *b = cli->binding_handle; + NTSTATUS status; + const char *lpszResourceName = "Cluster Name"; + WERROR Status; + struct policy_handle hResource; + WERROR rpc_status; + enum clusapi_ClusterResourceState State; + const char *NodeName; + const char *GroupName; + WERROR result, ignore; + + if (argc >= 2) { + lpszResourceName = argv[1]; + } + + status = dcerpc_clusapi_OpenResource(b, mem_ctx, + lpszResourceName, + &Status, + &rpc_status, + &hResource); + if (!NT_STATUS_IS_OK(status)) { + return ntstatus_to_werror(status); + } + + if (!W_ERROR_IS_OK(Status)) { + printf("Status: %s\n", win_errstr(Status)); + return Status; + } + + status = dcerpc_clusapi_GetResourceState(b, mem_ctx, + hResource, + &State, + &NodeName, + &GroupName, + &rpc_status, + &result); + dcerpc_clusapi_CloseResource(b, mem_ctx, + &hResource, + &ignore); + + if (!NT_STATUS_IS_OK(status)) { + return ntstatus_to_werror(status); + } + + if (!W_ERROR_IS_OK(Status)) { + printf("Status: %s\n", win_errstr(Status)); + return Status; + } + + printf("rpc_status: %s\n", win_errstr(rpc_status)); + + return WERR_OK; +} struct cmd_set clusapi_commands[] = { @@ -354,5 +412,6 @@ struct cmd_set clusapi_commands[] = { { "clusapi_open_resource", RPC_RTYPE_WERROR, NULL, cmd_clusapi_open_resource, &ndr_table_clusapi, NULL, "bla", "" }, { "clusapi_online_resource", RPC_RTYPE_WERROR, NULL, cmd_clusapi_online_resource, &ndr_table_clusapi, NULL, "bla", "" }, { "clusapi_offline_resource", RPC_RTYPE_WERROR, NULL, cmd_clusapi_offline_resource, &ndr_table_clusapi, NULL, "bla", "" }, + { "clusapi_get_resource_state", RPC_RTYPE_WERROR, NULL, cmd_clusapi_get_resource_state, &ndr_table_clusapi, NULL, "bla", "" }, { NULL } }; |