[rspamd] Frage: Eigenes Modul aktivieren

Achim Lammerts ml-pbu at syntaxys.de
Fr Mär 4 11:10:38 CET 2022


Guten Morgen,
inzwischen bin ich dem Fehler bzgl. der Initialisierung von Modulen auf 
die Schliche gekommen. Allerdings gibt es nun einen anderen Fehler, den 
ich noch nicht verstehe:

2022-03-04 11:03:10 #1152774(rspamd_proxy) <b779e5>; proxy; 
lua_metric_symbol_callback: call to (MAIL2FILE) failed (2): 
/etc/rspamd/plugins.d//mail2file.lua:12: bad argument #1 to 'write' 
(string expected, got userdata); trace: [1]:{[C]:-1 - write [C]}; 
[2]:{/etc/rspamd/plugins.d//mail2file.lua:12 - <unknown> [Lua]};

Das Script:

rspamd_config.MAIL2FILE = {
   callback = function(task)
     local messRaw = task:get_message()
     local rspamd_logger = require 'rspamd_logger'
     rspamd_logger.infox(task, 'MAIL2FILE - I am alive')
     rspamd_logger.infox(task, messRaw)

     local messFile, err = io.open('/tmp/maildump/test', 'w')
     if messFile==nil then
        rspamd_logger.infox(task, 'MAIL2FILE Couldn't open file: '..err)
     else
        messFile:write(messRaw)
        messFile:close()
     end
   end
}

Laut Doku liefert die Funktion einen String zurück:
https://rspamd.com/doc/lua/rspamd_task.html#mcea29

Also probiere ich es mal mit *messFile:write('Test')*
Dann funktioniert es. Es soll jedoch die Nachricht im Rohformat in die 
Datei gespeichert werden …

Bei *rspamd_logger.infox(task, messRaw)* kommt übrigens auch nichts im 
log an. Was ist falsch?

Vielen Dank für die Hilfe!
LG/A


Am 01.03.22 um 21:30 schrieb Carsten Rosenberg via Postfixbuch-users:
> Moin,
> 
> On 01.03.22 13:53, Achim Lammerts via Postfixbuch-users wrote:
>> Hallo Liste,
>> ich spiele gerade etwas mit Lua herum und versuche, ein eigenes Modul 
>> zum Laufen zu bekommen.
>>
>> Unter /etc/rspamd/plugins.d/ habe ich eine maildump.lua angelegt, die 
>> laut Doku automatisch geladen wird:
>>
>> rspamd_config.MAILDUMP = function(task)
>>      local messRaw = task:get_message()
>>      file = io.open("/etc/rspamd/maildump/test", "w")
>>      io.write(messRaw)
>>      io.close(file)
>> end
> 
> Rspamd möchte an der Stelle einen Table an options in der ein Callback 
> enthalten ist. Hinter Callback steht immer die Funktion, die aufgerufen 
> wird, wenn das Symbol (MAILDUMP) an der Reihe ist
> 
> Das minimum wäre also so:
> 
> rspamd_config.MAILDUMP = {
>    callback = function(task)
> 
>      local messRaw = task:get_message()
>      file = io.open("/etc/rspamd/maildump/test", "w")
>      io.write(messRaw)
>      io.close(file)
> 
>    end
> }
> 
>>
>> Es wird aber keine Datei geschrieben und es entsteht auch kein Fehler, 
>> der Rückschlüsse zulässt. Ich habe dann unter /etc/rspamd/local.d/ 
>> eine maildump.conf angelegt:
>>
>> maildump {
>>      enabled = true;
>> }
> 
> Siehst du deine Config denn in rspamadm configdump? Was sagt denn 
> rspamadm configtest dazu?
> 
> Wenn du ein ganzes Modul/Plugin schreiben willst möchte Rspamd hier ein 
> registriertes Modul und die passende Config dazu. Sonst wird es nicht 
> "gestartet". Die Configs werden aus modules.d eingelesen und erst von 
> dort Dateien in local.d included. Mindestens da fehlt die also eine Config.
> 
> Ich bin mir auch nicht ganz sicher ob rspamd_config.MAILDUMP hier reicht 
> oder ob es für ein Plugin nicht rspamd_config:register_symbol sein sollte.
> 
>>
>> Jeweils immer den Dienst neu gestartet, aber es passiert nichts. 
>> Aktuell spiele ich nach diesen Anleitungen:
>> https://rspamd.com/doc/modules/ und https://rspamd.com/doc/lua/
>>
>> Was mache ich falsch? Vielen Dank für die Hilfe!
>>
>> LG/A
>>
> 
> https://rspamd.com/doc/tutorials/writing_rules.html
> 
> Das Einfachste fürs Testen ist: Lege dir eine Datei 
> /etc/rspamd/local.d/rspamd.lua an und pack das da rein. Dann brauchst du 
> keine extra Config. Beim neu Starten such nach dem verwendeten Symbol 
> wegen Fehlern.
> 
> 
> Mit ein bisschen Logging gibt er dir wenn auch ein Lebenszeichen:
> 
> local rspamd_logger = require "rspamd_logger"
> 
> rspamd_config.MAILDUMP = {
>    callback = function(task)
> 
>      rspamd_logger.infox(task, 'MAILDUMP - I'm alive')
> 
>      local messRaw = task:get_message()
>      file = io.open("/etc/rspamd/maildump/test", "w")
>      io.write(messRaw)
>      io.close(file)
> 
>    end
> }
> 
> Viele Grüße
> 
> Carsten
> 
> 

-- 
Wietse, I am so grateful.


Mehr Informationen über die Mailingliste Postfixbuch-users