Browse Source

Add ability to insert documentation strings

Issue: #461
tags/1.1.0
Vsevolod Stakhov 8 years ago
parent
commit
19f28d8547
10 changed files with 569 additions and 250 deletions
  1. 95
    41
      src/controller.c
  2. 80
    31
      src/fuzzy_storage.c
  3. 15
    6
      src/hs_helper.c
  4. 37
    14
      src/http_proxy.c
  5. 164
    79
      src/libserver/cfg_rcl.c
  6. 5
    3
      src/libserver/cfg_rcl.h
  7. 16
    7
      src/libserver/protocol.c
  8. 9
    3
      src/lua_worker.c
  9. 75
    35
      src/smtp_proxy.c
  10. 73
    31
      src/worker.c

+ 95
- 41
src/controller.c View File

@@ -34,6 +34,8 @@
#include "libutil/rrd.h"
#include "unix-std.h"
#include <math.h>
#include <tclDecls.h>
#include <curses.h>

/* 60 seconds for worker's IO */
#define DEFAULT_WORKER_IO_TIMEOUT 60000
@@ -2263,47 +2265,99 @@ init_controller_worker (struct rspamd_config *cfg)

ctx->timeout = DEFAULT_WORKER_IO_TIMEOUT;

rspamd_rcl_register_worker_option (cfg, type, "password",
rspamd_rcl_parse_struct_string, ctx,
G_STRUCT_OFFSET (struct rspamd_controller_worker_ctx, password), 0);

rspamd_rcl_register_worker_option (cfg, type, "enable_password",
rspamd_rcl_parse_struct_string, ctx,
G_STRUCT_OFFSET (struct rspamd_controller_worker_ctx, enable_password), 0);

rspamd_rcl_register_worker_option (cfg, type, "ssl",
rspamd_rcl_parse_struct_boolean, ctx,
G_STRUCT_OFFSET (struct rspamd_controller_worker_ctx, use_ssl), 0);

rspamd_rcl_register_worker_option (cfg, type, "ssl_cert",
rspamd_rcl_parse_struct_string, ctx,
G_STRUCT_OFFSET (struct rspamd_controller_worker_ctx, ssl_cert), 0);

rspamd_rcl_register_worker_option (cfg, type, "ssl_key",
rspamd_rcl_parse_struct_string, ctx,
G_STRUCT_OFFSET (struct rspamd_controller_worker_ctx, ssl_key), 0);
rspamd_rcl_register_worker_option (cfg, type, "timeout",
rspamd_rcl_parse_struct_time, ctx,
G_STRUCT_OFFSET (struct rspamd_controller_worker_ctx,
timeout), RSPAMD_CL_FLAG_TIME_INTEGER);

rspamd_rcl_register_worker_option (cfg, type, "secure_ip",
rspamd_rcl_parse_struct_string_list, ctx,
G_STRUCT_OFFSET (struct rspamd_controller_worker_ctx, secure_ip), 0);

rspamd_rcl_register_worker_option (cfg, type, "static_dir",
rspamd_rcl_parse_struct_string, ctx,
G_STRUCT_OFFSET (struct rspamd_controller_worker_ctx,
static_files_dir), 0);

rspamd_rcl_register_worker_option (cfg, type, "keypair",
rspamd_rcl_parse_struct_keypair, ctx,
G_STRUCT_OFFSET (struct rspamd_controller_worker_ctx,
key), 0);

rspamd_rcl_register_worker_option (cfg, type, "stats_path",
rspamd_rcl_parse_struct_string, ctx,
G_STRUCT_OFFSET (struct rspamd_controller_worker_ctx, saved_stats_path), 0);
rspamd_rcl_register_worker_option (cfg,
type,
"password",
rspamd_rcl_parse_struct_string,
ctx,
G_STRUCT_OFFSET (struct rspamd_controller_worker_ctx, password),
0,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"enable_password",
rspamd_rcl_parse_struct_string,
ctx,
G_STRUCT_OFFSET (struct rspamd_controller_worker_ctx,
enable_password),
0,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"ssl",
rspamd_rcl_parse_struct_boolean,
ctx,
G_STRUCT_OFFSET (struct rspamd_controller_worker_ctx, use_ssl),
0,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"ssl_cert",
rspamd_rcl_parse_struct_string,
ctx,
G_STRUCT_OFFSET (struct rspamd_controller_worker_ctx, ssl_cert),
0,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"ssl_key",
rspamd_rcl_parse_struct_string,
ctx,
G_STRUCT_OFFSET (struct rspamd_controller_worker_ctx, ssl_key),
0,
NULL);
rspamd_rcl_register_worker_option (cfg,
type,
"timeout",
rspamd_rcl_parse_struct_time,
ctx,
G_STRUCT_OFFSET (struct rspamd_controller_worker_ctx,
timeout),
RSPAMD_CL_FLAG_TIME_INTEGER,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"secure_ip",
rspamd_rcl_parse_struct_string_list,
ctx,
G_STRUCT_OFFSET (struct rspamd_controller_worker_ctx, secure_ip),
0,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"static_dir",
rspamd_rcl_parse_struct_string,
ctx,
G_STRUCT_OFFSET (struct rspamd_controller_worker_ctx,
static_files_dir),
0,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"keypair",
rspamd_rcl_parse_struct_keypair,
ctx,
G_STRUCT_OFFSET (struct rspamd_controller_worker_ctx,
key),
0,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"stats_path",
rspamd_rcl_parse_struct_string,
ctx,
G_STRUCT_OFFSET (struct rspamd_controller_worker_ctx,
saved_stats_path),
0,
NULL);

return ctx;
}

+ 80
- 31
src/fuzzy_storage.c View File

@@ -1136,49 +1136,98 @@ init_fuzzy (struct rspamd_config *cfg)
(GDestroyNotify) rspamd_inet_address_destroy, g_free,
rspamd_inet_address_hash, rspamd_inet_address_equal);

rspamd_rcl_register_worker_option (cfg, type, "hashfile",
rspamd_rcl_parse_struct_string, ctx,
G_STRUCT_OFFSET (struct rspamd_fuzzy_storage_ctx, hashfile), 0);
rspamd_rcl_register_worker_option (cfg,
type,
"hashfile",
rspamd_rcl_parse_struct_string,
ctx,
G_STRUCT_OFFSET (struct rspamd_fuzzy_storage_ctx, hashfile),
0,
NULL);

rspamd_rcl_register_worker_option (cfg, type, "hash_file",
rspamd_rcl_parse_struct_string, ctx,
G_STRUCT_OFFSET (struct rspamd_fuzzy_storage_ctx, hashfile), 0);
rspamd_rcl_register_worker_option (cfg,
type,
"hash_file",
rspamd_rcl_parse_struct_string,
ctx,
G_STRUCT_OFFSET (struct rspamd_fuzzy_storage_ctx, hashfile),
0,
NULL);

rspamd_rcl_register_worker_option (cfg, type, "file",
rspamd_rcl_parse_struct_string, ctx,
G_STRUCT_OFFSET (struct rspamd_fuzzy_storage_ctx, hashfile), 0);
rspamd_rcl_register_worker_option (cfg,
type,
"file",
rspamd_rcl_parse_struct_string,
ctx,
G_STRUCT_OFFSET (struct rspamd_fuzzy_storage_ctx, hashfile),
0,
NULL);

rspamd_rcl_register_worker_option (cfg, type, "database",
rspamd_rcl_parse_struct_string, ctx,
G_STRUCT_OFFSET (struct rspamd_fuzzy_storage_ctx, hashfile), 0);
rspamd_rcl_register_worker_option (cfg,
type,
"database",
rspamd_rcl_parse_struct_string,
ctx,
G_STRUCT_OFFSET (struct rspamd_fuzzy_storage_ctx, hashfile),
0,
NULL);

rspamd_rcl_register_worker_option (cfg, type, "sync",
rspamd_rcl_parse_struct_time, ctx,
rspamd_rcl_register_worker_option (cfg,
type,
"sync",
rspamd_rcl_parse_struct_time,
ctx,
G_STRUCT_OFFSET (struct rspamd_fuzzy_storage_ctx,
sync_timeout), RSPAMD_CL_FLAG_TIME_FLOAT);
sync_timeout),
RSPAMD_CL_FLAG_TIME_FLOAT,
NULL);

rspamd_rcl_register_worker_option (cfg, type, "expire",
rspamd_rcl_parse_struct_time, ctx,
rspamd_rcl_register_worker_option (cfg,
type,
"expire",
rspamd_rcl_parse_struct_time,
ctx,
G_STRUCT_OFFSET (struct rspamd_fuzzy_storage_ctx,
expire), RSPAMD_CL_FLAG_TIME_FLOAT);
expire),
RSPAMD_CL_FLAG_TIME_FLOAT,
NULL);

rspamd_rcl_register_worker_option (cfg, type, "allow_update",
rspamd_rcl_parse_struct_string, ctx,
G_STRUCT_OFFSET (struct rspamd_fuzzy_storage_ctx, update_map), 0);
rspamd_rcl_register_worker_option (cfg,
type,
"allow_update",
rspamd_rcl_parse_struct_string,
ctx,
G_STRUCT_OFFSET (struct rspamd_fuzzy_storage_ctx, update_map),
0,
NULL);

rspamd_rcl_register_worker_option (cfg, type, "keypair",
fuzzy_parse_keypair, ctx,
0, RSPAMD_CL_FLAG_MULTIPLE);
rspamd_rcl_register_worker_option (cfg,
type,
"keypair",
fuzzy_parse_keypair,
ctx,
0,
RSPAMD_CL_FLAG_MULTIPLE,
NULL);

rspamd_rcl_register_worker_option (cfg, type, "keypair_cache_size",
rspamd_rcl_parse_struct_integer, ctx,
rspamd_rcl_register_worker_option (cfg,
type,
"keypair_cache_size",
rspamd_rcl_parse_struct_integer,
ctx,
G_STRUCT_OFFSET (struct rspamd_fuzzy_storage_ctx,
keypair_cache_size),
RSPAMD_CL_FLAG_UINT);
keypair_cache_size),
RSPAMD_CL_FLAG_UINT,
NULL);

rspamd_rcl_register_worker_option (cfg, type, "encrypted_only",
rspamd_rcl_parse_struct_boolean, ctx,
G_STRUCT_OFFSET (struct rspamd_fuzzy_storage_ctx, encrypted_only), 0);
rspamd_rcl_register_worker_option (cfg,
type,
"encrypted_only",
rspamd_rcl_parse_struct_boolean,
ctx,
G_STRUCT_OFFSET (struct rspamd_fuzzy_storage_ctx, encrypted_only),
0,
NULL);


return ctx;

+ 15
- 6
src/hs_helper.c View File

@@ -75,13 +75,22 @@ init_hs_helper (struct rspamd_config *cfg)
ctx->hs_dir = RSPAMD_DBDIR "/";
ctx->max_time = default_max_time;

rspamd_rcl_register_worker_option (cfg, type, "cache_dir",
rspamd_rcl_parse_struct_string, ctx,
G_STRUCT_OFFSET (struct hs_helper_ctx, hs_dir), 0);
rspamd_rcl_register_worker_option (cfg, type, "max_time",
rspamd_rcl_parse_struct_time, ctx,
rspamd_rcl_register_worker_option (cfg,
type,
"cache_dir",
rspamd_rcl_parse_struct_string,
ctx,
G_STRUCT_OFFSET (struct hs_helper_ctx, hs_dir),
0,
NULL);
rspamd_rcl_register_worker_option (cfg,
type,
"max_time",
rspamd_rcl_parse_struct_time,
ctx,
G_STRUCT_OFFSET (struct hs_helper_ctx, max_time),
RSPAMD_CL_FLAG_TIME_FLOAT);
RSPAMD_CL_FLAG_TIME_FLOAT,
NULL);

return ctx;
}

+ 37
- 14
src/http_proxy.c View File

@@ -22,6 +22,8 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include <tclDecls.h>
#include <curses.h>
#include "config.h"
#include "libutil/util.h"
#include "libutil/map.h"
@@ -203,20 +205,41 @@ init_http_proxy (struct rspamd_config *cfg)
ctx->rotate_tm = DEFAULT_ROTATION_TIME;
ctx->cfg = cfg;

rspamd_rcl_register_worker_option (cfg, type, "timeout",
rspamd_rcl_parse_struct_time, ctx,
G_STRUCT_OFFSET (struct http_proxy_ctx,
timeout), RSPAMD_CL_FLAG_TIME_FLOAT);
rspamd_rcl_register_worker_option (cfg, type, "rotate",
rspamd_rcl_parse_struct_time, ctx,
G_STRUCT_OFFSET (struct http_proxy_ctx,
rotate_tm), RSPAMD_CL_FLAG_TIME_FLOAT);
rspamd_rcl_register_worker_option (cfg, type, "keypair",
rspamd_rcl_parse_struct_keypair, ctx,
G_STRUCT_OFFSET (struct http_proxy_ctx,
key), 0);
rspamd_rcl_register_worker_option (cfg, type, "upstream",
http_proxy_parse_upstream, ctx, 0, 0);
rspamd_rcl_register_worker_option (cfg,
type,
"timeout",
rspamd_rcl_parse_struct_time,
ctx,
G_STRUCT_OFFSET (struct http_proxy_ctx,
timeout),
RSPAMD_CL_FLAG_TIME_FLOAT,
NULL);
rspamd_rcl_register_worker_option (cfg,
type,
"rotate",
rspamd_rcl_parse_struct_time,
ctx,
G_STRUCT_OFFSET (struct http_proxy_ctx,
rotate_tm),
RSPAMD_CL_FLAG_TIME_FLOAT,
NULL);
rspamd_rcl_register_worker_option (cfg,
type,
"keypair",
rspamd_rcl_parse_struct_keypair,
ctx,
G_STRUCT_OFFSET (struct http_proxy_ctx,
key),
0,
NULL);
rspamd_rcl_register_worker_option (cfg,
type,
"upstream",
http_proxy_parse_upstream,
ctx,
0,
0,
NULL);

return ctx;
}

+ 164
- 79
src/libserver/cfg_rcl.c View File

@@ -39,6 +39,10 @@

#ifdef HAVE_GLOB_H
#include <glob.h>
#include <cursesp.h>
#include <itclInt.h>
#include <cursesf.h>

#endif

struct rspamd_rcl_default_handler_data {
@@ -1231,7 +1235,8 @@ rspamd_rcl_add_default_handler (struct rspamd_rcl_section *section,
const gchar *name,
rspamd_rcl_default_handler_t handler,
goffset offset,
gint flags)
gint flags,
const gchar *doc_string)
{
struct rspamd_rcl_default_handler_data *new;

@@ -1271,57 +1276,68 @@ rspamd_rcl_config_init (void)
"log_buffer",
rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct rspamd_config, log_buf_size),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"log_urls",
rspamd_rcl_parse_struct_boolean,
G_STRUCT_OFFSET (struct rspamd_config, log_urls),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"log_re_cache",
rspamd_rcl_parse_struct_boolean,
G_STRUCT_OFFSET (struct rspamd_config, log_re_cache),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"debug_ip",
rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct rspamd_config, debug_ip_map),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"debug_symbols",
rspamd_rcl_parse_struct_string_list,
G_STRUCT_OFFSET (struct rspamd_config, debug_symbols),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"log_color",
rspamd_rcl_parse_struct_boolean,
G_STRUCT_OFFSET (struct rspamd_config, log_color),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"color",
rspamd_rcl_parse_struct_boolean,
G_STRUCT_OFFSET (struct rspamd_config, log_color),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"log_systemd",
rspamd_rcl_parse_struct_boolean,
G_STRUCT_OFFSET (struct rspamd_config, log_systemd),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"systemd",
rspamd_rcl_parse_struct_boolean,
G_STRUCT_OFFSET (struct rspamd_config, log_systemd),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"debug_modules",
rspamd_rcl_parse_struct_string_list,
G_STRUCT_OFFSET (struct rspamd_config, debug_modules),
RSPAMD_CL_FLAG_STRING_LIST_HASH);
RSPAMD_CL_FLAG_STRING_LIST_HASH,
NULL);
rspamd_rcl_add_default_handler (sub,
"log_format",
rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct rspamd_config, log_format_str),
0);
0,
NULL);
/**
* Options section
*/
@@ -1335,176 +1351,214 @@ rspamd_rcl_config_init (void)
"cache_file",
rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct rspamd_config, cache_filename),
RSPAMD_CL_FLAG_STRING_PATH);
RSPAMD_CL_FLAG_STRING_PATH,
NULL);
/* Old DNS configuration */
rspamd_rcl_add_default_handler (sub,
"dns_nameserver",
rspamd_rcl_parse_struct_string_list,
G_STRUCT_OFFSET (struct rspamd_config, nameservers),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"dns_timeout",
rspamd_rcl_parse_struct_time,
G_STRUCT_OFFSET (struct rspamd_config, dns_timeout),
RSPAMD_CL_FLAG_TIME_FLOAT);
RSPAMD_CL_FLAG_TIME_FLOAT,
NULL);
rspamd_rcl_add_default_handler (sub,
"dns_retransmits",
rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct rspamd_config, dns_retransmits),
RSPAMD_CL_FLAG_INT_32);
RSPAMD_CL_FLAG_INT_32,
NULL);
rspamd_rcl_add_default_handler (sub,
"dns_sockets",
rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct rspamd_config, dns_io_per_server),
RSPAMD_CL_FLAG_INT_32);
RSPAMD_CL_FLAG_INT_32,
NULL);
rspamd_rcl_add_default_handler (sub,
"dns_max_requests",
rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct rspamd_config, dns_max_requests),
RSPAMD_CL_FLAG_INT_32);
RSPAMD_CL_FLAG_INT_32,
NULL);
rspamd_rcl_add_default_handler (sub,
"classify_headers",
rspamd_rcl_parse_struct_string_list,
G_STRUCT_OFFSET (struct rspamd_config, classify_headers),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"control_socket",
rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct rspamd_config, control_socket_path),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"explicit_modules",
rspamd_rcl_parse_struct_string_list,
G_STRUCT_OFFSET (struct rspamd_config, explicit_modules),
RSPAMD_CL_FLAG_STRING_LIST_HASH);
RSPAMD_CL_FLAG_STRING_LIST_HASH,
NULL);
rspamd_rcl_add_default_handler (sub,
"allow_raw_input",
rspamd_rcl_parse_struct_boolean,
G_STRUCT_OFFSET (struct rspamd_config, allow_raw_input),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"raw_mode",
rspamd_rcl_parse_struct_boolean,
G_STRUCT_OFFSET (struct rspamd_config, raw_mode),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"one_shot",
rspamd_rcl_parse_struct_boolean,
G_STRUCT_OFFSET (struct rspamd_config, one_shot_mode),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"check_attachements",
rspamd_rcl_parse_struct_boolean,
G_STRUCT_OFFSET (struct rspamd_config, check_text_attachements),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"tempdir",
rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct rspamd_config, temp_dir),
RSPAMD_CL_FLAG_STRING_PATH);
RSPAMD_CL_FLAG_STRING_PATH,
NULL);
rspamd_rcl_add_default_handler (sub,
"pidfile",
rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct rspamd_config, pid_file),
RSPAMD_CL_FLAG_STRING_PATH);
RSPAMD_CL_FLAG_STRING_PATH,
NULL);
rspamd_rcl_add_default_handler (sub,
"filters",
rspamd_rcl_parse_struct_string_list,
G_STRUCT_OFFSET (struct rspamd_config, filters),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"max_diff",
rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct rspamd_config, max_diff),
RSPAMD_CL_FLAG_INT_SIZE);
RSPAMD_CL_FLAG_INT_SIZE,
NULL);
rspamd_rcl_add_default_handler (sub,
"map_watch_interval",
rspamd_rcl_parse_struct_time,
G_STRUCT_OFFSET (struct rspamd_config, map_timeout),
RSPAMD_CL_FLAG_TIME_FLOAT);
RSPAMD_CL_FLAG_TIME_FLOAT,
NULL);
rspamd_rcl_add_default_handler (sub,
"dynamic_conf",
rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct rspamd_config, dynamic_conf),
0);
rspamd_rcl_add_default_handler (sub, "rrd", rspamd_rcl_parse_struct_string,
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"rrd",
rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct rspamd_config,
rrd_file), RSPAMD_CL_FLAG_STRING_PATH);
rrd_file),
RSPAMD_CL_FLAG_STRING_PATH,
NULL);
rspamd_rcl_add_default_handler (sub,
"history_file",
rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct rspamd_config, history_file),
RSPAMD_CL_FLAG_STRING_PATH);
RSPAMD_CL_FLAG_STRING_PATH,
NULL);
rspamd_rcl_add_default_handler (sub,
"use_mlock",
rspamd_rcl_parse_struct_boolean,
G_STRUCT_OFFSET (struct rspamd_config, mlock_statfile_pool),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"strict_protocol_headers",
rspamd_rcl_parse_struct_boolean,
G_STRUCT_OFFSET (struct rspamd_config, strict_protocol_headers),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"check_all_filters",
rspamd_rcl_parse_struct_boolean,
G_STRUCT_OFFSET (struct rspamd_config, check_all_filters),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"all_filters",
rspamd_rcl_parse_struct_boolean,
G_STRUCT_OFFSET (struct rspamd_config, check_all_filters),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"min_word_len",
rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct rspamd_config, min_word_len),
RSPAMD_CL_FLAG_UINT);
RSPAMD_CL_FLAG_UINT,
NULL);
rspamd_rcl_add_default_handler (sub,
"max_word_len",
rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct rspamd_config, max_word_len),
RSPAMD_CL_FLAG_UINT);
RSPAMD_CL_FLAG_UINT,
NULL);
rspamd_rcl_add_default_handler (sub,
"words_decay",
rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct rspamd_config, words_decay),
RSPAMD_CL_FLAG_UINT);
RSPAMD_CL_FLAG_UINT,
NULL);
rspamd_rcl_add_default_handler (sub,
"url_tld",
rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct rspamd_config, tld_file),
RSPAMD_CL_FLAG_STRING_PATH);
RSPAMD_CL_FLAG_STRING_PATH,
NULL);
rspamd_rcl_add_default_handler (sub,
"tld",
rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct rspamd_config, tld_file),
RSPAMD_CL_FLAG_STRING_PATH);
RSPAMD_CL_FLAG_STRING_PATH,
NULL);
rspamd_rcl_add_default_handler (sub,
"history_rows",
rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct rspamd_config, history_rows),
RSPAMD_CL_FLAG_UINT);
RSPAMD_CL_FLAG_UINT,
NULL);
rspamd_rcl_add_default_handler (sub,
"disable_hyperscan",
rspamd_rcl_parse_struct_boolean,
G_STRUCT_OFFSET (struct rspamd_config, disable_hyperscan),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"cores_dir",
rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct rspamd_config, cores_dir),
RSPAMD_CL_FLAG_STRING_PATH);
RSPAMD_CL_FLAG_STRING_PATH,
NULL);
rspamd_rcl_add_default_handler (sub,
"max_cores_size",
rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct rspamd_config, max_cores_size),
RSPAMD_CL_FLAG_INT_SIZE);
RSPAMD_CL_FLAG_INT_SIZE,
NULL);
rspamd_rcl_add_default_handler (sub,
"max_cores_count",
rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct rspamd_config, max_cores_count),
RSPAMD_CL_FLAG_INT_SIZE);
RSPAMD_CL_FLAG_INT_SIZE,
NULL);

/* New DNS configuration */
ssub = rspamd_rcl_add_section (&sub->subsections, "dns", NULL, NULL,
@@ -1513,32 +1567,38 @@ rspamd_rcl_config_init (void)
"nameserver",
rspamd_rcl_parse_struct_string_list,
G_STRUCT_OFFSET (struct rspamd_config, nameservers),
0);
0,
NULL);
rspamd_rcl_add_default_handler (ssub,
"server",
rspamd_rcl_parse_struct_string_list,
G_STRUCT_OFFSET (struct rspamd_config, nameservers),
0);
0,
NULL);
rspamd_rcl_add_default_handler (ssub,
"timeout",
rspamd_rcl_parse_struct_time,
G_STRUCT_OFFSET (struct rspamd_config, dns_timeout),
RSPAMD_CL_FLAG_TIME_FLOAT);
RSPAMD_CL_FLAG_TIME_FLOAT,
NULL);
rspamd_rcl_add_default_handler (ssub,
"retransmits",
rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct rspamd_config, dns_retransmits),
RSPAMD_CL_FLAG_INT_32);
RSPAMD_CL_FLAG_INT_32,
NULL);
rspamd_rcl_add_default_handler (ssub,
"sockets",
rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct rspamd_config, dns_io_per_server),
RSPAMD_CL_FLAG_INT_32);
RSPAMD_CL_FLAG_INT_32,
NULL);
rspamd_rcl_add_default_handler (ssub,
"connections",
rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct rspamd_config, dns_io_per_server),
RSPAMD_CL_FLAG_INT_32);
RSPAMD_CL_FLAG_INT_32,
NULL);


/* New upstreams configuration */
@@ -1548,17 +1608,20 @@ rspamd_rcl_config_init (void)
"max_errors",
rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct rspamd_config, upstream_max_errors),
RSPAMD_CL_FLAG_UINT);
RSPAMD_CL_FLAG_UINT,
NULL);
rspamd_rcl_add_default_handler (ssub,
"error_time",
rspamd_rcl_parse_struct_time,
G_STRUCT_OFFSET (struct rspamd_config, upstream_error_time),
RSPAMD_CL_FLAG_TIME_FLOAT);
RSPAMD_CL_FLAG_TIME_FLOAT,
NULL);
rspamd_rcl_add_default_handler (ssub,
"revive_time",
rspamd_rcl_parse_struct_time,
G_STRUCT_OFFSET (struct rspamd_config, upstream_revive_time),
RSPAMD_CL_FLAG_TIME_FLOAT);
RSPAMD_CL_FLAG_TIME_FLOAT,
NULL);

/**
* Metric section
@@ -1574,17 +1637,20 @@ rspamd_rcl_config_init (void)
"unknown_weight",
rspamd_rcl_parse_struct_double,
G_STRUCT_OFFSET (struct metric, unknown_weight),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"grow_factor",
rspamd_rcl_parse_struct_double,
G_STRUCT_OFFSET (struct metric, grow_factor),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"subject",
rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct metric, subject),
0);
0,
NULL);

/* Ungrouped symbols */
ssub = rspamd_rcl_add_section (&sub->subsections,
@@ -1597,17 +1663,20 @@ rspamd_rcl_config_init (void)
"description",
rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct rspamd_symbol_def, description),
0);
0,
NULL);
rspamd_rcl_add_default_handler (ssub,
"score",
rspamd_rcl_parse_struct_double,
G_STRUCT_OFFSET (struct rspamd_symbol_def, score),
0);
0,
NULL);
rspamd_rcl_add_default_handler (ssub,
"weight",
rspamd_rcl_parse_struct_double,
G_STRUCT_OFFSET (struct rspamd_symbol_def, score),
0);
0,
NULL);

/* Actions part */
ssub = rspamd_rcl_add_section (&sub->subsections,
@@ -1628,17 +1697,20 @@ rspamd_rcl_config_init (void)
"disabled",
rspamd_rcl_parse_struct_boolean,
G_STRUCT_OFFSET (struct rspamd_symbols_group, disabled),
0);
0,
NULL);
rspamd_rcl_add_default_handler (ssub,
"enabled",
rspamd_rcl_parse_struct_boolean,
G_STRUCT_OFFSET (struct rspamd_symbols_group, disabled),
RSPAMD_CL_FLAG_BOOLEAN_INVERSE);
RSPAMD_CL_FLAG_BOOLEAN_INVERSE,
NULL);
rspamd_rcl_add_default_handler (ssub,
"max_score",
rspamd_rcl_parse_struct_double,
G_STRUCT_OFFSET (struct rspamd_symbols_group, max_score),
0);
0,
NULL);

/* Grouped symbols */
sssub = rspamd_rcl_add_section (&ssub->subsections,
@@ -1651,17 +1723,20 @@ rspamd_rcl_config_init (void)
"description",
rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct rspamd_symbol_def, description),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sssub,
"score",
rspamd_rcl_parse_struct_double,
G_STRUCT_OFFSET (struct rspamd_symbol_def, score),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sssub,
"weight",
rspamd_rcl_parse_struct_double,
G_STRUCT_OFFSET (struct rspamd_symbol_def, score),
0);
0,
NULL);

/**
* Worker section
@@ -1676,17 +1751,20 @@ rspamd_rcl_config_init (void)
"count",
rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct rspamd_worker_conf, count),
RSPAMD_CL_FLAG_INT_16);
RSPAMD_CL_FLAG_INT_16,
NULL);
rspamd_rcl_add_default_handler (sub,
"max_files",
rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct rspamd_worker_conf, rlimit_nofile),
RSPAMD_CL_FLAG_INT_32);
RSPAMD_CL_FLAG_INT_32,
NULL);
rspamd_rcl_add_default_handler (sub,
"max_core",
rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct rspamd_worker_conf, rlimit_maxcore),
RSPAMD_CL_FLAG_INT_32);
RSPAMD_CL_FLAG_INT_32,
NULL);

/**
* Modules handler
@@ -1714,22 +1792,26 @@ rspamd_rcl_config_init (void)
"min_tokens",
rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct rspamd_classifier_config, min_tokens),
RSPAMD_CL_FLAG_INT_32);
RSPAMD_CL_FLAG_INT_32,
NULL);
rspamd_rcl_add_default_handler (sub,
"max_tokens",
rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct rspamd_classifier_config, max_tokens),
RSPAMD_CL_FLAG_INT_32);
RSPAMD_CL_FLAG_INT_32,
NULL);
rspamd_rcl_add_default_handler (sub,
"backend",
rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct rspamd_classifier_config, backend),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"name",
rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct rspamd_classifier_config, name),
0);
0,
NULL);

/*
* Statfile defaults
@@ -1744,12 +1826,14 @@ rspamd_rcl_config_init (void)
"label",
rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct rspamd_statfile_config, label),
0);
0,
NULL);
rspamd_rcl_add_default_handler (ssub,
"spam",
rspamd_rcl_parse_struct_boolean,
G_STRUCT_OFFSET (struct rspamd_statfile_config, is_spam),
0);
0,
NULL);

/**
* Composites handler
@@ -2584,7 +2668,8 @@ rspamd_rcl_register_worker_option (struct rspamd_config *cfg,
rspamd_rcl_default_handler_t handler,
gpointer target,
glong offset,
gint flags)
gint flags,
const gchar *doc_string)
{
struct rspamd_worker_param_parser *nhandler;
struct rspamd_worker_cfg_parser *nparser;

+ 5
- 3
src/libserver/cfg_rcl.h View File

@@ -99,12 +99,13 @@ typedef void (*rspamd_rcl_section_fin_t)(rspamd_mempool_t *pool, gpointer ud);
* @param flags flags for the parser
* @return newly created structure
*/
struct rspamd_rcl_default_handler_data * rspamd_rcl_add_default_handler (
struct rspamd_rcl_default_handler_data *rspamd_rcl_add_default_handler (
struct rspamd_rcl_section *section,
const gchar *name,
rspamd_rcl_default_handler_t handler,
goffset offset,
gint flags);
gint flags,
const gchar *doc_string);

/**
* Add new section to the configuration
@@ -324,7 +325,8 @@ void rspamd_rcl_register_worker_option (struct rspamd_config *cfg,
rspamd_rcl_default_handler_t handler,
gpointer target,
glong offset,
gint flags);
gint flags,
const gchar *doc_string);

/**
* Register a default parser for a worker

+ 16
- 7
src/libserver/protocol.c View File

@@ -22,6 +22,8 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include <glib-unix.h>
#include <itcl2TclOO.h>
#include "config.h"
#include "rspamd.h"
#include "util.h"
@@ -527,37 +529,44 @@ rspamd_protocol_control_parser_init (void)
"ip",
rspamd_rcl_parse_struct_addr,
G_STRUCT_OFFSET (struct rspamd_task, from_addr),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"from",
rspamd_rcl_parse_struct_mime_addr,
G_STRUCT_OFFSET (struct rspamd_task, from_envelope),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"rcpt",
rspamd_rcl_parse_struct_mime_addr,
G_STRUCT_OFFSET (struct rspamd_task, rcpt_envelope),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"helo",
rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct rspamd_task, helo),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"user",
rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct rspamd_task, user),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"pass_all",
rspamd_protocol_parse_task_flags,
G_STRUCT_OFFSET (struct rspamd_task, flags),
0);
0,
NULL);
rspamd_rcl_add_default_handler (sub,
"json",
rspamd_protocol_parse_task_flags,
G_STRUCT_OFFSET (struct rspamd_task, flags),
0);
0,
NULL);
}
}


+ 9
- 3
src/lua_worker.c View File

@@ -22,6 +22,7 @@
*/


#include <tclDecls.h>
#include "config.h"
#include "util.h"
#include "rspamd.h"
@@ -325,9 +326,14 @@ init_lua_worker (struct rspamd_config *cfg)
(GDestroyNotify)g_list_free);


rspamd_rcl_register_worker_option (cfg, type, "file",
rspamd_rcl_parse_struct_string, ctx,
G_STRUCT_OFFSET (struct rspamd_lua_worker_ctx, file), 0);
rspamd_rcl_register_worker_option (cfg,
type,
"file",
rspamd_rcl_parse_struct_string,
ctx,
G_STRUCT_OFFSET (struct rspamd_lua_worker_ctx, file),
0,
NULL);

rspamd_rcl_register_worker_parser (cfg, type, rspamd_lua_worker_parser,
ctx);

+ 75
- 35
src/smtp_proxy.c View File

@@ -984,41 +984,81 @@ init_smtp_proxy (struct rspamd_config *cfg)
ctx->smtp_delay = 0;
ctx->instant_reject = TRUE;

rspamd_rcl_register_worker_option (cfg, type, "upstreams",
rspamd_rcl_parse_struct_string, ctx,
G_STRUCT_OFFSET (struct smtp_proxy_ctx, upstreams_str), 0);

rspamd_rcl_register_worker_option (cfg, type, "timeout",
rspamd_rcl_parse_struct_time, ctx,
G_STRUCT_OFFSET (struct smtp_proxy_ctx,
smtp_timeout_raw), RSPAMD_CL_FLAG_TIME_UINT_32);

rspamd_rcl_register_worker_option (cfg, type, "delay",
rspamd_rcl_parse_struct_time, ctx,
G_STRUCT_OFFSET (struct smtp_proxy_ctx,
smtp_delay), RSPAMD_CL_FLAG_TIME_UINT_32);

rspamd_rcl_register_worker_option (cfg, type, "jitter",
rspamd_rcl_parse_struct_time, ctx,
G_STRUCT_OFFSET (struct smtp_proxy_ctx,
delay_jitter), RSPAMD_CL_FLAG_TIME_UINT_32);

rspamd_rcl_register_worker_option (cfg, type, "xclient",
rspamd_rcl_parse_struct_boolean, ctx,
G_STRUCT_OFFSET (struct smtp_proxy_ctx, use_xclient), 0);

rspamd_rcl_register_worker_option (cfg, type, "instant_reject",
rspamd_rcl_parse_struct_boolean, ctx,
G_STRUCT_OFFSET (struct smtp_proxy_ctx, instant_reject), 0);

rspamd_rcl_register_worker_option (cfg, type, "proxy_buffer",
rspamd_rcl_parse_struct_integer, ctx,
G_STRUCT_OFFSET (struct smtp_proxy_ctx,
proxy_buf_len), RSPAMD_CL_FLAG_INT_32);

rspamd_rcl_register_worker_option (cfg, type, "dnsbl",
rspamd_rcl_parse_struct_string_list, ctx,
G_STRUCT_OFFSET (struct smtp_proxy_ctx, rbls), 0);
rspamd_rcl_register_worker_option (cfg,
type,
"upstreams",
rspamd_rcl_parse_struct_string,
ctx,
G_STRUCT_OFFSET (struct smtp_proxy_ctx, upstreams_str),
0,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"timeout",
rspamd_rcl_parse_struct_time,
ctx,
G_STRUCT_OFFSET (struct smtp_proxy_ctx,
smtp_timeout_raw),
RSPAMD_CL_FLAG_TIME_UINT_32,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"delay",
rspamd_rcl_parse_struct_time,
ctx,
G_STRUCT_OFFSET (struct smtp_proxy_ctx,
smtp_delay),
RSPAMD_CL_FLAG_TIME_UINT_32,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"jitter",
rspamd_rcl_parse_struct_time,
ctx,
G_STRUCT_OFFSET (struct smtp_proxy_ctx,
delay_jitter),
RSPAMD_CL_FLAG_TIME_UINT_32,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"xclient",
rspamd_rcl_parse_struct_boolean,
ctx,
G_STRUCT_OFFSET (struct smtp_proxy_ctx, use_xclient),
0,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"instant_reject",
rspamd_rcl_parse_struct_boolean,
ctx,
G_STRUCT_OFFSET (struct smtp_proxy_ctx, instant_reject),
0,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"proxy_buffer",
rspamd_rcl_parse_struct_integer,
ctx,
G_STRUCT_OFFSET (struct smtp_proxy_ctx,
proxy_buf_len),
RSPAMD_CL_FLAG_INT_32,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"dnsbl",
rspamd_rcl_parse_struct_string_list,
ctx,
G_STRUCT_OFFSET (struct smtp_proxy_ctx, rbls),
0,
NULL);

return ctx;
}

+ 73
- 31
src/worker.c View File

@@ -27,6 +27,8 @@
*/

#include <libserver/rspamd_control.h>
#include <tclDecls.h>
#include <curses.h>
#include "config.h"
#include "libutil/util.h"
#include "libutil/map.h"
@@ -324,41 +326,81 @@ init_worker (struct rspamd_config *cfg)
ctx->cfg = cfg;
ctx->task_timeout = DEFAULT_TASK_TIMEOUT;

rspamd_rcl_register_worker_option (cfg, type, "mime",
rspamd_rcl_parse_struct_boolean, ctx,
G_STRUCT_OFFSET (struct rspamd_worker_ctx, is_mime), 0);

rspamd_rcl_register_worker_option (cfg, type, "http",
rspamd_rcl_parse_struct_boolean, ctx,
G_STRUCT_OFFSET (struct rspamd_worker_ctx, is_http), 0);

rspamd_rcl_register_worker_option (cfg, type, "json",
rspamd_rcl_parse_struct_boolean, ctx,
G_STRUCT_OFFSET (struct rspamd_worker_ctx, is_json), 0);

rspamd_rcl_register_worker_option (cfg, type, "allow_learn",
rspamd_rcl_parse_struct_boolean, ctx,
G_STRUCT_OFFSET (struct rspamd_worker_ctx, allow_learn), 0);

rspamd_rcl_register_worker_option (cfg, type, "timeout",
rspamd_rcl_parse_struct_time, ctx,
rspamd_rcl_register_worker_option (cfg,
type,
"mime",
rspamd_rcl_parse_struct_boolean,
ctx,
G_STRUCT_OFFSET (struct rspamd_worker_ctx, is_mime),
0,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"http",
rspamd_rcl_parse_struct_boolean,
ctx,
G_STRUCT_OFFSET (struct rspamd_worker_ctx, is_http),
0,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"json",
rspamd_rcl_parse_struct_boolean,
ctx,
G_STRUCT_OFFSET (struct rspamd_worker_ctx, is_json),
0,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"allow_learn",
rspamd_rcl_parse_struct_boolean,
ctx,
G_STRUCT_OFFSET (struct rspamd_worker_ctx, allow_learn),
0,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"timeout",
rspamd_rcl_parse_struct_time,
ctx,
G_STRUCT_OFFSET (struct rspamd_worker_ctx,
timeout), RSPAMD_CL_FLAG_TIME_INTEGER);

rspamd_rcl_register_worker_option (cfg, type, "task_timeout",
rspamd_rcl_parse_struct_time, ctx,
timeout),
RSPAMD_CL_FLAG_TIME_INTEGER,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"task_timeout",
rspamd_rcl_parse_struct_time,
ctx,
G_STRUCT_OFFSET (struct rspamd_worker_ctx,
task_timeout), RSPAMD_CL_FLAG_TIME_FLOAT);

rspamd_rcl_register_worker_option (cfg, type, "max_tasks",
rspamd_rcl_parse_struct_integer, ctx,
task_timeout),
RSPAMD_CL_FLAG_TIME_FLOAT,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"max_tasks",
rspamd_rcl_parse_struct_integer,
ctx,
G_STRUCT_OFFSET (struct rspamd_worker_ctx,
max_tasks), RSPAMD_CL_FLAG_INT_32);

rspamd_rcl_register_worker_option (cfg, type, "keypair",
rspamd_rcl_parse_struct_keypair, ctx,
max_tasks),
RSPAMD_CL_FLAG_INT_32,
NULL);

rspamd_rcl_register_worker_option (cfg,
type,
"keypair",
rspamd_rcl_parse_struct_keypair,
ctx,
G_STRUCT_OFFSET (struct rspamd_worker_ctx,
key), 0);
key),
0,
NULL);

return ctx;
}

Loading…
Cancel
Save