mirror of
https://github.com/samba-team/samba.git
synced 2025-03-03 12:58:35 +03:00
Previously WINBINDD_LIST_GROUPS requests (ex: wbinfo -g) were handled by the winbindd parent process in a sequential fashion. This patch, delegates the work to the winbindd children so that the request is handled much faster in large domain topologies, and doesn't block the parent from receiving new requests. The core group enumeration and conversion that was handled in winbindd_list_groups() has been moved into winbindd_dual_list_groups() to be done by the child. The parent winbindd_list_groups() simply calls each of the children asynchronously. listgroups_recv() aggregates the final group list that will be returned to the client and tracks how many of the children have returned their lists. The domain name of the child is passed back through the callbacks to be used in debugging messages. There are also several fixes to typos in various comments. (This used to be commit 037b9689d9042a398cb91e4628a82fcdfa913c21)
116 lines
3.2 KiB
C
116 lines
3.2 KiB
C
/*
|
|
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_GROUPS",
|
|
.struct_cmd = WINBINDD_LIST_GROUPS,
|
|
.struct_fn = winbindd_dual_list_groups,
|
|
},{
|
|
.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,
|
|
}
|
|
};
|