commit ebfde82: [Feature] extend lua api

Jan Smutny js at excello.cz
Sat Apr 25 16:01:02 UTC 2020


Author: Jan Smutny
Date: 2020-04-19 23:32:30 +0200
URL: https://github.com/rspamd/rspamd/commit/ebfde825561e434cb7d9a9da5bbe2398290030c2 (refs/pull/3344/head)

[Feature] extend lua api
add new value accessible by key 'raw' to the table returned by util:parse_mail_address and task:get_from

---
 src/lua/lua_task.c | 13 ++++++++++++-
 src/lua/lua_util.c |  1 +
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c
index b891d7d99..8bd7077c8 100644
--- a/src/lua/lua_task.c
+++ b/src/lua/lua_task.c
@@ -515,6 +515,7 @@ LUA_FUNCTION_DEF (task, has_from);
  * @method task:get_from([type])
  * Return SMTP or MIME sender for a task. This function returns an internet address which one is a table with the following structure:
  *
+ * - `raw` - the original value without any processing
  * - `name` - name of internet address in UTF8, e.g. for `Vsevolod Stakhov <blah at foo.com>` it returns `Vsevolod Stakhov`
  * - `addr` - address part of the address
  * - `user` - user part (if present) of the address, e.g. `blah`
@@ -3310,8 +3311,18 @@ static void
 lua_push_email_address (lua_State *L, struct rspamd_email_address *addr)
 {
 	if (addr) {
-		lua_createtable (L, 0, 4);
+		lua_createtable (L, 0, 5);
 
+		if (addr->raw_len > 0) {
+			lua_pushstring (L, "raw");
+			lua_pushlstring (L, addr->raw, addr->raw_len);
+			lua_settable (L, -3);
+		}
+		else {
+			lua_pushstring (L, "raw");
+			lua_pushstring (L, "");
+			lua_settable (L, -3);
+		}
 		if (addr->addr_len > 0) {
 			lua_pushstring (L, "addr");
 			lua_pushlstring (L, addr->addr, addr->addr_len);
diff --git a/src/lua/lua_util.c b/src/lua/lua_util.c
index 7f9918c61..5948f4b4b 100644
--- a/src/lua/lua_util.c
+++ b/src/lua/lua_util.c
@@ -204,6 +204,7 @@ LUA_FUNCTION_DEF (util, glob);
  * @function util.parse_mail_address(str, [pool])
  * Parses email address and returns a table of tables in the following format:
  *
+ * - `raw` - the original value without any processing
  * - `name` - name of internet address in UTF8, e.g. for `Vsevolod Stakhov <blah at foo.com>` it returns `Vsevolod Stakhov`
  * - `addr` - address part of the address
  * - `user` - user part (if present) of the address, e.g. `blah`


More information about the Commits mailing list