[SCM] Samba Shared Repository - branch master updated

Ralph Böhme slow at samba.org
Sat Apr 1 06:24:02 UTC 2023


The branch, master has been updated
       via  c66f6c58c7b torture/smb2: do not use client time in delayed timestamp updates test
       via  bea154c9c13 lib: Fix tdb_validate() for incorrect tdb entries
       via  12c8b67ef63 torture3: Add tdb-validate test
      from  47f401095ea smbd: squash check_path_syntax() variants

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


- Log -----------------------------------------------------------------
commit c66f6c58c7b5ceb9185cb5dd70b7c261c817a021
Author: Amir Goldstein <amir at ctera.com>
Date:   Tue Mar 14 19:57:08 2023 +0200

    torture/smb2: do not use client time in delayed timestamp updates test
    
    Client time cannot be compared to server timestamp, because the clocks
    on client and server may not be in sync.
    
    Compare server timestamps, only to previous timestamps read from server.
    
    Signed-off-by: Amir Goldstein <amir at ctera.com>
    Reviewed-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Ralph Böhme <slow at samba.org>
    Autobuild-Date(master): Sat Apr  1 06:23:36 UTC 2023 on atb-devel-224

commit bea154c9c13e2849eadcaccc1d5acccf9a3b8931
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Mar 29 06:20:01 2023 -0400

    lib: Fix tdb_validate() for incorrect tdb entries
    
    We should not overwrite the "rc=1" initialization with the tdb_check
    retval. This will lead to tdb_validate_child() returning 0 even when
    validate_fn() found invalid entries.
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=14789
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 12c8b67ef6355f9527b53f274cc7a1acc1648dcb
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Mar 29 09:07:19 2023 -0400

    torture3: Add tdb-validate test
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=14789
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

Summary of changes:
 source3/lib/tdb_validate.c          |  5 +--
 source3/selftest/tests.py           |  1 +
 source3/torture/proto.h             |  1 +
 source3/torture/test_tdb_validate.c | 68 +++++++++++++++++++++++++++++++++++++
 source3/torture/torture.c           |  4 +++
 source3/torture/wscript_build       |  2 ++
 source4/torture/smb2/timestamps.c   |  7 ++--
 7 files changed, 81 insertions(+), 7 deletions(-)
 create mode 100644 source3/torture/test_tdb_validate.c


Changeset truncated at 500 lines:

diff --git a/source3/lib/tdb_validate.c b/source3/lib/tdb_validate.c
index 9db182fb0b3..78bd824c09d 100644
--- a/source3/lib/tdb_validate.c
+++ b/source3/lib/tdb_validate.c
@@ -31,6 +31,7 @@ static int tdb_validate_child(struct tdb_context *tdb,
 			      tdb_validate_data_func validate_fn)
 {
 	int ret = 1;
+	int check_rc;
 	int num_entries = 0;
 	struct tdb_validation_status v_status;
 
@@ -50,8 +51,8 @@ static int tdb_validate_child(struct tdb_context *tdb,
 	 * we can simplify this by passing a check function,
 	 * but I don't want to change all the callers...
 	 */
-	ret = tdb_check(tdb, NULL, NULL);
-	if (ret != 0) {
+	check_rc = tdb_check(tdb, NULL, NULL);
+	if (check_rc != 0) {
 		v_status.tdb_error = True;
 		v_status.success = False;
 		goto out;
diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py
index 31112d4be9f..47234896ed6 100755
--- a/source3/selftest/tests.py
+++ b/source3/selftest/tests.py
@@ -503,6 +503,7 @@ local_tests = [
     "LOCAL-G-LOCK8",
     "LOCAL-NAMEMAP-CACHE1",
     "LOCAL-IDMAP-CACHE1",
+    "LOCAL-TDB-VALIDATE",
     "LOCAL-hex_encode_buf",
     "LOCAL-remove_duplicate_addrs2"]
 
diff --git a/source3/torture/proto.h b/source3/torture/proto.h
index 5e6d914c3da..a67a771ef45 100644
--- a/source3/torture/proto.h
+++ b/source3/torture/proto.h
@@ -176,5 +176,6 @@ bool run_hidenewfiles_showdirs(int dummy);
 bool run_readdir_timestamp(int dummy);
 bool run_ctdbd_conn1(int dummy);
 bool run_rpc_scale(int dummy);
+bool run_tdb_validate(int dummy);
 
 #endif /* __TORTURE_H__ */
diff --git a/source3/torture/test_tdb_validate.c b/source3/torture/test_tdb_validate.c
new file mode 100644
index 00000000000..4768512e159
--- /dev/null
+++ b/source3/torture/test_tdb_validate.c
@@ -0,0 +1,68 @@
+/*
+ * Unix SMB/CIFS implementation.
+ *
+ * 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/>.
+ */
+
+#include "source3/include/includes.h"
+#include <tdb.h>
+#include "source3/torture/proto.h"
+#include "source3/lib/tdb_validate.h"
+
+static int validate_fn(struct tdb_context *tdb, TDB_DATA key, TDB_DATA value,
+		       void *private_data)
+{
+	struct tdb_validation_status *state = private_data;
+	state->success = false;
+	printf("validate_fn called\n");
+	return -1;
+}
+
+bool run_tdb_validate(int dummy)
+{
+	const char tdb_name[] = "tdb_validate.tdb";
+	bool result = false;
+	struct tdb_context *tdb = NULL;
+	char buf[] = "data";
+	TDB_DATA data = { .dptr = (uint8_t *)buf, .dsize = sizeof(buf), };
+	int ret;
+
+	unlink(tdb_name);
+
+	tdb = tdb_open(tdb_name, 0, 0, O_CREAT|O_EXCL|O_RDWR, 0600);
+	if (tdb == NULL) {
+		perror("Could not open tdb");
+		goto done;
+	}
+
+	ret = tdb_store(tdb, data, data, 0);
+	if (ret == -1) {
+		perror("tdb_store failed");
+		goto done;
+	}
+
+	ret = tdb_validate(tdb, validate_fn);
+	if (ret == 0) {
+		fprintf(stderr,
+			"tdb_validate succeeded where it should have "
+			"failed\n");
+		goto done;
+	}
+
+	result = true;
+done:
+	tdb_close(tdb);
+	unlink(tdb_name);
+	return result;
+}
diff --git a/source3/torture/torture.c b/source3/torture/torture.c
index c63db3f9385..a2db49ea45f 100644
--- a/source3/torture/torture.c
+++ b/source3/torture/torture.c
@@ -15635,6 +15635,10 @@ static struct {
 		.name  = "rpc-scale",
 		.fn    = run_rpc_scale,
 	},
+	{
+		.name  = "LOCAL-TDB-VALIDATE",
+		.fn    = run_tdb_validate,
+	},
 	{
 		.name = NULL,
 	},
diff --git a/source3/torture/wscript_build b/source3/torture/wscript_build
index 1df5d88cd31..1d2520099e3 100644
--- a/source3/torture/wscript_build
+++ b/source3/torture/wscript_build
@@ -59,6 +59,7 @@ bld.SAMBA3_BINARY('smbtorture' + bld.env.suffix3,
                         test_hidenewfiles.c
                         test_readdir_timestamp.c
                         test_rpc_scale.c
+                        test_tdb_validate.c
                         ''' + TORTURE3_ADDITIONAL_SOURCE,
                  deps='''
                       talloc
@@ -75,6 +76,7 @@ bld.SAMBA3_BINARY('smbtorture' + bld.env.suffix3,
                       libcli_lsa3
                       samba-cluster-support
                       util_sd
+                      TDB_VALIDATE
                       ''',
                  cflags='-DWINBINDD_SOCKET_DIR=\"%s\"' % bld.env.WINBINDD_SOCKET_DIR,
                  for_selftest=True)
diff --git a/source4/torture/smb2/timestamps.c b/source4/torture/smb2/timestamps.c
index 33160b06765..f8fb676e44f 100644
--- a/source4/torture/smb2/timestamps.c
+++ b/source4/torture/smb2/timestamps.c
@@ -1064,8 +1064,6 @@ static bool test_delayed_2write(struct torture_context *tctx,
 	NTTIME create_time;
 	NTTIME write_time;
 	NTTIME write_time2;
-	struct timespec now;
-	NTTIME send_close_time;
 	NTTIME close_time;
 	NTSTATUS status;
 	bool ret = true;
@@ -1141,8 +1139,7 @@ static bool test_delayed_2write(struct torture_context *tctx,
 	torture_comment(tctx, "Close file-handle 1\n");
 	sleep(2);
 
-	now = timespec_current();
-	send_close_time = full_timespec_to_nt_time(&now);
+	torture_comment(tctx, "Check writetime has been updated\n");
 
 	c = (struct smb2_close) {
 		.in.file.handle = h1,
@@ -1155,7 +1152,7 @@ static bool test_delayed_2write(struct torture_context *tctx,
 	ZERO_STRUCT(h1);
 	close_time = c.out.write_time;
 
-	if (!(close_time > send_close_time)) {
+	if (!(close_time > write_time)) {
 		ret = false;
 		torture_fail_goto(tctx, done,
 				  "Write-time not updated (wrong!)\n");


-- 
Samba Shared Repository



More information about the samba-cvs mailing list