[SAde] Datenbankbasierte user-scores
"Sebastian Lemke" <[email protected]> Thu, 1 Jan 2004 21:02:08 +0100
| Newsgroups | gmane.mail.spam.spamassassin.devel.de |
|---|---|
| Message-ID | <000301c3d0a2$2345c440$6302a8c0@worxx> |
Hallo @all,
ich hoffe ich bin hier richtig :-)
Wir setzen Spamassassin mit Datenbankbasierten User-Scores ein, da die
email-Accounts auf unserem System nicht auf Betriebssystemebene, sondern
nur in Datenbanken verwaltet werden.
Dabei ist und dieses Problem aufgefallen:
Der Account GLOBAL und eigene (benutzerspezifische) Einstellungen
überschneiden sich.
In der Datei lib/Mail/SpamAssassin/ConfSourceSQL.pm wird folgendes
SQL-Query verwendet, um die Benutzereinstellungen aus der Datenbank zu
lesen:
my $sql = "select $f_preference, $f_value from $f_table where ".
"$f_username = ".$dbh->quote($username).
" or $f_username = 'GLOBAL'".
" or $f_username = '\@GLOBAL' order by $f_username asc";
das reine SQL-Query z.B.:
select preference, value from spamassassin where username =
'beispiel\@domain.de' or username = 'GLOBAL' or username = '\@GLOBAL'
order by username asc
Das Ergebniss sieht dann u.U. wie folgt aus, da SOWOHL die Daten des
Users ALS AUCH die des GLOBAL Accounts ausgegeben werden (
wahrscheinlich haut es mit den Tab-Stops nicht hin):
preference value
--------------------------------------------
rewrite_subject 1
report_safe 1
report_header 0
defang_mime 0
use_terse_report 0
required_hits 7.5
subject_tag Spam-Alert:
use_bayes 1
auto_learn 1
skip_rbl_checks 0
use_razor2 1
use_dcc 1
use_pyzor 1
whitelist_from [email protected]
rewrite_subject 1
report_safe 1
report_header 0
defang_mime 0
use_terse_report 0
required_hits 5.5
subject_tag *****SPAM*****
Deutlich wird es bei dem "subject_tag" -!
Wenn man das Query aus der ConfSourceSQL.pm wie folgt ändert, dann wird
pro "preference" nur ein Wert ausgegeben - wenn der User einen Wert
vergeben hat, dann dieser, gefolgt von den Einträgen für "@GLOBAL" und
"GLOBAL":
## NEW ##
# Priority for Settings:
# 1. user
# 2. @GLOBAL
# 3. GLOBAL
$sql = "select sa0.$f_preference, sa0.$f_value from $f_table as
sa0 ".
"left join $f_table as sa1 on
(sa0.$f_preference=sa1.$f_preference and
sa1.$f_username=".$dbh->quote($username).") ".
"left join $f_table as sa2 on
(sa0.$f_preference=sa2.$f_preference and sa2.username='\@GLOBAL') ".
"where sa0.$f_username = ".$dbh->quote($username)." or
sa0.$f_username = 'GLOBAL' or sa0.$f_username = '\@GLOBAL' ".
"and ((sa0.$f_username='\@GLOBAL' and sa1.$f_username IS NULL)
or ".
"(sa0.$f_username=".$dbh->quote($username).") or ".
"(sa0.$f_username='GLOBAL' and sa1.$f_username IS NULL and
sa2.$f_username IS NULL)) ".
"order by sa0.username asc";
Die Tabelle wird hier noch zweimal per "Left Join" verknüpft und es
werden nur die relevanten Zeilen ausgegeben.
Ist es sinnvoll, diese Änderung in SA aufzunehmen - wenn ja, bin ich
hier an der richtigen Adresse ? Ich habe bereits Justin Mason diesbzgl.
angeschrieben, aber leider keinerlei Reaktion erhalten.
Ich weiss nicht, wie viele Leute Ihre UserScores in Datenbanken
speichern, aber das Problem dürfte eigentlich überall auftreten.
mfg
Sebastian Lemke
-------------------------------------------------------
This SF.net email is sponsored by: IBM Linux Tutorials.
Become an expert in LINUX or just sharpen your skills. Sign up for IBM's
Free Linux Tutorials. Learn everything from the bash shell to sys admin.
Click now! http://ads.osdn.com/?ad_id78&alloc_id371&op=click