]> source.dussan.org Git - rspamd.git/commitdiff
* Add ability to set metric's action from config file
authorVsevolod Stakhov <vsevolod@rambler-co.ru>
Thu, 15 Jul 2010 14:23:22 +0000 (18:23 +0400)
committerVsevolod Stakhov <vsevolod@rambler-co.ru>
Thu, 15 Jul 2010 14:23:22 +0000 (18:23 +0400)
* Fix bug with writing garbadge if message has no urls or no messages
* Fix bug with incorrect behaviour of compare_parts_distance function

src/cfg_xml.c
src/cfg_xml.h
src/expressions.c
src/greylist.h
src/protocol.c

index aeb64d1aeec4729fd12406dbfe1f3ab6d2ae1a57..c88bf60db9475068e6f0baa2b9ebbae2098df719 100644 (file)
@@ -261,6 +261,12 @@ static struct xml_parser_rule grammar[] = {
                                0,
                                NULL
                        },
+                       {
+                               "action",
+                               handle_metric_action,
+                               0,
+                               NULL
+                       },
                        NULL_ATTR
                },
                NULL_ATTR
@@ -667,6 +673,27 @@ worker_handle_bind (struct config_file *cfg, struct rspamd_xml_userdata *ctx, GH
 }
 
 gboolean 
+handle_metric_action (struct config_file *cfg, struct rspamd_xml_userdata *ctx, GHashTable *attrs, gchar *data, gpointer user_data, gpointer dest_struct, int offset)
+{
+       struct metric                  *metric = ctx->section_pointer;
+
+       if (g_ascii_strcasecmp (data, "reject") == 0) {
+               metric->action = METRIC_ACTION_REJECT;
+       }
+       else if (g_ascii_strcasecmp (data, "greylist") == 0) {
+               metric->action = METRIC_ACTION_GREYLIST;
+       }
+       else if (g_ascii_strcasecmp (data, "add_header") == 0) {
+               metric->action = METRIC_ACTION_ADD_HEADER;
+       }
+       else {
+               msg_err ("unknown action for metric: %s", data);
+               return FALSE;
+       }
+       return TRUE;
+}
+
+gboolean
 handle_metric_symbol (struct config_file *cfg, struct rspamd_xml_userdata *ctx, GHashTable *attrs, gchar *data, gpointer user_data, gpointer dest_struct, int offset)
 {
        char                           *strval, *err;
index b61c2f825c3677eaccf78d124bb5974d15cca6af..c91bb17792a9f192bca21496417a2cd420467019 100644 (file)
@@ -92,6 +92,7 @@ gboolean worker_handle_type (struct config_file *cfg, struct rspamd_xml_userdata
 gboolean worker_handle_bind (struct config_file *cfg, struct rspamd_xml_userdata *ctx, GHashTable *attrs, gchar *data, gpointer user_data, gpointer dest_struct, int offset);
 
 gboolean handle_metric_symbol (struct config_file *cfg, struct rspamd_xml_userdata *ctx, GHashTable *attrs, gchar *data, gpointer user_data, gpointer dest_struct, int offset);
+gboolean handle_metric_action (struct config_file *cfg, struct rspamd_xml_userdata *ctx, GHashTable *attrs, gchar *data, gpointer user_data, gpointer dest_struct, int offset);
 
 gboolean handle_module_opt (struct config_file *cfg, struct rspamd_xml_userdata *ctx, GHashTable *attrs, gchar *data, gpointer user_data, gpointer dest_struct, int offset);
 
index c4465742c730e2db784f45262676c2553618268d..650721b9e28cd03c1fdc4e2d13866c467378ffbf 100644 (file)
@@ -952,7 +952,7 @@ rspamd_parts_distance (struct worker_task * task, GList * args, void *unused)
                        return FALSE;
                }
                p2 = cur->data;
-               if (fuzzy_compare_hashes (p1->fuzzy, p2->fuzzy) >= threshold) {
+               if (fuzzy_compare_hashes (p1->fuzzy, p2->fuzzy) <= threshold) {
                        return TRUE;
                }
        }
index b17004c2e3da07de6ec18a353f694e7aa1b640df..e113d2e94a2376724c7eab61246e147933787142 100644 (file)
@@ -43,5 +43,6 @@ struct rspamd_grey_reply {
        } reply;
 };
 
+typedef void (*greylist_cb_t) (gboolean greylisted, struct worker_task *task, gpointer ud);
 
 #endif
index 999de65ab1cfac5acc1e8b203a5a2841fff5f1b6..1b349b49e184b624fc3e5661f9abdaeb088c0cf0 100644 (file)
@@ -508,6 +508,9 @@ show_url_header (struct worker_task *task)
                }
                cur = g_list_next (cur);
        }
+       if (r == 0) {
+               return TRUE;
+       }
        return rspamd_dispatcher_write (task->dispatcher, outbuf, r, FALSE, FALSE);
 }
 
@@ -720,6 +723,10 @@ show_messages (struct worker_task *task)
                cur = g_list_next (cur);
        }
 
+       if (r == 0) {
+               return TRUE;
+       }
+
        return rspamd_dispatcher_write (task->dispatcher, outbuf, r, FALSE, FALSE);
 }