Hi people, I have to ask a huge favour to help me resolve a very strange issue
that I have.
I know this is not specifically related to qmail-ldap, but I am hoping that
some people on the list can give me some help on some of the qmail-ldap
internals.
I use maildrop with a filter script executed by the deliveryProgramPath
attribute.
My filter script does this:
check that the user is not over quota
if not over quota, filter messages < 250k through spamc if over 250k, deliver
to inbox.
if spam, deliver into spam folder else deliver into inbox.
This all works except the over quota part. I use 'bouncesaying' to bounce the
messages that are overquota (determined by an external perl script that
returns 1/0 if over quota or not).
If the messages are less than 50k, they are bounced correctly with the error
configured by the bouncesaying argument . If they are over 50k, they are not
bounced, instead, the message is deferred and returned to the local queue.
My C is not that sharp that I understand what is happening within the
bouncesaying code, but for some reason, maildrop seems to think that
bouncesaying is failing and then returns an error code to qmail-local so that
the mail is deferred.
I have attached my filter script in it's entirety so that people can look have
a look to see if there is a better way of doing what I am trying to do. I
have also attached some logs to show that some messages are deferred, while
other messages (under 50k) are bounced.
I have santized some of the log files to cover up mail addresses etc...
Successful bounce:
@4000000044eebbb203cc9e3c delivery 1064860: failure:
_MAILDIRQUOTA:_165000000S,500002C/__QMAILDELIVERYPROGRAM:_maildrop_/var/qmail/mail/maildrop_SPAM_filter1/__QMAILMODE:_nolocal/__QMAILDOTMODE:_both/__executing_'qmail-local_--_USER_/var/qmail/mail/new/m/u/MAILDIR/_USER___USER_SENDER_./'_under_uid=120,_gid=120/_Sorry_USER_is_over_their_allocated_QuotaSize_or_QuotaCount/
Deferred Message:
@4000000044eebc0d3136ceec delivery 1064916: deferral:
_MAILDIRQUOTA:_165000000S,500002C/__QMAILDELIVERYPROGRAM:_maildrop_/var/qmail/mail/maildrop_SPAM_filter1/__QMAILMODE:_nolocal/__QMAILDOTMODE:_both/__executing_'qmail-local_--_USER_/var/qmail/mail/new/m/u/MAILDIR/_USER___USER_SENDER_./'_under_uid=120,_gid=120/_Sorry_USER_is_over_their_allocated_QuotaSize_or_QuotaCount/maildrop:_error_writing_to_mailbox./maildrop:_Unable_to_deliver_to_mailbox./
I would really appreciate any help that anyone has to offer, even if it is
just the understanding of the internals of bouncesaying
--
Regards,
Scott Ryan
Telkom Internet
# SPAM Maildrop Filter
# Scott Ryan Aug 2006
#####################
SHELL=/bin/sh
logfile "/var/log/maildrop.log"
log "==== BEGIN maildrop processing for $USER ==="
# Import mail quotas
import MAILDIRQUOTA
import USER
# Check Available Quota
QUOTACHECK=`checkquota1.pl $USER $SIZE 1`
#QUOTACHECK="1"
log "Quotacheck:$QUOTACHECK"
if ( $QUOTACHECK == 1 )
{
# Bounce Message User is Over Quota
log "$USER is over quota"
to "|/var/qmail/bin/bouncesaying 'Sorry $USER is over their allocated
QuotaSize or QuotaCount'"
}
else
{
# Check Mail Size - If > 250k - dont filter
if ( $SIZE > 262144 )
{
# Mail too big, deliver to inbox
exception {
to "|deliverquota -w 90 ./"
# xfilter "deliverquota -w 90 ./$SPAM_FOLDER"
}
log "ExitCode:$EXITCODE"
}
else
{
# Not Over Quota, Not too big, Check mail for Spam with
SPAMASSASSIN
xfilter "spamc -u $USER"
if (/^X-Spam-Flag: *YES/)
{
# Mail is determined as spam deliver to mailbox
# Check for SPAM Folder
`test -d "./.SPAM"`
if( $RETURNCODE == 0 )
{
# .SPAM Folder Exists
SPAM_FOLDER=".SPAM/"
}
# Deliver Mail
exception {
to "|deliverquota -w 90 ./$SPAM_FOLDER"
}
log "ExitCode:$EXITCODE"
}
else
{
# Not Spam, Not over Quota... Deliver Mail
exception {
#to "./"
#xfilter "deliverquota -w 90 ./$SPAM_FOLDER"
to "|deliverquota -w 90 ./"
}
log "ExitCode:$EXITCODE"
}
}
}