[SCM] Samba Shared Repository - branch master updated
David Disseldorp
ddiss at samba.org
Fri Jan 25 05:43:02 MST 2013
The branch, master has been updated
via d79485a Regression test for bug #9587 - archive flag is always set on directories.
via 3d46a07 Fix bug #9587 - archive flag is always set on directories.
from c5db4eb bug9598: s4-process_single: Use pid,fd as cluster_id in process_single just like process_prefork
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit d79485a566e3c59ce53c3ee205aa6c78f149f5d8
Author: Jeremy Allison <jra at samba.org>
Date: Thu Jan 24 12:33:53 2013 -0800
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 at samba.org>
Reviewed-by: David Disseldorp <ddiss at samba.org>
Autobuild-User(master): David Disseldorp <ddiss at samba.org>
Autobuild-Date(master): Fri Jan 25 13:42:40 CET 2013 on sn-devel-104
commit 3d46a077dd0999cc0c6032379147811c8bb660fb
Author: Jeremy Allison <jra at samba.org>
Date: Thu Jan 24 11:02:30 2013 -0800
Fix bug #9587 - archive flag is always set on directories.
Creating a directory to a Samba share sets the attributes to 'D' only
(correct) - only when creating a new file should the 'A' attribute
be set.
However, doing a rename of that directory sets the 'A' attribute in error.
This should only be done on a file rename. smbclient regression test to follow.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: David Disseldorp <ddiss at samba.org>
-----------------------------------------------------------------------
Summary of changes:
source3/script/tests/test_smbclient_s3.sh | 186 +++++++++++++++++++++++++++++
source3/smbd/reply.c | 3 +-
2 files changed, 188 insertions(+), 1 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/script/tests/test_smbclient_s3.sh b/source3/script/tests/test_smbclient_s3.sh
index b240da0..596cd42 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`
diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c
index 6e1cd27..64c4fdb 100644
--- a/source3/smbd/reply.c
+++ b/source3/smbd/reply.c
@@ -6416,7 +6416,8 @@ NTSTATUS rename_internals_fsp(connection_struct *conn,
"%s -> %s\n", smb_fname_str_dbg(fsp->fsp_name),
smb_fname_str_dbg(smb_fname_dst)));
- if (!lp_posix_pathnames() &&
+ if (!fsp->is_directory &&
+ !lp_posix_pathnames() &&
(lp_map_archive(SNUM(conn)) ||
lp_store_dos_attributes(SNUM(conn)))) {
/* We must set the archive bit on the newly
--
Samba Shared Repository
More information about the samba-cvs
mailing list