Explorar el Código

Modified plugin to report a static score if dynamic score reporting

isn't supported.


git-svn-id: https://svn.microneil.com/svn/PKG-SNF-CS-NIX/trunk@49 233e721a-07f6-49eb-a7da-05e0e16828fc
master
adeniz hace 15 años
padre
commit
2ba6c9c24a

+ 68
- 26
SNF_CS_Developer_Package/SNF4SA/INSTALL Ver fichero

@@ -20,8 +20,19 @@ with permission 777. This allows both the script and SNFServer to
write to that directory. If that directory already exists, ensure
that it has a permission of 777.
Plugin Configuation Settings
----------------------------
The plugin uses the SNFServer results to calculate a plugin score.
For SpamAssassin with a version of 3.2.0 or later, this plugin score
is added to the SpamAssassin score for the message.
If the SpamAssassin version is earlier than 3.2.0, then the plugin
compares the plugin score to plugin score threshold. If the plugin
score is greater than or equal to the plugin score threshold, then a
static score is added to the SpamAssassin score for the message. Both
the plugin score threshold and static score are specified in the
configuration file.
Plugin Configuration Settings
-----------------------------
The plugin file (snf4sa.cf) contains required lines that:
@@ -37,22 +48,25 @@ specifies:
1) Which emails to process through SNFServer.
2) The relationship between SNFServer results and the SpamAssassin
score. You can specify the value added to or subtracted from the
2) The relationship between SNFServer results and the plugin score.
You can specify the value added to or subtracted from the
SpamAssasin score for each SNFServer result. You can also specify
whether SpamAssasin should abort further processing for eacn
SNFServer result.
3) The relationship between the GBUdb results and the SpamAssassin
score. The GBUdb probability p and confidence c add the following
value to the SpamAssasin score:
3) The relationship between the GBUdb results and the plugin score.
The GBUdb probability p and confidence c add the following value to
the SpamAssasin score:
abs(p * c) ^ 0.5 * sign(p) * MaxWeight
where sign(p) is -1 if p < 0, and +1 otherwise, and MaxWeight is
specified in a configuration line. MaxWeight is greater than or
equal to zero. If MaxWeight isn't specified in the configuration
file, then the GBUdb results don't affect the SpamAssassin score.
file, then the GBUdb results don't affect the plugin score.
4) The plugin score threshold and static score (used only if the
SpamAssassin version is earlier than 3.2.0).
To specify which emails to process, use a line similar to:
@@ -62,18 +76,18 @@ The above line specifies that all emails be processed. Please see the
SpamAssassin documentation for other options.
To specify the relationship between the SNFServer results and the
SpamAssassin score, enter zero or more lines with the format:
plugin score, enter zero or more lines with the format:
snf_result NN sa_score S short_circuit_[yes|no]
where NN specifies the SNFServer result, and S is the SpamAssassin
score for that SNFServer result. [yes|no] is "yes" if further
scanning should be skipped if SNFServer returns the result specified
by NN, or "no" if further scanning should not be skipped. NN can be a
combination of a series of one or more integers, and a range of
integers specified by N-M, where N and M are integers. The
"short_circuit_[yes|no]" is optional, and the default value for
[yes|no] is "no" (which specifies that SpamAssasin continue scanning).
where NN specifies the SNFServer result, and S is the plugin score for
that SNFServer result. [yes|no] is "yes" if further scanning should
be skipped if SNFServer returns the result specified by NN, or "no" if
further scanning should not be skipped. NN can be a combination of a
series of one or more integers, and a range of integers specified by
N-M, where N and M are integers. The "short_circuit_[yes|no]" is
optional, and the default value for [yes|no] is "no" (which specifies
that SpamAssasin continue scanning).
NOTE: There must not be any space when specifying a range of integers.
For example, specify "34-43" rather than the incorrect "34 - 43".
@@ -82,37 +96,65 @@ For example:
snf_result 63 sa_score 2.5 short_circuit_no
causes the plugin to add 2.5 to the SpamAssassin score if SNFServer
returns 63 (which in the default SNFServer configuration corresponds
to "caution").
causes the plugin to add 2.5 to the plugin score if SNFServer returns
63 (which in the default SNFServer configuration corresponds to
"caution").
Another example:
snf_result 45 47-62 sa_score 5.0 short_circuit_yes
causes the plugin to add 5.0 to the SpamAssassin score and stop
further processing if SNFServer returns 45 or 47 thru 62.
causes the plugin to add 5.0 to the plugin score and stop further
processing if SNFServer returns 45 or 47 thru 62.
Final example:
snf_result 1 sa_score -5.0
causes the plugin to subtract 5.0 from the SpamAssassin score.
SpamAssassin continues to process the email.
causes the plugin to subtract 5.0 from the plugin score. SpamAssassin
continues to process the email.
If SNFServer returns a result that isn't specified, then the plugin
adds zero to the SpamAssassin score.
adds zero to the plugin score.
The following line specifies the MaxWeight parameter:
GBUdb_max_weight MaxWeight
where MaxWeight is the value to specify. For example,
where MaxWeight is the value to specified. For example,
GBUdb_max_weight 3.0
specifies a MaxWeight value of 3.0.
For SpamAssassin with version earlier than 3.2.0
------------------------------------------------
The following line specifies the plugin score threshold:
pre_3.2_plugin_score_threshold Threshold
where Threshold is the value to specified. For example:
pre_3.2_plugin_score_threshold 1.1
causes the static score to be added if the plugin score is equal to or
greater than 1.1.
The following line specifies the static score:
score SNF4SA Score
where Score is the static score to add to the SpamAssassin score for
the message. For example:
score SNF4SA 8.0
specifies a static score of 8.0. If the SpamAssassin version is
earlier than 3.2.0, and the plugin score is equal to or greater than
the plugin score threshold, then a value of 8.0 would be added to the
SpamAssassin score for the message.
Debugging the configuration
---------------------------

+ 21
- 6
SNF_CS_Developer_Package/SNF4SA/README Ver fichero

@@ -10,12 +10,13 @@ This directory contains the SpamAssassin plugin for SNFServer.
The plugin implements a rule that checks the email message with
SNFServer.
If SNFServer determines that the email message is spam, then
SpamAssassin increments the score by an amount that depends on the
SNFServer result. The amount to add for each SNFServer result is
specified in the configuration file.
If SNFServer determines that the email message is spam, then the
plugin calculates a plugin score that depends on the SNFServer result.
The plugin score for each SNFServer result is specified in the
configuration file using the "snf_result" configuration line (please
see the INSTALL file for further info).
The GBUdb scan result also changes the score by:
The GBUdb scan result also changes the plugin score by:
abs(p * c) ^ 0.5 * sign(p) * MaxWeight
@@ -24,7 +25,21 @@ GBUdb scan, sign(p) is -1 if p < 0 and +1 otherwise, and MaxWeight is
specified in the configuration file. If SNFServer is not configured
to insert the GBUdb scan results into a header in the message, or
MaxWeight is not specified in the configuration file, then the
SpamAssassin score is not affected by the GBUdb scan results.
plugin score is not affected by the GBUdb scan results.
If SpamAssassin supports dynamic score reporting (SpamAssassin version
3.2.0 or later), then the plugin score is added to the score of the
message.
If the version of SpamAssassin is earlier than 3.2.0, then the plugin
behavior is different. In this case, if the plugin score is equal to
or above a threshold specified in the configuration file, then a fixed
value specified in the configuration file is added to the score of the
message. If instead the plugin score is below the threshold, then the
score of the message is not changed by this plugin. The fixed value
is specified by the "score" configuration line, and the threshold is
specified by the "pre_3.2_static_sa_score_threshold" configuration
line. Please see the INSTALL file for further info.
In addition to scanning the message, the plugin inserts headers into
the email. The SNFServer must be configured to insert the headers

+ 16
- 0
SNF_CS_Developer_Package/SNF4SA/snf4sa.cf Ver fichero

@@ -25,6 +25,22 @@ snf_result 40 sa_score 2.5 short_circuit_no
snf_result 47-62 sa_score 4.0 short_circuit_no
snf_result 63 sa_score 3.5 short_circuit_no
#
# This plugin is not able to report dynamic scores to SpamAssassin
# with a version earlier than 3.2.0. In this case, instead of
# reporting a dynamic score, a static score is reported if the plugin
# score is above a threshold. The static score is specified by the
# score configuration line.
#
# If you have a SpamAssassin version earlier than 3.2.0, the following
# two lines to specify the plugin score threshold (default is 2.5),
# and also the static score to add in the case that the plugin score
# is equal to or above the threshold. If the SpamAssassin version is
# 3.2.0 or later, these two lines are ignored.
#
pre_3.2_plugin_score_threshold 2.5
score SNF4SA 5.0
####################################################################
# Do not modify anything below this line.

+ 37
- 0
SNF_CS_Developer_Package/SNF4SA/snf4sa.pm Ver fichero

@@ -98,6 +98,9 @@ sub new {
# Key for no short circuit in configuration file.
$self->{SA_ShortCircuitNoKey} = "short_circuit_no";
# Key for plugin score threshold in the configuration file.
$self->{Plugin_score_thresholdKey} = "pre_3.2_plugin_score_threshold";
return $self;
}
@@ -157,6 +160,26 @@ sub parse_config {
$self->log_debug("Invalid value for $self->{GBUdb_MaxWeightKey} " .
$tempValue);
}
} elsif (lc($options->{key}) eq $self->{Plugin_score_thresholdKey}) {
# Plugin score threshold.
my $tempValue = $options->{value};
# Test that the value was a number.
#print "Found $self->{Plugin_score_thresholdKey} value: $options->{value}\n"; # DEBUG.
if ($tempValue =~ /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/) {
# Value was a number. Load and return success.
$options->{conf}->{pluginScoreThreshold} = $tempValue;
$self->inhibit_further_callbacks();
return 1;
} else {
$self->log_debug("Invalid value for $self->{Plugin_score_thresholdKey} " .
$tempValue);
}
} elsif (lc($options->{key}) eq $self->{SNF_CodeKey}) {
@@ -513,6 +536,20 @@ sub snf4sa_sacheck {
$self->extract_header_body($SNF_XCI_Return->{header},
"X-GBUdb-Analysis"));
# If dynamic scoring isn't supported, this rule fires if the score is
# above the threshold.
if (Mail::SpamAssassin::Version() le "3.2.0") {
my $pluginScoreThreshold = 2.5; # Default value.
if (defined($permsgstatus->{main}->{conf}->{pluginScoreThreshold})) {
$pluginScoreThreshold = $permsgstatus->{main}->{conf}->{pluginScoreThreshold};
}
#print "Before comparison. pluginScoreThreshold: $pluginScoreThreshold deltaScore: $deltaScore\n"; # DEBUG
if ($deltaScore < $pluginScoreThreshold) {
$deltaScore = 0.0;
}
}
#print "After comparison. deltaScore: $deltaScore\n"; # DEBUG
# Submit the score.
if ($deltaScore) {

Cargando…
Cancelar
Guardar