#!/bin/sh
#
# $Id: configure,v 1.2 2004/05/19 10:11:34 asv Exp $
#
# Configuration script for Dr.Web Postfix
#

(echo "12345\c" ; echo " ") > echotmp
if grep c echotmp > /dev/null 2>&1 ; then
	n='-n'
	c=''
else
	n=''
	c='\c'
fi
rm echotmp

case "`(uname -sr)2>/dev/null`" in
	"Linux"*)
        OS="Linux"
        DW_BIN_DIR="/opt/drweb"
        DW_ETC_DIR="/etc/drweb"
        PF_ETC_DIR="/etc/postfix"
        ;;
	"FreeBSD"*)
        OS="FreeBSD"
        DW_BIN_DIR="/usr/local/drweb"
        DW_ETC_DIR="/usr/local/etc/drweb"
        PF_ETC_DIR="/usr/local/etc/postfix"
        ;;
	"OpenBSD"*)
        OS="OpenBSD"
        DW_BIN_DIR="/usr/local/drweb"
        DW_ETC_DIR="/usr/local/etc/drweb"
        PF_ETC_DIR="/usr/local/etc/postfix"
        ;;
	"SunOS 5"*)
		OS="Solaris"
        DW_BIN_DIR="/opt/drweb"
        DW_ETC_DIR="/etc/drweb"
        PF_ETC_DIR="/etc/postfix"
        ;;
	*)
        echo "Unsupported platfrom."
        exit 1
		;;
esac
DW_HOSTNAME=`hostname`
if [ "x$DW_HOSTNAME" = "x" ]; then
    DW_HOSTNAME=localhost
fi
ADMIN_MAIL="postmaster@$DW_HOSTNAME"
FILTER_MAIL="DrWEB-Daemon@$DW_HOSTNAME"

if [ ! -f "$DW_BIN_DIR/drweb-postfix" ] ; then
    echo 
    echo	"Enter the Dr.WEB binary directory"
    echo $n " [default=$DW_BIN_DIR]:$c"
    read INPUT
    if [ ! -d $INPUT ] ; then
        echo "Incorrect directory name"
        exit 1
    fi
    DW_BIN_DIR=$INPUT
fi

if [ ! -f "$DW_ETC_DIR/drweb_postfix.conf" ] ; then
    echo 
    echo	"Enter the Dr.WEB directory with configuration files"
    echo $n " [default=$DW_ETC_DIR]:$c"
    read INPUT
    if [ ! -d $INPUT ] ; then
        echo "Incorrect directory name"
        exit 1
    fi
    DW_ETC_DIR=$INPUT
fi
DW_CONFIG="$DW_ETC_DIR/drweb_postfix.conf"

if [ ! -f "$PF_ETC_DIR/master.cf" ] ; then
    echo 
    echo	"Enter the Postfix directory with master.cf file"
    echo $n " [default=$PF_ETC_DIR]:$c"
    read INPUT
    if [ ! -d $INPUT ] ; then
        echo "Incorrect directory name"
        exit 1
    fi
    PF_ETC_DIR=$INPUT
fi
PF_CONFIG="$PF_ETC_DIR/master.cf"

INPUT=`cat $PF_CONFIG | grep content_filter`
if [ "x$INPUT" != "x" ] ; then
    echo
    echo "ERROR! Some filters was already installed."
    echo "Automatic installation is impossible."
    echo "Please read documentation and try manual setup."
    echo
    exit 1
fi

echo 
echo	"Enter administrative mail account where virus alerts would be sent"
echo $n " [default=$ADMIN_MAIL]:$c"
read INPUT
if [ "x$INPUT" != "x" ] ; then
    ADMIN_MAIL=$INPUT
fi

echo 
echo	"Enter administrative mail account that be used as sender of virus alerts"
echo $n " [default=$FILTER_MAIL]:$c"
read INPUT
if [ "x$INPUT" != "x" ] ; then
    FILTER_MAIL=$INPUT
fi

echo 
echo "----------------------"
echo "Configuration Summary:" 
echo "  OS = $OS"
echo "  DrWEB for Postfix binary = $DW_BIN_DIR/drweb-postfix"
echo "  DrWEB for Postfix config = $DW_CONFIG"
echo "  Postfix config = $PF_CONFIG"
echo "  Admin mail address = $ADMIN_MAIL"
echo "  Filter mail address = $FILTER_MAIL"
echo 
echo "Configuration is okey ? [y or n]"
echo $n " [default=y]:$c"
read INPUT
if [ "x$INPUT" != "x" -a "x$INPUT" != "xy" -a "x$INPUT" != "xY" ] ; then
    echo 
    echo "Installation is aborted !!!"
    echo
    exit 1
fi    

echo 
echo "Starting install DrWEB for Postfix."
echo
echo "1) Backup original Postfix configuration file"
echo $n "- copy $PF_CONFIG to $PF_CONFIG.drwebsave ... $c"
cp $PF_CONFIG $PF_CONFIG.drwebsave
if [ $? -ne 0 ] ; then
    echo "FAILED"
    echo 
    echo "Installation is aborted !!!"
    echo
    exit 1
fi
echo "OK"
sleep 1
echo
echo "2) Modify Postfix configuration file"
echo $n " - add filter definition ... $c"
echo "# Added by Dr.WEB for Postfix configure script" >> $PF_CONFIG
if [ $? -ne 0 ] ; then 
    echo "FAILED"    
    echo 
    echo "Installation is aborted !!!"
    echo
    exit 1
fi
echo "filter    unix  -   n   n   -   32   pipe" >> $PF_CONFIG
if [ $? -ne 0 ] ; then 
    echo "FAILED"    
    echo 
    echo "Installation is aborted !!!"
    echo
    exit 1
fi
echo "   flags=R user=drweb argv=$DW_BIN_DIR/drweb-postfix -s \${size} -f \${sender} -- \${recipient}" >> $PF_CONFIG
if [ $? -ne 0 ] ; then 
    echo "FAILED"    
    echo 
    echo "Installation is aborted !!!"
    echo
    exit 1
fi
echo "OK"
echo $n " - add filter option to smtpd definition ... $c"
sed -e "s&smtpd&smtpd -o content_filter=filter:dummy&g" $PF_CONFIG > $PF_CONFIG.tmp
if [ $? -ne 0 ] ; then 
    echo "FAILED"    
    echo 
    echo "Installation is aborted !!!"
    echo
    exit 1
fi
mv $PF_CONFIG.tmp $PF_CONFIG
if [ $? -ne 0 ] ; then 
    echo "FAILED"    
    echo 
    echo "Installation is aborted !!!"
    echo
    exit 1
fi
echo "OK"

sleep 1
echo
echo "3) Backup DrWEB for Postfix configuration file "
echo $n "- copy $DW_CONFIG to $DW_CONFIG.drwebsave ... $c"
cp $DW_CONFIG $DW_CONFIG.drwebsave
if [ $? -ne 0 ] ; then 
    echo "FAILED"    
    echo 
    echo "Installation is aborted !!!"
    echo
    exit 1
fi
echo "OK"

sleep 1
echo
echo "4) Modify DrWEB for Postfix configuration file"
echo $n " - rewrite mail addresses ... $c"
sed -e "s&AdminMail.*&AdminMail = $ADMIN_MAIL&"\
    -e "s&FilterMail.*&FilterMail = $FILTER_MAIL&"\
       $DW_CONFIG > $DW_CONFIG.tmp
if [ $? -ne 0 ] ; then 
    echo "FAILED"    
    echo 
    echo "Installation is aborted !!!"
    echo
    exit 1
fi
mv $DW_CONFIG.tmp $DW_CONFIG
if [ $? -ne 0 ] ; then 
    echo "FAILED"    
    echo 
    echo "Installation is aborted !!!"
    echo
    exit 1
fi
echo "OK"

echo 
echo "Now, DrWEB filter integrated with Postfix MTA."
echo "You also may need to configure $DW_CONFIG for your settings."
echo "After this you need to restart Postfix system."
echo 
echo "Press Enter..." 
read INPUT