aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/dkim_check.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>2012-06-04 21:36:58 +0400
committerVsevolod Stakhov <vsevolod@rambler-co.ru>2012-06-04 21:36:58 +0400
commit1048ad10cdfaa0d7a47e65557227579da8e4ce75 (patch)
tree5293321584c393991cf2ed52bcfe6e9a8ebabad5 /src/plugins/dkim_check.c
parentf4d88ed701fb6e4fed7077ec63ea9688184f7c84 (diff)
downloadrspamd-1048ad10cdfaa0d7a47e65557227579da8e4ce75.tar.gz
rspamd-1048ad10cdfaa0d7a47e65557227579da8e4ce75.zip
* Implement 'time_jitter' setting allowing to check signatures in future in case of incorrect system time (1 minute jittering by default).
Diffstat (limited to 'src/plugins/dkim_check.c')
-rw-r--r--src/plugins/dkim_check.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/plugins/dkim_check.c b/src/plugins/dkim_check.c
index ce4fdb1d1..c5e9d4416 100644
--- a/src/plugins/dkim_check.c
+++ b/src/plugins/dkim_check.c
@@ -33,6 +33,7 @@
* - domains (map): map of domains to check (if absent all domains are checked)
* - strict_domains (map): map of domains that requires strict score for dkim
* - strict_multiplier (number): multiplier for strict domains
+ * - time_jitter (number): jitter in seconds to allow time diff while checking
*/
#include "config.h"
@@ -52,6 +53,7 @@
#define DEFAULT_SYMBOL_ALLOW "R_DKIM_ALLOW"
#define DEFAULT_CACHE_SIZE 2048
#define DEFAULT_CACHE_MAXAGE 86400
+#define DEFAULT_TIME_JITTER 60
struct dkim_ctx {
gint (*filter) (struct worker_task * task);
@@ -64,6 +66,7 @@ struct dkim_ctx {
GHashTable *dkim_domains;
GHashTable *strict_domains;
guint strict_multiplier;
+ guint time_jitter;
rspamd_lru_hash_t *dkim_hash;
};
@@ -100,6 +103,7 @@ dkim_module_init (struct config_file *cfg, struct module_ctx **ctx)
register_module_opt ("dkim", "domains", MODULE_OPT_TYPE_MAP);
register_module_opt ("dkim", "strict_domains", MODULE_OPT_TYPE_MAP);
register_module_opt ("dkim", "strict_multiplier", MODULE_OPT_TYPE_UINT);
+ register_module_opt ("dkim", "time_jitter", MODULE_OPT_TYPE_TIME);
return 0;
}
@@ -143,6 +147,12 @@ dkim_module_config (struct config_file *cfg)
else {
cache_expire = DEFAULT_CACHE_MAXAGE;
}
+ if ((value = get_module_opt (cfg, "dkim", "time_jitter")) != NULL) {
+ dkim_module_ctx->time_jitter = cfg_parse_time (value, TIME_SECONDS) / 1000;
+ }
+ else {
+ dkim_module_ctx->time_jitter = DEFAULT_TIME_JITTER;
+ }
if ((value = get_module_opt (cfg, "dkim", "whitelist")) != NULL) {
if (! add_map (value, read_radix_list, fin_radix_list, (void **)&dkim_module_ctx->whitelist_ip)) {
msg_warn ("cannot load whitelist from %s", value);
@@ -285,7 +295,7 @@ dkim_symbol_callback (struct worker_task *task, void *unused)
#endif
/* Parse signature */
msg_debug ("create dkim signature");
- ctx = rspamd_create_dkim_context (hlist->data, task->task_pool, &err);
+ ctx = rspamd_create_dkim_context (hlist->data, task->task_pool, dkim_module_ctx->time_jitter, &err);
if (ctx == NULL) {
msg_info ("cannot parse DKIM context: %s", err->message);
g_error_free (err);