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

Reply via email to