diff options
Diffstat (limited to 'src/lua')
-rw-r--r-- | src/lua/lua_common.h | 1 | ||||
-rw-r--r-- | src/lua/lua_mimepart.c | 39 |
2 files changed, 40 insertions, 0 deletions
diff --git a/src/lua/lua_common.h b/src/lua/lua_common.h index 31d7f852b..4c82be640 100644 --- a/src/lua/lua_common.h +++ b/src/lua/lua_common.h @@ -7,6 +7,7 @@ #include <lua.h> #include <lauxlib.h> #include <lualib.h> +#include <stdbool.h> #include "rspamd.h" #include "ucl.h" diff --git a/src/lua/lua_mimepart.c b/src/lua/lua_mimepart.c index 340da7aa2..c45030791 100644 --- a/src/lua/lua_mimepart.c +++ b/src/lua/lua_mimepart.c @@ -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), @@ -1354,6 +1364,35 @@ lua_mimepart_get_filename (lua_State * L) } 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) { struct rspamd_mime_part *part = lua_check_mimepart (L); |