From anbe at debian.org Sat Aug 1 14:19:13 2015 From: anbe at debian.org (Andreas Beckmann) Date: Sat, 01 Aug 2015 16:19:13 +0200 Subject: [Pkg-sssd-devel] Bug#794332: sssd-common: deletes conffile owned by sssd: /etc/logrotate.d/sssd Message-ID: <20150801141913.703.2901.reportbug@zam581.zam.kfa-juelich.de> Package: sssd-common Version: 1.12.5-2 Severity: serious User: debian-qa at lists.debian.org Usertags: piuparts Control: affects -1 + sssd Hi, during a test with piuparts I noticed your package deletes an (obsolete) conffile owned another package. The chosen approach is wrong since it does not update dpkg's database. debsums reports modification of the following files, from the attached log (scroll to the bottom...): 2m6.8s ERROR: FAIL: debsums reports modifications inside the chroot: debsums: missing file /etc/logrotate.d/sssd (from sssd package) The correct approach should be (but I didn't test this): * drop manual cleanup from sssd-common maintainer scripts * add debian/sssd.maintscript containing ===== 8< ===== rm_conffile /etc/logrotate.d/sssd 1.12.5-3~ ===== >8 ===== cheers, Andreas -------------- next part -------------- A non-text attachment was scrubbed... Name: sssd_1.12.5-2.log.gz Type: application/gzip Size: 47398 bytes Desc: not available URL: From owner at bugs.debian.org Sat Aug 1 14:21:07 2015 From: owner at bugs.debian.org (Debian Bug Tracking System) Date: Sat, 01 Aug 2015 14:21:07 +0000 Subject: [Pkg-sssd-devel] Processed: sssd-common: deletes conffile owned by sssd: /etc/logrotate.d/sssd References: <20150801141913.703.2901.reportbug@zam581.zam.kfa-juelich.de> <20150801141913.703.2901.reportbug@zam581.zam.kfa-juelich.de> Message-ID: Processing control commands: > affects -1 + sssd Bug #794332 [sssd-common] sssd-common: deletes conffile owned by sssd: /etc/logrotate.d/sssd Added indication that 794332 affects sssd -- 794332: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=794332 Debian Bug Tracking System Contact owner at bugs.debian.org with problems From tjaalton at debian.org Fri Aug 7 10:31:05 2015 From: tjaalton at debian.org (Timo Aaltonen) Date: Fri, 07 Aug 2015 13:31:05 +0300 Subject: [Pkg-sssd-devel] sssd-ad for wheezy backports In-Reply-To: <1342261362.317819.1438163288652.JavaMail.zimbra@kangaroot.net> References: <1342261362.317819.1438163288652.JavaMail.zimbra@kangaroot.net> Message-ID: <55C488E9.6080201@debian.org> On 29.07.2015 12:48, Nils Cant wrote: > Hi there, > > I have just installed sssd from wheezy backports, only to find out from the changelog that the sssd-ad package has been disabled in the build. > Is there a specific reason why sssd-ad can't/won't be built for wheezy-backports? (samba4 is also available in wheezy-backports) > > Thanks in advance, > > Nils Right, I didn't notice the samba backport before the sssd backport had been uploaded already.. but the sssd-ad stuff needs newer MIT krb5 too (IIRC), and I'm told it's going to be backported at some point. Then sssd can be uncrippled. -- t From noreply at release.debian.org Sun Aug 9 04:39:05 2015 From: noreply at release.debian.org (Debian testing autoremoval watch) Date: Sun, 09 Aug 2015 04:39:05 +0000 Subject: [Pkg-sssd-devel] sssd is marked for autoremoval from testing Message-ID: sssd 1.12.5-2 is marked for autoremoval from testing on 2015-09-14 It is affected by these RC bugs: 794332: sssd-common: deletes conffile owned by sssd: /etc/logrotate.d/sssd From tjaalton at moszumanska.debian.org Sat Aug 15 22:30:19 2015 From: tjaalton at moszumanska.debian.org (Timo Aaltonen) Date: Sat, 15 Aug 2015 22:30:19 +0000 Subject: [Pkg-sssd-devel] ding-libs: Changes to 'master' Message-ID: Makefile.am | 63 + collection/collection.c | 266 +++++- collection/collection.h | 180 ++++ collection/collection_ut.c | 338 +++++++ collection/libcollection.sym | 8 contrib/ding-libs.spec.in | 13 debian/changelog | 9 debian/control | 2 debian/libcollection4.symbols | 4 debian/libini-config-dev.install | 1 debian/libini-config5.symbols | 32 ini/ini.d/merge.validator | 60 + ini/ini.d/real.conf | 2 ini/ini2.d/real16be.conf |binary ini/ini2.d/real16le.conf |binary ini/ini2.d/real32be.conf |binary ini/ini2.d/real32le.conf |binary ini/ini2.d/real8.conf | 54 + ini/ini_augment.c | 972 ++++++++++++++++++++++ ini/ini_augment_ut.c | 390 ++++++++ ini/ini_comment.c | 59 + ini/ini_comment.h | 13 ini/ini_comment_ut.c | 38 ini/ini_config.cfg.doxy.in | 2 ini/ini_config_priv.h | 9 ini/ini_config_ut.c | 5 ini/ini_configmod.c | 1607 ++++++++++++++++++++++++++++++++++++ ini/ini_configmod.h | 767 +++++++++++++++++ ini/ini_configmod_ut.c | 1153 ++++++++++++++++++++++++++ ini/ini_configmod_ut_check.c | 1695 +++++++++++++++++++++++++++++++++++++++ ini/ini_configobj.h | 306 ++++++- ini/ini_defines.h | 9 ini/ini_fileobj.c | 879 +++++++++++++++++++- ini/ini_get_valueobj.c | 2 ini/ini_parse.c | 13 ini/ini_print.c | 2 ini/ini_save_ut.c | 259 +++++ ini/ini_valueobj.c | 7 ini/libini_config.sym | 42 refarray/ref_array.c | 5 version.m4 | 8 41 files changed, 9137 insertions(+), 137 deletions(-) New commits: commit 3688579dfc52e3aa21e2156ebc9da4d516916d61 Author: Timo Aaltonen Date: Sun Aug 16 01:30:07 2015 +0300 releasing package ding-libs version 0.5.0-1 diff --git a/debian/changelog b/debian/changelog index 504f0d3..bb6894a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,11 +1,11 @@ -ding-libs (0.5.0-1) UNRELEASED; urgency=medium +ding-libs (0.5.0-1) unstable; urgency=medium * New upstream release. * libini-config-dev.install: Add ini_configmod.h. * libcollection4.symbols, libini-config5.symbols: Updated. * control: Bump policy to 3.9.6, no changes. - -- Timo Aaltonen Sun, 16 Aug 2015 01:17:12 +0300 + -- Timo Aaltonen Sun, 16 Aug 2015 01:26:53 +0300 ding-libs (0.4.0-1) unstable; urgency=medium commit 346385bc10cea031ddc9b985a0c0728c36775bdf Author: Timo Aaltonen Date: Sun Aug 16 01:26:47 2015 +0300 control: Bump policy to 3.9.6, no changes. diff --git a/debian/changelog b/debian/changelog index b570741..504f0d3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,6 +3,7 @@ ding-libs (0.5.0-1) UNRELEASED; urgency=medium * New upstream release. * libini-config-dev.install: Add ini_configmod.h. * libcollection4.symbols, libini-config5.symbols: Updated. + * control: Bump policy to 3.9.6, no changes. -- Timo Aaltonen Sun, 16 Aug 2015 01:17:12 +0300 diff --git a/debian/control b/debian/control index 02d07fa..2f6063d 100644 --- a/debian/control +++ b/debian/control @@ -8,7 +8,7 @@ Build-Depends: debhelper (>= 9), quilt, check, pkg-config, -Standards-Version: 3.9.5 +Standards-Version: 3.9.6 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 9fb15824b47ca6ba1c16e822a5db44d6381a0ad2 Author: Timo Aaltonen Date: Sun Aug 16 01:26:09 2015 +0300 libcollection4.symbols, libini-config5.symbols: Updated. diff --git a/debian/changelog b/debian/changelog index 19da5c5..b570741 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,6 +2,7 @@ ding-libs (0.5.0-1) UNRELEASED; urgency=medium * New upstream release. * libini-config-dev.install: Add ini_configmod.h. + * libcollection4.symbols, libini-config5.symbols: Updated. -- Timo Aaltonen Sun, 16 Aug 2015 01:17:12 +0300 diff --git a/debian/libcollection4.symbols b/debian/libcollection4.symbols index 0faff56..85a411d 100644 --- a/debian/libcollection4.symbols +++ b/debian/libcollection4.symbols @@ -1,5 +1,6 @@ libcollection.so.4 libcollection4 #MINVER# COLLECTION_0.6.2 at COLLECTION_0.6.2 0.4.0 + COLLECTION_0.7 at COLLECTION_0.7 0.5.0 col_add_any_property at COLLECTION_0.6.2 0.4.0 col_add_any_property_with_ref at COLLECTION_0.6.2 0.4.0 col_add_binary_property at COLLECTION_0.6.2 0.4.0 @@ -31,6 +32,7 @@ libcollection.so.4 libcollection4 #MINVER# col_debug_handle at COLLECTION_0.6.2 0.4.0 col_debug_item at COLLECTION_0.6.2 0.4.0 col_delete_item at COLLECTION_0.6.2 0.4.0 + col_delete_item_with_cb at COLLECTION_0.7 0.5.0 col_delete_property at COLLECTION_0.6.2 0.4.0 col_dequeue_item at COLLECTION_0.6.2 0.4.0 col_destroy_collection at COLLECTION_0.6.2 0.4.0 @@ -54,6 +56,7 @@ libcollection.so.4 libcollection4 #MINVER# col_get_collection_count at COLLECTION_0.6.2 0.4.0 col_get_collection_reference at COLLECTION_0.6.2 0.4.0 col_get_data_len at COLLECTION_0.6.2 0.4.0 + col_get_dup_item at COLLECTION_0.7 0.5.0 col_get_item at COLLECTION_0.6.2 0.4.0 col_get_item_and_do at COLLECTION_0.6.2 0.4.0 col_get_item_data at COLLECTION_0.6.2 0.4.0 @@ -117,6 +120,7 @@ libcollection.so.4 libcollection4 #MINVER# col_put_marker at COLLECTION_0.6.2 0.4.0 col_remove_item at COLLECTION_0.6.2 0.4.0 col_remove_item_from_current at COLLECTION_0.6.2 0.4.0 + col_remove_item_with_cb at COLLECTION_0.7 0.5.0 col_rewind_iterator at COLLECTION_0.6.2 0.4.0 col_serialize at COLLECTION_0.6.2 0.4.0 col_set_collection_class at COLLECTION_0.6.2 0.4.0 diff --git a/debian/libini-config5.symbols b/debian/libini-config5.symbols index 4a6de98..40144e5 100644 --- a/debian/libini-config5.symbols +++ b/debian/libini-config5.symbols @@ -1,5 +1,6 @@ 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 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 @@ -42,6 +43,7 @@ libini_config.so.5 libini-config5 #MINVER# ini_comment_build at INI_CONFIG_1.1.0 0.4.0 ini_comment_build_wl at INI_CONFIG_1.1.0 0.4.0 ini_comment_clear at INI_CONFIG_1.1.0 0.4.0 + ini_comment_construct at INI_CONFIG_1.2.0 0.5.0 ini_comment_copy at INI_CONFIG_1.1.0 0.4.0 ini_comment_create at INI_CONFIG_1.1.0 0.4.0 ini_comment_destroy at INI_CONFIG_1.1.0 0.4.0 @@ -55,12 +57,36 @@ libini_config.so.5 libini-config5 #MINVER# ini_comment_serialize at INI_CONFIG_1.1.0 0.4.0 ini_comment_swap at INI_CONFIG_1.1.0 0.4.0 ini_config_access_check at INI_CONFIG_1.1.0 0.4.0 + ini_config_add_bin_value at INI_CONFIG_1.2.0 0.5.0 + ini_config_add_const_str_arr_value at INI_CONFIG_1.2.0 0.5.0 + ini_config_add_double_arr_value at INI_CONFIG_1.2.0 0.5.0 + ini_config_add_double_value at INI_CONFIG_1.2.0 0.5.0 + ini_config_add_int32_value at INI_CONFIG_1.2.0 0.5.0 + ini_config_add_int64_value at INI_CONFIG_1.2.0 0.5.0 + ini_config_add_int_arr_value at INI_CONFIG_1.2.0 0.5.0 + ini_config_add_int_value at INI_CONFIG_1.2.0 0.5.0 + ini_config_add_long_arr_value at INI_CONFIG_1.2.0 0.5.0 + ini_config_add_long_value at INI_CONFIG_1.2.0 0.5.0 + ini_config_add_section at INI_CONFIG_1.2.0 0.5.0 + ini_config_add_str_arr_value at INI_CONFIG_1.2.0 0.5.0 + ini_config_add_str_value at INI_CONFIG_1.2.0 0.5.0 + ini_config_add_uint32_value at INI_CONFIG_1.2.0 0.5.0 + ini_config_add_uint64_value at INI_CONFIG_1.2.0 0.5.0 + ini_config_add_ulong_value at INI_CONFIG_1.2.0 0.5.0 + ini_config_add_unsigned_value at INI_CONFIG_1.2.0 0.5.0 + ini_config_augment at INI_CONFIG_1.2.0 0.5.0 + ini_config_change_access at INI_CONFIG_1.2.0 0.5.0 ini_config_changed at INI_CONFIG_1.1.0 0.4.0 ini_config_clean_state at INI_CONFIG_1.1.0 0.4.0 + ini_config_comment_section at INI_CONFIG_1.2.0 0.5.0 ini_config_copy at INI_CONFIG_1.1.0 0.4.0 ini_config_create at INI_CONFIG_1.1.0 0.4.0 + ini_config_delete_section_by_name at INI_CONFIG_1.2.0 0.5.0 + ini_config_delete_section_by_position at INI_CONFIG_1.2.0 0.5.0 + ini_config_delete_value at INI_CONFIG_1.2.0 0.5.0 ini_config_destroy at INI_CONFIG_1.1.0 0.4.0 ini_config_error_count at INI_CONFIG_1.1.0 0.4.0 + ini_config_file_backup at INI_CONFIG_1.2.0 0.5.0 ini_config_file_close at INI_CONFIG_1.1.0 0.4.0 ini_config_file_destroy at INI_CONFIG_1.1.0 0.4.0 ini_config_file_from_mem at INI_CONFIG_1.1.0 0.4.0 @@ -68,14 +94,20 @@ libini_config.so.5 libini-config5 #MINVER# ini_config_file_print at INI_CONFIG_1.1.0 0.4.0 ini_config_file_reopen at INI_CONFIG_1.1.0 0.4.0 ini_config_free_errors at INI_CONFIG_1.1.0 0.4.0 + ini_config_get_bom at INI_CONFIG_1.2.0 0.5.0 ini_config_get_errors at INI_CONFIG_1.1.0 0.4.0 ini_config_get_filename at INI_CONFIG_1.1.0 0.4.0 ini_config_get_stat at INI_CONFIG_1.1.0 0.4.0 ini_config_merge at INI_CONFIG_1.1.0 0.4.0 ini_config_parse at INI_CONFIG_1.1.0 0.4.0 ini_config_print_errors at INI_CONFIG_1.1.0 0.4.0 + ini_config_rename_section at INI_CONFIG_1.2.0 0.5.0 + ini_config_save at INI_CONFIG_1.2.0 0.5.0 + ini_config_save_as at INI_CONFIG_1.2.0 0.5.0 ini_config_serialize at INI_CONFIG_1.1.0 0.4.0 + 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_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 commit 30180368f921c395fa8af4f37f0d5cdf29963dec Author: Timo Aaltonen Date: Sun Aug 16 01:20:13 2015 +0300 libini-config-dev.install: Add ini_configmod.h. diff --git a/debian/changelog b/debian/changelog index e2b91f3..19da5c5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,7 @@ ding-libs (0.5.0-1) UNRELEASED; urgency=medium * New upstream release. + * libini-config-dev.install: Add ini_configmod.h. -- Timo Aaltonen Sun, 16 Aug 2015 01:17:12 +0300 diff --git a/debian/libini-config-dev.install b/debian/libini-config-dev.install index a87d1fa..1aab609 100644 --- a/debian/libini-config-dev.install +++ b/debian/libini-config-dev.install @@ -1,5 +1,6 @@ usr/include/ini_comment.h usr/include/ini_config.h +usr/include/ini_configmod.h usr/include/ini_configobj.h usr/include/ini_valueobj.h usr/lib/*/libini_config.a commit fc7da09724f7a09a816f26d30f1a2688033b7f9f Author: Timo Aaltonen Date: Sun Aug 16 01:17:43 2015 +0300 update the changelog diff --git a/debian/changelog b/debian/changelog index 5b2247d..e2b91f3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +ding-libs (0.5.0-1) UNRELEASED; urgency=medium + + * New upstream release. + + -- Timo Aaltonen Sun, 16 Aug 2015 01:17:12 +0300 + ding-libs (0.4.0-1) unstable; urgency=medium * New upstream release. commit 4b3c284e3978ad569deed38489e57041dca604c0 Author: Lukas Slebodnik Date: Tue Jun 23 12:51:13 2015 +0200 Update versions before 0.5.0 release Version for libcollection was already updated with patch: df4d87161410bb6ab11105e74d2232cca6730f8b Function to return one of the dups Reviewed-by: Jakub Hrozek diff --git a/version.m4 b/version.m4 index 45ff9e2..8f4ce54 100644 --- a/version.m4 +++ b/version.m4 @@ -1,5 +1,5 @@ # Primary version number -m4_define([VERSION_NUMBER], [0.4.0]) +m4_define([VERSION_NUMBER], [0.5.0]) # If the PRERELEASE_VERSION_NUMBER is set, we'll append # it to the release tag when creating an RPM or SRPM @@ -13,6 +13,6 @@ m4_define([PRERELEASE_VERSION_NUMBER], []) m4_define([PATH_UTILS_VERSION_NUMBER], [0.2.1]) m4_define([DHASH_VERSION_NUMBER], [0.4.3]) m4_define([COLLECTION_VERSION_NUMBER], [0.7.0]) -m4_define([REF_ARRAY_VERSION_NUMBER], [0.1.4]) +m4_define([REF_ARRAY_VERSION_NUMBER], [0.1.5]) m4_define([BASICOBJECTS_VERSION_NUMBER], [0.1.1]) -m4_define([INI_CONFIG_VERSION_NUMBER], [1.1.0]) +m4_define([INI_CONFIG_VERSION_NUMBER], [1.2.0]) commit 7689460153b056b4064af6ed06a34915530b11a7 Author: Lukas Slebodnik Date: Tue Jun 23 12:50:53 2015 +0200 Bump version-info The function ref_array_debug was updated. There wasn't any other changes to ref_array. New functions were added to collections: col_get_dup_item, col_delete_item_with_cb, col_remove_item_with_cb New functions were added to ini_config: ini_config_augment, ini_comment_construct and many functions from ini_configmod.h Reviewed-by: Jakub Hrozek diff --git a/Makefile.am b/Makefile.am index e37884e..5b1da33 100644 --- a/Makefile.am +++ b/Makefile.am @@ -142,7 +142,7 @@ libcollection_la_SOURCES = \ trace/trace.h libcollection_la_DEPENDENCIES = collection/libcollection.sym libcollection_la_LDFLAGS = \ - -version-info 4:0:0 \ + -version-info 5:0:1 \ -Wl,--version-script=$(top_srcdir)/collection/libcollection.sym check_PROGRAMS += \ @@ -180,7 +180,7 @@ libref_array_la_SOURCES = \ trace/trace.h libref_array_la_DEPENDENCIES = refarray/libref_array.sym libref_array_la_LDFLAGS = \ - -version-info 3:0:2 \ + -version-info 3:1:2 \ -Wl,--version-script=$(top_srcdir)/refarray/libref_array.sym check_PROGRAMS += ref_array_ut @@ -268,7 +268,7 @@ libini_config_la_LIBADD = \ libref_array.la \ libbasicobjects.la libini_config_la_LDFLAGS = \ - -version-info 5:0:0 \ + -version-info 6:0:1 \ -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 54d8b97..fe180ff 100644 --- a/contrib/ding-libs.spec.in +++ b/contrib/ding-libs.spec.in @@ -174,7 +174,7 @@ and serialization %doc COPYING %doc COPYING.LESSER %{_libdir}/libcollection.so.4 -%{_libdir}/libcollection.so.4.0.0 +%{_libdir}/libcollection.so.4.1.0 %files -n libcollection-devel %defattr(-,root,root,-) @@ -218,7 +218,7 @@ A dynamically-growing, reference-counted array %doc COPYING %doc COPYING.LESSER %{_libdir}/libref_array.so.1 -%{_libdir}/libref_array.so.1.2.0 +%{_libdir}/libref_array.so.1.2.1 %files -n libref_array-devel %defattr(-,root,root,-) @@ -303,7 +303,7 @@ structure %doc COPYING %doc COPYING.LESSER %{_libdir}/libini_config.so.5 -%{_libdir}/libini_config.so.5.0.0 +%{_libdir}/libini_config.so.5.1.0 %files -n libini_config-devel %defattr(-,root,root,-) commit 4d7e92836d8582a8af2f2885d4fcae34fd14b662 Author: Lukas Slebodnik Date: Tue Jun 23 10:16:34 2015 +0200 INI: Add check based test ini_configmod_ut_check Signed-off-by: Lukas Slebodnik Reviewed-by: Jakub Hrozek diff --git a/Makefile.am b/Makefile.am index a3bbbb7..e37884e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -69,8 +69,8 @@ libpath_utils_la_LDFLAGS = \ -Wl,--version-script=$(top_srcdir)/path_utils/libpath_utils.sym if HAVE_CHECK - check_PROGRAMS += path_utils_ut - TESTS += path_utils_ut + check_PROGRAMS += path_utils_ut ini_configmod_ut_check + TESTS += path_utils_ut ini_configmod_ut_check endif path_utils_ut_SOURCES = path_utils/path_utils_ut.c @@ -341,6 +341,13 @@ ini_configmod_ut_SOURCES = ini/ini_configmod_ut.c ini_configmod_ut_LDADD = libini_config.la libcollection.la \ libbasicobjects.la libpath_utils.la libref_array.la +ini_configmod_ut_check_SOURCES = ini/ini_configmod_ut_check.c +ini_configmod_ut_check_CFLAGS = $(AM_CFLAGS) $(CHECK_CFLAGS) +ini_configmod_ut_check_LDADD = libini_config.la libcollection.la \ + libbasicobjects.la libpath_utils.la \ + libref_array.la \ + $(CHECK_LIBS) + ini_save_ut_SOURCES = ini/ini_save_ut.c ini_save_ut_LDADD = libini_config.la libcollection.la \ libbasicobjects.la libpath_utils.la libref_array.la diff --git a/ini/ini_configmod_ut_check.c b/ini/ini_configmod_ut_check.c new file mode 100644 index 0000000..75d6874 --- /dev/null +++ b/ini/ini_configmod_ut_check.c @@ -0,0 +1,1695 @@ +/* + INI LIBRARY + + Unit test for the configuration object modification API. + + Copyright (C) Lukas Slebodnik 2015 + + INI Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + INI Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with INI Library. If not, see . +*/ + +#include "config.h" + +#include +#include +#include +#include +#include + +/* #define TRACE_LEVEL 7 */ +#define TRACE_HOME +#include "trace.h" +#include "ini_configobj.h" +#include "ini_config_priv.h" +#include "collection_tools.h" +#include "ini_configmod.h" +#include "path_utils.h" +#include "../basicobjects/simplebuffer.h" + +int verbose = 0; + +#define WRAP_SIZE 80 + +static void dump_configuration(struct ini_cfgobj *in_cfg, + FILE *file) +{ + int ret; + struct simplebuffer *sbobj = NULL; + void *buff; + uint32_t len; + + ret = simplebuffer_alloc(&sbobj); + fail_unless(ret == EOK, + "Failed to allocate buffer. Error %d.\n", ret); + + ret = ini_config_serialize(in_cfg, sbobj); + fail_unless(ret == EOK, + "Failed to serialize. Error %d.\n", ret); + + buff = simplebuffer_get_vbuf(sbobj); + len = simplebuffer_get_len(sbobj); + ret = fwrite(buff, 1, len, file); + fail_if(ret == -1, + "Failed to write to file. Error: %d %s\n", ret, strerror(ret)); + + simplebuffer_free(sbobj); + return; +} + +static int call_diff(const char *function, + const char *expected_cfg, + size_t expected_cfg_len, + const char *res_cfg, + size_t res_cfg_len) +{ + char expected_fn[PATH_MAX]; + char res_fn[PATH_MAX]; + char command[PATH_MAX * 3]; + char *builddir; + int ret; + int expected_fd; + int res_fd; + + builddir = getenv("builddir"); + + snprintf(expected_fn, PATH_MAX, "%s/expected.conf_%s_XXXXXX", + (builddir == NULL) ? "." : builddir, function); + snprintf(res_fn, PATH_MAX, "%s/result.conf_%s_XXXXXX", + (builddir == NULL) ? "." : builddir, function); + + expected_fd = mkstemp(expected_fn); + fail_if(expected_fd == -1, "mkstemp failed: %s\n", strerror(errno)); + + ret = write(expected_fd, expected_cfg, expected_cfg_len); + fail_if(ret == -1, + "Failed write to %s. Error %s\n", + expected_fn, strerror(errno)); + + close(expected_fd); + + res_fd = mkstemp(res_fn); + fail_if(res_fd == -1, "mkstemp failed: %s\n", strerror(errno)); + + ret = write(res_fd, res_cfg, res_cfg_len); + fail_if(ret == -1, + "Failed write to %s. Error %s\n", + expected_fn, strerror(errno)); + close(res_fd); + + snprintf(command, PATH_MAX * 3, "diff -wi %s %s", expected_fn, res_fn); + ret = system(command); + fail_if(ret == -1, + "Failed to execute command:%s. Erorr %s\n", + command, strerror(errno)); + + return EOK; +} + +#define assert_configuration_equal(expected_cfg, expected_cfg_len, res_cfg) \ + _assert_configuration_equal(expected_cfg, expected_cfg_len, res_cfg, \ + __func__, __FILE__, __LINE__) +static void _assert_configuration_equal(const char *expected_cfg, + size_t expected_cfg_len, + struct ini_cfgobj *res_cfg, + const char *function, + const char *file, + int line) +{ + char *res_buffer = NULL; + size_t res_buffer_size; + FILE *f_memstream; + int ret; + + --expected_cfg_len; /* do not use trailing zero */ + + f_memstream = open_memstream(&res_buffer, &res_buffer_size); + fail_if(f_memstream == NULL, + "\n\t[%s:%d] open_memstream failed.", file, line); + + dump_configuration(res_cfg, f_memstream); + fclose(f_memstream); + + fail_unless(expected_cfg_len == res_buffer_size, + "\n\t[%s:%d] Size of expected config %zu and result config %d " + "does not match. Res:%d\n", + file, line, expected_cfg_len, res_buffer_size, + call_diff(function, expected_cfg, expected_cfg_len, + res_buffer, res_buffer_size)); + + ret = memcmp(res_buffer, expected_cfg, expected_cfg_len); + fail_unless(ret == EOK, + "\n\t[%s:%d] Configurations are not identical. Res:%d\n", + file, line, + call_diff(function, expected_cfg, expected_cfg_len, + res_buffer, res_buffer_size)); + + free(res_buffer); +} + +static struct ini_cfgobj *get_ini_config_from_str(char input_data[], + size_t input_data_len) +{ + struct ini_cfgobj *in_cfg; + struct ini_cfgfile *file_ctx; + int ret; + + ret = ini_config_create(&in_cfg); + fail_unless(ret == EOK, "Failed to create config. Error %d.\n", ret); + + ret = ini_config_file_from_mem(input_data, input_data_len, &file_ctx); + fail_unless(ret == EOK, "Failed to load config. Error %d.\n", ret); + + ret = ini_config_parse(file_ctx, INI_STOP_ON_NONE, INI_MV1S_ALLOW, 0, + in_cfg); + fail_unless(ret == EOK, "Failed to parse config. Error %d.\n", ret); + + ini_config_file_destroy(file_ctx); + + return in_cfg; +} + +START_TEST(test_delete_value_wrong_arguments) +{ + int ret = EOK; + struct ini_cfgobj *in_cfg = NULL; + + char exp_data[] = + "[zero]\n" + "[one]\n" + "key1 = value1a\n"; + + in_cfg = get_ini_config_from_str(exp_data, sizeof(exp_data)); + assert_configuration_equal(exp_data, sizeof(exp_data), in_cfg); + + /* missing ini_config */ + ret = ini_config_delete_value(NULL, "one", COL_DSP_NDUP, "key1", 0); + fail_unless(ret == EINVAL, "delete value should fail. Error: %d", ret); + assert_configuration_equal(exp_data, sizeof(exp_data), in_cfg); + + /* missing section */ + ret = ini_config_delete_value(in_cfg, NULL, COL_DSP_NDUP, "key1", 0); + fail_unless(ret == EINVAL, "delete value should fail. Error: %d", ret); + assert_configuration_equal(exp_data, sizeof(exp_data), in_cfg); + + /* missing key */ + ret = ini_config_delete_value(in_cfg, "one", COL_DSP_NDUP, NULL, 0); + fail_unless(ret == EINVAL, "delete value should fail. Error: %d", ret); + assert_configuration_equal(exp_data, sizeof(exp_data), in_cfg); + + /* value index is too low */ + ret = ini_config_delete_value(in_cfg, "one", COL_DSP_NDUP, "key1", -1); + fail_unless(ret == EINVAL, "delete value should fail. Error: %d", ret); + assert_configuration_equal(exp_data, sizeof(exp_data), in_cfg); + + /* value index is too high */ + ret = ini_config_delete_value(in_cfg, "one", COL_DSP_NDUP, "key1", 1); + fail_unless(ret == ENOENT, "delete value should fail. Error: %d", ret); + assert_configuration_equal(exp_data, sizeof(exp_data), in_cfg); + + ini_config_destroy(in_cfg); +} +END_TEST + +START_TEST(test_delete_value) +{ + int ret = EOK; + struct ini_cfgobj *in_cfg; + + char input_data[] = + "[zero]\n" + "[one]\n" + "key1 = first\n" + "key1 = second\n" + "key1 = third\n" + "key1 = last\n"; + + char delete_first[] = + "[zero]\n" + "[one]\n" + "key1 = first\n" + "key1 = second\n" + "key1 = third\n"; + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + ret = ini_config_delete_value(in_cfg, "one", COL_DSP_NDUP, "key1", 3); + fail_unless(ret == EOK, "delete value should fail. Error: %d", ret); + assert_configuration_equal(delete_first, sizeof(delete_first), in_cfg); + + ini_config_destroy(in_cfg); +} +END_TEST + +START_TEST(test_update_comments_wrong_arguments) +{ + int ret = EOK; + struct ini_cfgobj *in_cfg; + + char input_data[] = + "[one]\n" + "key1 = value1\n" + "key1 = value1a\n" + "key1 = value1a_bis\n" + "// This is a test\n" + "key1 = value1b\n" + "key1 = value1c\n" + "key2 = value2\n" + "key3 = value3\n"; + + const char *comment[] = { "// This is a test", NULL }; + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* missing ini_config */ + ret = ini_config_update_comment(NULL, "one", "key1", comment, 1, 3); + fail_unless(ret == EINVAL, "update commants should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* missing section */ + ret = ini_config_update_comment(in_cfg, NULL, "key1", comment, 1, 3); + fail_unless(ret == EINVAL, "update commants should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* missing key */ + ret = ini_config_update_comment(in_cfg, "one", NULL, comment, 1, 3); + fail_unless(ret == EINVAL, "update commants should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* wrong section */ + ret = ini_config_update_comment(in_cfg, "noexist", "key1", comment, 1, 3); + fail_unless(ret == ENOENT, "update commants should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* wrong key */ + ret = ini_config_update_comment(in_cfg, "one", "noexist", comment, 1, 3); + fail_unless(ret == ENOENT, "update commants should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* value index is too low */ + ret = ini_config_update_comment(in_cfg, "one", "key1", comment, 1, -1); + fail_unless(ret == EINVAL, "update commants should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* value index is too high */ + ret = ini_config_update_comment(in_cfg, "one", "key1", comment, 1, 5); + fail_unless(ret == ENOENT, "update commants should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + ini_config_destroy(in_cfg); +} +END_TEST + +START_TEST(test_update_comments) +{ + int ret = EOK; + struct ini_cfgobj *in_cfg; + + char input_data[] = + "[one]\n" + "key1 = value1\n" + "key1 = value1a\n" + "key1 = value1a_bis\n" + "key1 = value1b\n" + "// this is a comment\n" + "key1 = value1c\n" + "key2 = value2\n" + "key3 = value3\n"; + + char exp_data_1comment[] = + "[one]\n" + "// This is a test1\n" + "key1 = value1\n" + "key1 = value1a\n" + "key1 = value1a_bis\n" + "key1 = value1b\n" + "// this is a comment\n" + "key1 = value1c\n" + "key2 = value2\n" + "key3 = value3\n"; + + char exp_data_2comments[] = + "[one]\n" + "// This is a test1\n" + "// This is a test2\n" + "key1 = value1\n" + "key1 = value1a\n" + "key1 = value1a_bis\n" + "key1 = value1b\n" + "// this is a comment\n" + "key1 = value1c\n" + "key2 = value2\n" + "key3 = value3\n"; + + char exp_data_1comment_after2[] = + "[one]\n" + "key1 = value1\n" + "key1 = value1a\n" + "// This is a test1\n" + "key1 = value1a_bis\n" + "key1 = value1b\n" + "// this is a comment\n" + "key1 = value1c\n" + "key2 = value2\n" + "key3 = value3\n"; + + char exp_replaced[] = + "[one]\n" + "key1 = value1\n" + "key1 = value1a\n" + "key1 = value1a_bis\n" + "key1 = value1b\n" + "// This is a test1\n" + "// This is a test2\n" + "key1 = value1c\n" + "key2 = value2\n" + "key3 = value3\n"; + + char exp_removed_comment[] = + "[one]\n" + "key1 = value1\n" + "key1 = value1a\n" + "key1 = value1a_bis\n" + "key1 = value1b\n" + "key1 = value1c\n" + "key2 = value2\n" + "key3 = value3\n"; + + const char *comments[] = { "// This is a test1", "// This is a test2", + NULL }; + + const char *empty_comment[] = { NULL }; + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* add comments with size */ + ret = ini_config_update_comment(in_cfg, "one", "key1", comments, 1, 0); + fail_unless(ret == EOK, "update commants should fail. Error: %d", ret); + assert_configuration_equal(exp_data_1comment, sizeof(exp_data_1comment), + in_cfg); + ini_config_destroy(in_cfg); + + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* add comments with size */ + ret = ini_config_update_comment(in_cfg, "one", "key1", comments, 2, 0); + fail_unless(ret == EOK, "update commants should fail. Error: %d", ret); + assert_configuration_equal(exp_data_2comments, sizeof(exp_data_2comments), + in_cfg); + ini_config_destroy(in_cfg); + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* add comments (NULL terminated array), size is 0 */ + ret = ini_config_update_comment(in_cfg, "one", "key1", comments, 0, 0); + fail_unless(ret == EOK, "update commants should fail. Error: %d", ret); + assert_configuration_equal(exp_data_2comments, sizeof(exp_data_2comments), + in_cfg); + ini_config_destroy(in_cfg); + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* add comments (NULL terminated array), size is 0 */ + ret = ini_config_update_comment(in_cfg, "one", "key1", comments, 1, 2); + fail_unless(ret == EOK, "update commants should fail. Error: %d", ret); + assert_configuration_equal(exp_data_1comment_after2, + sizeof(exp_data_1comment_after2), + in_cfg); + ini_config_destroy(in_cfg); + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* replace comment */ + ret = ini_config_update_comment(in_cfg, "one", "key1", comments, 0, 4); + fail_unless(ret == EOK, "update commants should fail. Error: %d", ret); + assert_configuration_equal(exp_replaced, sizeof(exp_replaced), + in_cfg); + ini_config_destroy(in_cfg); + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* remove comment */ + ret = ini_config_update_comment(in_cfg, "one", "key1", + empty_comment, 0, 4); + fail_unless(ret == EOK, "update commants should fail. Error: %d", ret); + assert_configuration_equal(exp_removed_comment, + sizeof(exp_removed_comment), + in_cfg); + ini_config_destroy(in_cfg); + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* remove comment (2nd way; argument is NULL) */ + ret = ini_config_update_comment(in_cfg, "one", "key1", + NULL, 0, 4); + fail_unless(ret == EOK, "update commants should fail. Error: %d", ret); + assert_configuration_equal(exp_removed_comment, + sizeof(exp_removed_comment), + in_cfg); + ini_config_destroy(in_cfg); +} +END_TEST + +START_TEST(test_add_str_wrong_arguments) +{ + int ret = EOK; + struct ini_cfgobj *in_cfg; + + char input_data[] = + "[zero]\n" + "[one]\n" + "key1 = value1a\n"; + + const char *comments[] = { "// This is a test1", "// This is a test2", + NULL }; + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* missing ini_config */ + ret = ini_config_add_str_value(NULL, "one", "newkey", "newvalue", + comments, 2, WRAP_SIZE, COL_DSP_END, "key1", + 0, INI_VA_NOCHECK); + fail_unless(ret == EINVAL, "Add str should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* missing section */ + ret = ini_config_add_str_value(in_cfg, NULL, "newkey", "newvalue", + comments, 2, WRAP_SIZE, COL_DSP_END, "key1", + 0, INI_VA_NOCHECK); + fail_unless(ret == EINVAL, "Add str should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* missing key */ + ret = ini_config_add_str_value(in_cfg, "one", NULL, "newvalue", + comments, 2, WRAP_SIZE, COL_DSP_END, "key1", + 0, INI_VA_NOCHECK); + fail_unless(ret == EINVAL, "Add str should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* missing value */ + ret = ini_config_add_str_value(in_cfg, "one", "newkey", NULL, + comments, 2, WRAP_SIZE, COL_DSP_END, "key1", + 0, INI_VA_NOCHECK); + fail_unless(ret == EINVAL, "Add str should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* wrong index */ + ret = ini_config_add_str_value(in_cfg, "one", "newkey", "newvalue", + comments, 2, WRAP_SIZE, COL_DSP_END, "key1", + -1, INI_VA_NOCHECK); + fail_unless(ret == EINVAL, "Add str should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* wrong flag */ + ret = ini_config_add_str_value(in_cfg, "one", "newkey", "newvalue", + comments, 2, WRAP_SIZE, COL_DSP_END, "key1", + 0, 0xff); + fail_unless(ret == ENOSYS, "Add str should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* add duplicate for missing key */ + ret = ini_config_add_str_value(in_cfg, "one", "newkey", "newvalue", + comments, 2, WRAP_SIZE, COL_DSP_NDUP, + "key1", 0, INI_VA_NOCHECK); + fail_unless(ret == ENOENT, "Add str should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + ini_config_destroy(in_cfg); +} +END_TEST + +START_TEST(test_add_str_simple) +{ + int ret = EOK; + struct ini_cfgobj *in_cfg; + + char input_data[] = + "[zero]\n" + "[one]\n" + "key1 = value1a\n" + "key1 = value1b\n" + "key2 = value2a\n"; + + const char *comments[] = { "// This is a test1", "// This is a test2", + NULL }; + + char add_new_value_to_end[] = From tjaalton at moszumanska.debian.org Sat Aug 15 22:30:19 2015 From: tjaalton at moszumanska.debian.org (Timo Aaltonen) Date: Sat, 15 Aug 2015 22:30:19 +0000 Subject: [Pkg-sssd-devel] ding-libs: Changes to 'upstream' Message-ID: Makefile.am | 63 + collection/collection.c | 266 +++++- collection/collection.h | 180 ++++ collection/collection_ut.c | 338 ++++++++ collection/libcollection.sym | 8 contrib/ding-libs.spec.in | 13 ini/ini.d/merge.validator | 60 + ini/ini.d/real.conf | 2 ini/ini2.d/real16be.conf |binary ini/ini2.d/real16le.conf |binary ini/ini2.d/real32be.conf |binary ini/ini2.d/real32le.conf |binary ini/ini2.d/real8.conf | 54 + ini/ini_augment.c | 972 ++++++++++++++++++++++++ ini/ini_augment_ut.c | 390 +++++++++ ini/ini_comment.c | 59 + ini/ini_comment.h | 13 ini/ini_comment_ut.c | 38 ini/ini_config.cfg.doxy.in | 2 ini/ini_config_priv.h | 9 ini/ini_config_ut.c | 5 ini/ini_configmod.c | 1607 ++++++++++++++++++++++++++++++++++++++++ ini/ini_configmod.h | 767 +++++++++++++++++++ ini/ini_configmod_ut.c | 1153 +++++++++++++++++++++++++++++ ini/ini_configmod_ut_check.c | 1695 +++++++++++++++++++++++++++++++++++++++++++ ini/ini_configobj.h | 306 +++++++ ini/ini_defines.h | 9 ini/ini_fileobj.c | 879 +++++++++++++++++++++- ini/ini_get_valueobj.c | 2 ini/ini_parse.c | 13 ini/ini_print.c | 2 ini/ini_save_ut.c | 259 ++++++ ini/ini_valueobj.c | 7 ini/libini_config.sym | 42 + refarray/ref_array.c | 5 version.m4 | 8 36 files changed, 9090 insertions(+), 136 deletions(-) New commits: commit 4b3c284e3978ad569deed38489e57041dca604c0 Author: Lukas Slebodnik Date: Tue Jun 23 12:51:13 2015 +0200 Update versions before 0.5.0 release Version for libcollection was already updated with patch: df4d87161410bb6ab11105e74d2232cca6730f8b Function to return one of the dups Reviewed-by: Jakub Hrozek diff --git a/version.m4 b/version.m4 index 45ff9e2..8f4ce54 100644 --- a/version.m4 +++ b/version.m4 @@ -1,5 +1,5 @@ # Primary version number -m4_define([VERSION_NUMBER], [0.4.0]) +m4_define([VERSION_NUMBER], [0.5.0]) # If the PRERELEASE_VERSION_NUMBER is set, we'll append # it to the release tag when creating an RPM or SRPM @@ -13,6 +13,6 @@ m4_define([PRERELEASE_VERSION_NUMBER], []) m4_define([PATH_UTILS_VERSION_NUMBER], [0.2.1]) m4_define([DHASH_VERSION_NUMBER], [0.4.3]) m4_define([COLLECTION_VERSION_NUMBER], [0.7.0]) -m4_define([REF_ARRAY_VERSION_NUMBER], [0.1.4]) +m4_define([REF_ARRAY_VERSION_NUMBER], [0.1.5]) m4_define([BASICOBJECTS_VERSION_NUMBER], [0.1.1]) -m4_define([INI_CONFIG_VERSION_NUMBER], [1.1.0]) +m4_define([INI_CONFIG_VERSION_NUMBER], [1.2.0]) commit 7689460153b056b4064af6ed06a34915530b11a7 Author: Lukas Slebodnik Date: Tue Jun 23 12:50:53 2015 +0200 Bump version-info The function ref_array_debug was updated. There wasn't any other changes to ref_array. New functions were added to collections: col_get_dup_item, col_delete_item_with_cb, col_remove_item_with_cb New functions were added to ini_config: ini_config_augment, ini_comment_construct and many functions from ini_configmod.h Reviewed-by: Jakub Hrozek diff --git a/Makefile.am b/Makefile.am index e37884e..5b1da33 100644 --- a/Makefile.am +++ b/Makefile.am @@ -142,7 +142,7 @@ libcollection_la_SOURCES = \ trace/trace.h libcollection_la_DEPENDENCIES = collection/libcollection.sym libcollection_la_LDFLAGS = \ - -version-info 4:0:0 \ + -version-info 5:0:1 \ -Wl,--version-script=$(top_srcdir)/collection/libcollection.sym check_PROGRAMS += \ @@ -180,7 +180,7 @@ libref_array_la_SOURCES = \ trace/trace.h libref_array_la_DEPENDENCIES = refarray/libref_array.sym libref_array_la_LDFLAGS = \ - -version-info 3:0:2 \ + -version-info 3:1:2 \ -Wl,--version-script=$(top_srcdir)/refarray/libref_array.sym check_PROGRAMS += ref_array_ut @@ -268,7 +268,7 @@ libini_config_la_LIBADD = \ libref_array.la \ libbasicobjects.la libini_config_la_LDFLAGS = \ - -version-info 5:0:0 \ + -version-info 6:0:1 \ -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 54d8b97..fe180ff 100644 --- a/contrib/ding-libs.spec.in +++ b/contrib/ding-libs.spec.in @@ -174,7 +174,7 @@ and serialization %doc COPYING %doc COPYING.LESSER %{_libdir}/libcollection.so.4 -%{_libdir}/libcollection.so.4.0.0 +%{_libdir}/libcollection.so.4.1.0 %files -n libcollection-devel %defattr(-,root,root,-) @@ -218,7 +218,7 @@ A dynamically-growing, reference-counted array %doc COPYING %doc COPYING.LESSER %{_libdir}/libref_array.so.1 -%{_libdir}/libref_array.so.1.2.0 +%{_libdir}/libref_array.so.1.2.1 %files -n libref_array-devel %defattr(-,root,root,-) @@ -303,7 +303,7 @@ structure %doc COPYING %doc COPYING.LESSER %{_libdir}/libini_config.so.5 -%{_libdir}/libini_config.so.5.0.0 +%{_libdir}/libini_config.so.5.1.0 %files -n libini_config-devel %defattr(-,root,root,-) commit 4d7e92836d8582a8af2f2885d4fcae34fd14b662 Author: Lukas Slebodnik Date: Tue Jun 23 10:16:34 2015 +0200 INI: Add check based test ini_configmod_ut_check Signed-off-by: Lukas Slebodnik Reviewed-by: Jakub Hrozek diff --git a/Makefile.am b/Makefile.am index a3bbbb7..e37884e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -69,8 +69,8 @@ libpath_utils_la_LDFLAGS = \ -Wl,--version-script=$(top_srcdir)/path_utils/libpath_utils.sym if HAVE_CHECK - check_PROGRAMS += path_utils_ut - TESTS += path_utils_ut + check_PROGRAMS += path_utils_ut ini_configmod_ut_check + TESTS += path_utils_ut ini_configmod_ut_check endif path_utils_ut_SOURCES = path_utils/path_utils_ut.c @@ -341,6 +341,13 @@ ini_configmod_ut_SOURCES = ini/ini_configmod_ut.c ini_configmod_ut_LDADD = libini_config.la libcollection.la \ libbasicobjects.la libpath_utils.la libref_array.la +ini_configmod_ut_check_SOURCES = ini/ini_configmod_ut_check.c +ini_configmod_ut_check_CFLAGS = $(AM_CFLAGS) $(CHECK_CFLAGS) +ini_configmod_ut_check_LDADD = libini_config.la libcollection.la \ + libbasicobjects.la libpath_utils.la \ + libref_array.la \ + $(CHECK_LIBS) + ini_save_ut_SOURCES = ini/ini_save_ut.c ini_save_ut_LDADD = libini_config.la libcollection.la \ libbasicobjects.la libpath_utils.la libref_array.la diff --git a/ini/ini_configmod_ut_check.c b/ini/ini_configmod_ut_check.c new file mode 100644 index 0000000..75d6874 --- /dev/null +++ b/ini/ini_configmod_ut_check.c @@ -0,0 +1,1695 @@ +/* + INI LIBRARY + + Unit test for the configuration object modification API. + + Copyright (C) Lukas Slebodnik 2015 + + INI Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + INI Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with INI Library. If not, see . +*/ + +#include "config.h" + +#include +#include +#include +#include +#include + +/* #define TRACE_LEVEL 7 */ +#define TRACE_HOME +#include "trace.h" +#include "ini_configobj.h" +#include "ini_config_priv.h" +#include "collection_tools.h" +#include "ini_configmod.h" +#include "path_utils.h" +#include "../basicobjects/simplebuffer.h" + +int verbose = 0; + +#define WRAP_SIZE 80 + +static void dump_configuration(struct ini_cfgobj *in_cfg, + FILE *file) +{ + int ret; + struct simplebuffer *sbobj = NULL; + void *buff; + uint32_t len; + + ret = simplebuffer_alloc(&sbobj); + fail_unless(ret == EOK, + "Failed to allocate buffer. Error %d.\n", ret); + + ret = ini_config_serialize(in_cfg, sbobj); + fail_unless(ret == EOK, + "Failed to serialize. Error %d.\n", ret); + + buff = simplebuffer_get_vbuf(sbobj); + len = simplebuffer_get_len(sbobj); + ret = fwrite(buff, 1, len, file); + fail_if(ret == -1, + "Failed to write to file. Error: %d %s\n", ret, strerror(ret)); + + simplebuffer_free(sbobj); + return; +} + +static int call_diff(const char *function, + const char *expected_cfg, + size_t expected_cfg_len, + const char *res_cfg, + size_t res_cfg_len) +{ + char expected_fn[PATH_MAX]; + char res_fn[PATH_MAX]; + char command[PATH_MAX * 3]; + char *builddir; + int ret; + int expected_fd; + int res_fd; + + builddir = getenv("builddir"); + + snprintf(expected_fn, PATH_MAX, "%s/expected.conf_%s_XXXXXX", + (builddir == NULL) ? "." : builddir, function); + snprintf(res_fn, PATH_MAX, "%s/result.conf_%s_XXXXXX", + (builddir == NULL) ? "." : builddir, function); + + expected_fd = mkstemp(expected_fn); + fail_if(expected_fd == -1, "mkstemp failed: %s\n", strerror(errno)); + + ret = write(expected_fd, expected_cfg, expected_cfg_len); + fail_if(ret == -1, + "Failed write to %s. Error %s\n", + expected_fn, strerror(errno)); + + close(expected_fd); + + res_fd = mkstemp(res_fn); + fail_if(res_fd == -1, "mkstemp failed: %s\n", strerror(errno)); + + ret = write(res_fd, res_cfg, res_cfg_len); + fail_if(ret == -1, + "Failed write to %s. Error %s\n", + expected_fn, strerror(errno)); + close(res_fd); + + snprintf(command, PATH_MAX * 3, "diff -wi %s %s", expected_fn, res_fn); + ret = system(command); + fail_if(ret == -1, + "Failed to execute command:%s. Erorr %s\n", + command, strerror(errno)); + + return EOK; +} + +#define assert_configuration_equal(expected_cfg, expected_cfg_len, res_cfg) \ + _assert_configuration_equal(expected_cfg, expected_cfg_len, res_cfg, \ + __func__, __FILE__, __LINE__) +static void _assert_configuration_equal(const char *expected_cfg, + size_t expected_cfg_len, + struct ini_cfgobj *res_cfg, + const char *function, + const char *file, + int line) +{ + char *res_buffer = NULL; + size_t res_buffer_size; + FILE *f_memstream; + int ret; + + --expected_cfg_len; /* do not use trailing zero */ + + f_memstream = open_memstream(&res_buffer, &res_buffer_size); + fail_if(f_memstream == NULL, + "\n\t[%s:%d] open_memstream failed.", file, line); + + dump_configuration(res_cfg, f_memstream); + fclose(f_memstream); + + fail_unless(expected_cfg_len == res_buffer_size, + "\n\t[%s:%d] Size of expected config %zu and result config %d " + "does not match. Res:%d\n", + file, line, expected_cfg_len, res_buffer_size, + call_diff(function, expected_cfg, expected_cfg_len, + res_buffer, res_buffer_size)); + + ret = memcmp(res_buffer, expected_cfg, expected_cfg_len); + fail_unless(ret == EOK, + "\n\t[%s:%d] Configurations are not identical. Res:%d\n", + file, line, + call_diff(function, expected_cfg, expected_cfg_len, + res_buffer, res_buffer_size)); + + free(res_buffer); +} + +static struct ini_cfgobj *get_ini_config_from_str(char input_data[], + size_t input_data_len) +{ + struct ini_cfgobj *in_cfg; + struct ini_cfgfile *file_ctx; + int ret; + + ret = ini_config_create(&in_cfg); + fail_unless(ret == EOK, "Failed to create config. Error %d.\n", ret); + + ret = ini_config_file_from_mem(input_data, input_data_len, &file_ctx); + fail_unless(ret == EOK, "Failed to load config. Error %d.\n", ret); + + ret = ini_config_parse(file_ctx, INI_STOP_ON_NONE, INI_MV1S_ALLOW, 0, + in_cfg); + fail_unless(ret == EOK, "Failed to parse config. Error %d.\n", ret); + + ini_config_file_destroy(file_ctx); + + return in_cfg; +} + +START_TEST(test_delete_value_wrong_arguments) +{ + int ret = EOK; + struct ini_cfgobj *in_cfg = NULL; + + char exp_data[] = + "[zero]\n" + "[one]\n" + "key1 = value1a\n"; + + in_cfg = get_ini_config_from_str(exp_data, sizeof(exp_data)); + assert_configuration_equal(exp_data, sizeof(exp_data), in_cfg); + + /* missing ini_config */ + ret = ini_config_delete_value(NULL, "one", COL_DSP_NDUP, "key1", 0); + fail_unless(ret == EINVAL, "delete value should fail. Error: %d", ret); + assert_configuration_equal(exp_data, sizeof(exp_data), in_cfg); + + /* missing section */ + ret = ini_config_delete_value(in_cfg, NULL, COL_DSP_NDUP, "key1", 0); + fail_unless(ret == EINVAL, "delete value should fail. Error: %d", ret); + assert_configuration_equal(exp_data, sizeof(exp_data), in_cfg); + + /* missing key */ + ret = ini_config_delete_value(in_cfg, "one", COL_DSP_NDUP, NULL, 0); + fail_unless(ret == EINVAL, "delete value should fail. Error: %d", ret); + assert_configuration_equal(exp_data, sizeof(exp_data), in_cfg); + + /* value index is too low */ + ret = ini_config_delete_value(in_cfg, "one", COL_DSP_NDUP, "key1", -1); + fail_unless(ret == EINVAL, "delete value should fail. Error: %d", ret); + assert_configuration_equal(exp_data, sizeof(exp_data), in_cfg); + + /* value index is too high */ + ret = ini_config_delete_value(in_cfg, "one", COL_DSP_NDUP, "key1", 1); + fail_unless(ret == ENOENT, "delete value should fail. Error: %d", ret); + assert_configuration_equal(exp_data, sizeof(exp_data), in_cfg); + + ini_config_destroy(in_cfg); +} +END_TEST + +START_TEST(test_delete_value) +{ + int ret = EOK; + struct ini_cfgobj *in_cfg; + + char input_data[] = + "[zero]\n" + "[one]\n" + "key1 = first\n" + "key1 = second\n" + "key1 = third\n" + "key1 = last\n"; + + char delete_first[] = + "[zero]\n" + "[one]\n" + "key1 = first\n" + "key1 = second\n" + "key1 = third\n"; + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + ret = ini_config_delete_value(in_cfg, "one", COL_DSP_NDUP, "key1", 3); + fail_unless(ret == EOK, "delete value should fail. Error: %d", ret); + assert_configuration_equal(delete_first, sizeof(delete_first), in_cfg); + + ini_config_destroy(in_cfg); +} +END_TEST + +START_TEST(test_update_comments_wrong_arguments) +{ + int ret = EOK; + struct ini_cfgobj *in_cfg; + + char input_data[] = + "[one]\n" + "key1 = value1\n" + "key1 = value1a\n" + "key1 = value1a_bis\n" + "// This is a test\n" + "key1 = value1b\n" + "key1 = value1c\n" + "key2 = value2\n" + "key3 = value3\n"; + + const char *comment[] = { "// This is a test", NULL }; + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* missing ini_config */ + ret = ini_config_update_comment(NULL, "one", "key1", comment, 1, 3); + fail_unless(ret == EINVAL, "update commants should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* missing section */ + ret = ini_config_update_comment(in_cfg, NULL, "key1", comment, 1, 3); + fail_unless(ret == EINVAL, "update commants should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* missing key */ + ret = ini_config_update_comment(in_cfg, "one", NULL, comment, 1, 3); + fail_unless(ret == EINVAL, "update commants should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* wrong section */ + ret = ini_config_update_comment(in_cfg, "noexist", "key1", comment, 1, 3); + fail_unless(ret == ENOENT, "update commants should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* wrong key */ + ret = ini_config_update_comment(in_cfg, "one", "noexist", comment, 1, 3); + fail_unless(ret == ENOENT, "update commants should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* value index is too low */ + ret = ini_config_update_comment(in_cfg, "one", "key1", comment, 1, -1); + fail_unless(ret == EINVAL, "update commants should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* value index is too high */ + ret = ini_config_update_comment(in_cfg, "one", "key1", comment, 1, 5); + fail_unless(ret == ENOENT, "update commants should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + ini_config_destroy(in_cfg); +} +END_TEST + +START_TEST(test_update_comments) +{ + int ret = EOK; + struct ini_cfgobj *in_cfg; + + char input_data[] = + "[one]\n" + "key1 = value1\n" + "key1 = value1a\n" + "key1 = value1a_bis\n" + "key1 = value1b\n" + "// this is a comment\n" + "key1 = value1c\n" + "key2 = value2\n" + "key3 = value3\n"; + + char exp_data_1comment[] = + "[one]\n" + "// This is a test1\n" + "key1 = value1\n" + "key1 = value1a\n" + "key1 = value1a_bis\n" + "key1 = value1b\n" + "// this is a comment\n" + "key1 = value1c\n" + "key2 = value2\n" + "key3 = value3\n"; + + char exp_data_2comments[] = + "[one]\n" + "// This is a test1\n" + "// This is a test2\n" + "key1 = value1\n" + "key1 = value1a\n" + "key1 = value1a_bis\n" + "key1 = value1b\n" + "// this is a comment\n" + "key1 = value1c\n" + "key2 = value2\n" + "key3 = value3\n"; + + char exp_data_1comment_after2[] = + "[one]\n" + "key1 = value1\n" + "key1 = value1a\n" + "// This is a test1\n" + "key1 = value1a_bis\n" + "key1 = value1b\n" + "// this is a comment\n" + "key1 = value1c\n" + "key2 = value2\n" + "key3 = value3\n"; + + char exp_replaced[] = + "[one]\n" + "key1 = value1\n" + "key1 = value1a\n" + "key1 = value1a_bis\n" + "key1 = value1b\n" + "// This is a test1\n" + "// This is a test2\n" + "key1 = value1c\n" + "key2 = value2\n" + "key3 = value3\n"; + + char exp_removed_comment[] = + "[one]\n" + "key1 = value1\n" + "key1 = value1a\n" + "key1 = value1a_bis\n" + "key1 = value1b\n" + "key1 = value1c\n" + "key2 = value2\n" + "key3 = value3\n"; + + const char *comments[] = { "// This is a test1", "// This is a test2", + NULL }; + + const char *empty_comment[] = { NULL }; + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* add comments with size */ + ret = ini_config_update_comment(in_cfg, "one", "key1", comments, 1, 0); + fail_unless(ret == EOK, "update commants should fail. Error: %d", ret); + assert_configuration_equal(exp_data_1comment, sizeof(exp_data_1comment), + in_cfg); + ini_config_destroy(in_cfg); + + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* add comments with size */ + ret = ini_config_update_comment(in_cfg, "one", "key1", comments, 2, 0); + fail_unless(ret == EOK, "update commants should fail. Error: %d", ret); + assert_configuration_equal(exp_data_2comments, sizeof(exp_data_2comments), + in_cfg); + ini_config_destroy(in_cfg); + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* add comments (NULL terminated array), size is 0 */ + ret = ini_config_update_comment(in_cfg, "one", "key1", comments, 0, 0); + fail_unless(ret == EOK, "update commants should fail. Error: %d", ret); + assert_configuration_equal(exp_data_2comments, sizeof(exp_data_2comments), + in_cfg); + ini_config_destroy(in_cfg); + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* add comments (NULL terminated array), size is 0 */ + ret = ini_config_update_comment(in_cfg, "one", "key1", comments, 1, 2); + fail_unless(ret == EOK, "update commants should fail. Error: %d", ret); + assert_configuration_equal(exp_data_1comment_after2, + sizeof(exp_data_1comment_after2), + in_cfg); + ini_config_destroy(in_cfg); + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* replace comment */ + ret = ini_config_update_comment(in_cfg, "one", "key1", comments, 0, 4); + fail_unless(ret == EOK, "update commants should fail. Error: %d", ret); + assert_configuration_equal(exp_replaced, sizeof(exp_replaced), + in_cfg); + ini_config_destroy(in_cfg); + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* remove comment */ + ret = ini_config_update_comment(in_cfg, "one", "key1", + empty_comment, 0, 4); + fail_unless(ret == EOK, "update commants should fail. Error: %d", ret); + assert_configuration_equal(exp_removed_comment, + sizeof(exp_removed_comment), + in_cfg); + ini_config_destroy(in_cfg); + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* remove comment (2nd way; argument is NULL) */ + ret = ini_config_update_comment(in_cfg, "one", "key1", + NULL, 0, 4); + fail_unless(ret == EOK, "update commants should fail. Error: %d", ret); + assert_configuration_equal(exp_removed_comment, + sizeof(exp_removed_comment), + in_cfg); + ini_config_destroy(in_cfg); +} +END_TEST + +START_TEST(test_add_str_wrong_arguments) +{ + int ret = EOK; + struct ini_cfgobj *in_cfg; + + char input_data[] = + "[zero]\n" + "[one]\n" + "key1 = value1a\n"; + + const char *comments[] = { "// This is a test1", "// This is a test2", + NULL }; + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* missing ini_config */ + ret = ini_config_add_str_value(NULL, "one", "newkey", "newvalue", + comments, 2, WRAP_SIZE, COL_DSP_END, "key1", + 0, INI_VA_NOCHECK); + fail_unless(ret == EINVAL, "Add str should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* missing section */ + ret = ini_config_add_str_value(in_cfg, NULL, "newkey", "newvalue", + comments, 2, WRAP_SIZE, COL_DSP_END, "key1", + 0, INI_VA_NOCHECK); + fail_unless(ret == EINVAL, "Add str should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* missing key */ + ret = ini_config_add_str_value(in_cfg, "one", NULL, "newvalue", + comments, 2, WRAP_SIZE, COL_DSP_END, "key1", + 0, INI_VA_NOCHECK); + fail_unless(ret == EINVAL, "Add str should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* missing value */ + ret = ini_config_add_str_value(in_cfg, "one", "newkey", NULL, + comments, 2, WRAP_SIZE, COL_DSP_END, "key1", + 0, INI_VA_NOCHECK); + fail_unless(ret == EINVAL, "Add str should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* wrong index */ + ret = ini_config_add_str_value(in_cfg, "one", "newkey", "newvalue", + comments, 2, WRAP_SIZE, COL_DSP_END, "key1", + -1, INI_VA_NOCHECK); + fail_unless(ret == EINVAL, "Add str should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* wrong flag */ + ret = ini_config_add_str_value(in_cfg, "one", "newkey", "newvalue", + comments, 2, WRAP_SIZE, COL_DSP_END, "key1", + 0, 0xff); + fail_unless(ret == ENOSYS, "Add str should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* add duplicate for missing key */ + ret = ini_config_add_str_value(in_cfg, "one", "newkey", "newvalue", + comments, 2, WRAP_SIZE, COL_DSP_NDUP, + "key1", 0, INI_VA_NOCHECK); + fail_unless(ret == ENOENT, "Add str should fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + ini_config_destroy(in_cfg); +} +END_TEST + +START_TEST(test_add_str_simple) +{ + int ret = EOK; + struct ini_cfgobj *in_cfg; + + char input_data[] = + "[zero]\n" + "[one]\n" + "key1 = value1a\n" + "key1 = value1b\n" + "key2 = value2a\n"; + + const char *comments[] = { "// This is a test1", "// This is a test2", + NULL }; + + char add_new_value_to_end[] = + "[zero]\n" + "[one]\n" + "key1 = value1a\n" + "key1 = value1b\n" + "key2 = value2a\n" + "newkey = newvalue\n"; + + char add_new_value_to_end_with_comment[] = + "[zero]\n" + "[one]\n" + "key1 = value1a\n" + "key1 = value1b\n" + "key2 = value2a\n" + "// This is a test1\n" + "// This is a test2\n" + "newkey = newvalue\n"; + + char add_new_value_to_front[] = + "[zero]\n" + "[one]\n" + "newkey = newvalue\n" + "key1 = value1a\n" + "key1 = value1b\n" + "key2 = value2a\n"; + + char add_new_value_to_front_with_comment[] = + "[zero]\n" + "[one]\n" + "// This is a test1\n" + "// This is a test2\n" + "newkey = newvalue\n" + "key1 = value1a\n" + "key1 = value1b\n" + "key2 = value2a\n"; + + char add_new_value_after_key1[] = + "[zero]\n" + "[one]\n" + "key1 = value1a\n" + "newkey = newvalue\n" + "key1 = value1b\n" + "key2 = value2a\n"; + + char add_new_value_before_key2[] = + "[zero]\n" + "[one]\n" + "key1 = value1a\n" + "key1 = value1b\n" + "newkey = newvalue\n" + "key2 = value2a\n"; + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* Simple add new value to end of section */ + ret = ini_config_add_str_value(in_cfg, "one", "newkey", "newvalue", + NULL, 0, WRAP_SIZE, COL_DSP_END, NULL, + 0, INI_VA_NOCHECK); + fail_unless(ret == EOK, "Failed to add str. Error: %d", ret); + assert_configuration_equal(add_new_value_to_end, + sizeof(add_new_value_to_end), in_cfg); + ini_config_destroy(in_cfg); + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* add new value with comment to end of section */ + ret = ini_config_add_str_value(in_cfg, "one", "newkey", "newvalue", + comments, 2, WRAP_SIZE, COL_DSP_END, NULL, + 0, INI_VA_NOCHECK); + fail_unless(ret == EOK, "Failed to add str. Error: %d", ret); + assert_configuration_equal(add_new_value_to_end_with_comment, + sizeof(add_new_value_to_end_with_comment), + in_cfg); + ini_config_destroy(in_cfg); + + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* Simple add new value to the begin of section */ + ret = ini_config_add_str_value(in_cfg, "one", "newkey", "newvalue", + NULL, 0, WRAP_SIZE, COL_DSP_FRONT, NULL, + 0, INI_VA_NOCHECK); + fail_unless(ret == EOK, "Failed to add str. Error: %d", ret); + assert_configuration_equal(add_new_value_to_front, + sizeof(add_new_value_to_front), in_cfg); + ini_config_destroy(in_cfg); + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* add new value with comment to the begin of section */ + ret = ini_config_add_str_value(in_cfg, "one", "newkey", "newvalue", + comments, 2, WRAP_SIZE, COL_DSP_FRONT, NULL, + 0, INI_VA_NOCHECK); + fail_unless(ret == EOK, "Failed to add str. Error: %d", ret); + assert_configuration_equal(add_new_value_to_front_with_comment, + sizeof(add_new_value_to_front_with_comment), + in_cfg); + ini_config_destroy(in_cfg); + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* add new value after "key1" with index 0 */ + ret = ini_config_add_str_value(in_cfg, "one", "newkey", "newvalue", + NULL, 0, WRAP_SIZE, COL_DSP_AFTER, "key1", + 0, INI_VA_NOCHECK); + fail_unless(ret == EOK, "Failed to add str. Error: %d", ret); + assert_configuration_equal(add_new_value_after_key1, + sizeof(add_new_value_after_key1), + in_cfg); + ini_config_destroy(in_cfg); + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* add new value after "key1" with index 1 (index ignored) */ + ret = ini_config_add_str_value(in_cfg, "one", "newkey", "newvalue", + NULL, 0, WRAP_SIZE, COL_DSP_AFTER, "key1", + 1, INI_VA_NOCHECK); + fail_unless(ret == EOK, "Failed to add str. Error: %d", ret); + assert_configuration_equal(add_new_value_after_key1, + sizeof(add_new_value_after_key1), + in_cfg); + ini_config_destroy(in_cfg); + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* add new value after "key1" with very big index (index ignored) */ + ret = ini_config_add_str_value(in_cfg, "one", "newkey", "newvalue", + NULL, 0, WRAP_SIZE, COL_DSP_AFTER, "key1", + 1000, INI_VA_NOCHECK); + fail_unless(ret == EOK, "Failed to add str. Error: %d", ret); + assert_configuration_equal(add_new_value_after_key1, + sizeof(add_new_value_after_key1), + in_cfg); + ini_config_destroy(in_cfg); + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* add new value before "key2" */ + ret = ini_config_add_str_value(in_cfg, "one", "newkey", "newvalue", + NULL, 0, WRAP_SIZE, COL_DSP_BEFORE, "key2", + 0, INI_VA_NOCHECK); + fail_unless(ret == EOK, "Failed to add str. Error: %d", ret); + assert_configuration_equal(add_new_value_before_key2, + sizeof(add_new_value_before_key2), + in_cfg); + ini_config_destroy(in_cfg); +} +END_TEST + +START_TEST(test_add_str_duplicate) +{ + int ret = EOK; + struct ini_cfgobj *in_cfg; + + char input_data[] = + "[zero]\n" + "[one]\n" + "key0 = value0a\n" + "key1 = value1a\n" + "key1 = value1b\n" + "// This is a test1\n" + "key2 = value2a\n"; + + char add_first_duplicate[] = + "[zero]\n" + "[one]\n" + "key0 = newvalue\n" + "key0 = value0a\n" + "key1 = value1a\n" + "key1 = value1b\n" + "// This is a test1\n" + "key2 = value2a\n"; + + char add_first_duplicate_for_multi[] = + "[zero]\n" + "[one]\n" + "key0 = value0a\n" + "key1 = newvalue\n" + "key1 = value1a\n" + "key1 = value1b\n" + "// This is a test1\n" + "key2 = value2a\n"; + + char add_last_duplicate[] = + "[zero]\n" + "[one]\n" + "key0 = value0a\n" + "key1 = value1a\n" + "key1 = value1b\n" + "key1 = newvalue\n" + "// This is a test1\n" + "key2 = value2a\n"; + + char add_duplicate_with_index1[] = + "[zero]\n" + "[one]\n" + "key0 = value0a\n" + "key1 = value1a\n" + "// This is a test1\n" + "// This is a test2\n" + "key1 = newvalue\n" + "key1 = value1b\n" + "// This is a test1\n" + "key2 = value2a\n"; + + const char *comments[] = { "// This is a test1", "// This is a test2", + NULL }; + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* cannot add key as the first duplicate for non-existing key */ + ret = ini_config_add_str_value(in_cfg, "one", "noexist", "newvalue", + NULL, 0, WRAP_SIZE, COL_DSP_FIRSTDUP, + NULL, 0, INI_VA_NOCHECK); + fail_unless(ret == ENOENT, "Add duplicate key must fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* cannot add key as the last duplicate for non-existing key */ + ret = ini_config_add_str_value(in_cfg, "one", "noexist", "newvalue", + NULL, 0, WRAP_SIZE, COL_DSP_LASTDUP, + NULL, 0, INI_VA_NOCHECK); + fail_unless(ret == ENOENT, "Add duplicate key must fail. Error: %d", ret); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + + /* Add duplicate value */ + ret = ini_config_add_str_value(in_cfg, "one", "key0", "newvalue", + NULL, 0, WRAP_SIZE, COL_DSP_FIRSTDUP, + NULL, 0, INI_VA_NOCHECK); + fail_unless(ret == EOK, "Failed to add str. Error: %d", ret); + assert_configuration_equal(add_first_duplicate, + sizeof(add_first_duplicate), in_cfg); + ini_config_destroy(in_cfg); + + in_cfg = get_ini_config_from_str(input_data, sizeof(input_data)); + assert_configuration_equal(input_data, sizeof(input_data), in_cfg); + From tjaalton at moszumanska.debian.org Sat Aug 15 22:30:24 2015 From: tjaalton at moszumanska.debian.org (Timo Aaltonen) Date: Sat, 15 Aug 2015 22:30:24 +0000 Subject: [Pkg-sssd-devel] ding-libs: Changes to 'refs/tags/debian/0.5.0-1' Message-ID: Tag 'debian/0.5.0-1' created by Timo Aaltonen at 2015-08-15 22:30 +0000 tagging package ding-libs version debian/0.5.0-1 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJVz71vAAoJEMtwMWWoiYTcCcEP/RBLS5Pmt8A+3ui41FlUfuYa lcxNXkVRXUD9cBWugG+xU0rs8O4+BWsvyymw/BtuKnqIMCYuCCxTodd9kI4HtRuf kuKtWEgF0ryUAckxSk5zk6h0qf0Zrktt+MfO3eE0mvSEjABFNdBtZ0K96agc38PC dRYIFmC7TA5qZUs3rtwbkePMs/PeE1zkwXFZiDcBNBzQJwZjVj4uV9AmXS0d3slC 5xeqkDl6jNtrzeR23UaRGy4dAcnlaYGLJ0ewf80aAJhWfG6CFoEuvyVLwLe/k9dn CGP8iWV+kpjz+066HqnL1lmsJk51TM0CnR7cqK5gA3AAv3kMvp/3rncg0YR95LvW E11vTdJKYdyiBH6iRAJsrjRgDkHa+R7HR+VlTCr/vUMLQB/07GAngN8GkH0PiAU+ GRWiRe6iGKoAmla6oBVH/RceTzUCONzSZL2fZNjPP2Z7InpXYr/mo552qkGWjP9F IfRDApPh9y23TAALyEpnW0KWzJqWL+2U0y+V4rViW3bzZcILr3fUI4zhOxwDovUV n+yG2YPxmZxQuV019sDH/6gptl2rxinZt+MJq5xPXpuKsamsrW3hrGdZdIFnYjZq jnAy4ekKpM9hn3lU7jfJ3YfQqcGgiWIR+lHOT2RRb7zol/VJ9TAQe6s5GFFc0t4T +H7fP811x2FH8I1XoPzJ =CE4K -----END PGP SIGNATURE----- Changes since debian/0.4.0-1: Dmitri Pal (22): Print info when array is empty Declaring new internal access check function Refactored access control check New function to merge snippets Test file for unit test [INI] Make the merge function build Function to return one of the dups Allow to modify item name Expose delete with callback function Comment creation helper Comment can be NULL Move definition to common header Fix wrapping error New interface to modify configuration Build new interface Generate doxy doc for INI modification API Cleaning doxygen comments Change order of the headers New interface to save configuration in a file Implementation of the interface to save configuration Unit test for the save interface Build new tests for the save interface Lukas Slebodnik (10): SPEC: Use correct soname for packages lib{collection,ini_config} SPEC: Do not include compiled files into package libdhash-devel ini_config_ut: enable verbose mode with env variable collection: Add new function col_remove_item_with_cb INI: Fix memory leak with INI_VA_CLEAN COLLECTION: Return the last duplicate for big index INI: Fix adding string with INI_VA_MODADD_E and big index INI: Add check based test ini_configmod_ut_check Bump version-info Update versions before 0.5.0 release Timo Aaltonen (6): Merge branch 'upstream' update the changelog libini-config-dev.install: Add ini_configmod.h. libcollection4.symbols, libini-config5.symbols: Updated. control: Bump policy to 3.9.6, no changes. releasing package ding-libs version 0.5.0-1 --- Makefile.am | 63 + collection/collection.c | 266 +++++- collection/collection.h | 180 ++++ collection/collection_ut.c | 338 +++++++ collection/libcollection.sym | 8 contrib/ding-libs.spec.in | 13 debian/changelog | 9 debian/control | 2 debian/libcollection4.symbols | 4 debian/libini-config-dev.install | 1 debian/libini-config5.symbols | 32 ini/ini.d/merge.validator | 60 + ini/ini.d/real.conf | 2 ini/ini2.d/real16be.conf |binary ini/ini2.d/real16le.conf |binary ini/ini2.d/real32be.conf |binary ini/ini2.d/real32le.conf |binary ini/ini2.d/real8.conf | 54 + ini/ini_augment.c | 972 ++++++++++++++++++++++ ini/ini_augment_ut.c | 390 ++++++++ ini/ini_comment.c | 59 + ini/ini_comment.h | 13 ini/ini_comment_ut.c | 38 ini/ini_config.cfg.doxy.in | 2 ini/ini_config_priv.h | 9 ini/ini_config_ut.c | 5 ini/ini_configmod.c | 1607 ++++++++++++++++++++++++++++++++++++ ini/ini_configmod.h | 767 +++++++++++++++++ ini/ini_configmod_ut.c | 1153 ++++++++++++++++++++++++++ ini/ini_configmod_ut_check.c | 1695 +++++++++++++++++++++++++++++++++++++++ ini/ini_configobj.h | 306 ++++++- ini/ini_defines.h | 9 ini/ini_fileobj.c | 879 +++++++++++++++++++- ini/ini_get_valueobj.c | 2 ini/ini_parse.c | 13 ini/ini_print.c | 2 ini/ini_save_ut.c | 259 +++++ ini/ini_valueobj.c | 7 ini/libini_config.sym | 42 refarray/ref_array.c | 5 version.m4 | 8 41 files changed, 9137 insertions(+), 137 deletions(-) --- From ftpmaster at ftp-master.debian.org Sat Aug 15 22:32:49 2015 From: ftpmaster at ftp-master.debian.org (Debian FTP Masters) Date: Sat, 15 Aug 2015 22:32:49 +0000 Subject: [Pkg-sssd-devel] Processing of ding-libs_0.5.0-1_amd64.changes Message-ID: ding-libs_0.5.0-1_amd64.changes uploaded successfully to localhost along with the files: ding-libs_0.5.0-1.dsc ding-libs_0.5.0.orig.tar.gz ding-libs_0.5.0-1.diff.gz libbasicobjects-dev_0.5.0-1_amd64.deb libbasicobjects0_0.5.0-1_amd64.deb libcollection-dev_0.5.0-1_amd64.deb libcollection4_0.5.0-1_amd64.deb libdhash-dev_0.5.0-1_amd64.deb libdhash1_0.5.0-1_amd64.deb libini-config-dev_0.5.0-1_amd64.deb libini-config5_0.5.0-1_amd64.deb libpath-utils-dev_0.5.0-1_amd64.deb libpath-utils1_0.5.0-1_amd64.deb libref-array-dev_0.5.0-1_amd64.deb libref-array1_0.5.0-1_amd64.deb Greetings, Your Debian queue daemon (running on host franck.debian.org) From ftpmaster at ftp-master.debian.org Sat Aug 15 22:34:38 2015 From: ftpmaster at ftp-master.debian.org (Debian FTP Masters) Date: Sat, 15 Aug 2015 22:34:38 +0000 Subject: [Pkg-sssd-devel] ding-libs_0.5.0-1_amd64.changes ACCEPTED into unstable Message-ID: Accepted: -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Format: 1.8 Date: Sun, 16 Aug 2015 01:26:53 +0300 Source: ding-libs Binary: libpath-utils-dev libpath-utils1 libdhash-dev libdhash1 libcollection-dev libcollection4 libref-array-dev libref-array1 libini-config-dev libini-config5 libbasicobjects-dev libbasicobjects0 Architecture: source amd64 Version: 0.5.0-1 Distribution: unstable Urgency: medium Maintainer: Debian SSSD Team Changed-By: Timo Aaltonen Description: libbasicobjects-dev - Basic object types for C -- development files libbasicobjects0 - Basic object types for C libcollection-dev - Development files for libcollection libcollection4 - Collection data-type for C libdhash-dev - Development files for libdhash libdhash1 - Dynamic hash table libini-config-dev - Development files for libini_config libini-config5 - INI file parser for C libpath-utils-dev - Development files for libpath_utils libpath-utils1 - Filesystem Path Utilities libref-array-dev - Development files for refcounted array for C libref-array1 - refcounted array for C Changes: ding-libs (0.5.0-1) unstable; urgency=medium . * New upstream release. * libini-config-dev.install: Add ini_configmod.h. * libcollection4.symbols, libini-config5.symbols: Updated. * control: Bump policy to 3.9.6, no changes. Checksums-Sha1: 0ed9087d45e7afee926bc6d4540ba7f95c384f52 2572 ding-libs_0.5.0-1.dsc da27caf664d696b011924a799117fb39ef357653 868840 ding-libs_0.5.0.orig.tar.gz 2a279198ff543f73a64088bbbe7a1f7dd2a4b25b 6621 ding-libs_0.5.0-1.diff.gz e780e480abf1bde4a7b3a5b5f61b7dface83717b 5386 libbasicobjects-dev_0.5.0-1_amd64.deb 369b26e9ef4e5b74cf811dcf33e8eb9c74634248 5848 libbasicobjects0_0.5.0-1_amd64.deb 83db3909f40f3278a482d5e5d0ff0979bdaa5041 40498 libcollection-dev_0.5.0-1_amd64.deb a4ee0cfbda8cbcf54d1d9bbe51db0ad5d519e0de 22156 libcollection4_0.5.0-1_amd64.deb 72aa3986113b5b30e65453b31e582aa6848d16ce 18406 libdhash-dev_0.5.0-1_amd64.deb 7aea1292a36ffaa5b25c10b40c3577bccd74277d 8656 libdhash1_0.5.0-1_amd64.deb 4ea9e5e81ae328f3258349bbe82264df5321f562 59448 libini-config-dev_0.5.0-1_amd64.deb 06e31fa12508177f57514b26d99d1d1132499e6c 39516 libini-config5_0.5.0-1_amd64.deb 2b09a6afaa021078aa7fc5f2a71631858485193c 11908 libpath-utils-dev_0.5.0-1_amd64.deb 5bfdb13f049764aa8dc8b81ed5c89972a81c634b 8628 libpath-utils1_0.5.0-1_amd64.deb 3690e4c4518bc406b2f89de4aa4f9dd74699adbd 8772 libref-array-dev_0.5.0-1_amd64.deb a998157ade896c1475048f95fd843d985782de52 7206 libref-array1_0.5.0-1_amd64.deb Checksums-Sha256: 218cf7a35d20c707e7ce4133b74a0a0c9c21c92a14b6dfdf4a2279ab6428a374 2572 ding-libs_0.5.0-1.dsc dab937537a05d7a7cbe605fdb9b3809080d67b124ac97eb321255b35f5b172fd 868840 ding-libs_0.5.0.orig.tar.gz 6c3d822f9db99471d876496a2b8961a56ad2a43ce4d4fd651ae976b104c37b22 6621 ding-libs_0.5.0-1.diff.gz 44ff2240696112647a1bca6d48892c8f01843e58e6947e6a66350d056c832de7 5386 libbasicobjects-dev_0.5.0-1_amd64.deb 6835d7e3dafbe86c349e65ae31674d658fe5d7ede371c7d7c322e49517d09cae 5848 libbasicobjects0_0.5.0-1_amd64.deb 202ce3ed08c10fe1a2a42eaef878e88a4bf29dd3e065825eefdf1238cb655636 40498 libcollection-dev_0.5.0-1_amd64.deb 7e66ebb4ee7d69441219d644944f6935c1abeb36085f20a63809c1dac03ef21d 22156 libcollection4_0.5.0-1_amd64.deb 64b368594e68e3d708b191702f2164e5595ef0326d6f3bb630e3d52faef7e45f 18406 libdhash-dev_0.5.0-1_amd64.deb 491c682377a374782ea56b7e7d7f6bc9b9e4b9cfc9af6c02feb4a0ac1fa2b990 8656 libdhash1_0.5.0-1_amd64.deb b52dc2e1d804579dbcbbac41910ae2aff5b9bd6c1ac2d5aa09eb4d25c34f1bd6 59448 libini-config-dev_0.5.0-1_amd64.deb 63fa175a82df5650935626db62bc0c11ca27d669035704da8a2a676a2f39721a 39516 libini-config5_0.5.0-1_amd64.deb 72fc6ff724bd4114fe77d041898c6aef31c6c3ff1903ee074e6da076d8888161 11908 libpath-utils-dev_0.5.0-1_amd64.deb 0d3a9c5bcc8b5455f589abadb6c3347be3428c9bc6de419946b07df1fa208b3e 8628 libpath-utils1_0.5.0-1_amd64.deb 71c02753316c0f37302c3f7376f1e1b5cdee9fb9700091b8e174ff8b35eba18f 8772 libref-array-dev_0.5.0-1_amd64.deb 61c3489b12bb94e791c7a3df13e2b85fdd31b62e54ff34e3cceecb62d455d396 7206 libref-array1_0.5.0-1_amd64.deb Files: f70018e808cdd0dd1e2534a6c5f4e30c 2572 libs extra ding-libs_0.5.0-1.dsc 786f2880d30136a61df02e5d740ddc6e 868840 libs extra ding-libs_0.5.0.orig.tar.gz 5a99d63223277b8374e69e39b49162b8 6621 libs extra ding-libs_0.5.0-1.diff.gz c98d1781b28d5d3b1d055e94abcbd2d4 5386 libdevel extra libbasicobjects-dev_0.5.0-1_amd64.deb b7a3fc88946bde3e4b0565dc093e795f 5848 libs extra libbasicobjects0_0.5.0-1_amd64.deb 34d03791104be85d3b06b2714c1450c6 40498 libdevel extra libcollection-dev_0.5.0-1_amd64.deb f820be6e8be0dcd3dda831d590bb4c05 22156 libs extra libcollection4_0.5.0-1_amd64.deb 780adeace65514569842387079e220ce 18406 libdevel extra libdhash-dev_0.5.0-1_amd64.deb a25ebfe5ef1f013bbf49e2e20f446dc6 8656 libs extra libdhash1_0.5.0-1_amd64.deb 2db42def39456d7ff3029ce349710705 59448 libdevel extra libini-config-dev_0.5.0-1_amd64.deb 3c6bb513460bc858ef76dac0067dd753 39516 libs extra libini-config5_0.5.0-1_amd64.deb 2993df72b6b83123d92c88a3242b6fbc 11908 libdevel extra libpath-utils-dev_0.5.0-1_amd64.deb 35b68d503d1331c275bf42e5ca899c0a 8628 libs extra libpath-utils1_0.5.0-1_amd64.deb fb18716eb664d30755027e8349ee72b4 8772 libdevel extra libref-array-dev_0.5.0-1_amd64.deb 24126d8eb0ebc15ae94f7636bc60bd91 7206 libs extra libref-array1_0.5.0-1_amd64.deb -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBAgAGBQJVz71fAAoJEMtwMWWoiYTcOdQP/Al/evMzZCHncuz8uEywnQLv RW/Y6BPlU+Y26f8vn/aC+tXBeBbeyun/Q5wjO5mL4uNZV4JroftlALGV9/I3Ptqd Ckc1LuaxAfFzsuEPrcAsaoDWm+L0a3yMm5cgNOCaKkBJOs7QYdGb4H/3YUVlVuk1 T8hfQeWq/cI38HP6z7yToffcbZhb974HsUL4eGHhY8JzkwX4R7NM7IQg+WLoJjMy 19KDo0MmYlPRuYGJSUBQLXudecXPbFJjy95d+57lyfvvLQY0XyT0so0JQek00bDC QuxB3A9FGA7MXXgktUT97JNIAPEiwpj8YAJgD3YjmfPTKR07dymZQIh6hRQZTMvN MPA8jRJ9IvZYsXm1v1TNScmXuun00X29iBx+zXF1p/sl1PmNO92ID2GsMqlcqrEE wCj2c8StBGs35DfeNSWbMnt49fUwymr5BX+WKe1D4GBE2YMFiFqo7eO7gotfBoms PKhk6kqw8xdOKRPcaW27TgWM5f9YdVZUEILvTZ3mefPcq/g3VSnt+XrRjp4O/80/ HyaATTkb/DZ/erGSg+pwsV644iS7EhvwmrgNXPZTYv85aTIyTJkL93hyiTudad2o NtGauKbORD79BMg1Z0kqjfMKP4G9GnbY8NfzWFJ6+4Jz9QyKbdTJFlOmFs2bFKCW KO+bnX1up/KmK/6iJQV3 =kqNg -----END PGP SIGNATURE----- Thank you for your contribution to Debian. From noreply at release.debian.org Fri Aug 21 16:39:13 2015 From: noreply at release.debian.org (Debian testing watch) Date: Fri, 21 Aug 2015 16:39:13 +0000 Subject: [Pkg-sssd-devel] ding-libs 0.5.0-1 MIGRATED to testing Message-ID: FYI: The status of the ding-libs source package in Debian's testing distribution has changed. Previous version: 0.4.0-1 Current version: 0.5.0-1 -- This email is automatically generated once a day. As the installation of new packages into testing happens multiple times a day you will receive later changes on the next day. See https://release.debian.org/testing-watch/ for more information. From noreply at release.debian.org Sat Aug 29 04:39:04 2015 From: noreply at release.debian.org (Debian testing autoremoval watch) Date: Sat, 29 Aug 2015 04:39:04 +0000 Subject: [Pkg-sssd-devel] sssd is marked for autoremoval from testing Message-ID: sssd 1.12.5-2 is marked for autoremoval from testing on 2015-09-14 It is affected by these RC bugs: 794332: sssd-common: deletes conffile owned by sssd: /etc/logrotate.d/sssd