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!"