mirror of
https://github.com/samba-team/samba.git
synced 2024-12-25 23:21:54 +03:00
d95be91358
This blackbox test confirms that Samba returns NTTIME=0 when a filesystem object has a UNIX timestamp value of 0, ie UNIX epoch start 1.1.1970. Here's an example output from running smbstatus allinfo on such a file: $ bin/smbclient -U slow%x //localhost/test -c "allinfo time_0_1970" altname: T11662~T create_time: NTTIME(0) access_time: NTTIME(0) write_time: NTTIME(0) change_time: NTTIME(0) attributes: (80) stream: [::$DATA], 0 bytes If you look at it with smbclient ls command, it munges the output to be 1970 so you don't notice the problem: $ bin/smbclient -U slow%x //localhost/test -c "ls time_0_1970" time_0_1970 N 0 Thu Jan 1 01:00:00 1970 The test also test other time_t values -1 and 4294967295 that are used as sentinel values in Samba code and shows that handling these values is equally broken. Same for time_t values < -1. Note that I'm adding a blackbox test *and* a torture test, as with this blackbox test I can directly control the server side, but with smbtorture I have to go through the SMB stack to create the files which doesn't work currently. BUG: https://bugzilla.samba.org/show_bug.cgi?id=7771 Signed-off-by: Ralph Boehme <slow@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
70 lines
1.8 KiB
Bash
Executable File
70 lines
1.8 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# This verifies getting and setting timestamps with non-trivial values like 0
|
|
# and < 0 works.
|
|
#
|
|
|
|
if [ $# -lt 5 ]; then
|
|
echo "Usage: $0 SERVER_IP USERNAME PASSWORD PREFIX SMBCLIENT"
|
|
exit 1
|
|
fi
|
|
|
|
SERVER_IP="$1"
|
|
USERNAME="$2"
|
|
PASSWORD="$3"
|
|
PREFIX="$4"
|
|
SMBCLIENT="$5"
|
|
|
|
SMBCLIENT="$VALGRIND ${SMBCLIENT}"
|
|
failed=0
|
|
|
|
incdir=`dirname $0`/../../../testprogs/blackbox
|
|
. $incdir/subunit.sh
|
|
|
|
export TZ=GMT
|
|
|
|
setup_testfiles() {
|
|
touch -d "$(date --date=@0)" $PREFIX/time_0
|
|
touch -d "$(date --date=@-1)" $PREFIX/time_-1
|
|
touch -d "$(date --date=@-2)" $PREFIX/time_-2
|
|
touch -t 196801010000 $PREFIX/time_1968
|
|
}
|
|
|
|
remove_testfiles() {
|
|
rm $PREFIX/time_0
|
|
rm $PREFIX/time_-1
|
|
rm $PREFIX/time_-2
|
|
rm $PREFIX/time_1968
|
|
}
|
|
|
|
test_time() {
|
|
local file="$1"
|
|
local expected="$2"
|
|
|
|
$SMBCLIENT //$SERVER/tmp -U $USERNAME%$PASSWORD -c "allinfo $file"
|
|
out=$($SMBCLIENT //$SERVER/tmp -U $USERNAME%$PASSWORD -c "allinfo $file" 2>&1) || return 1
|
|
echo "smbclient allinfo on $fname returned: \"$out\""
|
|
|
|
# Ignore create_time as that is synthesized
|
|
for time in access_time write_time change_time ; do
|
|
echo "$out" | grep "$time" | grep "$expected" || {
|
|
echo "Expected \"$expected\", got: \"$(echo $out | grep $time)\""
|
|
return 1
|
|
}
|
|
done
|
|
}
|
|
|
|
#Setup
|
|
testit "create testfiles" setup_testfiles || failed=`expr $failed + 1`
|
|
|
|
# Tests
|
|
testit "time=0" test_time time_0 "Thu Jan 1 12:00:00 AM 1970 GMT" || failed=`expr $failed + 1`
|
|
testit "time=-1" test_time time_-1 "Wed Dec 31 11:59:59 PM 1969 GMT" || failed=`expr $failed + 1`
|
|
testit "time=-2" test_time time_-2 "Wed Dec 31 11:59:58 PM 1969 GMT" || failed=`expr $failed + 1`
|
|
testit "time=1968" test_time time_1968 "Mon Jan 1 12:00:00 AM 1968 GMT" || failed=`expr $failed + 1`
|
|
|
|
# Cleanup
|
|
testit "delete testfile" remove_testfiles || failed=`expr $failed + 1`
|
|
|
|
exit $failed
|