diff options
author | Jeremy Allison <jra@samba.org> | 2013-01-24 12:33:53 -0800 |
---|---|---|
committer | David Disseldorp <ddiss@samba.org> | 2013-01-25 13:42:40 +0100 |
commit | d79485a566e3c59ce53c3ee205aa6c78f149f5d8 (patch) | |
tree | 123c470471efb9f850ae53dbad54b8e9179fa43a | |
parent | 3d46a077dd0999cc0c6032379147811c8bb660fb (diff) | |
download | samba-d79485a566e3c59ce53c3ee205aa6c78f149f5d8.tar.gz samba-d79485a566e3c59ce53c3ee205aa6c78f149f5d8.tar.bz2 samba-d79485a566e3c59ce53c3ee205aa6c78f149f5d8.zip |
Regression test for bug #9587 - archive flag is always set on directories.
Ensure we get the correct attributes on files
and directories after a rename.
Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: David Disseldorp <ddiss@samba.org>
Autobuild-User(master): David Disseldorp <ddiss@samba.org>
Autobuild-Date(master): Fri Jan 25 13:42:40 CET 2013 on sn-devel-104
-rwxr-xr-x | source3/script/tests/test_smbclient_s3.sh | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/source3/script/tests/test_smbclient_s3.sh b/source3/script/tests/test_smbclient_s3.sh index b240da0769..596cd425ff 100755 --- a/source3/script/tests/test_smbclient_s3.sh +++ b/source3/script/tests/test_smbclient_s3.sh @@ -409,6 +409,187 @@ EOF fi } +# Archive bits are correctly set on file/dir creation and rename. +test_rename_archive_bit() +{ + prompt_file="attributes: A (20)" + prompt_dir="attributes: D (10)" + tmpfile="$PREFIX/smbclient.in.$$" + filename="foo.$$" + filename_ren="bar.$$" + dirname="foodir.$$" + dirname_ren="bardir.$$" + filename_path="$PREFIX/$filename" + local_name1="$LOCAL_PATH/$filename" + local_name2="$LOCAL_PATH/$filename_ren" + local_dir_name1="$LOCAL_PATH/$dirname" + local_dir_name2="$LOCAL_PATH/$dirname_ren" + + rm -f $filename_path + rm -f $local_name1 + rm -f $local_name2 + +# Create a new file, ensure it has 'A' attributes. + touch $filename_path + + cat > $tmpfile <<EOF +lcd $PREFIX +put $filename +allinfo $filename +quit +EOF + + cmd='CLI_FORCE_INTERACTIVE=yes $SMBCLIENT "$@" -U$USERNAME%$PASSWORD //$SERVER/tmp -I $SERVER_IP $ADDARGS < $tmpfile 2>&1' + eval echo "$cmd" + out=`eval $cmd` + ret=$? + rm -f $tmpfile + + if [ $ret != 0 ] ; then + echo "$out" + echo "failed creating file $filename with error $ret" + false + return + fi + + echo "$out" | grep "$prompt_file" >/dev/null 2>&1 + + ret=$? + + rm -f $filename_path + rm -f $local_name1 + rm -f $local_name2 + + if [ $ret = 0 ] ; then + # got the correct prompt .. succeed + true + else + echo "$out" + echo "Attributes incorrect on new file $ret" + false + fi + +# Now check if we remove 'A' and rename, the A comes back. + touch $filename_path + + cat > $tmpfile <<EOF +lcd $PREFIX +put $filename +setmode $filename -a +ren $filename $filename_ren +allinfo $filename_ren +quit +EOF + + cmd='CLI_FORCE_INTERACTIVE=yes $SMBCLIENT "$@" -U$USERNAME%$PASSWORD //$SERVER/tmp -I $SERVER_IP $ADDARGS < $tmpfile 2>&1' + eval echo "$cmd" + out=`eval $cmd` + ret=$? + rm -f $tmpfile + + if [ $ret != 0 ] ; then + echo "$out" + echo "failed creating file and renaming $filename with error $ret" + false + return + fi + + echo "$out" | grep "$prompt_file" >/dev/null 2>&1 + + ret=$? + + rm -f $filename_path + rm -f $local_name1 + rm -f $local_name2 + + if [ $ret = 0 ] ; then + # got the correct prompt .. succeed + true + else + echo "$out" + echo "Attributes incorrect on renamed file $ret" + false + fi + + rm -rf $local_dir_name1 + rm -rf $local_dir_name2 + +# Create a new directory, ensure it has 'D' but not 'A' attributes. + + cat > $tmpfile <<EOF +mkdir $dirname +allinfo $dirname +quit +EOF + + cmd='CLI_FORCE_INTERACTIVE=yes $SMBCLIENT "$@" -U$USERNAME%$PASSWORD //$SERVER/tmp -I $SERVER_IP $ADDARGS < $tmpfile 2>&1' + eval echo "$cmd" + out=`eval $cmd` + ret=$? + rm -f $tmpfile + + if [ $ret != 0 ] ; then + echo "$out" + echo "failed creating directory $dirname with error $ret" + false + return + fi + + echo "$out" | grep "$prompt_dir" >/dev/null 2>&1 + + ret=$? + + rm -rf $local_dir_name1 + rm -rf $local_dir_name2 + + if [ $ret = 0 ] ; then + # got the correct prompt .. succeed + true + else + echo "$out" + echo "Attributes incorrect on new directory $ret" + false + fi + +# Now check if we rename, we still only have 'D' attributes + + cat > $tmpfile <<EOF +mkdir $dirname +ren $dirname $dirname_ren +allinfo $dirname_ren +quit +EOF + + cmd='CLI_FORCE_INTERACTIVE=yes $SMBCLIENT "$@" -U$USERNAME%$PASSWORD //$SERVER/tmp -I $SERVER_IP $ADDARGS < $tmpfile 2>&1' + eval echo "$cmd" + out=`eval $cmd` + ret=$? + rm -f $tmpfile + + if [ $ret != 0 ] ; then + echo "$out" + echo "failed creating directory $dirname and renaming with error $ret" + false + return + fi + + echo "$out" | grep "$prompt_dir" >/dev/null 2>&1 + + ret=$? + + rm -f $local_name1 + rm -f $local_name2 + + if [ $ret = 0 ] ; then + # got the correct prompt .. succeed + true + else + echo "$out" + echo "Attributes incorrect on renamed directory $ret" + false + fi +} + # Test authenticating using the winbind ccache test_ccache_access() { @@ -541,6 +722,7 @@ EOF fi } + LOGDIR_PREFIX=test_smbclient_s3 # possibly remove old logdirs: @@ -596,6 +778,10 @@ testit "Accessing an MS-DFS link" \ test_msdfs_link || \ failed=`expr $failed + 1` +testit "Ensure archive bit is set correctly on file/dir rename" \ + test_rename_archive_bit || \ + failed=`expr $failed + 1` + testit "ccache access works for smbclient" \ test_ccache_access || \ failed=`expr $failed + 1` |