diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2014-08-18 15:34:13 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2014-08-18 15:34:13 +0100 |
commit | 2cb4d78b02be7a011876da557ea6b922700fd39c (patch) | |
tree | 8955c967dcf4669dcc14ff8e03cf3941a5ef25ac | |
parent | 96c618d398082a01d9e704f9aeda241b901ff522 (diff) | |
download | rspamd-2cb4d78b02be7a011876da557ea6b922700fd39c.tar.gz rspamd-2cb4d78b02be7a011876da557ea6b922700fd39c.zip |
Fix regexp plugin for new smtp from/rcpt.
-rw-r--r-- | src/plugins/regexp.c | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/src/plugins/regexp.c b/src/plugins/regexp.c index 3bab09f20..56fceab03 100644 --- a/src/plugins/regexp.c +++ b/src/plugins/regexp.c @@ -1725,6 +1725,8 @@ rspamd_check_smtp_data (struct rspamd_task *task, GList * args, void *unused) struct expression_argument *arg; InternetAddressList *ia; const gchar *type, *what = NULL; + GList *cur; + gint i; if (args == NULL) { msg_warn ("no parameters to function"); @@ -1810,11 +1812,17 @@ rspamd_check_smtp_data (struct rspamd_task *task, GList * args, void *unused) return match_smtp_data (task, arg->data, what); } else { - while (rcpt_list) { - if (match_smtp_data (task, arg->data, rcpt_list->data)) { - return TRUE; + if (ia != NULL) { + for (i = 0; i < internet_address_list_length(ia); i ++) { + InternetAddressMailbox *iamb = + INTERNET_ADDRESS_MAILBOX ( + internet_address_list_get_address(ia, i)); + if (iamb && + match_smtp_data (task, arg->data, + internet_address_mailbox_get_addr(iamb))) { + return TRUE; + } } - rcpt_list = g_list_next (rcpt_list); } } } @@ -1826,13 +1834,19 @@ rspamd_check_smtp_data (struct rspamd_task *task, GList * args, void *unused) } } else { - while (rcpt_list) { - if (process_regexp_expression (arg->data, - "regexp_check_smtp_data", task, rcpt_list->data, - NULL)) { - return TRUE; + if (ia != NULL) { + for (i = 0; i < internet_address_list_length(ia); i ++) { + InternetAddressMailbox *iamb = + INTERNET_ADDRESS_MAILBOX ( + internet_address_list_get_address(ia, i)); + if (iamb && + process_regexp_expression (arg->data, + "regexp_check_smtp_data", task, + internet_address_mailbox_get_addr(iamb), + NULL)) { + return TRUE; + } } - rcpt_list = g_list_next (rcpt_list); } } } |