Browse Source

Add a separate options handler.

tags/0.6.0
Vsevolod Stakhov 10 years ago
parent
commit
1084db3eb0
1 changed files with 40 additions and 7 deletions
  1. 40
    7
      src/cfg_rcl.c

+ 40
- 7
src/cfg_rcl.c View File

@@ -31,17 +31,17 @@ static gboolean
rspamd_rcl_logging_handler (struct config_file *cfg, rspamd_cl_object_t *obj,
gpointer ud, struct rspamd_rcl_section *section, GError **err)
{
rspamd_cl_object_t *val;
rspamd_cl_object_t *val, *lobj;
gchar *filepath;
const gchar *facility, *log_type, *log_level;

obj = obj->value.ov;
lobj = obj->value.ov;

HASH_FIND_STR (obj, "type", val);
HASH_FIND_STR (lobj, "type", val);
if (val != NULL && rspamd_cl_obj_tostring_safe (val, &log_type)) {
if (g_ascii_strcasecmp (log_type, "file") == 0) {
/* Need to get filename */
HASH_FIND_STR (obj, "filename", val);
HASH_FIND_STR (lobj, "filename", val);
if (val == NULL || val->type != RSPAMD_CL_STRING) {
g_set_error (err, CFG_RCL_ERROR, ENOENT, "filename attribute must be specified for file logging type");
return FALSE;
@@ -58,7 +58,7 @@ rspamd_rcl_logging_handler (struct config_file *cfg, rspamd_cl_object_t *obj,
/* Need to get facility */
cfg->log_facility = LOG_DAEMON;
cfg->log_type = RSPAMD_LOG_SYSLOG;
HASH_FIND_STR (obj, "facility", val);
HASH_FIND_STR (lobj, "facility", val);
if (val != NULL && rspamd_cl_obj_tostring_safe (val, &facility)) {
if (g_ascii_strcasecmp (facility, "LOG_AUTH") == 0 ||
g_ascii_strcasecmp (facility, "auth") == 0 ) {
@@ -132,7 +132,7 @@ rspamd_rcl_logging_handler (struct config_file *cfg, rspamd_cl_object_t *obj,
}

/* Handle log level */
HASH_FIND_STR (obj, "level", val);
HASH_FIND_STR (lobj, "level", val);
if (val != NULL && rspamd_cl_obj_tostring_safe (val, &log_level)) {
if (g_ascii_strcasecmp (log_level, "error") == 0) {
cfg->log_level = G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL;
@@ -155,6 +155,37 @@ rspamd_rcl_logging_handler (struct config_file *cfg, rspamd_cl_object_t *obj,
return rspamd_rcl_section_parse_defaults (section, cfg, obj, cfg, err);
}

static gboolean
rspamd_rcl_options_handler (struct config_file *cfg, rspamd_cl_object_t *obj,
gpointer ud, struct rspamd_rcl_section *section, GError **err)
{
rspamd_cl_object_t *val, *lobj;
const gchar *user_settings, *domain_settings;

lobj = obj->value.ov;

/* Handle user and domain settings */
HASH_FIND_STR (lobj, "user_settings", val);
if (val != NULL && rspamd_cl_obj_tostring_safe (val, &user_settings)) {
if (!read_settings (user_settings, "Users' settings", cfg, cfg->user_settings)) {
g_set_error (err, CFG_RCL_ERROR, EINVAL, "cannot read settings: %s", user_settings);
return FALSE;
}
cfg->user_settings_str = memory_pool_strdup (cfg->cfg_pool, user_settings);
}

HASH_FIND_STR (lobj, "domain_settings", val);
if (val != NULL && rspamd_cl_obj_tostring_safe (val, &domain_settings)) {
if (!read_settings (domain_settings, "Domains settings", cfg, cfg->domain_settings)) {
g_set_error (err, CFG_RCL_ERROR, EINVAL, "cannot read settings: %s", domain_settings);
return FALSE;
}
cfg->domain_settings_str = memory_pool_strdup (cfg->cfg_pool, domain_settings);
}

return rspamd_rcl_section_parse_defaults (section, cfg, obj, cfg, err);
}

/**
* Fake handler to parse default options only, uses struct cfg_file as pointer
* for default handlers
@@ -245,12 +276,14 @@ rspamd_rcl_config_init (void)
/**
* Options section
*/
sub = rspamd_rcl_add_section (new, "options", rspamd_rcl_empty_handler, RSPAMD_CL_OBJECT,
sub = rspamd_rcl_add_section (new, "options", rspamd_rcl_options_handler, RSPAMD_CL_OBJECT,
FALSE, TRUE);
rspamd_rcl_add_default_handler (sub, "statfile_pool_size", rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct config_file, max_statfile_size), RSPAMD_CL_FLAG_INT_SIZE);
rspamd_rcl_add_default_handler (sub, "cache_file", rspamd_rcl_parse_struct_string,
G_STRUCT_OFFSET (struct config_file, cache_filename), 0);
rspamd_rcl_add_default_handler (sub, "dns_nameserver", rspamd_rcl_parse_struct_string_list,
G_STRUCT_OFFSET (struct config_file, nameservers), 0);
rspamd_rcl_add_default_handler (sub, "dns_timeout", rspamd_rcl_parse_struct_time,
G_STRUCT_OFFSET (struct config_file, dns_timeout), RSPAMD_CL_FLAG_TIME_INTEGER);
rspamd_rcl_add_default_handler (sub, "dns_retransmits", rspamd_rcl_parse_struct_integer,

Loading…
Cancel
Save