summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2020-06-01 12:08:17 -0700
committerKarolin Seeger <kseeger@samba.org>2020-06-26 07:52:26 +0000
commit68c0b008bddcb25e13184f3a6b67f09b1d08f5a7 (patch)
tree7890d269320f572297214ec55d1294642aeff8da
parent50ff83cb3e3bc9247c639308057b7c927c266701 (diff)
downloadsamba-68c0b008bddcb25e13184f3a6b67f09b1d08f5a7.tar.gz
s3: torture: Add a MSDFS-ATTRIBUTE test.
Framework to drive comes next. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14391 Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org> (cherry picked from commit 84134812e3447317125ae08b2a98848a2e4bbd65)
-rw-r--r--source3/torture/torture.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/source3/torture/torture.c b/source3/torture/torture.c
index f07a0adf115..56258d3d2ad 100644
--- a/source3/torture/torture.c
+++ b/source3/torture/torture.c
@@ -11405,6 +11405,81 @@ static bool run_large_readx(int dummy)
return correct;
}
+static NTSTATUS msdfs_attribute_list_fn(const char *mnt,
+ struct file_info *finfo,
+ const char *mask,
+ void *private_data)
+{
+ uint16_t *p_mode = (uint16_t *)private_data;
+
+ if (strequal(finfo->name, test_filename)) {
+ *p_mode = finfo->mode;
+ }
+
+ return NT_STATUS_OK;
+}
+
+static bool run_msdfs_attribute(int dummy)
+{
+ static struct cli_state *cli;
+ bool correct = false;
+ uint16_t mode = 0;
+ NTSTATUS status;
+
+ printf("Starting MSDFS-ATTRIBUTE test\n");
+
+ if (test_filename == NULL || test_filename[0] == '\0') {
+ printf("MSDFS-ATTRIBUTE test "
+ "needs -f filename-of-msdfs-link\n");
+ return false;
+ }
+
+ /*
+ * NB. We use torture_open_connection_flags() not
+ * torture_open_connection() as the latter forces
+ * SMB1.
+ */
+ if (!torture_open_connection_flags(&cli, 0, 0)) {
+ return false;
+ }
+
+ smbXcli_conn_set_sockopt(cli->conn, sockops);
+
+ status = cli_list(cli,
+ "*",
+ FILE_ATTRIBUTE_DIRECTORY,
+ msdfs_attribute_list_fn,
+ &mode);
+
+ if (!NT_STATUS_IS_OK(status)) {
+ printf("cli_list failed with %s\n",
+ nt_errstr(status));
+ goto out;
+ }
+ if ((mode & FILE_ATTRIBUTE_REPARSE_POINT) == 0) {
+ printf("file %s should have "
+ "FILE_ATTRIBUTE_REPARSE_POINT set. attr = 0x%x\n",
+ test_filename,
+ (unsigned int)mode);
+ goto out;
+ }
+
+ if ((mode & FILE_ATTRIBUTE_DIRECTORY) == 0) {
+ printf("file %s should have "
+ "FILE_ATTRIBUTE_DIRECTORY set. attr = 0x%x\n",
+ test_filename,
+ (unsigned int)mode);
+ goto out;
+ }
+
+ correct = true;
+
+ out:
+
+ torture_close_connection(cli);
+ return correct;
+}
+
static bool run_cli_echo(int dummy)
{
struct cli_state *cli;
@@ -14540,6 +14615,10 @@ static struct {
.fn = run_large_readx,
},
{
+ .name = "MSDFS-ATTRIBUTE",
+ .fn = run_msdfs_attribute,
+ },
+ {
.name = "NTTRANS-CREATE",
.fn = run_nttrans_create,
},