summaryrefslogtreecommitdiff
path: root/source/lib/netapi/samr.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/lib/netapi/samr.c')
-rw-r--r--source/lib/netapi/samr.c319
1 files changed, 0 insertions, 319 deletions
diff --git a/source/lib/netapi/samr.c b/source/lib/netapi/samr.c
deleted file mode 100644
index dbcef38dc7..0000000000
--- a/source/lib/netapi/samr.c
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * NetApi Samr Support
- * Copyright (C) Guenther Deschner 2008
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-#include "lib/netapi/netapi.h"
-#include "lib/netapi/netapi_private.h"
-
-/****************************************************************
-****************************************************************/
-
-WERROR libnetapi_samr_open_domain(struct libnetapi_ctx *mem_ctx,
- struct rpc_pipe_client *pipe_cli,
- uint32_t connect_mask,
- uint32_t domain_mask,
- struct policy_handle *connect_handle,
- struct policy_handle *domain_handle,
- struct dom_sid2 **domain_sid)
-{
- NTSTATUS status;
- WERROR werr;
- struct libnetapi_private_ctx *priv;
- uint32_t resume_handle = 0;
- uint32_t num_entries = 0;
- struct samr_SamArray *sam = NULL;
- const char *domain_name = NULL;
- struct lsa_String lsa_domain_name;
- bool domain_found = true;
- int i;
-
- 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.domain_handle)) {
- if ((priv->samr.domain_mask & domain_mask) == domain_mask) {
- *domain_handle = priv->samr.domain_handle;
- } else {
- libnetapi_samr_close_domain_handle(mem_ctx,
- &priv->samr.domain_handle);
- }
- }
-
- if (priv->samr.domain_sid) {
- *domain_sid = priv->samr.domain_sid;
- }
-
- if (is_valid_policy_hnd(&priv->samr.connect_handle) &&
- ((priv->samr.connect_mask & connect_mask) == connect_mask) &&
- is_valid_policy_hnd(&priv->samr.domain_handle) &&
- (priv->samr.domain_mask & domain_mask) == domain_mask) {
- return WERR_OK;
- }
-
- if (!is_valid_policy_hnd(connect_handle)) {
- status = rpccli_try_samr_connects(pipe_cli, mem_ctx,
- connect_mask,
- connect_handle);
- if (!NT_STATUS_IS_OK(status)) {
- werr = ntstatus_to_werror(status);
- goto done;
- }
- }
-
- status = rpccli_samr_EnumDomains(pipe_cli, mem_ctx,
- connect_handle,
- &resume_handle,
- &sam,
- 0xffffffff,
- &num_entries);
- if (!NT_STATUS_IS_OK(status)) {
- werr = ntstatus_to_werror(status);
- goto done;
- }
-
- for (i=0; i<num_entries; i++) {
-
- domain_name = sam->entries[i].name.string;
-
- if (strequal(domain_name, builtin_domain_name())) {
- continue;
- }
-
- domain_found = true;
- break;
- }
-
- if (!domain_found) {
- werr = WERR_NO_SUCH_DOMAIN;
- goto done;
- }
-
- init_lsa_String(&lsa_domain_name, domain_name);
-
- status = rpccli_samr_LookupDomain(pipe_cli, mem_ctx,
- connect_handle,
- &lsa_domain_name,
- domain_sid);
- if (!NT_STATUS_IS_OK(status)) {
- werr = ntstatus_to_werror(status);
- goto done;
- }
-
- status = rpccli_samr_OpenDomain(pipe_cli, mem_ctx,
- connect_handle,
- domain_mask,
- *domain_sid,
- domain_handle);
- if (!NT_STATUS_IS_OK(status)) {
- werr = ntstatus_to_werror(status);
- goto done;
- }
-
- priv->samr.cli = pipe_cli;
-
- priv->samr.domain_name = domain_name;
- priv->samr.domain_sid = *domain_sid;
-
- priv->samr.connect_mask = connect_mask;
- priv->samr.connect_handle = *connect_handle;
-
- priv->samr.domain_mask = domain_mask;
- priv->samr.domain_handle = *domain_handle;
-
- werr = WERR_OK;
-
- done:
- return werr;
-}
-
-/****************************************************************
-****************************************************************/
-
-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,
- struct policy_handle *connect_handle,
- struct policy_handle *builtin_handle)
-{
- 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,
- connect_mask,
- connect_handle);
- if (!NT_STATUS_IS_OK(status)) {
- werr = ntstatus_to_werror(status);
- goto done;
- }
- }
-
- status = rpccli_samr_OpenDomain(pipe_cli, mem_ctx,
- connect_handle,
- builtin_mask,
- CONST_DISCARD(DOM_SID *, &global_sid_Builtin),
- builtin_handle);
- if (!NT_STATUS_IS_OK(status)) {
- werr = ntstatus_to_werror(status);
- 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:
- return werr;
-}
-
-/****************************************************************
-****************************************************************/
-
-void libnetapi_samr_close_domain_handle(struct libnetapi_ctx *ctx,
- struct policy_handle *handle)
-{
- struct libnetapi_private_ctx *priv;
-
- 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)) {
- return;
- }
-
- rpccli_samr_Close(priv->samr.cli, ctx, handle);
-
- ZERO_STRUCT(priv->samr.domain_handle);
-}
-
-/****************************************************************
-****************************************************************/
-
-void libnetapi_samr_close_builtin_handle(struct libnetapi_ctx *ctx,
- struct policy_handle *handle)
-{
- struct libnetapi_private_ctx *priv;
-
- 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)) {
- return;
- }
-
- rpccli_samr_Close(priv->samr.cli, ctx, handle);
-
- ZERO_STRUCT(priv->samr.builtin_handle);
-}
-
-/****************************************************************
-****************************************************************/
-
-void libnetapi_samr_close_connect_handle(struct libnetapi_ctx *ctx,
- struct policy_handle *handle)
-{
- struct libnetapi_private_ctx *priv;
-
- 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)) {
- return;
- }
-
- rpccli_samr_Close(priv->samr.cli, ctx, handle);
-
- ZERO_STRUCT(priv->samr.connect_handle);
-}
-
-/****************************************************************
-****************************************************************/
-
-void libnetapi_samr_free(struct libnetapi_ctx *ctx)
-{
- struct libnetapi_private_ctx *priv;
-
- if (!ctx->private_data) {
- return;
- }
-
- priv = talloc_get_type_abort(ctx->private_data,
- struct libnetapi_private_ctx);
-
- libnetapi_samr_close_domain_handle(ctx, &priv->samr.domain_handle);
- libnetapi_samr_close_builtin_handle(ctx, &priv->samr.builtin_handle);
- libnetapi_samr_close_connect_handle(ctx, &priv->samr.connect_handle);
-}