[SCM] Samba Shared Repository - branch master updated

Douglas Bagnall dbagnall at samba.org
Wed Aug 27 04:45:02 UTC 2025


The branch, master has been updated
       via  50edad8249c s4:dsdb:tests: Add tests for msDS-KeyCredentialLink attribute
       via  a9c6e1ac370 s4:dsdb: Implement msDS-KeyCredentialLink attribute
       via  cd39c04fd92 s4:dsdb:tests: Add get_creds() method
       via  1bceb8ff3f8 lib:compression: Fix code spelling
       via  b5cee3b2dbd s4:dsdb: Remove outdated comments
       via  d41d350ce7f s4:dsdb:tests: Remove outdated comment
       via  46856348496 s4:dsdb:acl: Fix LDB flags comparison
       via  3f9f2c9efcc s4:dsdb: Allow an SPN value to match the original dNSHostName with Validated Write
       via  0615268a1c0 s4:dsdb:tests: Correct unprefixed f‐string
       via  7fd5a900d16 s4:dsdb:tests: Correct test name
       via  2995eb43878 s4:dsdb:tests: Reformat ACEs to be more readable
       via  d2142640f09 s4:dsdb:tests: Use sAMAccountName GUID constant
       via  10d0d970065 setup:adprep: Import the latest {Domain-Wide,Forest-Wide,Read-Only-Domain-Controller,Schema}-Updates.md
       via  32bfbc788d2 python:samba: Raise an exception if we can’t parse a Markdown operation
       via  c88164ee688 pidl: Validate Python bytes objects
       via  4c1216108ac s4:setup: Fix spelling
       via  5934b746adc schema: Add Validated-Write-Computer Extended Right from Windows Server 2016
       via  3d7052278ba ldb: Do not return None from __str__()
       via  264faeaea05 tests/krb5: Remove redundant line
       via  0c92628340e lib:crypto: Don’t pass null pointer to memcpy()
       via  bef2ef342e9 lib:crypto: Remove trailing whitespace
       via  c018d8e19e3 lib:async_req: Initialize variables
       via  fc0f9dc109b s3:lib: Initialize pointer to NULL
       via  38dfbf305fd libcli: Fix maybe-uninitialized warning
       via  a7f59566ae1 ldb: Fix maybe-uninitialized warning
      from  81d98b780b8 CID 1509059 winbind: Fixing print statement for time_t

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


- Log -----------------------------------------------------------------
commit 50edad8249c7c1063b0e38f02c2ea5a53e9d430d
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Wed Aug 20 19:10:43 2025 +1200

    s4:dsdb:tests: Add tests for msDS-KeyCredentialLink attribute
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
    
    Autobuild-User(master): Douglas Bagnall <dbagnall at samba.org>
    Autobuild-Date(master): Wed Aug 27 04:44:59 UTC 2025 on atb-devel-224

commit a9c6e1ac37065d0b7a4c459c3b2933321ec074c3
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Thu Jun 5 12:28:20 2025 +1200

    s4:dsdb: Implement msDS-KeyCredentialLink attribute
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit cd39c04fd9279d84aa3861e8e0f70409e4c3fc99
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Wed Aug 13 11:41:53 2025 +1200

    s4:dsdb:tests: Add get_creds() method
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit 1bceb8ff3f854e10345c7e92b37cf9f1fac8cb9e
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Wed Aug 13 10:17:46 2025 +1200

    lib:compression: Fix code spelling
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit b5cee3b2dbdf20cefe71461b921a13d4ed37113b
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Wed Aug 13 09:54:00 2025 +1200

    s4:dsdb: Remove outdated comments
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit d41d350ce7f54d688c2c154fe86e073f77736c42
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Tue Aug 12 17:19:55 2025 +1200

    s4:dsdb:tests: Remove outdated comment
    
    The relevant tests were enabled in commit 8cb416a0b569017e1928a7a1cead723ce64ca314.
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit 468563484963216e632ea0f8cbc71aede837215e
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Tue Aug 12 13:56:16 2025 +1200

    s4:dsdb:acl: Fix LDB flags comparison
    
    LDB_FLAG_MOD_* values are not actually flags, and the previous
    comparison was equivalent to
    
    (el->flags & LDB_FLAG_MOD_MASK) == 0
    
    which is only true if none of the LDB_FLAG_MOD_* values are set, so we
    would not successfully return if the element was a DELETE. Correct the
    expression to what it was intended to be.
    
    Commit 99b805e4cbeec232c65adb1a6f3fb326b55c4496 fixed a similar issue.
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit 3f9f2c9efccdfc092869643ceffc2bb050858eb6
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Tue Jul 29 15:59:09 2025 +1200

    s4:dsdb: Allow an SPN value to match the original dNSHostName with Validated Write
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit 0615268a1c0149d5acee9138873c1ed641637e0d
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Tue Jul 29 15:02:32 2025 +1200

    s4:dsdb:tests: Correct unprefixed f‐string
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit 7fd5a900d16b3293a2fc522325f3e002dae2c4e1
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Tue Jul 29 15:00:16 2025 +1200

    s4:dsdb:tests: Correct test name
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit 2995eb438784c5c80cb9807dd7bdacd94392f814
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Tue Jul 29 14:48:23 2025 +1200

    s4:dsdb:tests: Reformat ACEs to be more readable
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit d2142640f0920eb57131f7106a683334255eef42
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Tue Jul 29 13:47:20 2025 +1200

    s4:dsdb:tests: Use sAMAccountName GUID constant
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit 10d0d9700654b6f83611bcf927689528b7009093
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Tue Jun 17 17:04:45 2025 +1200

    setup:adprep: Import the latest {Domain-Wide,Forest-Wide,Read-Only-Domain-Controller,Schema}-Updates.md
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit 32bfbc788d2fd161569f2ac3c192667a3cd196a9
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Tue Aug 12 12:26:52 2025 +1200

    python:samba: Raise an exception if we can’t parse a Markdown operation
    
    Otherwise we would continue with the wrong GUID and filename.
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit c88164ee6887d21ddf5d1a272d31c1178e8cc23b
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Tue Jun 17 16:36:16 2025 +1200

    pidl: Validate Python bytes objects
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit 4c1216108acaffc33f754cb5f5be493c1d37ac7b
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Tue Jun 17 16:28:03 2025 +1200

    s4:setup: Fix spelling
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit 5934b746adc80e39521eb69361374c905dc9870a
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Tue Jun 17 16:22:56 2025 +1200

    schema: Add Validated-Write-Computer Extended Right from Windows Server 2016
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit 3d7052278ba59edf3aa9283985733d107133072b
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Mon Jun 16 11:51:14 2025 +1200

    ldb: Do not return None from __str__()
    
    Python will complain with “__str__ returned non-string (type NoneType)”.
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit 264faeaea05175b58a6df87f7433707de010e4b5
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Tue Jun 10 12:43:21 2025 +1200

    tests/krb5: Remove redundant line
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit 0c92628340ea7b6e22c2a6b61e7dfb91f82879d5
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Mon May 26 12:00:16 2025 +1200

    lib:crypto: Don’t pass null pointer to memcpy()
    
    This results in undefined behaviour.
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit bef2ef342e973f22e423eef7fc2e01361ee5c17c
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Mon May 26 11:59:53 2025 +1200

    lib:crypto: Remove trailing whitespace
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit c018d8e19e38b894392d5e06db10ae7b2e4df8f9
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Mon May 19 10:31:47 2025 +1200

    lib:async_req: Initialize variables
    
    ../../lib/async_req/async_sock.c: In function ‘writev_do’:
    ../../lib/async_req/async_sock.c:360:12: error: ‘written’ may be used uninitialized [-Werror=maybe-uninitialized]
      360 |         if ((written == -1) &&
          |            ^
    ../../lib/async_req/async_sock.c:343:17: note: ‘written’ was declared here
      343 |         ssize_t written;
          |                 ^~~~~~~
    ../../lib/async_req/async_sock.c: In function ‘read_packet_do’:
    ../../lib/async_req/async_sock.c:563:12: error: ‘nread’ may be used uninitialized [-Werror=maybe-uninitialized]
      563 |         if ((nread == -1) && (errno == EINTR)) {
          |            ^
    ../../lib/async_req/async_sock.c:531:17: note: ‘nread’ was declared here
      531 |         ssize_t nread, more;
          |                 ^~~~~
    cc1: all warnings being treated as errors
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit fc0f9dc109b833855f0c92fcd6d7409e337aa6cb
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Thu Feb 20 15:05:42 2025 +1300

    s3:lib: Initialize pointer to NULL
    
    ../../source3/lib/netapi/tests/netdisplay.c: In function ‘test_netquerydisplayinformation’:
    ../../source3/lib/netapi/tests/netdisplay.c:87:45: error: ‘current_name’ may be used uninitialized [-Werror=maybe-uninitialized]
       87 |                                 if (name && strcasecmp(current_name, name) == 0) {
          |                                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ../../source3/lib/netapi/tests/netdisplay.c:37:21: note: ‘current_name’ was declared here
       37 |         const char *current_name;
          |                     ^~~~~~~~~~~~
    cc1: all warnings being treated as errors
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit 38dfbf305fd05447a8dce11693a3e8c4970bbc2c
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Thu Feb 20 13:51:24 2025 +1300

    libcli: Fix maybe-uninitialized warning
    
    ../../libcli/wsp/wsp_aqs.c: In function ‘create_size_range_shortcut’:
    ../../libcli/wsp/wsp_aqs.c:872:37: error: ‘upper_size’ may be used uninitialized [-Werror=maybe-uninitialized]
      872 |                 right->value.number = upper_size;
          |                 ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
    ../../libcli/wsp/wsp_aqs.c:835:18: note: ‘upper_size’ was declared here
      835 |         uint32_t upper_size;
          |                  ^~~~~~~~~~
    cc1: all warnings being treated as errors
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit a7f59566ae1b742ec126822d49d6b781e612051d
Author: Jennifer Sutton <jennifersutton at catalyst.net.nz>
Date:   Thu Feb 20 13:41:48 2025 +1300

    ldb: Fix maybe-uninitialized warning
    
    In file included from ../../lib/ldb/include/ldb.h:50,
                     from ../../lib/ldb/include/ldb_private.h:43,
                     from ../../lib/ldb/common/ldb_pack.c:34:
    ../../lib/ldb/common/ldb_pack.c: In function ‘ldb_filter_attrs’:
    ../../lib/talloc/talloc.h:1173:48: error: ‘i’ may be used uninitialized [-Werror=maybe-uninitialized]
     1173 | #define talloc_array(ctx, type, count) (type *)_talloc_array(ctx, sizeof(type), count, #type)
          |                                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ../../lib/ldb/common/ldb_pack.c:1178:34: note: in expansion of macro ‘talloc_array’
     1178 |         filtered_msg->elements = talloc_array(filtered_msg,
          |                                  ^~~~~~~~~~~~
    ../../lib/ldb/common/ldb_pack.c:1134:22: note: ‘i’ was declared here
     1134 |         unsigned int i;
          |                      ^
    cc1: all warnings being treated as errors
    
    Signed-off-by: Jennifer Sutton <jennifersutton at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

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

Summary of changes:
 lib/async_req/async_sock.c                         |   4 +-
 lib/compression/tests/test_lzx_huffman.c           |   2 +-
 lib/crypto/md4.c                                   |  62 +--
 lib/ldb/common/ldb_pack.c                          |   2 +-
 lib/ldb/pyldb.c                                    |   2 +-
 libcli/wsp/wsp_aqs.c                               |   4 +-
 libds/common/flags.h                               |   2 +
 librpc/idl/security.idl                            |   1 +
 pidl/lib/Parse/Pidl/Samba4/Python.pm               |   6 +
 python/samba/ms_forest_updates_markdown.py         |  15 +-
 python/samba/provision/__init__.py                 |  11 +-
 python/samba/tests/krb5/test_smb.py                |   2 -
 source3/lib/netapi/tests/netdisplay.c              |   2 +-
 source4/dsdb/gmsa/gkdi.c                           |   2 -
 source4/dsdb/gmsa/gkdi.h                           |   2 -
 source4/dsdb/pydsdb.c                              |   2 +
 source4/dsdb/samdb/ldb_modules/acl.c               | 264 +++++++++++-
 source4/dsdb/tests/python/acl.py                   |  96 ++---
 source4/dsdb/tests/python/key_credential_link.py   | 474 +++++++++++++++++++++
 source4/selftest/tests.py                          |   2 +
 .../Domain-Wide-Updates.md.unused                  |  16 +-
 .../WindowsServerDocs/Forest-Wide-Updates.md       | 137 +++---
 .../Read-Only-Domain-Controller-Updates.md.unused  |  10 +-
 .../adprep/WindowsServerDocs/Schema-Updates.md     | 355 ++++++++++++++-
 .../adprep/samba-4.23-missing-for-schema81.ldif    |  13 +
 source4/setup/extended-rights.ldif                 |  17 +-
 testprogs/blackbox/dbcheck-oldrelease.sh           |   3 +
 testprogs/blackbox/upgradeprovision-oldrelease.sh  |   3 +
 28 files changed, 1296 insertions(+), 215 deletions(-)
 create mode 100755 source4/dsdb/tests/python/key_credential_link.py
 create mode 100644 source4/setup/adprep/samba-4.23-missing-for-schema81.ldif


Changeset truncated at 500 lines:

diff --git a/lib/async_req/async_sock.c b/lib/async_req/async_sock.c
index e90619056ed..b25d4cc3731 100644
--- a/lib/async_req/async_sock.c
+++ b/lib/async_req/async_sock.c
@@ -439,7 +439,7 @@ static bool writev_cancel(struct tevent_req *req)
 
 static void writev_do(struct tevent_req *req, struct writev_state *state)
 {
-	ssize_t written;
+	ssize_t written = -1;
 	bool ok;
 
 	if (state->is_sock) {
@@ -627,7 +627,7 @@ static void read_packet_do(struct tevent_req *req,
 	struct read_packet_state *state =
 		tevent_req_data(req, struct read_packet_state);
 	size_t total;
-	ssize_t nread, more;
+	ssize_t nread = -1, more;
 	uint8_t *tmp;
 
 retry:
diff --git a/lib/compression/tests/test_lzx_huffman.c b/lib/compression/tests/test_lzx_huffman.c
index 7770535c1e9..5016bcc6fce 100644
--- a/lib/compression/tests/test_lzx_huffman.c
+++ b/lib/compression/tests/test_lzx_huffman.c
@@ -1137,7 +1137,7 @@ static void test_lzxpress_huffman_short_boring_strings(void **state)
 	size_t i;
 	/*
 	 * How do short repetitive strings work? We're poking at the limit
-	 * around which LZ77 comprssion is turned on.
+	 * around which LZ77 compression is turned on.
 	 *
 	 * For this test we don't change the blob memory between runs, just
 	 * the declared length.
diff --git a/lib/crypto/md4.c b/lib/crypto/md4.c
index 831fe32ecb8..d71a14eb37e 100644
--- a/lib/crypto/md4.c
+++ b/lib/crypto/md4.c
@@ -1,18 +1,18 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
    a implementation of MD4 designed for use in the SMB authentication protocol
    Copyright (C) Andrew Tridgell 1997-1998.
-   
+
    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/>.
 */
@@ -20,7 +20,7 @@
 #include "replace.h"
 #include "../lib/crypto/md4.h"
 
-/* NOTE: This code makes no attempt to be fast! 
+/* NOTE: This code makes no attempt to be fast!
 
    It assumes that a int is at least 32 bits long
 */
@@ -36,7 +36,7 @@ static uint32_t F(uint32_t X, uint32_t Y, uint32_t Z)
 
 static uint32_t G(uint32_t X, uint32_t Y, uint32_t Z)
 {
-	return (X&Y) | (X&Z) | (Y&Z); 
+	return (X&Y) | (X&Z) | (Y&Z);
 }
 
 static uint32_t H(uint32_t X, uint32_t Y, uint32_t Z)
@@ -66,41 +66,41 @@ static void mdfour64(struct mdfour_state *s, uint32_t *M)
 
 	AA = s->A; BB = s->B; CC = s->C; DD = s->D;
 
-        ROUND1(s->A,s->B,s->C,s->D,  0,  3);  ROUND1(s->D,s->A,s->B,s->C,  1,  7);  
+        ROUND1(s->A,s->B,s->C,s->D,  0,  3);  ROUND1(s->D,s->A,s->B,s->C,  1,  7);
 	ROUND1(s->C,s->D,s->A,s->B,  2, 11);  ROUND1(s->B,s->C,s->D,s->A,  3, 19);
-        ROUND1(s->A,s->B,s->C,s->D,  4,  3);  ROUND1(s->D,s->A,s->B,s->C,  5,  7);  
+        ROUND1(s->A,s->B,s->C,s->D,  4,  3);  ROUND1(s->D,s->A,s->B,s->C,  5,  7);
 	ROUND1(s->C,s->D,s->A,s->B,  6, 11);  ROUND1(s->B,s->C,s->D,s->A,  7, 19);
-        ROUND1(s->A,s->B,s->C,s->D,  8,  3);  ROUND1(s->D,s->A,s->B,s->C,  9,  7);  
+        ROUND1(s->A,s->B,s->C,s->D,  8,  3);  ROUND1(s->D,s->A,s->B,s->C,  9,  7);
 	ROUND1(s->C,s->D,s->A,s->B, 10, 11);  ROUND1(s->B,s->C,s->D,s->A, 11, 19);
-        ROUND1(s->A,s->B,s->C,s->D, 12,  3);  ROUND1(s->D,s->A,s->B,s->C, 13,  7);  
-	ROUND1(s->C,s->D,s->A,s->B, 14, 11);  ROUND1(s->B,s->C,s->D,s->A, 15, 19);	
+        ROUND1(s->A,s->B,s->C,s->D, 12,  3);  ROUND1(s->D,s->A,s->B,s->C, 13,  7);
+	ROUND1(s->C,s->D,s->A,s->B, 14, 11);  ROUND1(s->B,s->C,s->D,s->A, 15, 19);
 
-        ROUND2(s->A,s->B,s->C,s->D,  0,  3);  ROUND2(s->D,s->A,s->B,s->C,  4,  5);  
+        ROUND2(s->A,s->B,s->C,s->D,  0,  3);  ROUND2(s->D,s->A,s->B,s->C,  4,  5);
 	ROUND2(s->C,s->D,s->A,s->B,  8,  9);  ROUND2(s->B,s->C,s->D,s->A, 12, 13);
-        ROUND2(s->A,s->B,s->C,s->D,  1,  3);  ROUND2(s->D,s->A,s->B,s->C,  5,  5);  
+        ROUND2(s->A,s->B,s->C,s->D,  1,  3);  ROUND2(s->D,s->A,s->B,s->C,  5,  5);
 	ROUND2(s->C,s->D,s->A,s->B,  9,  9);  ROUND2(s->B,s->C,s->D,s->A, 13, 13);
-        ROUND2(s->A,s->B,s->C,s->D,  2,  3);  ROUND2(s->D,s->A,s->B,s->C,  6,  5);  
+        ROUND2(s->A,s->B,s->C,s->D,  2,  3);  ROUND2(s->D,s->A,s->B,s->C,  6,  5);
 	ROUND2(s->C,s->D,s->A,s->B, 10,  9);  ROUND2(s->B,s->C,s->D,s->A, 14, 13);
-        ROUND2(s->A,s->B,s->C,s->D,  3,  3);  ROUND2(s->D,s->A,s->B,s->C,  7,  5);  
+        ROUND2(s->A,s->B,s->C,s->D,  3,  3);  ROUND2(s->D,s->A,s->B,s->C,  7,  5);
 	ROUND2(s->C,s->D,s->A,s->B, 11,  9);  ROUND2(s->B,s->C,s->D,s->A, 15, 13);
 
-	ROUND3(s->A,s->B,s->C,s->D,  0,  3);  ROUND3(s->D,s->A,s->B,s->C,  8,  9);  
+	ROUND3(s->A,s->B,s->C,s->D,  0,  3);  ROUND3(s->D,s->A,s->B,s->C,  8,  9);
 	ROUND3(s->C,s->D,s->A,s->B,  4, 11);  ROUND3(s->B,s->C,s->D,s->A, 12, 15);
-        ROUND3(s->A,s->B,s->C,s->D,  2,  3);  ROUND3(s->D,s->A,s->B,s->C, 10,  9);  
+        ROUND3(s->A,s->B,s->C,s->D,  2,  3);  ROUND3(s->D,s->A,s->B,s->C, 10,  9);
 	ROUND3(s->C,s->D,s->A,s->B,  6, 11);  ROUND3(s->B,s->C,s->D,s->A, 14, 15);
-        ROUND3(s->A,s->B,s->C,s->D,  1,  3);  ROUND3(s->D,s->A,s->B,s->C,  9,  9);  
+        ROUND3(s->A,s->B,s->C,s->D,  1,  3);  ROUND3(s->D,s->A,s->B,s->C,  9,  9);
 	ROUND3(s->C,s->D,s->A,s->B,  5, 11);  ROUND3(s->B,s->C,s->D,s->A, 13, 15);
-        ROUND3(s->A,s->B,s->C,s->D,  3,  3);  ROUND3(s->D,s->A,s->B,s->C, 11,  9);  
+        ROUND3(s->A,s->B,s->C,s->D,  3,  3);  ROUND3(s->D,s->A,s->B,s->C, 11,  9);
 	ROUND3(s->C,s->D,s->A,s->B,  7, 11);  ROUND3(s->B,s->C,s->D,s->A, 15, 15);
 
-	s->A += AA; 
-	s->B += BB; 
-	s->C += CC; 
+	s->A += AA;
+	s->B += BB;
+	s->C += CC;
 	s->D += DD;
-	
-	s->A &= 0xFFFFFFFF; 
+
+	s->A &= 0xFFFFFFFF;
 	s->B &= 0xFFFFFFFF;
-	s->C &= 0xFFFFFFFF; 
+	s->C &= 0xFFFFFFFF;
 	s->D &= 0xFFFFFFFF;
 
 	for (j=0;j<16;j++)
@@ -127,7 +127,7 @@ static void copy4(uint8_t *out, uint32_t x)
 }
 
 /**
- * produce a md4 message digest from data of length n bytes 
+ * produce a md4 message digest from data of length n bytes
  */
 _PUBLIC_ void mdfour(uint8_t *out, const uint8_t *in, int n)
 {
@@ -151,15 +151,17 @@ _PUBLIC_ void mdfour(uint8_t *out, const uint8_t *in, int n)
 
 	for (i=0;i<128;i++)
 		buf[i] = 0;
-	memcpy(buf, in, n);
+	if (in != NULL) {
+		memcpy(buf, in, n);
+	}
 	buf[n] = 0x80;
-	
+
 	if (n <= 55) {
 		copy4(buf+56, b);
 		copy64(M, buf);
 		mdfour64(&state, M);
 	} else {
-		copy4(buf+120, b); 
+		copy4(buf+120, b);
 		copy64(M, buf);
 		mdfour64(&state, M);
 		copy64(M, buf+64);
@@ -175,5 +177,3 @@ _PUBLIC_ void mdfour(uint8_t *out, const uint8_t *in, int n)
 	copy4(out+8, state.C);
 	copy4(out+12, state.D);
 }
-
-
diff --git a/lib/ldb/common/ldb_pack.c b/lib/ldb/common/ldb_pack.c
index 409be590611..86701ad7e71 100644
--- a/lib/ldb/common/ldb_pack.c
+++ b/lib/ldb/common/ldb_pack.c
@@ -1131,7 +1131,7 @@ int ldb_filter_attrs(struct ldb_context *ldb,
 		     const char *const *attrs,
 		     struct ldb_message *filtered_msg)
 {
-	unsigned int i;
+	unsigned int i = 0;
 	bool keep_all = false;
 	bool add_dn = false;
 	uint32_t num_elements;
diff --git a/lib/ldb/pyldb.c b/lib/ldb/pyldb.c
index 9acea901558..c0b63285017 100644
--- a/lib/ldb/pyldb.c
+++ b/lib/ldb/pyldb.c
@@ -3717,7 +3717,7 @@ static PyObject *py_ldb_msg_element_str(PyLdbMessageElementObject *self)
 	if (el->num_values == 1)
 		return PyUnicode_FromStringAndSize((char *)el->values[0].data, el->values[0].length);
 	else
-		Py_RETURN_NONE;
+		return PyUnicode_FromString("");
 }
 
 static void py_ldb_msg_element_dealloc(PyLdbMessageElementObject *self)
diff --git a/libcli/wsp/wsp_aqs.c b/libcli/wsp/wsp_aqs.c
index acf12293daf..08723cf07e9 100644
--- a/libcli/wsp/wsp_aqs.c
+++ b/libcli/wsp/wsp_aqs.c
@@ -831,8 +831,8 @@ t_value_holder *create_size_range_shortcut(TALLOC_CTX *ctx,
 	};
 	int i;
 	t_value_holder *result = NULL;
-	uint32_t lower_size;
-	uint32_t upper_size;
+	uint32_t lower_size = 0;
+	uint32_t upper_size = 0;
 	bool rangefound = false;
 	t_value_holder *left = NULL;
 	t_value_holder *right = NULL;
diff --git a/libds/common/flags.h b/libds/common/flags.h
index e8e5d625b5e..f970a4cb65d 100644
--- a/libds/common/flags.h
+++ b/libds/common/flags.h
@@ -242,9 +242,11 @@
 #define DS_GUID_SCHEMA_ATTR_DEPARTMENT                "bf96794f-0de6-11d0-a285-00aa003049e2"
 #define DS_GUID_SCHEMA_ATTR_DNS_HOST_NAME             "72e39547-7b18-11d1-adef-00c04fd8d5cd"
 #define DS_GUID_SCHEMA_ATTR_INSTANCE_TYPE             "bf96798c-0de6-11d0-a285-00aa003049e2"
+#define DS_GUID_SCHEMA_ATTR_MS_DS_KEY_CREDENTIAL_LINK "5b47d60f-6090-40b2-9f37-2a4de88f3063"
 #define DS_GUID_SCHEMA_ATTR_MS_SFU_30                 "16c5d1d3-35c2-4061-a870-a5cefda804f0"
 #define DS_GUID_SCHEMA_ATTR_NT_SECURITY_DESCRIPTOR    "bf9679e3-0de6-11d0-a285-00aa003049e2"
 #define DS_GUID_SCHEMA_ATTR_PRIMARY_GROUP_ID          "bf967a00-0de6-11d0-a285-00aa003049e2"
+#define DS_GUID_SCHEMA_ATTR_SAM_ACCOUNT_NAME          "3e0abfd0-126a-11d0-a060-00aa006c33ed"
 #define DS_GUID_SCHEMA_ATTR_SERVICE_PRINCIPAL_NAME    "f3a64788-5306-11d1-a9c5-0000f80367c1"
 #define DS_GUID_SCHEMA_ATTR_USER_ACCOUNT_CONTROL      "bf967a68-0de6-11d0-a285-00aa003049e2"
 #define DS_GUID_SCHEMA_ATTR_USER_PASSWORD             "bf967a6e-0de6-11d0-a285-00aa003049e2"
diff --git a/librpc/idl/security.idl b/librpc/idl/security.idl
index 9f02ee10d92..6c07bff6eae 100644
--- a/librpc/idl/security.idl
+++ b/librpc/idl/security.idl
@@ -963,6 +963,7 @@ interface security
 	const string GUID_DRS_DNS_HOST_NAME           = "72e39547-7b18-11d1-adef-00c04fd8d5cd";
 	const string GUID_DRS_ADD_DNS_HOST_NAME       = "80863791-dbe9-4eb8-837e-7f0ab55d9ac7";
 	const string GUID_DRS_BEHAVIOR_VERSION        = "d31a8757-2447-4545-8081-3bb610cacbf2";
+	const string GUID_DRS_DS_VALIDATED_WRITE_COMPUTER = "9b026da6-0d3c-465c-8bee-5199d7165cba";
 
 	/* A type to describe the mapping of generic access rights to object
 	   specific access rights. */
diff --git a/pidl/lib/Parse/Pidl/Samba4/Python.pm b/pidl/lib/Parse/Pidl/Samba4/Python.pm
index e6a5ac8bb17..b342704af4d 100644
--- a/pidl/lib/Parse/Pidl/Samba4/Python.pm
+++ b/pidl/lib/Parse/Pidl/Samba4/Python.pm
@@ -2039,6 +2039,12 @@ sub ConvertObjectFromPythonData($$$$$$;$$)
 	}
 
 	if ($actual_ctype->{TYPE} eq "SCALAR" and $actual_ctype->{NAME} eq "DATA_BLOB") {
+		$self->pidl("if (!PyBytes_Check($cvar)) {");
+		$self->indent;
+		$self->pidl("PyErr_Format(PyExc_TypeError, \"Expected bytes object, got %s\", Py_TYPE($cvar)->tp_name);");
+		$self->pidl("$fail");
+		$self->deindent;
+		$self->pidl("}");
 		$self->pidl("$target = data_blob_talloc($mem_ctx, PyBytes_AS_STRING($cvar), PyBytes_GET_SIZE($cvar));");
 		return;
 	}
diff --git a/python/samba/ms_forest_updates_markdown.py b/python/samba/ms_forest_updates_markdown.py
index 0a0d2111a72..01615dca00b 100644
--- a/python/samba/ms_forest_updates_markdown.py
+++ b/python/samba/ms_forest_updates_markdown.py
@@ -112,9 +112,9 @@ def extract_dn(text):
     if dn == 'CN=ad://ext/AuthenticationSilo,CN=Claim Types,CN=Claims Configuration,CN=Services':
         return 'CN=ad://ext/AuthenticationSilo,CN=Claim Types,CN=Claims Configuration,CN=Services,${CONFIG_DN}'
 
-    # Granting the "CN=Send-As,CN=Extended-Rights" to gMSA accounts.
-    if dn.endswith(',CN=Extended-Rights" to gMSA accounts.'):
-        dn = dn.replace('" to gMSA accounts.', '')
+    # Granting the `CN=Send-As,CN=Extended-Rights` to gMSA accounts.
+    if dn.endswith(',CN=Extended-Rights to gMSA accounts.'):
+        dn = dn.replace(' to gMSA accounts.', '')
         return dn + ",${CONFIG_DN}"
 
     return dn
@@ -253,10 +253,11 @@ def read_ms_markdown(in_file, out_folder=None, out_dict=None):
         if updates:
             for update in updates[2:]:
                 output = re.match(r'Operation (\d+): {(.*)}', update[0])
-                if output:
-                    # print output.group(1), output.group(2)
-                    guid = output.group(2)
-                    filename = "%s-{%s}.ldif" % (output.group(1).zfill(4), guid)
+                if not output:
+                    raise Exception(update)
+
+                guid = output.group(2)
+                filename = "%s-{%s}.ldif" % (output.group(1).zfill(4), guid)
 
                 found = False
 
diff --git a/python/samba/provision/__init__.py b/python/samba/provision/__init__.py
index 119ff3f49fa..0f7418786c6 100644
--- a/python/samba/provision/__init__.py
+++ b/python/samba/provision/__init__.py
@@ -1462,11 +1462,15 @@ def fill_samdb(samdb, lp, names, logger, policyguid,
         protected1wd_descr = b64encode(get_config_delete_protected1wd_descriptor(names.domainsid)).decode('utf8')
         protected2_descr = b64encode(get_config_delete_protected2_descriptor(names.domainsid)).decode('utf8')
 
+        incl_2012 = ""
+        incl_2016 = ""
         if "2008" in schema.base_schema:
-            # exclude 2012-specific changes if we're using a 2008 schema
+            # exclude 2012 and later changes if we're using a 2008 schema
             incl_2012 = "#"
-        else:
-            incl_2012 = ""
+            incl_2016 = "#"
+        elif "2012" in schema.base_schema:
+            # exclude 2016 and later changes if we're using a 2012 schema
+            incl_2016 = "#"
 
         setup_add_ldif(samdb, setup_path("provision_configuration.ldif"), {
                 "CONFIGDN": names.configdn,
@@ -1493,6 +1497,7 @@ def fill_samdb(samdb, lp, names, logger, policyguid,
         setup_add_ldif(samdb, setup_path("extended-rights.ldif"), {
                 "CONFIGDN": names.configdn,
                 "INC2012": incl_2012,
+                "INC2016": incl_2016,
                 })
 
         logger.info("Setting up display specifiers")
diff --git a/python/samba/tests/krb5/test_smb.py b/python/samba/tests/krb5/test_smb.py
index f0a82a43229..a6f71f3469b 100755
--- a/python/samba/tests/krb5/test_smb.py
+++ b/python/samba/tests/krb5/test_smb.py
@@ -74,8 +74,6 @@ class SmbTests(KDCBaseTest):
 
         mach_credentials = self.get_dc_creds()
 
-        mach_credentials = self.get_dc_creds()
-
         # Talk to the KDC to obtain the service ticket, which gets placed into
         # the cache. The machine account name has to match the name in the
         # ticket, to ensure that the krbtgt ticket doesn't also need to be
diff --git a/source3/lib/netapi/tests/netdisplay.c b/source3/lib/netapi/tests/netdisplay.c
index d7967fa4150..e1078e1daad 100644
--- a/source3/lib/netapi/tests/netdisplay.c
+++ b/source3/lib/netapi/tests/netdisplay.c
@@ -34,7 +34,7 @@ static NET_API_STATUS test_netquerydisplayinformation(const char *hostname,
 	NET_API_STATUS status;
 	uint32_t entries_read = 0;
 	int found_name = 0;
-	const char *current_name;
+	const char *current_name = NULL;
 	uint8_t *buffer = NULL;
 	uint32_t idx = 0;
 	int i;
diff --git a/source4/dsdb/gmsa/gkdi.c b/source4/dsdb/gmsa/gkdi.c
index 7acc1b4996e..4726e31b600 100644
--- a/source4/dsdb/gmsa/gkdi.c
+++ b/source4/dsdb/gmsa/gkdi.c
@@ -525,8 +525,6 @@ static const char *const root_key_attrs[] = {
 
 /*
  * Create and return a new GKDI root key.
- *
- * This function goes unused.
  */
 int gkdi_new_root_key(TALLOC_CTX *mem_ctx,
 		      struct ldb_context *const ldb,
diff --git a/source4/dsdb/gmsa/gkdi.h b/source4/dsdb/gmsa/gkdi.h
index 4c5394167fd..bc40ef15c8c 100644
--- a/source4/dsdb/gmsa/gkdi.h
+++ b/source4/dsdb/gmsa/gkdi.h
@@ -44,8 +44,6 @@ NTTIME gkdi_root_key_use_start_time(const NTTIME current_time);
 
 /*
  * Create and return a new GKDI root key.
- *
- * This function goes unused.
  */
 struct ldb_context;
 int gkdi_new_root_key(TALLOC_CTX *mem_ctx,
diff --git a/source4/dsdb/pydsdb.c b/source4/dsdb/pydsdb.c
index 5c943c8893b..df46b288e4f 100644
--- a/source4/dsdb/pydsdb.c
+++ b/source4/dsdb/pydsdb.c
@@ -2069,9 +2069,11 @@ MODULE_INIT_FUNC(dsdb)
 	ADD_DSDB_STRING(DS_GUID_SCHEMA_ATTR_DEPARTMENT);
 	ADD_DSDB_STRING(DS_GUID_SCHEMA_ATTR_DNS_HOST_NAME);
 	ADD_DSDB_STRING(DS_GUID_SCHEMA_ATTR_INSTANCE_TYPE);
+	ADD_DSDB_STRING(DS_GUID_SCHEMA_ATTR_MS_DS_KEY_CREDENTIAL_LINK);
 	ADD_DSDB_STRING(DS_GUID_SCHEMA_ATTR_MS_SFU_30);
 	ADD_DSDB_STRING(DS_GUID_SCHEMA_ATTR_NT_SECURITY_DESCRIPTOR);
 	ADD_DSDB_STRING(DS_GUID_SCHEMA_ATTR_PRIMARY_GROUP_ID);
+	ADD_DSDB_STRING(DS_GUID_SCHEMA_ATTR_SAM_ACCOUNT_NAME);
 	ADD_DSDB_STRING(DS_GUID_SCHEMA_ATTR_SERVICE_PRINCIPAL_NAME);
 	ADD_DSDB_STRING(DS_GUID_SCHEMA_ATTR_USER_ACCOUNT_CONTROL);
 	ADD_DSDB_STRING(DS_GUID_SCHEMA_ATTR_USER_PASSWORD);
diff --git a/source4/dsdb/samdb/ldb_modules/acl.c b/source4/dsdb/samdb/ldb_modules/acl.c
index d0b1216bcc1..8432dbfe25b 100644
--- a/source4/dsdb/samdb/ldb_modules/acl.c
+++ b/source4/dsdb/samdb/ldb_modules/acl.c
@@ -36,6 +36,8 @@
 #include "auth/auth.h"
 #include "libcli/security/security.h"
 #include "dsdb/samdb/samdb.h"
+#include "librpc/gen_ndr/keycredlink.h"
+#include "librpc/gen_ndr/ndr_keycredlink.h"
 #include "librpc/gen_ndr/ndr_security.h"
 #include "param/param.h"
 #include "dsdb/samdb/ldb_modules/util.h"
@@ -452,6 +454,7 @@ static int acl_validate_spn_value(TALLOC_CTX *mem_ctx,
 				  const struct ldb_val *spn_value,
 				  uint32_t userAccountControl,
 				  const struct ldb_val *samAccountName,
+				  const struct ldb_val *original_dnsHostName,
 				  const struct ldb_val *dnsHostName,
 				  const char *netbios_name,
 				  const char *ntds_guid)
@@ -582,6 +585,14 @@ static int acl_validate_spn_value(TALLOC_CTX *mem_ctx,
 	{
 		goto success;
 	}
+	if ((original_dnsHostName != NULL) &&
+	    strlen(instanceName) == original_dnsHostName->length &&
+	    (strncasecmp(instanceName,
+			 (const char *)original_dnsHostName->data,
+			 original_dnsHostName->length) == 0))
+	{
+		goto success;
+	}
 	if (is_dc) {
 		const char *guid_str = NULL;
 		guid_str = talloc_asprintf(mem_ctx,"%s._msdcs.%s",
@@ -637,6 +648,7 @@ static int acl_check_spn(TALLOC_CTX *mem_ctx,
 	struct ldb_dn *partitions_dn = samdb_partitions_dn(ldb, tmp_ctx);
 	uint32_t userAccountControl;
 	const char *netbios_name;
+	const struct ldb_val *original_dns_host_name_val = NULL;
 	const struct ldb_val *dns_host_name_val = NULL;
 	const struct ldb_val *sam_account_name_val = NULL;
 	struct GUID ntds;
@@ -739,12 +751,13 @@ static int acl_check_spn(TALLOC_CTX *mem_ctx,
 	}
 
 	if (req->operation == LDB_MODIFY) {
-		dns_host_name_val = ldb_msg_find_ldb_val(search_res, "dNSHostName");
+		original_dns_host_name_val = ldb_msg_find_ldb_val(
+			search_res, "dNSHostName");
 	}
 
 	ret = dsdb_msg_get_single_value(msg,
 					"dNSHostName",
-					dns_host_name_val,
+					original_dns_host_name_val,
 					&dns_host_name_val,
 					req->operation);
 	if (ret != LDB_SUCCESS) {
@@ -809,6 +822,7 @@ static int acl_check_spn(TALLOC_CTX *mem_ctx,
 					     &el->values[i],
 					     userAccountControl,
 					     sam_account_name_val,
+					     original_dns_host_name_val,
 					     dns_host_name_val,
 					     netbios_name,
 					     ntds_guid);
@@ -924,8 +938,8 @@ static int acl_check_dns_host_name(TALLOC_CTX *mem_ctx,
 		 * If not add or replace (eg delete),
 		 * return success
 		 */
-		if ((el->flags
-		     & (LDB_FLAG_MOD_ADD|LDB_FLAG_MOD_REPLACE)) == 0)
+		if (LDB_FLAG_MOD_TYPE(el->flags) != LDB_FLAG_MOD_ADD &&
+		    LDB_FLAG_MOD_TYPE(el->flags) != LDB_FLAG_MOD_REPLACE)
 		{
 			talloc_free(tmp_ctx);
 			return LDB_SUCCESS;
@@ -1110,6 +1124,216 @@ fail:
 	return LDB_ERR_CONSTRAINT_VIOLATION;
 }
 
+static int acl_check_ms_ds_key_credential_link(
+	TALLOC_CTX *mem_ctx,
+	struct ldb_module *module,
+	struct ldb_request *req,
+	const struct ldb_message_element *el,
+	struct security_descriptor *sd,
+	struct dom_sid *sid,
+	const struct dsdb_attribute *attr,
+	const struct dsdb_class *objectclass)
+{
+	int ret;
+	TALLOC_CTX *tmp_ctx = NULL;
+	struct ldb_context *ldb = ldb_module_get_ctx(module);
+	const struct dsdb_schema *schema = NULL;
+	const struct ldb_message *msg = NULL;
+	const struct dsdb_class *computer_objectclass = NULL;
+	bool is_subclass;
+
+	tmp_ctx = talloc_new(mem_ctx);
+	if (tmp_ctx == NULL) {
+		return ldb_oom(ldb);
+	}


-- 
Samba Shared Repository



More information about the samba-cvs mailing list