aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2014-08-18 15:34:13 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2014-08-18 15:34:13 +0100
commit2cb4d78b02be7a011876da557ea6b922700fd39c (patch)
tree8955c967dcf4669dcc14ff8e03cf3941a5ef25ac
parent96c618d398082a01d9e704f9aeda241b901ff522 (diff)
downloadrspamd-2cb4d78b02be7a011876da557ea6b922700fd39c.tar.gz
rspamd-2cb4d78b02be7a011876da557ea6b922700fd39c.zip
Fix regexp plugin for new smtp from/rcpt.
-rw-r--r--src/plugins/regexp.c34
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);
}
}
}