On 07/01/2016 05:35 PM, Lukas Slebodnik wrote:
> 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
Ok,
I did some refactoring so that the errobj is not
used as parameter to the functions to avoid the
conditions in .h file.
See the attached patches.
I also pushed it to CI:
http://sssd-ci.idm.lab.eng.brq.redhat.com:8080/job/ci/4722/
Michal
Lukas requested some changes off list.
New patches attached.
I also pushed it to CI: