1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-06 13:18:07 +03:00
samba-mirror/source3/script/tests/test_virus_scanner.sh
Jeremy Allison c844bff3ec selftest: Show vfs_virusscanner crashes when traversing a 2-level directory tree.
Modify check_infected_read() test to use a 2-level deep
directory.

We must have vfs_default:VFS_OPEN_HOW_RESOLVE_NO_SYMLINKS = no
set on the virusscanner share as otherwise the openat flag
shortcut defeats the test.

Add knownfail.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=15283

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
2023-01-13 07:34:35 +00:00

136 lines
3.5 KiB
Bash
Executable File

#!/bin/sh
# Copyright (c) 2022 Pavel Filipenský <pfilipen@redhat.com>
# shellcheck disable=1091
if [ $# -lt 4 ]; then
cat <<EOF
Usage: $0 SERVER_IP SHARE LOCAL_PATH SMBCLIENT
EOF
exit 1
fi
SERVER_IP=${1}
SHARE=${2}
LOCAL_PATH=${3}
SMBCLIENT=${4}
SMBCLIENT="${VALGRIND} ${SMBCLIENT}"
failed=0
sharedir="${LOCAL_PATH}/${SHARE}"
incdir="$(dirname "$0")/../../../testprogs/blackbox"
. "${incdir}/subunit.sh"
check_infected_read()
{
rm -rf "${sharedir:?}"/*
if ! mkdir "${sharedir}/read1"; then
echo "ERROR: Cannot create ${sharedir}/read1"
return 1
fi
if ! mkdir "${sharedir}/read1/read2"; then
echo "ERROR: Cannot create ${sharedir}/read1/read2"
return 1
fi
if ! touch "${sharedir}/read1/read2/infected.txt"; then
echo "ERROR: Cannot create ${sharedir}/read1/read2/infected.txt"
return 1
fi
${SMBCLIENT} "//${SERVER_IP}/${SHARE}" -U"${USER}"%"${PASSWORD}" -c "get read1/read2/infected.txt ${sharedir}/read1/read2/infected.download.txt"
# check that virusfilter:rename prefix/suffix was added
if [ ! -f "${sharedir}/read1/read2/virusfilter.infected.txt.infected" ]; then
echo "ERROR: ${sharedir}/read1/read2/virusfilter.infected.txt.infected is missing."
return 1
fi
# check that file was not downloaded
if [ -f "${sharedir}/read1/read2/infected.download.txt" ]; then
echo "ERROR: {sharedir}/read1/read2/infected.download.txt should not exist."
return 1
fi
rm -rf "${sharedir:?}"/*
return 0
}
check_infected_write()
{
rm -rf "${sharedir:?}"/*
smbfile=infected.upload.txt
smbfilerenamed="virusfilter.${smbfile}.infected"
# non empty file is needed
# vsf_virusfilter performs a scan only if fsp->fsp_flags.modified
if ! echo "Hello Virus!" >"${sharedir}/infected.txt"; then
echo "ERROR: Cannot create ${sharedir}/infected.txt"
return 1
fi
${SMBCLIENT} "//${SERVER_IP}/${SHARE}" -U"${USER}"%"${PASSWORD}" -c "put ${sharedir}/infected.txt ${smbfile}"
# check that virusfilter:rename prefix/suffix was added
if [ ! -f "${sharedir}/${smbfilerenamed}" ]; then
echo "ERROR: ${sharedir}/${smbfilerenamed} is missing."
return 1
fi
# check that file was not uploaded
if [ -f "${sharedir}/infected.upload.txt" ]; then
echo "ERROR: {sharedir}/${smbfile} should not exist."
return 1
fi
return 0
}
check_healthy_read()
{
rm -rf "${sharedir:?}"/*
if ! echo "Hello Samba!" >"${sharedir}/healthy.txt"; then
echo "ERROR: Cannot create ${sharedir}/healthy.txt"
return 1
fi
${SMBCLIENT} //"${SERVER_IP}"/"${SHARE}" -U"${USER}"%"${PASSWORD}" -c "get healthy.txt ${sharedir}/healthy.download.txt"
if ! cmp "${sharedir}/healthy.txt" "${sharedir}/healthy.download.txt"; then
echo "ERROR: cmp ${sharedir}/healthy.txt ${sharedir}/healthy.download.txt FAILED"
return 1
fi
return 0
}
check_healthy_write()
{
rm -rf "${sharedir:?}"/*
if ! echo "Hello Samba!" >"${sharedir}/healthy.txt"; then
echo "ERROR: Cannot create ${sharedir}/healthy.txt"
return 1
fi
${SMBCLIENT} //"${SERVER_IP}"/"${SHARE}" -U"${USER}"%"${PASSWORD}" -c "put ${sharedir}/healthy.txt healthy.upload.txt"
if ! cmp "${sharedir}/healthy.txt" "${sharedir}/healthy.upload.txt"; then
echo "ERROR: cmp ${sharedir}/healthy.txt ${sharedir}/healthy.upload.txt FAILED"
return 1
fi
return 0
}
testit "check_infected_read" check_infected_read || failed=$((failed + 1))
testit "check_infected_write" check_infected_write || failed=$((failed + 1))
testit "check_healthy_read" check_healthy_read || failed=$((failed + 1))
testit "check_healthy_write" check_healthy_write || failed=$((failed + 1))
testok "$0" "$failed"