]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
netapi: use private samr structure in libnetapi_samr_open_builtin().
authorGünther Deschner <gd@samba.org>
Thu, 17 Jul 2008 18:16:10 +0000 (20:16 +0200)
committerGünther Deschner <gd@samba.org>
Fri, 18 Jul 2008 14:52:34 +0000 (16:52 +0200)
Guenther

source/lib/netapi/netapi_private.h
source/lib/netapi/samr.c

index 246672a3491c351dad8c73eed11ff2c5585a2e95..37c837d8974ee96e605891e6e9e696728acb62b5 100644 (file)
@@ -58,7 +58,7 @@ WERROR libnetapi_samr_open_domain(struct libnetapi_ctx *mem_ctx,
                                  struct policy_handle *connect_handle,
                                  struct policy_handle *domain_handle,
                                  struct dom_sid2 **domain_sid);
-WERROR libnetapi_samr_open_builtin_domain(TALLOC_CTX *mem_ctx,
+WERROR libnetapi_samr_open_builtin_domain(struct libnetapi_ctx *mem_ctx,
                                          struct rpc_pipe_client *pipe_cli,
                                          uint32_t connect_mask,
                                          uint32_t builtin_mask,
index e83b8eba9c512e1c171b5eac7f122baf13f08e3a..19cf6cb338dd25b9a17d80602616851553a956fa 100644 (file)
@@ -154,7 +154,7 @@ WERROR libnetapi_samr_open_domain(struct libnetapi_ctx *mem_ctx,
 /****************************************************************
 ****************************************************************/
 
-WERROR libnetapi_samr_open_builtin_domain(TALLOC_CTX *mem_ctx,
+WERROR libnetapi_samr_open_builtin_domain(struct libnetapi_ctx *mem_ctx,
                                          struct rpc_pipe_client *pipe_cli,
                                          uint32_t connect_mask,
                                          uint32_t builtin_mask,
@@ -163,6 +163,35 @@ WERROR libnetapi_samr_open_builtin_domain(TALLOC_CTX *mem_ctx,
 {
        NTSTATUS status;
        WERROR werr;
+       struct libnetapi_private_ctx *priv;
+
+       priv = talloc_get_type_abort(mem_ctx->private_data,
+               struct libnetapi_private_ctx);
+
+       if (is_valid_policy_hnd(&priv->samr.connect_handle)) {
+               if ((priv->samr.connect_mask & connect_mask) == connect_mask) {
+                       *connect_handle = priv->samr.connect_handle;
+               } else {
+                       libnetapi_samr_close_connect_handle(mem_ctx,
+                               &priv->samr.connect_handle);
+               }
+       }
+
+       if (is_valid_policy_hnd(&priv->samr.builtin_handle)) {
+               if ((priv->samr.builtin_mask & builtin_mask) == builtin_mask) {
+                       *builtin_handle = priv->samr.builtin_handle;
+               } else {
+                       libnetapi_samr_close_builtin_handle(mem_ctx,
+                               &priv->samr.builtin_handle);
+               }
+       }
+
+       if (is_valid_policy_hnd(&priv->samr.connect_handle) &&
+           ((priv->samr.connect_mask & connect_mask) == connect_mask) &&
+           is_valid_policy_hnd(&priv->samr.builtin_handle) &&
+           (priv->samr.builtin_mask & builtin_mask) == builtin_mask) {
+               return WERR_OK;
+       }
 
        if (!is_valid_policy_hnd(connect_handle)) {
                status = rpccli_try_samr_connects(pipe_cli, mem_ctx,
@@ -184,6 +213,14 @@ WERROR libnetapi_samr_open_builtin_domain(TALLOC_CTX *mem_ctx,
                goto done;
        }
 
+       priv->samr.cli                  = pipe_cli;
+
+       priv->samr.connect_mask         = connect_mask;
+       priv->samr.connect_handle       = *connect_handle;
+
+       priv->samr.builtin_mask         = builtin_mask;
+       priv->samr.builtin_handle       = *builtin_handle;
+
        werr = WERR_OK;
 
  done: