summaryrefslogtreecommitdiffstats
path: root/src/util/sss_ini.c
diff options
context:
space:
mode:
authorMichal Židek <mzidek@redhat.com>2016-06-22 19:11:42 +0200
committerJakub Hrozek <jhrozek@redhat.com>2016-06-27 22:25:27 +0200
commit8b2a31634764168183506925a4b9f461afdba6f3 (patch)
treee2c922c85a073f28db47e77daea84fd4cb558b17 /src/util/sss_ini.c
parentcca497b4cbbbf05c4f9181b7d8113cde81754831 (diff)
downloadsssd-8b2a31634764168183506925a4b9f461afdba6f3.tar.gz
sssd-8b2a31634764168183506925a4b9f461afdba6f3.tar.xz
sssd-8b2a31634764168183506925a4b9f461afdba6f3.zip
confdb: Check for config file errors on sssd startup
Resolves: https://fedorahosted.org/sssd/ticket/2028 Signed-off-by: Lukas Slebodnik <lslebodn@redhat.com> Reviewed-by: Lukáš Slebodník <lslebodn@redhat.com> Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
Diffstat (limited to 'src/util/sss_ini.c')
-rw-r--r--src/util/sss_ini.c49
1 files changed, 47 insertions, 2 deletions
diff --git a/src/util/sss_ini.c b/src/util/sss_ini.c
index 667447e17..b4dbb0772 100644
--- a/src/util/sss_ini.c
+++ b/src/util/sss_ini.c
@@ -59,8 +59,6 @@ struct sss_ini_initdata {
#define sss_ini_get_const_string_config_value ini_get_const_string_config_value
#define sss_ini_get_config_obj ini_get_config_valueobj
-
-
#else
struct sss_ini_initdata {
@@ -545,3 +543,50 @@ error:
talloc_free(ldif);
return ret;
}
+
+int sss_ini_call_validators(struct sss_ini_initdata *data,
+ const char *rules_path)
+{
+#ifdef HAVE_LIBINI_CONFIG_V1_3
+ int ret;
+ struct ini_cfgobj *rules_cfgobj = NULL;
+ struct ini_errobj *errobj = NULL;
+
+ ret = ini_errobj_create(&errobj);
+ if (ret != EOK) {
+ DEBUG(SSSDBG_FATAL_FAILURE, "Failed to create error list\n");
+ goto done;
+ }
+
+ 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;
+ }
+
+ /* Do not error out when validators find some issue */
+ while (!ini_errobj_no_more_msgs(errobj)) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "%s\n", ini_errobj_get_msg(errobj));
+ ini_errobj_next(errobj);
+ }
+
+done:
+ if (rules_cfgobj) ini_config_destroy(rules_cfgobj);
+ ini_errobj_destroy(&errobj);
+
+ return ret;
+#else
+ DEBUG(SSSDBG_TRACE_FUNC,
+ "libini_config does not support configuration file validataion\n");
+ return EOK;
+#endif /* HAVE_LIBINI_CONFIG_V1_3 */
+}