]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Lua_mimepart: Add method to get part boundary
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 17 Dec 2018 14:36:22 +0000 (14:36 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 17 Dec 2018 14:36:22 +0000 (14:36 +0000)
src/lua/lua_common.h
src/lua/lua_mimepart.c

index 31d7f852b45cb20bbddd58ee6eaa1b7c09ef3598..4c82be640b6cd98ae94061261c14730d088d28c7 100644 (file)
@@ -7,6 +7,7 @@
 #include <lua.h>
 #include <lauxlib.h>
 #include <lualib.h>
+#include <stdbool.h>
 
 #include "rspamd.h"
 #include "ucl.h"
index 340da7aa22f705f8a91271ccbcb33feb2ed57902..c450307910afb4f56790315b648a78215616acaf 100644 (file)
@@ -421,6 +421,15 @@ LUA_FUNCTION_DEF (mimepart, get_archive);
  * @return {bool} true if a part is is a multipart part
  */
 LUA_FUNCTION_DEF (mimepart, is_multipart);
+
+/***
+ * @method mime_part:get_boundary()
+ * Returns boundary for a part (extracted from parent multipart for normal parts and
+ * from the part itself for multipart)
+ * @return {string} boundary value or nil
+ */
+LUA_FUNCTION_DEF (mimepart, get_boundary);
+
 /***
  * @method mime_part:get_children()
  * Returns rspamd_mimepart table of part's childer. Returns nil if mime part is not multipart
@@ -484,6 +493,7 @@ static const struct luaL_reg mimepartlib_m[] = {
        LUA_INTERFACE_DEF (mimepart, get_detected_type_full),
        LUA_INTERFACE_DEF (mimepart, get_cte),
        LUA_INTERFACE_DEF (mimepart, get_filename),
+       LUA_INTERFACE_DEF (mimepart, get_boundary),
        LUA_INTERFACE_DEF (mimepart, get_header),
        LUA_INTERFACE_DEF (mimepart, get_header_raw),
        LUA_INTERFACE_DEF (mimepart, get_header_full),
@@ -1353,6 +1363,35 @@ lua_mimepart_get_filename (lua_State * L)
        return 1;
 }
 
+static gint
+lua_mimepart_get_boundary (lua_State * L)
+{
+       LUA_TRACE_POINT;
+       struct rspamd_mime_part *part = lua_check_mimepart (L), *parent;
+
+       if (part == NULL) {
+               return luaL_error (L, "invalid arguments");
+       }
+
+       if (IS_CT_MULTIPART (part->ct)) {
+               lua_pushlstring (L, part->specific.mp->boundary.begin,
+                               part->specific.mp->boundary.len);
+       }
+       else {
+               parent = part->parent_part;
+
+               if (!parent || !IS_CT_MULTIPART (parent->ct)) {
+                       lua_pushnil (L);
+               }
+               else {
+                       lua_pushlstring (L, parent->specific.mp->boundary.begin,
+                                       parent->specific.mp->boundary.len);
+               }
+       }
+
+       return 1;
+}
+
 static gint
 lua_mimepart_get_header_common (lua_State *L, enum rspamd_lua_task_header_type how)
 {