Files
packages/net/clamav/files/clamav.init
Paul Donald 4c35b89332 clamav: all; init; add only non-empty parameters
Gate all parameters behind -n, a not-empty check. Prevents failed starts
where daemons expect a value for a parameter.

Closes #27430
Tested-on: 24.10.3
Signed-off-by: Paul Donald <newtwen+github@gmail.com>
2025-10-02 19:52:52 -03:00

132 lines
4.3 KiB
Bash

#!/bin/sh /etc/rc.common
# Copyright (C) 2015 OpenWrt.org
START=90
STOP=10
USE_PROCD=1
PROG=/usr/sbin/clamd
CLAMD_CONFIGFILE="/tmp/clamav/clamd.conf"
validate_clamav_section() {
uci_load_validate clamav clamav "$1" "$2" \
'clamd_config_file:string' \
'LogVerbose:string' \
'LogTime:string' \
'Debug:string' \
'LogSyslog:string' \
'LogFacility:string' \
'ExtendedDetectionInfo:string' \
'OfficialDatabaseOnly:string' \
'StreamMinPort:uinteger' \
'StreamMaxPort:uinteger' \
'MaxThreads:uinteger' \
'ReadTimeout:uinteger' \
'CommandReadTimeout:uinteger' \
'MaxDirectoryRecursion:uinteger' \
'FollowDirectorySymlinks:string' \
'FollowFileSymlinks:string' \
'SelfCheck:uinteger' \
'DetectPUA:string' \
'ScanPE:string' \
'DisableCertCheck:string' \
'ScanELF:string' \
'AlertBrokenExecutables:string' \
'ScanOLE2:string' \
'ScanPDF:string' \
'ScanSWF:string' \
'ScanMail:string' \
'ScanPartialMessages:string' \
'ScanArchive:string' \
'TemporaryDirectory:string' \
'AlertEncrypted:string' \
'MaxFileSize:string' \
'LocalSocket:string' \
'TCPSocket:port' \
'TCPAddr:ipaddr' \
'User:string' \
'ExitOnOOM:string' \
'DatabaseDirectory:string'
}
start_clamav_instance() {
[ "$2" = 0 ] || {
echo "validation failed"
return 1
}
mkdir -p "$DatabaseDirectory"
mkdir -p /etc/clamav/
mkdir -p /var/run/clamav/
chmod a+rw /var/run/clamav
mkdir -p "$(dirname $CLAMD_CONFIGFILE)"
ln -sf "$clamd_config_file" "$CLAMD_CONFIGFILE"
{
[ -n "$LogVerbose" ] && echo "LogVerbose " "$LogVerbose"
[ -n "$LogTime" ] && echo "LogTime " "$LogTime"
[ -n "$Debug" ] && echo "Debug " "$Debug"
[ -n "$LogSyslog" ] && echo "LogSyslog " "$LogSyslog"
[ -n "$LogFacility" ] && echo "LogFacility " "$LogFacility"
[ -n "$ExtendedDetectionInfo" ] && echo "ExtendedDetectionInfo " "$ExtendedDetectionInfo"
[ -n "$OfficialDatabaseOnly" ] && echo "OfficialDatabaseOnly " "$OfficialDatabaseOnly"
[ -n "$StreamMinPort" ] && echo "StreamMinPort " "$StreamMinPort"
[ -n "$StreamMaxPort" ] && echo "StreamMaxPort " "$StreamMaxPort"
[ -n "$MaxThreads" ] && echo "MaxThreads " "$MaxThreads"
[ -n "$ReadTimeout" ] && echo "ReadTimeout " "$ReadTimeout"
[ -n "$CommandReadTimeout" ] && echo "CommandReadTimeout " "$CommandReadTimeout"
[ -n "$MaxDirectoryRecursion" ] && echo "MaxDirectoryRecursion " "$MaxDirectoryRecursion"
[ -n "$FollowDirectorySymlinks" ] && echo "FollowDirectorySymlinks " "$FollowDirectorySymlinks"
[ -n "$FollowFileSymlinks" ] && echo "FollowFileSymlinks " "$FollowFileSymlinks"
[ -n "$SelfCheck" ] && echo "SelfCheck " "$SelfCheck"
[ -n "$DetectPUA" ] && echo "DetectPUA " "$DetectPUA"
[ -n "$ScanPE" ] && echo "ScanPE " "$ScanPE"
[ -n "$DisableCertCheck" ] && echo "DisableCertCheck " "$DisableCertCheck"
[ -n "$ScanELF" ] && echo "ScanELF " "$ScanELF"
[ -n "$AlertBrokenExecutables" ] && echo "AlertBrokenExecutables " "$AlertBrokenExecutables"
[ -n "$ScanOLE2" ] && echo "ScanOLE2 " "$ScanOLE2"
[ -n "$ScanPDF" ] && echo "ScanPDF " "$ScanPDF"
[ -n "$ScanSWF" ] && echo "ScanSWF " "$ScanSWF"
[ -n "$ScanMail" ] && echo "ScanMail " "$ScanMail"
[ -n "$ScanPartialMessages" ] && echo "ScanPartialMessages " "$ScanPartialMessages"
[ -n "$ScanArchive" ] && echo "ScanArchive " "$ScanArchive"
[ -n "$TemporaryDirectory" ] && echo "TemporaryDirectory " "$TemporaryDirectory"
[ -n "$AlertEncrypted" ] && echo "AlertEncrypted " "$AlertEncrypted"
[ -n "$MaxFileSize" ] && echo "MaxFileSize " "$MaxFileSize"
[ -n "$User" ] && echo "User " "$User"
[ -n "$ExitOnOOM" ] && echo "ExitOnOOM " "$ExitOnOOM"
[ -n "$DatabaseDirectory" ] && echo "DatabaseDirectory " "$DatabaseDirectory"
} > "$CLAMD_CONFIGFILE"
if [ -n "$LocalSocket" ]; then
echo "LocalSocket " "$LocalSocket" >>"$CLAMD_CONFIGFILE"
fi
if [ -n "$TCPSocket" ]; then
echo "TCPAddr" "$TCPAddr" >>"$CLAMD_CONFIGFILE"
echo "TCPSocket " "$TCPSocket" >>"$CLAMD_CONFIGFILE"
fi
procd_open_instance
procd_set_param command $PROG -c $CLAMD_CONFIGFILE
procd_set_param file $CLAMD_CONFIGFILE
procd_close_instance
}
start_service()
{
validate_clamav_section clamav start_clamav_instance
}
stop_service()
{
service_stop $PROG
}
service_triggers()
{
procd_add_reload_trigger "clamav"
procd_add_validation validate_clamav_section
}