[SCM] Samba Shared Repository - branch v4-16-test updated
Jule Anger
janger at samba.org
Mon Jun 20 10:57:01 UTC 2022
The branch, v4-16-test has been updated
via 94a94383bbd s3/client: fix dfs deltree, resolve dfs path
via 659d6140f11 Add test smbclient 'delree' of dir (on DFS share)
via 8bac5eedc79 s3/client: fix dfs delete, resolve dfs path
via 2f105c9f541 Add test smbclient 'del' of file (on DFS share)
via 8db232cb6a0 Add new dfs node msdfs-share pointing to new msdfs-share2
from a9f87b9278e s3:utils: Fix missing space in testparm output
https://git.samba.org/?p=samba.git;a=shortlog;h=v4-16-test
- Log -----------------------------------------------------------------
commit 94a94383bbd4123f5606fca7536d29c201827c1d
Author: Noel Power <noel.power at suse.com>
Date: Thu Jun 16 17:17:45 2022 +0100
s3/client: fix dfs deltree, resolve dfs path
since 4cc4938a2866738aaff4dc91550bb7a5ad05d7fb do_list seems
to deal with non dfs root path, hence we need to resolve the
path before calling cli_unlink.
Also remove the knownfail
We additionally have to also remove the fallback to remove 'file3'
int the smbcacls_dfs_propagate_inherit.teardown as the deltree
that happens in the baseclass now succeeds.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15100
Signed-off-by: Noel Power <noel.power at suse.com>
Reviewed-by: Jeremy Allison <jra at samba.org>
Autobuild-User(master): Jeremy Allison <jra at samba.org>
Autobuild-Date(master): Fri Jun 17 17:12:07 UTC 2022 on sn-devel-184
(cherry picked from commit 81fdcf95ae92a02f83501753dec0f29ddd555eeb)
Autobuild-User(v4-16-test): Jule Anger <janger at samba.org>
Autobuild-Date(v4-16-test): Mon Jun 20 10:56:52 UTC 2022 on sn-devel-184
commit 659d6140f112ad12dca0e7cc1c7e59c481434c14
Author: Noel Power <noel.power at suse.com>
Date: Fri Jun 17 10:58:48 2022 +0100
Add test smbclient 'delree' of dir (on DFS share)
deltree of a file on a DFS share results in NT_STATUS_OBJECT_PATH_NOT_FOUND
Addionally add a knownfail for this (to be removed in subsequent patch
to fix bug)
We also need to add a knownfail (which will not be removed) for the
new test which will fail in smb1 envs
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15100
Signed-off-by: Noel Power <noel.power at suse.com>
Reviewed-by: Jeremy Allison <jra at samba.org>
(cherry picked from commit 23a5a05db03a8f14ab701005a8bec9a3eeff3d77)
commit 8bac5eedc79b022ec39c7ab1c45926d90a28a939
Author: Noel Power <noel.power at suse.com>
Date: Thu Jun 16 15:12:05 2022 +0100
s3/client: fix dfs delete, resolve dfs path
since 4cc4938a2866738aaff4dc91550bb7a5ad05d7fb do_list seems
to deal with non dfs root path, hence we need to resolve the
path before calling cli_unlink.
Also remove the knownfail
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15100
Signed-off-by: Noel Power <noel.power at suse.com>
Reviewed-by: Jeremy Allison <jra at samba.org>
(cherry picked from commit 7c4cb4982330cd2eda53950e977179920b1e3b04)
commit 2f105c9f541963db4f94699fbc7060ff791a04ed
Author: Noel Power <noel.power at suse.com>
Date: Fri Jun 17 10:25:49 2022 +0100
Add test smbclient 'del' of file (on DFS share)
del of a file on a DFS share results in NT_STATUS_OBJECT_PATH_NOT_FOUND
Addionally add a knownfail (will be removed in following patch to
fix the bug)
We also need to add a knownfail (which will not be removed) for the
new test which will fail in smb1 envs
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15100
Signed-off-by: Noel Power <noel.power at suse.com>
Reviewed-by: Jeremy Allison <jra at samba.org>
(back-ported from commit db1b4df0ab3b18821da3c2dbe6d6058f0c3019b8)
commit 8db232cb6a0750dc6c238df360b8ffb23e00bef8
Author: Noel Power <noel.power at suse.com>
Date: Fri Jun 17 10:15:42 2022 +0100
Add new dfs node msdfs-share pointing to new msdfs-share2
Also add another node within msdfs-share2 pointing to normal share
This patch is in preperation for creating a test for 'del' &
'deltree' on DFS shares. The extra redirection is necessary to
reproduce the bug
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15100
Signed-off-by: Noel Power <noel.power at suse.com>
Reviewed-by: Jeremy Allison <jra at samba.org>
(cherry picked from commit 39672a9676bff53d3ccc0ad7c1fa65a95cbceaab)
-----------------------------------------------------------------------
Summary of changes:
.../blackbox/smbcacls_dfs_propagate_inherit.py | 8 --
selftest/knownfail.d/smb1-tests | 2 +
selftest/target/Samba3.pm | 9 ++
source3/client/client.c | 63 +++++++++++---
source3/script/tests/test_smbclient_s3.sh | 95 ++++++++++++++++++++++
5 files changed, 158 insertions(+), 19 deletions(-)
Changeset truncated at 500 lines:
diff --git a/python/samba/tests/blackbox/smbcacls_dfs_propagate_inherit.py b/python/samba/tests/blackbox/smbcacls_dfs_propagate_inherit.py
index 36c29c8ccca..42680df0d06 100644
--- a/python/samba/tests/blackbox/smbcacls_dfs_propagate_inherit.py
+++ b/python/samba/tests/blackbox/smbcacls_dfs_propagate_inherit.py
@@ -85,11 +85,3 @@ class DfsInheritanceSmbCaclsTests(InheritanceSmbCaclsTests):
def tearDown(self):
super(DfsInheritanceSmbCaclsTests, self).tearDown()
- # for dfs tests inevitably we fallback to remove the local files in
- # the base class, the base class however doesn't know about the
- # target dfs share (or its contents) so we have to assume we need to
- # remove the file on the dfs share
- smbclient_args = self.build_test_cmd("smbclient", ["//%s/%s" % (self.server, self.dfs_target_share), "-c", "rm file-3"])
- self.check_output(smbclient_args)
-
-
diff --git a/selftest/knownfail.d/smb1-tests b/selftest/knownfail.d/smb1-tests
index 03d299ad7c7..b5263f28016 100644
--- a/selftest/knownfail.d/smb1-tests
+++ b/selftest/knownfail.d/smb1-tests
@@ -10,6 +10,8 @@
^samba3.blackbox.smbclient_s3.NT1.(plain|sign).member_creds.interactive smbclient -l prompts on stdout\((ad_member|nt4_member)\)
^samba3.blackbox.smbclient_s3.NT1.(plain|sign).member_creds.creating a bad symlink and deleting it\((ad_member|nt4_member)\)
^samba3.blackbox.smbclient_s3.NT1.(plain|sign).member_creds.Accessing an MS-DFS link\((ad_member|nt4_member)\)
+^samba3.blackbox.smbclient_s3.NT1.(plain|sign).member_creds.del on MS-DFS share\((ad_member|nt4_member)\)
+^samba3.blackbox.smbclient_s3.NT1.(plain|sign).member_creds.deltree on MS-DFS share\((ad_member|nt4_member)\)
^samba3.blackbox.smbclient_s3.NT1.(plain|sign).member_creds.Ensure archive bit is set correctly on file/dir rename\((ad_member|nt4_member)\)
^samba3.blackbox.smbclient_s3.NT1.(plain|sign).member_creds.ccache access works for smbclient\((ad_member|nt4_member)\)
^samba3.blackbox.smbclient_s3.NT1.(plain|sign).member_creds.using an authentication file\((ad_member|nt4_member)\)
diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm
index b260f26cbc0..c7d22b20d99 100755
--- a/selftest/target/Samba3.pm
+++ b/selftest/target/Samba3.pm
@@ -2415,6 +2415,9 @@ sub provision($$)
my $msdfs_shrdir="$shrdir/msdfsshare";
push(@dirs,$msdfs_shrdir);
+ my $msdfs_shrdir2="$shrdir/msdfsshare2";
+ push(@dirs,$msdfs_shrdir2);
+
my $msdfs_deeppath="$msdfs_shrdir/deeppath";
push(@dirs,$msdfs_deeppath);
@@ -2508,6 +2511,8 @@ sub provision($$)
symlink "msdfs:$server_ip\\smbcacls_sharedir_dfs,$server_ipv6\\smbcacls_sharedir_dfs",
"$msdfs_shrdir/smbcacls_sharedir_dfs";
+ symlink "msdfs:$server_ip\\msdfs-share2,$server_ipv6\\msdfs-share2", "$msdfs_shrdir/dfshop1";
+ symlink "msdfs:$server_ip\\tmp,$server_ipv6\\tmp", "$msdfs_shrdir2/dfshop2";
##
## create bad names in $badnames_shrdir
##
@@ -2831,6 +2836,10 @@ sub provision($$)
msdfs root = yes
msdfs shuffle referrals = yes
guest ok = yes
+[msdfs-share2]
+ path = $msdfs_shrdir2
+ msdfs root = yes
+ guest ok = yes
[hideunread]
copy = tmp
hide unreadable = yes
diff --git a/source3/client/client.c b/source3/client/client.c
index 8ec4589a1cd..69b7c9022c2 100644
--- a/source3/client/client.c
+++ b/source3/client/client.c
@@ -2354,6 +2354,9 @@ static NTSTATUS do_del(struct cli_state *cli_state, struct file_info *finfo,
{
TALLOC_CTX *ctx = talloc_tos();
char *mask = NULL;
+ struct cli_state *targetcli = NULL;
+ char *targetname = NULL;
+ struct cli_credentials *creds = samba_cmdline_get_creds();
NTSTATUS status;
mask = talloc_asprintf(ctx,
@@ -2370,7 +2373,15 @@ static NTSTATUS do_del(struct cli_state *cli_state, struct file_info *finfo,
return NT_STATUS_OK;
}
- status = cli_unlink(cli_state, mask, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
+ status = cli_resolve_path(ctx, "",
+ creds,
+ cli, mask, &targetcli, &targetname);
+ if (!NT_STATUS_IS_OK(status)) {
+ goto out;
+ }
+
+ status = cli_unlink(targetcli, targetname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
+out:
if (!NT_STATUS_IS_OK(status)) {
d_printf("%s deleting remote file %s\n",
nt_errstr(status), mask);
@@ -2428,20 +2439,37 @@ static NTSTATUS delete_remote_files_list(struct cli_state *cli_state,
{
NTSTATUS status = NT_STATUS_OK;
struct file_list *deltree_list_iter = NULL;
+ char *targetname = NULL;
+ struct cli_state *targetcli = NULL;
+ struct cli_credentials *creds = samba_cmdline_get_creds();
+ TALLOC_CTX *ctx = talloc_tos();
for (deltree_list_iter = flist;
deltree_list_iter != NULL;
deltree_list_iter = deltree_list_iter->next) {
+ status = cli_resolve_path(ctx,
+ "",
+ creds,
+ cli_state,
+ deltree_list_iter->file_path,
+ &targetcli,
+ &targetname);
+ if (!NT_STATUS_IS_OK(status)) {
+ d_printf("delete_remote_files %s: %s\n",
+ deltree_list_iter->file_path,
+ nt_errstr(status));
+ return status;
+ }
if (CLI_DIRSEP_CHAR == '/') {
/* POSIX. */
- status = cli_posix_unlink(cli_state,
- deltree_list_iter->file_path);
+ status = cli_posix_unlink(targetcli,
+ targetname);
} else if (deltree_list_iter->isdir) {
- status = cli_rmdir(cli_state,
- deltree_list_iter->file_path);
+ status = cli_rmdir(targetcli,
+ targetname);
} else {
- status = cli_unlink(cli_state,
- deltree_list_iter->file_path,
+ status = cli_unlink(targetcli,
+ targetname,
FILE_ATTRIBUTE_SYSTEM |
FILE_ATTRIBUTE_HIDDEN);
}
@@ -2550,14 +2578,27 @@ static int cmd_deltree(void)
deltree_list_iter = deltree_list_iter->next) {
if (deltree_list_iter->isdir == false) {
+ char *targetname = NULL;
+ struct cli_state *targetcli = NULL;
+ struct cli_credentials *creds = samba_cmdline_get_creds();
+ status = cli_resolve_path(ctx,
+ "",
+ creds,
+ cli,
+ deltree_list_iter->file_path,
+ &targetcli,
+ &targetname);
+ if (!NT_STATUS_IS_OK(status)) {
+ goto err;
+ }
/* Just a regular file. */
if (CLI_DIRSEP_CHAR == '/') {
/* POSIX. */
- status = cli_posix_unlink(cli,
- deltree_list_iter->file_path);
+ status = cli_posix_unlink(targetcli,
+ targetname);
} else {
- status = cli_unlink(cli,
- deltree_list_iter->file_path,
+ status = cli_unlink(targetcli,
+ targetname,
FILE_ATTRIBUTE_SYSTEM |
FILE_ATTRIBUTE_HIDDEN);
}
diff --git a/source3/script/tests/test_smbclient_s3.sh b/source3/script/tests/test_smbclient_s3.sh
index c23f8deecb8..0e71f599e34 100755
--- a/source3/script/tests/test_smbclient_s3.sh
+++ b/source3/script/tests/test_smbclient_s3.sh
@@ -528,6 +528,93 @@ EOF
return 0
}
+test_msdfs_del()
+{
+ tmpfile="$PREFIX/smbclient.in.$$"
+ filename_src="src.$$"
+ filename_src_path="$PREFIX/$filename_src"
+ rm -f "$filename_src_path"
+ touch "$filename_src_path"
+
+ cat > $tmpfile <<EOF
+lcd $PREFIX
+cd dfshop1
+cd dfshop2
+put $filename_src
+del $filename_src
+quit
+EOF
+
+ cmd='CLI_FORCE_INTERACTIVE=yes $SMBCLIENT "$@" -U$USERNAME%$PASSWORD //$SERVER/msdfs-share -I $SERVER_IP $ADDARGS < $tmpfile 2>&1'
+ eval echo "$cmd"
+ out=`eval $cmd`
+ ret=$?
+ rm -f "$tmpfile"
+ rm -f "$filename_src_path"
+
+ if [ $ret != 0 ] ; then
+ echo "$out"
+ echo "failed deleteing $filename_src with error $ret"
+ return 1
+ fi
+
+ echo "$out" | grep "NT_STATUS" >/dev/null 2>&1
+
+ ret="$?"
+ if [ "$ret" -eq 0 ] ; then
+ echo "$out"
+ echo "del $filename_src NT_STATUS_ error"
+ return 1
+ fi
+ return 0
+}
+
+test_msdfs_deltree()
+{
+ tmpfile="$PREFIX/smbclient.in.$$"
+ dirname_src="foodir.$$"
+ filename_src="src.$$"
+ filename_src_path="$PREFIX/$filename_src"
+ dirname_src_path="$PREFIX/$dirname"
+ rm -f "$filename_src_path"
+ touch "$filename_src_path"
+
+ cat > $tmpfile <<EOF
+lcd $PREFIX
+cd dfshop1
+cd dfshop2
+mkdir $dirname_src
+cd $dirname_src
+put $filename_src
+cd ..
+deltree $dirname_src
+quit
+EOF
+
+ cmd='CLI_FORCE_INTERACTIVE=yes $SMBCLIENT "$@" -U$USERNAME%$PASSWORD //$SERVER/msdfs-share -I $SERVER_IP $ADDARGS < $tmpfile 2>&1'
+ eval echo "$cmd"
+ out=`eval $cmd`
+ ret=$?
+ rm -f "$tmpfile"
+ rm -f "$filename_src_path"
+ rm -f "$dirname_src_path"
+
+ if [ $ret != 0 ] ; then
+ echo "$out"
+ echo "deltree failed deleting dir $dirname_src with error $ret"
+ return 1
+ fi
+
+ echo "$out" | grep "NT_STATUS" >/dev/null 2>&1
+
+ ret="$?"
+ if [ "$ret" -eq 0 ] ; then
+ echo "$out"
+ echo "deltree $dirname_src NT_STATUS_ error"
+ return 1
+ fi
+ return 0
+}
# Archive bits are correctly set on file/dir creation and rename.
test_rename_archive_bit()
@@ -2170,6 +2257,14 @@ testit "Hardlink on MS-DFS share" \
test_msdfs_hardlink || \
failed=`expr $failed + 1`
+testit "del on MS-DFS share" \
+ test_msdfs_del || \
+ failed=`expr $failed + 1`
+
+testit "deltree on MS-DFS share" \
+ test_msdfs_deltree || \
+ failed=`expr $failed + 1`
+
testit "Ensure archive bit is set correctly on file/dir rename" \
test_rename_archive_bit || \
failed=`expr $failed + 1`
--
Samba Shared Repository
More information about the samba-cvs
mailing list