HEX
Server: nginx/1.26.1
System: Linux main-vm 5.15.0-153-generic #163-Ubuntu SMP Thu Aug 7 16:37:18 UTC 2025 x86_64
User: root (0)
PHP: 8.2.19
Disabled: NONE
Upload Files
File: //etc/ppp/ip-up.d/clamav-freshclam-ifupdown
#!/bin/sh
# 2004-01-25, Thomas Lamy <[email protected]>
# From Magnus Ekdahl's <[email protected]> clamav-freshclam-handledaemon(8)
# Adjust to be networkd-dispatcher compatible by
# Sergio Durigan Junior <[email protected]>

set -e

[ -f /var/lib/clamav/interface ] || exit 0

if [ -d /run/systemd/system ]; then
    INIT='systemctl'
    INIT_SUFFIX='clamav-freshclam'
else
    INIT='invoke-rc.d clamav-freshclam'
    INIT_SUFFIX=''
fi

CLAMAV_CONF_FILE=/etc/clamav/clamd.conf
FRESHCLAM_CONF_FILE=/etc/clamav/freshclam.conf

INTERNETIFACE=$(cat /var/lib/clamav/interface)

if grep -q freshclam /proc/*/stat 2>/dev/null; then
  IS_RUNNING=true
else
  IS_RUNNING=false
fi

handle_ifupdown ()
{
    # $IFACE is set by ifup/down, $PPP_IFACE by pppd 
    [ -n "$PPP_IFACE" ] && IFACE=$PPP_IFACE

    # This is sloppy - woody's pppd exports variables, while sid's passes them as 
    # arguments and exports them.

    if [ "$1" = "$IFACE" ]; then # We're called by sid's pppd
	shift 6                    # and we already know the interface
    fi                           # Dump the arguments passed.

    if [ -z "$1" ]; then
	case $(dirname "$0") in
	    */if-up.d|*/ip-up.d)
		# Short circuit and exit early if freshclam is already running
		[ "$IS_RUNNING" = 'true' ] && exit 0
		for interface in $INTERNETIFACE; do
		    if [ "$interface" = "$IFACE" ]; then
			FMODE=start
			break
		    else
			FMODE=skip
		    fi
		done
		;;
	    */if-down.d|*/ip-down.d)
		# Short circuit and exit early if freshclam is not already running
		[ "$IS_RUNNING" = 'false' ] && exit 0
		for interface in $INTERNETIFACE; do
		    if [ "$interface" = "$IFACE" ]; then
			FMODE=stop
			break
		    else
			FMODE=skip
		    fi
		done
		;;
	    *)
		FMODE=skip
		;;
	esac
    else
	FMODE="$1"
    fi

    case "$FMODE" in
	start|stop)
	    IFACE="$IFACE" $INIT $FMODE $INIT_SUFFIX
	    ;;
	skip)
	    ;;
	*)
	    echo "Usage: $0 {start|stop|skip}" >&2
	    exit 1
	    ;;
    esac
}

handle_networkd_dispatcher ()
{
    FOUND_IFACE=false

    for interface in $INTERNETIFACE; do
	if [ "$interface" = "$IFACE" ]; then
	    FOUND_IFACE=true
	    break
	fi
    done

    [ "$FOUND_IFACE" = 'false' ] && return

    FMODE=""

    case "$STATE" in
	"off")
	    if [ "$IS_RUNNING" = 'true' ]; then
		FMODE="stop"
	    fi
	    ;;
	"routable")
	    if [ "$IS_RUNNING" = 'false' ]; then
		FMODE="start"
	    fi
	    ;;
	*)
	    return
    esac

    if [ -n "$FMODE" ]; then
	IFACE="$IFACE" $INIT $FMODE $INIT_SUFFIX
    fi
}

if [ -n "$STATE" ]; then
    handle_networkd_dispatcher "$@"
else
    handle_ifupdown "$@"
fi

exit 0