The branch, master has been updated
via f8892391526 libcli/auth: Zero out password in smbencrypt.c
via 562c2a9b258 auth: Use new data_blob_..._s() functions and remove
talloc_keep_secret()
via f107aad79f0 librpc: Fix trailing white spaces in dcerpc.c
via 78ec0e4f6cd lib/util: Add tests for the new secure
data_blob_..._s() functions
via a8200c985d4 lib/util: Fix trailing white spaces in tests/data_blob.c
via 7e693b55730 lib/util: Avoid overwriting talloc chunk name in
talloc_keep_secret()
via 2ed6217dbce lib/util: Add data_blob_..._s() functions that call
talloc_keep_secret()
via 57eb42a276d lib/util: Move talloc_keep_secret.c from samba-util to
samba-util-core
via eac755badc9 lib/util: Set "PREDEFINED = DOXYGEN" in Doxyfile
via 94fc617a547 lib/util: Change comments to Doxygen in data_blob.h
via e53eba1e696 lib/util: Refactor data_blob.{h,c}
from 9cdc1eaa09a smbtorture: add test "smb.lease.two-leases"
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit f88923915269eb4d80e65d89fc6332c20c195985
Author: Pavel Filipenský <[email protected]>
Date: Wed Nov 26 10:34:02 2025 +0100
libcli/auth: Zero out password in smbencrypt.c
Signed-off-by: Pavel Filipenský <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
Autobuild-User(master): Pavel Filipensky <[email protected]>
Autobuild-Date(master): Mon Dec 8 18:21:45 UTC 2025 on atb-devel-224
commit 562c2a9b258288cbf3a5b07a9da56b69d0a5d7a2
Author: Pavel Filipenský <[email protected]>
Date: Wed Nov 26 10:34:02 2025 +0100
auth: Use new data_blob_..._s() functions and remove talloc_keep_secret()
Signed-off-by: Pavel Filipenský <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit f107aad79f06f1080e90e8888833e7205438bd7f
Author: Pavel Filipenský <[email protected]>
Date: Wed Nov 26 10:52:43 2025 +0100
librpc: Fix trailing white spaces in dcerpc.c
Signed-off-by: Pavel Filipenský <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 78ec0e4f6cdedc17becdfb8f9e35a5550d85ed04
Author: Pavel Filipenský <[email protected]>
Date: Wed Nov 26 08:06:21 2025 +0100
lib/util: Add tests for the new secure data_blob_..._s() functions
Signed-off-by: Pavel Filipenský <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit a8200c985d4669a36bdad289dd804cb309193e90
Author: Pavel Filipenský <[email protected]>
Date: Tue Nov 25 17:26:15 2025 +0100
lib/util: Fix trailing white spaces in tests/data_blob.c
Signed-off-by: Pavel Filipenský <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 7e693b55730ceba2ef326286a0c68d5d91324a22
Author: Pavel Filipenský <[email protected]>
Date: Wed Nov 26 11:13:50 2025 +0100
lib/util: Avoid overwriting talloc chunk name in talloc_keep_secret()
Signed-off-by: Pavel Filipenský <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 2ed6217dbcef5c345518e9caa90ee33ececbe3f2
Author: Pavel Filipenský <[email protected]>
Date: Wed Dec 3 17:47:57 2025 +0100
lib/util: Add data_blob_..._s() functions that call talloc_keep_secret()
Signed-off-by: Pavel Filipenský <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 57eb42a276d320342972aaf9426a68e07a07fc45
Author: Pavel Filipenský <[email protected]>
Date: Wed Dec 3 19:31:08 2025 +0100
lib/util: Move talloc_keep_secret.c from samba-util to samba-util-core
Needed by future data_blob.h changes. ctdb uses data_blob and links only
samba-util-core.
Signed-off-by: Pavel Filipenský <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit eac755badc95d5974274c859823ca892d57e0a68
Author: Pavel Filipenský <[email protected]>
Date: Fri Nov 28 09:35:49 2025 +0100
lib/util: Set "PREDEFINED = DOXYGEN" in Doxyfile
that will set -DDOXYGEN and code inside #ifdef DOXYGEN is parsed
Signed-off-by: Pavel Filipenský <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 94fc617a5475343b89d3e1bf7743575b923350b6
Author: Pavel Filipenský <[email protected]>
Date: Wed Dec 3 20:52:17 2025 +0100
lib/util: Change comments to Doxygen in data_blob.h
Signed-off-by: Pavel Filipenský <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit e53eba1e6963eb61e98ba208347b8edf4ce7eba3
Author: Pavel Filipenský <[email protected]>
Date: Wed Dec 3 17:47:54 2025 +0100
lib/util: Refactor data_blob.{h,c}
Makes data_blob_talloc_zero() use __location__ of the real caller
Signed-off-by: Pavel Filipenský <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
-----------------------------------------------------------------------
Summary of changes:
auth/credentials/credentials_krb5.c | 3 +-
lib/util/Doxyfile | 1 +
lib/util/data_blob.c | 21 ----
lib/util/data_blob.h | 161 +++++++++++++++++++++++--
lib/util/talloc_keep_secret.c | 1 -
lib/util/tests/data_blob.c | 69 +++++++++--
lib/util/tests/test_talloc_keep_secret.c | 4 -
lib/util/wscript_build | 3 +-
libcli/auth/smbencrypt.c | 2 +-
libcli/smb/smb2_signing.c | 6 +-
source3/passdb/machine_account_secrets.c | 9 +-
source3/rpc_client/cli_pipe.c | 3 +-
source3/smbd/smb1_reply.c | 11 +-
source3/smbd/smb1_sesssetup.c | 12 +-
source3/smbd/smb2_sesssetup.c | 10 +-
source4/dsdb/samdb/ldb_modules/password_hash.c | 8 +-
source4/kdc/db-glue.c | 8 +-
source4/librpc/rpc/dcerpc.c | 79 ++++++------
18 files changed, 281 insertions(+), 130 deletions(-)
Changeset truncated at 500 lines:
diff --git a/auth/credentials/credentials_krb5.c
b/auth/credentials/credentials_krb5.c
index 8d289e26781..10a474420d7 100644
--- a/auth/credentials/credentials_krb5.c
+++ b/auth/credentials/credentials_krb5.c
@@ -1695,7 +1695,7 @@ _PUBLIC_ int cli_credentials_get_kerberos_key(struct
cli_credentials *cred,
TALLOC_FREE(frame);
return EINVAL;
}
- *key_blob = data_blob_talloc(mem_ctx,
+ *key_blob = data_blob_talloc_s(mem_ctx,
KRB5_KEY_DATA(&key),
KRB5_KEY_LENGTH(&key));
krb5_free_keyblock_contents(smb_krb5_context->krb5_context, &key);
@@ -1703,7 +1703,6 @@ _PUBLIC_ int cli_credentials_get_kerberos_key(struct
cli_credentials *cred,
TALLOC_FREE(frame);
return ENOMEM;
}
- talloc_keep_secret(key_blob->data);
TALLOC_FREE(frame);
return 0;
diff --git a/lib/util/Doxyfile b/lib/util/Doxyfile
index 02e36a7af93..b71e092c69e 100644
--- a/lib/util/Doxyfile
+++ b/lib/util/Doxyfile
@@ -22,3 +22,4 @@ HTML_OUTPUT = html
GENERATE_MAN = YES
ALWAYS_DETAILED_SEC = YES
JAVADOC_AUTOBRIEF = YES
+PREDEFINED = DOXYGEN
diff --git a/lib/util/data_blob.c b/lib/util/data_blob.c
index 9372612d8a3..12f4173c5e6 100644
--- a/lib/util/data_blob.c
+++ b/lib/util/data_blob.c
@@ -31,15 +31,6 @@ const DATA_BLOB data_blob_null = { NULL, 0 };
* @brief Manipulation of arbitrary data blobs
**/
-/**
- construct a data blob, must be freed with data_blob_free()
- you can pass NULL for p and get a blank data blob
-**/
-_PUBLIC_ DATA_BLOB data_blob_named(const void *p, size_t length, const char
*name)
-{
- return data_blob_talloc_named(NULL, p, length, name);
-}
-
/**
construct a data blob, using supplied TALLOC_CTX
**/
@@ -66,18 +57,6 @@ _PUBLIC_ DATA_BLOB data_blob_talloc_named(TALLOC_CTX
*mem_ctx, const void *p, si
return ret;
}
-/**
- construct a zero data blob, using supplied TALLOC_CTX.
- use this sparingly as it initialises data - better to initialise
- yourself if you want specific data in the blob
-**/
-_PUBLIC_ DATA_BLOB data_blob_talloc_zero(TALLOC_CTX *mem_ctx, size_t length)
-{
- DATA_BLOB blob = data_blob_talloc(mem_ctx, NULL, length);
- data_blob_clear(&blob);
- return blob;
-}
-
/**
free a data blob
**/
diff --git a/lib/util/data_blob.h b/lib/util/data_blob.h
index 6577630e592..1196eb52eb1 100644
--- a/lib/util/data_blob.h
+++ b/lib/util/data_blob.h
@@ -33,6 +33,14 @@
#include <talloc.h>
#include <stdbool.h>
#include <stdint.h>
+#include "lib/util/talloc_keep_secret.h"
+
+/**
+ * @defgroup data_blob The data_blob API
+ * @brief The defines the data_blob API and provides function working with it.
+ *
+ * @{
+ */
/* used to hold an arbitrary blob of data */
typedef struct datablob {
@@ -44,27 +52,110 @@ typedef struct datablob {
a fair bit of code */
#define ldb_val datablob
+#ifdef DOXYGEN
+/**
+ * @brief Construct a data blob using a new top level TALLOC_CTX.
+ * You can pass NULL for ptr and get a blank data blob.
+ * Blob must be freed with data_blob_free().
+ */
+DATA_BLOB data_blob(const void *ptr, size_t size);
+#else
#define data_blob(ptr, size) data_blob_named(ptr, size, "DATA_BLOB: "
__location__)
+#endif
+
+#ifdef DOXYGEN
+/**
+ * @brief Construct a data blob using supplied TALLOC_CTX.
+ * You can pass NULL for ptr and get a blank data blob.
+ */
+DATA_BLOB data_blob_talloc(TALLOC_CTX *mem_ctx, const void *ptr, size_t size);
+#else
#define data_blob_talloc(ctx, ptr, size) data_blob_talloc_named(ctx, ptr,
size, "DATA_BLOB: " __location__)
+#endif
+
+#ifdef DOXYGEN
+/**
+ * @brief Construct a data blob using supplied TALLOC_CTX.
+ * Data is initialized using provided blob.
+ */
+DATA_BLOB data_blob_dup_talloc(TALLOC_CTX *mem_ctx, DATA_BLOB blob);
+#else
#define data_blob_dup_talloc(ctx, blob) data_blob_talloc_named(ctx,
(blob).data, (blob).length, "DATA_BLOB: " __location__)
+#endif
+#ifdef DOXYGEN
/**
- construct a data blob, must be freed with data_blob_free()
- you can pass NULL for p and get a blank data blob
-**/
-_PUBLIC_ DATA_BLOB data_blob_named(const void *p, size_t length, const char
*name);
+ * @brief Construct a data blob using a new top level TALLOC_CTX.
+ * You can pass NULL for ptr and get a blank data blob.
+ * Blob must be freed with data_blob_free().
+ */
+DATA_BLOB data_blob_named(const void *ptr, size_t size, const char *name);
+#else
+#define data_blob_named(ptr, size, name) \
+ data_blob_talloc_named(NULL, (ptr), (size), name)
+#endif
/**
- construct a data blob, using supplied TALLOC_CTX
-**/
+ * @brief Construct a data blob using supplied TALLOC_CTX and using data
+ * supplied via ptr and length and give it an explicit talloc chunk name.
+ */
+/**
+ * @brief Construct a data blob, using data supplied pointer and length
+ *
+ * @param mem_ctx memory context, if NULL a new top level context is used
+ * @param p pointer to input data, you can pass NULL and get a blank
data
+ * blob
+ * @param length data length
+ * @param name talloc chunk name
+ * @return the blob
+ */
_PUBLIC_ DATA_BLOB data_blob_talloc_named(TALLOC_CTX *mem_ctx, const void *p,
size_t length, const char *name);
+#ifdef DOXYGEN
/**
- construct a zero data blob, using supplied TALLOC_CTX.
- use this sparingly as it initialises data - better to initialise
- yourself if you want specific data in the blob
-**/
-_PUBLIC_ DATA_BLOB data_blob_talloc_zero(TALLOC_CTX *mem_ctx, size_t length);
+ * @brief Construct a data blob using supplied TALLOC_CTX.
+ * Data is initialized with zeros.
+ */
+DATA_BLOB data_blob_talloc_zero(TALLOC_CTX *mem_ctx, size_t size);
+#else
+#define data_blob_talloc_zero(ctx, size) \
+ _data_blob_talloc_zero((ctx), (size), "DATA_BLOB: " __location__)
+#endif
+
+#ifdef DOXYGEN
+/**
+ * @brief Construct a data blob using supplied TALLOC_CTX.
+ * Data is initialized with zeros and zeroed out when freed.
+ */
+DATA_BLOB data_blob_talloc_zero_s(TALLOC_CTX *mem_ctx, size_t size);
+#else
+#define data_blob_talloc_zero_s(ctx, size) \
+ _data_blob_talloc_zero_s((ctx), (size), "DATA_BLOB: " __location__)
+#endif
+
+#ifdef DOXYGEN
+/**
+ * @brief Construct a data blob using supplied TALLOC_CTX.
+ * You can pass NULL for ptr and get a blank data blob.
+ * Data is zeroed out when freed.
+ */
+DATA_BLOB data_blob_talloc_s(TALLOC_CTX *mem_ctx, const void *ptr, size_t
size);
+#else
+#define data_blob_talloc_s(ctx, ptr, size) \
+ _data_blob_talloc_s((ctx), (ptr), (size), "DATA_BLOB: " __location__)
+#endif
+
+#ifdef DOXYGEN
+/**
+ * @brief Construct a data blob using supplied TALLOC_CTX.
+ * Data is initialized using provided blob.
+ * Data is zeroed out when freed.
+ */
+DATA_BLOB data_blob_dup_talloc_s(TALLOC_CTX *mem_ctx, DATA_BLOB blob);
+#else
+#define data_blob_dup_talloc_s(ctx, blob) \
+ _data_blob_dup_talloc_s((ctx), (blob), "DATA_BLOB: " __location__)
+#endif
/**
free a data blob
@@ -81,6 +172,52 @@ free a data blob and clear its contents
**/
_PUBLIC_ void data_blob_clear_free(DATA_BLOB *d);
+static inline DATA_BLOB _data_blob_talloc_zero(TALLOC_CTX *ctx,
+ size_t size,
+ const char *name)
+{
+ DATA_BLOB b = data_blob_talloc_named(ctx, 0, size, name);
+ if (b.data != NULL) {
+ data_blob_clear(&b);
+ }
+ return b;
+}
+
+static inline DATA_BLOB _data_blob_talloc_s(TALLOC_CTX *ctx,
+ const void *p,
+ size_t size,
+ const char *name)
+{
+ DATA_BLOB b = data_blob_talloc_named(ctx, p, size, name);
+ if (b.data != NULL) {
+ talloc_keep_secret(b.data);
+ }
+ return b;
+}
+
+static inline DATA_BLOB _data_blob_talloc_zero_s(TALLOC_CTX *ctx,
+ size_t size,
+ const char *name)
+{
+ DATA_BLOB b = data_blob_talloc_named(ctx, 0, size, name);
+ if (b.data != NULL) {
+ data_blob_clear(&b);
+ talloc_keep_secret(b.data);
+ }
+ return b;
+}
+
+static inline DATA_BLOB _data_blob_dup_talloc_s(TALLOC_CTX *ctx,
+ DATA_BLOB blob,
+ const char *name)
+{
+ DATA_BLOB b = data_blob_talloc_named(ctx, blob.data, blob.length, name);
+ if (b.data != NULL) {
+ talloc_keep_secret(b.data);
+ }
+ return b;
+}
+
/**
check if two data blobs are equal
**/
@@ -141,4 +278,6 @@ _PUBLIC_ bool data_blob_pad(TALLOC_CTX *mem_ctx, DATA_BLOB
*blob,
extern const DATA_BLOB data_blob_null;
+/** @} */ /* data_blob */
+
#endif /* _SAMBA_DATABLOB_H_ */
diff --git a/lib/util/talloc_keep_secret.c b/lib/util/talloc_keep_secret.c
index eb5bb80ff37..c7d66a4d5e7 100644
--- a/lib/util/talloc_keep_secret.c
+++ b/lib/util/talloc_keep_secret.c
@@ -49,6 +49,5 @@ void _talloc_keep_secret(void *ptr, const char *name)
return;
}
- talloc_set_name_const(ptr, name);
talloc_set_destructor(ptr, talloc_keep_secret_destructor);
}
diff --git a/lib/util/tests/data_blob.c b/lib/util/tests/data_blob.c
index e1e8129a259..423d4d1edee 100644
--- a/lib/util/tests/data_blob.c
+++ b/lib/util/tests/data_blob.c
@@ -1,20 +1,20 @@
-/*
+/*
Unix SMB/CIFS implementation.
data blob testing
Copyright (C) Jelmer Vernooij <[email protected]> 2008
-
+
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/>.
*/
@@ -25,7 +25,7 @@
static bool test_string(struct torture_context *tctx)
{
- DATA_BLOB blob = data_blob_string_const("bla");
+ DATA_BLOB blob = data_blob_string_const("bla");
torture_assert_int_equal(tctx, blob.length, 3, "blob length");
torture_assert_str_equal(tctx, (char *)blob.data, "bla", "blob data");
@@ -35,7 +35,7 @@ static bool test_string(struct torture_context *tctx)
static bool test_string_null(struct torture_context *tctx)
{
- DATA_BLOB blob = data_blob_string_const_null("bla");
+ DATA_BLOB blob = data_blob_string_const_null("bla");
torture_assert_int_equal(tctx, blob.length, 4, "blob length");
torture_assert_str_equal(tctx, (char *)blob.data, "bla", "blob data");
@@ -54,6 +54,58 @@ static bool test_zero(struct torture_context *tctx)
return true;
}
+static bool test_zero_s(struct torture_context *tctx)
+{
+ DATA_BLOB z = data_blob_talloc_zero_s(tctx, 4);
+ int i;
+ uint8_t *p;
+
+ torture_assert_int_equal(tctx, z.length, 4, "length");
+ for (i = 0; i < z.length; i++)
+ torture_assert_int_equal(tctx, z.data[i], 0, "contents");
+ z.data[0] = 'a';
+ p = z.data; /* store pointer that will be freed */
+ torture_assert_int_equal(tctx, *p, 'a', "contents");
+ data_blob_free(&z);
+ /* coverity[use_after_free] */
+ torture_assert_int_equal(tctx, *p, 0, "contents");
+ return true;
+}
+
+static bool test_talloc_s(struct torture_context *tctx)
+{
+ DATA_BLOB z = data_blob_talloc_s(tctx, "hello", 5);
+ int i;
+ uint8_t *p;
+
+ torture_assert_int_equal(tctx, z.length, 5, "length");
+ for (i = 0; i < z.length; i++)
+ torture_assert_int_not_equal(tctx, z.data[i], 0, "data");
+ p = z.data; /* store pointer that will be freed */
+ data_blob_free(&z);
+ for (i = 0; i < 5; i++)
+ /* coverity[use_after_free] */
+ torture_assert_int_equal(tctx, p[i], 0, "data");
+ return true;
+}
+
+static bool test_dup_talloc_s(struct torture_context *tctx)
+{
+ DATA_BLOB b = data_blob_string_const("abcd");
+ DATA_BLOB z = data_blob_dup_talloc_s(tctx, b);
+ int i;
+ uint8_t *p;
+
+ torture_assert_int_equal(tctx, z.length, 4, "length");
+ for (i = 0; i < b.length; i++)
+ torture_assert_int_equal(tctx, z.data[i], b.data[i], "data");
+ p = z.data; /* store pointer that will be freed */
+ data_blob_free(&z);
+ for (i = 0; i < b.length; i++)
+ /* coverity[use_after_free] */
+ torture_assert_int_equal(tctx, p[i], 0, "data");
+ return true;
+}
static bool test_clear(struct torture_context *tctx)
{
@@ -160,7 +212,10 @@ struct torture_suite
*torture_local_util_data_blob(TALLOC_CTX *mem_ctx)
torture_suite_add_simple_test(suite, "string", test_string);
torture_suite_add_simple_test(suite, "string_null", test_string_null);
- torture_suite_add_simple_test(suite, "zero", test_zero);;
+ torture_suite_add_simple_test(suite, "zero", test_zero);
+ torture_suite_add_simple_test(suite, "zero_s", test_zero_s);
+ torture_suite_add_simple_test(suite, "talloc_s", test_talloc_s);
+ torture_suite_add_simple_test(suite, "dup_s", test_dup_talloc_s);
torture_suite_add_simple_test(suite, "clear", test_clear);
torture_suite_add_simple_test(suite, "cmp", test_cmp);
torture_suite_add_simple_test(suite, "equal_const_time",
test_equal_const_time);
diff --git a/lib/util/tests/test_talloc_keep_secret.c
b/lib/util/tests/test_talloc_keep_secret.c
index 66c3f7f3e7a..7c39431694d 100644
--- a/lib/util/tests/test_talloc_keep_secret.c
+++ b/lib/util/tests/test_talloc_keep_secret.c
@@ -24,7 +24,6 @@ static void test_talloc_keep_secret(void ** state)
TALLOC_CTX *pool = NULL;
char *ptr1 = NULL;
char *ptr2 = NULL;
- const char *ptr1_talloc_name = NULL;
size_t ptr1_size;
size_t i;
@@ -37,9 +36,6 @@ static void test_talloc_keep_secret(void ** state)
talloc_keep_secret(ptr1);
- ptr1_talloc_name = talloc_get_name(ptr1);
- assert_string_equal(ptr1_talloc_name, "ptr1");
-
ptr1_size = talloc_get_size(ptr1);
assert_int_equal(ptr1_size, strlen(ptr1) + 1);
diff --git a/lib/util/wscript_build b/lib/util/wscript_build
index 9dff0e8925d..21a94f60cac 100644
--- a/lib/util/wscript_build
+++ b/lib/util/wscript_build
@@ -92,6 +92,7 @@ bld.SAMBA_SUBSYSTEM('smb-panic',
bld.SAMBA_SUBSYSTEM('samba-util-core',
source='''
data_blob.c
+ talloc_keep_secret.c
util_file.c
sys_popen.c
time.c
@@ -198,7 +199,6 @@ else:
server_id.c
smb_threads.c
system.c
- talloc_keep_secret.c
talloc_stack.c
tevent_debug.c
tfork.c
@@ -235,6 +235,7 @@ else:
fault.h
genrand.h
tfork.h
+ talloc_keep_secret.h
''',
header_path= [ ('dlinklist.h samba_util.h', '.'), ('*',
'util') ],
local_include=False,
diff --git a/libcli/auth/smbencrypt.c b/libcli/auth/smbencrypt.c
index 03195855e92..b130c0abe34 100644
--- a/libcli/auth/smbencrypt.c
+++ b/libcli/auth/smbencrypt.c
@@ -1472,7 +1472,7 @@ bool decode_pw_buffer(TALLOC_CTX *ctx,
new_password.length,
pp_new_pwrd,
new_pw_len);
- data_blob_free(&new_password);
+ data_blob_clear_free(&new_password);
if (!ok) {
DBG_ERR("Failed to convert incoming password\n");
return false;
diff --git a/libcli/smb/smb2_signing.c b/libcli/smb/smb2_signing.c
index 94ff51f2e93..e313b627ea8 100644
--- a/libcli/smb/smb2_signing.c
+++ b/libcli/smb/smb2_signing.c
@@ -120,12 +120,11 @@ NTSTATUS smb2_signing_key_copy(TALLOC_CTX *mem_ctx,
return NT_STATUS_OK;
}
- dst->blob = data_blob_talloc_zero(dst, src->blob.length);
+ dst->blob = data_blob_talloc_zero_s(dst, src->blob.length);
if (dst->blob.length == 0) {
TALLOC_FREE(dst);
return NT_STATUS_NO_MEMORY;
}
- talloc_keep_secret(dst->blob.data);
memcpy(dst->blob.data, src->blob.data, dst->blob.length);
*_dst = dst;
@@ -243,12 +242,11 @@ static NTSTATUS smb2_signing_key_create(TALLOC_CTX
*mem_ctx,
return NT_STATUS_OK;
}
- key->blob = data_blob_talloc_zero(key, out_key_length);
+ key->blob = data_blob_talloc_zero_s(key, out_key_length);
if (key->blob.length == 0) {
TALLOC_FREE(key);
return NT_STATUS_NO_MEMORY;
}
- talloc_keep_secret(key->blob.data);
memcpy(key->blob.data,
master_key->data,
MIN(key->blob.length, master_key->length));
diff --git a/source3/passdb/machine_account_secrets.c
b/source3/passdb/machine_account_secrets.c
index 525092b2e1a..13a4ba45283 100644
--- a/source3/passdb/machine_account_secrets.c
+++ b/source3/passdb/machine_account_secrets.c
@@ -1071,7 +1071,7 @@ static int secrets_domain_info_kerberos_keys(struct
secrets_domain_info1_passwor
return ENOMEM;
--
Samba Shared Repository