diff options
-rw-r--r-- | source3/Makefile.in | 1 | ||||
-rw-r--r-- | source3/winbindd/winbindd.h | 2 | ||||
-rw-r--r-- | source3/winbindd/winbindd_domain.c | 111 | ||||
-rw-r--r-- | source3/winbindd/winbindd_dual.c | 99 | ||||
-rw-r--r-- | source3/winbindd/winbindd_idmap.c | 7 | ||||
-rw-r--r-- | source3/winbindd/winbindd_locator.c | 7 | ||||
-rw-r--r-- | source3/winbindd/winbindd_util.c | 20 |
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 ); |