]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Adopt lua task API for the new email addresses structure
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sun, 24 Apr 2016 12:11:24 +0000 (13:11 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sun, 24 Apr 2016 12:11:24 +0000 (13:11 +0100)
src/lua/lua_task.c

index 83a039813ac13f42d4420719e861710a06a6f298..b8e49424ff5ccd1b61edf44fd7a04e2b9faca53f 100644 (file)
@@ -21,6 +21,7 @@
 #include "util.h"
 #include "images.h"
 #include "cfg_file.h"
+#include "email_addr.h"
 #include "utlist.h"
 #include "xxhash.h"
 
@@ -1521,11 +1522,51 @@ lua_task_str_to_get_type (lua_State *L, gint pos)
        return ret;
 }
 
+static void
+lua_push_email_address (lua_State *L, struct rspamd_email_address *addr)
+{
+       if (addr) {
+               lua_createtable (L, 0, 3);
+
+               if (addr->addr_len > 0) {
+                       lua_pushstring (L, "addr");
+                       lua_pushlstring (L, addr->addr, addr->addr_len);
+                       lua_settable (L, -3);
+               }
+               if (addr->domain_len > 0) {
+                       lua_pushstring (L, "domain");
+                       lua_pushlstring (L, addr->domain, addr->domain_len);
+                       lua_settable (L, -3);
+               }
+               if (addr->user_len > 0) {
+                       lua_pushstring (L, "user");
+                       lua_pushlstring (L, addr->user, addr->user_len);
+                       lua_settable (L, -3);
+               }
+       }
+}
+
+static void
+lua_push_emails_address_list (lua_State *L, GPtrArray *addrs)
+{
+       struct rspamd_email_address *addr;
+       guint i;
+
+       lua_createtable (L, addrs->len, 0);
+
+       for (i = 0; i < addrs->len; i ++) {
+               addr = g_ptr_array_index (addrs, i);
+               lua_push_email_address (L, addr);
+               lua_rawseti (L, -2, i + 1);
+       }
+}
+
 static gint
 lua_task_get_recipients (lua_State *L)
 {
        struct rspamd_task *task = lua_check_task (L, 1);
-       InternetAddressList *addrs;
+       InternetAddressList *addrs = NULL;
+       GPtrArray *ptrs = NULL;
        gint what = 0;
 
        if (task) {
@@ -1537,7 +1578,7 @@ lua_task_get_recipients (lua_State *L)
                switch (what) {
                case RSPAMD_ADDRESS_SMTP:
                        /* Here we check merely envelope rcpt */
-                       addrs = task->rcpt_envelope;
+                       ptrs = task->rcpt_envelope;
                        break;
                case RSPAMD_ADDRESS_MIME:
                        /* Here we check merely mime rcpt */
@@ -1546,7 +1587,7 @@ lua_task_get_recipients (lua_State *L)
                case RSPAMD_ADDRESS_ANY:
                default:
                        if (task->rcpt_envelope) {
-                               addrs = task->rcpt_envelope;
+                               ptrs = task->rcpt_envelope;
                        }
                        else {
                                addrs = task->rcpt_mime;
@@ -1557,6 +1598,9 @@ lua_task_get_recipients (lua_State *L)
                if (addrs) {
                        lua_push_internet_address_list (L, addrs);
                }
+               else if (ptrs) {
+                       lua_push_emails_address_list (L, ptrs);
+               }
                else {
                        lua_pushnil (L);
                }
@@ -1577,6 +1621,24 @@ lua_task_get_recipients (lua_State *L)
        } \
 } while (0)
 
+#define CHECK_EMAIL_ADDR(addr) do { \
+       if (addr == NULL) { \
+               ret = 0; \
+       } \
+       else { \
+               ret = addr->flags & RSPAMD_EMAIL_ADDR_VALID; \
+       } \
+} while (0)
+
+#define CHECK_EMAIL_ADDR_LIST(addr) do { \
+       if (addr == NULL) { \
+               ret = 0; \
+       } \
+       else { \
+               ret = addr->len > 0; \
+       } \
+} while (0)
+
 static gint
 lua_task_has_from (lua_State *L)
 {
@@ -1591,17 +1653,17 @@ lua_task_has_from (lua_State *L)
                }
 
                switch (what) {
-               case 1:
+               case RSPAMD_ADDRESS_SMTP:
                        /* Here we check merely envelope rcpt */
-                       CHECK_ADDR (task->from_envelope);
+                       CHECK_EMAIL_ADDR (task->from_envelope);
                        break;
-               case 2:
+               case RSPAMD_ADDRESS_MIME:
                        /* Here we check merely mime rcpt */
                        CHECK_ADDR (task->from_mime);
                        break;
-               case 0:
+               case RSPAMD_ADDRESS_ANY:
                default:
-                       CHECK_ADDR (task->from_envelope);
+                       CHECK_EMAIL_ADDR (task->from_envelope);
 
                        if (!ret) {
                                CHECK_ADDR (task->from_mime);
@@ -1632,17 +1694,17 @@ lua_task_has_recipients (lua_State *L)
                }
 
                switch (what) {
-               case 1:
+               case RSPAMD_ADDRESS_SMTP:
                        /* Here we check merely envelope rcpt */
-                       CHECK_ADDR (task->rcpt_envelope);
+                       CHECK_EMAIL_ADDR_LIST (task->rcpt_envelope);
                        break;
-               case 2:
+               case RSPAMD_ADDRESS_MIME:
                        /* Here we check merely mime rcpt */
                        CHECK_ADDR (task->rcpt_mime);
                        break;
-               case 0:
+               case RSPAMD_ADDRESS_ANY:
                default:
-                       CHECK_ADDR (task->rcpt_envelope);
+                       CHECK_EMAIL_ADDR_LIST (task->rcpt_envelope);
 
                        if (!ret) {
                                CHECK_ADDR (task->rcpt_mime);
@@ -1663,7 +1725,8 @@ static gint
 lua_task_get_from (lua_State *L)
 {
        struct rspamd_task *task = lua_check_task (L, 1);
-       InternetAddressList *addrs;
+       InternetAddressList *addrs = NULL;
+       struct rspamd_email_address *addr = NULL;
        gint what = 0;
 
        if (task) {
@@ -1673,18 +1736,18 @@ lua_task_get_from (lua_State *L)
                }
 
                switch (what) {
-               case 1:
+               case RSPAMD_ADDRESS_SMTP:
                        /* Here we check merely envelope rcpt */
-                       addrs = task->from_envelope;
+                       addr = task->from_envelope;
                        break;
-               case 2:
+               case RSPAMD_ADDRESS_MIME:
                        /* Here we check merely mime rcpt */
                        addrs = task->from_mime;
                        break;
-               case 0:
+               case RSPAMD_ADDRESS_ANY:
                default:
                        if (task->from_envelope) {
-                               addrs = task->from_envelope;
+                               addr = task->from_envelope;
                        }
                        else {
                                addrs = task->from_mime;
@@ -1695,6 +1758,12 @@ lua_task_get_from (lua_State *L)
                if (addrs) {
                        lua_push_internet_address_list (L, addrs);
                }
+               else if (addr) {
+                       /* Create table to preserve compatibility */
+                       lua_createtable (L, 1, 0);
+                       lua_push_email_address (L, addr);
+                       lua_rawseti (L, -2, 1);
+               }
                else {
                        lua_pushnil (L);
                }