summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/Makefile.in1
-rw-r--r--source3/winbindd/winbindd.h2
-rw-r--r--source3/winbindd/winbindd_domain.c111
-rw-r--r--source3/winbindd/winbindd_dual.c99
-rw-r--r--source3/winbindd/winbindd_idmap.c7
-rw-r--r--source3/winbindd/winbindd_locator.c7
-rw-r--r--source3/winbindd/winbindd_util.c20
7 files changed, 133 insertions, 114 deletions
diff --git a/source3/Makefile.in b/source3/Makefile.in
index 5a8d7e19a8e..c70ad6cfbb4 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -873,6 +873,7 @@ WINBINDD_OBJ1 = \
winbindd/winbindd_creds.o \
winbindd/winbindd_cred_cache.o \
winbindd/winbindd_ccache_access.o \
+ winbindd/winbindd_domain.o \
winbindd/winbindd_idmap.o \
winbindd/winbindd_locator.o \
auth/token_util.o
diff --git a/source3/winbindd/winbindd.h b/source3/winbindd/winbindd.h
index d76e9b59219..6bf6e6c68f9 100644
--- a/source3/winbindd/winbindd.h
+++ b/source3/winbindd/winbindd.h
@@ -143,8 +143,6 @@ struct winbindd_child_dispatch_table {
struct winbindd_cli_state *state);
};
-extern const struct winbindd_child_dispatch_table domain_dispatch_table[];
-
struct winbindd_child {
struct winbindd_child *next, *prev;
diff --git a/source3/winbindd/winbindd_domain.c b/source3/winbindd/winbindd_domain.c
new file mode 100644
index 00000000000..1b758cdf40c
--- /dev/null
+++ b/source3/winbindd/winbindd_domain.c
@@ -0,0 +1,111 @@
+/*
+ Unix SMB/CIFS implementation.
+
+ Winbind domain child functions
+
+ Copyright (C) Stefan Metzmacher 2007
+
+ 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"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+static const struct winbindd_child_dispatch_table domain_dispatch_table[];
+
+void setup_domain_child(struct winbindd_domain *domain,
+ struct winbindd_child *child)
+{
+ setup_child(child, domain_dispatch_table,
+ "log.wb", domain->name);
+
+ child->domain = domain;
+}
+
+static const struct winbindd_child_dispatch_table domain_dispatch_table[] = {
+ {
+ .name = "LOOKUPSID",
+ .struct_cmd = WINBINDD_LOOKUPSID,
+ .struct_fn = winbindd_dual_lookupsid,
+ },{
+ .name = "LOOKUPNAME",
+ .struct_cmd = WINBINDD_LOOKUPNAME,
+ .struct_fn = winbindd_dual_lookupname,
+ },{
+ .name = "LOOKUPRIDS",
+ .struct_cmd = WINBINDD_LOOKUPRIDS,
+ .struct_fn = winbindd_dual_lookuprids,
+ },{
+ .name = "LIST_TRUSTDOM",
+ .struct_cmd = WINBINDD_LIST_TRUSTDOM,
+ .struct_fn = winbindd_dual_list_trusted_domains,
+ },{
+ .name = "INIT_CONNECTION",
+ .struct_cmd = WINBINDD_INIT_CONNECTION,
+ .struct_fn = winbindd_dual_init_connection,
+ },{
+ .name = "GETDCNAME",
+ .struct_cmd = WINBINDD_GETDCNAME,
+ .struct_fn = winbindd_dual_getdcname,
+ },{
+ .name = "SHOW_SEQUENCE",
+ .struct_cmd = WINBINDD_SHOW_SEQUENCE,
+ .struct_fn = winbindd_dual_show_sequence,
+ },{
+ .name = "PAM_AUTH",
+ .struct_cmd = WINBINDD_PAM_AUTH,
+ .struct_fn = winbindd_dual_pam_auth,
+ },{
+ .name = "AUTH_CRAP",
+ .struct_cmd = WINBINDD_PAM_AUTH_CRAP,
+ .struct_fn = winbindd_dual_pam_auth_crap,
+ },{
+ .name = "PAM_LOGOFF",
+ .struct_cmd = WINBINDD_PAM_LOGOFF,
+ .struct_fn = winbindd_dual_pam_logoff,
+ },{
+ .name = "CHNG_PSWD_AUTH_CRAP",
+ .struct_cmd = WINBINDD_PAM_CHNG_PSWD_AUTH_CRAP,
+ .struct_fn = winbindd_dual_pam_chng_pswd_auth_crap,
+ },{
+ .name = "PAM_CHAUTHTOK",
+ .struct_cmd = WINBINDD_PAM_CHAUTHTOK,
+ .struct_fn = winbindd_dual_pam_chauthtok,
+ },{
+ .name = "CHECK_MACHACC",
+ .struct_cmd = WINBINDD_CHECK_MACHACC,
+ .struct_fn = winbindd_dual_check_machine_acct,
+ },{
+ .name = "DUAL_USERINFO",
+ .struct_cmd = WINBINDD_DUAL_USERINFO,
+ .struct_fn = winbindd_dual_userinfo,
+ },{
+ .name = "GETUSERDOMGROUPS",
+ .struct_cmd = WINBINDD_GETUSERDOMGROUPS,
+ .struct_fn = winbindd_dual_getuserdomgroups,
+ },{
+ .name = "GETSIDALIASES",
+ .struct_cmd = WINBINDD_DUAL_GETSIDALIASES,
+ .struct_fn = winbindd_dual_getsidaliases,
+ },{
+ .name = "CCACHE_NTLM_AUTH",
+ .struct_cmd = WINBINDD_CCACHE_NTLMAUTH,
+ .struct_fn = winbindd_dual_ccache_ntlm_auth,
+ },{
+ .name = NULL,
+ }
+};
diff --git a/source3/winbindd/winbindd_dual.c b/source3/winbindd/winbindd_dual.c
index 08ce7f4f55e..778886d8e28 100644
--- a/source3/winbindd/winbindd_dual.c
+++ b/source3/winbindd/winbindd_dual.c
@@ -408,80 +408,6 @@ void sendto_domain(struct winbindd_cli_state *state,
recvfrom_child, state);
}
-const struct winbindd_child_dispatch_table domain_dispatch_table[] = {
- {
- .name = "LOOKUPSID",
- .struct_cmd = WINBINDD_LOOKUPSID,
- .struct_fn = winbindd_dual_lookupsid,
- },{
- .name = "LOOKUPNAME",
- .struct_cmd = WINBINDD_LOOKUPNAME,
- .struct_fn = winbindd_dual_lookupname,
- },{
- .name = "LOOKUPRIDS",
- .struct_cmd = WINBINDD_LOOKUPRIDS,
- .struct_fn = winbindd_dual_lookuprids,
- },{
- .name = "LIST_TRUSTDOM",
- .struct_cmd = WINBINDD_LIST_TRUSTDOM,
- .struct_fn = winbindd_dual_list_trusted_domains,
- },{
- .name = "INIT_CONNECTION",
- .struct_cmd = WINBINDD_INIT_CONNECTION,
- .struct_fn = winbindd_dual_init_connection,
- },{
- .name = "GETDCNAME",
- .struct_cmd = WINBINDD_GETDCNAME,
- .struct_fn = winbindd_dual_getdcname,
- },{
- .name = "SHOW_SEQUENCE",
- .struct_cmd = WINBINDD_SHOW_SEQUENCE,
- .struct_fn = winbindd_dual_show_sequence,
- },{
- .name = "PAM_AUTH",
- .struct_cmd = WINBINDD_PAM_AUTH,
- .struct_fn = winbindd_dual_pam_auth,
- },{
- .name = "AUTH_CRAP",
- .struct_cmd = WINBINDD_PAM_AUTH_CRAP,
- .struct_fn = winbindd_dual_pam_auth_crap,
- },{
- .name = "PAM_LOGOFF",
- .struct_cmd = WINBINDD_PAM_LOGOFF,
- .struct_fn = winbindd_dual_pam_logoff,
- },{
- .name = "CHNG_PSWD_AUTH_CRAP",
- .struct_cmd = WINBINDD_PAM_CHNG_PSWD_AUTH_CRAP,
- .struct_fn = winbindd_dual_pam_chng_pswd_auth_crap,
- },{
- .name = "PAM_CHAUTHTOK",
- .struct_cmd = WINBINDD_PAM_CHAUTHTOK,
- .struct_fn = winbindd_dual_pam_chauthtok,
- },{
- .name = "CHECK_MACHACC",
- .struct_cmd = WINBINDD_CHECK_MACHACC,
- .struct_fn = winbindd_dual_check_machine_acct,
- },{
- .name = "DUAL_USERINFO",
- .struct_cmd = WINBINDD_DUAL_USERINFO,
- .struct_fn = winbindd_dual_userinfo,
- },{
- .name = "GETUSERDOMGROUPS",
- .struct_cmd = WINBINDD_GETUSERDOMGROUPS,
- .struct_fn = winbindd_dual_getuserdomgroups,
- },{
- .name = "GETSIDALIASES",
- .struct_cmd = WINBINDD_DUAL_GETSIDALIASES,
- .struct_fn = winbindd_dual_getsidaliases,
- },{
- .name = "CCACHE_NTLM_AUTH",
- .struct_cmd = WINBINDD_CCACHE_NTLMAUTH,
- .struct_fn = winbindd_dual_ccache_ntlm_auth,
- },{
- .name = NULL,
- }
-};
-
static void child_process_request(struct winbindd_child *child,
struct winbindd_cli_state *state)
{
@@ -513,27 +439,22 @@ static void child_process_request(struct winbindd_child *child,
state->response.result = WINBINDD_ERROR;
}
-void setup_domain_child(struct winbindd_domain *domain,
- struct winbindd_child *child,
- const struct winbindd_child_dispatch_table *table,
- const char *explicit_logfile)
+void setup_child(struct winbindd_child *child,
+ const struct winbindd_child_dispatch_table *table,
+ const char *logprefix,
+ const char *logname)
{
- if (explicit_logfile != NULL) {
- if (asprintf(&child->logfilename, "%s/log.winbindd-%s",
- get_dyn_LOGFILEBASE(), explicit_logfile) < 0) {
- smb_panic("Internal error: asprintf failed");
- }
- } else if (domain != NULL) {
- if (asprintf(&child->logfilename, "%s/log.wb-%s",
- get_dyn_LOGFILEBASE(), domain->name) < 0) {
+ if (logprefix && logname) {
+ if (asprintf(&child->logfilename, "%s/%s-%s",
+ get_dyn_LOGFILEBASE(), logprefix, logname) < 0) {
smb_panic("Internal error: asprintf failed");
}
} else {
- smb_panic("Internal error: domain == NULL && "
- "explicit_logfile == NULL");
+ smb_panic("Internal error: logprefix == NULL && "
+ "logname == NULL");
}
- child->domain = domain;
+ child->domain = NULL;
child->table = table;
}
diff --git a/source3/winbindd/winbindd_idmap.c b/source3/winbindd/winbindd_idmap.c
index cc5cf1e8487..6f7b5624150 100644
--- a/source3/winbindd/winbindd_idmap.c
+++ b/source3/winbindd/winbindd_idmap.c
@@ -44,10 +44,9 @@ static struct winbindd_child static_idmap_child;
void init_idmap_child(void)
{
- setup_domain_child(NULL,
- &static_idmap_child,
- idmap_dispatch_table,
- "idmap");
+ setup_child(&static_idmap_child,
+ idmap_dispatch_table,
+ "log.winbindd", "idmap");
}
struct winbindd_child *idmap_child(void)
diff --git a/source3/winbindd/winbindd_locator.c b/source3/winbindd/winbindd_locator.c
index 67bafc7c075..ee497ebf320 100644
--- a/source3/winbindd/winbindd_locator.c
+++ b/source3/winbindd/winbindd_locator.c
@@ -33,10 +33,9 @@ static struct winbindd_child static_locator_child;
void init_locator_child(void)
{
- setup_domain_child(NULL,
- &static_locator_child,
- locator_dispatch_table,
- "locator");
+ setup_child(&static_locator_child,
+ locator_dispatch_table,
+ "log.winbindd", "locator");
}
struct winbindd_child *locator_child(void)
diff --git a/source3/winbindd/winbindd_util.c b/source3/winbindd/winbindd_util.c
index 56ae4f27bb2..2389a4be13a 100644
--- a/source3/winbindd/winbindd_util.c
+++ b/source3/winbindd/winbindd_util.c
@@ -326,9 +326,7 @@ static void trustdom_recv(void *private_data, bool success)
&sid);
if (domain) {
setup_domain_child(domain,
- &domain->child,
- domain_dispatch_table,
- NULL);
+ &domain->child);
}
}
p=q;
@@ -698,9 +696,7 @@ bool init_domain_list(void)
&global_sid_Builtin);
if (domain) {
setup_domain_child(domain,
- &domain->child,
- domain_dispatch_table,
- NULL);
+ &domain->child);
}
/* Local SAM */
@@ -712,9 +708,7 @@ bool init_domain_list(void)
domain->primary = True;
}
setup_domain_child(domain,
- &domain->child,
- domain_dispatch_table,
- NULL);
+ &domain->child);
}
/* Add ourselves as the first entry. */
@@ -732,9 +726,7 @@ bool init_domain_list(void)
if (domain) {
domain->primary = True;
setup_domain_child(domain,
- &domain->child,
- domain_dispatch_table,
- NULL);
+ &domain->child);
/* Even in the parent winbindd we'll need to
talk to the DC, so try and see if we can
@@ -781,9 +773,7 @@ void check_domain_trusted( const char *name, const DOM_SID *user_sid )
domain->online = True;
setup_domain_child(domain,
- &domain->child,
- domain_dispatch_table,
- NULL);
+ &domain->child);
wcache_tdc_add_domain( domain );