The branch, master has been updated
       via  74b91490ddd s3:winbindd: split our wb_gettoken_trybuiltins() helper
       via  940effb410e s3:winbindd: split out wb_gettoken_trylocalgroups() 
function
       via  9e7025834fd s3:winbindd: add winbindd_domain_verify_sid() helper
       via  79b1934ad41 s3:winbindd: consistently use add_sid_to_array_unique() 
in winbindd_ads.c
       via  0098073ddfd s3:winbindd: use struct initializers for all struct 
winbindd_methods cases
       via  10f38aff7c2 s3:auth: let check_sam_security() add 
NETLOGON_NTLMV2_ENABLED
       via  1414004ee95 s4:auth/ntlm: let authsam_check_password_internals() 
add NETLOGON_NTLMV2_ENABLED
       via  9bab6426b9f python:tests/krb5: let netlogon.py check for 
NETLOGON_NTLMV2_ENABLED
      from  74f10bab066 selftest: force 'client use krb5 netlogon = yes' for 
admem_idmap_autorid

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 74b91490dddfdbaf7f945976de94c0387462fce2
Author: Stefan Metzmacher <[email protected]>
Date:   Sun Jul 24 00:46:06 2022 +0200

    s3:winbindd: split our wb_gettoken_trybuiltins() helper
    
    This makes the logical steps a bit cleaner and future changes easier.
    
    Signed-off-by: Stefan Metzmacher <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>
    
    Autobuild-User(master): Stefan Metzmacher <[email protected]>
    Autobuild-Date(master): Wed Jan 15 14:00:28 UTC 2025 on atb-devel-224

commit 940effb410ed0a03955902af64acc80df217d2de
Author: Stefan Metzmacher <[email protected]>
Date:   Sun Jul 24 00:44:07 2022 +0200

    s3:winbindd: split out wb_gettoken_trylocalgroups() function
    
    This makes the logical steps a bit cleaner and future changes easier.
    
    Signed-off-by: Stefan Metzmacher <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>

commit 9e7025834fd58df9d986e0b52cb28c76962be124
Author: Stefan Metzmacher <[email protected]>
Date:   Fri Jul 22 15:15:56 2022 +0200

    s3:winbindd: add winbindd_domain_verify_sid() helper
    
    Signed-off-by: Stefan Metzmacher <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>

commit 79b1934ad41a7f9c0374345bb93136fed59dc65f
Author: Stefan Metzmacher <[email protected]>
Date:   Fri Jul 22 15:15:02 2022 +0200

    s3:winbindd: consistently use add_sid_to_array_unique() in winbindd_ads.c
    
    Signed-off-by: Stefan Metzmacher <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>

commit 0098073ddfd4c9cf3b5377cc7114c4ce5f62ac54
Author: Stefan Metzmacher <[email protected]>
Date:   Tue Jul 26 10:52:19 2022 +0200

    s3:winbindd: use struct initializers for all struct winbindd_methods cases
    
    Signed-off-by: Stefan Metzmacher <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>

commit 10f38aff7c23dc20bc98cf0e02a430f8b0d7b1ad
Author: Stefan Metzmacher <[email protected]>
Date:   Wed Jan 15 12:41:21 2025 +0100

    s3:auth: let check_sam_security() add NETLOGON_NTLMV2_ENABLED
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15783
    
    Signed-off-by: Stefan Metzmacher <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>

commit 1414004ee953975c50e0ee374684ff8e01246946
Author: Stefan Metzmacher <[email protected]>
Date:   Wed Jan 15 11:57:12 2025 +0100

    s4:auth/ntlm: let authsam_check_password_internals() add 
NETLOGON_NTLMV2_ENABLED
    
    Windows returns NETLOGON_NTLMV2_ENABLED in all
    netr_LogonSamLogon* response messages.
    Even if NTLMv1 was actually used and also
    for password authentication.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15783
    
    Signed-off-by: Stefan Metzmacher <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>

commit 9bab6426b9fc4d2464597fdfa3085ea259b77710
Author: Stefan Metzmacher <[email protected]>
Date:   Wed Jan 15 12:22:34 2025 +0100

    python:tests/krb5: let netlogon.py check for NETLOGON_NTLMV2_ENABLED
    
    It's there for network_samlogon and interactive_samlogon,
    but not in ticket_samlogon.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15783
    
    Signed-off-by: Stefan Metzmacher <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>

-----------------------------------------------------------------------

Summary of changes:
 python/samba/tests/krb5/netlogon.py       | 22 ++++++++
 source3/auth/check_samsec.c               |  2 +
 source3/winbindd/wb_gettoken.c            | 24 ++++++++-
 source3/winbindd/winbindd_ads.c           | 88 ++++++++++++++++++++-----------
 source3/winbindd/winbindd_msrpc.c         | 29 +++++-----
 source3/winbindd/winbindd_reconnect.c     | 29 +++++-----
 source3/winbindd/winbindd_reconnect_ads.c | 29 +++++-----
 source4/auth/ntlm/auth_sam.c              |  1 +
 8 files changed, 150 insertions(+), 74 deletions(-)


Changeset truncated at 500 lines:

diff --git a/python/samba/tests/krb5/netlogon.py 
b/python/samba/tests/krb5/netlogon.py
index 7ada1a01d52..6320a2bd542 100755
--- a/python/samba/tests/krb5/netlogon.py
+++ b/python/samba/tests/krb5/netlogon.py
@@ -1556,6 +1556,9 @@ class NetlogonSchannel(KDCBaseTest):
                                            expect_send_encrypted,
                                            expect_recv_encrypted)
         self.assertNotEqual(validationRef_n6.base.rid, 0)
+        self.assertEqual(validationRef_n6.base.user_flags &
+                         netlogon.NETLOGON_NTLMV2_ENABLED,
+                         netlogon.NETLOGON_NTLMV2_ENABLED)
         self.assertNotEqual(validationRef_n6.base.key.key, list(b'\x00' *16))
         self.assertEqual(validationRef_n6.base.LMSessKey.key, list(b'\x00' *8))
 
@@ -1567,6 +1570,7 @@ class NetlogonSchannel(KDCBaseTest):
                                                  expect_send_encrypted,
                                                  expect_recv_encrypted)
         self.assertEqual(validationWF_n2.base.rid, validationRef_n6.base.rid)
+        self.assertEqual(validationWF_n2.base.user_flags, 
validationRef_n6.base.user_flags)
         if expect_broken_nt_crypto:
             self.assertNotEqual(validationWF_n2.base.key.key, list(b'\x00' 
*16))
             self.assertNotEqual(validationWF_n2.base.key.key, 
validationRef_n6.base.key.key)
@@ -1583,6 +1587,7 @@ class NetlogonSchannel(KDCBaseTest):
                                           expect_send_encrypted,
                                           expect_recv_encrypted)
         self.assertEqual(validationEx_n2.base.rid, validationRef_n6.base.rid)
+        self.assertEqual(validationEx_n2.base.user_flags, 
validationRef_n6.base.user_flags)
         if expect_broken_nt_crypto:
             self.assertNotEqual(validationEx_n2.base.key.key, list(b'\x00' 
*16))
             self.assertNotEqual(validationEx_n2.base.key.key, 
validationRef_n6.base.key.key)
@@ -1602,6 +1607,7 @@ class NetlogonSchannel(KDCBaseTest):
                                                  expect_send_encrypted,
                                                  expect_recv_encrypted)
         self.assertEqual(validationWF_n3.base.rid, validationRef_n6.base.rid)
+        self.assertEqual(validationWF_n3.base.user_flags, 
validationRef_n6.base.user_flags)
         if expect_broken_nt_crypto:
             self.assertNotEqual(validationWF_n3.base.key.key, list(b'\x00' 
*16))
             self.assertNotEqual(validationWF_n3.base.key.key, 
validationRef_n6.base.key.key)
@@ -1618,6 +1624,7 @@ class NetlogonSchannel(KDCBaseTest):
                                           expect_send_encrypted,
                                           expect_recv_encrypted)
         self.assertEqual(validationEx_n3.base.rid, validationRef_n6.base.rid)
+        self.assertEqual(validationEx_n3.base.user_flags, 
validationRef_n6.base.user_flags)
         if expect_broken_nt_crypto:
             self.assertNotEqual(validationEx_n3.base.key.key, list(b'\x00' 
*16))
             self.assertNotEqual(validationEx_n3.base.key.key, 
validationRef_n6.base.key.key)
@@ -1637,6 +1644,7 @@ class NetlogonSchannel(KDCBaseTest):
                                                  expect_send_encrypted,
                                                  expect_recv_encrypted)
         self.assertEqual(validationWF_n6.base.rid, validationRef_n6.base.rid)
+        self.assertEqual(validationWF_n6.base.user_flags, 
validationRef_n6.base.user_flags)
         self.assertEqual(validationWF_n6.base.key.key, 
validationRef_n6.base.key.key)
         validationEx_n6 = self.do_LogonEx(ncreds, conn,
                                           logon_type_n, logon_info_n,
@@ -1644,6 +1652,7 @@ class NetlogonSchannel(KDCBaseTest):
                                           expect_send_encrypted,
                                           expect_recv_encrypted)
         self.assertEqual(validationEx_n6.base.rid, validationRef_n6.base.rid)
+        self.assertEqual(validationEx_n6.base.user_flags, 
validationRef_n6.base.user_flags)
         self.assertEqual(validationEx_n6.base.key.key, 
validationRef_n6.base.key.key)
 
         self.do_CheckCapabilities(ncreds, conn)
@@ -1703,6 +1712,9 @@ class NetlogonSchannel(KDCBaseTest):
             self.do_CheckCapabilities(ncreds, conn)
             return
         self.assertNotEqual(validationRef_i6.base.rid, 0)
+        self.assertEqual(validationRef_i6.base.user_flags &
+                         netlogon.NETLOGON_NTLMV2_ENABLED,
+                         netlogon.NETLOGON_NTLMV2_ENABLED)
         self.assertEqual(validationRef_i6.base.key.key, list(b'\x00' *16))
         self.assertEqual(validationRef_i6.base.LMSessKey.key, list(b'\x00' *8))
 
@@ -1714,6 +1726,7 @@ class NetlogonSchannel(KDCBaseTest):
                                                  expect_send_encrypted,
                                                  expect_recv_encrypted)
         self.assertEqual(validationWF_i2.base.rid, validationRef_i6.base.rid)
+        self.assertEqual(validationWF_i2.base.user_flags, 
validationRef_i6.base.user_flags)
         self.assertEqual(validationWF_i2.base.key.key, 
validationRef_i6.base.key.key)
         self.assertEqual(validationWF_i2.base.LMSessKey.key, 
validationRef_i6.base.LMSessKey.key)
         validationEx_i2 = self.do_LogonEx(ncreds, conn,
@@ -1722,6 +1735,7 @@ class NetlogonSchannel(KDCBaseTest):
                                           expect_send_encrypted,
                                           expect_recv_encrypted)
         self.assertEqual(validationEx_i2.base.rid, validationRef_i6.base.rid)
+        self.assertEqual(validationEx_i2.base.user_flags, 
validationRef_i6.base.user_flags)
         self.assertEqual(validationEx_i2.base.key.key, 
validationRef_i6.base.key.key)
         self.assertEqual(validationEx_i2.base.LMSessKey.key, 
validationRef_i6.base.LMSessKey.key)
 
@@ -1733,6 +1747,7 @@ class NetlogonSchannel(KDCBaseTest):
                                                  expect_send_encrypted,
                                                  expect_recv_encrypted)
         self.assertEqual(validationWF_i3.base.rid, validationRef_i6.base.rid)
+        self.assertEqual(validationWF_i3.base.user_flags, 
validationRef_i6.base.user_flags)
         self.assertEqual(validationWF_i3.base.key.key, 
validationRef_i6.base.key.key)
         self.assertEqual(validationWF_i3.base.LMSessKey.key, 
validationRef_i6.base.LMSessKey.key)
         validationEx_i3 = self.do_LogonEx(ncreds, conn,
@@ -1741,6 +1756,7 @@ class NetlogonSchannel(KDCBaseTest):
                                           expect_send_encrypted,
                                           expect_recv_encrypted)
         self.assertEqual(validationEx_i3.base.rid, validationRef_i6.base.rid)
+        self.assertEqual(validationEx_i3.base.user_flags, 
validationRef_i6.base.user_flags)
         self.assertEqual(validationEx_i3.base.key.key, 
validationRef_i6.base.key.key)
         self.assertEqual(validationEx_i3.base.LMSessKey.key, 
validationRef_i6.base.LMSessKey.key)
 
@@ -1752,6 +1768,7 @@ class NetlogonSchannel(KDCBaseTest):
                                                  expect_send_encrypted,
                                                  expect_recv_encrypted)
         self.assertEqual(validationWF_i6.base.rid, validationRef_i6.base.rid)
+        self.assertEqual(validationWF_i6.base.user_flags, 
validationRef_i6.base.user_flags)
         self.assertEqual(validationWF_i6.base.key.key, 
validationRef_i6.base.key.key)
         self.assertEqual(validationWF_i6.base.LMSessKey.key, 
validationRef_i6.base.LMSessKey.key)
         validationEx_i6 = self.do_LogonEx(ncreds, conn,
@@ -1760,6 +1777,7 @@ class NetlogonSchannel(KDCBaseTest):
                                           expect_send_encrypted,
                                           expect_recv_encrypted)
         self.assertEqual(validationEx_i6.base.rid, validationRef_i6.base.rid)
+        self.assertEqual(validationEx_i6.base.user_flags, 
validationRef_i6.base.user_flags)
         self.assertEqual(validationEx_i6.base.key.key, 
validationRef_i6.base.key.key)
         self.assertEqual(validationEx_i6.base.LMSessKey.key, 
validationRef_i6.base.LMSessKey.key)
 
@@ -1911,6 +1929,8 @@ class NetlogonSchannel(KDCBaseTest):
             self.assertIsNotNone(validationEx.user_information)
             self.assertNotEqual(validationEx.user_information.base.rid, 0)
             self.assertEqual(validationEx.user_information.base.key.key, 
list(b'\x00' *16))
+            self.assertEqual(validationEx.user_information.base.user_flags &
+                             netlogon.NETLOGON_NTLMV2_ENABLED, 0)
             self.assertIsNone(validationEx.device_information)
 
         expect_send_encrypted = False
@@ -1939,6 +1959,8 @@ class NetlogonSchannel(KDCBaseTest):
             self.assertEqual(validationWF.user_information.base.rid,
                              validationEx.user_information.base.rid)
             self.assertEqual(validationWF.user_information.base.key.key, 
list(b'\x00' *16))
+            self.assertEqual(validationWF.user_information.base.user_flags,
+                             validationEx.user_information.base.user_flags)
             self.assertIsNone(validationWF.device_information)
 
         self.do_CheckCapabilities(ncreds, conn)
diff --git a/source3/auth/check_samsec.c b/source3/auth/check_samsec.c
index 1e55fedb615..cfaf413eba0 100644
--- a/source3/auth/check_samsec.c
+++ b/source3/auth/check_samsec.c
@@ -575,6 +575,8 @@ NTSTATUS check_sam_security(const DATA_BLOB *challenge,
                goto done;
        }
 
+       (*server_info)->info3->base.user_flags |= NETLOGON_NTLMV2_ENABLED;
+
        (*server_info)->session_key =
                data_blob_talloc(*server_info, user_sess_key.data,
                                 user_sess_key.length);
diff --git a/source3/winbindd/wb_gettoken.c b/source3/winbindd/wb_gettoken.c
index 3930f71d98d..4e29691802d 100644
--- a/source3/winbindd/wb_gettoken.c
+++ b/source3/winbindd/wb_gettoken.c
@@ -40,7 +40,9 @@ static NTSTATUS wb_add_rids_to_sids(TALLOC_CTX *mem_ctx,
 
 static void wb_gettoken_gotuser(struct tevent_req *subreq);
 static void wb_gettoken_gotgroups(struct tevent_req *subreq);
+static void wb_gettoken_trylocalgroups(struct tevent_req *req);
 static void wb_gettoken_gotlocalgroups(struct tevent_req *subreq);
+static void wb_gettoken_trybuiltins(struct tevent_req *req);
 static void wb_gettoken_gotbuiltins(struct tevent_req *subreq);
 
 struct tevent_req *wb_gettoken_send(TALLOC_CTX *mem_ctx,
@@ -116,7 +118,6 @@ static void wb_gettoken_gotgroups(struct tevent_req *subreq)
                req, struct wb_gettoken_state);
        uint32_t i, num_groups;
        struct dom_sid *groups;
-       struct winbindd_domain *domain;
        NTSTATUS status;
        struct dom_sid_buf buf;
 
@@ -138,6 +139,16 @@ static void wb_gettoken_gotgroups(struct tevent_req 
*subreq)
                }
        }
 
+       wb_gettoken_trylocalgroups(req);
+}
+
+static void wb_gettoken_trylocalgroups(struct tevent_req *req)
+{
+       struct wb_gettoken_state *state = tevent_req_data(
+               req, struct wb_gettoken_state);
+       struct winbindd_domain *domain = NULL;
+       struct tevent_req *subreq = NULL;
+
        if (!state->expand_local_aliases) {
                D_DEBUG("Done. Not asked to expand local aliases.\n");
                tevent_req_done(req);
@@ -171,7 +182,6 @@ static void wb_gettoken_gotlocalgroups(struct tevent_req 
*subreq)
                req, struct wb_gettoken_state);
        uint32_t num_rids;
        uint32_t *rids;
-       struct winbindd_domain *domain;
        NTSTATUS status;
 
        status = wb_lookupuseraliases_recv(subreq, state, &num_rids, &rids);
@@ -188,6 +198,16 @@ static void wb_gettoken_gotlocalgroups(struct tevent_req 
*subreq)
        }
        TALLOC_FREE(rids);
 
+       wb_gettoken_trybuiltins(req);
+}
+
+static void wb_gettoken_trybuiltins(struct tevent_req *req)
+{
+       struct wb_gettoken_state *state = tevent_req_data(
+               req, struct wb_gettoken_state);
+       struct winbindd_domain *domain = NULL;
+       struct tevent_req *subreq = NULL;
+
        /*
         * Now expand the builtin groups
         */
diff --git a/source3/winbindd/winbindd_ads.c b/source3/winbindd/winbindd_ads.c
index 90f1fbf15ff..42b8df2623d 100644
--- a/source3/winbindd/winbindd_ads.c
+++ b/source3/winbindd/winbindd_ads.c
@@ -568,6 +568,20 @@ static NTSTATUS rids_to_names(struct winbindd_domain 
*domain,
                                           domain_name, names, types);
 }
 
+static NTSTATUS winbindd_domain_verify_sid(struct winbindd_domain *domain,
+                                          const struct dom_sid *extra_sid)
+{
+       bool ret;
+
+       ret = sid_check_is_in_builtin(extra_sid);
+       if (ret) {
+               /* don't allow Builtin groups from ADS */
+               return NT_STATUS_INVALID_SUB_AUTHORITY;
+       }
+
+       return NT_STATUS_OK;
+}
+
 /* Lookup groups a user is a member of - alternate method, for when
    tokenGroups are not available. */
 static NTSTATUS lookup_usergroups_member(struct winbindd_domain *domain,
@@ -637,8 +651,10 @@ static NTSTATUS lookup_usergroups_member(struct 
winbindd_domain *domain,
        num_groups = 0;
 
        /* always add the primary group to the sid array */
-       status = add_sid_to_array(mem_ctx, primary_group, user_sids,
-                                 &num_groups);
+       status = add_sid_to_array_unique(mem_ctx,
+                                        primary_group,
+                                        user_sids,
+                                        &num_groups);
        if (!NT_STATUS_IS_OK(status)) {
                goto done;
        }
@@ -653,13 +669,16 @@ static NTSTATUS lookup_usergroups_member(struct 
winbindd_domain *domain,
                                continue;
                        }
 
-                       /* ignore Builtin groups from ADS - Guenther */
-                       if (sid_check_is_in_builtin(&group_sid)) {
+                       /* filter unexpected sids */
+                       status = winbindd_domain_verify_sid(domain, &group_sid);
+                       if (!NT_STATUS_IS_OK(status)) {
                                continue;
                        }
 
-                       status = add_sid_to_array(mem_ctx, &group_sid,
-                                                 user_sids, &num_groups);
+                       status = add_sid_to_array_unique(mem_ctx,
+                                                        &group_sid,
+                                                        user_sids,
+                                                        &num_groups);
                        if (!NT_STATUS_IS_OK(status)) {
                                goto done;
                        }
@@ -726,8 +745,10 @@ static NTSTATUS lookup_usergroups_memberof(struct 
winbindd_domain *domain,
        num_groups = 0;
 
        /* always add the primary group to the sid array */
-       status = add_sid_to_array(mem_ctx, primary_group, user_sids,
-                                 &num_groups);
+       status = add_sid_to_array_unique(mem_ctx,
+                                        primary_group,
+                                        user_sids,
+                                        &num_groups);
        if (!NT_STATUS_IS_OK(status)) {
                goto done;
        }
@@ -764,13 +785,16 @@ static NTSTATUS lookup_usergroups_memberof(struct 
winbindd_domain *domain,
 
        for (i=0; i<num_sids; i++) {
 
-               /* ignore Builtin groups from ADS - Guenther */
-               if (sid_check_is_in_builtin(&group_sids[i])) {
+               /* filter unexpected sids */
+               status = winbindd_domain_verify_sid(domain, &group_sids[i]);
+               if (!NT_STATUS_IS_OK(status)) {
                        continue;
                }
 
-               status = add_sid_to_array(mem_ctx, &group_sids[i], user_sids,
-                                         &num_groups);
+               status = add_sid_to_array_unique(mem_ctx,
+                                                &group_sids[i],
+                                                user_sids,
+                                                &num_groups);
                if (!NT_STATUS_IS_OK(status)) {
                        goto done;
                }
@@ -915,16 +939,19 @@ static NTSTATUS lookup_usergroups(struct winbindd_domain 
*domain,
        *user_sids = NULL;
        num_groups = 0;
 
-       status = add_sid_to_array(mem_ctx, &primary_group, user_sids,
-                                 &num_groups);
+       status = add_sid_to_array_unique(mem_ctx,
+                                        &primary_group,
+                                        user_sids,
+                                        &num_groups);
        if (!NT_STATUS_IS_OK(status)) {
                goto done;
        }
 
        for (i=0;i<count;i++) {
 
-               /* ignore Builtin groups from ADS - Guenther */
-               if (sid_check_is_in_builtin(&sids[i])) {
+               /* filter unexpected sids */
+               status = winbindd_domain_verify_sid(domain, &sids[i]);
+               if (!NT_STATUS_IS_OK(status)) {
                        continue;
                }
 
@@ -1506,20 +1533,21 @@ static NTSTATUS trusted_domains(struct winbindd_domain 
*domain,
 
 /* the ADS backend methods are exposed via this structure */
 struct winbindd_methods ads_methods = {
-       True,
-       query_user_list,
-       enum_dom_groups,
-       enum_local_groups,
-       name_to_sid,
-       sid_to_name,
-       rids_to_names,
-       lookup_usergroups,
-       lookup_useraliases,
-       lookup_groupmem,
-       lookup_aliasmem,
-       lockout_policy,
-       password_policy,
-       trusted_domains,
+       .consistent             = true,
+
+       .query_user_list        = query_user_list,
+       .enum_dom_groups        = enum_dom_groups,
+       .enum_local_groups      = enum_local_groups,
+       .name_to_sid            = name_to_sid,
+       .sid_to_name            = sid_to_name,
+       .rids_to_names          = rids_to_names,
+       .lookup_usergroups      = lookup_usergroups,
+       .lookup_useraliases     = lookup_useraliases,
+       .lookup_groupmem        = lookup_groupmem,
+       .lookup_aliasmem        = lookup_aliasmem,
+       .lockout_policy         = lockout_policy,
+       .password_policy        = password_policy,
+       .trusted_domains        = trusted_domains,
 };
 
 #endif
diff --git a/source3/winbindd/winbindd_msrpc.c 
b/source3/winbindd/winbindd_msrpc.c
index 9324633aa14..a522172bd2d 100644
--- a/source3/winbindd/winbindd_msrpc.c
+++ b/source3/winbindd/winbindd_msrpc.c
@@ -1160,18 +1160,19 @@ static NTSTATUS winbindd_lookup_names(TALLOC_CTX 
*mem_ctx,
 
 /* the rpc backend methods are exposed via this structure */
 struct winbindd_methods msrpc_methods = {
-       False,
-       msrpc_query_user_list,
-       msrpc_enum_dom_groups,
-       msrpc_enum_local_groups,
-       msrpc_name_to_sid,
-       msrpc_sid_to_name,
-       msrpc_rids_to_names,
-       msrpc_lookup_usergroups,
-       msrpc_lookup_useraliases,
-       msrpc_lookup_groupmem,
-       msrpc_lookup_aliasmem,
-       msrpc_lockout_policy,
-       msrpc_password_policy,
-       msrpc_trusted_domains,
+       .consistent             = false,
+
+       .query_user_list        = msrpc_query_user_list,
+       .enum_dom_groups        = msrpc_enum_dom_groups,
+       .enum_local_groups      = msrpc_enum_local_groups,
+       .name_to_sid            = msrpc_name_to_sid,
+       .sid_to_name            = msrpc_sid_to_name,
+       .rids_to_names          = msrpc_rids_to_names,
+       .lookup_usergroups      = msrpc_lookup_usergroups,
+       .lookup_useraliases     = msrpc_lookup_useraliases,
+       .lookup_groupmem        = msrpc_lookup_groupmem,
+       .lookup_aliasmem        = msrpc_lookup_aliasmem,
+       .lockout_policy         = msrpc_lockout_policy,
+       .password_policy        = msrpc_password_policy,
+       .trusted_domains        = msrpc_trusted_domains,
 };
diff --git a/source3/winbindd/winbindd_reconnect.c 
b/source3/winbindd/winbindd_reconnect.c
index c49831b3c13..76255a79707 100644
--- a/source3/winbindd/winbindd_reconnect.c
+++ b/source3/winbindd/winbindd_reconnect.c
@@ -337,18 +337,19 @@ static NTSTATUS trusted_domains(struct winbindd_domain 
*domain,
 
 /* the rpc backend methods are exposed via this structure */
 struct winbindd_methods reconnect_methods = {
-       False,
-       query_user_list,
-       enum_dom_groups,
-       enum_local_groups,
-       name_to_sid,
-       sid_to_name,
-       rids_to_names,
-       lookup_usergroups,
-       lookup_useraliases,
-       lookup_groupmem,
-       lookup_aliasmem,
-       lockout_policy,
-       password_policy,
-       trusted_domains,
+       .consistent             = false,
+
+       .query_user_list        = query_user_list,
+       .enum_dom_groups        = enum_dom_groups,
+       .enum_local_groups      = enum_local_groups,
+       .name_to_sid            = name_to_sid,
+       .sid_to_name            = sid_to_name,
+       .rids_to_names          = rids_to_names,
+       .lookup_usergroups      = lookup_usergroups,
+       .lookup_useraliases     = lookup_useraliases,
+       .lookup_groupmem        = lookup_groupmem,
+       .lookup_aliasmem        = lookup_aliasmem,
+       .lockout_policy         = lockout_policy,
+       .password_policy        = password_policy,
+       .trusted_domains        = trusted_domains,
 };
diff --git a/source3/winbindd/winbindd_reconnect_ads.c 
b/source3/winbindd/winbindd_reconnect_ads.c
index 367f4c68e88..c013836595a 100644
--- a/source3/winbindd/winbindd_reconnect_ads.c
+++ b/source3/winbindd/winbindd_reconnect_ads.c
@@ -343,20 +343,21 @@ static NTSTATUS trusted_domains(struct winbindd_domain 
*domain,
 
 /* the rpc backend methods are exposed via this structure */
 struct winbindd_methods reconnect_ads_methods = {
-       true,
-       query_user_list,
-       enum_dom_groups,
-       enum_local_groups,
-       name_to_sid,
-       sid_to_name,
-       rids_to_names,
-       lookup_usergroups,
-       lookup_useraliases,
-       lookup_groupmem,
-       lookup_aliasmem,
-       lockout_policy,
-       password_policy,
-       trusted_domains,
+       .consistent             = true,
+
+       .query_user_list        = query_user_list,
+       .enum_dom_groups        = enum_dom_groups,
+       .enum_local_groups      = enum_local_groups,
+       .name_to_sid            = name_to_sid,
+       .sid_to_name            = sid_to_name,
+       .rids_to_names          = rids_to_names,
+       .lookup_usergroups      = lookup_usergroups,
+       .lookup_useraliases     = lookup_useraliases,
+       .lookup_groupmem        = lookup_groupmem,
+       .lookup_aliasmem        = lookup_aliasmem,
+       .lockout_policy         = lockout_policy,
+       .password_policy        = password_policy,
+       .trusted_domains        = trusted_domains,
 };
 
 #endif
diff --git a/source4/auth/ntlm/auth_sam.c b/source4/auth/ntlm/auth_sam.c
index e3eef793cd1..4657720316a 100644
--- a/source4/auth/ntlm/auth_sam.c
+++ b/source4/auth/ntlm/auth_sam.c
@@ -1124,6 +1124,7 @@ static NTSTATUS authsam_check_password_internals(struct 
auth_method_context *ctx
                talloc_free(tmp_ctx);
                return nt_status;
        }
+       (*user_info_dc)->info->user_flags |= NETLOGON_NTLMV2_ENABLED;
 
        result = dsdb_is_protected_user(ctx->auth_ctx->sam_ctx,
                                        (*user_info_dc)->sids,


-- 
Samba Shared Repository

Reply via email to