#include "includes.h"
#include "lib/netapi/netapi.h"
#include "lib/netapi/netapi_private.h"
-#include "../librpc/gen_ndr/cli_samr.h"
+#include "rpc_client/rpc_client.h"
+#include "../librpc/gen_ndr/ndr_samr_c.h"
#include "rpc_client/cli_samr.h"
+#include "rpc_client/init_lsa.h"
+#include "../libcli/security/security.h"
/****************************************************************
****************************************************************/
struct policy_handle *domain_handle,
struct dom_sid2 **domain_sid)
{
- NTSTATUS status;
+ NTSTATUS status, result;
WERROR werr;
struct libnetapi_private_ctx *priv;
uint32_t resume_handle = 0;
struct lsa_String lsa_domain_name;
bool domain_found = true;
int i;
+ struct dcerpc_binding_handle *b = pipe_cli->binding_handle;
priv = talloc_get_type_abort(mem_ctx->private_data,
struct libnetapi_private_ctx);
}
if (!is_valid_policy_hnd(connect_handle)) {
- status = rpccli_try_samr_connects(pipe_cli, mem_ctx,
+ status = dcerpc_try_samr_connects(pipe_cli->binding_handle, mem_ctx,
+ pipe_cli->srv_name_slash,
connect_mask,
- connect_handle);
+ connect_handle,
+ &result);
if (!NT_STATUS_IS_OK(status)) {
werr = ntstatus_to_werror(status);
goto done;
}
+ if (!NT_STATUS_IS_OK(result)) {
+ werr = ntstatus_to_werror(result);
+ goto done;
+ }
}
- status = rpccli_samr_EnumDomains(pipe_cli, mem_ctx,
+ status = dcerpc_samr_EnumDomains(b, mem_ctx,
connect_handle,
&resume_handle,
&sam,
0xffffffff,
- &num_entries);
+ &num_entries,
+ &result);
if (!NT_STATUS_IS_OK(status)) {
werr = ntstatus_to_werror(status);
goto done;
}
+ if (!NT_STATUS_IS_OK(result)) {
+ werr = ntstatus_to_werror(result);
+ goto done;
+ }
for (i=0; i<num_entries; i++) {
init_lsa_String(&lsa_domain_name, domain_name);
- status = rpccli_samr_LookupDomain(pipe_cli, mem_ctx,
+ status = dcerpc_samr_LookupDomain(b, mem_ctx,
connect_handle,
&lsa_domain_name,
- domain_sid);
+ domain_sid,
+ &result);
if (!NT_STATUS_IS_OK(status)) {
werr = ntstatus_to_werror(status);
goto done;
}
+ if (!NT_STATUS_IS_OK(result)) {
+ werr = ntstatus_to_werror(result);
+ goto done;
+ }
- status = rpccli_samr_OpenDomain(pipe_cli, mem_ctx,
+ status = dcerpc_samr_OpenDomain(b, mem_ctx,
connect_handle,
domain_mask,
*domain_sid,
- domain_handle);
+ domain_handle,
+ &result);
if (!NT_STATUS_IS_OK(status)) {
werr = ntstatus_to_werror(status);
goto done;
}
+ if (!NT_STATUS_IS_OK(result)) {
+ werr = ntstatus_to_werror(result);
+ goto done;
+ }
priv->samr.cli = pipe_cli;
struct policy_handle *connect_handle,
struct policy_handle *builtin_handle)
{
- NTSTATUS status;
+ NTSTATUS status, result;
WERROR werr;
struct libnetapi_private_ctx *priv;
+ struct dcerpc_binding_handle *b = pipe_cli->binding_handle;
priv = talloc_get_type_abort(mem_ctx->private_data,
struct libnetapi_private_ctx);
}
if (!is_valid_policy_hnd(connect_handle)) {
- status = rpccli_try_samr_connects(pipe_cli, mem_ctx,
+ status = dcerpc_try_samr_connects(pipe_cli->binding_handle, mem_ctx,
+ pipe_cli->srv_name_slash,
connect_mask,
- connect_handle);
+ connect_handle,
+ &result);
if (!NT_STATUS_IS_OK(status)) {
werr = ntstatus_to_werror(status);
goto done;
}
+ if (!NT_STATUS_IS_OK(result)) {
+ werr = ntstatus_to_werror(result);
+ goto done;
+ }
}
- status = rpccli_samr_OpenDomain(pipe_cli, mem_ctx,
+ status = dcerpc_samr_OpenDomain(b, mem_ctx,
connect_handle,
builtin_mask,
- CONST_DISCARD(DOM_SID *, &global_sid_Builtin),
- builtin_handle);
+ CONST_DISCARD(struct dom_sid *, &global_sid_Builtin),
+ builtin_handle,
+ &result);
if (!NT_STATUS_IS_OK(status)) {
werr = ntstatus_to_werror(status);
goto done;
}
+ if (!NT_STATUS_IS_OK(result)) {
+ werr = ntstatus_to_werror(result);
+ goto done;
+ }
priv->samr.cli = pipe_cli;
struct policy_handle *handle)
{
struct libnetapi_private_ctx *priv;
+ struct dcerpc_binding_handle *b;
+ NTSTATUS result;
if (!is_valid_policy_hnd(handle)) {
return;
priv = talloc_get_type_abort(ctx->private_data,
struct libnetapi_private_ctx);
- if (!policy_hnd_equal(handle, &priv->samr.domain_handle)) {
+ if (!policy_handle_equal(handle, &priv->samr.domain_handle)) {
return;
}
- rpccli_samr_Close(priv->samr.cli, ctx, handle);
+ b = priv->samr.cli->binding_handle;
+
+ dcerpc_samr_Close(b, ctx, handle, &result);
ZERO_STRUCT(priv->samr.domain_handle);
}
struct policy_handle *handle)
{
struct libnetapi_private_ctx *priv;
+ struct dcerpc_binding_handle *b;
+ NTSTATUS result;
if (!is_valid_policy_hnd(handle)) {
return;
priv = talloc_get_type_abort(ctx->private_data,
struct libnetapi_private_ctx);
- if (!policy_hnd_equal(handle, &priv->samr.builtin_handle)) {
+ if (!policy_handle_equal(handle, &priv->samr.builtin_handle)) {
return;
}
- rpccli_samr_Close(priv->samr.cli, ctx, handle);
+ b = priv->samr.cli->binding_handle;
+
+ dcerpc_samr_Close(b, ctx, handle, &result);
ZERO_STRUCT(priv->samr.builtin_handle);
}
struct policy_handle *handle)
{
struct libnetapi_private_ctx *priv;
+ struct dcerpc_binding_handle *b;
+ NTSTATUS result;
if (!is_valid_policy_hnd(handle)) {
return;
priv = talloc_get_type_abort(ctx->private_data,
struct libnetapi_private_ctx);
- if (!policy_hnd_equal(handle, &priv->samr.connect_handle)) {
+ if (!policy_handle_equal(handle, &priv->samr.connect_handle)) {
return;
}
- rpccli_samr_Close(priv->samr.cli, ctx, handle);
+ b = priv->samr.cli->binding_handle;
+
+ dcerpc_samr_Close(b, ctx, handle, &result);
ZERO_STRUCT(priv->samr.connect_handle);
}