Mark & list:
I'm always glad to hear of more LDAP-sourced functionality being added
to amavisd-new, the separate DKIM daemon sounds like a particularly
useful prize.
Attached is an updated version of a patch I mailed to the list in early
March, updated for 2.7.0-pre4. So far it's working fine on my low
volume test system.
The patch provides provides:
1. the ability to specify custom LDAP attributes for amavis maps at
the configuration file level, instead of having to hack amavisd.
Adds the use of HASH::Util to lock the ldap attribute hashes as a
means to detect faults.
2. exposure of $subject_tag_maps_by_ccat{+CC_VIRUS} as
virus_subject_tag2_maps, similar to what spam_subject_tag2_maps
does. LDAP attribute added to schema. I use this in policy banks
to provide a differing virus infect subject tags (legacy customer
1 wants X, legacy customer 2 wants Y,...). If the feature has
value to other users, it should probably be pushed into the new
%subject_tag_maps
More doco included in the patch, README.ldap reproduced here:
Using custom LDAP attributes
----------------------------
This readme uses the default amavis attribute names, from the default amavis
LDAP schema. In order to facilitate integrating amavis into
environments where
required policy information is already be stored in a directory, but under
different attribute names, a facility is provided to specify a custom
attribute
name for a given amavis map.
The attributes used for a given map lookup are overriden by setting the
%ldap_attr (single-valued attributes) and %ldap_attr_mv (multi-valued
attributes) hashes in the configuration file.
Again take note that it is not the default attribute name that is specified,
but the amavis map name. (below: spam_tag2_level_maps, not
amavisSpamTag2Level)
examples:
single-valued example, specify in configuration file after enabling ldap.
use "spamThreshold" attribute instead of default "amavisSpamTag2Level":
$ldap_attr_maps{spam_tag2_level_maps} = "spamThreshold";
multi-valued example,
use "senderWhitelist" attribute instead of default "amavisWhitelistSender":
$ldap_attr_maps_mv{whitelist_sender_maps} = "senderWhitelist";
Amavis maps, LDAP attribute field type, default LDAP attribute name
-------------------------------------------------------------------
A helper table of all amavis maps that can be looked up per-use in LDAP,
the attribute field type for these maps, and the default LDAP attribute name
used in the lookup.
attribute field types, from amavis source:
B=boolean, N=numeric, S=string, L=list
B-, N-, S-, L- returns undef if field does not exist
B0: boolean, nonexistent field treated as false,
B1: boolean, nonexistent field treated as true
amavis map, single value default LDAP attribute field type
--------------------------------- ------------------------------- ----------
addr_extension_bad_header_maps amavisAddrExtensionBadHeader S-
addr_extension_banned_maps amavisAddrExtensionBanned S-
addr_extension_spam_maps amavisAddrExtensionSpam S-
addr_extension_virus_maps amavisAddrExtensionVirus S-
archive_quarantine_to_maps amavisArchiveQuarantineTo S-
bad_header_admin_maps amavisBadHeaderAdmin S-
bad_header_lovers_maps amavisBadHeaderLover B-
bad_header_quarantine_to_maps amavisBadHeaderQuarantineTo S-
banned_admin_maps amavisBannedAdmin S-
banned_filename_maps amavisBannedRuleNames S-
banned_files_lovers_maps amavisBannedFilesLover B-
banned_quarantine_to_maps amavisBannedQuarantineTo S-
bypass_banned_checks_maps amavisBypassBannedChecks B-
bypass_header_checks_maps amavisBypassHeaderChecks B-
bypass_spam_checks_maps amavisBypassSpamChecks B-
bypass_virus_checks_maps amavisBypassVirusChecks B-
clean_quarantine_to_maps amavisCleanQuarantineTo S-
disclaimer_options_bysender_maps amavisDisclaimerOptions S-
local_domains_maps amavisLocal B1
message_size_limit_maps amavisMessageSizeLimit N-
newvirus_admin_maps amavisNewVirusAdmin S-
spam_admin_maps amavisSpamAdmin S-
spam_dsn_cutoff_level_maps amavisSpamDsnCutoffLevel N-
spam_kill_level_maps amavisSpamKillLevel N-
spam_lovers_maps amavisSpamLover B-
spam_modifies_subj_maps amavisSpamModifiesSubj B-
spam_quarantine_cutoff_level_maps amavisSpamQuarantineCutoffLevel N-
spam_quarantine_to_maps amavisSpamQuarantineTo S-
spam_subject_tag2_maps amavisSpamSubjectTag2 S-
spam_subject_tag_maps amavisSpamSubjectTag S-
spam_tag2_level_maps amavisSpamTag2Level N-
spam_tag_level_maps amavisSpamTagLevel N-
virus_admin_maps amavisVirusAdmin S-
virus_lovers_maps amavisVirusLover B-
virus_quarantine_to_maps amavisVirusQuarantineTo S-
virus_subject_tag2_maps amavisVirusSubjectTag2 S-
warnbadhrecip_maps amavisWarnBadHeaderRecip B-
warnbannedrecip_maps amavisWarnBannedRecip B-
warnvirusrecip_maps amavisWarnVirusRecip B-
amavis map, multiple values default LDAP attribute field type
--------------------------------- ------------------------------- ----------
blacklist_sender_maps amavisBlacklistSender L-
whitelist_sender_maps amavisWhitelistSender L-
Cheers,
-Martin Foster
Le 25/04/2010 12:24, Mark Martinec a écrit :
A pre-release of amavisd-new-2.7.0 is available at:
http://www.ijs.si/software/amavisd/amavisd-new-2.7.0-pre4.tar.gz
with its release notes at:
http://www.ijs.si/software/amavisd/release-notes.txt
There are some incompatibilities with older versions, so please
review at least the compatibility section of the release notes.
One noteworthy incompatibility is a need to add two more fields
to an SQL table msgrcpt when using SQL for logging/pen-pals.
The main goal of 2.7.0 is to better support pre-queue content
filtering setups like a Postfix proxy mode.
The -pre4 is still missing one or two features, which is why it
isn't called a release candidate yet. Other than that, it should be
stable and ready for use - with some caution. It is being used in
production at a couple of sites.
One noteworthy missing feature is the DKIM signing service, which is
a separate daemon process which is intended to provide the only access
to DKIM signing keys, avoiding the need to have these files readable
to UID under which amavisd is running.
Testing and feedback is welcome (but it may take some time for me
to reply:)
Mark
------------------------------------------------------------------------------
_______________________________________________
AMaViS-user mailing list
AMaViS-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amavis-user
AMaViS-FAQ:http://www.amavis.org/amavis-faq.php3
AMaViS-HowTos:http://www.amavis.org/howto/
diff -urN amavisd-new-2.7.0-pre4.ORIG/README_FILES/README.ldap
amavisd-new-2.7.0-pre4/README_FILES/README.ldap
--- amavisd-new-2.7.0-pre4.ORIG/README_FILES/README.ldap 2010-02-05
04:28:53.000000000 +1100
+++ amavisd-new-2.7.0-pre4/README_FILES/README.ldap 2010-04-27
16:41:32.000000000 +1000
@@ -159,3 +159,93 @@
In general LDAP lookups are similar to SQL lookups except for the low level
LDAP/SQL specific code. The overall functionality, lookup rules, etc. are
identical.
+
+Using custom LDAP attributes
+----------------------------
+
+This readme uses the default amavis attribute names, from the default amavis
+LDAP schema. In order to facilitate integrating amavis into environments where
+required policy information is already be stored in a directory, but under
+different attribute names, a facility is provided to specify a custom attribute
+name for a given amavis map.
+
+The attributes used for a given map lookup are overriden by setting the
+%ldap_attr (single-valued attributes) and %ldap_attr_mv (multi-valued
+attributes) hashes in the configuration file.
+
+Again take note that it is not the default attribute name that is specified,
+but the amavis map name. (below: spam_tag2_level_maps, not amavisSpamTag2Level)
+
+examples:
+
+single-valued example, specify in configuration file after enabling ldap.
+use "spamThreshold" attribute instead of default "amavisSpamTag2Level":
+
+ $ldap_attr_maps{spam_tag2_level_maps} = "spamThreshold";
+
+multi-valued example,
+use "senderWhitelist" attribute instead of default "amavisWhitelistSender":
+
+ $ldap_attr_maps_mv{whitelist_sender_maps} = "senderWhitelist";
+
+Amavis maps, LDAP attribute field type, default LDAP attribute name
+-------------------------------------------------------------------
+
+A helper table of all amavis maps that can be looked up per-use in LDAP,
+the attribute field type for these maps, and the default LDAP attribute name
+used in the lookup.
+
+attribute field types, from amavis source:
+
+B=boolean, N=numeric, S=string, L=list
+B-, N-, S-, L- returns undef if field does not exist
+B0: boolean, nonexistent field treated as false,
+B1: boolean, nonexistent field treated as true
+
+amavis map, single value default LDAP attribute field type
+--------------------------------- ------------------------------- ----------
+addr_extension_bad_header_maps amavisAddrExtensionBadHeader S-
+addr_extension_banned_maps amavisAddrExtensionBanned S-
+addr_extension_spam_maps amavisAddrExtensionSpam S-
+addr_extension_virus_maps amavisAddrExtensionVirus S-
+archive_quarantine_to_maps amavisArchiveQuarantineTo S-
+bad_header_admin_maps amavisBadHeaderAdmin S-
+bad_header_lovers_maps amavisBadHeaderLover B-
+bad_header_quarantine_to_maps amavisBadHeaderQuarantineTo S-
+banned_admin_maps amavisBannedAdmin S-
+banned_filename_maps amavisBannedRuleNames S-
+banned_files_lovers_maps amavisBannedFilesLover B-
+banned_quarantine_to_maps amavisBannedQuarantineTo S-
+bypass_banned_checks_maps amavisBypassBannedChecks B-
+bypass_header_checks_maps amavisBypassHeaderChecks B-
+bypass_spam_checks_maps amavisBypassSpamChecks B-
+bypass_virus_checks_maps amavisBypassVirusChecks B-
+clean_quarantine_to_maps amavisCleanQuarantineTo S-
+disclaimer_options_bysender_maps amavisDisclaimerOptions S-
+local_domains_maps amavisLocal B1
+message_size_limit_maps amavisMessageSizeLimit N-
+newvirus_admin_maps amavisNewVirusAdmin S-
+spam_admin_maps amavisSpamAdmin S-
+spam_dsn_cutoff_level_maps amavisSpamDsnCutoffLevel N-
+spam_kill_level_maps amavisSpamKillLevel N-
+spam_lovers_maps amavisSpamLover B-
+spam_modifies_subj_maps amavisSpamModifiesSubj B-
+spam_quarantine_cutoff_level_maps amavisSpamQuarantineCutoffLevel N-
+spam_quarantine_to_maps amavisSpamQuarantineTo S-
+spam_subject_tag2_maps amavisSpamSubjectTag2 S-
+spam_subject_tag_maps amavisSpamSubjectTag S-
+spam_tag2_level_maps amavisSpamTag2Level N-
+spam_tag_level_maps amavisSpamTagLevel N-
+virus_admin_maps amavisVirusAdmin S-
+virus_lovers_maps amavisVirusLover B-
+virus_quarantine_to_maps amavisVirusQuarantineTo S-
+virus_subject_tag2_maps amavisVirusSubjectTag2 S-
+warnbadhrecip_maps amavisWarnBadHeaderRecip B-
+warnbannedrecip_maps amavisWarnBannedRecip B-
+warnvirusrecip_maps amavisWarnVirusRecip B-
+
+amavis map, multiple values default LDAP attribute field type
+--------------------------------- ------------------------------- ----------
+blacklist_sender_maps amavisBlacklistSender L-
+whitelist_sender_maps amavisWhitelistSender L-
+
diff -urN amavisd-new-2.7.0-pre4.ORIG/RELEASE_NOTES
amavisd-new-2.7.0-pre4/RELEASE_NOTES
--- amavisd-new-2.7.0-pre4.ORIG/RELEASE_NOTES 2010-04-25 11:51:22.000000000
+1000
+++ amavisd-new-2.7.0-pre4/RELEASE_NOTES 2010-04-27 16:35:24.000000000
+1000
@@ -401,6 +401,15 @@
suggested by Quanah Gibson-Mount;
(TODO: update LDAP schema)
+- LDAP attributes can be overriden from the default amavis schema. Avoids
+ having to make major changes to an existing LDAP directory if different
+ attribute names already contain required policy information.
+ See README.ldap for usage details.
+
+- new map for specifying a subject tag on virus infected messages
+ virus_subject_tag2_maps. amavisVirusSubjectTag2 attribute added to
+ LDAP schema. Equivalent to: $subject_tag_maps_by_ccat{+CC_VIRUS}
+
- added a variable $myprogram_name, which defaults to a program name
(perl variable $0), but may be modified in a configuration file typically
depending on a value of $instance_name. It is used to dynamically change
@@ -10888,6 +10897,9 @@
| query_filter => '(&(objectClass=amavisAccount)(mail=%m))'
| };
+ WARNING: the information below relating to overriding LDAP attributes
+ is no longer valid, see README.ldap for the new form.
+
And then the lookups themselves:
| $virus_lovers_ldap = {res_attr => 'amavisVirusLover'};
diff -urN amavisd-new-2.7.0-pre4.ORIG/amavisd amavisd-new-2.7.0-pre4/amavisd
--- amavisd-new-2.7.0-pre4.ORIG/amavisd 2010-04-25 11:15:15.000000000 +1000
+++ amavisd-new-2.7.0-pre4/amavisd 2010-04-27 16:51:36.000000000 +1000
@@ -223,6 +223,7 @@
IO::Handle IO::File IO::Socket IO::Socket::UNIX IO::Socket::INET
IO::Stringy Digest::MD5 Unix::Syslog File::Basename
Compress::Zlib MIME::Base64 MIME::QuotedPrint MIME::Words
+ Hash::Util
MIME::Head MIME::Body MIME::Entity MIME::Parser MIME::Decoder
MIME::Decoder::Base64 MIME::Decoder::Binary MIME::Decoder::QuotedPrint
MIME::Decoder::NBit MIME::Decoder::UU MIME::Decoder::Gzip64
@@ -337,6 +338,7 @@
@bypass_virus_checks_maps @bypass_spam_checks_maps
@bypass_banned_checks_maps @bypass_header_checks_maps
@viruses_that_fake_sender_maps @virus_name_to_spam_score_maps
+ @virus_subject_tag2_maps
@remove_existing_spam_headers_maps
%final_destiny_by_ccat %lovers_maps_by_ccat
@@ -384,6 +386,7 @@
$spam_check_negative_ttl $spam_check_positive_ttl
$trim_trailing_space_in_lookup_result_fields
$enable_ldap $default_ldap
+ %ldap_attr_maps %ldap_attr_maps_mv
@keep_decoded_original_maps @map_full_type_to_short_type_maps
%banned_rules $penpals_threshold_low $penpals_threshold_high
$enable_dkim_verification $enable_dkim_signing
@@ -1530,6 +1533,7 @@
@addr_extension_bad_header_maps = (\$addr_extension_bad_header);
@debug_sender_maps = (\...@debug_sender_acl);
@remove_existing_spam_headers_maps = (\$remove_existing_spam_headers);
+ @virus_subject_tag2_maps = ( '***INFECTED*** ' ); # backwards compatibility
with %subject_tag_maps_by_ccat -> CC_VIRUS
# new variables, no backwards compatibility needed, empty by default
# @score_sender_maps, @author_to_policy_bank_maps, @signer_reputation_maps,
@@ -1592,7 +1596,7 @@
CC_BADH, sub { c('defang_bad_header') },
);
%subject_tag_maps_by_ccat = (
- CC_VIRUS, [ '***INFECTED*** ' ],
+ CC_VIRUS, sub { ca('virus_subject_tag2_maps') },
CC_BANNED, undef,
CC_UNCHECKED, sub { [ c('undecipherable_subject_tag') ] }, # not by-recip
CC_SPAM, undef,
@@ -1697,6 +1701,57 @@
);
%addr_rewrite_maps_by_ccat = ( );
+ # LDAP attribute default values for maps
+ %ldap_attr_maps = (
+ addr_extension_bad_header_maps =>
'amavisAddrExtensionBadHeader',
+ addr_extension_banned_maps => 'amavisAddrExtensionBanned',
+ addr_extension_spam_maps => 'amavisAddrExtensionSpam',
+ addr_extension_virus_maps => 'amavisAddrExtensionVirus',
+ archive_quarantine_to_maps => 'amavisArchiveQuarantineTo',
+ bad_header_admin_maps => 'amavisBadHeaderAdmin',
+ bad_header_lovers_maps => 'amavisBadHeaderLover',
+ bad_header_quarantine_to_maps => 'amavisBadHeaderQuarantineTo',
+ banned_admin_maps => 'amavisBannedAdmin',
+ banned_filename_maps => 'amavisBannedRuleNames',
+ banned_files_lovers_maps => 'amavisBannedFilesLover',
+ banned_quarantine_to_maps => 'amavisBannedQuarantineTo',
+ bypass_banned_checks_maps => 'amavisBypassBannedChecks',
+ bypass_header_checks_maps => 'amavisBypassHeaderChecks',
+ bypass_spam_checks_maps => 'amavisBypassSpamChecks',
+ bypass_virus_checks_maps => 'amavisBypassVirusChecks',
+ clean_quarantine_to_maps => 'amavisCleanQuarantineTo',
+ disclaimer_options_bysender_maps => 'amavisDisclaimerOptions',
+ local_domains_maps => 'amavisLocal',
+ message_size_limit_maps => 'amavisMessageSizeLimit',
+ newvirus_admin_maps => 'amavisNewVirusAdmin',
+ spam_admin_maps => 'amavisSpamAdmin',
+ spam_dsn_cutoff_level_maps => 'amavisSpamDsnCutoffLevel',
+ spam_kill_level_maps => 'amavisSpamKillLevel',
+ spam_lovers_maps => 'amavisSpamLover',
+ spam_modifies_subj_maps => 'amavisSpamModifiesSubj',
+ spam_quarantine_cutoff_level_maps =>
'amavisSpamQuarantineCutoffLevel',
+ spam_quarantine_to_maps => 'amavisSpamQuarantineTo',
+ spam_subject_tag2_maps => 'amavisSpamSubjectTag2',
+ spam_subject_tag_maps => 'amavisSpamSubjectTag',
+ spam_tag2_level_maps => 'amavisSpamTag2Level',
+ spam_tag_level_maps => 'amavisSpamTagLevel',
+ unchecked_quarantine_to_maps => 'amavisUncheckedQuarantineTo',
+ virus_admin_maps => 'amavisVirusAdmin',
+ virus_lovers_maps => 'amavisVirusLover',
+ virus_subject_tag2_maps => 'amavisVirusSubjectTag2',
+ virus_quarantine_to_maps => 'amavisVirusQuarantineTo',
+ warnbadhrecip_maps => 'amavisWarnBadHeaderRecip',
+ warnbannedrecip_maps => 'amavisWarnBannedRecip',
+ warnvirusrecip_maps => 'amavisWarnVirusRecip',
+ );
+ %ldap_attr_maps_mv = (
+ blacklist_sender_maps => 'amavisBlacklistSender',
+ whitelist_sender_maps => 'amavisWhitelistSender',
+ );
+ # Lock the keys to reduce the chance of a configuration file override error
+ Hash::Util::lock_keys(%ldap_attr_maps);
+ Hash::Util::lock_keys(%ldap_attr_maps_mv);
+
} # end BEGIN - init_tertiary
@@ -1826,6 +1880,7 @@
@addr_extension_virus_maps @addr_extension_spam_maps
@addr_extension_banned_maps @addr_extension_bad_header_maps
@spam_notifyadmin_cutoff_level_maps
+ @virus_subject_tag2_maps
))
{
my($g) = $varname; $g =~ s...@}{amavis::Conf::}; # qualified variable name
@@ -10370,55 +10425,46 @@
# B1: boolean, nonexistent field treated as true
my $lf = sub{Amavis::Lookup::LDAPattr->new($ldap_lookups,@_)};
- unshift(@Amavis::Conf::local_domains_maps, $lf->('amavisLocal',
'B1'));
-
- unshift(@Amavis::Conf::virus_lovers_maps,
$lf->('amavisVirusLover', 'B-'));
- unshift(@Amavis::Conf::spam_lovers_maps,
$lf->('amavisSpamLover', 'B-'));
- unshift(@Amavis::Conf::banned_files_lovers_maps,
$lf->('amavisBannedFilesLover', 'B-'));
- unshift(@Amavis::Conf::bad_header_lovers_maps,
$lf->('amavisBadHeaderLover', 'B-'));
-
- unshift(@Amavis::Conf::bypass_virus_checks_maps,
$lf->('amavisBypassVirusChecks', 'B-'));
- unshift(@Amavis::Conf::bypass_spam_checks_maps,
$lf->('amavisBypassSpamChecks', 'B-'));
-
unshift(@Amavis::Conf::bypass_banned_checks_maps,$lf->('amavisBypassBannedChecks',
'B-'));
-
unshift(@Amavis::Conf::bypass_header_checks_maps,$lf->('amavisBypassHeaderChecks',
'B-'));
-
- unshift(@Amavis::Conf::spam_tag_level_maps,
$lf->('amavisSpamTagLevel', 'N-'));
- unshift(@Amavis::Conf::spam_tag2_level_maps,
$lf->('amavisSpamTag2Level', 'N-'));
- unshift(@Amavis::Conf::spam_kill_level_maps,
$lf->('amavisSpamKillLevel', 'N-'));
-
unshift(@Amavis::Conf::spam_dsn_cutoff_level_maps,$lf->('amavisSpamDsnCutoffLevel','N-'));
-
unshift(@Amavis::Conf::spam_quarantine_cutoff_level_maps,$lf->('amavisSpamQuarantineCutoffLevel','N-'));
-
- unshift(@Amavis::Conf::spam_modifies_subj_maps,
$lf->('amavisSpamModifiesSubj', 'B-'));
- unshift(@Amavis::Conf::spam_subject_tag_maps,
$lf->('amavisSpamSubjectTag', 'S-'));
- unshift(@Amavis::Conf::spam_subject_tag2_maps,
$lf->('amavisSpamSubjectTag2', 'S-'));
-
- unshift(@Amavis::Conf::virus_quarantine_to_maps,
$lf->('amavisVirusQuarantineTo', 'S-'));
- unshift(@Amavis::Conf::spam_quarantine_to_maps,
$lf->('amavisSpamQuarantineTo', 'S-'));
- unshift(@Amavis::Conf::banned_quarantine_to_maps,
$lf->('amavisBannedQuarantineTo','S-'));
- unshift(@Amavis::Conf::unchecked_quarantine_to_maps,
$lf->('amavisUncheckedQuarantineTo','S-'));
- unshift(@Amavis::Conf::bad_header_quarantine_to_maps,
$lf->('amavisBadHeaderQuarantineTo', 'S-'));
- unshift(@Amavis::Conf::clean_quarantine_to_maps,
$lf->('amavisCleanQuarantineTo', 'S-'));
- unshift(@Amavis::Conf::archive_quarantine_to_maps,
$lf->('amavisArchiveQuarantineTo', 'S-'));
- unshift(@Amavis::Conf::message_size_limit_maps,
$lf->('amavisMessageSizeLimit', 'N-'));
-
- unshift(@Amavis::Conf::addr_extension_virus_maps,
$lf->('amavisAddrExtensionVirus', 'S-'));
- unshift(@Amavis::Conf::addr_extension_spam_maps,
$lf->('amavisAddrExtensionSpam', 'S-'));
- unshift(@Amavis::Conf::addr_extension_banned_maps,
$lf->('amavisAddrExtensionBanned','S-'));
- unshift(@Amavis::Conf::addr_extension_bad_header_maps,
$lf->('amavisAddrExtensionBadHeader','S-'));
-
- unshift(@Amavis::Conf::warnvirusrecip_maps,
$lf->('amavisWarnVirusRecip', 'B-'));
- unshift(@Amavis::Conf::warnbannedrecip_maps,
$lf->('amavisWarnBannedRecip', 'B-'));
- unshift(@Amavis::Conf::warnbadhrecip_maps,
$lf->('amavisWarnBadHeaderRecip', 'B-'));
-
- unshift(@Amavis::Conf::newvirus_admin_maps,
$lf->('amavisNewVirusAdmin', 'S-'));
- unshift(@Amavis::Conf::virus_admin_maps,
$lf->('amavisVirusAdmin', 'S-'));
- unshift(@Amavis::Conf::spam_admin_maps,
$lf->('amavisSpamAdmin', 'S-'));
- unshift(@Amavis::Conf::banned_admin_maps,
$lf->('amavisBannedAdmin', 'S-'));
- unshift(@Amavis::Conf::bad_header_admin_maps,
$lf->('amavisBadHeaderAdmin', 'S-'));
-
- unshift(@Amavis::Conf::banned_filename_maps,
$lf->('amavisBannedRuleNames', 'S-'));
- unshift(@Amavis::Conf::disclaimer_options_bysender_maps,
-
$lf->('amavisDisclaimerOptions', 'S-'));
+ unshift(@Amavis::Conf::addr_extension_bad_header_maps,
$lf->($Amavis::Conf::ldap_attr_maps{addr_extension_bad_header_maps}, 'S-'));
+ unshift(@Amavis::Conf::addr_extension_banned_maps,
$lf->($Amavis::Conf::ldap_attr_maps{addr_extension_banned_maps}, 'S-'));
+ unshift(@Amavis::Conf::addr_extension_spam_maps,
$lf->($Amavis::Conf::ldap_attr_maps{addr_extension_spam_maps}, 'S-'));
+ unshift(@Amavis::Conf::addr_extension_virus_maps,
$lf->($Amavis::Conf::ldap_attr_maps{addr_extension_virus_maps}, 'S-'));
+ unshift(@Amavis::Conf::archive_quarantine_to_maps,
$lf->($Amavis::Conf::ldap_attr_maps{archive_quarantine_to_maps}, 'S-'));
+ unshift(@Amavis::Conf::bad_header_admin_maps,
$lf->($Amavis::Conf::ldap_attr_maps{bad_header_admin_maps}, 'S-'));
+ unshift(@Amavis::Conf::bad_header_lovers_maps,
$lf->($Amavis::Conf::ldap_attr_maps{bad_header_lovers_maps}, 'B-'));
+ unshift(@Amavis::Conf::bad_header_quarantine_to_maps,
$lf->($Amavis::Conf::ldap_attr_maps{bad_header_quarantine_to_maps}, 'S-'));
+ unshift(@Amavis::Conf::banned_admin_maps,
$lf->($Amavis::Conf::ldap_attr_maps{banned_admin_maps}, 'S-'));
+ unshift(@Amavis::Conf::banned_filename_maps,
$lf->($Amavis::Conf::ldap_attr_maps{banned_filename_maps}, 'S-'));
+ unshift(@Amavis::Conf::banned_files_lovers_maps,
$lf->($Amavis::Conf::ldap_attr_maps{banned_files_lovers_maps}, 'B-'));
+ unshift(@Amavis::Conf::banned_quarantine_to_maps,
$lf->($Amavis::Conf::ldap_attr_maps{banned_quarantine_to_maps}, 'S-'));
+ unshift(@Amavis::Conf::bypass_banned_checks_maps,
$lf->($Amavis::Conf::ldap_attr_maps{bypass_banned_checks_maps}, 'B-'));
+ unshift(@Amavis::Conf::bypass_header_checks_maps,
$lf->($Amavis::Conf::ldap_attr_maps{bypass_header_checks_maps}, 'B-'));
+ unshift(@Amavis::Conf::bypass_spam_checks_maps,
$lf->($Amavis::Conf::ldap_attr_maps{bypass_spam_checks_maps}, 'B-'));
+ unshift(@Amavis::Conf::bypass_virus_checks_maps,
$lf->($Amavis::Conf::ldap_attr_maps{bypass_virus_checks_maps}, 'B-'));
+ unshift(@Amavis::Conf::clean_quarantine_to_maps,
$lf->($Amavis::Conf::ldap_attr_maps{clean_quarantine_to_maps}, 'S-'));
+ unshift(@Amavis::Conf::disclaimer_options_bysender_maps,
$lf->($Amavis::Conf::ldap_attr_maps{disclaimer_options_bysender_maps}, 'S-'));
+ unshift(@Amavis::Conf::local_domains_maps,
$lf->($Amavis::Conf::ldap_attr_maps{local_domains_maps}, 'B1'));
+ unshift(@Amavis::Conf::message_size_limit_maps,
$lf->($Amavis::Conf::ldap_attr_maps{message_size_limit_maps}, 'N-'));
+ unshift(@Amavis::Conf::newvirus_admin_maps,
$lf->($Amavis::Conf::ldap_attr_maps{newvirus_admin_maps}, 'S-'));
+ unshift(@Amavis::Conf::spam_admin_maps,
$lf->($Amavis::Conf::ldap_attr_maps{spam_admin_maps}, 'S-'));
+ unshift(@Amavis::Conf::spam_dsn_cutoff_level_maps,
$lf->($Amavis::Conf::ldap_attr_maps{spam_dsn_cutoff_level_maps}, 'N-'));
+ unshift(@Amavis::Conf::spam_kill_level_maps,
$lf->($Amavis::Conf::ldap_attr_maps{spam_kill_level_maps}, 'N-'));
+ unshift(@Amavis::Conf::spam_lovers_maps,
$lf->($Amavis::Conf::ldap_attr_maps{spam_lovers_maps}, 'B-'));
+ unshift(@Amavis::Conf::spam_modifies_subj_maps,
$lf->($Amavis::Conf::ldap_attr_maps{spam_modifies_subj_maps}, 'B-'));
+ unshift(@Amavis::Conf::spam_quarantine_cutoff_level_maps,
$lf->($Amavis::Conf::ldap_attr_maps{spam_quarantine_cutoff_level_maps}, 'N-'));
+ unshift(@Amavis::Conf::spam_quarantine_to_maps,
$lf->($Amavis::Conf::ldap_attr_maps{spam_quarantine_to_maps}, 'S-'));
+ unshift(@Amavis::Conf::spam_subject_tag2_maps,
$lf->($Amavis::Conf::ldap_attr_maps{spam_subject_tag2_maps}, 'S-'));
+ unshift(@Amavis::Conf::spam_subject_tag_maps,
$lf->($Amavis::Conf::ldap_attr_maps{spam_subject_tag_maps}, 'S-'));
+ unshift(@Amavis::Conf::spam_tag2_level_maps,
$lf->($Amavis::Conf::ldap_attr_maps{spam_tag2_level_maps}, 'N-'));
+ unshift(@Amavis::Conf::spam_tag_level_maps,
$lf->($Amavis::Conf::ldap_attr_maps{spam_tag_level_maps}, 'N-'));
+ unshift(@Amavis::Conf::unchecked_quarantine_to_maps,
$lf->($Amavis::Conf::ldap_attr_maps{unchecked_quarantine_to_maps}, 'S-'));
+ unshift(@Amavis::Conf::virus_admin_maps,
$lf->($Amavis::Conf::ldap_attr_maps{virus_admin_maps}, 'S-'));
+ unshift(@Amavis::Conf::virus_lovers_maps,
$lf->($Amavis::Conf::ldap_attr_maps{virus_lovers_maps}, 'B-'));
+ unshift(@Amavis::Conf::virus_quarantine_to_maps,
$lf->($Amavis::Conf::ldap_attr_maps{virus_quarantine_to_maps}, 'S-'));
+ unshift(@Amavis::Conf::virus_subject_tag2_maps,
$lf->($Amavis::Conf::ldap_attr_maps{virus_subject_tag2_maps}, 'S-'));
+ unshift(@Amavis::Conf::warnbadhrecip_maps,
$lf->($Amavis::Conf::ldap_attr_maps{warnbadhrecip_maps}, 'B-'));
+ unshift(@Amavis::Conf::warnbannedrecip_maps,
$lf->($Amavis::Conf::ldap_attr_maps{warnbannedrecip_maps}, 'B-'));
+ unshift(@Amavis::Conf::warnvirusrecip_maps,
$lf->($Amavis::Conf::ldap_attr_maps{warnvirusrecip_maps}, 'B-'));
section_time('ldap-prepare');
}
if (defined $sql_lookups && !$implicit_maps_inserted) {
@@ -16279,7 +16325,7 @@
BEGIN {
require Exporter;
use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION
- $ldap_sys_default @ldap_attrs @mv_ldap_attrs);
+ $ldap_sys_default @ldap_attrs @mv_ldap_attrs $key);
$VERSION = '2.211';
@ISA = qw(Exporter);
import Amavis::Conf qw(:platform :confvars c cr ca);
@@ -16294,22 +16340,22 @@
query_filter => '(&(objectClass=amavisAccount)(mail=%m))',
};
- @ldap_attrs = qw(amavisVirusLover amavisSpamLover amavisBannedFilesLover
- amavisBadHeaderLover amavisBypassVirusChecks amavisBypassSpamChecks
- amavisBypassBannedChecks amavisBypassHeaderChecks amavisSpamTagLevel
- amavisSpamTag2Level amavisSpamKillLevel
- amavisSpamDsnCutoffLevel amavisSpamQuarantineCutoffLevel
- amavisSpamSubjectTag amavisSpamSubjectTag2 amavisSpamModifiesSubj
- amavisVirusQuarantineTo amavisSpamQuarantineTo amavisBannedQuarantineTo
- amavisBadHeaderQuarantineTo amavisArchiveQuarantineTo
- amavisBlacklistSender amavisWhitelistSender
- amavisLocal amavisMessageSizeLimit amavisWarnVirusRecip
- amavisWarnBannedRecip amavisWarnBadHeaderRecip amavisVirusAdmin
- amavisNewVirusAdmin amavisSpamAdmin amavisBannedAdmin
- amavisBadHeaderAdmin amavisBannedRuleNames amavisDisclaimerOptions
- );
+ # single valued LDAP attribute, all future comparisons done lc()
+ @ldap_attrs = ();
+ foreach $key (sort keys %Amavis::Conf::ldap_attr_maps) {
+ $Amavis::Conf::ldap_attr_maps{$key} =
lc($Amavis::Conf::ldap_attr_maps{$key});
+ push(@ldap_attrs, $Amavis::Conf::ldap_attr_maps{$key});
+ }
- @mv_ldap_attrs = qw(amavisBlacklistSender amavisWhitelistSender);
+ # multi valued LDAP attributes, all future comparsions done lc()
+ # - separate array for MV attributes to quickly establish MV or SV
+ # - MV attrs need to be added to master list of attributes, ldap_attrs
+ @mv_ldap_attrs = ();
+ foreach $key (sort keys %Amavis::Conf::ldap_attr_maps_mv) {
+ $Amavis::Conf::ldap_attr_maps_mv{$key} =
lc($Amavis::Conf::ldap_attr_maps_mv{$key});
+ push(@mv_ldap_attrs, $Amavis::Conf::ldap_attr_maps_mv{$key});
+ push(@ldap_attrs, $Amavis::Conf::ldap_attr_maps_mv{$key});
+ }
}
sub new {
@@ -16420,11 +16466,12 @@
$match->{dn} = $entry->dn;
for my $attr (@ldap_attrs) {
my($value);
- do_log(9,'lookup_ldap: reading attribute "%s" from object', $attr);
$attr = lc($attr);
if ($mv_ldap_attrs{$attr}) { # multivalued
+ do_log(9,'lookup_ldap: reading multi-valued attribute "%s" from
object', $attr);
$value = $entry->get_value($attr, asref => 1);
} else {
+ do_log(9,'lookup_ldap: reading singlevalued attribute "%s" from
object', $attr);
$value = $entry->get_value($attr);
}
$match->{$attr} = $value if defined $value;
@@ -22364,7 +22411,7 @@
do_log(5,'wbl: (LDAP) query keys: %s', join(',
',map{"\"$_\""}...@keys));
$wblist = lookup(0,$recip,Amavis::Lookup::LDAPattr->new(
- $ldap_lookups,'amavisBlacklistSender','L-'));
+
$ldap_lookups,$Amavis::Conf::ldap_attr_maps_mv{blacklist_sender_maps},'L-'));
for my $key (@keys) {
if (grep {lc($_) eq lc($key)} @$wblist) {
$found=1; $wb = -1; $br = $recip; $any_b++;
@@ -22374,7 +22421,7 @@
}
}
$wblist = lookup(0,$recip,Amavis::Lookup::LDAPattr->new(
- $ldap_lookups,'amavisWhitelistSender','L-'));
+
$ldap_lookups,$Amavis::Conf::ldap_attr_maps_mv{whitelist_sender_maps},'L-'));
for my $key (@keys) {
if (grep {lc($_) eq lc($key)} @$wblist) {
$found=1; $wb = +1; $wr = $recip; $any_w++;
------------------------------------------------------------------------------
_______________________________________________
AMaViS-user mailing list
AMaViS-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amavis-user
AMaViS-FAQ:http://www.amavis.org/amavis-faq.php3
AMaViS-HowTos:http://www.amavis.org/howto/