On (01/07/16 17:26), Michal Židek wrote:
Hello!
This patch adds new command config-check
for sssctl tool. The output looks like this:
Issues identified by validators: 3
[rule/allowed_sections]: Section [SectionFOO] is not allowed. Check for
typos.
[rule/allowed_sssd_options]: Attribute 'unlknowww' is not allowed in section
'sssd'. Check for typos.
[rule/allowed_sssd_options]: Attribute 'unknown_option' is not allowed in
section 'sssd'. Check for typos.
Messages generated during configuration merging: 4
File conf.dd did not match provided patterns. Skipping.
Errors detected while parsing: /etc/sssd/conf.d/snip-bad.conf.
Error (5) on line 5: Equal sign is missing.
Due to errors file /etc/sssd/conf.d/snip-bad.conf is not considered.
Skipping.
Used configuration snippet files: 1
/etc/sssd/conf.d/snip-good.conf
Currently it can only be used by root and checks only
configuration in default path.
Michal
From 864091da5010b75d9c38e87ab3be467b8bc6f8f2 Mon Sep 17 00:00:00
2001
From: =?UTF-8?q?Michal=20=C5=BDidek?= <mzidek(a)redhat.com>
Date: Fri, 1 Jul 2016 15:10:30 +0200
Subject: [PATCH 1/4] sss_ini: Small refacoring of sss_ini_call_validators
Separate logic to fill errobj so that
the errors can be printed by the caller.
---
src/util/sss_ini.c | 49 ++++++++++++++++++++++++++++++++++++-------------
src/util/sss_ini.h | 12 ++++++++++++
2 files changed, 48 insertions(+), 13 deletions(-)
diff --git a/src/util/sss_ini.c b/src/util/sss_ini.c
index b4dbb07..78f5490 100644
--- a/src/util/sss_ini.c
+++ b/src/util/sss_ini.c
@@ -549,7 +549,6 @@ int sss_ini_call_validators(struct sss_ini_initdata *data,
{
#ifdef HAVE_LIBINI_CONFIG_V1_3
int ret;
- struct ini_cfgobj *rules_cfgobj = NULL;
struct ini_errobj *errobj = NULL;
ret = ini_errobj_create(&errobj);
@@ -558,17 +557,12 @@ int sss_ini_call_validators(struct sss_ini_initdata *data,
goto done;
}
- ret = ini_rules_read_from_file(rules_path, &rules_cfgobj);
+ ret = sss_ini_call_validators_errobj(data,
+ rules_path,
+ errobj);
if (ret != EOK) {
- DEBUG(SSSDBG_FATAL_FAILURE,
- "Failed to read sssd.conf schema %d [%s]\n", ret,
strerror(ret));
- goto done;
- }
-
- ret = ini_rules_check(rules_cfgobj, data->sssd_config, NULL, errobj);
- if (ret != EOK) {
- DEBUG(SSSDBG_FATAL_FAILURE,
- "ini_rules_check failed %d [%s]\n", ret, strerror(ret));
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Failed to get errors from validators.\n");
goto done;
}
@@ -579,10 +573,10 @@ int sss_ini_call_validators(struct sss_ini_initdata *data,
ini_errobj_next(errobj);
}
+ ret = EOK;
+
done:
- if (rules_cfgobj) ini_config_destroy(rules_cfgobj);
ini_errobj_destroy(&errobj);
-
return ret;
#else
DEBUG(SSSDBG_TRACE_FUNC,
@@ -590,3 +584,32 @@ done:
return EOK;
#endif /* HAVE_LIBINI_CONFIG_V1_3 */
}
+
+#ifdef HAVE_LIBINI_CONFIG_V1_3
+int sss_ini_call_validators_errobj(struct sss_ini_initdata *data,
+ const char *rules_path,
+ struct ini_errobj *errobj)
+{
+ int ret;
+ struct ini_cfgobj *rules_cfgobj = NULL;
+
+ ret = ini_rules_read_from_file(rules_path, &rules_cfgobj);
+ if (ret != EOK) {
+ DEBUG(SSSDBG_FATAL_FAILURE,
+ "Failed to read sssd.conf schema %d [%s]\n", ret,
strerror(ret));
+ goto done;
+ }
+
+ ret = ini_rules_check(rules_cfgobj, data->sssd_config, NULL, errobj);
+ if (ret != EOK) {
+ DEBUG(SSSDBG_FATAL_FAILURE,
+ "ini_rules_check failed %d [%s]\n", ret, strerror(ret));
+ goto done;
+ }
+
+done:
+ if (rules_cfgobj) ini_config_destroy(rules_cfgobj);
+
+ return ret;
+}
+#endif /* HAVE_LIBINI_CONFIG_V1_3 */
diff --git a/src/util/sss_ini.h b/src/util/sss_ini.h
index 7734bab..77943d6 100644
--- a/src/util/sss_ini.h
+++ b/src/util/sss_ini.h
@@ -27,6 +27,10 @@
#ifndef __SSS_INI_H__
#define __SSS_INI_H__
+#ifdef HAVE_LIBINI_CONFIG_V1_3
+#include <ini_configobj.h>
+#endif
+
/* Structure declarations */
/* INI data structure */
@@ -83,4 +87,12 @@ int sss_confdb_create_ldif(TALLOC_CTX *mem_ctx,
int sss_ini_call_validators(struct sss_ini_initdata *data,
const char *rules_path);
+#ifdef HAVE_LIBINI_CONFIG_V1_3
+/* Get errors from validators with ini_errobj */
+int sss_ini_call_validators_errobj(struct sss_ini_initdata *data,
+ const char *rules_path,
+ struct ini_errobj *errobj);
+#endif /* HAVE_LIBINI_CONFIG_V1_3 */
+
NACK
src/util/sss_ini.h must not contain conditional build.
That's the putpose of implementation file.
Header file shoudl contain just a prototypes
becuase there might be missing prototypes if you forgot
include "config.h" before this header file.
LS