summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorubba Smith <corubba@gmx.de>2025-03-12 15:55:55 +0100
committerFlorian Westphal <fw@strlen.de>2025-03-12 16:28:51 +0100
commit51d46956e78b0bc204209f2fbbd0f2ce8d366aa7 (patch)
tree40ecac74ce11ded0e8981a1fe858dc06d328f1e1
parenta6229ae0bbeb8fcb7f9ee5d1dddaae98c0c71176 (diff)
ulogd: provide default configure implementation
Provide a default implementation for the configure hook which simply calls ulogd_parse_configfile(), so simple plugins only need to provide the config_keyset. This also triggers an "unknown key" error if a plugin defines no config_keyset (aka it has no options), but the config file contains directives for it. Signed-off-by: Corubba Smith <corubba@gmx.de> Signed-off-by: Florian Westphal <fw@strlen.de>
-rw-r--r--src/conffile.c7
-rw-r--r--src/ulogd.c26
2 files changed, 24 insertions, 9 deletions
diff --git a/src/conffile.c b/src/conffile.c
index 955956a..e55ff30 100644
--- a/src/conffile.c
+++ b/src/conffile.c
@@ -158,7 +158,12 @@ int config_parse_file(const char *section, struct config_keyset *kset)
}
if (!found) {
- err = -ERRSECTION;
+ if (kset->num_ces == 0) {
+ /* If there are no options, then no section isnt an error. */
+ err = 0;
+ } else {
+ err = -ERRSECTION;
+ }
goto cpf_error;
}
diff --git a/src/ulogd.c b/src/ulogd.c
index c844767..b146f94 100644
--- a/src/ulogd.c
+++ b/src/ulogd.c
@@ -856,19 +856,29 @@ create_stack_resolve_keys(struct ulogd_pluginstance_stack *stack)
/* pre-configuration pass */
llist_for_each_entry_reverse(pi_cur, &stack->list, list) {
+ int ret;
+
ulogd_log(ULOGD_DEBUG, "traversing plugin `%s'\n",
pi_cur->plugin->name);
/* call plugin to tell us which keys it requires in
* given configuration */
if (pi_cur->plugin->configure) {
- int ret = pi_cur->plugin->configure(pi_cur,
- stack);
- if (ret < 0) {
- ulogd_log(ULOGD_ERROR, "error during "
- "configure of plugin %s\n",
- pi_cur->plugin->name);
- return ret;
- }
+ ret = pi_cur->plugin->configure(pi_cur, stack);
+ } else {
+ struct config_keyset empty_kset = {.num_ces=0};
+ struct config_keyset *kset = &empty_kset;
+
+ if (pi_cur->config_kset)
+ kset = pi_cur->config_kset;
+
+ ret = ulogd_parse_configfile(pi_cur->id, kset);
+ }
+
+ if (ret < 0) {
+ ulogd_log(ULOGD_ERROR, "error during "
+ "configure of plugin %s\n",
+ pi_cur->plugin->name);
+ return ret;
}
}