[SCM] Samba Shared Repository - branch master updated
Volker Lendecke
vlendec at samba.org
Thu May 17 09:31:03 UTC 2018
The branch, master has been updated
via 8109857 winbindd: Remove an unused function prototype
via 8f215b8 winbindd: Make "request_error()" static to winbindd.c
via 70ce35d winbindd: Make "request_ok()" static to winbindd.c
via 0e4e2a0 winbindd: Remove the "old" non-bool dispatch table
via 4051b70 winbindd: Make DOMAIN_INFO a proper async request
via 7b11e91 winbindd: winbindd_list_trusted_domains() -> bool_dispatch_table
via 4f8ea6d winbindd: winbindd_priv_pipe_dir() -> bool_dispatch_table
via a781596 winbindd: winbindd_ccache_save() -> bool_dispatch_table
via a180f40 winbindd: winbindd_ccache_ntlm_auth() -> bool_dispatch_table
via de162c0 winbindd: winbindd_dc_info() -> bool_dispatch_table
via 762d8ab winbindd: winbindd_netbios_name() -> bool_dispatch_table
via 05105ea winbindd: winbindd_domain_name() -> bool_dispatch_table
via c6b9a0f winbindd: winbindd_ping() -> bool_dispatch_table
via 25c365c winbindd: winbindd_info() -> bool_dispatch_table
via 214d78a winbindd: winbindd_interface_version() -> bool_dispatch_table
via 4109236 winbindd: Introduce "bool_dispatch_table"
from 87284da ctdb: Drop configuration file ctdbd.conf
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 8109857f374250a826a8f260b17e2804f09e95e3
Author: Volker Lendecke <vl at samba.org>
Date: Wed May 2 21:19:08 2018 +0200
winbindd: Remove an unused function prototype
This has been moved to async in 2009
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
Autobuild-User(master): Volker Lendecke <vl at samba.org>
Autobuild-Date(master): Thu May 17 11:30:18 CEST 2018 on sn-devel-144
commit 8f215b8db6600c2e7e1415374eeb0aaa6fcf6860
Author: Volker Lendecke <vl at samba.org>
Date: Wed May 2 21:23:49 2018 +0200
winbindd: Make "request_error()" static to winbindd.c
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 70ce35d528d9118f138de6688f94176d18bf6599
Author: Volker Lendecke <vl at samba.org>
Date: Wed May 2 21:22:45 2018 +0200
winbindd: Make "request_ok()" static to winbindd.c
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 0e4e2a088398c6fa3c42b69e009fc40b500c7453
Author: Volker Lendecke <vl at samba.org>
Date: Wed May 2 21:20:58 2018 +0200
winbindd: Remove the "old" non-bool dispatch table
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 4051b70450b4d6b693e67e4a772911dad3ec0668
Author: Volker Lendecke <vl at samba.org>
Date: Wed May 2 20:47:49 2018 +0200
winbindd: Make DOMAIN_INFO a proper async request
This has an async code path hidden inside. Expose that properly.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 7b11e917590ff581143ed8d5e01905aa3fb979bd
Author: Volker Lendecke <vl at samba.org>
Date: Fri May 4 21:19:06 2018 +0200
winbindd: winbindd_list_trusted_domains() -> bool_dispatch_table
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 4f8ea6da431142ce025a4b9281b8e9189b81f878
Author: Volker Lendecke <vl at samba.org>
Date: Wed May 2 20:27:43 2018 +0200
winbindd: winbindd_priv_pipe_dir() -> bool_dispatch_table
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit a781596ed663b6a47236684e8688dd3cec0f5f8a
Author: Volker Lendecke <vl at samba.org>
Date: Wed May 2 20:26:19 2018 +0200
winbindd: winbindd_ccache_save() -> bool_dispatch_table
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit a180f401f8af719c728ae49da94fc18df354f77e
Author: Volker Lendecke <vl at samba.org>
Date: Wed May 2 20:23:54 2018 +0200
winbindd: winbindd_ccache_ntlm_auth() -> bool_dispatch_table
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit de162c033c0708bfc76c1e698474b2f7225f25a9
Author: Volker Lendecke <vl at samba.org>
Date: Wed May 2 18:27:23 2018 +0200
winbindd: winbindd_dc_info() -> bool_dispatch_table
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 762d8ab7595cffd6fda79fd4efabf388f6bc3d13
Author: Volker Lendecke <vl at samba.org>
Date: Wed May 2 18:25:00 2018 +0200
winbindd: winbindd_netbios_name() -> bool_dispatch_table
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 05105ea0f8c5eef4c59e8e65b2b4a1bdaffa5279
Author: Volker Lendecke <vl at samba.org>
Date: Wed May 2 16:39:20 2018 +0200
winbindd: winbindd_domain_name() -> bool_dispatch_table
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit c6b9a0fd70e0ba010b1febb7da9c810960c1a887
Author: Volker Lendecke <vl at samba.org>
Date: Wed May 2 16:38:14 2018 +0200
winbindd: winbindd_ping() -> bool_dispatch_table
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 25c365c637776ef2a1fbab1c2ca46dcb7c21bfff
Author: Volker Lendecke <vl at samba.org>
Date: Wed May 2 16:36:49 2018 +0200
winbindd: winbindd_info() -> bool_dispatch_table
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 214d78a6fab55eac3a80e06daaf91763da135f49
Author: Volker Lendecke <vl at samba.org>
Date: Wed May 2 15:26:55 2018 +0200
winbindd: winbindd_interface_version() -> bool_dispatch_table
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 4109236cfdd9cec68acd67d46f2155f27d1549b6
Author: Volker Lendecke <vl at samba.org>
Date: Wed May 2 15:26:05 2018 +0200
winbindd: Introduce "bool_dispatch_table"
This is meant to replace the synchronous "dispatch_table".
The current dispatch_table assumes that every synchronous function does
the request_ok or request_error itself. This mixes two concerns: Doing
the work and shipping the reply to the winbind client. This new dispatch
table will make it possible to centralize shipping the reply to the
client. At a later stage this will enable easier statistics on how long
request processing took precisely.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
-----------------------------------------------------------------------
Summary of changes:
source3/winbindd/winbindd.c | 93 ++++++++++--------
source3/winbindd/winbindd_ccache_access.c | 33 +++----
source3/winbindd/winbindd_domain_info.c | 129 +++++++++++++++++++++++++
source3/winbindd/winbindd_misc.c | 151 +++++-------------------------
source3/winbindd/winbindd_proto.h | 32 ++++---
source3/winbindd/wscript_build | 1 +
6 files changed, 234 insertions(+), 205 deletions(-)
create mode 100644 source3/winbindd/winbindd_domain_info.c
Changeset truncated at 500 lines:
diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c
index 76d644b..34607ca 100644
--- a/source3/winbindd/winbindd.c
+++ b/source3/winbindd/winbindd.c
@@ -54,6 +54,8 @@
static bool client_is_idle(struct winbindd_cli_state *state);
static void remove_client(struct winbindd_cli_state *state);
static void winbindd_setup_max_fds(void);
+static void request_ok(struct winbindd_cli_state *state);
+static void request_error(struct winbindd_cli_state *state);
static bool opt_nocache = False;
static bool interactive = False;
@@ -521,37 +523,41 @@ static void winbind_msg_validate_cache(struct messaging_context *msg_ctx,
_exit(0);
}
-static struct winbindd_dispatch_table {
+static struct winbindd_bool_dispatch_table {
enum winbindd_cmd cmd;
- void (*fn)(struct winbindd_cli_state *state);
- const char *winbindd_cmd_name;
-} dispatch_table[] = {
-
- /* Enumeration functions */
-
- { WINBINDD_LIST_TRUSTDOM, winbindd_list_trusted_domains,
- "LIST_TRUSTDOM" },
-
- /* Miscellaneous */
-
- { WINBINDD_INFO, winbindd_info, "INFO" },
- { WINBINDD_PING, winbindd_ping, "PING" },
- { WINBINDD_INTERFACE_VERSION, winbindd_interface_version,
+ bool (*fn)(struct winbindd_cli_state *state);
+ const char *cmd_name;
+} bool_dispatch_table[] = {
+ { WINBINDD_INTERFACE_VERSION,
+ winbindd_interface_version,
"INTERFACE_VERSION" },
- { WINBINDD_DOMAIN_NAME, winbindd_domain_name, "DOMAIN_NAME" },
- { WINBINDD_DOMAIN_INFO, winbindd_domain_info, "DOMAIN_INFO" },
- { WINBINDD_DC_INFO, winbindd_dc_info, "DC_INFO" },
- { WINBINDD_NETBIOS_NAME, winbindd_netbios_name, "NETBIOS_NAME" },
- { WINBINDD_PRIV_PIPE_DIR, winbindd_priv_pipe_dir,
+ { WINBINDD_INFO,
+ winbindd_info,
+ "INFO" },
+ { WINBINDD_PING,
+ winbindd_ping,
+ "PING" },
+ { WINBINDD_DOMAIN_NAME,
+ winbindd_domain_name,
+ "DOMAIN_NAME" },
+ { WINBINDD_NETBIOS_NAME,
+ winbindd_netbios_name,
+ "NETBIOS_NAME" },
+ { WINBINDD_DC_INFO,
+ winbindd_dc_info,
+ "DC_INFO" },
+ { WINBINDD_CCACHE_NTLMAUTH,
+ winbindd_ccache_ntlm_auth,
+ "NTLMAUTH" },
+ { WINBINDD_CCACHE_SAVE,
+ winbindd_ccache_save,
+ "CCACHE_SAVE" },
+ { WINBINDD_PRIV_PIPE_DIR,
+ winbindd_priv_pipe_dir,
"WINBINDD_PRIV_PIPE_DIR" },
-
- /* Credential cache access */
- { WINBINDD_CCACHE_NTLMAUTH, winbindd_ccache_ntlm_auth, "NTLMAUTH" },
- { WINBINDD_CCACHE_SAVE, winbindd_ccache_save, "CCACHE_SAVE" },
-
- /* End of list */
-
- { WINBINDD_NUM_CMDS, NULL, "NONE" }
+ { WINBINDD_LIST_TRUSTDOM,
+ winbindd_list_trusted_domains,
+ "LIST_TRUSTDOM" },
};
struct winbindd_async_dispatch_table {
@@ -635,6 +641,8 @@ static struct winbindd_async_dispatch_table async_nonpriv_table[] = {
winbindd_wins_byip_send, winbindd_wins_byip_recv },
{ WINBINDD_WINS_BYNAME, "WINS_BYNAME",
winbindd_wins_byname_send, winbindd_wins_byname_recv },
+ { WINBINDD_DOMAIN_INFO, "DOMAIN_INFO",
+ winbindd_domain_info_send, winbindd_domain_info_recv },
{ 0, NULL, NULL, NULL }
};
@@ -656,8 +664,9 @@ static void wb_request_done(struct tevent_req *req);
static void process_request(struct winbindd_cli_state *state)
{
- struct winbindd_dispatch_table *table = dispatch_table;
struct winbindd_async_dispatch_table *atable;
+ size_t i;
+ bool ok;
state->mem_ctx = talloc_named(state, 0, "winbind request");
if (state->mem_ctx == NULL)
@@ -719,20 +728,28 @@ static void process_request(struct winbindd_cli_state *state)
state->response->result = WINBINDD_PENDING;
state->response->length = sizeof(struct winbindd_response);
- for (table = dispatch_table; table->fn; table++) {
- if (state->request->cmd == table->cmd) {
- DEBUG(10,("process_request: request fn %s\n",
- table->winbindd_cmd_name ));
- state->cmd_name = table->winbindd_cmd_name;
- table->fn(state);
+ for (i=0; i<ARRAY_SIZE(bool_dispatch_table); i++) {
+ if (bool_dispatch_table[i].cmd == state->request->cmd) {
break;
}
}
- if (!table->fn) {
+ if (i == ARRAY_SIZE(bool_dispatch_table)) {
DEBUG(10,("process_request: unknown request fn number %d\n",
(int)state->request->cmd ));
request_error(state);
+ return;
+ }
+
+ DBG_DEBUG("process_request: request fn %s\n",
+ bool_dispatch_table[i].cmd_name);
+
+ ok = bool_dispatch_table[i].fn(state);
+
+ if (ok) {
+ request_ok(state);
+ } else {
+ request_error(state);
}
}
@@ -842,14 +859,14 @@ static void winbind_client_response_written(struct tevent_req *req)
state->io_req = req;
}
-void request_error(struct winbindd_cli_state *state)
+static void request_error(struct winbindd_cli_state *state)
{
SMB_ASSERT(state->response->result == WINBINDD_PENDING);
state->response->result = WINBINDD_ERROR;
request_finished(state);
}
-void request_ok(struct winbindd_cli_state *state)
+static void request_ok(struct winbindd_cli_state *state)
{
SMB_ASSERT(state->response->result == WINBINDD_PENDING);
state->response->result = WINBINDD_OK;
diff --git a/source3/winbindd/winbindd_ccache_access.c b/source3/winbindd/winbindd_ccache_access.c
index ddeaf1d..b3a8c89 100644
--- a/source3/winbindd/winbindd_ccache_access.c
+++ b/source3/winbindd/winbindd_ccache_access.c
@@ -180,7 +180,7 @@ static bool check_client_uid(struct winbindd_cli_state *state, uid_t uid)
return True;
}
-void winbindd_ccache_ntlm_auth(struct winbindd_cli_state *state)
+bool winbindd_ccache_ntlm_auth(struct winbindd_cli_state *state)
{
struct winbindd_domain *domain;
fstring name_namespace, name_domain, name_user;
@@ -206,8 +206,7 @@ void winbindd_ccache_ntlm_auth(struct winbindd_cli_state *state)
if (!ok) {
DEBUG(5,("winbindd_ccache_ntlm_auth: cannot parse domain and user from name [%s]\n",
state->request->data.ccache_ntlm_auth.user));
- request_error(state);
- return;
+ return false;
}
domain = find_auth_domain(state->request->flags, name_domain);
@@ -215,13 +214,11 @@ void winbindd_ccache_ntlm_auth(struct winbindd_cli_state *state)
if (domain == NULL) {
DEBUG(5,("winbindd_ccache_ntlm_auth: can't get domain [%s]\n",
name_domain));
- request_error(state);
- return;
+ return false;
}
if (!check_client_uid(state, state->request->data.ccache_ntlm_auth.uid)) {
- request_error(state);
- return;
+ return false;
}
/* validate blob lengths */
@@ -309,14 +306,10 @@ void winbindd_ccache_ntlm_auth(struct winbindd_cli_state *state)
data_blob_free(&auth);
process_result:
- if (!NT_STATUS_IS_OK(result)) {
- request_error(state);
- return;
- }
- request_ok(state);
+ return NT_STATUS_IS_OK(result);
}
-void winbindd_ccache_save(struct winbindd_cli_state *state)
+bool winbindd_ccache_save(struct winbindd_cli_state *state)
{
struct winbindd_domain *domain;
fstring name_namespace, name_domain, name_user;
@@ -343,8 +336,7 @@ void winbindd_ccache_save(struct winbindd_cli_state *state)
DEBUG(5,("winbindd_ccache_save: cannot parse domain and user "
"from name [%s]\n",
state->request->data.ccache_save.user));
- request_error(state);
- return;
+ return false;
}
/*
@@ -360,13 +352,11 @@ void winbindd_ccache_save(struct winbindd_cli_state *state)
if (domain == NULL) {
DEBUG(5, ("winbindd_ccache_save: can't get domain [%s]\n",
name_domain));
- request_error(state);
- return;
+ return false;
}
if (!check_client_uid(state, state->request->data.ccache_save.uid)) {
- request_error(state);
- return;
+ return false;
}
status = winbindd_add_memory_creds(
@@ -377,8 +367,7 @@ void winbindd_ccache_save(struct winbindd_cli_state *state)
if (!NT_STATUS_IS_OK(status)) {
DEBUG(1, ("winbindd_add_memory_creds failed %s\n",
nt_errstr(status)));
- request_error(state);
- return;
+ return false;
}
- request_ok(state);
+ return true;
}
diff --git a/source3/winbindd/winbindd_domain_info.c b/source3/winbindd/winbindd_domain_info.c
new file mode 100644
index 0000000..126691a
--- /dev/null
+++ b/source3/winbindd/winbindd_domain_info.c
@@ -0,0 +1,129 @@
+/*
+ * Unix SMB/CIFS implementation.
+ * async implementation of WINBINDD_DOMAIN_INFO
+ * Copyright (C) Volker Lendecke 2018
+ *
+ * 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 "winbindd.h"
+
+struct winbindd_domain_info_state {
+ struct winbindd_domain *domain;
+ struct winbindd_request ping_request;
+};
+
+static void winbindd_domain_info_done(struct tevent_req *subreq);
+
+struct tevent_req *winbindd_domain_info_send(
+ TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct winbindd_cli_state *cli,
+ struct winbindd_request *request)
+{
+ struct tevent_req *req, *subreq;
+ struct winbindd_domain_info_state *state;
+
+ req = tevent_req_create(mem_ctx, &state,
+ struct winbindd_domain_info_state);
+ if (req == NULL) {
+ return NULL;
+ }
+
+ DEBUG(3, ("[%5lu]: domain_info [%s]\n", (unsigned long)cli->pid,
+ cli->request->domain_name));
+
+ state->domain = find_domain_from_name_noinit(
+ cli->request->domain_name);
+
+ if (state->domain == NULL) {
+ DEBUG(3, ("Did not find domain [%s]\n",
+ cli->request->domain_name));
+ tevent_req_nterror(req, NT_STATUS_NO_SUCH_DOMAIN);
+ return tevent_req_post(req, ev);
+ }
+
+ if (state->domain->initialized) {
+ tevent_req_done(req);
+ return tevent_req_post(req, ev);
+ }
+
+ state->ping_request.cmd = WINBINDD_PING;
+
+ /*
+ * Send a ping down. This implicitly initializes the domain.
+ */
+
+ subreq = wb_domain_request_send(state, server_event_context(),
+ state->domain, &state->ping_request);
+ if (tevent_req_nomem(subreq, req)) {
+ return tevent_req_post(req, ev);
+ }
+ tevent_req_set_callback(subreq, winbindd_domain_info_done, req);
+
+ return req;
+}
+
+static void winbindd_domain_info_done(struct tevent_req *subreq)
+{
+ struct tevent_req *req = tevent_req_callback_data(
+ subreq, struct tevent_req);
+ struct winbindd_domain_info_state *state = tevent_req_data(
+ req, struct winbindd_domain_info_state);
+ struct winbindd_response *response;
+ int ret, err;
+
+ ret = wb_domain_request_recv(subreq, state, &response, &err);
+ TALLOC_FREE(subreq);
+ if (ret == -1) {
+ DBG_DEBUG("wb_domain_request failed: %s\n", strerror(err));
+ tevent_req_nterror(req, map_nt_error_from_unix(err));
+ return;
+ }
+
+ if (!state->domain->initialized) {
+ DBG_INFO("wb_domain_request did not initialize domain %s\n",
+ state->domain->name);
+ tevent_req_nterror(req, NT_STATUS_INTERNAL_ERROR);
+ return;
+ }
+
+ tevent_req_done(req);
+}
+
+NTSTATUS winbindd_domain_info_recv(struct tevent_req *req,
+ struct winbindd_response *response)
+{
+ struct winbindd_domain_info_state *state = tevent_req_data(
+ req, struct winbindd_domain_info_state);
+ struct winbindd_domain *domain = state->domain;
+ NTSTATUS status;
+
+ if (tevent_req_is_nterror(req, &status)) {
+ DBG_DEBUG("winbindd_domain_info failed: %s\n",
+ nt_errstr(status));
+ return status;
+ }
+
+ fstrcpy(response->data.domain_info.name, domain->name);
+ fstrcpy(response->data.domain_info.alt_name, domain->alt_name);
+ sid_to_fstring(response->data.domain_info.sid, &domain->sid);
+
+ response->data.domain_info.native_mode = domain->native_mode;
+ response->data.domain_info.active_directory = domain->active_directory;
+ response->data.domain_info.primary = domain->primary;
+
+ return NT_STATUS_OK;
+}
diff --git a/source3/winbindd/winbindd_misc.c b/source3/winbindd/winbindd_misc.c
index c101269..46273a9 100644
--- a/source3/winbindd/winbindd_misc.c
+++ b/source3/winbindd/winbindd_misc.c
@@ -203,25 +203,24 @@ static bool trust_is_transitive(struct winbindd_tdc_domain *domain)
return transitive;
}
-void winbindd_list_trusted_domains(struct winbindd_cli_state *state)
+bool winbindd_list_trusted_domains(struct winbindd_cli_state *state)
{
struct winbindd_tdc_domain *dom_list = NULL;
size_t num_domains = 0;
int extra_data_len = 0;
char *extra_data = NULL;
int i = 0;
+ bool ret = false;
DEBUG(3, ("[%5lu]: list trusted domains\n",
(unsigned long)state->pid));
if( !wcache_tdc_fetch_list( &dom_list, &num_domains )) {
- request_error(state);
goto done;
}
extra_data = talloc_strdup(state->mem_ctx, "");
if (extra_data == NULL) {
- request_error(state);
goto done;
}
@@ -269,9 +268,10 @@ void winbindd_list_trusted_domains(struct winbindd_cli_state *state)
state->response->length += extra_data_len;
}
- request_ok(state);
+ ret = true;
done:
TALLOC_FREE( dom_list );
+ return ret;
}
enum winbindd_result winbindd_dual_list_trusted_domains(struct winbindd_domain *domain,
@@ -346,113 +346,7 @@ enum winbindd_result winbindd_dual_list_trusted_domains(struct winbindd_domain *
return WINBINDD_OK;
}
-struct domain_info_state {
- struct winbindd_domain *domain;
- struct winbindd_cli_state *cli;
- struct winbindd_request ping_request;
-};
-
-static void domain_info_done(struct tevent_req *req);
-
-void winbindd_domain_info(struct winbindd_cli_state *cli)
-{
- struct domain_info_state *state;
- struct winbindd_domain *domain;
- struct tevent_req *req;
-
- DEBUG(3, ("[%5lu]: domain_info [%s]\n", (unsigned long)cli->pid,
- cli->request->domain_name));
-
- domain = find_domain_from_name_noinit(cli->request->domain_name);
-
- if (domain == NULL) {
- DEBUG(3, ("Did not find domain [%s]\n",
- cli->request->domain_name));
- request_error(cli);
- return;
- }
-
- if (domain->initialized) {
- fstrcpy(cli->response->data.domain_info.name,
- domain->name);
- fstrcpy(cli->response->data.domain_info.alt_name,
- domain->alt_name);
- sid_to_fstring(cli->response->data.domain_info.sid,
- &domain->sid);
- cli->response->data.domain_info.native_mode =
- domain->native_mode;
- cli->response->data.domain_info.active_directory =
- domain->active_directory;
- cli->response->data.domain_info.primary =
- domain->primary;
- request_ok(cli);
- return;
- }
-
- state = talloc_zero(cli->mem_ctx, struct domain_info_state);
- if (state == NULL) {
- DEBUG(0, ("talloc failed\n"));
- request_error(cli);
- return;
- }
-
- state->cli = cli;
- state->domain = domain;
- state->ping_request.cmd = WINBINDD_PING;
-
- /*
- * Send a ping down. This implicitly initializes the domain.
- */
-
- req = wb_domain_request_send(state, server_event_context(),
- domain, &state->ping_request);
- if (req == NULL) {
- DEBUG(3, ("wb_domain_request_send failed\n"));
- request_error(cli);
- return;
- }
- tevent_req_set_callback(req, domain_info_done, state);
-}
-
--
Samba Shared Repository
More information about the samba-cvs
mailing list