[Mimedefang] Bug at SA website: SA 3.3.1 - Is "local.cf" read in TWICE when loading configuration files?

Kevin A. McGrail KMcGrail at PCCC.com
Tue Aug 10 15:25:17 EDT 2010

> As noted, spam_assassin_check() is the ONLY call I make to SA, and only in filter_end().
> I've taken a look at the subroutines in mimedefang.pl, and I note that in spam_assassin_init() a reference to "config" which selects a configuration file.  Although I don't select one explicitly, the routine may suggest that it picks one to load -- one that may already be loaded by SA itself, so the "user_prefs" parameter may not be needed.
> I experimented with setting an empty configuration, spam_assassin_check(""), and that worked.  Apparently, leaving the default allowed mimedefang.pl to pick a file that SA was already loading.  ARGH!
> The lines 6749-6759 in spam_assassin_init(), where it picks a configuration file if none was passed, are the problem.  The choices in the "/etc/mail/spamassassin/" directory are ALREADY LOADED by SA.  Perhaps they should be deleted?
> I conclude that MD is at fault in causing a file to be loaded twice.
> I also have my fix:  Explicitly pass "" as the configuration parameter to spam_assassin_check(), such that "user_prefs" =>  "" to the ..._init() call.

Copying the same information I put on Bugzilla for SA:

Hmm.  I think you are on the right track that it's not SA but I also don't
think it is MD, per se.

I think the key point you have to realize is that SA isn't loading anything
prior. MD is instead calling SA through an API at least by default since I
actually use MD to interact with SA through spamd/spamc.

Anyway, it sounds like to me you've got multiple cf files that are being read
such as sa-mimedefang.cf in /etc/mail, local.cf in /etc/mail/spamassassin and
perhaps a user_prefs file somewhere perhaps under a local defang user.

I'd grep the following:

cd /etc/mail
grep report *.cf
cd /etc/mail/spamassassin
grep report *.cf

and check the home dir for whatever user is calling spamassassin.

Though to be more specific, I think you've got more than one cf file with
report variables specified in one of these directories.

Especially since SA will load EVERY config (.cf) file on purpose in

So if you have a report line in these cf files like
"/etc/mail/sa-mimedefang.cf"&  "/etc/mail/spamassassin.cf" as well as in
local.cf, you could end up with duplicates.

Since you can fix your issue by passing "" to MD's spam_assassin_init is a
"defined" config variable, you then activate this code which is why I state the
examples outside of /etc/mail/spamassassin above:

        if (!defined($config)) {
             if (-r "/etc/mail/sa-mimedefang.cf") {
                 $config = "/etc/mail/sa-mimedefang.cf";
             } elsif (-r "/etc/mail/spamassassin/sa-mimedefang.cf") {
                 $config = "/etc/mail/spamassassin/sa-mimedefang.cf";
             } elsif (-r "/etc/mail/spamassassin/local.cf") {
                 $config = "/etc/mail/spamassassin/local.cf";
             } else {
                 $config = "/etc/mail/spamassassin.cf";

More information about the MIMEDefang mailing list