File maildroprc of Package maildrop

SHELL="/bin/sh"
import EXT
import HOST
VPOPMAILHOME=`cat /etc/passwd |grep '^vpopmail:'| cut -d ':' -f 6`
VHOME=`$VPOPMAILHOME/bin/vuserinfo -d $EXT@$HOST`
TIMESTAMP=`date "+%b %d %H:%M:%S"`
#VERBOSE=9

#--------------------------------------------------------
#  maildroprc
#  
#  Path to this file should be /etc/maildroprc
#  chown vpopmail:vchkpw  chmod 755
#
#
#  This file was adapted from Matt Simerson's work
#  http://www.tnpi.biz/internet/mail/toaster/
#
#  Nick Hemmesch <nick@ndhsoft.com>
#  August 23, 2005
#
#  Added vpopmail-home detection
#  Johannes Weberhofer <opendevel@weberhofer.at>
#  April 26, 2011
#
#--------------------------------------------------------

logfile "/var/log/maildrop/maildrop.log"
log "$TIMESTAMP === INICIO maildrop processando mensagem para $EXT@$HOST ==="


#--------------------------------------------------------
# Include any rules set up for the user - this gives the 
# administrator a way to override the sitewide mailfilter file
#--------------------------------------------------------

`test -r $VHOME/.mailfilter`
if($RETURNCODE == 0)
{
    log "Incluindo $VHOME/.mailfilter"
    exception {
	include $VHOME/.mailfilter
    }
}


#--------------------------------------------------------
# Criar o arquivo maildirsize se ele ainda nao existir
#--------------------------------------------------------
###########################################################################
# More checking was added to this....
# I believe I could use lex/yacc to build a better and more forgiving parser
# than this one.
###########################################################################

# O arquivo maildirsize existe?
`test -e $VHOME/Maildir/maildirsize`

# Se o arquivo maildirsize nao existir...
if($RETURNCODE == 1)
{ 
    # O comando vuserinfo esta disponivel?
    `test -x /usr/bin/vuserinfo` 

    # Se o comando vuserinfo estiver disponivel...
    if($RETURNCODE == 0)
    { 
    	# O usuario existe?
    	`/usr/bin/vuserinfo $EXT@$HOST`
    	if($RETURNCODE == 0)
    	{
	    # Localizar qual a quota do usuario.
	    $QUOTA=`/usr/bin/vuserinfo -Q $EXT@$HOST`
	    log "QUOTA = $QUOTA"

	    # O comando maildirmake esta disponivel?
	    `test -x /usr/bin/maildirmake`
	    
	    # Se o comando maildirmake estiver disponivel...
	    if($RETURNCODE == 0)
	    {
		# O diretorio Maildir existe?
		`test -d $VHOME/Maildir`

		# Se o diretorio Maildir foi criado com sucesso...
		if($RETURNCODE == 0)
		{
		    # Criar o arquivo maildirsize.
		    `/usr/bin/maildirmake -q $QUOTA $VHOME/Maildir`
		    `test -s "$VHOME/Maildir/maildirsize"`

		    # Se o arquivo maildirsize foi criado com sucesso...
   		    if($RETURNCODE == 0)
		    {
     			`/bin/chown vpopmail:vchkpw $VHOME/Maildir/maildirsize`
			`/bin/chmod 640 $VHOME/Maildir/maildirsize`
   		    }
		    else
		    {
			log "Problema ao criar o arquivo 'maildirsize' para $VHOME. Quota para o usuário está definida?"
		    }
		    # Fim "Se o arquivo maildirsize foi criado com sucesso..."
		}
		else
		{
		    log "O diretorio Maildir nao existe para $VHOME."
		}
		# Fim "Se o diretorio Maildir foi criado com sucesso..."
	    }
	    else
	    {
	        log "O comando maildirmake nao esta disponivel."
	    }
	    # Fim "Se o comando maildirmake estiver disponivel..."
	}
	else
	{
	    log "O usuario $EXT@HOST nao existe."
	}
	# Fim "O usuario existe?"
    }
    else
    {
	log "O comando vuserinfo nao esta disponivel."
    }
    # Fim "Se o comando vuserinfo estiver disponivel..."
}
# Fim "Se o arquivo maildirsize nao existir..."

# Se o arquivo maildirsize existir...
`test -e $VHOME/Maildir/maildirsize`
if($RETURNCODE == 0)
{
    MAILDIRQUOTA=`/usr/bin/head -n1 $VHOME/Maildir/maildirsize`
    log "MAILDIRQUOTA = $MAILDIRQUOTA"
}


#--------------------------------------------------------
# Filter spam - scores >= SPAMLIMIT is not delivered
#
# If you DO NOT want to send mail that is over the spam limit
# to spamassassin autolearn, comment: 'cc "|sa-learn -spam"'
#--------------------------------------------------------

##########################################################################
# Below is where I found some of the main problem, i.e apparently the
# regex logic changed, do a diff against this one and the old one,
# the old one was delimited with the '!' (bang) and grouped as a whole.
# it failed the match always.  By using standard regex grouping, I was able
# to get the filter working. By grouping the score accordingly, it
# breaks it into a number and precision, e.g. MATCH1 and MATCH2
##########################################################################

if(/^X-Spam-Status: Yes, score=([0-9]+)\.([0-9]+)/:h)
{
    if($MATCH1 >= 5)
    {
	cc "|sa-learn --spam --dbpath $VHOME/.spamassassin/bayes"
    }

    # Se o usuario nao tiver uma pasta Spam...
    `test -d $VHOME/Maildir/.Spam`
    if($RETURNCODE == 1)
    {
	`test -x /usr/bin/maildirmake`
	if($RETURNCODE == 0)
	{
	    `/usr/bin/maildirmake -f Spam $VHOME/Maildir`
	    `test -x /usr/bin/subscribeIMAP.sh`
	    if($RETURNCODE == 0)
	    {
		`/usr/bin/subscribeIMAP.sh Spam $VHOME`
	    }
	}
    }

    # Se o comando deliverquota nao estiver disponivel...
    `test -x /usr/bin/deliverquota`
    if($RETURNCODE == 1)
    {
	exception {
	    to "$VHOME/Maildir/.Spam"
	}
    }
    else
    {
	cc "|/usr/bin/deliverquota -w 90 $VHOME/Maildir/.Spam"
	if($RETURNCODE == 0)
	{
	    log "=== FIM ===  $EXT@$HOST processado com successo! (quota)"
	    EXITCODE=0
	    exit
	}
	else
	{
	    if($RETURNCODE == 77)
	    {
		log "$TIMESTAMP - $EXT@$HOST  bounced (quota)."
		to "|/var/qmail/bin/bouncesaying '$EXT@$HOST excedeu a quota!'"
	    }
	    else
	    {
		log "$TIMESTAMP - $EXT@$HOST falhou (erro deliverquota desconhecido)!"
		to "$VHOME/Maildir/.Spam"
	    }
	}
    }
    # Fim "Se o comando deliverquota nao estiver disponivel..."
}

##########################################################################
# Same as above
##########################################################################
if(/^X-Spam-Status: No, score=([\-]*[0-9]+)\.([0-9]+) /:h)
{
    log "   A mensagem esta limpa ($MATCH1.$MATCH2)."
}


#--------------------------------------------------------
# Include any user rules 
#--------------------------------------------------------

`test -r $VHOME/Maildir/.mailfilter`
if($RETURNCODE == 0)
{
    log "   Incluindo $VHOME/Maildir/.mailfilter"
    exception {
	include $VHOME/Maildir/.mailfilter
    }
}


# Se o comando deliverquota nao estiver disponivel...
`test -x /usr/bin/deliverquota`
if ($RETURNCODE == 1)
{
    log "$TIMESTAMP - $EXT@$HOST ATENCAO: o comando deliverquota nao esta disponivel!"
    log "=== FIM ===  $EXT@$HOST processado com successo!"
    exception {
	to "$VHOME/Maildir"
    }
}
else
{
    exception {
	log "RETCODE = $RETURNCODE   Entregando para $VHOME/Maildir."
	xfilter "/usr/bin/deliverquota -w 90 $VHOME/Maildir"
    }
    #---------------------------------------------------------------------------
    # Verificar se a mensagem foi entregue
    # returncode 77 significa que foi excedida a quota do Maildir - bounce mail
    #---------------------------------------------------------------------------
    if($RETURNCODE == 77)
    {
	log "$TIMESTAMP - BOUNCED: bouncesaying '$EXT@$HOST excedeu a quota!'"
	log "$TIMESTAMP - $EXT@$HOST bounced."
	to "|/var/qmail/bin/bouncesaying '$EXT@$HOST excedeu a quota!'"
    }
    else
    {
	log "=== FIM ===  $EXT@$HOST  processado com successo! (quota)"
	EXITCODE=0
	exit
    }
}
# Fim "Se o comando deliverquota nao estiver disponivel..."

log "$TIMESTAMP - $EXT@$HOST - ATENCAO: Esta mensagem nunca deveria ser impressa!"
openSUSE Build Service is sponsored by