#!/bin/bash

#
# Bu script clamav ile dosya taramak,
# taranan dosyalarda virslu olanlar karantinaya almak
# amac ile Timu EREN tarafndan Atlye Mavi Ltd.ti. iin
# yazlmtr. Lisans  GNU/GPL' dir.
#

LoadConfig(){
	if [ -e /etc/clamav/file-scan ]; then
	. /etc/clamav/file-scan
	else
		exit 1
	fi
}

FindDir(){
	if [ -e $basescanpath ] && [ -e $quarantine ]; then
		return 0
	else
		echo "";
		echo " $basescanpath  or $quarantine exits.. ";
		echo " Please check this directorys";
		echo "==============================";
		mailbody="Dosya Sistemi hatas...

		 $basescanpath yada    $quarantine yok.
Ltfen sistem genelinde bir hata olup olmadn kontrol edin.
/var/log/ altndaki dosyalar inceleyin.
Eer taranacak dizin ayr bir partitionda ise mount edilmi
durumda olup olmadn kontrol edin.

Yaplandrmanz kontrol edin...
Bu hata yksek derecede nem tayor olabilir.
Lften es gemeyin.

 ==================================
Bu e-posta sistem tarafndan otomatik gnderilmitir.
ltfen cevap yazmayn.
		 "
		if [ ${mailfrom} == ""  ]; then
			mailfrom="system@${HOSTNAME}"
		fi
		if [ $sysadminmail != "" ];then
			echo "$mailbody" |mail -s "Dosya Sistemi Hatas !!!" -a "From: ${mailfrom}" ${sysadminmail}
		else
		  	echo "$mailbody" |mail -s "Dosya Sistemi Hatas !!!" -a "From: ${mailfrom}" root
		fi
		exit 1
	fi
}

ListUsersDir(){
	Userdirs=`ls $basescanpath`
}

SendMail(){
	MoveFile
	if [ ${mailfrom} == ""  ]; then
		mailfrom="system@${HOSTNAME}"
	fi
	 if [ -f ${clamscanlogtempdir}file.log ];then
		logcontent=`cat ${clamscanlogtempdir}file.log`
	fi

mailbody="${File} dosyasnda bir virs bulundu.
Dosya dier sistemleri etkilememek iin tand.

Hostname: ${HOSTNAME}
Tanan Dizin: ${path}
Tanan Dosya: ${File}
Tanan Tarih: `date +%e\ %b\ %a\ %Y\ %H:%M\ %S`
Dosya Sahibi ${userdir}

 ${logcontent}
==================================
Bu e-posta sistem tarafndan otomatik gnderilmitir.
ltfen cevap yazmayn."

	if [ $newssysadmin == "yes" ]; then
		if [ ${sysadminemail} != "" ]; then
			echo "$mailbody" |mail -s "${sysadminmailsubject}" -a "From: ${mailfrom}"  ${sysadminemail}
		else
		  	echo "$mailbody" |mail -s "${sysadminmailsubject}" -a "From: ${mailfrom}" root
		fi
	fi
   	if [ $newsusermail == "yes" ]; then
		if [ -f ${basescanpath}${userdir}/$emailfile ]; then
          email=`cat ${basescanpath}${userdir}/${emailfile}`
		  echo "$mailbody" |mail -s "${sysadminmailsubject}"  "From: ${mailfrom}" ${email}
		fi
   fi
}

SendErrorMail(){
	if [ ${mailfrom} == ""  ]; then
		mailfrom="system@${HOSTNAME}"
	fi
	if [ -f ${clamscanlogtempdir}file.log ]; then
		logcontent=`cat ${clamscanlogtempdir}file.log`
	fi
mailbody="Dosya  sistemi anti virs yazlm tarafndan taranrken
beklenmedik bir hataya rastland.

Hostname: ${HOSTNAME}
Clamscantype: ${clamscantype}
Tarih: `date +%e\ %b\ %a\ %Y\ %H:%M\ %S`
Taranacak dosya: {$File}
Clamscanparams : ${clamscanparams}
Clamscanlogdir : ${clamscanlogtempdir}
Hata geri dn kodu : $hata
Log dosyas ierii:
$logcontent

Daha fazla bilgi iin ltfen /var/log/clamav/ altndaki loglar inceleyin...
==================================
Bu e-posta sistem tarafndan otomatik gnderilmitir.
ltfen cevap yazmayn."

		if [ ${sysadminemail} != "" ]; then
			echo "$mailbody" | mail -s "${sysadminmailsubject}" -a "From: $mailfrom " ${sysadminemail}
		else
			echo "$mailbody" | mail -s "${sysadminmailsubject}" -a "From: $mailfrom" root
		fi
		exit 1
}

MoveFile(){

	mkdir -p  ${querantinedir}${userdir}
	userfile=`basename $File`

	if [ -f ${querantinedir}${userdir}/${userfile} ]; then
	  	path=`mktemp -d -p  ${querantinedir}${userdir}/`
	else
		path="${querantinedir}${userdir}"
	fi
    	mv -f ${File} ${path}/
}

BeginScan(){
	LoadConfig
	ListUsersDir
	mail=`which mail`
	if [ ! -x $mail ]; then
		echo "mail command not found. Please check installtion"
		echo "======================================"
	fi
	clamscan=`which $clamscantype`

	if [ -x $clamscan ]; then
		echo "Begin Scan...";
		echo "===============================";
		if [ ! -d $clamscanlogtempdir ]; then
			mkdir  $clamscanlogtempdir
		fi
		for userdir  in $Userdirs;do
			Files=`find ${basescanpath}${userdir} -type f`
			for File in $Files;do
					$clamscan ${clamscanparams} --log=${clamscanlogtempdir}file.log $File > /dev/null
					case $? in
						0)
						rm  -f ${clamscanlogtempdir}file.log
						;;
						1)
                       SendMail
						;;
						*)
						SendErrorMail
						;;
					esac
			done;
	    done;
	else
		echo "clamav or clamdscan not installed please check installtion"
		echo "============================================"
      	exit 1
	fi
	rm -Rf $clamscanlogtempdir
	echo "End scanned Files";
	exit 0
}
BeginScan