Step 3: Install ClamAV eCAP Adapter
Checking downloaded files for viruses will be implemented using eCAP ClamAV adapter by Measurement Factory. To download and compile all required packages, navigate to core
sub folder and run script 03_clamav.sh
.
#!/bin/bash
# all packages are installed as root
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi
# install clamav and some other tools
apt install -y clamav clamav-daemon libclamav-dev \
g++ make pkg-config patch dmidecode
# from now on every error is fatal
set -e
# download the sources
wget https://www.e-cap.org/archive/ecap_clamav_adapter-2.0.0.tar.gz
# unpack
tar -xvzf ecap_clamav_adapter-2.0.0.tar.gz
# patch the CL_SCAN_STDOPT error
patch ecap_clamav_adapter-2.0.0/src/ClamAv.cc < ClamAv.cc.patch
# change into working dir
pushd ecap_clamav_adapter-2.0.0
# build
./configure && make && make install
# revert back
popd
The following patch fixes CL_SCAN_STDOPT error, as indicated in the Ubuntu Bug Tracker.
--- ClamAv.cc 2015-11-08 13:07:35.000000000 -0500
+++ ClamAv.cc.new 2019-07-29 08:34:21.000000000 -0400
@@ -44,8 +44,13 @@
// We assume that cl_*() functions used here are threadsafe.
const char *virname = 0;
- const int eScanResult = cl_scanfile(answer.fileName.c_str(), &virname, 0, engine, CL_SCAN_STDOPT);
+ static struct cl_scan_options options = {};
+ {
+ options.parse |= ~0; // enable all parsers
+ }
+ const int eScanResult = cl_scanfile(answer.fileName.c_str(), &virname, 0, engine, &options);
+
switch (eScanResult) {
case CL_CLEAN:
answer.statusCode = Answer::scClean;