s3-rpc_client: add and use rpc_client/rpc_client.h.
[kai/samba.git] / source3 / lib / netapi / samr.c
index fa190e637c638ba321ec4205fce228752b84fa1f..544698004a06200e648bfb1d9eaa1c8a41d06353 100644 (file)
 #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"
 
 /****************************************************************
 ****************************************************************/
@@ -34,7 +37,7 @@ WERROR libnetapi_samr_open_domain(struct libnetapi_ctx *mem_ctx,
                                  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;
@@ -44,6 +47,7 @@ WERROR libnetapi_samr_open_domain(struct libnetapi_ctx *mem_ctx,
        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);
@@ -78,25 +82,36 @@ WERROR libnetapi_samr_open_domain(struct libnetapi_ctx *mem_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++) {
 
@@ -117,24 +132,34 @@ WERROR libnetapi_samr_open_domain(struct libnetapi_ctx *mem_ctx,
 
        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;
 
@@ -163,9 +188,10 @@ WERROR libnetapi_samr_open_builtin_domain(struct libnetapi_ctx *mem_ctx,
                                          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);
@@ -196,24 +222,35 @@ WERROR libnetapi_samr_open_builtin_domain(struct libnetapi_ctx *mem_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;
 
@@ -236,6 +273,8 @@ void libnetapi_samr_close_domain_handle(struct libnetapi_ctx *ctx,
                                        struct policy_handle *handle)
 {
        struct libnetapi_private_ctx *priv;
+       struct dcerpc_binding_handle *b;
+       NTSTATUS result;
 
        if (!is_valid_policy_hnd(handle)) {
                return;
@@ -244,11 +283,13 @@ void libnetapi_samr_close_domain_handle(struct libnetapi_ctx *ctx,
        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);
 }
@@ -260,6 +301,8 @@ void libnetapi_samr_close_builtin_handle(struct libnetapi_ctx *ctx,
                                         struct policy_handle *handle)
 {
        struct libnetapi_private_ctx *priv;
+       struct dcerpc_binding_handle *b;
+       NTSTATUS result;
 
        if (!is_valid_policy_hnd(handle)) {
                return;
@@ -268,11 +311,13 @@ void libnetapi_samr_close_builtin_handle(struct libnetapi_ctx *ctx,
        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);
 }
@@ -284,6 +329,8 @@ void libnetapi_samr_close_connect_handle(struct libnetapi_ctx *ctx,
                                         struct policy_handle *handle)
 {
        struct libnetapi_private_ctx *priv;
+       struct dcerpc_binding_handle *b;
+       NTSTATUS result;
 
        if (!is_valid_policy_hnd(handle)) {
                return;
@@ -292,11 +339,13 @@ void libnetapi_samr_close_connect_handle(struct libnetapi_ctx *ctx,
        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);
 }