Browse Source

[Feature] Allow configurable sign headers for DKIM

Issue: #1595
tags/1.5.6
Vsevolod Stakhov 7 years ago
parent
commit
958715d7fa
2 changed files with 30 additions and 16 deletions
  1. 2
    2
      src/libserver/dkim.c
  2. 28
    14
      src/plugins/dkim_check.c

+ 2
- 2
src/libserver/dkim.c View File

@@ -365,7 +365,7 @@ rspamd_dkim_parse_hdrlist_common (struct rspamd_dkim_common_ctx *ctx,
gchar *h;
gboolean from_found = FALSE;
guint count = 0;
struct rspamd_dkim_header *new, *check;
struct rspamd_dkim_header *new;
GHashTable *htb;

p = param;
@@ -405,7 +405,7 @@ rspamd_dkim_parse_hdrlist_common (struct rspamd_dkim_common_ctx *ctx,

g_ptr_array_add (ctx->hlist, new);

if ((check = g_hash_table_lookup (htb, h)) != NULL) {
if (g_hash_table_lookup (htb, h) != NULL) {
new->count++;
}
else {

+ 28
- 14
src/plugins/dkim_check.c View File

@@ -274,6 +274,15 @@ dkim_module_init (struct rspamd_config *cfg, struct module_ctx **ctx)
0,
NULL,
0);
rspamd_rcl_add_doc_by_path (cfg,
"dkim",
"Headers used in signing",
"sign_headers",
UCL_STRING,
NULL,
0,
NULL,
0);

return 0;
}
@@ -315,21 +324,21 @@ dkim_module_config (struct rspamd_config *cfg)

if ((value =
rspamd_config_get_module_opt (cfg, "options", "check_local")) != NULL) {
dkim_module_ctx->check_local = ucl_obj_toboolean (value);
dkim_module_ctx->check_local = ucl_object_toboolean (value);
}
else {
dkim_module_ctx->check_local = FALSE;
}
if ((value =
rspamd_config_get_module_opt (cfg, "options", "check_authed")) != NULL) {
dkim_module_ctx->check_authed = ucl_obj_toboolean (value);
dkim_module_ctx->check_authed = ucl_object_toboolean (value);
}
else {
dkim_module_ctx->check_authed = FALSE;
}
if ((value =
rspamd_config_get_module_opt (cfg, "dkim", "symbol_reject")) != NULL) {
dkim_module_ctx->symbol_reject = ucl_obj_tostring (value);
dkim_module_ctx->symbol_reject = ucl_object_tostring (value);
}
else {
dkim_module_ctx->symbol_reject = DEFAULT_SYMBOL_REJECT;
@@ -337,28 +346,28 @@ dkim_module_config (struct rspamd_config *cfg)
if ((value =
rspamd_config_get_module_opt (cfg, "dkim",
"symbol_tempfail")) != NULL) {
dkim_module_ctx->symbol_tempfail = ucl_obj_tostring (value);
dkim_module_ctx->symbol_tempfail = ucl_object_tostring (value);
}
else {
dkim_module_ctx->symbol_tempfail = DEFAULT_SYMBOL_TEMPFAIL;
}
if ((value =
rspamd_config_get_module_opt (cfg, "dkim", "symbol_allow")) != NULL) {
dkim_module_ctx->symbol_allow = ucl_obj_tostring (value);
dkim_module_ctx->symbol_allow = ucl_object_tostring (value);
}
else {
dkim_module_ctx->symbol_allow = DEFAULT_SYMBOL_ALLOW;
}
if ((value =
rspamd_config_get_module_opt (cfg, "dkim", "symbol_na")) != NULL) {
dkim_module_ctx->symbol_na = ucl_obj_tostring (value);
dkim_module_ctx->symbol_na = ucl_object_tostring (value);
}
else {
dkim_module_ctx->symbol_na = DEFAULT_SYMBOL_NA;
}
if ((value =
rspamd_config_get_module_opt (cfg, "dkim", "symbol_permfail")) != NULL) {
dkim_module_ctx->symbol_permfail = ucl_obj_tostring (value);
dkim_module_ctx->symbol_permfail = ucl_object_tostring (value);
}
else {
dkim_module_ctx->symbol_permfail = DEFAULT_SYMBOL_PERMFAIL;
@@ -366,7 +375,7 @@ dkim_module_config (struct rspamd_config *cfg)
if ((value =
rspamd_config_get_module_opt (cfg, "dkim",
"dkim_cache_size")) != NULL) {
cache_size = ucl_obj_toint (value);
cache_size = ucl_object_toint (value);
}
else {
cache_size = DEFAULT_CACHE_SIZE;
@@ -374,7 +383,7 @@ dkim_module_config (struct rspamd_config *cfg)

if ((value =
rspamd_config_get_module_opt (cfg, "dkim", "time_jitter")) != NULL) {
dkim_module_ctx->time_jitter = ucl_obj_todouble (value);
dkim_module_ctx->time_jitter = ucl_object_todouble (value);
}
else {
dkim_module_ctx->time_jitter = DEFAULT_TIME_JITTER;
@@ -398,7 +407,7 @@ dkim_module_config (struct rspamd_config *cfg)
"DKIM domains", rspamd_kv_list_read, rspamd_kv_list_fin,
(void **)&dkim_module_ctx->dkim_domains)) {
msg_warn_config ("cannot load dkim domains list from %s",
ucl_obj_tostring (value));
ucl_object_tostring (value));
}
else {
got_trusted = TRUE;
@@ -411,7 +420,7 @@ dkim_module_config (struct rspamd_config *cfg)
"DKIM domains", rspamd_kv_list_read, rspamd_kv_list_fin,
(void **)&dkim_module_ctx->dkim_domains)) {
msg_warn_config ("cannot load dkim domains list from %s",
ucl_obj_tostring (value));
ucl_object_tostring (value));
}
else {
got_trusted = TRUE;
@@ -421,7 +430,7 @@ dkim_module_config (struct rspamd_config *cfg)
if ((value =
rspamd_config_get_module_opt (cfg, "dkim",
"strict_multiplier")) != NULL) {
dkim_module_ctx->strict_multiplier = ucl_obj_toint (value);
dkim_module_ctx->strict_multiplier = ucl_object_toint (value);
}
else {
dkim_module_ctx->strict_multiplier = 1;
@@ -429,7 +438,7 @@ dkim_module_config (struct rspamd_config *cfg)

if ((value =
rspamd_config_get_module_opt (cfg, "dkim", "trusted_only")) != NULL) {
dkim_module_ctx->trusted_only = ucl_obj_toboolean (value);
dkim_module_ctx->trusted_only = ucl_object_toboolean (value);
}
else {
dkim_module_ctx->trusted_only = FALSE;
@@ -437,12 +446,17 @@ dkim_module_config (struct rspamd_config *cfg)

if ((value =
rspamd_config_get_module_opt (cfg, "dkim", "skip_multi")) != NULL) {
dkim_module_ctx->skip_multi = ucl_obj_toboolean (value);
dkim_module_ctx->skip_multi = ucl_object_toboolean (value);
}
else {
dkim_module_ctx->skip_multi = FALSE;
}

if ((value =
rspamd_config_get_module_opt (cfg, "dkim", "sign_headers")) != NULL) {
dkim_module_ctx->sign_headers = ucl_object_tostring (value);
}

if (dkim_module_ctx->trusted_only && !got_trusted) {
msg_err_config (
"trusted_only option is set and no trusted domains are defined; disabling dkim module completely as it is useless in this case");

Loading…
Cancel
Save