The branch, master has been updated via 9bacf7529dd s3:winbind: Remove struct winbindd_child_dispatch_table via 95698da905f examples: Update winbind.stp via e9286b06cf8 s3:winbind: Convert InitConnection from struct based to NDR based via 39005d4437d s3:winbind: Create a binding handle for each child via 5827a4f9ae1 s3:winbind: Fix code format and use newer debug macros via 574c3ed9269 s3:winbind: Move winbindd_dual_init_connection() function via 7575e4ef5c7 examples: Update winbind.stp via cc0ef447cdc s3:winbind: Convert winbindd_dual_pam_chauthtok() from struct based to NDR based via ba40aad05b7 s3:winbind: Split getting and filling the password policy info via 57d7720080e examples: Update winbind.stp via 0f3b1d5c1d4 s3:winbind: Convert winbindd_dual_pam_chng_pswd_auth_crap() from struct based to NDR based via 5f213285b69 examples: Update winbind.stp via ce0be638b4c s3:winbind: Convert PamLogOff from struct based to ndr based via c27135adc74 librpc:idl: Add NDR_SECRET flag for ntlm and challenge blobs via 35ca7a17143 examples: Update winbind.stp, delete removed functions from 04e0e02c695 srvsvc: Announce [username] in NetShareEnum
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 9bacf7529dd74b0307215b3ff00d8de20bf77a57 Author: Samuel Cabrero <scabr...@samba.org> Date: Tue Jun 22 10:44:53 2021 +0200 s3:winbind: Remove struct winbindd_child_dispatch_table All parent-child communication is based in NDR and dispatched as a local RPC call. Signed-off-by: Samuel Cabrero <scabr...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> Autobuild-User(master): Jeremy Allison <j...@samba.org> Autobuild-Date(master): Thu May 19 18:50:24 UTC 2022 on sn-devel-184 commit 95698da905ffd8f18f5a6b1ae51c7194da02bac1 Author: Samuel Cabrero <scabr...@samba.org> Date: Mon May 9 17:31:53 2022 +0200 examples: Update winbind.stp Signed-off-by: Samuel Cabrero <scabr...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit e9286b06cf807bc6e308aa1398c03588d00dc2f5 Author: Samuel Cabrero <scabr...@samba.org> Date: Mon Feb 28 17:16:23 2022 +0100 s3:winbind: Convert InitConnection from struct based to NDR based Signed-off-by: Samuel Cabrero <scabr...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 39005d4437d57602aca88e51387d69a0480e4972 Author: Samuel Cabrero <scabr...@samba.org> Date: Thu Jun 3 20:05:48 2021 +0200 s3:winbind: Create a binding handle for each child Next commits will convert InitConnection from struct based to NDR based and this call will be directly issued to a domain child so create a 'wbint' binding handle for domain childs too. Signed-off-by: Samuel Cabrero <scabr...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 5827a4f9ae113414dc85621c09215163064b5c71 Author: Samuel Cabrero <scabr...@samba.org> Date: Mon May 9 16:59:21 2022 +0200 s3:winbind: Fix code format and use newer debug macros Signed-off-by: Samuel Cabrero <scabr...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 574c3ed9269789e11041d08a5d4eefee4c196dd3 Author: Samuel Cabrero <scabr...@samba.org> Date: Mon May 9 16:56:18 2022 +0200 s3:winbind: Move winbindd_dual_init_connection() function It will be converted later to a local RPC call handler so it must be in the file including ndr_winbind_scompat.c Signed-off-by: Samuel Cabrero <scabr...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 7575e4ef5c77b355de9892c864ab1ff492ea1dd8 Author: Samuel Cabrero <scabr...@samba.org> Date: Mon May 9 16:46:35 2022 +0200 examples: Update winbind.stp Signed-off-by: Samuel Cabrero <scabr...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit cc0ef447cdc1c5f77162e52f44852aaaf6047d12 Author: Samuel Cabrero <scabr...@samba.org> Date: Tue Jun 22 10:23:04 2021 +0200 s3:winbind: Convert winbindd_dual_pam_chauthtok() from struct based to NDR based Signed-off-by: Samuel Cabrero <scabr...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit ba40aad05b7ee5f55b85434fe872fbb0b9cda5da Author: Samuel Cabrero <scabr...@samba.org> Date: Mon Jun 21 17:25:50 2021 +0200 s3:winbind: Split getting and filling the password policy info Next commits will convert from struct based to NDR based. The samr_DomInfo1 struct will be returned by the child to the parent inside the 'r' struct and the parent will just fill the winbindd_respone. Signed-off-by: Samuel Cabrero <scabr...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 57d7720080ec65cee230d9d3731b6c1884a2c06b Author: Samuel Cabrero <scabr...@samba.org> Date: Mon May 9 16:22:33 2022 +0200 examples: Update winbind.stp Signed-off-by: Samuel Cabrero <scabr...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 0f3b1d5c1d46cb2859bd21a5e3c8933c81ed0f57 Author: Samuel Cabrero <scabr...@samba.org> Date: Mon Jun 21 13:51:53 2021 +0200 s3:winbind: Convert winbindd_dual_pam_chng_pswd_auth_crap() from struct based to NDR based Signed-off-by: Samuel Cabrero <scabr...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 5f213285b697554b6c3a5b9f9e5a325abdacd7eb Author: Samuel Cabrero <scabr...@samba.org> Date: Mon May 9 16:12:41 2022 +0200 examples: Update winbind.stp Signed-off-by: Samuel Cabrero <scabr...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit ce0be638b4ceb6474f967500d3ec68c67c36cfd3 Author: Samuel Cabrero <scabr...@samba.org> Date: Wed Jun 16 17:39:02 2021 +0200 s3:winbind: Convert PamLogOff from struct based to ndr based Signed-off-by: Samuel Cabrero <scabr...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit c27135adc74978e52d7c346ffb99d2f3d8ba9c0b Author: Samuel Cabrero <scabr...@samba.org> Date: Tue May 17 18:25:38 2022 +0200 librpc:idl: Add NDR_SECRET flag for ntlm and challenge blobs Signed-off-by: Samuel Cabrero <scabr...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 35ca7a1714338fbcc35c7b6ad9a1203d774de760 Author: Samuel Cabrero <scabr...@samba.org> Date: Mon May 9 16:27:13 2022 +0200 examples: Update winbind.stp, delete removed functions Signed-off-by: Samuel Cabrero <scabr...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> ----------------------------------------------------------------------- Summary of changes: examples/systemtap/generate-winbindd.stp.sh | 9 +- examples/systemtap/winbindd.stp | 134 ++++------ librpc/idl/samr.idl | 2 +- librpc/idl/winbind.idl | 55 +++- nsswitch/winbind_struct_protocol.h | 4 +- source3/winbindd/winbindd.h | 9 - source3/winbindd/winbindd_domain.c | 27 -- source3/winbindd/winbindd_dual.c | 86 +++---- source3/winbindd/winbindd_dual_srv.c | 58 +++++ source3/winbindd/winbindd_idmap.c | 14 +- source3/winbindd/winbindd_locator.c | 14 +- source3/winbindd/winbindd_ndr.c | 1 - source3/winbindd/winbindd_pam.c | 286 +++++++++++---------- source3/winbindd/winbindd_pam_chauthtok.c | 79 ++++-- .../winbindd/winbindd_pam_chng_pswd_auth_crap.c | 78 +++++- source3/winbindd/winbindd_pam_logoff.c | 52 ++-- source3/winbindd/winbindd_proto.h | 14 +- source3/winbindd/winbindd_util.c | 44 ---- 18 files changed, 522 insertions(+), 444 deletions(-) Changeset truncated at 500 lines: diff --git a/examples/systemtap/generate-winbindd.stp.sh b/examples/systemtap/generate-winbindd.stp.sh index 18695232f43..3a4d2d87eb1 100755 --- a/examples/systemtap/generate-winbindd.stp.sh +++ b/examples/systemtap/generate-winbindd.stp.sh @@ -3,14 +3,13 @@ outfile="$(dirname $0)/winbindd.stp" child_funcs="winbindd_dual_init_connection -winbindd_dual_pam_auth -winbindd_dual_pam_auth_crap -winbindd_dual_pam_logoff -winbindd_dual_pam_chng_pswd_auth_crap -winbindd_dual_pam_chauthtok +_wbint_InitConnection _wbint_Ping _wbint_PamAuth _wbint_PamAuthCrap +_wbint_PamLogOff +_wbint_PamAuthChangePassword +_wbint_PamAuthCrapChangePassword _wbint_ListTrustedDomains _wbint_LookupSid _wbint_LookupSids diff --git a/examples/systemtap/winbindd.stp b/examples/systemtap/winbindd.stp index 5b8e72fea6c..635784a5b13 100644 --- a/examples/systemtap/winbindd.stp +++ b/examples/systemtap/winbindd.stp @@ -2,7 +2,7 @@ # # Systemtap script to instrument winbindd # -# Generated by examples/systemtap/generate-winbindd.stp.sh on vie 01 abr 2022 16:21:52 CEST, do not edit +# Generated by examples/systemtap/generate-winbindd.stp.sh on lun 09 may 2022 17:31:44 CEST, do not edit # # Usage: # @@ -44,163 +44,143 @@ probe process("winbindd").function("winbindd_dual_init_connection").return { } # -# winbind domain child function winbindd_dual_pam_auth +# winbind domain child function _wbint_InitConnection # -probe process("winbindd").function("winbindd_dual_pam_auth") { - dc_running[tid(), "winbindd_dual_pam_auth"] = gettimeofday_us() +probe process("winbindd").function("_wbint_InitConnection") { + dc_running[tid(), "_wbint_InitConnection"] = gettimeofday_us() } -probe process("winbindd").function("winbindd_dual_pam_auth").return { - if (!([tid(), "winbindd_dual_pam_auth"] in dc_running)) +probe process("winbindd").function("_wbint_InitConnection").return { + if (!([tid(), "_wbint_InitConnection"] in dc_running)) next end = gettimeofday_us() - begin = dc_running[tid(), "winbindd_dual_pam_auth"] - delete dc_running[tid(), "winbindd_dual_pam_auth"] + begin = dc_running[tid(), "_wbint_InitConnection"] + delete dc_running[tid(), "_wbint_InitConnection"] duration = end - begin - dc_svctime["winbindd_dual_pam_auth"] <<< duration + dc_svctime["_wbint_InitConnection"] <<< duration } # -# winbind domain child function winbindd_dual_pam_auth_crap -# - -probe process("winbindd").function("winbindd_dual_pam_auth_crap") { - dc_running[tid(), "winbindd_dual_pam_auth_crap"] = gettimeofday_us() -} - -probe process("winbindd").function("winbindd_dual_pam_auth_crap").return { - if (!([tid(), "winbindd_dual_pam_auth_crap"] in dc_running)) - next - - end = gettimeofday_us() - begin = dc_running[tid(), "winbindd_dual_pam_auth_crap"] - delete dc_running[tid(), "winbindd_dual_pam_auth_crap"] - - duration = end - begin - dc_svctime["winbindd_dual_pam_auth_crap"] <<< duration -} - -# -# winbind domain child function winbindd_dual_pam_logoff +# winbind domain child function _wbint_Ping # -probe process("winbindd").function("winbindd_dual_pam_logoff") { - dc_running[tid(), "winbindd_dual_pam_logoff"] = gettimeofday_us() +probe process("winbindd").function("_wbint_Ping") { + dc_running[tid(), "_wbint_Ping"] = gettimeofday_us() } -probe process("winbindd").function("winbindd_dual_pam_logoff").return { - if (!([tid(), "winbindd_dual_pam_logoff"] in dc_running)) +probe process("winbindd").function("_wbint_Ping").return { + if (!([tid(), "_wbint_Ping"] in dc_running)) next end = gettimeofday_us() - begin = dc_running[tid(), "winbindd_dual_pam_logoff"] - delete dc_running[tid(), "winbindd_dual_pam_logoff"] + begin = dc_running[tid(), "_wbint_Ping"] + delete dc_running[tid(), "_wbint_Ping"] duration = end - begin - dc_svctime["winbindd_dual_pam_logoff"] <<< duration + dc_svctime["_wbint_Ping"] <<< duration } # -# winbind domain child function winbindd_dual_pam_chng_pswd_auth_crap +# winbind domain child function _wbint_PamAuth # -probe process("winbindd").function("winbindd_dual_pam_chng_pswd_auth_crap") { - dc_running[tid(), "winbindd_dual_pam_chng_pswd_auth_crap"] = gettimeofday_us() +probe process("winbindd").function("_wbint_PamAuth") { + dc_running[tid(), "_wbint_PamAuth"] = gettimeofday_us() } -probe process("winbindd").function("winbindd_dual_pam_chng_pswd_auth_crap").return { - if (!([tid(), "winbindd_dual_pam_chng_pswd_auth_crap"] in dc_running)) +probe process("winbindd").function("_wbint_PamAuth").return { + if (!([tid(), "_wbint_PamAuth"] in dc_running)) next end = gettimeofday_us() - begin = dc_running[tid(), "winbindd_dual_pam_chng_pswd_auth_crap"] - delete dc_running[tid(), "winbindd_dual_pam_chng_pswd_auth_crap"] + begin = dc_running[tid(), "_wbint_PamAuth"] + delete dc_running[tid(), "_wbint_PamAuth"] duration = end - begin - dc_svctime["winbindd_dual_pam_chng_pswd_auth_crap"] <<< duration + dc_svctime["_wbint_PamAuth"] <<< duration } # -# winbind domain child function winbindd_dual_pam_chauthtok +# winbind domain child function _wbint_PamAuthCrap # -probe process("winbindd").function("winbindd_dual_pam_chauthtok") { - dc_running[tid(), "winbindd_dual_pam_chauthtok"] = gettimeofday_us() +probe process("winbindd").function("_wbint_PamAuthCrap") { + dc_running[tid(), "_wbint_PamAuthCrap"] = gettimeofday_us() } -probe process("winbindd").function("winbindd_dual_pam_chauthtok").return { - if (!([tid(), "winbindd_dual_pam_chauthtok"] in dc_running)) +probe process("winbindd").function("_wbint_PamAuthCrap").return { + if (!([tid(), "_wbint_PamAuthCrap"] in dc_running)) next end = gettimeofday_us() - begin = dc_running[tid(), "winbindd_dual_pam_chauthtok"] - delete dc_running[tid(), "winbindd_dual_pam_chauthtok"] + begin = dc_running[tid(), "_wbint_PamAuthCrap"] + delete dc_running[tid(), "_wbint_PamAuthCrap"] duration = end - begin - dc_svctime["winbindd_dual_pam_chauthtok"] <<< duration + dc_svctime["_wbint_PamAuthCrap"] <<< duration } # -# winbind domain child function _wbint_Ping +# winbind domain child function _wbint_PamLogOff # -probe process("winbindd").function("_wbint_Ping") { - dc_running[tid(), "_wbint_Ping"] = gettimeofday_us() +probe process("winbindd").function("_wbint_PamLogOff") { + dc_running[tid(), "_wbint_PamLogOff"] = gettimeofday_us() } -probe process("winbindd").function("_wbint_Ping").return { - if (!([tid(), "_wbint_Ping"] in dc_running)) +probe process("winbindd").function("_wbint_PamLogOff").return { + if (!([tid(), "_wbint_PamLogOff"] in dc_running)) next end = gettimeofday_us() - begin = dc_running[tid(), "_wbint_Ping"] - delete dc_running[tid(), "_wbint_Ping"] + begin = dc_running[tid(), "_wbint_PamLogOff"] + delete dc_running[tid(), "_wbint_PamLogOff"] duration = end - begin - dc_svctime["_wbint_Ping"] <<< duration + dc_svctime["_wbint_PamLogOff"] <<< duration } # -# winbind domain child function _wbint_PamAuth +# winbind domain child function _wbint_PamAuthChangePassword # -probe process("winbindd").function("_wbint_PamAuth") { - dc_running[tid(), "_wbint_PamAuth"] = gettimeofday_us() +probe process("winbindd").function("_wbint_PamAuthChangePassword") { + dc_running[tid(), "_wbint_PamAuthChangePassword"] = gettimeofday_us() } -probe process("winbindd").function("_wbint_PamAuth").return { - if (!([tid(), "_wbint_PamAuth"] in dc_running)) +probe process("winbindd").function("_wbint_PamAuthChangePassword").return { + if (!([tid(), "_wbint_PamAuthChangePassword"] in dc_running)) next end = gettimeofday_us() - begin = dc_running[tid(), "_wbint_PamAuth"] - delete dc_running[tid(), "_wbint_PamAuth"] + begin = dc_running[tid(), "_wbint_PamAuthChangePassword"] + delete dc_running[tid(), "_wbint_PamAuthChangePassword"] duration = end - begin - dc_svctime["_wbint_PamAuth"] <<< duration + dc_svctime["_wbint_PamAuthChangePassword"] <<< duration } # -# winbind domain child function _wbint_PamAuthCrap +# winbind domain child function _wbint_PamAuthCrapChangePassword # -probe process("winbindd").function("_wbint_PamAuthCrap") { - dc_running[tid(), "_wbint_PamAuthCrap"] = gettimeofday_us() +probe process("winbindd").function("_wbint_PamAuthCrapChangePassword") { + dc_running[tid(), "_wbint_PamAuthCrapChangePassword"] = gettimeofday_us() } -probe process("winbindd").function("_wbint_PamAuthCrap").return { - if (!([tid(), "_wbint_PamAuthCrap"] in dc_running)) +probe process("winbindd").function("_wbint_PamAuthCrapChangePassword").return { + if (!([tid(), "_wbint_PamAuthCrapChangePassword"] in dc_running)) next end = gettimeofday_us() - begin = dc_running[tid(), "_wbint_PamAuthCrap"] - delete dc_running[tid(), "_wbint_PamAuthCrap"] + begin = dc_running[tid(), "_wbint_PamAuthCrapChangePassword"] + delete dc_running[tid(), "_wbint_PamAuthCrapChangePassword"] duration = end - begin - dc_svctime["_wbint_PamAuthCrap"] <<< duration + dc_svctime["_wbint_PamAuthCrapChangePassword"] <<< duration } # diff --git a/librpc/idl/samr.idl b/librpc/idl/samr.idl index 867862dcd5c..fffa853ce3f 100644 --- a/librpc/idl/samr.idl +++ b/librpc/idl/samr.idl @@ -347,7 +347,7 @@ import "misc.idl", "lsa.idl", "security.idl"; DOMAIN_SERVER_DISABLED = 2 } samr_DomainServerState; - typedef struct { + typedef [public] struct { uint16 min_password_length; uint16 password_history_length; samr_PasswordProperties password_properties; diff --git a/librpc/idl/winbind.idl b/librpc/idl/winbind.idl index 8a50a53eea1..2adfc853835 100644 --- a/librpc/idl/winbind.idl +++ b/librpc/idl/winbind.idl @@ -1,5 +1,5 @@ #include "idl_types.h" -import "lsa.idl", "netlogon.idl", "misc.idl", "security.idl", "idmap.idl"; +import "lsa.idl", "netlogon.idl", "samr.idl", "misc.idl", "security.idl", "idmap.idl"; [ uuid("bf09192c-ed60-4928-9dff-d0d7bcb03ed8"), @@ -208,15 +208,62 @@ interface winbind [in, string,charset(UTF8)] char *user, [in, string,charset(UTF8)] char *domain, [in, string,charset(UTF8)] char *workstation, - [in] DATA_BLOB lm_resp, - [in] DATA_BLOB nt_resp, - [in] DATA_BLOB chal, + [in,flag(NDR_SECRET)] DATA_BLOB lm_resp, + [in,flag(NDR_SECRET)] DATA_BLOB nt_resp, + [in,flag(NDR_SECRET)] DATA_BLOB chal, [in] uint32 logon_parameters, [in] wbint_SidArray *require_membership_of_sid, [out,ref] uint8 *authoritative, [out,ref] wbint_PamAuthCrapValidation *validation ); + NTSTATUS wbint_PamLogOff( + [in,string,charset(UTF8)] char *client_name, + [in] hyper client_pid, + [in] uint32 flags, + [in,string,charset(UTF8)] char *user, + [in,string,charset(UTF8)] char *krb5ccname, + [in] hyper uid + ); + + NTSTATUS wbint_PamAuthCrapChangePassword( + [in,string,charset(UTF8)] char *client_name, + [in] hyper client_pid, + [in,string,charset(UTF8)] char *user, + [in,string,charset(UTF8)] char *domain, + [in,flag(NDR_SECRET)] DATA_BLOB new_nt_pswd, + [in,flag(NDR_SECRET)] DATA_BLOB old_nt_hash_enc, + [in,flag(NDR_SECRET)] DATA_BLOB new_lm_pswd, + [in,flag(NDR_SECRET)] DATA_BLOB old_lm_hash_enc + ); + + NTSTATUS wbint_PamAuthChangePassword( + [in,string,charset(UTF8)] char *client_name, + [in] hyper client_pid, + [in] uint32 flags, + [in,string,charset(UTF8)] char *user, + [in,string,charset(UTF8),flag(NDR_SECRET)] char *old_password, + [in,string,charset(UTF8),flag(NDR_SECRET)] char *new_password, + [out,ref] samr_DomInfo1 **dominfo, + [out,ref] samPwdChangeReason *reject_reason + ); + + typedef [enum16bit] enum { + WB_DOMINFO_DOMAIN_UNKNOWN = 0x0000, + WB_DOMINFO_DOMAIN_NATIVE = 0x0001, + WB_DOMINFO_DOMAIN_AD = 0x0002, + WB_DOMINFO_DOMAIN_PRIMARY = 0x0004, + WB_DOMINFO_DOMAIN_OFFLINE = 0x0008 + } DomainInfoFlags; + + NTSTATUS wbint_InitConnection( + [in,string,charset(UTF8)] char *dcname, + [out,string,charset(UTF8)] char **name, + [out,string,charset(UTF8)] char **alt_name, + [out,ref] dom_sid *sid, + [out,ref] DomainInfoFlags *flags + ); + /* Public methods available via IRPC */ typedef [switch_type(uint16)] union netr_LogonLevel netr_LogonLevel; diff --git a/nsswitch/winbind_struct_protocol.h b/nsswitch/winbind_struct_protocol.h index ac0558c87c5..9365b312e30 100644 --- a/nsswitch/winbind_struct_protocol.h +++ b/nsswitch/winbind_struct_protocol.h @@ -62,6 +62,7 @@ typedef char fstring[FSTRING_LEN]; * 30: added "validation_level" and "info6" to response.data.auth * 31: added "client_name" to the request * 32: added "traceid" to the request + * removed WINBINDD_INIT_CONNECTION */ #define WINBIND_INTERFACE_VERSION 32 @@ -164,9 +165,6 @@ enum winbindd_cmd { /* lookup local groups */ WINBINDD_GETSIDALIASES, - /* Initialize connection in a child */ - WINBINDD_INIT_CONNECTION, - /* Blocking calls that are not allowed on the main winbind pipe, only * between parent and children */ WINBINDD_DUAL_SID2UID, diff --git a/source3/winbindd/winbindd.h b/source3/winbindd/winbindd.h index fe286a9a686..ea5c1c0d834 100644 --- a/source3/winbindd/winbindd.h +++ b/source3/winbindd/winbindd.h @@ -103,13 +103,6 @@ struct winbindd_cm_conn { struct winbindd_domain; -struct winbindd_child_dispatch_table { - const char *name; - enum winbindd_cmd struct_cmd; - enum winbindd_result (*struct_fn)(struct winbindd_domain *domain, - struct winbindd_cli_state *state); -}; - struct winbindd_child { pid_t pid; struct winbindd_domain *domain; @@ -122,8 +115,6 @@ struct winbindd_child { struct tevent_timer *lockout_policy_event; struct tevent_timer *machine_password_change_event; - - const struct winbindd_child_dispatch_table *table; }; /* Structures to hold per domain information */ diff --git a/source3/winbindd/winbindd_domain.c b/source3/winbindd/winbindd_domain.c index 80df55a5819..b1027735c8a 100644 --- a/source3/winbindd/winbindd_domain.c +++ b/source3/winbindd/winbindd_domain.c @@ -25,39 +25,12 @@ #undef DBGC_CLASS #define DBGC_CLASS DBGC_WINBIND -static const struct winbindd_child_dispatch_table domain_dispatch_table[] = { - { - .name = "INIT_CONNECTION", - .struct_cmd = WINBINDD_INIT_CONNECTION, - .struct_fn = winbindd_dual_init_connection, - },{ - .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 = "NDRCMD", - .struct_cmd = WINBINDD_DUAL_NDRCMD, - .struct_fn = winbindd_dual_ndrcmd, - },{ - .name = NULL, - } -}; - void setup_domain_child(struct winbindd_domain *domain) { int i; for (i=0; i<lp_winbind_max_domain_connections(); i++) { setup_child(domain, &domain->children[i], - domain_dispatch_table, "log.wb", domain->name); domain->children[i].domain = domain; } diff --git a/source3/winbindd/winbindd_dual.c b/source3/winbindd/winbindd_dual.c index b880feaac13..75ecdf53968 100644 --- a/source3/winbindd/winbindd_dual.c +++ b/source3/winbindd/winbindd_dual.c @@ -47,6 +47,7 @@ #include "idmap.h" #include "libcli/auth/netlogon_creds_cli.h" #include "../lib/util/pidfile.h" +#include "librpc/gen_ndr/ndr_winbind_c.h" #undef DBGC_CLASS #define DBGC_CLASS DBGC_WINBIND @@ -467,6 +468,7 @@ struct wb_domain_request_state { struct winbindd_request *init_req; struct winbindd_response *response; struct tevent_req *pending_subreq; + struct wbint_InitConnection r; }; static void wb_domain_request_cleanup(struct tevent_req *req, @@ -575,13 +577,15 @@ static void wb_domain_request_trigger(struct tevent_req *req, if (IS_DC || domain->primary || domain->internal) { /* The primary domain has to find the DC name itself */ - state->init_req->cmd = WINBINDD_INIT_CONNECTION; - fstrcpy(state->init_req->domain_name, domain->name); - state->init_req->data.init_conn.is_primary = domain->primary; - fstrcpy(state->init_req->data.init_conn.dcname, ""); + state->r.in.dcname = talloc_strdup(state, ""); + if (tevent_req_nomem(state->r.in.dcname, req)) { + return; + } - subreq = wb_child_request_send(state, state->ev, state->child, - state->init_req); + subreq = dcerpc_wbint_InitConnection_r_send(state, + state->ev, + state->child->binding_handle, + &state->r); if (tevent_req_nomem(subreq, req)) { return; } @@ -633,16 +637,18 @@ static void wb_domain_request_gotdc(struct tevent_req *subreq) while (dcname != NULL && *dcname == '\\') { dcname++; } - state->init_req->cmd = WINBINDD_INIT_CONNECTION; - fstrcpy(state->init_req->domain_name, state->domain->name); - state->init_req->data.init_conn.is_primary = False; - fstrcpy(state->init_req->data.init_conn.dcname, - dcname); + + state->r.in.dcname = talloc_strdup(state, dcname); + if (tevent_req_nomem(state->r.in.dcname, req)) { + return; + } TALLOC_FREE(dcinfo); - subreq = wb_child_request_send(state, state->ev, state->child, - state->init_req); -- Samba Shared Repository