Skip to: Site menu | Main content

Maildrop não atualiza maildirsize após alteração em base virtual?

Para entender
Para solucionar

Para entender:

Problemas nas passagens de parâmetro do authlib para o maildrop ( quota e bla, bla, blá ) ?? Este problema torna-se típico quando há necessidade de alteração em serviço de delivery ( maildrop ) na utilização de anti-spam como o tmda e ou spam-assassin. Em meu caso , parâmetros do OpenLdap que seriam passados pelo authlib, tiveram de ser passados e muitas vezes resgatados (forçadamente) através do maildroprc, para que fosse possivel os testes de confirmação e armazenamento temporário de mensagens em um mailbox temporário, para entrega posterior à confirmação. Depois de algumas alterações no master.cf para passagem de parâmetros ao maildroprc , valores de quota passaram a não ser resgatados pelo maildrop. No processo de recompilação do maildrop (erronêamente achando que o problema fosse o maildirquota desabilitado). Com auxílio do Sam Varshavchik’s que fortaleceu alguns pontos e expurgou algumas lendas sobre o maildrop.

> A partir da versão 1.8 não é necessário parâmetro de configuração como –with-authlib , é nativo do maildrop o suporte ao authlib

> Passagem de parâmetros de arquivo para armazenar variáveis para contas virtuais com: –with-confdir=maildropldaprc , torna-se desnecessário se você já mapeia no postfix os atributos da base para as contas virtuais. Por exemplo: /etc/authlib/authldaprc já é presente no authlib .

> “group+world writable” no binário do maildrop é uma péssima idéia para pensar em ownar o Maildir dos usuários.

> Basear-se em um forma de configuração citada no NOTE do arquivo INSTALL é imprecíndivel e desnecessários agregar mais de uma em uma compilação:
NOTE:

When using the standalone maildrop build with courier-authlib, one
of the following configurations must be used:

* Your mail server must invoke maildrop as the root user (the -d
flag reads the mail account’s uid and gid, then drops root) .
* Manually change the permissions on the maildrop binary to be
setuid root.
* Manually change the permissions on the courier-authlib’s socket
directory (/usr/local/var/spool/authdaemon by default) to be
globally readable or executable.

> Certifique-se de ter um maildrop assim :

hrd:~ # maildrop -v
maildrop 2.0.4 Copyright 1998-2005 Double Precision, Inc.
GDBM extensions enabled.
Courier Authentication Library extension enabled.
Maildir quota extension enabled.
This program is distributed under the terms of the GNU General Public
License. See COPYING for additional information.

Fazendo assim, por exemplo: ./configure --sysconfdir=/etc --enable-sendmail=/usr/sbin/sendmail --enable-trusted-users=root maildrop vmail --enable-syslog=1 --enable-maildirquota --enable-maildrop-uid=100 --enable-maildrop-gid=8

> No master.cf , caso não seja passado apenas “-d {$recipient}” ao maildrop , trate de ler as variáveis passadas na ordenação do Shell.

Se for assim (não maildroprc, não forçar variáveis para tratamento no delivery e não customizar serviço de delivery ):
maildrop unix - n n - - pipe
flags=DRhu user=maildrop argv=/usr/local/bin/maildrop -d ${recipient}

Se for assim:
maildrop unix - n n - - pipe
flags=DRhu user=maildrop argv=/usr/local/bin/maildrop /etc/maildroprc -d
${user}@${nexthop} ${extension} ${recipient} ${user} ${nexthop} ${sender}

Ordem de passagem ao maildroprc: $1 = ${user}@${nexthop} $2 = ${extension} .........

Para Solucionar:

No master.cf:

maildrop unix – n n – – pipe
flags=DRhu user=maildrop argv=/usr/local/bin/maildrop /etc/maildroprc
-d ${user}@${nexthop} ${extension} ${recipient} ${user} ${nexthop} ${sender}

No script de consulta na base /usr/bin/quotz :

#!/bin/bash

LDAPHOST=”ldap.server.com.br”
LDAPBASE=”dc=mail,dc=server,dc=com,dc=br”
LDAPSEARCH=”dc=mail,dc=server,dc=com,dc=br”
LDAPBIND=”cn=admin,dc=mail,dc=server,dc=com,dc=br”
LDAPBINDPASS=’senhaaa’
LDAPSEARCHATTRIBUTE=quota

BUSCA=`ldapsearch -x -h $LDAPHOST -b $LDAPBASE “(&(mail=$1)(objectclass=CourierMailAccount))” -D $LDAPBIND -w $LDAPBINDPASS $LDAPSEARCHATTRIBUTE | grep quota: `

VALOR=`echo $BUSCA | cut -d ‘:’ -f 2`
echo $VALOR

No maildroprc:

##########MAILDROPRC#############

EXTENSION=”$3″
RECIPIENT=tolower(“$4″)
LOGNAME=tolower(“$5″)
USER=tolower(“$5″)
HOST=tolower(“$6″)
HOME=”/boxvirtual/$HOST/$USER”
SENDER=”$7″
DEFAULT=”/boxvirtual/$HOST/$USER”
DEST=”Maildir”

logfile “/tmp/maildrop.log”

# Importação de valores de quota do ldap e valores atuais do maildirsize

# Resgatar valor atual do maildirsize no momento da entrega da mensagem
QUOTASIZE=`/usr/bin/head -n1 $DEFAULT/Maildir/maildirsize`

# Consulta valor da quota para o usuário
QUOTALDAP=`/usr/bin/quotz $USER@$HOST`

if ( “$EXTENSION” ne “” )
{
DELIMITER=”+”
}
log “QUOTA ATUAL: $QUOTASIZE NOVA: $QUOTALDAP”

RECIPIENT=”$LOGNAME$DELIMITER$EXTENSION@$HOST”
log “Recip: $RECIPIENT”

if (!$SENDER)
{
SENDER = “<>”
}

`test -e $HOME`
if ( $RETURNCODE != 0 )
{
`mkdir -p $HOME`
`maildirmake $HOME/Maildir`
`maildirmake -q $QUOTALDAP /boxvirtual/$HOST/$USER/Maildir`
`chmod 0700 $HOME/Maildir`
}
log “home: $HOME”

# Se a quota se diferenciar entre valor na base e o valor no maildir parte para atualização

if ( $QUOTASIZE != $QUOTALDAP )
{
`maildirmake -q $QUOTALDAP /boxvirtual/$HOST/$USER/Maildir`
log “FOI”
}
if ( $SENDER eq “MAILER-DAEMON@server.com.br” )
{
to “/boxvirtual/$HOST/$USER/$DEST”;
}
else
{
if ( $RECIPIENT eq $SENDER )
{
if ( $QUOTASIZE != $QUOTALDAP )
{
`maildirmake -q $QUOTALDAP /boxvirtual/$HOST/$USER/Maildir`
}
to “/boxvirtual/$HOST/$USER/$DEST”;
}
else
{
`test -e /boxvirtual/$HOST/${USER}/.tmda_install`
if ( $RETURNCODE == 0 )
{
include “/boxvirtual/$HOST/${USER}/.tmda_install”
}
if ( $TMDA eq “Y” )
{
EXTENSION=”$3″
RECIPIENT=”$LOGNAME$DELIMITER$EXTENSION@$HOST”
SENDER=”$7″

to “| /usr/local/tmda/bin/tmda-filter”

}
else
{
to “/boxvirtual/$HOST/$USER/$DEST”;
}
}
}

# FIM MAILDROPRC

Espero ter ajudado. Grande abraço e até a próxima.

Leave a Reply