Package: libxtables12
Version: 1.6.0+snapshot20161117-2
Severity: important
Tags: patch

While investigating the libxtables12 transition I noticed that none of the
libraries generated by src:iptables produce versioned dependencies in other
packages. For example, connman Depends: libxtables11 (without the expected
(>= version) qualifier), and systemd Depends: libip4tc0 (again without a
(>= version) qualifier).

This is problematic because when one of your libraries adds new ABI, and a
dependent package such as connman or systemd makes use of that ABI,
dpkg will allow the dependent package to be installed with an older
library version, which will make it fail to link at runtime. Similarly,
the dependent package would be allowed to migrate to testing without
its required libraries also being in testing, potentially causing a
broken stable release.

For iptables itself, there is a shlibs.local file to generate versioned
dependencies, but this is ineffective for third-party packages.

After libxtables12 has migrated to testing, I would recommend adding a
symbols file for each library as described in Policy ยง8.6
<https://www.debian.org/doc/debian-policy/ch-sharedlibs.html#s-sharedlibs-depends>.
This should make the shlibs.local file unnecessary.

In the proposed symbols files in the attached patch, I have also set
the Build-Depends-Package metadata field, so that a versioned
build-dependency on libip4tc-dev (>= 1.2.3) would result in a versioned
runtime dependency on at least libip4tc0 (>= 1.2.3); this is a useful
way to avoid breaking software authors' expectations.

Alternatively, if you do not want to maintain symbols files, please use
the -V or --version-info option to dh_makeshlibs(1) to generate
conservative versioned dependencies. For example, util-linux is an example
of this technique.

Adding the symbols files reveals some namespace pollution that should
probably be fixed upstream: in particular, "int line" was probably not
intended to be ABI. Please talk to upstream about making symbols that
are not intended to be ABI static, or assigning them hidden visibility.

Regards,
    S

-- System Information:
Debian Release: stretch/sid
  APT prefers unstable-debug
  APT policy: (500, 'unstable-debug'), (500, 'unstable'), (500, 'testing'), 
(500, 'stable'), (1, 'experimental-debug'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.8.0-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_GB.utf8, LC_CTYPE=en_GB.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages libxtables12 depends on:
ii  libc6  2.24-5

libxtables12 recommends no packages.

libxtables12 suggests no packages.

-- no debconf information
>From 4ba5bcf139d5a3b69984909eb61b1aa7b89935c7 Mon Sep 17 00:00:00 2001
From: Simon McVittie <[email protected]>
Date: Tue, 22 Nov 2016 10:11:42 +0000
Subject: [PATCH] Add symbols files for all libraries

* Add symbols files for all libraries
  - d/shlibs.local: remove, obsoleted by symbols files
---
 debian/changelog            |  7 +++++
 debian/libip4tc0.symbols    | 32 +++++++++++++++++++
 debian/libip6tc0.symbols    | 32 +++++++++++++++++++
 debian/libiptc0.symbols     |  2 ++
 debian/libxtables12.symbols | 75 +++++++++++++++++++++++++++++++++++++++++++++
 debian/shlibs.local         |  1 -
 6 files changed, 148 insertions(+), 1 deletion(-)
 create mode 100644 debian/libip4tc0.symbols
 create mode 100644 debian/libip6tc0.symbols
 create mode 100644 debian/libiptc0.symbols
 create mode 100644 debian/libxtables12.symbols
 delete mode 100644 debian/shlibs.local

diff --git a/debian/changelog b/debian/changelog
index 84c0925..3c0a8d9 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+iptables (1.6.0+snapshot20161117-3.1) UNRELEASED; urgency=medium
+
+  * Add symbols files for all libraries
+    - d/shlibs.local: remove, obsoleted by symbols files
+
+ -- Simon McVittie <[email protected]>  Tue, 22 Nov 2016 09:46:34 +0000
+
 iptables (1.6.0+snapshot20161117-3) unstable; urgency=medium
 
   * [21fdc57] libxtables12: breaks and replaces libxtables11 (Closes:
diff --git a/debian/libip4tc0.symbols b/debian/libip4tc0.symbols
new file mode 100644
index 0000000..8e1e60b
--- /dev/null
+++ b/debian/libip4tc0.symbols
@@ -0,0 +1,32 @@
+libip4tc.so.0 libip4tc0 #MINVER#
+* Build-Depends-Package: libip4tc-dev
+ dump_entries@Base 1.6.0+snapshot20161117
+ iptc_append_entry@Base 1.6.0+snapshot20161117
+ iptc_builtin@Base 1.6.0+snapshot20161117
+ iptc_check_entry@Base 1.6.0+snapshot20161117
+ iptc_commit@Base 1.6.0+snapshot20161117
+ iptc_create_chain@Base 1.6.0+snapshot20161117
+ iptc_delete_chain@Base 1.6.0+snapshot20161117
+ iptc_delete_entry@Base 1.6.0+snapshot20161117
+ iptc_delete_num_entry@Base 1.6.0+snapshot20161117
+ iptc_first_chain@Base 1.6.0+snapshot20161117
+ iptc_first_rule@Base 1.6.0+snapshot20161117
+ iptc_flush_entries@Base 1.6.0+snapshot20161117
+ iptc_free@Base 1.6.0+snapshot20161117
+ iptc_get_policy@Base 1.6.0+snapshot20161117
+ iptc_get_references@Base 1.6.0+snapshot20161117
+ iptc_get_target@Base 1.6.0+snapshot20161117
+ iptc_init@Base 1.6.0+snapshot20161117
+ iptc_insert_entry@Base 1.6.0+snapshot20161117
+ iptc_is_chain@Base 1.6.0+snapshot20161117
+ iptc_next_chain@Base 1.6.0+snapshot20161117
+ iptc_next_rule@Base 1.6.0+snapshot20161117
+ iptc_ops@Base 1.6.0+snapshot20161117
+ iptc_read_counter@Base 1.6.0+snapshot20161117
+ iptc_rename_chain@Base 1.6.0+snapshot20161117
+ iptc_replace_entry@Base 1.6.0+snapshot20161117
+ iptc_set_counter@Base 1.6.0+snapshot20161117
+ iptc_set_policy@Base 1.6.0+snapshot20161117
+ iptc_strerror@Base 1.6.0+snapshot20161117
+ iptc_zero_counter@Base 1.6.0+snapshot20161117
+ iptc_zero_entries@Base 1.6.0+snapshot20161117
diff --git a/debian/libip6tc0.symbols b/debian/libip6tc0.symbols
new file mode 100644
index 0000000..3c91c28
--- /dev/null
+++ b/debian/libip6tc0.symbols
@@ -0,0 +1,32 @@
+libip6tc.so.0 libip6tc0 #MINVER#
+* Build-Depends-Package: libip6tc-dev
+ dump_entries6@Base 1.6.0+snapshot20161117
+ ip6tc_append_entry@Base 1.6.0+snapshot20161117
+ ip6tc_builtin@Base 1.6.0+snapshot20161117
+ ip6tc_check_entry@Base 1.6.0+snapshot20161117
+ ip6tc_commit@Base 1.6.0+snapshot20161117
+ ip6tc_create_chain@Base 1.6.0+snapshot20161117
+ ip6tc_delete_chain@Base 1.6.0+snapshot20161117
+ ip6tc_delete_entry@Base 1.6.0+snapshot20161117
+ ip6tc_delete_num_entry@Base 1.6.0+snapshot20161117
+ ip6tc_first_chain@Base 1.6.0+snapshot20161117
+ ip6tc_first_rule@Base 1.6.0+snapshot20161117
+ ip6tc_flush_entries@Base 1.6.0+snapshot20161117
+ ip6tc_free@Base 1.6.0+snapshot20161117
+ ip6tc_get_policy@Base 1.6.0+snapshot20161117
+ ip6tc_get_references@Base 1.6.0+snapshot20161117
+ ip6tc_get_target@Base 1.6.0+snapshot20161117
+ ip6tc_init@Base 1.6.0+snapshot20161117
+ ip6tc_insert_entry@Base 1.6.0+snapshot20161117
+ ip6tc_is_chain@Base 1.6.0+snapshot20161117
+ ip6tc_next_chain@Base 1.6.0+snapshot20161117
+ ip6tc_next_rule@Base 1.6.0+snapshot20161117
+ ip6tc_ops@Base 1.6.0+snapshot20161117
+ ip6tc_read_counter@Base 1.6.0+snapshot20161117
+ ip6tc_rename_chain@Base 1.6.0+snapshot20161117
+ ip6tc_replace_entry@Base 1.6.0+snapshot20161117
+ ip6tc_set_counter@Base 1.6.0+snapshot20161117
+ ip6tc_set_policy@Base 1.6.0+snapshot2016111
+ ip6tc_strerror@Base 1.6.0+snapshot20161117
+ ip6tc_zero_counter@Base 1.6.0+snapshot20161117
+ ip6tc_zero_entries@Base 1.6.0+snapshot20161117
diff --git a/debian/libiptc0.symbols b/debian/libiptc0.symbols
new file mode 100644
index 0000000..723fb17
--- /dev/null
+++ b/debian/libiptc0.symbols
@@ -0,0 +1,2 @@
+libiptc.so.0 libiptc0 #MINVER#
+* Build-Depends-Package: libiptc-dev
diff --git a/debian/libxtables12.symbols b/debian/libxtables12.symbols
new file mode 100644
index 0000000..39db048
--- /dev/null
+++ b/debian/libxtables12.symbols
@@ -0,0 +1,75 @@
+libxtables.so.12 libxtables12 #MINVER#
+* Build-Depends-Package: libxtables-dev
+ afinfo@Base 1.6.0+snapshot20161117
+ basic_exit_err@Base 1.6.0+snapshot20161117
+ get_kernel_version@Base 1.6.0+snapshot20161117
+ kernel_version@Base 1.6.0+snapshot20161117
+ line@Base 1.6.0+snapshot20161117
+ xt_params@Base 1.6.0+snapshot20161117
+ xt_xlate_add@Base 1.6.0+snapshot20161117
+ xt_xlate_add_comment@Base 1.6.0+snapshot20161117
+ xt_xlate_alloc@Base 1.6.0+snapshot20161117
+ xt_xlate_free@Base 1.6.0+snapshot20161117
+ xt_xlate_get@Base 1.6.0+snapshot20161117
+ xt_xlate_get_comment@Base 1.6.0+snapshot20161117
+ xtables_calloc@Base 1.6.0+snapshot20161117
+ xtables_chain_protos@Base 1.6.0+snapshot20161117
+ xtables_compatible_revision@Base 1.6.0+snapshot20161117
+ xtables_find_match@Base 1.6.0+snapshot20161117
+ xtables_find_target@Base 1.6.0+snapshot20161117
+ xtables_free_opts@Base 1.6.0+snapshot20161117
+ xtables_init@Base 1.6.0+snapshot20161117
+ xtables_init_all@Base 1.6.0+snapshot20161117
+ xtables_insmod@Base 1.6.0+snapshot20161117
+ xtables_ip6addr_to_anyname@Base 1.6.0+snapshot20161117
+ xtables_ip6addr_to_numeric@Base 1.6.0+snapshot20161117
+ xtables_ip6mask_to_cidr@Base 1.6.0+snapshot20161117
+ xtables_ip6mask_to_numeric@Base 1.6.0+snapshot20161117
+ xtables_ip6parse_any@Base 1.6.0+snapshot20161117
+ xtables_ip6parse_multiple@Base 1.6.0+snapshot20161117
+ xtables_ipaddr_to_anyname@Base 1.6.0+snapshot20161117
+ xtables_ipaddr_to_numeric@Base 1.6.0+snapshot20161117
+ xtables_ipmask_to_cidr@Base 1.6.0+snapshot20161117
+ xtables_ipmask_to_numeric@Base 1.6.0+snapshot20161117
+ xtables_ipparse_any@Base 1.6.0+snapshot20161117
+ xtables_ipparse_multiple@Base 1.6.0+snapshot20161117
+ xtables_lmap_free@Base 1.6.0+snapshot20161117
+ xtables_lmap_id2name@Base 1.6.0+snapshot20161117
+ xtables_lmap_init@Base 1.6.0+snapshot20161117
+ xtables_lmap_name2id@Base 1.6.0+snapshot20161117
+ xtables_load_ko@Base 1.6.0+snapshot20161117
+ xtables_malloc@Base 1.6.0+snapshot20161117
+ xtables_matches@Base 1.6.0+snapshot20161117
+ xtables_merge_options@Base 1.6.0+snapshot20161117
+ xtables_modprobe_program@Base 1.6.0+snapshot20161117
+ xtables_numeric_to_ip6addr@Base 1.6.0+snapshot20161117
+ xtables_numeric_to_ipaddr@Base 1.6.0+snapshot20161117
+ xtables_numeric_to_ipmask@Base 1.6.0+snapshot20161117
+ xtables_option_metavalidate@Base 1.6.0+snapshot20161117
+ xtables_option_mfcall@Base 1.6.0+snapshot20161117
+ xtables_option_mpcall@Base 1.6.0+snapshot20161117
+ xtables_option_parse@Base 1.6.0+snapshot20161117
+ xtables_option_tfcall@Base 1.6.0+snapshot20161117
+ xtables_option_tpcall@Base 1.6.0+snapshot20161117
+ xtables_options_fcheck@Base 1.6.0+snapshot20161117
+ xtables_options_xfrm@Base 1.6.0+snapshot20161117
+ xtables_param_act@Base 1.6.0+snapshot20161117
+ xtables_parse_interface@Base 1.6.0+snapshot20161117
+ xtables_parse_port@Base 1.6.0+snapshot20161117
+ xtables_parse_protocol@Base 1.6.0+snapshot20161117
+ xtables_pending_matches@Base 1.6.0+snapshot20161117
+ xtables_pending_targets@Base 1.6.0+snapshot20161117
+ xtables_print_num@Base 1.6.0+snapshot20161117
+ xtables_realloc@Base 1.6.0+snapshot20161117
+ xtables_register_match@Base 1.6.0+snapshot20161117
+ xtables_register_matches@Base 1.6.0+snapshot20161117
+ xtables_register_target@Base 1.6.0+snapshot20161117
+ xtables_register_targets@Base 1.6.0+snapshot20161117
+ xtables_rule_matches_free@Base 1.6.0+snapshot20161117
+ xtables_save_string@Base 1.6.0+snapshot20161117
+ xtables_service_to_port@Base 1.6.0+snapshot20161117
+ xtables_set_nfproto@Base 1.6.0+snapshot20161117
+ xtables_set_params@Base 1.6.0+snapshot20161117
+ xtables_strtoui@Base 1.6.0+snapshot20161117
+ xtables_strtoul@Base 1.6.0+snapshot20161117
+ xtables_targets@Base 1.6.0+snapshot20161117
diff --git a/debian/shlibs.local b/debian/shlibs.local
deleted file mode 100644
index 69d5ca1..0000000
--- a/debian/shlibs.local
+++ /dev/null
@@ -1 +0,0 @@
-libxtables 12 libxtables12 (>= 1.6.0+snapshot20161117)
-- 
2.10.2

Reply via email to