]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Add method to get headers from mime parts
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 15 Oct 2021 09:12:34 +0000 (10:12 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 15 Oct 2021 09:12:34 +0000 (10:12 +0100)
src/lua/lua_mimepart.c
src/lua/lua_task.c

index 2018819e8509ff983b789cf7ec96d8e7f78e5498..5c0c80c2dbd28c144e947e591fd1a221845974bc 100644 (file)
@@ -329,6 +329,12 @@ LUA_FUNCTION_DEF (mimepart, get_header_count);
  */
 LUA_FUNCTION_DEF (mimepart, get_raw_headers);
 
+/***
+ * @method mimepart:get_headers()
+ * Get all undecoded headers of a mime part as a string
+ * @return {rspamd_text} all raw headers for a message as opaque text
+ */
+LUA_FUNCTION_DEF (mimepart, get_headers);
 
 /***
  * @method mime_part:get_content()
@@ -568,6 +574,7 @@ static const struct luaL_reg mimepartlib_m[] = {
        LUA_INTERFACE_DEF (mimepart, get_header_full),
        LUA_INTERFACE_DEF (mimepart, get_header_count),
        LUA_INTERFACE_DEF (mimepart, get_raw_headers),
+       LUA_INTERFACE_DEF (mimepart, get_headers),
        LUA_INTERFACE_DEF (mimepart, is_image),
        LUA_INTERFACE_DEF (mimepart, get_image),
        LUA_INTERFACE_DEF (mimepart, is_archive),
@@ -1709,6 +1716,31 @@ lua_mimepart_get_raw_headers (lua_State *L)
        return 1;
 }
 
+static gint
+lua_mimepart_get_headers (lua_State *L)
+{
+       LUA_TRACE_POINT;
+       struct rspamd_mime_part *part = lua_check_mimepart (L);
+       bool need_modified = lua_isnoneornil(L, 2) ? false : lua_toboolean(L, 2);
+
+       if (part) {
+               struct rspamd_mime_header *cur;
+
+               lua_createtable (L, rspamd_mime_headers_count(part->raw_headers), 0);
+               LL_FOREACH2(part->headers_order, cur, ord_next) {
+                       rspamd_lua_push_header_array(L, cur->name, cur, RSPAMD_TASK_HEADER_PUSH_FULL,
+                                       need_modified);
+               }
+       }
+       else {
+               return luaL_error (L, "invalid arguments");
+       }
+
+
+       return 1;
+}
+
+
 static gint
 lua_mimepart_is_image (lua_State * L)
 {
index 29d253217a5612cd34a0571cb99025e8f9005920..7f9eb0343362f4dc82fe4722263f503b3cc3ae50 100644 (file)
@@ -3126,14 +3126,15 @@ lua_task_get_headers (lua_State *L)
 {
        LUA_TRACE_POINT;
        struct rspamd_task *task = lua_check_task (L, 1);
+       bool need_modified = lua_isnoneornil(L, 2) ? false : lua_toboolean(L, 2);
 
        if (task && task->message) {
                struct rspamd_mime_header *cur;
 
                lua_createtable (L, rspamd_mime_headers_count(MESSAGE_FIELD(task, raw_headers)), 0);
-               DL_FOREACH(MESSAGE_FIELD(task, headers_order), cur) {
+               LL_FOREACH2(MESSAGE_FIELD(task, headers_order), cur, ord_next) {
                        rspamd_lua_push_header_array(L, cur->name, cur, RSPAMD_TASK_HEADER_PUSH_FULL,
-                                       false);
+                                       need_modified);
                }
        }
        else {