#!/bin/bash
# Kleines Script zum Scannen nach Viren aller Dateien in einem Verzeichnis
# Erkannte Viren werden in Quarantaene verschoben, nicht infizierte Dateien
# in ein Ausgangsverzeichnis
# (C) 2009 Stefan Schaefer invis-server.org
# Questions: stefan@invis-server.org

# License: GPLv3
# Dieses Programm ist freie Software. Sie können es unter den Bedingungen der 
# GNU General Public License, wie von der Free Software Foundation veröffentlicht,
# weitergeben und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder
# (nach Ihrer Option) jeder späteren Version.

# Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen
# von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite 
# Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. 
# Details finden Sie in der GNU General Public License.

# Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem 
# Programm erhalten haben. Falls nicht, siehe <http://www.gnu.org/licenses/>. 


#Konfigurationsdaten
conffile="/etc/invis/invis.conf"
passfile="/etc/invis/invis-pws.conf"

# Funktionen
# Werte aus Konfigurationsdatendatei extrahieren
# $1 = Konfigurationsdatei, $2 = Parameter, $3 Wert (Feld)
getconfdata() {
    cat $1 |grep "$2" | cut -d ":" -f $3
}

# Konfigurationsparameter tauschen
changevalues() {
    # Arg1 = Pfad, Arg2 = Datei, Arg3 = sed String
    cat $1/$2|sed "s%$3%g" > $1/$2.new
    mv $1/$2.new $1/$2
}

## Konfigurationen einlesen
# Virenscanner festlegen. Moeglich sind "antivir" und "clamscan"
scanner=`getconfdata $conffile "AV" "2"`

# Quarantaene-Verzeichnis
quarandir=`getconfdata $conffile "quarDir" "2"`

##  Verzeichnisse
# Scan-Verzeichnis
indir="/srv/uploads"
# Ablageverzeichnis
outdir="/srv/shares/portal/uploads"


#Alle Dateien im Verzeichnis scannen, infizierte Dateien werden zunächst nur markiert.
if [[ $scanner == "antivir" ]]; then
    #antivir --allfiles --scan-in-archive --quiet -ren $indir
    avscan --allfiles --scan-in-archive -q -r1 -lang=DE -s --moveto=$quarandir $indir
else
    for file in `clamscan --infected --no-summary $indir|cut -d ":" -f 1`; do
	mv $file $file.XXX
    done
fi

# Alle Dateien im indir verschieben

# zunächst die infizierten in die Quarantäne - Es wird im outdir jeweils eine Meldung erzeugt
for x in `find $indir -name *.XXX`; do
    infectedfile=`basename $x`    
    n1=`echo $infectedfile|wc -c`
    n2=$((n1-5))
    infectedfile=`echo $infectedfile|cut -c 1-$n2`
    echo "Die mit einem Virus infizierte Datei \"$infectedfile\" wurde in Quarantäne verschoben!" > $outdir/$infectedfile.txt 
    mv $x $quarandir
done

# jetzt die sauberen ins outdir
for x in $indir/*; do
    if [[ -f $x ]]; then
	mv $x $outdir
    fi
done

chown -R root."Domain Users" $outdir
chmod -R g+w $outdir
