[Pkg-sssd-devel] ding-libs: Changes to 'master'

Timo Aaltonen tjaalton at moszumanska.debian.org
Mon Sep 19 12:05:12 UTC 2016


 Makefile.am                   |   25 
 contrib/ding-libs.spec.in     |    3 
 debian/changelog              |   11 
 debian/control                |    6 
 debian/copyright              |   16 
 debian/libini-config5.symbols |   12 
 debian/rules                  |    3 
 ini/ini_augment_ut.c          |    5 
 ini/ini_config_priv.h         |   13 
 ini/ini_configobj.c           |  737 ++++++++++++++++++++++++++++
 ini/ini_configobj.h           |  192 +++++++
 ini/ini_parse.c               |   37 +
 ini/ini_parse_ut_check.c      |  152 +++++
 ini/ini_validators_ut_check.c | 1091 ++++++++++++++++++++++++++++++++++++++++++
 ini/libini_config.sym         |   15 
 version.m4                    |    4 
 16 files changed, 2292 insertions(+), 30 deletions(-)

New commits:
commit 0f59768b8d4f41271d1622894add4b423cabdb27
Author: Timo Aaltonen <tjaalton at debian.org>
Date:   Mon Sep 19 15:01:13 2016 +0300

    releasing package ding-libs version 0.6.0-1

diff --git a/debian/changelog b/debian/changelog
index e422be3..4f9c4a4 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-ding-libs (0.6.0-1) UNRELEASED; urgency=medium
+ding-libs (0.6.0-1) unstable; urgency=medium
 
   * New upstream release.
   * libini-config5.symbols: Updated.
@@ -7,7 +7,7 @@ ding-libs (0.6.0-1) UNRELEASED; urgency=medium
   * control: Bump policy to 3.9.8, no changes.
   * control: Update vcs urls to use https/anonscm/cgit.
 
- -- Timo Aaltonen <tjaalton at debian.org>  Mon, 19 Sep 2016 14:40:34 +0300
+ -- Timo Aaltonen <tjaalton at debian.org>  Mon, 19 Sep 2016 15:01:06 +0300
 
 ding-libs (0.5.0-1) unstable; urgency=medium
 

commit 0138d611eb34d2b7d8465630e400b7f157d6ba2a
Author: Timo Aaltonen <tjaalton at debian.org>
Date:   Mon Sep 19 15:00:58 2016 +0300

    control: Update vcs urls to use https/anonscm/cgit.

diff --git a/debian/changelog b/debian/changelog
index 0935c6a..e422be3 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -5,6 +5,7 @@ ding-libs (0.6.0-1) UNRELEASED; urgency=medium
   * rules: pass -c4 to dpkg-gensymbols.
   * copyright: Updated a bit.
   * control: Bump policy to 3.9.8, no changes.
+  * control: Update vcs urls to use https/anonscm/cgit.
 
  -- Timo Aaltonen <tjaalton at debian.org>  Mon, 19 Sep 2016 14:40:34 +0300
 
diff --git a/debian/control b/debian/control
index dcf423a..d34dbcc 100644
--- a/debian/control
+++ b/debian/control
@@ -10,8 +10,8 @@ Build-Depends: debhelper (>= 9),
  pkg-config,
 Standards-Version: 3.9.8
 Homepage: https://fedorahosted.org/sssd/
-Vcs-Git: git://git.debian.org/pkg-sssd/ding-libs.git
-Vcs-Browser: http://git.debian.org/?p=pkg-sssd/ding-libs.git;a=summary
+Vcs-Git: https://anonscm.debian.org/git/pkg-sssd/ding-libs.git
+Vcs-Browser: https://anonscm.debian.org/cgit/pkg-sssd/ding-libs.git
 
 Package: libpath-utils-dev
 Section: libdevel

commit 3842721057ed7dacefb552f43a997b237e2b2844
Author: Timo Aaltonen <tjaalton at debian.org>
Date:   Mon Sep 19 14:58:59 2016 +0300

    control: Bump policy to 3.9.8, no changes.

diff --git a/debian/changelog b/debian/changelog
index b191a59..0935c6a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -4,6 +4,7 @@ ding-libs (0.6.0-1) UNRELEASED; urgency=medium
   * libini-config5.symbols: Updated.
   * rules: pass -c4 to dpkg-gensymbols.
   * copyright: Updated a bit.
+  * control: Bump policy to 3.9.8, no changes.
 
  -- Timo Aaltonen <tjaalton at debian.org>  Mon, 19 Sep 2016 14:40:34 +0300
 
diff --git a/debian/control b/debian/control
index 2f6063d..dcf423a 100644
--- a/debian/control
+++ b/debian/control
@@ -8,7 +8,7 @@ Build-Depends: debhelper (>= 9),
  quilt,
  check,
  pkg-config,
-Standards-Version: 3.9.6
+Standards-Version: 3.9.8
 Homepage: https://fedorahosted.org/sssd/
 Vcs-Git: git://git.debian.org/pkg-sssd/ding-libs.git
 Vcs-Browser: http://git.debian.org/?p=pkg-sssd/ding-libs.git;a=summary

commit 1d108ee4c2c431ace41f1db07bac8c977760bd18
Author: Timo Aaltonen <tjaalton at debian.org>
Date:   Mon Sep 19 14:58:30 2016 +0300

    copyright: Updated a bit.

diff --git a/debian/changelog b/debian/changelog
index b1eccd5..b191a59 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -3,6 +3,7 @@ ding-libs (0.6.0-1) UNRELEASED; urgency=medium
   * New upstream release.
   * libini-config5.symbols: Updated.
   * rules: pass -c4 to dpkg-gensymbols.
+  * copyright: Updated a bit.
 
  -- Timo Aaltonen <tjaalton at debian.org>  Mon, 19 Sep 2016 14:40:34 +0300
 
diff --git a/debian/copyright b/debian/copyright
index 96a091b..3f83b9b 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -2,18 +2,14 @@ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
 Upstream-Name: ding-libs
 Source: https://fedorahosted.org/sssd/wiki/Releases#DING-LIBSReleases
 
+Files: *
+Copyright: 2009-2016 Dmitri Pal <dpal at redhat.com>
+License: LGPL-3+
+
 Files: basicobjects/simplebuffer*
 Copyright: 2009-2010 Dmitri Pal <dpal at redhat.com>
 License: GPL-3+
 
-Files: collection/*
-Copyright: 2009 Dmitri Pal <dpal at redhat.com>
-License: LGPL-3+
-
-Files: ini/*
-Copyright: 2009-2012 Dmitri Pal <dpal at redhat.com>
-License: LGPL-3+
-
 Files: build/ltmain.sh
 Copyright: 1996 Gordon Matzigkeit <gord at gnu.ai.mit.edu>
 License: GPL-2+
@@ -30,10 +26,6 @@ Files: refarray/*
 Copyright: 2009 Dmitri Pal <dpal at redhat.com>
 License: GPL-3+
 
-Files: trace/*
-Copyright: 2009 Dmitri Pal <dpal at redhat.com>
-License: LGPL-3+
-
 Files: debian/*
 Copyright: 2011 Fabrice Coutadeur <fabricesp at ubuntu.com>,
            2011 Jonathan Carter <jonathan at ubuntu.com>,

commit bd2675627f29313fcbcb015716a0cb7789504ac9
Author: Timo Aaltonen <tjaalton at debian.org>
Date:   Mon Sep 19 14:55:07 2016 +0300

    rules: pass -c4 to dpkg-gensymbols.

diff --git a/debian/changelog b/debian/changelog
index 9ba81a5..b1eccd5 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,6 +2,7 @@ ding-libs (0.6.0-1) UNRELEASED; urgency=medium
 
   * New upstream release.
   * libini-config5.symbols: Updated.
+  * rules: pass -c4 to dpkg-gensymbols.
 
  -- Timo Aaltonen <tjaalton at debian.org>  Mon, 19 Sep 2016 14:40:34 +0300
 
diff --git a/debian/rules b/debian/rules
index 7d1230e..ab7c542 100755
--- a/debian/rules
+++ b/debian/rules
@@ -12,3 +12,6 @@ override_dh_install:
 	find $(CURDIR)/debian/tmp/ -name '*.la' -exec rm '{}' ';'
 
 	dh_install --fail-missing
+
+override_dh_makeshlibs:
+	dh_makeshlibs -a -- -c4

commit 9ceb124f177c0f8a0d0dc30650218594bf4fed49
Author: Timo Aaltonen <tjaalton at debian.org>
Date:   Mon Sep 19 14:54:11 2016 +0300

    libini-config5.symbols: Updated.

diff --git a/debian/changelog b/debian/changelog
index e618a9a..9ba81a5 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,7 @@
 ding-libs (0.6.0-1) UNRELEASED; urgency=medium
 
   * New upstream release.
+  * libini-config5.symbols: Updated.
 
  -- Timo Aaltonen <tjaalton at debian.org>  Mon, 19 Sep 2016 14:40:34 +0300
 
diff --git a/debian/libini-config5.symbols b/debian/libini-config5.symbols
index 40144e5..7c1f9fe 100644
--- a/debian/libini-config5.symbols
+++ b/debian/libini-config5.symbols
@@ -1,6 +1,7 @@
 libini_config.so.5 libini-config5 #MINVER#
  INI_CONFIG_1.1.0 at INI_CONFIG_1.1.0 0.4.0
  INI_CONFIG_1.2.0 at INI_CONFIG_1.2.0 0.5.0
+ INI_CONFIG_1.3.0 at INI_CONFIG_1.3.0 0.6.0
  config_access_check at INI_CONFIG_1.1.0 0.4.0
  config_changed at INI_CONFIG_1.1.0 0.4.0
  config_for_app at INI_CONFIG_1.1.0 0.4.0
@@ -108,6 +109,14 @@ libini_config.so.5 libini-config5 #MINVER#
  ini_config_set_bom at INI_CONFIG_1.2.0 0.5.0
  ini_config_set_wrap at INI_CONFIG_1.1.0 0.4.0
  ini_config_update_comment at INI_CONFIG_1.2.0 0.5.0
+ ini_errobj_add_msg at INI_CONFIG_1.3.0 0.6.0
+ ini_errobj_count at INI_CONFIG_1.3.0 0.6.0
+ ini_errobj_create at INI_CONFIG_1.3.0 0.6.0
+ ini_errobj_destroy at INI_CONFIG_1.3.0 0.6.0
+ ini_errobj_get_msg at INI_CONFIG_1.3.0 0.6.0
+ ini_errobj_next at INI_CONFIG_1.3.0 0.6.0
+ ini_errobj_no_more_msgs at INI_CONFIG_1.3.0 0.6.0
+ ini_errobj_reset at INI_CONFIG_1.3.0 0.6.0
  ini_free_attribute_list at INI_CONFIG_1.1.0 0.4.0
  ini_free_bin_config_value at INI_CONFIG_1.1.0 0.4.0
  ini_free_double_config_array at INI_CONFIG_1.1.0 0.4.0
@@ -134,6 +143,9 @@ libini_config.so.5 libini-config5 #MINVER#
  ini_get_uint64_config_value at INI_CONFIG_1.1.0 0.4.0
  ini_get_ulong_config_value at INI_CONFIG_1.1.0 0.4.0
  ini_get_unsigned_config_value at INI_CONFIG_1.1.0 0.4.0
+ ini_rules_check at INI_CONFIG_1.3.0 0.6.0
+ ini_rules_destroy at INI_CONFIG_1.3.0 0.6.0
+ ini_rules_read_from_file at INI_CONFIG_1.3.0 0.6.0
  print_config_parsing_errors at INI_CONFIG_1.1.0 0.4.0
  print_file_parsing_errors at INI_CONFIG_1.1.0 0.4.0
  value_add_to_arrays at INI_CONFIG_1.1.0 0.4.0

commit fe82faad334ade551dc8f86d5935e30774f45bc9
Author: Timo Aaltonen <tjaalton at debian.org>
Date:   Mon Sep 19 14:45:01 2016 +0300

    update changelog

diff --git a/debian/changelog b/debian/changelog
index bb6894a..e618a9a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+ding-libs (0.6.0-1) UNRELEASED; urgency=medium
+
+  * New upstream release.
+
+ -- Timo Aaltonen <tjaalton at debian.org>  Mon, 19 Sep 2016 14:40:34 +0300
+
 ding-libs (0.5.0-1) unstable; urgency=medium
 
   * New upstream release.

commit a62db8ede4deba10a385d7aee218fbb293f653bf
Author: Lukas Slebodnik <lslebodn at redhat.com>
Date:   Wed Jun 22 10:46:44 2016 +0200

    Update versions before 0.6.0 release
    
    Reviewed-by: Jakub Hrozek <jhrozek at redhat.com>

diff --git a/version.m4 b/version.m4
index 8f4ce54..08814fe 100644
--- a/version.m4
+++ b/version.m4
@@ -1,5 +1,5 @@
 # Primary version number
-m4_define([VERSION_NUMBER], [0.5.0])
+m4_define([VERSION_NUMBER], [0.6.0])
 
 # If the PRERELEASE_VERSION_NUMBER is set, we'll append
 # it to the release tag when creating an RPM or SRPM
@@ -15,4 +15,4 @@ m4_define([DHASH_VERSION_NUMBER], [0.4.3])
 m4_define([COLLECTION_VERSION_NUMBER], [0.7.0])
 m4_define([REF_ARRAY_VERSION_NUMBER], [0.1.5])
 m4_define([BASICOBJECTS_VERSION_NUMBER], [0.1.1])
-m4_define([INI_CONFIG_VERSION_NUMBER], [1.2.0])
+m4_define([INI_CONFIG_VERSION_NUMBER], [1.3.0])

commit 65110b180638b69978e31d522951bfa2c2040790
Author: Lukas Slebodnik <lslebodn at redhat.com>
Date:   Wed Jun 22 10:45:09 2016 +0200

    Bump version-info
    
    New functions were added to ini_config:
        /* ini_configobj.h */
        ini_errobj_create;
        ini_errobj_destroy;
        ini_errobj_add_msg;
        ini_errobj_reset;
        ini_errobj_get_msg;
        ini_errobj_count;
        ini_errobj_next;
        ini_errobj_no_more_msgs;
        ini_rules_read_from_file;
        ini_rules_check;
        ini_rules_destroy;
    
    Reviewed-by: Jakub Hrozek <jhrozek at redhat.com>

diff --git a/Makefile.am b/Makefile.am
index bd6c423..65528a8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -276,7 +276,7 @@ libini_config_la_LIBADD = \
     libref_array.la \
     libbasicobjects.la
 libini_config_la_LDFLAGS = \
-    -version-info 6:0:1 \
+    -version-info 7:0:2 \
     -Wl,--version-script=$(top_srcdir)/ini/libini_config.sym
 
 dist_noinst_DATA += \
diff --git a/contrib/ding-libs.spec.in b/contrib/ding-libs.spec.in
index 93c520c..3fc079c 100644
--- a/contrib/ding-libs.spec.in
+++ b/contrib/ding-libs.spec.in
@@ -304,7 +304,7 @@ structure
 %doc COPYING
 %doc COPYING.LESSER
 %{_libdir}/libini_config.so.5
-%{_libdir}/libini_config.so.5.1.0
+%{_libdir}/libini_config.so.5.2.0
 
 %files -n libini_config-devel
 %defattr(-,root,root,-)

commit de04fef6462e66303f7fc673738d83d0d98025ef
Author: Lukas Slebodnik <lslebodn at redhat.com>
Date:   Wed Jun 22 09:13:04 2016 +0200

    INI: Prepare for schema validation
    
    Pointer to function ini_schema_validator_func will be an optional
    and can be used to schema validation. It shoul also prepare data
    for validator function if last output argument is not NULL.
    These prepared data will be passed to validator function as
    a 5th argument of ini_validator_func. These two functions
    are responsible for memory management of passed additional data.
    
    It isn't an API/ABI change because lib_iniconfig has not been released yet.
    
    Reviewed-by: Jakub Hrozek <jhrozek at redhat.com>

diff --git a/ini/ini_configobj.c b/ini/ini_configobj.c
index f7efb88..04e81ba 100644
--- a/ini/ini_configobj.c
+++ b/ini/ini_configobj.c
@@ -1082,7 +1082,8 @@ done:
 static int ini_dummy_noerror(const char *rule_name,
                              struct ini_cfgobj *rules_obj,
                              struct ini_cfgobj *config_obj,
-                             struct ini_errobj *errobj)
+                             struct ini_errobj *errobj,
+                             void **data)
 {
     return 0;
 }
@@ -1091,7 +1092,8 @@ static int ini_dummy_noerror(const char *rule_name,
 static int ini_dummy_error(const char *rule_name,
                            struct ini_cfgobj *rules_obj,
                            struct ini_cfgobj *config_obj,
-                           struct ini_errobj *errobj)
+                           struct ini_errobj *errobj,
+                           void **data)
 {
     return ini_errobj_add_msg(errobj, "Error");
 }
@@ -1133,7 +1135,8 @@ static int is_allowed_section(const char *tested_section,
 static int ini_allowed_sections(const char *rule_name,
                                 struct ini_cfgobj *rules_obj,
                                 struct ini_cfgobj *config_obj,
-                                struct ini_errobj *errobj)
+                                struct ini_errobj *errobj,
+                                void **data)
 {
     struct value_obj *vo = NULL;
     int ret;
@@ -1357,7 +1360,8 @@ static int check_if_allowed(char *section, char *attr, char **allowed,
 static int ini_allowed_options(const char *rule_name,
                                struct ini_cfgobj *rules_obj,
                                struct ini_cfgobj *config_obj,
-                               struct ini_errobj *errobj)
+                               struct ini_errobj *errobj,
+                               void **data)
 {
     struct value_obj *vo = NULL;
     int ret;
@@ -1620,7 +1624,7 @@ int ini_rules_check(struct ini_cfgobj *rules_obj,
                 goto done;
             }
 
-            ret = vfunc(sections[i], rules_obj, config_obj, localerr);
+            ret = vfunc(sections[i], rules_obj, config_obj, localerr, NULL);
             if (ret != 0) {
                 /* Just report the error and continue normally,
                  * maybe there are some errors in localerr */
diff --git a/ini/ini_configobj.h b/ini/ini_configobj.h
index 648ef87..093916a 100644
--- a/ini/ini_configobj.h
+++ b/ini/ini_configobj.h
@@ -2165,7 +2165,13 @@ size_t ini_errobj_count(struct ini_errobj *errobj);
 typedef int (ini_validator_func)(const char *rule_name,
                                  struct ini_cfgobj *rules_obj,
                                  struct ini_cfgobj *config_obj,
-                                 struct ini_errobj *errobj);
+                                 struct ini_errobj *errobj,
+                                 void **data);
+
+typedef int (ini_schema_validator_func)(const char *rule_name,
+                                        struct ini_cfgobj *rules_obj,
+                                        struct ini_errobj *errobj,
+                                        void **data);
 
 /** @brief Structure used to define application specific
  * (external to libini) validator
@@ -2173,6 +2179,8 @@ typedef int (ini_validator_func)(const char *rule_name,
 struct ini_validator {
     const char *name;
     ini_validator_func *func;
+    /* currently unused, for future expansion */
+    ini_schema_validator_func *schema_validator;
 };
 
 /**
diff --git a/ini/ini_validators_ut_check.c b/ini/ini_validators_ut_check.c
index 9aadc3c..fa7105a 100644
--- a/ini/ini_validators_ut_check.c
+++ b/ini/ini_validators_ut_check.c
@@ -280,7 +280,8 @@ END_TEST
 static int custom_noerror(const char *rule_name,
                           struct ini_cfgobj *rules_obj,
                           struct ini_cfgobj *config_obj,
-                          struct ini_errobj *errobj)
+                          struct ini_errobj *errobj,
+                          void **data)
 {
     return 0;
 }
@@ -288,7 +289,8 @@ static int custom_noerror(const char *rule_name,
 static int custom_error(const char *rule_name,
                         struct ini_cfgobj *rules_obj,
                         struct ini_cfgobj *config_obj,
-                        struct ini_errobj *errobj)
+                        struct ini_errobj *errobj,
+                        void **data)
 {
     return ini_errobj_add_msg(errobj, "Error");
 }
@@ -300,12 +302,12 @@ START_TEST(test_custom_noerror)
     struct ini_errobj *errobj;
     int ret;
     struct ini_validator *noerror[] = {
-        &(struct ini_validator){ "custom_noerror", custom_noerror },
+        &(struct ini_validator){ "custom_noerror", custom_noerror, NULL },
         NULL
     };
     struct ini_validator *missing_name[] = {
-        &(struct ini_validator){ NULL, custom_noerror },
-        &(struct ini_validator){ "custom_noerror", custom_noerror },
+        &(struct ini_validator){ NULL, custom_noerror, NULL },
+        &(struct ini_validator){ "custom_noerror", custom_noerror, NULL },
         NULL
     };
 
@@ -351,11 +353,11 @@ START_TEST(test_custom_error)
     struct ini_errobj *errobj;
     int ret;
     struct ini_validator *error[] = {
-        &(struct ini_validator){ "custom_error", custom_error },
+        &(struct ini_validator){ "custom_error", custom_error, NULL },
         NULL
     };
     struct ini_validator *missing_function[] = {
-        &(struct ini_validator){ "custom_noerror", NULL },
+        &(struct ini_validator){ "custom_noerror", NULL, NULL },
         NULL
     };
     const char *errmsg;

commit 5078bf8cd465289b2bdd8ac0a334ee5eb7500888
Author: Lukas Slebodnik <lslebodn at redhat.com>
Date:   Wed Jun 22 00:50:50 2016 +0200

    INI: Reduce count of argumets for ini_rules_check
    
    We can use NULL terminated array of pointers instead of
    two argumets: array + length of array.
    
    It isn't an API change because lib_iniconfig has not been released yet.
    
    Reviewed-by: Jakub Hrozek <jhrozek at redhat.com>

diff --git a/ini/ini_configobj.c b/ini/ini_configobj.c
index d79a8f3..f7efb88 100644
--- a/ini/ini_configobj.c
+++ b/ini/ini_configobj.c
@@ -1515,10 +1515,9 @@ done:
 
 static ini_validator_func *
 get_validator(char *validator_name,
-              struct ini_validator *validators,
-              int num_validators)
+              struct ini_validator **validators)
 {
-    int i;
+    struct ini_validator *ext_validator;
 
     /* First we check all internal validators */
     if (strcmp(validator_name, "ini_dummy_noerror") == 0) {
@@ -1531,18 +1530,19 @@ get_validator(char *validator_name,
         return ini_allowed_sections;
     }
 
-    /* Now check the custom validators */
     if (validators == NULL) {
         return NULL;
     }
 
-    for (i = 0; i < num_validators; i++) {
+    for (; *validators != NULL; ++validators) {
+        ext_validator = *validators;
+
         /* Skip invalid external validator. Name is required */
-        if (validators[i].name == NULL) {
+        if (ext_validator->name == NULL) {
             continue;
         }
-        if (strcmp(validator_name, validators[i].name) == 0) {
-            return validators[i].func;
+        if (strcmp(validator_name, ext_validator->name) == 0) {
+            return ext_validator->func;
         }
     }
 
@@ -1551,8 +1551,7 @@ get_validator(char *validator_name,
 
 int ini_rules_check(struct ini_cfgobj *rules_obj,
                     struct ini_cfgobj *config_obj,
-                    struct ini_validator *extra_validators,
-                    int num_extra_validators,
+                    struct ini_validator **extra_validators,
                     struct ini_errobj *errobj)
 {
     char **sections;
@@ -1598,8 +1597,7 @@ int ini_rules_check(struct ini_cfgobj *rules_obj,
             }
 
             vname = ini_get_string_config_value(vo, NULL);
-            vfunc = get_validator(vname, extra_validators,
-                                  num_extra_validators);
+            vfunc = get_validator(vname, extra_validators);
             if (vfunc == NULL) {
                 ret = ini_errobj_add_msg(errobj,
                                          "Rule '%s' uses unknown "
diff --git a/ini/ini_configobj.h b/ini/ini_configobj.h
index 4f47e78..648ef87 100644
--- a/ini/ini_configobj.h
+++ b/ini/ini_configobj.h
@@ -2206,11 +2206,9 @@ int ini_rules_read_from_file(const char *filename,
  * @param[in] rules_obj            config object representing the rules
  * @param[in] config_obj           config object representing the
  *                                 configuration
- * @param[in] extra_validators     Array of extrenal validators. Can be
- *                                 NULL if no external validators are
- *                                 used.
- * @param[in] num_extra_validators Number of external validators in
- *                                 extra_validators array.
+ * @param[in] extra_validators     NULL terminated array of external
+ *                                 validators. Can be NULL if no external
+ *                                 validators are used.
  *
  * @param[in] errobj               errobj to store generated errors
  *                                 from validators.
@@ -2219,8 +2217,7 @@ int ini_rules_read_from_file(const char *filename,
  */
 int ini_rules_check(struct ini_cfgobj *rules_obj,
                     struct ini_cfgobj *config_obj,
-                    struct ini_validator *extra_validators,
-                    int num_extra_validators,
+                    struct ini_validator **extra_validators,
                     struct ini_errobj *errobj);
 
 /**
diff --git a/ini/ini_validators_ut_check.c b/ini/ini_validators_ut_check.c
index de8738b..9aadc3c 100644
--- a/ini/ini_validators_ut_check.c
+++ b/ini/ini_validators_ut_check.c
@@ -169,7 +169,7 @@ START_TEST(test_ini_noerror)
     ret = ini_errobj_create(&errobj);
     fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
 
-    ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
+    ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
     fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
     fail_unless(ini_errobj_no_more_msgs(errobj));
 
@@ -205,7 +205,7 @@ START_TEST(test_ini_error)
     ret = ini_errobj_create(&errobj);
     fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
 
-    ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
+    ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
     fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
 
     /* Should generate exactly one error */
@@ -225,7 +225,7 @@ START_TEST(test_ini_error)
     ret = ini_errobj_create(&errobj);
     fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
 
-    ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
+    ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
     fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
 
     /* Should generate exactly one error */
@@ -263,7 +263,7 @@ START_TEST(test_unknown_validator)
     ret = ini_errobj_create(&errobj);
     fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
 
-    ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
+    ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
     fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
 
     /* Should generate exactly one error */
@@ -299,10 +299,14 @@ START_TEST(test_custom_noerror)
     struct ini_cfgobj *cfg_obj;
     struct ini_errobj *errobj;
     int ret;
-    struct ini_validator noerror = { "custom_noerror", custom_noerror };
-    struct ini_validator missing_name[] = {
-        { NULL, custom_noerror },
-        { "custom_noerror", custom_noerror },
+    struct ini_validator *noerror[] = {
+        &(struct ini_validator){ "custom_noerror", custom_noerror },
+        NULL
+    };
+    struct ini_validator *missing_name[] = {
+        &(struct ini_validator){ NULL, custom_noerror },
+        &(struct ini_validator){ "custom_noerror", custom_noerror },
+        NULL
     };
 
     char input_rules[] =
@@ -320,7 +324,7 @@ START_TEST(test_custom_noerror)
     fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
 
     /* Pass the custom validator to ini_rules_check() */
-    ret = ini_rules_check(rules_obj, cfg_obj, &noerror, 1, errobj);
+    ret = ini_rules_check(rules_obj, cfg_obj, noerror, errobj);
     fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
 
     /* Should generate no errors */
@@ -328,7 +332,7 @@ START_TEST(test_custom_noerror)
 
     /* Pass wrong external validator to ini_rules_check() */
     /* It should be skipped */
-    ret = ini_rules_check(rules_obj, cfg_obj, missing_name, 2, errobj);
+    ret = ini_rules_check(rules_obj, cfg_obj, missing_name, errobj);
     fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
 
     /* Should generate no errors */
@@ -346,9 +350,13 @@ START_TEST(test_custom_error)
     struct ini_cfgobj *cfg_obj;
     struct ini_errobj *errobj;
     int ret;
-    struct ini_validator error = { "custom_error", custom_error };
-    struct ini_validator missing_function[] = {
-        { "custom_noerror", NULL },
+    struct ini_validator *error[] = {
+        &(struct ini_validator){ "custom_error", custom_error },
+        NULL
+    };
+    struct ini_validator *missing_function[] = {
+        &(struct ini_validator){ "custom_noerror", NULL },
+        NULL
     };
     const char *errmsg;
 
@@ -367,7 +375,7 @@ START_TEST(test_custom_error)
     fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
 
     /* Pass the custom validator to ini_rules_check() */
-    ret = ini_rules_check(rules_obj, cfg_obj, &error, 1, errobj);
+    ret = ini_rules_check(rules_obj, cfg_obj, error, errobj);
     fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
 
     /* Should generate one error */
@@ -384,7 +392,7 @@ START_TEST(test_custom_error)
     fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
 
     /* Pass the custom validator to ini_rules_check() */
-    ret = ini_rules_check(rules_obj, cfg_obj, missing_function, 1, errobj);
+    ret = ini_rules_check(rules_obj, cfg_obj, missing_function, errobj);
 
     /* Should generate one error for missing validator */
     fail_if(ini_errobj_no_more_msgs(errobj));
@@ -433,7 +441,7 @@ START_TEST(test_ini_allowed_options_ok)
     ret = ini_errobj_create(&errobj);
     fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
 
-    ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
+    ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
     fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
 
     /* Should generate no errors */
@@ -482,7 +490,7 @@ START_TEST(test_ini_allowed_options_no_section)
     ret = ini_errobj_create(&errobj);
     fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
 
-    ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
+    ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
     fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
 
     /* Should generate 2 errors (one from rules_check and one
@@ -516,7 +524,7 @@ START_TEST(test_ini_allowed_options_no_section)
     ret = ini_errobj_create(&errobj);
     fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
 
-    ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
+    ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
     fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
 
     /* Should generate 2 errors (one from rules_check and one
@@ -576,7 +584,7 @@ START_TEST(test_ini_allowed_options_wrong_regex)
     ret = ini_errobj_create(&errobj);
     fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
 
-    ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
+    ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
     fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
 
     /* Should generate 2 errors (one from rules_check and one
@@ -638,7 +646,7 @@ START_TEST(test_ini_allowed_options_typos)
     ret = ini_errobj_create(&errobj);
     fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
 
-    ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
+    ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
     fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
 
     /* Should generate 4 errors */
@@ -681,7 +689,7 @@ START_TEST(test_ini_allowed_sections_str_ok)
     ret = ini_errobj_create(&errobj);
     fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
 
-    ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
+    ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
     fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
 
     /* Should generate 0 errors */
@@ -723,7 +731,7 @@ START_TEST(test_ini_allowed_sections_str_typos)
     ret = ini_errobj_create(&errobj);
     fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
 
-    ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
+    ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
     fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
 
     /* Should generate 2 errors */
@@ -778,7 +786,7 @@ START_TEST(test_ini_allowed_sections_str_insensitive)
                     "ini_errobj_create() failed for case_insensitive = %s: %s",
                     case_insensitive_values[i], strerror(ret));
 
-        ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
+        ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
         fail_unless(ret == 0,
                     "ini_rules_check() failed for case_insensitive = %s: %s",
                     case_insensitive_values[i], strerror(ret));
@@ -822,7 +830,7 @@ START_TEST(test_ini_allowed_sections_re_ok)
     ret = ini_errobj_create(&errobj);
     fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
 
-    ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
+    ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
     fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
 
     /* Should generate 0 errors */
@@ -862,7 +870,7 @@ START_TEST(test_ini_allowed_sections_re_typos)
     ret = ini_errobj_create(&errobj);
     fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
 
-    ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
+    ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
     fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
 
     /* Should generate 2 errors */
@@ -906,7 +914,7 @@ START_TEST(test_ini_allowed_sections_re_insensitive)
     ret = ini_errobj_create(&errobj);
     fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
 
-    ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
+    ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
     fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
 
     /* Should generate 0 errors */
@@ -946,7 +954,7 @@ START_TEST(test_ini_allowed_sections_missing_section)
     ret = ini_errobj_create(&errobj);
     fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
 
-    ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
+    ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
     fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
 
     /* Should generate 1 errors */
@@ -999,7 +1007,7 @@ START_TEST(test_ini_allowed_sections_wrong_regex)
     ret = ini_errobj_create(&errobj);
     fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
 
-    ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
+    ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
     fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
 
     /* Should generate 2 errors */

commit 9873816acd0b77c5557524116654ca075870f8ec
Author: Lukas Slebodnik <lslebodn at redhat.com>
Date:   Tue Jun 21 23:01:25 2016 +0200

    INI: Extend validator unit test for corner cases
    
    Reviewed-by: Jakub Hrozek <jhrozek at redhat.com>

diff --git a/ini/ini_validators_ut_check.c b/ini/ini_validators_ut_check.c
index 78dc7d6..de8738b 100644
--- a/ini/ini_validators_ut_check.c
+++ b/ini/ini_validators_ut_check.c
@@ -93,6 +93,11 @@ START_TEST(test_ini_errobj)
     const char TEST_MSG2[] = "Test message two.";
     const char TEST_MSG3[] = "Test message three.";
 
+    ret = ini_errobj_create(NULL);
+    fail_unless(ret == EINVAL,
+                "ini_errobj_create(NULL) failed with wrong error [%s]",
+                strerror(ret));
+
     ret = ini_errobj_create(&errobj);
     fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
 
@@ -186,6 +191,10 @@ START_TEST(test_ini_error)
         "[rule/generate_error]\n"
         "validator = ini_dummy_error\n";
 
+    char input_wrong_rule[] =
+        "[rule/generate_error]\n"
+        "valid = ini_dummy_error\n";
+
     char input_cfg[] =
         "[section]\n"
         "# Content of this file should not matter\n";
@@ -203,13 +212,33 @@ START_TEST(test_ini_error)
     fail_if(ini_errobj_no_more_msgs(errobj));
     errmsg = ini_errobj_get_msg(errobj);
     ret = strcmp(errmsg, "[rule/generate_error]: Error");
-    fail_unless(ret == 0, "Got msg: %s", errmsg);
+    fail_unless(ret == 0, "Got msg: [%s]", errmsg);
+    ini_errobj_next(errobj);
+    fail_unless(ini_errobj_no_more_msgs(errobj));
+
+    ini_errobj_destroy(&errobj);
+    ini_rules_destroy(rules_obj);
+
+    /* test rule with missing validator */
+    create_rules_from_str(input_wrong_rule, &rules_obj);
+
+    ret = ini_errobj_create(&errobj);
+    fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
+
+    ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
+    fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
+
+    /* Should generate exactly one error */
+    fail_if(ini_errobj_no_more_msgs(errobj));
+    errmsg = ini_errobj_get_msg(errobj);
+    ret = strcmp(errmsg, "Rule 'rule/generate_error' has no validator.");
+    fail_unless(ret == 0, "Got msg: [%s]", errmsg);
     ini_errobj_next(errobj);
     fail_unless(ini_errobj_no_more_msgs(errobj));
 
     ini_errobj_destroy(&errobj);
-    ini_config_destroy(cfg_obj);
     ini_rules_destroy(rules_obj);
+    ini_config_destroy(cfg_obj);
 }
 END_TEST
 
@@ -271,6 +300,10 @@ START_TEST(test_custom_noerror)
     struct ini_errobj *errobj;
     int ret;
     struct ini_validator noerror = { "custom_noerror", custom_noerror };
+    struct ini_validator missing_name[] = {
+        { NULL, custom_noerror },
+        { "custom_noerror", custom_noerror },
+    };
 
     char input_rules[] =
         "[rule/custom_succeed]\n"
@@ -293,6 +326,14 @@ START_TEST(test_custom_noerror)
     /* Should generate no errors */
     fail_unless(ini_errobj_no_more_msgs(errobj));
 
+    /* Pass wrong external validator to ini_rules_check() */
+    /* It should be skipped */
+    ret = ini_rules_check(rules_obj, cfg_obj, missing_name, 2, errobj);
+    fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
+
+    /* Should generate no errors */
+    fail_unless(ini_errobj_no_more_msgs(errobj), "%s", ini_errobj_get_msg(errobj));
+
     ini_errobj_destroy(&errobj);
     ini_config_destroy(cfg_obj);
     ini_rules_destroy(rules_obj);
@@ -306,6 +347,9 @@ START_TEST(test_custom_error)
     struct ini_errobj *errobj;
     int ret;
     struct ini_validator error = { "custom_error", custom_error };
+    struct ini_validator missing_function[] = {
+        { "custom_noerror", NULL },
+    };
     const char *errmsg;
 
     char input_rules[] =
@@ -330,13 +374,32 @@ START_TEST(test_custom_error)
     fail_if(ini_errobj_no_more_msgs(errobj));
     errmsg = ini_errobj_get_msg(errobj);
     ret = strcmp(errmsg, "[rule/custom_error]: Error");
-    fail_unless(ret == 0, "Got msg: %s", errmsg);
+    fail_unless(ret == 0, "Got msg: [%s]", errmsg);
     ini_errobj_next(errobj);
     fail_unless(ini_errobj_no_more_msgs(errobj));
 
     ini_errobj_destroy(&errobj);
-    ini_config_destroy(cfg_obj);
+
+    ret = ini_errobj_create(&errobj);
+    fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
+
+    /* Pass the custom validator to ini_rules_check() */
+    ret = ini_rules_check(rules_obj, cfg_obj, missing_function, 1, errobj);
+
+    /* Should generate one error for missing validator */
+    fail_if(ini_errobj_no_more_msgs(errobj));
+    errmsg = ini_errobj_get_msg(errobj);
+    ret = strcmp(errmsg,
+                 "Rule 'rule/custom_error' uses unknown validator "
+                 "'custom_error'.");
+    fail_unless(ret == 0, "Got msg: [%s]", errmsg);
+    ini_errobj_next(errobj);
+    fail_unless(ini_errobj_no_more_msgs(errobj));
+
+    ini_errobj_destroy(&errobj);
+
     ini_rules_destroy(rules_obj);
+    ini_config_destroy(cfg_obj);
 }
 END_TEST
 
@@ -389,6 +452,7 @@ START_TEST(test_ini_allowed_options_no_section)
     struct ini_errobj *errobj;
     int ret;
     size_t num_err;
+    const char *errmsg;
 
     /* Ommit section_re to generate error */
     char input_rules[] =
@@ -398,6 +462,14 @@ START_TEST(test_ini_allowed_options_no_section)
         "option = bar\n"
         "option = baz\n";
 
+    /* section_re without value */
+    char input_rules2[] =
+        "[rule/options_for_foo]\n"
+        "validator = ini_allowed_options\n"
+        "section_re = \n"
+        "option = bar\n"
+        "option = baz\n";
+
     /* Make 4 typos */



More information about the Pkg-sssd-devel mailing list