diff options
author | Günther Deschner <gd@samba.org> | 2007-08-29 12:43:23 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:30:20 -0500 |
commit | 53d41f3b1b0b7fc3550e0ee4906405f7afbf114c (patch) | |
tree | 9c1536eecde13786d596e57be2910cf896e75ada /source3 | |
parent | 4429a01c83f8900d318c7c162f004d1e5764556a (diff) | |
download | samba-53d41f3b1b0b7fc3550e0ee4906405f7afbf114c.tar.gz samba-53d41f3b1b0b7fc3550e0ee4906405f7afbf114c.tar.bz2 samba-53d41f3b1b0b7fc3550e0ee4906405f7afbf114c.zip |
r24778: Make sure krb5 locator requests go to a separate locator winbind child.
Guenther
(This used to be commit fb9228b8d167552f0a046ab674f66d4e5b73f5b6)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/nsswitch/winbindd.c | 1 | ||||
-rw-r--r-- | source3/nsswitch/winbindd_dual.c | 8 | ||||
-rw-r--r-- | source3/nsswitch/winbindd_misc.c | 15 | ||||
-rw-r--r-- | source3/nsswitch/winbindd_util.c | 12 |
4 files changed, 31 insertions, 5 deletions
diff --git a/source3/nsswitch/winbindd.c b/source3/nsswitch/winbindd.c index 3bf054eb4f..ecc30e140a 100644 --- a/source3/nsswitch/winbindd.c +++ b/source3/nsswitch/winbindd.c @@ -1184,6 +1184,7 @@ int main(int argc, char **argv, char **envp) } init_idmap_child(); + init_locator_child(); smb_nscd_flush_user_cache(); smb_nscd_flush_group_cache(); diff --git a/source3/nsswitch/winbindd_dual.c b/source3/nsswitch/winbindd_dual.c index c6cafe79ec..b79445ee86 100644 --- a/source3/nsswitch/winbindd_dual.c +++ b/source3/nsswitch/winbindd_dual.c @@ -579,9 +579,9 @@ void winbind_msg_offline(struct messaging_context *msg_ctx, } for (child = children; child != NULL; child = child->next) { - /* Don't send message to idmap child. We've already + /* Don't send message to internal childs. We've already done so above. */ - if (!child->domain || (child == idmap_child())) { + if (!child->domain || winbindd_internal_child(child)) { continue; } @@ -655,8 +655,8 @@ void winbind_msg_online(struct messaging_context *msg_ctx, } for (child = children; child != NULL; child = child->next) { - /* Don't send message to idmap child. */ - if (!child->domain || (child == idmap_child())) { + /* Don't send message to internal childs. */ + if (!child->domain || winbindd_internal_child(child)) { continue; } diff --git a/source3/nsswitch/winbindd_misc.c b/source3/nsswitch/winbindd_misc.c index 8f1e653619..c32f052e3c 100644 --- a/source3/nsswitch/winbindd_misc.c +++ b/source3/nsswitch/winbindd_misc.c @@ -270,6 +270,18 @@ enum winbindd_result winbindd_dual_getdcname(struct winbindd_domain *domain, return WINBINDD_OK; } +static struct winbindd_child static_locator_child; + +void init_locator_child(void) +{ + setup_domain_child(NULL, &static_locator_child, "locator"); +} + +struct winbindd_child *locator_child(void) +{ + return &static_locator_child; +} + void winbindd_dsgetdcname(struct winbindd_cli_state *state) { state->request.domain_name @@ -278,7 +290,7 @@ void winbindd_dsgetdcname(struct winbindd_cli_state *state) DEBUG(3, ("[%5lu]: DsGetDcName for %s\n", (unsigned long)state->pid, state->request.domain_name)); - sendto_domain(state, find_our_domain()); + sendto_child(state, locator_child()); } enum winbindd_result winbindd_dual_dsgetdcname(struct winbindd_domain *domain, @@ -603,3 +615,4 @@ void winbindd_priv_pipe_dir(struct winbindd_cli_state *state) request_ok(state); } + diff --git a/source3/nsswitch/winbindd_util.c b/source3/nsswitch/winbindd_util.c index 591d2355d9..e8831b3653 100644 --- a/source3/nsswitch/winbindd_util.c +++ b/source3/nsswitch/winbindd_util.c @@ -1353,3 +1353,15 @@ BOOL winbindd_can_contact_domain( struct winbindd_domain *domain ) return True; } + +/********************************************************************* + ********************************************************************/ + +BOOL winbindd_internal_child(struct winbindd_child *child) +{ + if (child == idmap_child() || child == locator_child()) { + return True; + } + + return False; +} |