/**
* Logging section
*/
- sub = rspamd_rcl_add_section (&new,
+ sub = rspamd_rcl_add_section_doc (&new,
"logging", NULL,
rspamd_rcl_logging_handler,
UCL_OBJECT,
FALSE,
- TRUE);
+ TRUE,
+ cfg->doc_strings,
+ "Configure rspamd logging");
/* Default handlers */
rspamd_rcl_add_default_handler (sub,
"log_buffer",
/**
* Options section
*/
- sub = rspamd_rcl_add_section (&new,
+ sub = rspamd_rcl_add_section_doc (&new,
"options", NULL,
rspamd_rcl_options_handler,
UCL_OBJECT,
FALSE,
- TRUE);
+ TRUE,
+ cfg->doc_strings,
+ "Global rspamd options");
rspamd_rcl_add_default_handler (sub,
"cache_file",
rspamd_rcl_parse_struct_string,
NULL);
/* New DNS configuration */
- ssub = rspamd_rcl_add_section (&sub->subsections, "dns", NULL, NULL,
- UCL_OBJECT, FALSE, TRUE);
+ ssub = rspamd_rcl_add_section_doc (&sub->subsections, "dns", NULL, NULL,
+ UCL_OBJECT, FALSE, TRUE,
+ cfg->doc_strings,
+ "Options for DNS resolver");
rspamd_rcl_add_default_handler (ssub,
"nameserver",
rspamd_rcl_parse_struct_string_list,
/* New upstreams configuration */
- ssub = rspamd_rcl_add_section (&sub->subsections, "upstream", NULL, NULL,
- UCL_OBJECT, FALSE, TRUE);
+ ssub = rspamd_rcl_add_section_doc (&sub->subsections, "upstream", NULL, NULL,
+ UCL_OBJECT, FALSE, TRUE,
+ cfg->doc_strings,
+ "Upstreams configuration parameters");
rspamd_rcl_add_default_handler (ssub,
"max_errors",
rspamd_rcl_parse_struct_integer,
/**
* Metric section
*/
- sub = rspamd_rcl_add_section (&new,
+ sub = rspamd_rcl_add_section_doc (&new,
"metric", "name",
rspamd_rcl_metric_handler,
UCL_OBJECT,
FALSE,
- TRUE);
+ TRUE,
+ cfg->doc_strings,
+ "Metrics configuration");
sub->default_key = DEFAULT_METRIC;
rspamd_rcl_add_default_handler (sub,
"unknown_weight",
NULL);
/* Ungrouped symbols */
- ssub = rspamd_rcl_add_section (&sub->subsections,
+ ssub = rspamd_rcl_add_section_doc (&sub->subsections,
"symbol", "name",
rspamd_rcl_symbol_handler,
UCL_OBJECT,
TRUE,
- TRUE);
+ TRUE,
+ sub->doc_ref,
+ "Symbols settings");
rspamd_rcl_add_default_handler (ssub,
"description",
rspamd_rcl_parse_struct_string,
NULL);
/* Actions part */
- ssub = rspamd_rcl_add_section (&sub->subsections,
+ ssub = rspamd_rcl_add_section_doc (&sub->subsections,
"actions", NULL,
rspamd_rcl_actions_handler,
UCL_OBJECT,
TRUE,
- TRUE);
+ TRUE,
+ sub->doc_ref,
+ "Actions settings");
/* Group part */
- ssub = rspamd_rcl_add_section (&sub->subsections,
+ ssub = rspamd_rcl_add_section_doc (&sub->subsections,
"group", "name",
rspamd_rcl_group_handler,
UCL_OBJECT,
TRUE,
- TRUE);
+ TRUE,
+ sub->doc_ref,
+ "Symbol groups settings");
rspamd_rcl_add_default_handler (ssub,
"disabled",
rspamd_rcl_parse_struct_boolean,
NULL);
/* Grouped symbols */
- sssub = rspamd_rcl_add_section (&ssub->subsections,
+ sssub = rspamd_rcl_add_section_doc (&ssub->subsections,
"symbol", "name",
rspamd_rcl_symbol_handler,
UCL_OBJECT,
TRUE,
- TRUE);
+ TRUE,
+ ssub->doc_ref,
+ "Symbols settings");
rspamd_rcl_add_default_handler (sssub,
"description",
rspamd_rcl_parse_struct_string,
/**
* Worker section
*/
- sub = rspamd_rcl_add_section (&new,
+ sub = rspamd_rcl_add_section_doc (&new,
"worker", "type",
rspamd_rcl_worker_handler,
UCL_OBJECT,
FALSE,
- TRUE);
+ TRUE,
+ cfg->doc_strings,
+ "Workers common options");
rspamd_rcl_add_default_handler (sub,
"count",
rspamd_rcl_parse_struct_integer,
/**
* Modules handler
*/
- sub = rspamd_rcl_add_section (&new,
+ sub = rspamd_rcl_add_section_doc (&new,
"modules", NULL,
rspamd_rcl_modules_handler,
UCL_OBJECT,
FALSE,
- FALSE);
+ FALSE,
+ cfg->doc_strings,
+ "Lua plugins to load");
/**
* Classifiers handler
*/
- sub = rspamd_rcl_add_section (&new,
+ sub = rspamd_rcl_add_section_doc (&new,
"classifier", "type",
rspamd_rcl_classifier_handler,
UCL_OBJECT,
FALSE,
- TRUE);
+ TRUE,
+ cfg->doc_strings,
+ "CLassifier options");
/* Default classifier is 'bayes' for now */
sub->default_key = "bayes";
/*
* Statfile defaults
*/
- ssub = rspamd_rcl_add_section (&sub->subsections,
+ ssub = rspamd_rcl_add_section_doc (&sub->subsections,
"statfile", "symbol",
rspamd_rcl_statfile_handler,
UCL_OBJECT,
TRUE,
- TRUE);
+ TRUE,
+ sub->doc_ref,
+ "Statfiles options");
rspamd_rcl_add_default_handler (ssub,
"label",
rspamd_rcl_parse_struct_string,
/**
* Composites handler
*/
- sub = rspamd_rcl_add_section (&new,
+ sub = rspamd_rcl_add_section_doc (&new,
"composite", "name",
rspamd_rcl_composite_handler,
UCL_OBJECT,
FALSE,
- TRUE);
+ TRUE,
+ cfg->doc_strings,
+ "Rspamd composite symbols");
/**
* Lua handler
*/
- sub = rspamd_rcl_add_section (&new,
+ sub = rspamd_rcl_add_section_doc (&new,
"lua", NULL,
rspamd_rcl_lua_handler,
UCL_STRING,
FALSE,
- TRUE);
+ TRUE,
+ cfg->doc_strings,
+ "Lua files to load");
return new;
}
}
static void
-rspamadm_confighelp_show (const ucl_object_t *obj)
+rspamadm_confighelp_show (const char *key, const ucl_object_t *obj)
{
rspamd_fstring_t *out;
}
else {
/* TODO: add lua helper for output */
+ if (key) {
+ rspamd_fprintf (stdout, "Showing help for %s:\n", key);
+ }
+ else {
+ rspamd_fprintf (stdout, "Showing help for all options:\n");
+ }
+
rspamd_ucl_emit_fstring (obj, UCL_EMIT_CONFIG, &out);
}
rspamd_fprintf (stdout, "%V", out);
+ rspamd_fprintf (stdout, "\n");
rspamd_fstring_free (out);
}
if (argc > 1) {
while (argc > 1) {
- doc_obj = ucl_lookup_path (cfg->doc_strings, argv[i]);
-
- if (doc_obj != NULL) {
- rspamadm_confighelp_show (doc_obj);
- }
- else {
- rspamd_fprintf (stderr, "Cannot find help for %s\n", argv[i]);
- ret = EXIT_FAILURE;
+ if (argv[i][0] != '-') {
+ doc_obj = ucl_lookup_path (cfg->doc_strings, argv[i]);
+
+ if (doc_obj != NULL) {
+ rspamadm_confighelp_show (argv[i], doc_obj);
+ }
+ else {
+ rspamd_fprintf (stderr,
+ "Cannot find help for %s\n",
+ argv[i]);
+ ret = EXIT_FAILURE;
+ }
}
i++;
}
else {
/* Show all documentation strings */
- rspamadm_confighelp_show (cfg->doc_strings);
+ rspamadm_confighelp_show (NULL, cfg->doc_strings);
}
exit (ret);