Парой постов раньше я уже описывал о проблеме обучения DSPAM’а через web интерфейс. Я не заметил, что обучение нажатием на ссылку описывается в скрипте отдельно от обучения проставлением галочек и нажатием на кнопку. В итоге групповая пометка писем не работала. Вот кусок кода который за это отвечает:

if ($FORM{’command’} eq “retrainChecked”) {
foreach my $i (0 .. $#{ $FORM{retrain_checked} }) {
my ($retrain, $signature) = split(/:/, $FORM{retrain_checked}[$i]);
if ($retrain eq “innocent”) {
$FORM{’signatureID’} = quotemeta($signature);
&ProcessFalsePositive();
undef $FORM{’signatureID’};
} elsif ($retrain eq “innocent” or $retrain eq “spam”) {
system($CONFIG{’DSPAM’}-source=error –-class=. quotemeta($retrain) . ” –-signature=. quotemeta($signature) .-–user ” . quotemeta($CURRENT_USER));
}
}

А вот diff:

223c223,232
< &ProcessFalsePositive();

> my($w_log) = “$USER.log”;
> my($w_stamp) = time;
> my($w_status) = “F”;
> my($w_info) = “NA”;
> my($w_result) = “Retrained”;
> system(”$CONFIG{’DSPAM’} –-source=error -–class=” . quotemeta($retrain) . ” --signature=” . quotemeta($signature) . ” –-user ” . quotemeta(”$CURRENT_USER”));
> open (FILE, ‘>>’ . $w_log);
> print(FILE join(”t”, $w_stamp, $w_status, $w_info, $signature, $w_info, $w_result ), “nn”);
> close FILE;
>
226c235,245
< system(”$CONFIG{’DSPAM’} –-source=error –-class=” . quotemeta($retrain) . ” –-signature=” . quotemeta($signature) . ” –-user ” . quotemeta(”$CURRENT_USER”));

>
> my($w_log) = “$USER.log”;
> my($w_stamp) = time;
> my($w_status) = “M”;
> my($w_info) = “NA”;
> my($w_result) = “Retrained”;
> system(”$CONFIG{’DSPAM’} -–source=error –-class=” . quotemeta($retrain) . ” –-signature=” . quotemeta($signature) . ” –-user ” . quotemeta(”$CURRENT_USER”));
> open (FILE, ‘>>’ . $w_log);
> print(FILE join(”t”, $w_stamp, $w_status, $w_info, $signature, $w_info, $w_result ), “nn”);
> close FILE;
>

Конечно не совсем кошерно, но выходной на дворе, подробно разбираться лень :)



Дополнительные записи: