Skip to content

Commit

Permalink
tests: Get a file through an absolute symlink within a subdirectory
Browse files Browse the repository at this point in the history
This shows that read_symlink_reparse() is broken when trying to
replace an absolute with a relative filename within a
share.

read_symlink_reparse() is used only in openat_pathref_fsp_nosymlink()
so far to chase symlinks for non-lcomp path components. Chasing lcomp
symlinks is done through non_widelink_open(), which gets it right.

Bug: https://bugzilla.samba.org/show_bug.cgi?id=15505

Signed-off-by: Volker Lendecke <[email protected]>
Reviewed-by: Jeremy Allison <[email protected]>
  • Loading branch information
vlendec authored and jrasamba committed Oct 27, 2023
1 parent 03af117 commit cc1657c
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
1 change: 1 addition & 0 deletions selftest/knownfail.d/bug-15505
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
^samba3.blackbox.smbclient_s3.*.follow\ local\ symlinks.*
39 changes: 39 additions & 0 deletions source3/script/tests/test_smbclient_s3.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1492,6 +1492,17 @@ EOF
return
fi

# Create a file to be accessed behind the symlink
touch $local_slink_target_dir/x
ret=$?
if [ $ret -ne 0 ]; then
echo "$out"
echo "failed - unable to create file"
ls -la $local_test_dir
false
return
fi

# Can we cd into the symlink name and ls ?
tmpfile=$PREFIX/smbclient_interactive_prompt_commands
cat >$tmpfile <<EOF
Expand Down Expand Up @@ -1521,6 +1532,34 @@ EOF
return
fi

# Can we get the test file behind the symlink'ed dir?
tmpfile=$PREFIX/smbclient_interactive_prompt_commands
cat >$tmpfile <<EOF
get $share_test_dir\\sym_name\\x -
quit
EOF
cmd='CLI_FORCE_INTERACTIVE=yes $SMBCLIENT "$@" -U$USERNAME%$PASSWORD //$SERVER/local_symlinks -I $SERVER_IP $LOCAL_ADDARGS < $tmpfile 2>&1'
eval echo "$cmd"
out=$(eval $cmd)
ret=$?
rm -f $tmpfile

if [ $ret -ne 0 ]; then
echo "$out"
echo "failed accessing local_symlinks with error $ret"
false
return
fi

echo "$out" | grep 'NT_STATUS_'
ret=$?
if [ $ret -eq 0 ]; then
echo "$out"
echo "failed - got an NT_STATUS error"
false
return
fi

# CLEANUP
rm -f $local_slink_name

Expand Down

0 comments on commit cc1657c

Please sign in to comment.