Spamassassin und mysql: SQL Error: Access denied...

Smile

Registered User
Hallo.

Ich möchte gerne einige Spamassassin-Einstellungen aus mysql laden lassen.
Leider scheitert aber die Verbindung von spamd zur DB und ich habe folgende Fehlermeldung im maillog:
Code:
Apr 28 16:00:21 vsxxxxx spamd[13509]: connection from localhost.localdomain [127.0.0.1] at port 37410 
Apr 28 16:00:22 vsxxxxx spamd[13509]: failed to load user (vmail) scores from SQL database: SQL Error: Access denied for user 'syscp'@'localhost' (using password: YES) 
Apr 28 16:00:22 vs157035 spamd[13509]: service unavailable: Error fetching user preferences via SQL

Das System ist Debian Sarge mit postfix (und SysCP).
Spamassassin habe ich wie folgt integriert:
master.cf:
Code:
smtp      inet  n       -       -       -       -       smtpd   -o content_filter=spamscript:dummy
spamscript unix - n n - - pipe   flags=Rq user=vmail argv=/usr/bin/spamscript -f ${sender} -- ${recipient}

spamscript:
Code:
#!/bin/bash
/usr/bin/spamc | /usr/sbin/sendmail -i "$@"
exit $?

Local.cf:
Code:
user_scores_dsn DBI:mysql:syscp:localhost
user_scores_sql_username syscp
user_scores_sql_password XXXXX
user_scores_sql_custom_query SELECT preference, value FROM modules_sasettings_sa WHERE username = _USERNAME_ OR username = '$GLOBAL' OR username = CONCAT('%',_DOMAIN_) ORDER BY username ASCk_locales              all

Habt Ihr einen Tipp für mich, woran die DB-Verbindung scheitern könnte?
(username, password usw. habe ich natürlich geprüft und das stimmt alles)

PS: Um den Post nicht ewig aufzublähen, habe ich mich mit Codeschnippseln und Logauszügen mal auf das wesentliche beschränkt. Falls Ihr mehr benötigt, gebt bescheid und ich poste es dann.

Danke und viele Grüße

Smile
 
Ja, kann ich. Die Logindaten verwende ich noch in einer Reihe anderer Skripte und Anwendungen und sie funtkionieren da auch.

Danke schon mal und Grüße

Smile
 
Mit welcher Commandozeile funktioniert es denn?
mysql -hlocalhost -usyscp -p syscp
mysql -h127.0.0.1 -usyscp -p syscp

huschi.
 
Hallo,

mysql -hlocalhost -usyscp -p syscp
damit gehts nicht.
mysql -h127.0.0.1 -usyscp -p syscp
damit gehts.
(Hat das eigentlich einen bestimmten Grund, dass hier der host nicht immer aufgelöst wird?)
Ich habe die local.cf jetzt dahingehend angepasst und nun geht es auch (fast).
Tausend dank schon mal dafür!
Neben diesem Fehler lagen noch ein paar Kleinigkeiten im argen, die ich jetzt alle korrigieren konnte (Pfad für pid, Rechte für vmail und so).

Allerdings habe ich noch einen Fehler im Statement, den ich nicht gefixt bekomme:
Code:
SELECT preference, value FROM modules_sasettings_sa WHERE username = _USERNAME_ OR username = '$GLOBAL' OR username = CONCAT('%',_DOMAIN_) ORDER BY username ASC
und zwar wirft CONCAT('%',_DOMAIN_) einen Fehler.
Wie wird denn _DOMAIN_ mit einem Wert gefüllt, bzw. wie sollte sie gefüllt werden?

Danke vielmals und viele Grüße

Smile
 
(Hat das eigentlich einen bestimmten Grund, dass hier der host nicht immer aufgelöst wird?)
Ja, Dir fehlt eine entsprechende Zeile in der /etc/hosts:
Code:
127.0.0.1 localhost.localdomain localhost


Wie wird denn _DOMAIN_ mit einem Wert gefüllt, bzw. wie sollte sie gefüllt werden?
Das ist ein Platzhalter den SpamAssassin ausfüllen sollte.

huschi.
 
Hallo.

Muss ich nach der Änderung der etc/hosts irgendwelche deamons neu starten? - Ich habe den Eintrag eben ergänzt und dann nochmal localhost in der local.cf probiert, bekam aber wieder Access denied.

Dafür wirft CONCAT('%', _DOMAIN_) jetzt keinen sql-Fehler mehr. Allerdings liefert der Select insgesamt offenbar aber auch nicht das gewünschte Ergebnis, da die Werte die ich für die Domain eingestellt habe nicht verwendet werden, sondern scheinbar nur die aus %GLOBAL.

Gibt es eine Möglichkeit, wie ich das Statement mit den Variablen testen kann (wenn ich es auf der Kommandozeile probiere werden ja die Variablen nicht gesetzt)?

Danke und viele Grüße

Smile
 
Hallo nochmal,

Gibt es eine Möglichkeit, wie ich das Statement mit den Variablen testen kann (wenn ich es auf der Kommandozeile probiere werden ja die Variablen nicht gesetzt)?
==> General query log - da hätte ich eigentlich gleich dran denken können :o

Das log hat mir dann folgendes offenbart:
SELECT preference, value FROM modules_sasettings_sa WHERE username = '$GLOBAL' OR username = CONCAT('%',NULL) ORDER BY username ASC

Also wird der Platzhalter für _DOMAIN_ von Spamassassin nicht gesetzt.

Falls jemand einen Tipp hat, woran dies scheitern könnte, würde ich mich sehr freuen. Ebenso würde ich mich natürlich auch über Tipps freuen, wo man in der SA-Doku oder bzw. auf den SA-Webseiten etwas zu dem Thema finden kann.

Vielen Dank nochmal und ein gutes Nächtle

Smile
 
Vielleicht sagst Du uns noch, nach welcher Anleitung Du die SA-Installation gemacht hast. Denn der Ausflug in das spamscript kommt mir spanisch vor.

Zu Deinem eigentlichen Problem:
Du übergibst spamc nicht die nötigen Daten um die Platzhalter vernünftig einzusetzen.

huschi.
 
Hallo,

nun glaube ich zu wissen, warum _DOMAIN_ null ist (Korrigiert mich bitte, falls ich daneben liege):
den Wert für _DOMAIN_ bekommt spamd von spamc und spamc wiederum sollte ihn als Parameter beim Aufruf erhalten.
Spamc wird bei mir durch ein Skript (spamscript) aufgerufen und dieses wiederum über die master.cf. (?)
master.cf:
spamscript unix - n n - - pipe flags=Rq user=vmail argv=/usr/bin/spamscript -f ${sender} -- ${recipient}

Wird hier in argv=/usr/bin/spamscript -f ${sender} -- ${recipient} der Sender und der Empfänger als Parameter an spamscript übergeben?

Dann müsste ich folglich den Empfänger als Parameter in spamscript verwenden können um damit wiederum spamc aufzurufen.
In spamscript habe ich lediglich das stehen:
/usr/bin/spamc | /usr/sbin/sendmail -i "$@"

Wie kann ich den Aufruf so abändern, dass hier der Empfänger bzw. dessen Domain als Parameter übergeben wird?
(pseudo)==> /usr/bin/spamc -u "Empfänger" | /usr/sbin/sendmail -i "$@"

Viele Grüße

Smile
 
Hallo,

@hushi: oh, sorry, da haben wir uns gerade überschnitten beim posten.

Mit dem Thema Anleitung ist das so ne Sache, denn das waren einige.
Ich habe ursprünglich versucht das maildrop-modul und das sa_settings-modul von SysCP(contributions) nach den entsprechenden SysCP - Anleitungen zu installieren. Das ist aber leider daran gescheitert, dass maildrop bei mir ständig vmail als untrusted user sah und sich dann nicht aufrufen lies (egal, ob ich es selbst nach Anleitung kompiliert habe oder ein vorkompiliertes Packet verwendet habe). Dann habe ich die Sache mit maildrop wieder bleiben lassen und hab SA nach der Anleitung von SA intergriert. Dann lief SA mal ganz "normal", ohne mysql.
Dann entsinnte ich mich, dass ich das sa_settings Modul noch installiert hatte und das eigentlich im Web-Frontend und der DB alles ging und habe dann herumgesucht, ob ich das nicht trotzdem verwenden kann und dann habe ich nach Anleitung von SA für mysql das nun soweit hingebastelt (wobei es gebastelt da leider ganz gut trifft :o ).

Greets

Smile
 
Ich bin mir nicht ganz sicher, aber ich glaube zu dem Zeitpunkt ist dem Postfix bereits der User bekannt.
Es könnte also gehen mit:
...../usr/bin/spamscript ${user} -f ${sender} -- ${recipient}
und im spamscript mit:
Code:
#!/bin/bash
user = $1
shift
/usr/bin/spamc -u $user | /usr/sbin/sendmail -i "$@"

huschi.
 
Hallo,

Ich bin mir nicht ganz sicher, aber ich glaube zu dem Zeitpunkt ist dem Postfix bereits der User bekannt.
Es könnte also gehen mit:
...../usr/bin/spamscript ${user} -f ${sender} -- ${recipient}
und im spamscript mit:
Code:
#!/bin/bash
user = $1
shift
/usr/bin/spamc -u $user | /usr/sbin/sendmail -i "$@"

hab ich gerade probiert und es hat leider nicht funktioniert. Meine Testmail ging an "undisclosed-recipients" und im Mailbody (der eigentlich leer war) stand eine Anleitung zu den Kommmandozeilenargumenten von spamc.
Im mail.log stand:
...
May 1 21:58:28 vs157035 spamc[25655]: invalid usage
...

Kann es sein, dass da ein Syntaxfehler vorliegt?
Hier nochmal spamscript:
user = $1
shift
/usr/bin/spamc -u $user | /usr/sbin/sendmail -i "$@"

PS:
Wegen des -u Flags bin ich mir auch nicht ganz sicher ob das stimmt. Im man zu spamc steht:
-u username
This argument has been semi-obsoleted. To have spamd use per-user-config files, run spamc as the user whose config files spamd should load. If you're running spamc as some other user, though, (eg. root, mail, nobody, cyrus, etc.) then you can still use this flag.
Leider sehe ich aber auch kein anderes Flag, das hier Sinn macht.

Tausend Dank nochmal

Smile
 
Habe eben noch folgendes probiert:

/usr/bin/spamc -u 'meineDomain.de' | /usr/sbin/sendmail -i "$@"

Ergebnis:
Mail kam zwar wieder an den richtigen Empfänger allerdings und SA hat auch gescannt, allerdings ohne die Einstellungen von Empfänger sondern wieder mit den globalen.
 
Back
Top