diff options
Diffstat (limited to 'scripts/t')
191 files changed, 16957 insertions, 0 deletions
diff --git a/scripts/t/Dpkg_Arch.t b/scripts/t/Dpkg_Arch.t new file mode 100644 index 0000000..85301e2 --- /dev/null +++ b/scripts/t/Dpkg_Arch.t @@ -0,0 +1,201 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 7142; + +use_ok('Dpkg::Arch', qw(debarch_to_debtuple debarch_to_multiarch + debarch_eq debarch_is debarch_is_wildcard + debarch_is_illegal + debarch_to_abiattrs debarch_to_cpubits + debarch_list_parse + debtuple_to_debarch gnutriplet_to_debarch + debtuple_to_gnutriplet gnutriplet_to_debtuple + get_host_gnu_type + get_valid_arches)); + +my $KNOWN_ARCHES_TOTAL = 206; +my @valid_arches = get_valid_arches(); + +sub get_valid_wildcards +{ + my %wildcards; + my @wildcards_base = qw( + any + any-any + any-any-any + any-any-any-any + ); + + foreach my $archname (@valid_arches) { + my @tuple = debarch_to_debtuple($archname); + + my @wildcards_arch = ( + # Two element tuples. + "$tuple[2]-any", + "any-$tuple[3]", + + # Three element tuples. + "$tuple[1]-$tuple[2]-any", + "$tuple[1]-any-$tuple[3]", + "$tuple[1]-any-any", + "any-$tuple[2]-$tuple[3]", + "any-$tuple[2]-any", + "any-any-$tuple[3]", + + # Four element tuples. + "$tuple[0]-$tuple[1]-$tuple[2]-any", + "$tuple[0]-$tuple[1]-any-$tuple[3]", + "$tuple[0]-$tuple[1]-any-any", + "$tuple[0]-any-$tuple[2]-$tuple[3]", + "$tuple[0]-any-$tuple[2]-any", + "$tuple[0]-any-any-$tuple[3]", + "$tuple[0]-any-any-any", + "any-$tuple[1]-$tuple[2]-$tuple[3]", + "any-$tuple[1]-$tuple[2]-any", + "any-$tuple[1]-any-$tuple[3]", + "any-$tuple[1]-any-any", + "any-any-$tuple[2]-$tuple[3]", + "any-any-$tuple[2]-any", + "any-any-any-$tuple[3]", + ); + + foreach my $wildcard ((@wildcards_base, @wildcards_arch)) { + push @{$wildcards{$wildcard}}, $archname; + } + } + + return \%wildcards; +} + +my @tuple_new; +my @tuple_ref; + +@tuple_new = debarch_to_debtuple('unknown'); +is_deeply(\@tuple_new, [], 'unknown tuple'); + +@tuple_ref = qw(base gnu linux amd64); +@tuple_new = debarch_to_debtuple('amd64'); +is_deeply(\@tuple_new, \@tuple_ref, 'valid tuple'); + +@tuple_ref = qw(base gnu linux amd64); +@tuple_new = debarch_to_debtuple('amd64'); +is_deeply(\@tuple_new, \@tuple_ref, 'valid tuple'); +@tuple_new = debarch_to_debtuple('linux-amd64'); +is_deeply(\@tuple_new, \@tuple_ref, 'valid tuple'); + +is(debarch_to_multiarch('i386'), 'i386-linux-gnu', + 'normalized i386 multiarch triplet'); +is(debarch_to_multiarch('amd64'), 'x86_64-linux-gnu', + 'normalized amd64 multiarch triplet'); + +ok(!debarch_eq('amd64', 'i386'), 'no match, simple arch'); +ok(!debarch_eq('', 'amd64'), 'no match, empty first arch'); +ok(!debarch_eq('amd64', ''), 'no match, empty second arch'); +ok(!debarch_eq('amd64', 'unknown'), 'no match, with first unknown arch'); +ok(!debarch_eq('unknown', 'i386'), 'no match, second unknown arch'); +ok(debarch_eq('unknown', 'unknown'), 'match equal unknown arch'); +ok(debarch_eq('amd64', 'amd64'), 'match equal known arch'); +ok(debarch_eq('amd64', 'linux-amd64'), 'match implicit linux arch'); + +ok(!debarch_is('unknown', 'linux-any'), 'no match unknown on wildcard cpu'); +ok(!debarch_is('unknown', 'any-amd64'), 'no match unknown on wildcard os'); +ok(!debarch_is('amd64', 'unknown'), 'no match amd64 on unknown wildcard'); +ok(!debarch_is('amd64', 'unknown-any'), 'no match amd64 on unknown wildcard'); +ok(!debarch_is('amd64', 'any-unknown'), 'no match amd64 on unknown wildcard'); +ok(debarch_is('unknown', 'any'), 'match unknown on global wildcard'); +ok(debarch_is('linux-amd64', 'linux-any'), 'match implicit linux-amd64 on wildcard cpu'); +ok(debarch_is('linux-amd64', 'any-amd64'), 'match implicit linux-amd64 on wildcard os'); + +my $wildcards = get_valid_wildcards(); + +foreach my $wildcard (sort keys %{$wildcards}) { + ok(debarch_is_wildcard($wildcard), "$wildcard is a wildcard"); + + foreach my $arch (sort @{$wildcards->{$wildcard}}) { + ok(debarch_is($arch, $wildcard), "wildcard $wildcard matches $arch"); + } +} + +ok(!debarch_is_wildcard('unknown'), 'unknown is not a wildcard'); +ok(!debarch_is_wildcard('all'), 'all is not a wildcard'); +ok(!debarch_is_wildcard('amd64'), '<arch> is not a wildcard'); + +ok(!debarch_is_illegal('0'), ''); +ok(!debarch_is_illegal('a'), ''); +ok(!debarch_is_illegal('amd64'), ''); +ok(!debarch_is_illegal('!arm64'), ''); +ok(!debarch_is_illegal('kfreebsd-any'), ''); +ok(debarch_is_illegal('!amd64!arm'), ''); +ok(debarch_is_illegal('arch%name'), ''); +ok(debarch_is_illegal('-any'), ''); +ok(debarch_is_illegal('!'), ''); + +my @arch_new; +my @arch_ref; + +@arch_ref = qw(amd64 !arm64 linux-i386 !kfreebsd-any); +@arch_new = debarch_list_parse('amd64 !arm64 linux-i386 !kfreebsd-any'); +is_deeply(\@arch_new, \@arch_ref, 'parse valid arch list'); + +@arch_ref = qw(amd64 arm64 linux-i386 kfreebsd-any); +@arch_new = debarch_list_parse('amd64 arm64 linux-i386 kfreebsd-any', positive => 1); +is_deeply(\@arch_new, \@arch_ref, 'parse valid positive arch list'); + +eval { @arch_new = debarch_list_parse('!amd64!arm64') }; +ok($@, 'parse concatenated arches failed'); + +eval { @arch_new = debarch_list_parse('amd64 !arm64 !mips', positive => 1) }; +ok($@, 'parse disallowed negated arches failed'); + +is(debarch_to_abiattrs(undef), undef, 'undef ABI attrs'); +is_deeply([ debarch_to_abiattrs('amd64') ], [ qw(64 little) ], 'amd64 ABI attrs'); +is_deeply([ debarch_to_abiattrs('x32') ], [ qw(32 little) ], 'x32 ABI attrs'); + +is(debarch_to_cpubits(undef), undef, 'undef CPU bits'); +is(debarch_to_cpubits('i386'), 32, 'i386 CPU bits'); +is(debarch_to_cpubits('amd64'), 64, 'amd64 CPU bits'); + +is(debtuple_to_debarch((undef) x 4), undef, 'undef debtuple'); +is(debtuple_to_debarch('base', 'gnu', 'linux', 'amd64'), 'amd64', 'known debtuple'); +is(debtuple_to_debarch('unknown', 'unknown', 'unknown', 'unknown'), undef, 'unknown debtuple'); + +is(gnutriplet_to_debarch(undef), undef, 'undef gnutriplet'); +is(gnutriplet_to_debarch('unknown-unknown-unknown'), undef, 'unknown gnutriplet'); +is(gnutriplet_to_debarch('x86_64-linux-gnu'), 'amd64', 'known gnutriplet'); + +foreach my $arch (@valid_arches) { + my @tuple = debarch_to_debtuple($arch); + is(debtuple_to_debarch(@tuple), $arch, + "bijective arch $arch to tuple @tuple"); + + my $triplet = debtuple_to_gnutriplet(@tuple); + is_deeply([ gnutriplet_to_debtuple($triplet) ], \@tuple, + "bijective triplet $triplet to tuple @tuple"); +} + +is(scalar @valid_arches, $KNOWN_ARCHES_TOTAL, + 'expected amount of known architectures'); + +{ + local $ENV{CC} = 'false'; + is(get_host_gnu_type(), '', 'CC does not support -dumpmachine'); + + $ENV{CC} = 'echo CC'; + is(get_host_gnu_type(), 'CC -dumpmachine', + 'CC does not report expected synthetic result for -dumpmachine'); +} diff --git a/scripts/t/Dpkg_BuildAPI.t b/scripts/t/Dpkg_BuildAPI.t new file mode 100644 index 0000000..b948a8a --- /dev/null +++ b/scripts/t/Dpkg_BuildAPI.t @@ -0,0 +1,93 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 17; +use Test::Dpkg qw(:paths); + +$ENV{DEB_HOST_ARCH} = 'amd64'; + +use Dpkg::Control; +use Dpkg::Control::Info; + +BEGIN { + use_ok('Dpkg::BuildAPI', qw(get_build_api reset_build_api)); +} + +my $datadir = test_get_data_path(); + +sub test_load_ctrl { + my $file = shift; + + my $ctrl = Dpkg::Control::Info->new(type => CTRL_TMPL_SRC); + $ctrl->load("$datadir/$file"); + + return $ctrl; +} + +sub test_parse_env_invalid { + my ($value, $desc) = @_; + + my $api; + + eval { + local $ENV{DPKG_BUILD_API} = $value; + reset_build_api(); + $api = get_build_api(); + }; + + ok($@, "failed to parse build API $desc: $@"); + is($api, undef, "parsing invalid build API $desc returns undef"); +} + +sub test_parse_ctrl_invalid { + my ($file, $desc) = @_; + + my $ctrl = test_load_ctrl($file); + my $api; + + eval { + reset_build_api(); + $api = get_build_api($ctrl); + }; + ok($@, "failed to parse build API $desc from $file: $@"); + is($api, undef, "parsing invalid build API $desc from $file returns undef"); +} + +sub test_parse_ctrl { + my ($file, $exp_api, $desc) = @_; + + my $ctrl = test_load_ctrl($file); + + reset_build_api(); + my $api = get_build_api($ctrl); + is($api, $exp_api, "build API $desc matches"); +} + +test_parse_env_invalid('aa', 'text level'); +test_parse_env_invalid('999999999', 'out of range'); + +test_parse_ctrl_invalid('ctrl-api-desync', 'multiple build API levels out of sync'); +test_parse_ctrl_invalid('ctrl-api-no-ver', 'build API with no level'); +test_parse_ctrl_invalid('ctrl-api-rel-noeq', 'API level with non-eq operator'); +test_parse_ctrl_invalid('ctrl-api-gt-max', 'API level > max'); +test_parse_ctrl_invalid('ctrl-api-no-int', 'API level is not an integer'); + +test_parse_ctrl('ctrl-api-default', 0, 'default API level'); +test_parse_ctrl('ctrl-api-explicit', 1, 'explicit API level'); + +# TODO: Add more test cases. diff --git a/scripts/t/Dpkg_BuildAPI/ctrl-api-default b/scripts/t/Dpkg_BuildAPI/ctrl-api-default new file mode 100644 index 0000000..f83ca38 --- /dev/null +++ b/scripts/t/Dpkg_BuildAPI/ctrl-api-default @@ -0,0 +1,4 @@ +Source: pkg-source + +Package: pkg-binary +Architecture: all diff --git a/scripts/t/Dpkg_BuildAPI/ctrl-api-desync b/scripts/t/Dpkg_BuildAPI/ctrl-api-desync new file mode 100644 index 0000000..dd959ac --- /dev/null +++ b/scripts/t/Dpkg_BuildAPI/ctrl-api-desync @@ -0,0 +1,10 @@ +Source: pkg-source +Build-Depends: + dpkg-build-api (= 0), +Build-Depends-Arch: + dpkg-build-api (= 1), +Build-Depends-Indep: + dpkg-build-api (= 2), + +Package: pkg-binary +Architecture: all diff --git a/scripts/t/Dpkg_BuildAPI/ctrl-api-explicit b/scripts/t/Dpkg_BuildAPI/ctrl-api-explicit new file mode 100644 index 0000000..cb168f8 --- /dev/null +++ b/scripts/t/Dpkg_BuildAPI/ctrl-api-explicit @@ -0,0 +1,6 @@ +Source: pkg-source +Build-Depends: + dpkg-build-api (= 1), + +Package: pkg-binary +Architecture: all diff --git a/scripts/t/Dpkg_BuildAPI/ctrl-api-gt-max b/scripts/t/Dpkg_BuildAPI/ctrl-api-gt-max new file mode 100644 index 0000000..f3ed403 --- /dev/null +++ b/scripts/t/Dpkg_BuildAPI/ctrl-api-gt-max @@ -0,0 +1,6 @@ +Source: pkg-source +Build-Depends: + dpkg-build-api (= 999999999), + +Package: pkg-binary +Architecture: all diff --git a/scripts/t/Dpkg_BuildAPI/ctrl-api-no-int b/scripts/t/Dpkg_BuildAPI/ctrl-api-no-int new file mode 100644 index 0000000..82d3cff --- /dev/null +++ b/scripts/t/Dpkg_BuildAPI/ctrl-api-no-int @@ -0,0 +1,6 @@ +Source: pkg-source +Build-Depends: + dpkg-build-api (= 1.0), + +Package: pkg-binary +Architecture: all diff --git a/scripts/t/Dpkg_BuildAPI/ctrl-api-no-ver b/scripts/t/Dpkg_BuildAPI/ctrl-api-no-ver new file mode 100644 index 0000000..9fce731 --- /dev/null +++ b/scripts/t/Dpkg_BuildAPI/ctrl-api-no-ver @@ -0,0 +1,6 @@ +Source: pkg-source +Build-Depends: + dpkg-build-api, + +Package: pkg-binary +Architecture: all diff --git a/scripts/t/Dpkg_BuildAPI/ctrl-api-rel-noeq b/scripts/t/Dpkg_BuildAPI/ctrl-api-rel-noeq new file mode 100644 index 0000000..3b2e0f8 --- /dev/null +++ b/scripts/t/Dpkg_BuildAPI/ctrl-api-rel-noeq @@ -0,0 +1,6 @@ +Source: pkg-source +Build-Depends: + dpkg-build-api (>= 1), + +Package: pkg-binary +Architecture: all diff --git a/scripts/t/Dpkg_BuildEnv.t b/scripts/t/Dpkg_BuildEnv.t new file mode 100644 index 0000000..2e40ec7 --- /dev/null +++ b/scripts/t/Dpkg_BuildEnv.t @@ -0,0 +1,48 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 14; + +BEGIN { + use_ok('Dpkg::BuildEnv'); +} + +$ENV{DPKG_TEST_VAR_A} = 100; +$ENV{DPKG_TEST_VAR_B} = 200; +delete $ENV{DPKG_TEST_VAR_Z}; + +is(scalar Dpkg::BuildEnv::list_accessed(), 0, 'no accessed variables'); +is(scalar Dpkg::BuildEnv::list_modified(), 0, 'no modified variables'); + +is(Dpkg::BuildEnv::get('DPKG_TEST_VAR_A'), 100, 'get value'); + +is(scalar Dpkg::BuildEnv::list_accessed(), 1, '1 accessed variables'); +is(scalar Dpkg::BuildEnv::list_modified(), 0, 'no modified variables'); + +is(Dpkg::BuildEnv::get('DPKG_TEST_VAR_B'), 200, 'get value'); +Dpkg::BuildEnv::set('DPKG_TEST_VAR_B', 300); +is(Dpkg::BuildEnv::get('DPKG_TEST_VAR_B'), 300, 'set value'); + +is(scalar Dpkg::BuildEnv::list_accessed(), 2, '2 accessed variables'); +is(scalar Dpkg::BuildEnv::list_modified(), 1, '1 modified variable'); + +ok(Dpkg::BuildEnv::has('DPKG_TEST_VAR_A'), 'variables is present'); +ok(!Dpkg::BuildEnv::has('DPKG_TEST_VAR_Z'), 'variables is not present'); + +is(scalar Dpkg::BuildEnv::list_accessed(), 3, '2 accessed variables'); +is(scalar Dpkg::BuildEnv::list_modified(), 1, '1 modified variable'); diff --git a/scripts/t/Dpkg_BuildFlags.t b/scripts/t/Dpkg_BuildFlags.t new file mode 100644 index 0000000..530871c --- /dev/null +++ b/scripts/t/Dpkg_BuildFlags.t @@ -0,0 +1,174 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 40; + +BEGIN { + $ENV{DEB_BUILD_ARCH} = 'amd64'; + $ENV{DEB_HOST_ARCH} = 'amd64'; + use_ok('Dpkg::BuildFlags'); +} + +sub test_has_flag +{ + my ($bf, $flag, $optflag) = @_; + + my $value = $bf->get($flag); + ok($value =~ m/$optflag/, "$flag contains $optflag: $value"); +} + +sub test_has_noflag +{ + my ($bf, $flag, $optflag) = @_; + + my $value = $bf->get($flag); + ok($value !~ m/$optflag/, "$flag does not contain $optflag: $value"); +} +my $bf = Dpkg::BuildFlags->new(); + +ok($bf->has('CPPFLAGS'), 'CPPFLAGS is present'); +is($bf->get_origin('CPPFLAGS'), 'vendor', 'CPPFLAGS has a vendor origin'); + +$bf->set('DPKGFLAGS', '-Wflag -On -fsome', 'system'); +is($bf->get('DPKGFLAGS'), '-Wflag -On -fsome', 'get flag'); +is($bf->get_origin('DPKGFLAGS'), 'system', 'flag has a system origin'); +ok(!$bf->is_maintainer_modified('DPKGFLAGS'), 'set marked flag as non-maint modified'); + +$bf->strip('DPKGFLAGS', '-On', 'user', undef); +is($bf->get('DPKGFLAGS'), '-Wflag -fsome', 'get stripped flag'); +is($bf->get_origin('DPKGFLAGS'), 'user', 'flag has a user origin'); +ok(!$bf->is_maintainer_modified('DPKGFLAGS'), 'strip marked flag as non-maint modified'); + +my @strip_tests = ( + { + value => '-fsingle', + strip => '-fsingle', + exp => '', + }, { + value => '-fdupe -fdupe', + strip => '-fdupe', + exp => '', + }, { + value => '-Wa -fdupe -fdupe -Wb', + strip => '-fdupe', + exp => '-Wa -Wb', + }, { + value => '-fdupe -Wa -Wb -fdupe', + strip => '-fdupe', + exp => '-Wa -Wb', + }, { + value => '-fdupe -Wa -fdupe -Wb', + strip => '-fdupe', + exp => '-Wa -Wb', + }, { + value => '-Wa -fdupe -Wb -fdupe', + strip => '-fdupe', + exp => '-Wa -Wb', + } +); + +foreach my $test (@strip_tests) { + $bf->set('DPKGSTRIPFLAGS', $test->{value}, 'system'); + $bf->strip('DPKGSTRIPFLAGS', $test->{strip}, 'user', undef); + is($bf->get('DPKGSTRIPFLAGS'), $test->{exp}, + "strip flag '$test->{strip}' from '$test->{value}' to '$test->{exp}'"); +} + +$bf->append('DPKGFLAGS', '-Wl,other', 'vendor', 0); +is($bf->get('DPKGFLAGS'), '-Wflag -fsome -Wl,other', 'get appended flag'); +is($bf->get_origin('DPKGFLAGS'), 'vendor', 'flag has a vendor origin'); +ok(!$bf->is_maintainer_modified('DPKGFLAGS'), 'append marked flag as non-maint modified'); + +$bf->prepend('DPKGFLAGS', '-Idir', 'env', 1); +is($bf->get('DPKGFLAGS'), '-Idir -Wflag -fsome -Wl,other', 'get prepended flag'); +is($bf->get_origin('DPKGFLAGS'), 'env', 'flag has an env origin'); +ok($bf->is_maintainer_modified('DPKGFLAGS'), 'prepend marked flag as maint modified'); + +my %known_features = ( + future => [ qw( + lfs + ) ], + abi => [ qw( + lfs + time64 + ) ], + hardening => [ qw( + bindnow + branch + format + fortify + pie + relro + stackclash + stackprotector + stackprotectorstrong + ) ], + qa => [ qw( + bug + bug-implicit-func + canary + ) ], + reproducible => [ qw( + fixdebugpath + fixfilepath + timeless + ) ], + optimize => [ qw( + lto + ) ], + sanitize => [ qw( + address + leak + thread + undefined + ) ], +); + +is_deeply([ sort $bf->get_feature_areas() ], [ sort keys %known_features ], + 'supported feature areas'); + +foreach my $area (sort keys %known_features) { + ok($bf->has_features($area), "has feature area $area"); + my %features = $bf->get_features($area); + is_deeply([ sort keys %features ], + $known_features{$area}, + "supported features for area $area"); +} + +# Test lfs alias from abi to future, we need a 32-bit arch that does does +# not currently have this flag built-in. +$ENV{DEB_BUILD_ARCH} = 'i386'; +$ENV{DEB_HOST_ARCH} = 'i386'; + +$ENV{DEB_BUILD_MAINT_OPTIONS} = 'future=+lfs'; +$bf = Dpkg::BuildFlags->new(); +test_has_flag($bf, 'CPPFLAGS', '-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'); + +$ENV{DEB_BUILD_MAINT_OPTIONS} = 'abi=+lfs'; +$bf = Dpkg::BuildFlags->new(); +test_has_flag($bf, 'CPPFLAGS', '-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'); + +$ENV{DEB_BUILD_MAINT_OPTIONS} = 'future=-lfs abi=+lfs'; +$bf = Dpkg::BuildFlags->new(); +test_has_flag($bf, 'CPPFLAGS', '-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'); + +$ENV{DEB_BUILD_MAINT_OPTIONS} = 'future=+lfs abi=-lfs'; +$bf = Dpkg::BuildFlags->new(); +test_has_noflag($bf, 'CPPFLAGS', '-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'); + +# TODO: Add more test cases. diff --git a/scripts/t/Dpkg_BuildFlags_Ubuntu.t b/scripts/t/Dpkg_BuildFlags_Ubuntu.t new file mode 100644 index 0000000..822fbf6 --- /dev/null +++ b/scripts/t/Dpkg_BuildFlags_Ubuntu.t @@ -0,0 +1,92 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 19; + +BEGIN { + use_ok('Dpkg::BuildFlags'); +} + +sub test_optflag +{ + my ($bf, $optflag) = @_; + + foreach my $flag (qw(CFLAGS CXXFLAGS OBJCFLAGS OBJCXXFLAGS + FFLAGS FCFLAGS)) { + my $value = $bf->get($flag); + ok($value =~ m/$optflag/, "$flag contains $optflag: $value"); + } +} + +sub test_ltoflag +{ + my $bf = shift; + + # Test the LTO flags enabled by default on some arches. + ok($bf->get('LDFLAGS') =~ m/-flto=auto -ffat-lto-objects/, + "LDFLAGS contains LTO flags on $ENV{DEB_HOST_ARCH}"); +} + +sub test_no_ltoflag +{ + my $bf = shift; + + # Test the LTO flags not being enabled. + ok($bf->get('LDFLAGS') !~ m/-flto=auto -ffat-lto-objects/, + "LDFLAGS does not contain LTO flags on $ENV{DEB_HOST_ARCH}"); +} + +my $bf; + +# Force loading the Dpkg::Vendor::Ubuntu module. +$ENV{DEB_VENDOR} = 'Ubuntu'; + +# Test the optimization flag inherited from the Dpkg::Vendor::Debian module. +$ENV{DEB_HOST_ARCH} = 'amd64'; +$bf = Dpkg::BuildFlags->new(); + +test_optflag($bf, '-O2'); +test_ltoflag($bf); + +# Test the overlaid Ubuntu-specific linker flag. +ok($bf->get('LDFLAGS') =~ m/-Wl,-Bsymbolic-functions/, + 'LDFLAGS contains -Bsymbolic-functions'); + +# Test the optimization flag override only for ppc64el. +$ENV{DEB_HOST_ARCH} = 'ppc64el'; +$bf = Dpkg::BuildFlags->new(); + +test_optflag($bf, '-O3'); +test_ltoflag($bf); + +# Test the optimization flag not enabled for riscv64. +$ENV{DEB_HOST_ARCH} = 'riscv64'; +$bf = Dpkg::BuildFlags->new(); + +test_no_ltoflag($bf); + +# Test the optimization flag override by DEB_BUILD_MAINT_OPTIONS. +$ENV{DEB_BUILD_MAINT_OPTIONS} = 'optimize=+lto'; +$bf = Dpkg::BuildFlags->new(); + +test_ltoflag($bf); + +$ENV{DEB_HOST_ARCH} = 'amd64'; +$ENV{DEB_BUILD_MAINT_OPTIONS} = 'optimize=-lto'; +$bf = Dpkg::BuildFlags->new(); +test_no_ltoflag($bf); diff --git a/scripts/t/Dpkg_BuildInfo.t b/scripts/t/Dpkg_BuildInfo.t new file mode 100644 index 0000000..edc1818 --- /dev/null +++ b/scripts/t/Dpkg_BuildInfo.t @@ -0,0 +1,26 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 2; + +BEGIN { + use_ok('Dpkg::BuildInfo'); +} + +is(scalar Dpkg::BuildInfo::get_build_env_allowed(), 60, + 'allowed environment variables array'); diff --git a/scripts/t/Dpkg_BuildOptions.t b/scripts/t/Dpkg_BuildOptions.t new file mode 100644 index 0000000..f3080a2 --- /dev/null +++ b/scripts/t/Dpkg_BuildOptions.t @@ -0,0 +1,109 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 28; + +use Dpkg::ErrorHandling; + +use_ok('Dpkg::BuildOptions'); + +{ + no warnings; ## no critic (TestingAndDebugging::ProhibitNoWarnings) + # Disable warnings related to invalid values fed during + # the tests + report_options(quiet_warnings => 1); +} + +$ENV{DEB_BUILD_OPTIONS} = 'noopt foonostripbar parallel=3 bazNOCHECK'; + +my $dbo = Dpkg::BuildOptions->new(); +ok($dbo->has('noopt'), 'has noopt'); +is($dbo->get('noopt'), undef, 'noopt value'); +ok($dbo->has('foonostripbar'), 'has foonostripbar'); +is($dbo->get('foonostripbar'), undef, 'foonostripbar value'); +ok($dbo->has('parallel'), 'has parallel'); +is($dbo->get('parallel'), 3, 'parallel value'); +ok(!$dbo->has('bazNOCHECK'), 'not has bazNOCHECK'); + +$dbo->reset(); +$dbo->merge('no opt no-strip parallel = 5 nocheck', 'test'); +ok($dbo->has('no'), 'has no'); +is($dbo->get('no'), undef, 'no value'); +ok($dbo->has('opt'), 'has opt'); +is($dbo->get('opt'), undef, 'opt value'); +ok($dbo->has('no-strip'), 'has no-strip'); +is($dbo->get('no-strip'), undef, 'no-strip value'); +ok($dbo->has('parallel'), 'has parallel'); +is($dbo->get('parallel'), '', 'parallel value'); +ok($dbo->has('nocheck'), 'has nocheck'); +is($dbo->get('nocheck'), undef, 'nocheck value'); + +$dbo->reset(); +$dbo->set('parallel', 5); +$dbo->set('noopt', undef); + +my $env = $dbo->export(); +is($env, 'noopt parallel=5', 'value of export'); +is($ENV{DEB_BUILD_OPTIONS}, $env, 'env match return value of export'); +$env = $dbo->export('OTHER_VARIABLE'); +is($ENV{OTHER_VARIABLE}, $env, 'export to other variable'); + +$ENV{DEB_BUILD_OPTIONS} = 'foobar'; +$dbo = Dpkg::BuildOptions->new(); +$dbo->set('noopt', 1); +is($dbo->output(), 'foobar noopt', 'output'); + +$dbo = Dpkg::BuildOptions->new(envvar => 'OTHER_VARIABLE'); +is($dbo->get('parallel'), 5, 'import from other variable, check parallel'); +ok($dbo->has('noopt'), 'import from other variable, check noopt'); + +my %theme = ( + metal => undef, + pink => undef, + rusty => undef, + sky => undef, +); +my %theme_ref; + +$dbo = Dpkg::BuildOptions->new(); + +$theme_ref{$_} = 1 foreach keys %theme; +$dbo->set('theme', '+all'); +$dbo->parse_features('theme', \%theme); +is_deeply(\%theme, \%theme_ref, 'features set with +all'); + +$theme{$_} = undef foreach keys %theme; +$theme_ref{$_} = 1 foreach keys %theme; +$theme_ref{rusty} = 0; +$dbo->set('theme', '+all,-rusty'); +$dbo->parse_features('theme', \%theme); +is_deeply(\%theme, \%theme_ref, 'features set with +all,-rusty'); + +$theme{$_} = undef foreach keys %theme; +$theme_ref{$_} = 0 foreach keys %theme; +$theme_ref{metal} = 1; +$dbo->set('theme', '-all,+metal'); +$dbo->parse_features('theme', \%theme); +is_deeply(\%theme, \%theme_ref, 'features set with +all,-rusty'); + +$theme{$_} = $theme_ref{$_} = undef foreach keys %theme; +$theme_ref{pink} = 1; +$theme_ref{sky} = 0; +$dbo->set('theme', '+pink,-sky'); +$dbo->parse_features('theme', \%theme); +is_deeply(\%theme, \%theme_ref, 'features set with +pink,-sky'); diff --git a/scripts/t/Dpkg_BuildProfiles.t b/scripts/t/Dpkg_BuildProfiles.t new file mode 100644 index 0000000..48e1e7e --- /dev/null +++ b/scripts/t/Dpkg_BuildProfiles.t @@ -0,0 +1,59 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 8; + +BEGIN { + use_ok('Dpkg::BuildProfiles', qw(parse_build_profiles + set_build_profiles + get_build_profiles)); +} + +# TODO: Add actual test cases. + +my $formula; + +$formula = [ ]; +is_deeply([ parse_build_profiles('') ], $formula, + 'parse build profiles formula empty'); + +$formula = [ [ qw(nocheck) ] ]; +is_deeply([ parse_build_profiles('<nocheck>') ], $formula, + 'parse build profiles formula single'); + +$formula = [ [ qw(nocheck nodoc stage1) ] ]; +is_deeply([ parse_build_profiles('<nocheck nodoc stage1>') ], $formula, + 'parse build profiles formula AND'); + +$formula = [ [ qw(nocheck) ], [ qw(nodoc) ] ]; +is_deeply([ parse_build_profiles('<nocheck> <nodoc>') ], $formula, + 'parse build profiles formula OR'); + +$formula = [ [ qw(nocheck nodoc) ], [ qw(stage1) ] ]; +is_deeply([ parse_build_profiles('<nocheck nodoc> <stage1>') ], $formula, + 'parse build profiles formula AND, OR'); + +{ + local $ENV{DEB_BUILD_PROFILES} = 'cross nodoc profile.name'; + is_deeply([ get_build_profiles() ], [ qw(cross nodoc profile.name) ], + 'get active build profiles from environment'); +} + +set_build_profiles(qw(nocheck stage1)); +is_deeply([ get_build_profiles() ], [ qw(nocheck stage1) ], + 'get active build profiles explicitly set'); diff --git a/scripts/t/Dpkg_BuildTree.t b/scripts/t/Dpkg_BuildTree.t new file mode 100644 index 0000000..baef2aa --- /dev/null +++ b/scripts/t/Dpkg_BuildTree.t @@ -0,0 +1,64 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 11; +use Test::Dpkg qw(:paths); + +use Cwd qw(realpath); +use File::Path qw(make_path rmtree); +use File::Spec::Functions qw(abs2rel); + +use Dpkg::File; + +use_ok('Dpkg::BuildTree'); + +my $tmpdir = test_get_temp_path(); + +make_path("$tmpdir/debian/tmp"); + +my @srcfiles = qw( + changelog + control + copyright + shlibs.local +); + +my @genfiles = qw( + files + files.new + substvars + substvars.new + tmp/build-object + tmp/generated +); + +foreach my $file (@srcfiles, @genfiles) { + file_touch("$tmpdir/debian/$file"); +} + +my $bt = Dpkg::BuildTree->new(dir => $tmpdir); + +$bt->clean(); + +foreach my $srcfile (@srcfiles) { + ok(-e "$tmpdir/debian/$srcfile", "source file $tmpdir/$srcfile exists"); +} + +foreach my $genfile (@genfiles) { + ok(! -e "$tmpdir/debian/$genfile", "generated file $tmpdir/$genfile does not exist"); +} diff --git a/scripts/t/Dpkg_BuildTypes.t b/scripts/t/Dpkg_BuildTypes.t new file mode 100644 index 0000000..639d8b2 --- /dev/null +++ b/scripts/t/Dpkg_BuildTypes.t @@ -0,0 +1,87 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 39; + +BEGIN { + use_ok('Dpkg::BuildTypes'); +} + +ok(build_is(BUILD_DEFAULT | BUILD_FULL), 'build is default full'); +is(get_build_options_from_type(), 'full', 'build is full'); + +set_build_type(BUILD_DEFAULT | BUILD_BINARY, '--default-binary'); +is(get_build_options_from_type(), 'binary', 'build is binary'); +ok(build_is(BUILD_DEFAULT | BUILD_BINARY), 'build is default binary'); + +set_build_type(BUILD_SOURCE | BUILD_ARCH_INDEP, '--build=source,all'); +is(get_build_options_from_type(), 'source,all', 'build is source,all'); + +set_build_type_from_options('any,all', '--build=any,all', nocheck => 1); +is(get_build_options_from_type(), 'binary', 'build is binary from any,all'); +ok(build_is(BUILD_BINARY), 'build is any,all'); + +set_build_type_from_options('binary', '--build=binary', nocheck => 1); +is(get_build_options_from_type(), 'binary', 'build is binary'); +ok(build_is(BUILD_BINARY), 'build is binary'); + +set_build_type_from_options('source,all', '--build=source,all', nocheck => 1); +ok(build_is(BUILD_SOURCE | BUILD_ARCH_INDEP), 'build source,all is source,all'); +ok(!build_is(BUILD_SOURCE | BUILD_ARCH_DEP), 'build source,all is not source,any'); +ok(build_has_any(BUILD_SOURCE), 'build source,all has_any source'); +ok(build_has_any(BUILD_ARCH_INDEP), 'build source,all has_any any'); +ok(build_has_none(BUILD_DEFAULT), 'build source,all has_none default'); +ok(build_has_none(BUILD_ARCH_DEP), 'build source,all has_none any'); +ok(!build_has_all(BUILD_BINARY), 'build source,all not has_all binary'); +ok(!build_has_all(BUILD_SOURCE | BUILD_ARCH_DEP), + 'build source,all not has_all source,any'); +ok(!build_has_all(BUILD_FULL), 'build source,all has_all full'); + +set_build_type_from_targets('build-arch,build-indep', + '--targets=build-arch,build-indep', nocheck => 1); +is(get_build_options_from_type(), 'binary', + 'build is binary from build-arch,build-indep'); +ok(build_is(BUILD_BINARY), 'build is binary from build-arch,build-indep'); + +set_build_type_from_targets('binary', '--targets=binary', nocheck => 1); +is(get_build_options_from_type(), 'binary', 'build is binary from binary'); +ok(build_is(BUILD_BINARY), 'build is binary from binary'); + +set_build_type_from_targets('clean,binary-indep', + '--targets=clean,binary-indep', nocheck => 1); +ok(build_is(BUILD_SOURCE | BUILD_ARCH_INDEP), 'build source,all is source,all'); +ok(!build_is(BUILD_SOURCE | BUILD_ARCH_DEP), 'build source,all is not source,any'); +ok(build_has_any(BUILD_SOURCE), 'build source,all has_any source'); +ok(build_has_any(BUILD_ARCH_INDEP), 'build source,all has_any any'); +ok(build_has_none(BUILD_DEFAULT), 'build source,all has_none default'); +ok(build_has_none(BUILD_ARCH_DEP), 'build source,all has_none any'); +ok(!build_has_all(BUILD_BINARY), 'build source,all not has_all binary'); +ok(!build_has_all(BUILD_SOURCE | BUILD_ARCH_DEP), + 'build source,all not has_all source,any'); +ok(!build_has_all(BUILD_FULL), 'build source,all has_all full'); + +set_build_type(BUILD_BINARY, '--build=binary', nocheck => 1); +ok(build_is(BUILD_BINARY), 'build binary is binary'); +ok(build_has_any(BUILD_ARCH_DEP), 'build binary has_any any'); +ok(build_has_any(BUILD_ARCH_INDEP), 'build binary has_any all'); +ok(build_has_all(BUILD_BINARY), 'build binary has_all binary'); +ok(build_has_none(BUILD_SOURCE), 'build binary has_none source'); + +set_build_type(BUILD_FULL, '--build=full', nocheck => 1); +ok(build_has_any(BUILD_SOURCE), 'build full has_any source'); +ok(build_has_all(BUILD_BINARY), 'build full has_all binary'); diff --git a/scripts/t/Dpkg_Changelog.t b/scripts/t/Dpkg_Changelog.t new file mode 100644 index 0000000..c3e7413 --- /dev/null +++ b/scripts/t/Dpkg_Changelog.t @@ -0,0 +1,383 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 102; +use Test::Dpkg qw(:paths); + +use File::Basename; + +use Dpkg::File; + +BEGIN { + use_ok('Dpkg::Changelog'); + use_ok('Dpkg::Changelog::Debian'); + use_ok('Dpkg::Vendor', qw(get_current_vendor)); +}; + +my $datadir = test_get_data_path(); + +my $vendor = get_current_vendor(); + +######################### + +foreach my $file ("$datadir/countme", "$datadir/shadow", "$datadir/fields", + "$datadir/regressions", "$datadir/date-format", "$datadir/stop-modeline") { + + my $changes = Dpkg::Changelog::Debian->new(verbose => 0); + $changes->load($file); + + my $content = file_slurp($file); + cmp_ok($content, 'eq', "$changes", "string output of Dpkg::Changelog on $file"); + + my $errors = $changes->get_parse_errors(); + my $basename = basename( $file ); + is($errors, '', "Parse example changelog $file without errors" ); + + my @data = @$changes; + ok(@data, 'data is not empty'); + + if ($file eq "$datadir/countme") { + # test range options + cmp_ok(@data, '==', 7, 'no options -> count'); + my $all_versions = join( '/', map { $_->get_version() } @data); + + sub check_options { + my (%opts) = @_; + + my @cnt = $changes->get_range($opts{range}); + cmp_ok(@cnt, '==', $opts{count}, "$opts{name} -> count"); + if ($opts{count} == @{$opts{data}}) { + is_deeply(\@cnt, $opts{data}, "$opts{name} -> returns all"); + } else { + is_deeply([ map { $_->get_version() } @cnt ], + $opts{versions}, "$opts{name} -> versions" ); + } + } + + my %ref = ( + changes => $changes, + data => \@data, + ); + + check_options(%ref, range => { count => 3 }, + count => 3, + versions => [ '2:2.0-1', '1:2.0~rc2-3', '1:2.0~rc2-2' ], + name => 'positive count'); + check_options(%ref, range => { count => 3, reverse => 1 }, + count => 3, + versions => [ '1:2.0~rc2-2', '1:2.0~rc2-3', '2:2.0-1' ], + name => 'positive reverse count'); + check_options(%ref, range => { count => -3 }, + count => 3, + versions => [ + '1:2.0~rc2-1sarge2', + '1:2.0~rc2-1sarge1', + '1.5-1', + ], + name => 'negative count'); + check_options(%ref, range => { count => 1 }, + count => 1, + versions => [ '2:2.0-1' ], + name => 'count 1'); + check_options(%ref, range => { count => 1, default_all => 1 }, + count => 1, + versions => [ '2:2.0-1' ], + name => 'count 1 (d_a 1)'); + check_options(%ref, range => { count => -1 }, + count => 1, + versions => [ '1.5-1' ], + name => 'count -1'); + + check_options(%ref, range => { count => 3, offset => 2 }, + count => 3, + versions => [ + '1:2.0~rc2-2', + '1:2.0~rc2-1sarge3', + '1:2.0~rc2-1sarge2', + ], + name => 'positive count + positive offset'); + check_options(%ref, range => { count => -3, offset => 4 }, + count => 3, + versions => [ + '1:2.0~rc2-3', + '1:2.0~rc2-2', + '1:2.0~rc2-1sarge3', + ], + name => 'negative count + positive offset'); + + check_options(%ref, range => { count => 4, offset => 5 }, + count => 2, + versions => [ '1:2.0~rc2-1sarge1', '1.5-1' ], + name => 'positive count + positive offset (>max)'); + check_options(%ref, range => { count => -4, offset => 2 }, + count => 2, + versions => [ '2:2.0-1', '1:2.0~rc2-3' ], + name => 'negative count + positive offset (<0)'); + + check_options(%ref, range => { count => 3, offset => -4 }, + count => 3, + versions => [ + '1:2.0~rc2-1sarge3', + '1:2.0~rc2-1sarge2', + '1:2.0~rc2-1sarge1', + ], + name => 'positive count + negative offset'); + check_options(%ref, range => { count => -3, offset => -3 }, + count => 3, + versions => [ + '1:2.0~rc2-3', + '1:2.0~rc2-2', + '1:2.0~rc2-1sarge3', + ], + name => 'negative count + negative offset'); + + check_options(%ref, range => { count => 5, offset => -2 }, + count => 2, + versions => [ '1:2.0~rc2-1sarge1', '1.5-1' ], + name => 'positive count + negative offset (>max)'); + check_options(%ref, range => { count => -5, offset => -4 }, + count => 3, + versions => [ '2:2.0-1', '1:2.0~rc2-3', '1:2.0~rc2-2' ], + name => 'negative count + negative offset (<0)'); + + check_options(%ref, range => { count => 7 }, + count => 7, + name => 'count 7 (max)'); + check_options(%ref, range => { count => -7 }, + count => 7, + name => 'count -7 (-max)'); + check_options(%ref, range => { count => 10 }, + count => 7, + name => 'count 10 (>max)'); + check_options(%ref, range => { count => -10 }, + count => 7, + name => 'count -10 (<-max)'); + + check_options(%ref, range => { from => '1:2.0~rc2-1sarge3' }, + count => 4, + versions => [ + '2:2.0-1', + '1:2.0~rc2-3', + '1:2.0~rc2-2', + '1:2.0~rc2-1sarge3', + ], + name => 'from => "1:2.0~rc2-1sarge3"'); + check_options(%ref, range => { since => '1:2.0~rc2-1sarge3' }, + count => 3, + versions => [ + '2:2.0-1', + '1:2.0~rc2-3', + '1:2.0~rc2-2', + ], + name => 'since => "1:2.0~rc2-1sarge3"'); + $SIG{__WARN__} = sub {}; + check_options(%ref, range => { since => 0 }, + count => 7, + name => 'since => 0 returns all'); + delete $SIG{__WARN__}; + check_options(%ref, range => { to => '1:2.0~rc2-1sarge2' }, + count => 3, + versions => [ + '1:2.0~rc2-1sarge2', + '1:2.0~rc2-1sarge1', + '1.5-1', + ], + name => 'to => "1:2.0~rc2-1sarge2"'); + ## no critic (ControlStructures::ProhibitUntilBlocks) + check_options(%ref, range => { until => '1:2.0~rc2-1sarge2' }, + count => 2, + versions => [ '1:2.0~rc2-1sarge1', '1.5-1' ], + name => 'until => "1:2.0~rc2-1sarge2"'); + ## use critic + #TODO: test combinations + } + if ($file eq "$datadir/fields") { + my $str = $changes->format_range('dpkg', { all => 1 }); + my $expected = 'Source: fields +Version: 2.0-0etch1 +Distribution: stable +Urgency: high +Maintainer: Frank Lichtenheld <frank@lichtenheld.de> +Timestamp: 1200235759 +Date: Sun, 13 Jan 2008 15:49:19 +0100 +Closes: 1000000 1111111 2222222 +Changes: + fields (2.0-0etch1) stable; urgency=low + . + * Upload to stable (Closes: #1111111, #2222222) + * Fix more stuff. (LP: #54321, #2424242) + . + fields (2.0-1) unstable frozen; urgency=medium + . + [ Frank Lichtenheld ] + * Upload to unstable (Closes: #1111111, #2222222) + * Fix stuff. (LP: #12345, #424242) + . + [ Raphaël Hertzog ] + * New upstream release. + - implements a + - implements b + * Update S-V. + . + fields (2.0~b1-1) unstable; urgency=low,xc-userfield=foobar + . + * Beta + . + fields (1.0) experimental; urgency=high,xb-userfield2=foobar + . + * First upload (Closes: #1000000) +Xb-Userfield2: foobar +Xc-Userfield: foobar + +'; + if ($vendor eq 'Ubuntu') { + $expected =~ s/^(Closes:.*)/$1\nLaunchpad-Bugs-Fixed: 12345 54321 424242 2424242/m; + } + cmp_ok($str, 'eq', $expected, 'fields handling'); + + $str = $changes->format_range('dpkg', { offset => 1, count => 2 }); + $expected = 'Source: fields +Version: 2.0-1 +Distribution: unstable frozen +Urgency: medium +Maintainer: Frank Lichtenheld <djpig@debian.org> +Timestamp: 1200149359 +Date: Sun, 12 Jan 2008 15:49:19 +0100 +Closes: 1111111 2222222 +Changes: + fields (2.0-1) unstable frozen; urgency=medium + . + [ Frank Lichtenheld ] + * Upload to unstable (Closes: #1111111, #2222222) + * Fix stuff. (LP: #12345, #424242) + . + [ Raphaël Hertzog ] + * New upstream release. + - implements a + - implements b + * Update S-V. + . + fields (2.0~b1-1) unstable; urgency=low,xc-userfield=foobar + . + * Beta +Xc-Userfield: foobar + +'; + if ($vendor eq 'Ubuntu') { + $expected =~ s/^(Closes:.*)/$1\nLaunchpad-Bugs-Fixed: 12345 424242/m; + } + cmp_ok($str, 'eq', $expected, 'fields handling 2'); + + $str = $changes->format_range('rfc822', { offset => 2, count => 2 }); + $expected = 'Source: fields +Version: 2.0~b1-1 +Distribution: unstable +Urgency: low +Maintainer: Frank Lichtenheld <frank@lichtenheld.de> +Timestamp: 1200062959 +Date: Sun, 11 Jan 2008 15:49:19 +0100 +Changes: + fields (2.0~b1-1) unstable; urgency=low,xc-userfield=foobar + . + * Beta +Xc-Userfield: foobar + +Source: fields +Version: 1.0 +Distribution: experimental +Urgency: high +Maintainer: Frank Lichtenheld <djpig@debian.org> +Timestamp: 1199976559 +Date: Sun, 10 Jan 2008 15:49:19 +0100 +Closes: 1000000 +Changes: + fields (1.0) experimental; urgency=high,xb-userfield2=foobar + . + * First upload (Closes: #1000000) +Xb-Userfield2: foobar + +'; + cmp_ok($str, 'eq', $expected, 'fields handling 3'); + + # Test Dpkg::Changelog::Entry methods + is($data[1]->get_version(), '2.0-1', 'get_version'); + is($data[1]->get_source(), 'fields', 'get_source'); + is(scalar $data[1]->get_distributions(), 'unstable', 'get_distribution'); + is(join('|', $data[1]->get_distributions()), 'unstable|frozen', + 'get_distributions'); + is($data[3]->get_optional_fields(), + "Urgency: high\nCloses: 1000000\nXb-Userfield2: foobar\n", + 'get_optional_fields'); + is($data[1]->get_maintainer(), 'Frank Lichtenheld <djpig@debian.org>', + 'get_maintainer'); + is($data[1]->get_timestamp(), 'Sun, 12 Jan 2008 15:49:19 +0100', + 'get_timestamp'); + my @items = $data[1]->get_change_items(); + is($items[0], " [ Frank Lichtenheld ]\n", 'change items 1'); + is($items[4], ' * New upstream release. + - implements a + - implements b +', 'change items 2'); + is($items[5], " * Update S-V.\n", 'change items 3'); + } + if ($file eq "$datadir/date-format") { + is($data[0]->get_timestamp(), '01 Jul 2100 23:59:59 -1200', + 'get date w/o DoW, and negative timezone offset'); + is($data[1]->get_timestamp(), 'Tue, 27 Feb 2050 12:00:00 +1245', + 'get date w/ DoW, and positive timezone offset'); + is($data[2]->get_timestamp(), 'Mon, 01 Jan 2000 00:00:00 +0000', + 'get date w/ DoW, and zero timezone offset'); + } + if ($file eq "$datadir/stop-modeline") { + is($changes->get_unparsed_tail(), "vim: et\n", + 'get unparsed modeline at EOF'); + } + if ($file eq "$datadir/regressions") { + my $f = ($changes->format_range('dpkg'))[0]; + is("$f->{Version}", '0', 'version 0 correctly parsed'); + } + + SKIP: { + skip('avoid spurious warning with only one entry', 2) + if @data == 1; + + my $str; + my $oldest_version = $data[-1]->{Version}; + $str = $changes->format_range('dpkg', { since => $oldest_version }); + + $str = $changes->format_range('rfc822'); + + ok(1, 'TODO check rfc822 output'); + + $str = $changes->format_range('rfc822', { since => $oldest_version }); + + ok(1, 'TODO check rfc822 output with ranges'); + } +} + +foreach my $test (([ "$datadir/misplaced-tz", 6 ], + [ "$datadir/unreleased", 5, 7 ])) { + + my $file = shift @$test; + my $changes = Dpkg::Changelog::Debian->new(verbose => 0); + $changes->load($file); + my @errors = $changes->get_parse_errors(); + + ok(@errors, 'errors occured'); + is_deeply( [ map { $_->[1] } @errors ], $test, 'check line numbers' ); +} diff --git a/scripts/t/Dpkg_Changelog/countme b/scripts/t/Dpkg_Changelog/countme new file mode 100644 index 0000000..166b72f --- /dev/null +++ b/scripts/t/Dpkg_Changelog/countme @@ -0,0 +1,41 @@ +countme (2:2.0-1) unstable; urgency=low + + * Final + + -- Frank Lichtenheld <frank@lichtenheld.de> Tue, 4 Oct 2005 01:49:05 +0200 + +countme (1:2.0~rc2-3) unstable; urgency=low + + * kadabra + + -- Frank Lichtenheld <frank@lichtenheld.de> Tue, 4 Oct 2005 01:48:05 +0200 + +countme (1:2.0~rc2-2) unstable; urgency=low + + * Abra + + -- Frank Lichtenheld <frank@lichtenheld.de> Tue, 4 Oct 2005 01:47:48 +0200 + +countme (1:2.0~rc2-1sarge3) unstable; urgency=low + + * Baz + + -- Frank Lichtenheld <frank@lichtenheld.de> Tue, 4 Oct 2005 01:47:19 +0200 + +countme (1:2.0~rc2-1sarge2) unstable; urgency=low + + * Bar + + -- Frank Lichtenheld <frank@lichtenheld.de> Tue, 4 Oct 2005 01:47:08 +0200 + +countme (1:2.0~rc2-1sarge1) unstable; urgency=low + + * Foo + + -- Frank Lichtenheld <frank@lichtenheld.de> Tue, 4 Oct 2005 01:46:49 +0200 + +countme (1.5-1) unstable; urgency=low + + * Initial + + -- Frank Lichtenheld <frank@lichtenheld.de> Thu, 01 Jan 1970 00:00:00 +0000 diff --git a/scripts/t/Dpkg_Changelog/date-format b/scripts/t/Dpkg_Changelog/date-format new file mode 100644 index 0000000..0916fb2 --- /dev/null +++ b/scripts/t/Dpkg_Changelog/date-format @@ -0,0 +1,17 @@ +date-format (0.2) unstable; urgency=low + + * Date without day of week name and negative timezone offset. + + -- Dpkg Developers <debian-dpkg@lists.debian.org> 01 Jul 2100 23:59:59 -1200 + +date-format (0.1) unstable; urgency=low + + * Date with day of week name and positive timezone offset. + + -- Dpkg Developers <debian-dpkg@lists.debian.org> Tue, 27 Feb 2050 12:00:00 +1245 + +date-format (0.0) unstable; urgency=low + + * Date with day of week name and zero timezone offset. + + -- Dpkg Developers <debian-dpkg@lists.debian.org> Mon, 01 Jan 2000 00:00:00 +0000 diff --git a/scripts/t/Dpkg_Changelog/fields b/scripts/t/Dpkg_Changelog/fields new file mode 100644 index 0000000..df4638f --- /dev/null +++ b/scripts/t/Dpkg_Changelog/fields @@ -0,0 +1,40 @@ +fields (2.0-0etch1) stable; urgency=low + + * Upload to stable (Closes: #1111111, #2222222) + * Fix more stuff. (LP: #54321, #2424242) + + -- Frank Lichtenheld <frank@lichtenheld.de> Sun, 13 Jan 2008 15:49:19 +0100 + +fields (2.0-1) unstable frozen; urgency=medium + + [ Frank Lichtenheld ] + * Upload to unstable (Closes: #1111111, #2222222) + * Fix stuff. (LP: #12345, #424242) + + [ Raphaël Hertzog ] + * New upstream release. + - implements a + - implements b + * Update S-V. + + -- Frank Lichtenheld <djpig@debian.org> Sun, 12 Jan 2008 15:49:19 +0100 + +fields (2.0~b1-1) unstable; urgency=low,xc-userfield=foobar + + * Beta + + -- Frank Lichtenheld <frank@lichtenheld.de> Sun, 11 Jan 2008 15:49:19 +0100 + +fields (1.0) experimental; urgency=high,xb-userfield2=foobar + + * First upload (Closes: #1000000) + + -- Frank Lichtenheld <djpig@debian.org> Sun, 10 Jan 2008 15:49:19 +0100 + +fields (0.5) experimental + + * This entry is in an older changelog format and it should not be + parsed. So let's put some non-conforming content. + +This line starts on the first column. +-- Raphaël Hertzog diff --git a/scripts/t/Dpkg_Changelog/misplaced-tz b/scripts/t/Dpkg_Changelog/misplaced-tz new file mode 100644 index 0000000..39dc8e3 --- /dev/null +++ b/scripts/t/Dpkg_Changelog/misplaced-tz @@ -0,0 +1,12 @@ +error-tz (1.1-1) unstable; urgency=low + + * + + -- Frank Lichtenheld <djpig@debian.org> Mon, 16 Jul 2007 02:54:18 +0200 ++0200 + +error-tz (1.0-1) unstable; urgency=low + + * + + -- Frank Lichtenheld <djpig@debian.org> Mon, 16 Jul 2007 02:54:18 +0200 diff --git a/scripts/t/Dpkg_Changelog/regressions b/scripts/t/Dpkg_Changelog/regressions new file mode 100644 index 0000000..4c8ad30 --- /dev/null +++ b/scripts/t/Dpkg_Changelog/regressions @@ -0,0 +1,7 @@ +re-gressions++1.2.3 (0) ALLOWED.chars-567+890; urgency=low + + * Test allowed chars in package name and distribution name. + (Closes: #361171) + * Test how version 0 is exported through methods. + + -- Frank Lichtenheld <frank@lichtenheld.de> Thu, 01 Jan 1970 00:00:00 +0000 diff --git a/scripts/t/Dpkg_Changelog/shadow b/scripts/t/Dpkg_Changelog/shadow new file mode 100644 index 0000000..a23da58 --- /dev/null +++ b/scripts/t/Dpkg_Changelog/shadow @@ -0,0 +1,1755 @@ +shadow (1:4.0.3-36) unstable; urgency=low + + * Debian specific programs fixes: + - Re-enable logging and displaying failures on login when login is + compiled with PAM and when FAILLOG_ENAB is set to yes. And create the + faillog file if it does not exist on postinst (as on Woody). + Closes: #192849 + - do not localize login's syslog messages. + * Debian packaging fixes: + - Fix FTBFS with new dpkg 1.13 and use a correct dpkg-architecture + invocation. Closes: #314407 + - Add a comment about potential sensitive information exposure + when LOG_UNKFAIL_ENAB is set in login.defs + Closes: #298773 + - Remove limits.5 and limits.conf.5 man pages which do not + reflect the way we deal with limits in Debian + Closes: #288106, #244754 + - debian/login.defs: + - Make SU_PATH and PATH consistent with the values used in /etc/profile + Closes: #286616 + - Comment the UMASK setting which is more confusing than useful + as it only affects console logins. Better use pam_umask instead + Closes: #314539, #248150 + - Add a comment about "appropriate" values for umask + Closes: #269583 + - Correct the assertion about the variable defined by QMAIL_DIR + which is MAILDIR, not MAIL + Closes: #109279 + - Move the PASS_MAX_LEN variable at the end of login.defs as this + is obsoleted when using PAM + Closes: #87301 + - debian/passwd.config: + - Re-enable the password confirmation question at critical priority + Closes: #304350 + - Do no prompt again for the login name when the two passwords don't + match while creating a new user + Closes: #245332 + - debian/add-shell.sh, debian/remove-shell.sh, debian/shadowconfig.sh, + debian/passwd.config, debian/passwd.postinst: + - checked for bashisms, replaced "#!/bin/bash" with "#!/bin/sh", + Closes: #315767 + - replaced "test XXX -a YYY" XSI:isms with "test XXX && test YYY", + for rationale see: + http://www.opengroup.org/onlinepubs/009695399/utilities/test.html + - replaced all unneeded "egrep"s with basic "grep"s + Closes: #256732 + - debian/rules: + Remove the setuid bit on login + Closes: #298060 + - debian/passwd.templates: + Templates rewrite to shorten them down a little and make them DTSG + compliant. Give more details about what the user's full name is used + for. + Closes: #287410 + - Updated to Standards: 3.6.2 (checked) + * Debconf translation updates: + - Estonian added. Closes: #312471 + - Basque updated. Closes: #314303 + - Malagasy updated. Closes: #290842 + - Punjabi updated. Closes: #315372 + - Danish updated. Closes: #315378 + - Polish updated. Closes: #315391 + - Japanese updated. Closes: #315407 + - Brazilian Portuguese updated. Closes: #315426 + - Czech updated. Closes: #315429 + - Spanish updated. Closes: #315434 + - Lithuanian updated. Closes: #315483 + - Galician updated. Closes: #315362 + - Portuguese updated. Closes: #315375 + - Simplified Chinese updated. Closes: #315567 + - French updated + - Ukrainian updated. Closes: #315727 + - Welsh updated. Closes: #315809 + - Slovak updated. Closes: #315812 + - Romanian updated. Closes: #315783 + - Finnish updated. Closes: #315972 + - Catalan updated. Closes: #316026 + * Man pages translation updates: + - Remove the too outdated Korean translation of newgrp.1 + which doesn't even mention sg + Closes: #261490 + * Man pages correction for Debian specific issues: + - 402_usermod.8-system-users-range-286258: + Document the system user range from 0 to 999 in Debian + Closes: #286258 + * Upstream bugs not fixed in upstream releases or CVS: + - 423_su_pass_args_without_concatenation + Thanks to Helmut Waitzmann. + Closes: #276419 + * pass the argument to the shell or command without concatenation + before the call to exec. + * If no command is provided, the arguments after the username are for + the shell, no -c has to be appended. + - 008_su_ignore_SIGINT + * Also ignore SIGQUIT in su to avoid defeating the delay. + The gain in security is very minor. + Closes: #288827 + - 424_pwck.8_quiet_option + pwck(8): document the -q option. Closes: #309408 + - 425_lastlog_8_sparse + lastlog(8): Document that lastlog is a sparse file, and don't need to be + rotated. Closes: #219321 + - 426_grpck_group-gshadow_members_consistency + * (grpck) warn for inconsistencies between members in /etc/group and gshadow + Closes: #75181 + * (pwck and grpck) warn and propose a fix for entries present in the + regular /etc/group or /etc/passwd files and not in shadow/gshadow. + - 427_chage_expiry_0 + Fix chage display in the case of null expiry fields (do not display + Never, but 01 Jan 1970) + Closes: #78961 + * Upstream bugs already fixed in upstream releases or CVS: + - Corrected typos in chfn.1. Closes: #312428 + - Corrected typos in gshadow.5. Closes: #312429 + - Corrected typos in shadow.5. Closes: #312430 + - Corrected typos in grpck.8. Closes: #312431 + - Added patch (356th) for su to propagate SIGSTOP up and SIGCONT down. + Added similar patch (357th) for newgrp. Both changes only affect + operation with CLOSE_SESSION set to yes (in /etc/login.defs). + Closes: #314727 + * Translation updates: + - debian/patches/010_more-i18ned-messages + - More messages are translatable. We will deal with the translation + updates after syncing with upstream. + Closes: #266281 + - debian/patches/114_eu: + - Basque translation update. Closes: #314423 + - debian/patches/132_vi.dpatch: + - Vietnamese translation update. Closes: #315840 + -- Christian Perrier <bubulle@debian.org> Mon, 20 Jun 2005 23:37:56 +0300 + +shadow (1:4.0.3-35) unstable; urgency=low + + * Re-apply the debian/patches/036_CAN-2004-1001_passwd_check patch + which fixed the "Adjusted password check to fix authentication bypass" + security issue (CAN-2004-1001) + * Debian packaging fixes: + - Add --host to config_options on cross build. Patch from NIIBE Yutaka. + Closes: #283729 + - Enable login for GNU/Hurd in rules. First patch from Robert Millan. + Closes: #249372 + - Cleanup passwd debconf stuff as md5 passwords are assumed since + 1:4.0.3-19 and the resolution of #223664. + - Document the TTYPERM variable set to 0600 in the default login.defs file + Closes: #59439 + - Make login and su use limits.so PAM module by default + (change made in sarge branch also) + Closes: #300720 + - debian/rules: Add removal of config.log in the clean target + - debian/control: + - Add Martin to Uploaders + - Remove Sam Hartman from Uploaders. The team is now setup and this + does not really have a real meaning now. You're still welcome for + NMU's, Sam, and thanks for the good work. + - Switching from dpatch to quilt. + * Debconf translation updates: + - Portuguese spellchecked by Miguel Figueiredo + - Punjabi (Gumurkhi) added, by Amanpreet Singh Alam. Closes: #309800 + * Man pages translation updates: + - German completed by reference to original man page + Closes: #311554 + * Debian specific programs fixes: + - NONE + * Upstream bugs not fixed in upstream releases or CVS: + - 421_login.1_pishing: + Document how to initiate a trusted path under Linux + Closes: #305600 + - set CLOSE_SESSIONS to yes in login.defs, and document why. + Closes: #163635 + * Upstream bugs already fixed in upstream releases or CVS: + - 324_configure.in-no-debian-dir: + Separated from 004_configure.in : this change will not be needed when + syncing with upstream + - 325_gshadow_5_manpage: + Add a gshadow.5 man page, and clarifications in the newgrp and gpasswd + man pages. + Closes: #113191, #166173, #169046, #251926 + - 326_su.1_pwconv.8-typos: + Correct typos in su.1 and pwconv.8 man pages. + Closes: #309666 + * Translation updates: + - 004_configure.in, 100_LINGUAS + Add Vietnamese to LINGUAS. Patch for LINGUAS in configure.in moved + from 004_configure.in to the new 100_LINGUAS patch + - 101_cs: Czech updated by Miroslav Kure + Closes: #308658 + - 102_de: German updated by Dennis Stampfer + - 104_fr: French updated by Jean-Luc Coulon + Closes: #308909 + - 111_ca: Catalan completed by Guillem Jover + Closes: #309212 + - 108_sv: Swedish completed with the help of Magnus Holmgren + Encoding issues fixed + Closes: #309380 + - 109_uk: Ukrainian completed by Eugeniy Meshcheryakov + Closes: #308647 + - 120_nl: Dutch updated by Bart Cornelis + Closes: #308662 + - 124_ru: Russian updated by Yuri Kozlov + Closes: #308839 + - 129_ru: Romanian updated by Sorin Batariuc + Closes: #308921 + - 130_zh_TW: Tradition Chinese updated by Tetralet + Closes: #311588 + - 131_tl: Tagalog updated by Eric Pareja + Closes: #310386 + - 132_vi: Correct file used for Vietnamese translation + Closes: #306614, #307251, #307262, #308479 + + -- Christian Perrier <bubulle@debian.org> Fri, 3 Jun 2005 07:32:07 +0200 + +shadow (1:4.0.3-34) unstable; urgency=low + + * Debian packaging fixes: + - NONE + * Debian specific programs fixes: + - NONE + * Upstream bugs not fixed in upstream releases or CVS: + - 406_good_name: + - relaxed user/group names checking is now fixed and accepts + _only_ names matching '^[^-:\n][^:\n]*$' + Closes: #264879, #308478 + * Upstream bugs already fixed in upstream releases or CVS: + - 311_high-uids.dpatch: + - Add large file support to lastlog and faillog. Closes: #280212 + * Translation updates: + - 132_vi: + Vietnamese programs translation added (from upstream CVS) + Closes: #308479 + - 118_it: + Italian programs translation updated + Closes: #308327 + + -- Christian Perrier <bubulle@debian.org> Tue, 10 May 2005 18:24:12 +0200 + +shadow (1:4.0.3-33) unstable; urgency=low + + * The "Don't believe lintian blindly" release + * Urgency left to low because RC bug fixed but we leave priority + to sarge-targeted work + * Debian packaging fixes: + - Remove CVS id tag from the supplied login.defs file + Closes: #308019 + - revert dependency on debconf which would make it required + Closes: #308145 + - Add the missing add-shell, remove-shell, cppw and cpgr + (Debian specific) man pages + Closes: #162241 + - make lintian ignore warnings about missing debconf dependency + in passwd.lintian-overrides + * Debian specific programs fixes: + - NONE + * Upstream bugs not already fixed in upstream releases or CVS: + - NONE + * Upstream bugs already fixed in upstream releases or CVS: + - 313_pam_access_with_preauth: + - allow PAM account authorization when preauthenticated + Closes: #193869 + - 314_passwd.1_formatting: + - minor formatting fixes of passwd(1) man page + Closes: #304447 + - 315_chage.1_document_expiration_removal: + - document expiration removal in chage(1) + Closes: #304542 + - 316_vipw-race-242407: + - make vipw to remove /etc/{passwd|shadow|group|gshadow}.edit + and only then unlock + Closes: #242407 + - 317_lastlog_usage_249611: + - Fix the lastlog usage and all the translations accordingly + (--user instead of --login). + Closes: #249611 + - 323_passwd.1-typo: + - correct a typo in passwd(1) man page. Closes: #302740 + + -- Christian Perrier <bubulle@debian.org> Sun, 8 May 2005 14:32:20 +0200 + +shadow (1:4.0.3-32) unstable; urgency=low + + * Switch to dpatch for upstream patches + This should bring more clarity to modifications + we make to upstream sources and help integrating + new upstream releases + Old patches have been moved quite roughly to + debian/patches + * Modified debian/rules for "Calling GNU configure properly", see + /usr/share/doc/autotools-dev/README.Debian.gz + * Debian packaging fixes: + - Lintian fixes: + - Description synopsis initial capital letters removed + - passwd now depends on debconf (>=0.5.00) as it uses the seen flag + - add login.lintian-overrides and passwd.lintian-overrides + files to mention setuid and setgid files and avoid lintian warning + about them + - debian/pam.d/login: + - Remove the confusing comment about "nullok". Closes: #207816 + - debian/rules: + - Add call for dh_installdirs + - debian/passwd.dirs: + - Added + - debian/login.dirs: + - Added + * Debian specific programs fixes: + - fixed /usr/sbin/remove-shell bug with handling of non-existing/empty + /etc/shells file. Closes: #271565 + * GNU config automated update: config.sub (20010907 to 20050422), + config.guess (20010904 to 20050422) + + -- Christian Perrier <bubulle@debian.org> Tue, 3 May 2005 11:53:12 +0200 + +shadow (1:4.0.3-31sarge3) unstable; urgency=low + + * The "please buy me a brain" release + * *Really* shorten down the Dutch debconf translation for the root password + input so that it fits in one screen. Closes: #277750 + * man/usermod.8: *Really* document -o option in usermod + Closes: #302388 + * man/fr/po4a/fr: Removed. This directory only clutters up the diff + and is not used during the build process + * man/de/passwd.1: Updated. Closes: #304757 + * man/de/chsh.1: Updated. + * man/it/*: All files updated. Closes: #305095 + * Translation updates: + - Portuguese (from the translation file sent for 4.0.8 upstream) + Closes: #305257 + + -- Christian Perrier <bubulle@debian.org> Tue, 19 Apr 2005 19:31:43 +0200 + +shadow (1:4.0.3-31sarge2) unstable; urgency=low + + * Shorten down the Dutch debconf translation for the root password + input so that it fits in one screen. Closes: #277750 + * man/usermod.8: Document -o option in usermod + Closes: #302388 + + -- Christian Perrier <bubulle@debian.org> Mon, 4 Apr 2005 20:28:47 +0200 + +shadow (1:4.0.3-31sarge1) unstable; urgency=high + + * Urgency set to high because of RC bug fixed. Reuploaded + because I messed up with the changelog first. Use this occasion + to start a sarge series just in case. Changes below were made + in the former version already. + * Avoid package file conflicts for woody->sarge upgrade: + - Add manpages-it and manpages-ko to Replaces: for login + - Remove manpages-de from Replaces: for login (useless) + - Improve readability of the Replaces line for passwd + Closes: #299549 + + -- Christian Perrier <bubulle@debian.org> Tue, 15 Mar 2005 13:55:34 +0100 + +shadow (1:4.0.3-31) unstable; urgency=low + + * New maintainer + + -- Christian Perrier <bubulle@debian.org> Fri, 11 Mar 2005 19:28:38 +0100 + +shadow (1:4.0.3-30.10) unstable; urgency=low + + * Non-maintainer upload targeted at sarge. + * Programs translations: + - Greek updated. Closes: #293911 + - French updated. Closes: #294330 + * Debconf translations: + - Galician updated. Closes: #295543 + + -- Christian Perrier <bubulle@debian.org> Mon, 7 Feb 2005 08:18:56 +0100 + +shadow (1:4.0.3-30.9) unstable; urgency=low + + * Non-maintainer upload targeted at sarge. + * Programs translations: + - German updated. Closes: #291703 + - Tagalog added. Closes: #292353 + - Korean updated. + + -- Christian Perrier <bubulle@debian.org> Sun, 23 Jan 2005 09:30:49 +0100 + +shadow (1:4.0.3-30.8) unstable; urgency=low + + * Non-maintainer upload targeted at sarge. + * Debconf translations: + - Tagalog added. Closes: #289837 + * Programs translations: + - Traditional Chinese added. Closes: #288879 + + -- Christian Perrier <bubulle@debian.org> Tue, 11 Jan 2005 11:39:18 +0100 + +shadow (1:4.0.3-30.7) unstable; urgency=low + + * Non-maintainer upload targeted at sarge. + * Resolv conflict with manpage-spl in login + as well as passwd. Thanks to Robert Luberda for + the notice + + -- Christian Perrier <bubulle@debian.org> Thu, 23 Dec 2004 22:23:11 +0100 + +shadow (1:4.0.3-30.6) unstable; urgency=low + + * Revert back to Ian Gulliver genuine patch + to chpasswd. Update man page accordingly. + Closes: #283961 + (again) + * Programs translations + - German updated. Closes: #286522 + * Debconf translations + - German updated. Closes: #286522 + + -- Christian Perrier <bubulle@debian.org> Mon, 20 Dec 2004 23:51:39 +0100 + +shadow (1:4.0.3-30.5) unstable; urgency=high + + * Non-maintainer upload targeted at sarge. + Fix release critical bug + * Resolve conflict with woody's manpages-pl package + which prevent woody->sarge upgrade if + manpages-pl was installed + Closes: #284239 + * Programs translations + - Romanian added. Closes: #284338 + * Add MD5 support to chpasswd + Thanks to Ian Gulliver for the patch + Closes: #283961 + * Correct typos in man pages + Thanks to Nicolas François for the patch + Closes: #141322 + * Replace "C/" with "../../" in man/fr/shadow.conf + for best integration in the package build process + + -- Christian Perrier <bubulle@debian.org> Thu, 16 Dec 2004 21:48:56 +0100 + +shadow (1:4.0.3-30.4) unstable; urgency=low + + * Non-maintainer upload targeted at sarge. + Localisation and d-i related updates only + * Programs translations + - Albanian (very partial) added. + * Debconf translations + - Hindi added. Closes: #282443 + - Malagasy added. Closes: #282580 + - Albanian added. Closes: #282160 + + -- Christian Perrier <bubulle@debian.org> Thu, 25 Nov 2004 07:21:53 +0100 + +shadow (1:4.0.3-30.3) unstable; urgency=high + + * Non-maintainer upload: security fix using the woody patch + by the Security Team + * Adjusted password check to fix authentication bypass + [debian/patches/036_CAN-2004-1001_passwd_check] + * Debconf translations + - Brazilian Portuguese updated. Closes: #278051 + - Norwegian Bokmal fixed. Closes: #277563 + * Programs translations + - Indonesian updated. Closes: #277751, #277741 + + -- Christian Perrier <bubulle@debian.org> Tue, 2 Nov 2004 22:28:26 +0100 + +shadow (1:4.0.3-30.2) unstable; urgency=low + + * Non-maintainer upload targeted at sarge. + Localisation and d-i related updates only + * Debconf translations + - Macedonian added. Closes: #275781 + - Slovakian updated. Closes: #273585 + - Slovenian added. + * Man pages translations + - German for vipw.8/vigr.8. Closes: #260645 + * Fix preseeding for d-i : do not mark debconf templates as seen + Also remove the hack for Joey Hess login name..:) + Closes: #271407 + * Ask for the user full name at critical priority so that + it is never empty. Closes: #257700 + + -- Christian Perrier <bubulle@debian.org> Sun, 10 Oct 2004 19:02:50 +0200 + +shadow (1:4.0.3-30.1) unstable; urgency=low + + * Non-maintainer upload targeted at sarge. Localisation updates only + * Debconf translations + - Arabic added. Closes: #261022 + - Swedish updated. Closes: #261553 + - Bulgarian added. Closes: #262928 + - Brazilian Portuguese updated. Closes: #263957 + - Simplified Chinese updated. Closes: #268646 + - Traditional Chinese updated. Closes: #268151 + - German updated. Closes: #268051 + - Basque synced with templates.pot + * Programs translations + - Swedish updated. Closes: #261553 + - Russian updated. Closes: #268412 + - Norwegian Bokmal updated. Closes: #269907 + - Norwegian Nynorsk updated. Closes: #269907 + - Hebrew updated. Closes: #269967 + - Danish updated. Closes: #270083 + - Catalan updated. Closes: #254956 + * Man pages translations + - French translation completely rewritten and reviewed + Closes: #270168 + - Add expiry.1 and limits.conf.5 to the list of installed man + pages (add two lines to passwd.files and one to rules) + From #270168 also. + + -- Christian Perrier <bubulle@debian.org> Tue, 7 Sep 2004 20:20:21 +0200 + +shadow (1:4.0.3-30) unstable; urgency=high + * Attempt to fix FTBFS and dependency problems on hurd. Closes: #235641 + * don't run dh_undocumented anymore as it has become angstful. + + * Thanks to Christian Perrier: + * Debconf translations + - Brazilian updated. Closes: #261387 + - Croatian added. Closes: #261418 + - Minor corrections fo ja.po and pl.po headers + * Programs translations + - Dutch updated. Closes: #260361 + - Hebrew added. Closes: #260722 + * Urgency set to high because of RC bug fixed: + * Correct check for root password being already set in passwd.config + Closes: #260799 + + * Acknowledge 29.1 NMU: + Closes: #256664, #257949, #258241, #258563, #258566, #258957, + #190567, #259389, #260223, #257949, #259663, #259827 + + -- Karl Ramm <kcr@debian.org> Tue, 27 Jul 2004 09:38:32 -0400 + +shadow (1:4.0.3-29.1) unstable; urgency=low + + * NMU with maintainer consent + * Programs translations + - Greek updated. Closes: #256664 + - Finnish updated. Closes: #257949 + - Spanish updated. Closes: #258241 + - Polish updated. Closes: #258563 + - Indonesian added (configure.in changed accordingly). Closes: #258566 + - French updated. Closes: #258957, #190567 + - Slovak updated. Closes: #259389 + - Portuguese updated. Closes: #260223 + * Debconf translations + - Finnish updated. Closes: #257949 + * Typo correction in su.1 man page. Closes: #259663 + * Removed malloc definition in libmisc/xmalloc.c + Closes: #259827 + * Lintian-driven corrections + - Corrected section number in several man pages: + - grpck.8 + - pwck.8 + - ja/grpck.8 + - pl/grpck.8 + - pl/pwck.8 + - Replace the full GPL text in copyright by a pointer + - Bumped Standards to 3.6.1.1 (changes checked) + + -- Christian Perrier <bubulle@debian.org> Mon, 19 Jul 2004 17:52:24 +0200 + +shadow (1:4.0.3-29) unstable; urgency=low + * Be up front on the origin of our su. Closes: #244297 + * The following thanks to Christian Perrier: + * Debconf translations + - Hungarian added. Closes: #256493 + - Greek updated. Closes: #251990 + - Brazilian portuguese updated. Closes: #256771 + * po/POTFILES.in + - corrected file. No more mentions unexisting files + Closes: #253792 + this change was already in 28.5 but was forgotten in the + changelog + * Acknowledge NMUs: + closes: #244604, #244734, #246302, #246376, #246848, #246859, + #247084, #247698, #247770, #248386, #248391, #248392, + #248392, #248516, #248516, #248648, #248938, #248957, + #249141, #249257, #249682, #250169, #250339, #250496, + #251140, #251141, #251317, #251495, #251716, #251990, + #252087, #252499, #253165, #253186, #253570, #254503, + #254760 + + -- Karl Ramm <kcr@debian.org> Sat, 3 Jul 2004 00:24:55 -0400 + +shadow (1:4.0.3-28.5) unstable; urgency=low + + * debian/*.files + - care about adding ALL existing translations. Removed hard-coded + file names. Closes: #248516 + Thanks to Ruben Porras for noticing + This involves changes to debian/*.files with the use of + regexp in these files + * libmisc/failure.c + - Make use of plural forms. Closes: #251317 + * Programs translations + - Norwegian Bokmal and Norwegian Nynorsk translations. Closes: #252499 + - Dutch updated. Closes: #253165 + - Brazilian Portuguese updated + - Turkish updated + - Korean updated + - Czech updated + - Japanese updated + - German updated + - Catalan added. Closes: #254760 + - Italian updated + * Debconf translations + - Finnish added. Closes: #253570 + - Danish updated + - Hebrew added. Closes: #253186 + - Traditional Chinese added. Closes: #254503 + - French updated for clarification and shorten the root password screen + + -- Christian Perrier <bubulle@debian.org> Tue, 22 Jun 2004 09:44:45 +0200 + +shadow (1:4.0.3-28.4) unstable; urgency=low + + * NMU for l10n stuff again + * Programs translations + - All languages "activated" in configure.in. Closes: #248516 + - Russian. Closes: #250496 + - Bosnian added. Closes: #251141 + - Finnish update. Closes: #251495 + - Italian update. Closes: #252087 + * Debconf translations + - Norwegian Bokmal update. Closes: #250339 + - Bosnian added. Closes: #251140 + - Catalan updated. Closes: #251716 + - Greek update. Closes: #251990 + - Welsh added (directly sent by Dafydd Harries + * Christian Perrier + - debian/passwd.config : a few rewards to a few people. Just check + the code + + -- Christian Perrier <bubulle@debian.org> Tue, 1 Jun 2004 09:11:01 -0300 + +shadow (1:4.0.3-28.3) unstable; urgency=high + + * NMU for correcting my mistake + * Remove an extra "fi" in passwd.config. Closes: #250169 + * Debconf translation updates: + - Norwegian Nynorsk. Closes: #249682 + + -- Christian Perrier <bubulle@debian.org> Fri, 21 May 2004 06:50:13 +0200 + +shadow (1:4.0.3-28.2) unstable; urgency=high + + * NMU for Debian Installer rc1 release schedule + * Removed duplicate sentence in templates. Closes: #244734, #244604 + * Move the "root password empty" check before the root password + confirmation. Closes: #247770 + * Debconf translation updates: + - Danish. Closes: #246859 + - Spanish. Closes: #246302 + - Russian. Closes: #248392 + - Simplified Chinese. Closes: #248938 + - Lithuanian. Closes: #249141 + - Italian. Closes: #249257 + - Dutch sent directly by Bart Cornelis + - Korean sent directly by Changwoo Ryu + - Galician sent directly by Héctor Fernández + - Romanian sent directly by Eddy Petrisor + * Programs translation updates: + - Korean. Closes: #242055 + - Japanese. Closes: #242586 + - Polish. Closes: #246376 + - Slovak. Closes: #247084 + - Basque. Closes: #248386 + - German. Closes: #248391 + - Russian. Closes: #248392 + - Spanish. Closes: #248516 + - Czech. Closes: #248648 + - Simplified Chinese. Closes: #248957 + - Indonesian. Closes: #242813 + - Italian sent directly by Giuseppe Sacco + * Translated man pages + - Typo correction in Brazilian Portuguese for gpasswd. Closes: #247698 + + -- Christian Perrier <bubulle@debian.org> Tue, 18 May 2004 12:09:34 +0200 + +shadow (1:4.0.3-28.1) unstable; urgency=high + + * NMU for special purposes below + * Urgency set to high for helping out Brazilian DD's building CD's + for FISL conference + * Translation updates: + - Debconf: + - Brazilian Portuguese. Closes: #246848 + - Spanish. Was unfortunately based on older templates hence + this does not close 246302 + - Basque: Closes: #243545 + - German: Closes: #242116 + + -- Christian Perrier <bubulle@debian.org> Mon, 10 May 2004 23:23:25 +0200 + +shadow (1:4.0.3-28) unstable; urgency=low + + * Fix login and passwd in preinst to avoid prompts on woody upgrade, + Closes: #243099 + * Fix login and passwd configuration file to support common-passwd + * Apply NMU patch from Christian Perrier, Closes: #241438 + + -- Sam Hartman <hartmans@debian.org> Thu, 29 Apr 2004 16:31:25 -0400 + +shadow (1:4.0.3-27) unstable; urgency=low + + * update "da" debconf translation, closes: #241262 + * new "pt_BR" program translation, closes: #241366 + + -- Karl Ramm <kcr@debian.org> Thu, 1 Apr 2004 00:19:44 -0500 + +shadow (1:4.0.3-26.1) unstable; urgency=low + + * NMU for Debian Installer needs + * Translation updates: + - Debconf: + - French. Closes: #241438 + - Ukrainian. Closes: #241514 + - Swedish: #241558 + - Japanese. Closes: #241802 + - Danish. Closes: #241262 + - Portuguese. Closes: #241675 + - Polish. Closes: #243185, #242996 + - Czech. Closes: #241877 + - Korean. Closes: #241928 + - Greek. Closes: #242396 + - Turkish. Closes: #243103 + - Slovak. Closes: #245671 + + -- Christian Perrier <bubulle@debian.org> Wed, 28 Apr 2004 11:47:34 +0200 + +shadow (1:4.0.3-26) unstable; urgency=low + + * Have passwd.config fall back gracefully to useradd if adduser is + unavailable. closes: #240894 + + -- Karl Ramm <kcr@debian.org> Wed, 31 Mar 2004 00:26:17 -0500 + +shadow (1:4.0.3-25) unstable; urgency=low + + * Update "da" program translation, thanks to Claus Hindsgaul. + * Update "sv" translation, closes: #239198 + * lower debconf priority of shadow password question to 'low' + + -- Karl Ramm <kcr@debian.org> Tue, 30 Mar 2004 19:39:59 -0500 + +shadow (1:4.0.3-24) unstable; urgency=low + + * add new program translations to the file manifest. *sigh* + closes: #241016 + * add "tr" debconf translation. closes: #239148 + * Rearrange username creation dialog text to make sense in + new order. closes: #240607 + * Edit the debconf templates for content. + * Remove the program .gmo files in the clean step. closes: #200054 + + -- Karl Ramm <kcr@debian.org> Tue, 30 Mar 2004 11:37:22 -0500 + +shadow (1:4.0.3-23) unstable; urgency=low + + * increase maximum group name size to 32 for no particularly good reason + closes: #240456 + * fix su man page to reflect code. closes: #239805 + * fix username defaulting in passwd.config. closes: #238781 + * update "it" debconf translation. closes: #237504 + * update "ru" debconf translation. closes: #238211 + * update "de" debconf translation. closes: #238779 + * update "el" debconf translation. closes: #240473 + * add "nn" debconf translation. closes: #238590 + * add "da" program translation. closes: #238005 + * add "nl" program translation. closes: #238488 + * add "pt" program translation. closes: #238796 + * add "pt" debconf translation. closes: #239641 + * remove spurious const, closes: #240677 + + -- Karl Ramm <kcr@debian.org> Sun, 28 Mar 2004 19:46:34 -0500 + +shadow (1:4.0.3-22) unstable; urgency=low + + * Don't assume that lastlog.ll_time or utmp.ut_time or utmpx.ut_tv are made + up of time_ts and timevals, because they aren't on x86-64. Dismaying + but true. + + -- Karl Ramm <kcr@debian.org> Sun, 14 Mar 2004 16:53:21 -0500 + +shadow (1:4.0.3-21) unstable; urgency=low + + * Try and get the right French translation update in the right place, + Karl, you can do it even if you do only speak English. Closes: #236993 + + -- Karl Ramm <kcr@debian.org> Wed, 10 Mar 2004 15:31:35 -0500 + +shadow (1:4.0.3-20) unstable; urgency=low + + * Added Norwegian Bokmal debconf translation, closes: #206349 + * tell shadow build system about new message translations + + -- Karl Ramm <kcr@debian.org> Thu, 4 Mar 2004 11:04:44 -0500 + +shadow (1:4.0.3-19) unstable; urgency=low + + * When creating a user account in passwd.config, ask for full name + first, and make up a default username. Closes: #235386 + * "No really, assume md5 passwords". Closes: #223664 + + -- Karl Ramm <kcr@debian.org> Thu, 4 Mar 2004 00:42:08 -0500 + +shadow (1:4.0.3-18) unstable; urgency=low + + * Removed po/cs.po and added new debian/po/cs.po + Updated Czech translation, closes: #229125 + * Updated Japanese debconf translation, closes: #227237 + * Updated Danish debconf translation, closes: #227619 + * Updated Dutch debconf translation, closes: #227883 + * Updated Brazilian Portuguese debconf translation, closes: #228080 + * Added Simplified Chinese debconf translation + Added Simplified Chinese programs translation + Closes: #229334 + * Added Greek debconf translation + Added Greek programs translation + Closes: #229504, #229528 + * Added Finnish programs translation, closes: #230369 + charset changed from UTF-8 to ISO-8859-1 as the bug patch was wrong + * Updated German debconf translation, closes: #232710 + * Updated Russian debconf translation, closes: #235541 + * Added Ukrainian debconf translation, closes: #233560 + * Added Lithuanian debconf translation, closes: #235698 + * thanks to Christian Perrier <bubulle@debian.org> + + -- Karl Ramm <kcr@debian.org> Wed, 3 Mar 2004 22:56:31 -0500 + +shadow (1:4.0.3-17) unstable; urgency=low + + * Fix braino in version number of example dependency in README.shells. + Apologies to anyone foolhardy enough to believe my documentation. + * Add Swedish debconf translation, closes: #225059 + * New French debconf translation, closes: #225914 + * Add Catalan debconf translation, closes: #227029 + * add securetty files for the hurd, freebsd, and netbsd, closes: #200739 + + -- Karl Ramm <kcr@debian.org> Sun, 11 Jan 2004 17:37:54 -0500 + +shadow (1:4.0.3-16) unstable; urgency=low + + * run dh_installdeb *after* dh_installdebconf, + remove . from short description of passwd, + add versioned conflict with debconf older than 0.5 + closes: #224133 + * replace manpages-it due to man page conflict + closes: #224474 + * fix the *other* su syslogs. + closes: #224508 + * fix filename in control file, closes: #224579 + * fix permissions on chage and expiry, closes: #224717 + * run debconf-updatepo + * remove debian/compat as redundant + + -- Karl Ramm <kcr@debian.org> Mon, 22 Dec 2003 19:53:30 -0500 + +shadow (1:4.0.3-15) unstable; urgency=low + + * remove bogus dependency on base-config 2.00, + closes: #222772, #223726 + * New Czech translation thanks to Miroslav Kure. + + -- Karl Ramm <kcr@debian.org> Fri, 12 Dec 2003 18:40:25 -0500 + +shadow (1:4.0.3-14) unstable; urgency=low + + * exit 30 when backing all the way out in passwd.conf, and + depend on base-config 2.00, closes: #222772 + * adjust debconf templates for debian-installer work, + closes: #222832 + + -- Karl Ramm <kcr@debian.org> Thu, 11 Dec 2003 01:53:37 -0500 + +shadow (1:4.0.3-13) unstable; urgency=low + + * Fix typo passwd.config. Closes: #223079, #222714 + * Let's try out this oldfangled anonymous ftp upload queue. + + -- Karl Ramm <kcr@debian.org> Mon, 8 Dec 2003 17:59:31 -0500 + +shadow (1:4.0.3-12) unstable; urgency=low + + * Explicitly use automake-1.7 and aclocal-1.7. closes: #216594 + * Update Danish debconf translation. closes: #216542 + * Update French debconf translation. closes: #206352 + * Update Dutch debconf translation. closes: #212995 + * Remove redundant dependency on grep. closes: #216535 + * Fix chfn documentation bug. closes: #213931 + * Fix su syslogs to be less ambiguous. (old:new instead of old-new + because '-' can appear in usernames.) Not clearer, mind you, but less + ambiguous. closes: #213592 + * Rename limits(5) to limits.conf(5) and edit to reflect reality. + closes: #212935 + * Move the change_uid call in login back to where it was before -11, and + relocate the fork for pam_close_session above it. closes: #211884 + + -- Karl Ramm <kcr@debian.org> Sat, 25 Oct 2003 15:26:20 -0400 + +shadow (1:4.0.3-11) unstable; urgency=low + + * update Japanese debconf translation. closes: #210382 + * update Brazilian Portuguese debconf translation. closes: #208122 + * run pam cleanup code as root. closes: #195048 + + -- Karl Ramm <kcr@debian.org> Sat, 13 Sep 2003 17:49:29 -0400 + +shadow (1:4.0.3-10) unstable; urgency=low + + * postinst sources confmodule. closes: #88843 + * Implement the pam configuration New World Order. Wow, that was quick. :-) + * Implement a scheme for allowing other packages to modify /etc/shells. + + -- Karl Ramm <kcr@debian.org> Fri, 22 Aug 2003 20:58:42 -0400 + +shadow (1:4.0.3-9) unstable; urgency=low + + * fix mysterious creeping bug in po/Makefile.in.in, closes: #200052 + * dutch debconf translation, closes: #204578 + * switch to po-debconf, closes: #183998, #200130 + * use automake1.7, closes: #205991 + * update german debconf translation, closes: #94138 + * I can't come up with a good justification as to why characters other + than ':'s and '\0's should be disallowed in group and usernames (other + than '-' as the leading character). Thus, the maintenance tools don't + anymore. closes: #79682, #166798, #171179 + * Fix typo in /etc/pam.d/su. closes: #196804 + * danish debconf translation, closes: #118245 + * russian debconf translation, closes: #198729 + * And last, but not least, what's undoubtedly going to be the most + popular change: md5 passwords are turned on by default, and there is + no prompt to change them. Yes, this is reduced functionality. No, it + can't go back in the way it was; the old code not only modified + conffiles, it modified *other*packages* conffiles and was a massive + policy violation. I expect this change will motivate the people who + have said that they will come up with a proper solution to do so. + closes: #186016, #110228, #171808 + + -- Karl Ramm <kcr@debian.org> Wed, 20 Aug 2003 02:06:50 -0400 + +shadow (1:4.0.3-8) unstable; urgency=low + + * Fix missing ':' in getopt call. closes: #184301 + * Don't install mkpasswd, we don't use it. closes: #185919, #187906 + * replaces: manpages-ko. closes: #184810 + * Fix the message in #190567 (not closing until it's been accepted upstream) + * Fix brainos in login.1. closes: #184731 + * Fixup permissions for chage. closes: #184138 + * Force the umask to 022 in passwd.config. closes: #182506 + * Add Sam Hartman <hartmans@debian.org> as an uploader. + * Update standards-version. + * Add versioned build-depend on debhelper. + + -- Karl Ramm <kcr@debian.org> Sat, 26 Apr 2003 15:34:16 -0400 + +shadow (1:4.0.3-7) unstable; urgency=low + + * When relocating a user's home directory, don't fail and remove the new + home directory if we can't remove the old home directory for some + reason; the results can be spectacularly poor if, for instance, only + the rmdir() fails. closes: #166369 + * run dh_installdebconf so base-config will work. *sigh*. closes: #166788 + + -- Karl Ramm <kcr@debian.org> Sun, 24 Nov 2002 21:40:30 -0500 + +shadow (1:4.0.3-6) unstable; urgency=low + + * remove automake dependency and leave only automake1.5, since it seems + to confuse the alpha and mipsel autobuilders for some reason. + + -- Karl Ramm <kcr@debian.org> Sun, 13 Oct 2002 21:45:15 -0400 + +shadow (1:4.0.3-5) unstable; urgency=low + + * build-depend on libtool and automake. oops. closes: #164545 + + -- Karl Ramm <kcr@debian.org> Sun, 13 Oct 2002 01:44:47 -0400 + +shadow (1:4.0.3-4) unstable; urgency=low + + * I am unable to begin to express the bitterness that I'm now experiencing. + * replaces manpages-de <= 0.4-4, closes: #162097, #162173 + * replaces manpages-fr, closes: #162150 + * replaces manpages-hu, closes: #162126 + * replaces manpages-ja, closes: #163511, #162095 + * fix sg symlink, closes: #162339, #163652 + * newgrp should be aware that getlogin() and ttyname() are not + guaranteed to return anything and NOT blindly assume that they + successfully returned a pointer to a string. I mean, really, people, + that sort of thing hasn't been reliable since 4.2BSD on a VAX. I'll + bet most of the working on the upstream weren't even born yet when + this sort of thing was commonplace (it was NEVER acceptable). + closes: #162303 + * pull the manpage for the spiffy su forward. closes: #162275 + * depend on automake1.5, and rerun the autogrunge. This should + *hopefully* make it build more consistently. + * this concludes the biweekly treading of water. + + -- Karl Ramm <kcr@debian.org> Sat, 12 Oct 2002 14:56:16 -0400 + +shadow (1:4.0.3-3) unstable; urgency=low + + * the "fix the brain damage" release + * fix pam brain-damage in ch{age,passwd}, {group,user}{add,del,mod}, newusers + closes: #162181, #162199, #162228 + * fix vipw symlink brain-damage: closes: #162218 + * fix package description brain damage, closes: #139563 + * install cp{pw,gr} brain damage + + -- Karl Ramm <kcr@debian.org> Wed, 25 Sep 2002 01:21:35 -0400 + +shadow (1:4.0.3-2) unstable; urgency=low + + * fix "su -". closes: #162089 + * document exit codes of groupdel and userdel (again, for userdel) + closes: #161861 + * clean up logoutd cleanup + + -- Karl Ramm <kcr@debian.org> Mon, 23 Sep 2002 19:44:40 -0400 + +shadow (1:4.0.3-1) unstable; urgency=low + + * new upstream version! closes: #149444, #150237, #145415 + * completely new packaging! + * all new bugs! + * old bugs as well! + * remove /etc/init.d/logoutd, like the old postrm should've, closes: #160682 + * fix passwd manpage, closes: #160477, #122797 + * fix lastlog manpage, closes: #159886 + * add as many virtual console devices as I seem to have to securetty, + closes: #156472 + * add ttyS0 and tts/0 to securetty. closes: #130138 + * su should not segfault if nobody has uid 0. closes: #139967 + * install and use translations. closes: #118238 + * upstream uses new automake. closes: #114935 + * add russian template file for password. closes: #130358 + * handle template installation correctly. closes: #156674 + * don't place a maximum restriction on the length of passwords. + closes: #159487 + * fix description. closes: #145459 + * update config.{guess,sub} + + -- Karl Ramm <kcr@debian.org> Wed, 18 Sep 2002 10:14:08 -0400 + +shadow (20000902-12) unstable; urgency=high + + * "oops" + * /etc/login.defs: /var/spool/mail -> /var/mail, closes: #125311 + + -- Karl Ramm <kcr@debian.org> Sun, 7 Apr 2002 11:54:48 -0400 + +shadow (20000902-11) unstable; urgency=low + + * Fix some nits: + * remove changelog~ file. oops. closes: #139711 + * fix typo in control. closes: #139564 + * Hmmm. People open more bugs when I upload new versions of things. + Maybe they just notice them more then, or maybe it's just Murphy. + + -- K. Ramm <kcr@debian.org> Tue, 26 Mar 2002 12:14:33 -0500 + +shadow (20000902-10) unstable; urgency=low + + * We hates the automake. We hates it forever. closes: #139293 + * stupid omission: logoutd still in postinst. closes: #139422 + * make login.defs a bit clearer. closes: #138809 + + -- Karl Ramm <kcr@debian.org> Fri, 22 Mar 2002 12:09:07 -0500 + +shadow (20000902-9) unstable; urgency=medium + + * Get rid of logoutd, it doesn't work, didn't work in potato, and now + it's causing people to open RC bugs. closes: #138259, #66153, #121940 + I'm told the timeoutd package does a better job anyway. + * add /bin/tcsh to /etc/shells, closes: #118103, #122112 + * add /bin/ksh to /etc/shells, closes: #123556 + * remove text about password aging from passwd(5), closes: #137493 + * spanish debconf template for passwd, closes: #136463 + * document the fact that you can not have a valid password in + /etc/shadow. closes: #131690 + * /etc/login.defs: /var/spool/mail -> /var/mail, closes: #125311 + * fix locations of utmp and wtmp in login(1), closes: #119656 + * The package description for passwd refers to README.Debian.gz + but only README.debian.gz actually exists. Most packages use + README.Debian.gz, but the control file is the only place that gets it + wrong for this package. When in doubt, fix the documentation. :-) + closes: #116955 + + -- Karl Ramm <kcr@debian.org> Thu, 14 Mar 2002 17:05:56 -0500 + +shadow (20000902-8) unstable; urgency=low + + * check in passwd.expire.cron for already-expired passwords; closes: #102319 + * note in chage.1 and shadowconfig.8 that password aging information + only works when shadow passwords are enabled. closes: #103702 + * enable changing the name in chfn by default. closes: #107819 + * fail to mangle files in lib/commonio.c, thanks to matt@linuxbox.nu + * add /dev/console to the secure ttys list. because. closes: #113949 + * find the FHS mail spool first in configure. closes: #114951 + (thanks to mjb@debian.org) + * above sadly causes automake to go bonkers, and I don't want to + reassemble the build system before woody is released. Keep automake + from going off on its own. + * terminate argument validation in login when it hits a '--'. + closes: #66368 + + -- Karl Ramm <kcr@debian.org> Mon, 22 Oct 2001 11:17:35 -0400 + +shadow (20000902-7) unstable; urgency=low + + * the "I'm sorry, I should've done this earlier" release + * Cancel login timeout after authentication so that patient people + timing out on network directory services can log in with local + accounts. Closes: #107148 + * Add Brazilian Portuguese debconf template translation for passwd. + Closes: #105292, #93223 + * Pull /usr/share/doc/$package/README.shadow-paper.gz. Closes: #98058 + * Use getent instead of group to verify existence of shadow group + [works better for distributed group files]. Closes: #99902 + [Note that this sort of problem is rampant in these postinst and + config scripts, but that's not getting fixed in woody.] + * Amend reference to /usr/doc in shadowconfig.8. Closes: #102804 + * su should set $USER. Closes: #102995 + * userdel now deletes user groups from /etc/gshadow as well as + /etc/group. Closes: #99442 + * grpck now has an (otherwise undocumented) -p option, so that + shadowconfig can clean up the results of the above, so the config + script will fail randomly less often. Closes: #103385 + + -- Karl Ramm <kcr@debian.org> Wed, 22 Aug 2001 12:09:27 -0400 + +shadow (20000902-6.1) unstable; urgency=low + + * Non-maintainer upload. + * Upgrade to latest config.sub and config.guess. Closes: #88547 + + -- Gerhard Tonn <gt@debian.org> Fri, 1 Jun 2001 20:38:43 +0200 + +shadow (20000902-6) unstable; urgency=medium + + * actually set root's password when appropriate + patch thanks to joeyh, closes #98402 + * fix error in expiry man page. Such damage. closes: #99291 + * fix group of setgid program chage and expiry, closes: #98122 + + -- Karl Ramm <kcr@debian.org> Thu, 31 May 2001 07:38:59 -0400 + +shadow (20000902-5) unstable; urgency=low + + * add build dependency on file, to keep libtool happy. closes: #97498 + + -- Karl Ramm <kcr@debian.org> Wed, 16 May 2001 06:57:23 -0400 + +shadow (20000902-4) unstable; urgency=low + + * Change maintainers, closes: #92355 + + -- Karl Ramm <kcr@debian.org> Sun, 13 May 2001 03:28:07 -0400 + +shadow (20000902-3.1) unstable; urgency=low + + * Non-maintainer upload + * Recompile to fix ARM lossage + + -- Philip Blundell <philb@armlinux.org> Sun, 11 Mar 2001 07:47:27 -0500 + +shadow (20000902-3) unstable; urgency=low + + * Update config.sub and config.guess so ia64 compiled, closes: #81897 + * libmisc/sub.c: skip '*' in shell name when doing subsystem, closes: + #82893 + * src/su.c: don't assume uid 0 == "root", use getpwuid to fetch it, + closes: #81924 + * This was fixed in a previous version, closes: #77057 + * Update passwd long desc, closes: #88299 + * Conflict with suidmanager << 0.5, and remove suid{,un}register calls, + closes: #87157 + * Update policy to 3.5.0.0 + * Added debconf support for passwd from base-config + + -- Ben Collins <bcollins@debian.org> Sat, 3 Mar 2001 07:26:57 -0500 + +shadow (20000902-2) unstable frozen; urgency=low + + * control.hurd->control.gnu: closes: #77940 + * Cannot reproduce, closes: #79447 + * User never sent a patch, plus I think removing the passwd/account when + doing passwd -l is a bad idea. Makes it so you cannot unlock the + account. closes: #77824 + * Don't allow shadowconfig to change perms of other binaries, close: #77057 + * IMO, this is not a bug. It's part of a feature, and can be disabled by + turning off USER_GROUPS. closes: #76806 + * /bin/login is suid root for several good reasons. For one, it allows + daemons that use it to run as non-root. This is a good thing since it + means only one program is running as root, and not several. closes: #17911 + * sulog is fairly easy to grep or parse so I don't see how the + similarity of the log entries for failed and successful is a problem. + '-' for failed, '+' for success. closes: #63801 + * logoutd.8: s,/etc/utmp,/var/run/utmp, closes: #80494 + * Fix case where pam_auth returns a NULL username, closes: #76817, #75510 + * Hmm, Linux is a sysv derivative, so the comment is perfectly + legitimate, closes: #76898 + * MAX_PASSWORD is used by useradd, and CHFN_AUTH is actually used by + * chfn to decide if the current user needs to auth in order to change + their info, closes: #71114 + * login.1: Fix \' closes: #75435 + * login -f works for me assuming you call it as root. I tested this with + plain pam_unix.so, and also with pam_unix.so stacked with pam_ldap.so. + So if it doesn't work with telnet-heimdal, then that program is not + doing something right. closes: #78186 + * login.pam.d: made pam_nologin.so requisite. closes: #80111 + * su to root seems pretty quick to me, closes: #64756 + * xmalloc.c: remove declaration of malloc, which was causing system + * header conflicts. closes: #80398 + + -- Ben Collins <bcollins@debian.org> Sun, 31 Dec 2000 14:33:47 -0500 + +shadow (20000902-1) unstable frozen; urgency=low + + * New upstream release, lots of Debian patches merged, closes: #72735 + * man/passwd.1: removed reference to passwd(3), closes: #72704 + * man/chsh.1,man/chfn.1: document login.defs affects on these programs, + closes: #68029 + * not a bug, expected behavior, closes: #74137 + * IMO, this is a bug in the user's setup, closes: #65600 + * securetty: add devfs console devices, closes: #71946 + * libmisc/sulog.c: removed arbitrary limit on number of chars printed of + the tty name (truncated to 6 chars, which is silly), closes: #65404 + * tested this, and it works fine for me so long as pam_unix.so is called + with the nullok option (which it isn't by default because of security + concerns), closes: #75063 + * appears to be fixed by PAM, closes: #70627 + * src/useradd.c: user mkstemp instead of mktemp, per libc6 linktime + warning + * src/su.c: fixup arg handling passed to shell, closes: #75326 + + -- Ben Collins <bcollins@debian.org> Mon, 23 Oct 2000 13:22:29 -0400 + +shadow (19990827-21) unstable frozen; urgency=low + + * Added build deps + * Use pre-generated files for hurd/linux control file. The old method of + using cpp would have broken with the new gcc. + + -- Ben Collins <bcollins@debian.org> Wed, 26 Jul 2000 21:04:03 -0400 + +shadow (19990827-20) unstable frozen; urgency=low + + * Release Manager + None of these are marked as RC in the BTS, however, they do make the + package unsuitable for release. Since this is an essential package (IOW, + installed on every Debian system), I hope you can see how important it + is to make sure this package is perfect. None of the changes are + functional (except the fix in logoutd's init script, which was a 20 char + change), so please consider this for the next test cycle. + * Fix logoutd init script from spurious output when /etc/porttime is not + there, closes: #63962, #64067 + * su: Fix typo in usage output, closes: #60226 + * passwd: Fixed typo and missing newline in output for successful password + change, closes: #64106, #63703 + * passwd.1: Add documentation on the -f, -e, -s and -d command line + options, closes: #64339, #64410 + * login: Verified that utmp/wtmp works when called by telnet with -h + option, closes: #56854 + + -- Ben Collins <bcollins@debian.org> Tue, 23 May 2000 14:40:01 -0400 + +shadow (19990827-19) unstable frozen; urgency=low + + * debian/local/shells: added esh, closes: #59934 + * logoutd: modify to work with pam_time.so's time.conf file, modify + manpage to reflect this, closes: #61300 + * userdel.8: added note about group removal, closes: #56723 + * base-config handles md5 setup, closes: #60125 + * cppw: make sure it gets installed, closes: #62960 + * passwd: correct error message for "not you", closes: #61313 + * sulog.c: fixed extern for char (char foo[] -> char *foo), closes: #61643 + * userdel.8: documented userdel's exit values, closes: #54775 + * passwd: error messages are two fold, the second is actually from + pam_strerror(), closes: #61937 + * passwd: print "success" on successful password change, closes: #58676 + + -- Ben Collins <bcollins@debian.org> Sat, 29 Apr 2000 10:26:56 -0400 + +shadow (19990827-18) unstable frozen; urgency=low + + * Crap, all the bug fixes from -17 need to go to frozen too + + -- Ben Collins <bcollins@debian.org> Tue, 29 Feb 2000 14:57:14 -0500 + +shadow (19990827-17) unstable; urgency=low + + * Fixed typo in login.defs, closes: #54877 + * logoutd.init.d: Check for /etc/security/time.conf, closes: #54900 + * login.defs: Added note about the MAIL env option, closes: #54768 + * login.pam.d,passwd.pam.d: Use new options in pam_unix.so to enable + obscure password checks. This mimics the old behavior in pre-PAM + shadow, closes: #58203 + * Use patch from Topi Miettinen <tom@pluto.nic.fi> to add pam session + ability to su, closes: #57526, #55873, #57532 + * Made login's -f option also able to use the username after -- if none + was passed as it's optarg, closes: #53702 + + -- Ben Collins <bcollins@debian.org> Mon, 28 Feb 2000 12:37:22 -0500 + +shadow (19990827-16) unstable; urgency=low + + * got rid of g+s directories in the source tarball, closes: #54585 + * make su mode 4755 in the package. This way there is no chance of a + failed dpkg install causing it to be left without suid root perms + before suidmanager or chmod is called in the postinst. + * src/login.c: added faillog support to the pam_authenticate loop. This + loop is now completely rewritten, and should produce better results on + failures, closes: #53164 + + -- Ben Collins <bcollins@debian.org> Sun, 9 Jan 2000 23:35:08 -0500 + +shadow (19990827-15) unstable; urgency=low + + * src/su.c: moved signal() call to re-establish SIGINT to right place, + closes: #54496 + * src/login.c: if hostname is blank (not a remote login via rlogin or + telnet), then use the tty to log failures in syslog, closes: #53966 + * passwd: Locking a password by appending '!' appears to be pretty + standard, so ssh needs to check for it. + * passwd and login come with a README.pam that discusses the differences + between the PAM and old non-PAM versions. It also talks about where to + look for details. Also now that I have added the extra examples to the + pam.d files, I hope this satisfies...closes: #52917 + * A new package, base-config, which will be used by boot floppies is + going to have an option to configure MD5 usage for passwords. Since + this is the best place for it, and I don't really have any control + over it, I am .... closes: #47620 + * libmisc/chowntty.c: applied patch for read-only root, closes: #52069 + + -- Ben Collins <bcollins@debian.org> Sat, 8 Jan 2000 22:11:29 -0500 + +shadow (19990827-14) unstable; urgency=low + + * debian/local/shells: added /bin/zsh, closes: #53883 + + -- Ben Collins <bcollins@debian.org> Sun, 2 Jan 2000 13:51:42 -0500 + +shadow (19990827-13) unstable; urgency=low + + * su.c: ignore SIGINT while authenticating, closes: #52372 + * su.pam.d: added 2 new examples of how to allow su for wheel users + without prompting for a password, and also how to deny users of a + specific group. + + -- Ben Collins <bcollins@debian.org> Sat, 1 Jan 2000 22:29:46 -0500 + +shadow (19990827-12) unstable; urgency=low + + * Recompiled against latest libpam and up'd the module deps, + closes: #52171 + * login.pam.d: added "noenv" option so we don't clobber login's setting, + closes: #51441 + + -- Ben Collins <bcollins@debian.org> Tue, 14 Dec 1999 22:41:40 -0500 + +shadow (19990827-11) unstable; urgency=low + + * debian/passwd.in: add a preinst (matches login's) to fix the latest + build change (only affected hurd since it doesn't use login). + * debian/scripts/passwd.mk: use passwd.preinst instead of login.preinst + to complete the fix above. + + -- Ben Collins <bcollins@debian.org> Mon, 6 Dec 1999 18:25:07 -0500 + +shadow (19990827-10) unstable; urgency=low + + * src/login.c: only set pam_fail_delay if > 0. Also make the default 0 + so not defining it has the same affect as disabling it, closes: #51178 + * src/userdel.c: make sure we remove the shadow group entries when + removing the users own group, closes: #50005, #50138 + + -- Ben Collins <bcollins@debian.org> Fri, 26 Nov 1999 22:37:44 -0500 + +shadow (19990827-9) unstable; urgency=low + + * src/su.c: Fixed getopt parsing, and added a usage output + * man/su.1: minor typos + + -- Ben Collins <bcollins@debian.org> Mon, 8 Nov 1999 22:13:05 -0500 + +shadow (19990827-8) unstable; urgency=low + + * src/login.c: fixed login of username on successful login (was using + the normal username, when it should have used pam_user), + closes: #47819 + * src/login.c: check for hushed login and pass PAM_SILENT if true, + closes: #48002 + * src/useradd.c: set def_shell to /bin/bash, closes: #48304 + * doc/README.debian: add note about how to avoid issues with nscd's + lag in aging the cache, closes: #48629 + * src/cppw.c: new program to assist copying a passwd/group file without + corruption, closes: #42141 + + -- Ben Collins <bcollins@debian.org> Tue, 2 Nov 1999 21:46:28 -0500 + +shadow (19990827-7) unstable; urgency=low + + * {passwd,login}.pam.d: added blurb about how to use the pam_cracklib + module, and also changed it to use pam_unix and not pam_pwdb (gah! + how did that happen?), closes: #46983 + * README.debian: changes to reflect new PAM usage as well as removing + references to obsolete config files, closes: #46595 + * passwd.expire.cron: example script that informs users by email when + their accounts are about to expire, closes: #41393 + * lastlogin.c: added -h option and usage as well as long option support, + closes: #45804 + * shadow now only has 3 wishlist bugs and nothing else + + -- Ben Collins <bcollins@debian.org> Sat, 9 Oct 1999 11:54:16 -0400 + +shadow (19990827-6) unstable; urgency=low + + * debian/shells: new file, needed to include /bin/sash, closes: #45826 + * useradd.8,groupadd.8: added note about the preferred use of adduser + and addgroup when conforming to Debian policy (taken from notes in + adduser's man pages), closes: #22821 + * dialups.5: new man page that documents /etc/{dialups,d_passwd}, + closes: #42212 + * src/su.c: added -m, -p and -s command line options to match GNU options, + also documented in su(1), closes: #45394, #46424 + * login.defs.5: clarified usage of TTYTYPE_FILE, closes: #23194 + * login.pam.d: added pam_issue.so which replaces the old ISSUE_FILE from + login.defs, this also allows it to grok escapes in the issue file, + also increases the MODDEPS to (>= 0.69-10). By default this module is + not enabled, closes: #21044 + * login.defs.pam.linux: added ISSUE_FILE to list of deprecated options + + -- Ben Collins <bcollins@debian.org> Mon, 4 Oct 1999 19:56:22 -0400 + +shadow (19990827-5) unstable; urgency=low + + * {login,su}.1: added description of a subsystem login, closes: #31987 + * src/chowndir.c: fixed recursive chown's on usermod, also changed it + to use lchown and lstat since we actually want that, closes: #46405 + * su.1: removed reference to suauth as well as added "-c" to the SYNOPSIS, + closes: #45685 + * login.1: added options to the SYNOPSIS and documented OPTIONS, + closes: #28763 + * login.defs.5: documented the ENVIRON_FILE options (even though it's + not really used in the PAM version), close: #28786 + * 010_src_gpasswd.c: new patch, fixes changing group passwords when not + using shadow groups, closes: #25919 + * {chfn,chsh,login}.pam.d: added nullok to pam_unix.so auth line to + allow for passwordless accounts, closes: #46510 + * login.pam.d: add "standard" to the pam_mail option so we get old + style "You have..." login messages. + + -- Ben Collins <bcollins@debian.org> Sun, 3 Oct 1999 13:41:53 -0400 + +shadow (19990827-4) unstable; urgency=low + + * Alright, we are really getting some usage from this now, and seeing + some odd ball setups, so it means more work for me, but more stable + and feature filled software for you :) + * debian/{login,su}.pam.d: Fixed spelling errors, closes: #45234, #45235 + * debian/login.pam.d: Added commented pam_access.so reference and + description, closes: #45241 + * src/login.c: moved usage of setup_uid_gid() when PAM is enabled or + pam_groups.so's groups get clobbered + * src/newgrp.c: don't call sanitize_env() and also make sure we don't + check passwords when the user is trying to get back to their default + group, closes: #22244 + * Closed some other bugs that were either not really bugs, or they weren't + reproducible. + * debian/login.pam.d: moved around the pam_motd and pam_mail modules to + order them the same as old login would have done + + -- Ben Collins <bcollins@debian.org> Sun, 19 Sep 1999 19:42:13 -0400 + +shadow (19990827-3) unstable; urgency=low + + * This is a "Sit down and really fix some bugs" update. I'm going through + the ones that really need some work. + * src/vipw.c: use the system() call to invoke the editor so that it accepts + command line args in the EDITOR and VISUAL environment vars, closes: #31029 + * src/userdel.c: added code to remove user groups (of the same name) if there + were no members left and USERGROUPS_ENAB is set to yes, closes: #35046 + * login.defs: documented above change + * {login,passwd}.postinst: fixed some bashisms, closes: #45159 + * login.defs.pam.linux: documented the FAKE_SHELL option, closes: 31987 + * su.1,login.1: documented the subsystem root ability in login and su, closes: + * doc directory for both packages now includes the README.shadow-paper file + closes: #15391 + + -- Ben Collins <bcollins@debian.org> Sun, 19 Sep 1999 15:49:11 -0400 + +shadow (19990827-2) unstable; urgency=low + + * debian/rules: use "$(CC) -E" instead of "cpp" to make it easier to + cross compile for Hurd (requested by Marcus Brinkman). + * debian/login.pam.d: forgot to remove that comment about login not + being PAMified, it is and works fine. + * src/login.c: Added login.defs option to turn on and off the persistent + login, also give note on when it isn't and is needed in login.defs. + * lib/getdef.c: Added CLOSE_SESSIONS for above code. + * man/login.defs.5: document the new CLOSE_SESSION option for login + * logoutd: disabled until I can fix it to grok /etc/security/time.conf + + -- Ben Collins <bcollins@debian.org> Mon, 13 Sep 1999 18:57:47 -0400 + +shadow (19990827-1) unstable; urgency=low + + * New Maintainer, with Guy's consent. + closes: #22296, #22331 (closed some NMU bug reports) + * New upstream release, closes: #15879, #24712, #25739, #28785, #32991 + closes: #38672, #39933, #41060, #42480, #22534, #12690, #36150, #26412 + closes: #40398, #43750 + * Ok, now for some dusting and house cleaning (aka The Bug Killfile + Begins Here): + %%- login package + - Not a bug in login anymore, closes: #28098 + - No longer pertinent, and is not controlled by the login program, + closes: #23155 + - This does not appear to be a bug anymore, closes: #32424 + - This is not a login problem. Xterm itself prints the LOGIN message + and it does _not_ read login.access, closes: #16958 + - Seems to be fixed, closes: #28098 + - Huge list of "Fixed" bugs, that I want to close. I really need to + start with a clean slate in order to get some of this cleaned up, + closes: #3439, #11443, #13485, #13815, #15176, #15998, #16187, #17529 + closes: #17532, #17532, #18133, #18225, #20052, #20876, #21280, #21357 + closes: #21687, #21695, #21746, #21767, #22716, #24710 + - lastlog(8): Clarified differences in the usage of "login-name" and + UID, closes: #26727 + %%- passwd package + - newuser: appears to be working correctly and placing x, not !, + closes: #19620 + - userdel(8): added note about user's mail spool also being deleted, + closes: #20790 + - Can't reproduce this one, closes: #21639 + - -e expire_date + The date on which the user account will be dis- + abled. The date is specified in the format + MM/DD/YY. + Bug filer was trying to use an integer instead of the documented + format, closes: #22533 + - chfn's command line options seem to work for root and non-root, + closes: #25396 + - seems to have been fixed by the latest upstream, #25670 + - Removed references to shadow(3), closes: #32859 + - passwd only saves first 8 chars...duh :) closes: #33368 + - userdel can only do so much, the admin should know to check some + things on their own, closes: #35418 + - Lot's of Y2K issues fixed in this release, closes: #37232 + - useradd requires the -m option to make it create a home directory + if one does not exist, closes: #39581 + - useradd's -p option requires the password to already be encrypted + as documented in useradd(8), closes: #39870, #39874 + - More "Fixed" bugs in passwd, closes: #13753, #16893, #17894, #18132 + closes: #18628, #12691 + %%- su (no longer a package, but has bugs just the same, will be + forwarded to the login package soon) + - Sorry, but su (all su's) invoke the shell with -c "cmd". This is + documented, not a bug, it's a standard interface that su expects, + go fix sash's bug for not supporting it, closes: #14551 + - Acknowledged NMU: closes: #20058 + - More "Fixed" bugs getting closed...CLOSED AT LAST, closes: #17593 + closes: #20057, #12689 + * Switched to a new build setup (dbs) + * Split makes into separate files to make it a little cleaner + * FHS compliance changes (usr/{doc,man} to usr/share/{doc,man}) + * debian/tar.c: removed + * su: su is now going to be provided by shadow's login package and + removed from shellutils (the shellutils maintainer agreed to this) + in preparation for future PAM support. Added conflicts with older + version of shellutils that does provide the su binary. + * debian/control.in: removed the secure-su package since login now + contains su and all of it's components + * debian/control.in: modified the package descriptions to be a little + more explicative of what they do. + * Upgraded standards version to 3.0.1.1 + * Setup suidmanager support for all +s apps, closes: #15705, #15704, #15699 + * Enabled PAM. Support now for su, passwd, chfn, chsh. I am working on the + support in login. + * expiry: Changed to be installed as sgid shadow instead of suid root + since it doesn't need root privileges. Also added man page expiry(1) based + on the comments found in expiry.c. + * Removed bashism's in control scripts. Now lintian clean (smells fresh too) + * chage.c: Keep chage from locking when not running as root, since it just + needs to read the shadow and password files. This let's it run sgid shadow + instead of suid root. When run as root, it can lock files for editing. + * login.c: Pam support Works For Me(tm)! + * login.c: Fixed PAM's auth when PAM_USER was not set from the command line, + also call pam_fail_delay() with FAIL_DELAY as the arg before authentication. + * etc/login.defs.pam.linux: new file, reflects options that PAM takesover + * etc/login.defs.pam.hurd: new file, same for Hurd + * debian/passwd.mk: make sure that login.defs.5 gets installed for Hurd + * pam.d/: Modified defaults for each service to reflect the old style and also + added commented options on how to enable obsoleted options from login.defs + in the PAM Way(tm). + * debian/rules: removed --disable-desrpc from configure options since it was + supposedly just a workaround for glibc 2.0 + * src/login.c: reset pam_fail_delay after every failure + * debian/rules: remove debian/files on clean target + * src/login.c: removed setup_limits() and check_nologin() usage when PAM is + enabled + * debian/login.pam.d,debian/login.defs.pam.linux: made notes about the pam_limits.so + module, as well as pam_nologin.so + * debian/su.pam.d: made notes about pam_limits.so module + * debian/control.in: removed depends on libpam-motd since it is now in libpam-modules, + also make login conflict with secure-su + * debian/*: setup so that Hurd does not get PAM, since they don't have it ported + completely yet. + * debian/*: Final approach to a final upload, modified login.postinst to check old + obsolete conffiles to see if the user needs a notice that they are no longer used. + + -- Ben Collins <bcollins@debian.org> Sat, 11 Sep 1999 19:58:14 -0400 + +shadow (980403-0.3.3) unstable; urgency=low + + * Non maintainer upload. + * Add dpkg-architecture and cross compilation support to the package. + * Changes for the Hurd: + + Only build passwd, add etc/login.defs.hurd to this package. + + libmisc/rlogin.c: Conditionalize CBAUD, which is not portable. + + -- Marcus Brinkmann <brinkmd@debian.org> Thu, 5 Aug 1999 00:28:12 +0200 + +shadow (980403-0.3.2) unstable; urgency=low + + * configure.in patched for utmpx.h (for arm) + + -- Jim Pick <jim@jimpick.com> Sun, 4 Oct 1998 19:06:15 -0700 + +shadow (980403-0.3.1) frozen unstable; urgency=low + + * Non maintainer upload. + changes.{guess,sub} changed to recognize a Arm architecture. + + -- Turbo Fredriksson <turbo@debian.org> Fri, 14 Aug 1998 22:37:58 -0400 + +shadow (980403-0.3) frozen unstable; urgency=high + + * Non maintainer upload. + * src/login.c: Applied patch from <marekm@i17linuxb.ists.pwr.wroc.pl> to + fix security hole of login not checking the return code from setgid(), + initgroups() or setuid(). [#24710] + + -- James Troup <james@nocrew.org> Fri, 17 Jul 1998 18:56:31 +0100 + +shadow (980403-0.2) frozen unstable; urgency=low + + * (login.defs): fixed UMASK + (thanks to James Troup for noticing my screwup :) + * Pruned non-Debian changelog entries. + + -- Joel Klecker <jk@espy.org> Mon, 11 May 1998 11:25:22 -0700 + +shadow (980403-0.1) frozen unstable; urgency=low + + * Non-maintainer release. + * New upstream release (18225). + * (debian/login.postinst) + * Use 'touch' instead of 'cat >' when creating /var/log/faillog + (15998,16187,21687). + * No longer fails if no previous configured version exists (11433). + * (gpasswd): now checks which user invoked it before calling setuid() (18132). + * (debian/passwd.postinst): removed bashism (13753). + * (groupmod): NULL dereference fixed upstream, as a result, it no longer + dumps core when changing group name (16893,17894). + * (useradd): no longer segfaults if /etc/default/useradd is missing (18628). + * (login.defs.1): now documents more options (13485). + * (source): includes 'missing' (13815,18133,21280). + * (login.1): + * Removed mention of "d_passwd(5)", which doesn't exist, + and login.defs.5 now documents /etc/dialups (15176). + * Added /etc/nologin to FILES section and reference nologin(5) (21695). + * The URL mentioned in Bug#15391 is no longer valid. + * (login.defs): no longer sets ULIMIT (17529). + * (login): + * No longer uses static buffers for group lines (17532). + * Doesn't seem to make assumptions about gid_t any longer (21767). + * (faillog.8): s-/usr/adm-/var/log-g (19974). + * (lastlog.8): notes that "some systems" use /var/log instead of + /usr/adm (21746). + * Install upstream changelog as 'changelog.gz' as per policy (20052). + * (secure-su): Changed /etc/suauth to reference the group 'root' + instead of 'wheel' (17593). + + -- Joel Klecker <jk@espy.org> Thu, 30 Apr 1998 18:32:12 -0700 + +shadow (970616-1) unstable; urgency=low + + * Upstream upgrade. + * chage works (10561). + * Fix NIS behavior (5634,8734,10032,10545,10984,11160,12064). + * Wrote pwconv,pwunconv,grpconv,grpunconv manpage (10940). + * vipw fixes (10521,10696,11618,11924,12184,13001) + * Fixes for new automake. + * Compile with glibc2. (8627,8777,9824,11713,11719,12082,12108,11442). + * debian/rules fixes (8876,12468). + * /etc/login.defs: UMASK=002 (9102). + * chown /dev/vcs* on login (9421,13255). + * Added tty9-tty12 to /etc/securetty (11644). + * Provide template and manpage for /etc/limits (12289). + * Fix security hole in postinst (11769). + * login fills out ut_addr field in utmp (10701). + * shadowconfig.sh fixes (9189,9328,9386,10968,12452,12469). + * Overcome postinst bug in old shadow-passwd package (9939,12120). + * useradd default GROUP=100 (9244). + * Allow 8 bit chars in chfn (12367). + * secure-su - set HOME, use SHELL if set (11003,11189). + + -- Guy Maor <maor@ece.utexas.edu> Fri, 26 Sep 1997 19:23:42 -0500 + +shadow (970616) unstable; urgency=low + + * vipw preserves permissions on edited files (10521). + * various other bug fixes. + + -- Marek Michalkiewicz <marekm@piast.t19.ds.pwr.wroc.pl> Mon, 16 Jun 1997 02:02:00 +0200 + +shadow (970601) unstable; urgency=low + + * Fix typo in libmisc/mail.c causing login to segfault. + + -- Marek Michalkiewicz <marekm@piast.t19.ds.pwr.wroc.pl> Mon, 2 Jun 1997 07:33:00 +0200 + +shadow (970502-2) unstable; urgency=low + + * Fixes to shadow group support (grpconv didn't work). + + -- Marek Michalkiewicz <marekm@piast.t19.ds.pwr.wroc.pl> Fri, 2 May 1997 15:48:00 +0200 + +shadow (970502-1) unstable; urgency=low + + * Upstream upgrade. + + -- Marek Michalkiewicz <marekm@piast.t19.ds.pwr.wroc.pl> Fri, 2 May 1997 03:18:00 +0200 + +shadow (961025-2) frozen unstable; urgency=medium + + * Fix useradd -D segfault (8098, 8152, 8733). + * Fix shadowconfig - permfix only on xlock; /etc/init.d/xdm rewrite, chmod + (8102, 8320, 8333, 8708). + * Remove HOWTO from usr/doc/passwd as it's in linux-doc (8150). + * Fixes to su.1 (8153). + * login, passwd, su each conflict and replace with the old shadow-* + version. (8269, 8290, 8393, 8394). + * Put /etc/shells back in passwd (8328). + * Fixed login.postinst for upgrade from shadow-login (8392). + * Added -e to pwck for use in shadowconfig: reports only errors, no + warnings (8542). + * Wrote shadowconfig.8 (8588). + + -- Guy Maor <maor@ece.utexas.edu> Sat, 19 Apr 1997 02:34:59 -0500 + +shadow (961025-1) unstable; urgency=low + + * Upstream upgrade, new source format. + + -- Guy Maor <maor@ece.utexas.edu> Mon, 10 Feb 1997 02:56:56 -0600 + diff --git a/scripts/t/Dpkg_Changelog/stop-modeline b/scripts/t/Dpkg_Changelog/stop-modeline new file mode 100644 index 0000000..5b8a7b4 --- /dev/null +++ b/scripts/t/Dpkg_Changelog/stop-modeline @@ -0,0 +1,13 @@ +modeline (2.0-1) unstable; urgency=low + + * Upload. + + -- Dpkg Developers <debian-dpkg@lists.debian.org> Tue, 4 Oct 2005 01:49:05 +0200 + +modeline (1.0-1) unstable; urgency=low + + * Upload. + + -- Dpkg Developers <debian-dpkg@lists.debian.org> Tue, 4 Oct 2005 01:48:05 +0200 + +vim: et diff --git a/scripts/t/Dpkg_Changelog/unreleased b/scripts/t/Dpkg_Changelog/unreleased new file mode 100644 index 0000000..14cacae --- /dev/null +++ b/scripts/t/Dpkg_Changelog/unreleased @@ -0,0 +1,11 @@ +source (2.0) UNRELEASED; urgency=medium + + * This version has not been finished yet. + + -- + +source (1.0) unstable; urgency=medium + + * New release. + + -- Dpkg Developers <debian-dpkg@lists.debian.org> Sat, 05 Nov 2016 18:42:23 +0100 diff --git a/scripts/t/Dpkg_Changelog_Ubuntu.t b/scripts/t/Dpkg_Changelog_Ubuntu.t new file mode 100644 index 0000000..1cd622d --- /dev/null +++ b/scripts/t/Dpkg_Changelog_Ubuntu.t @@ -0,0 +1,25 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::Dpkg qw(:paths); + +$ENV{DEB_VENDOR} = 'Ubuntu'; + +my $datafile = test_get_data_path('t/Dpkg_Changelog.t'); + +do "$datafile"; diff --git a/scripts/t/Dpkg_Checksums.t b/scripts/t/Dpkg_Checksums.t new file mode 100644 index 0000000..c1fc5da --- /dev/null +++ b/scripts/t/Dpkg_Checksums.t @@ -0,0 +1,149 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 59; +use Test::Dpkg qw(:paths); + +BEGIN { + use_ok('Dpkg::Checksums'); +} + +my $datadir = test_get_data_path(); + +my @data = ( + { + file => 'empty', + size => 0, + sums => { + md5 => 'd41d8cd98f00b204e9800998ecf8427e', + sha1 => 'da39a3ee5e6b4b0d3255bfef95601890afd80709', + sha256 => 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', + } + }, { + file => 'data-1', + size => 7, + sums => { + md5 => '1b662eff496fde1a63cc5ff97beec10a', + sha1 => 'ff66a3dc152f273a19392d3099b2915c311c707e', + sha256 => 'f53cb4ee5128363210053c89627757c3dd864ab87e3ac9bff20dd6fe4175a140', + } + }, { + file => 'data-2', + size => 14, + sums => { + md5 => '785400cfc51d16a06e2c34aa511b99ef', + sha1 => '329ba56c0c9c63b6e138f3970ac3628e476a6854', + sha256 => '217147cd3126a076ba3fd816566a80aaaffff5facc572394dbd6af61a49760d1', + } + } +); + +my %str_checksum; +foreach my $f (@data) { + foreach my $alg (keys %{$f->{sums}}) { + $str_checksum{$alg} .= "\n$f->{sums}->{$alg} $f->{size} $f->{file}"; + } +} + +sub test_checksums { + my $ck = shift; + + my @known_files = $ck->get_files(); + my @data_files = map { $_->{file} } @data; + + is_deeply(\@known_files, \@data_files, 'List of files'); + foreach my $f (@data) { + ok($ck->has_file($f->{file}), "Known file $f->{file}"); + is($ck->get_size($f->{file}), $f->{size}, "Known file $f->{file} size"); + is_deeply($ck->get_checksum($f->{file}), $f->{sums}, + "Known file $f->{file} checksums"); + } +} + + +my @expected_checksums = qw(md5 sha1 sha256); +my @known_checksums = checksums_get_list(); + +is_deeply(\@known_checksums, \@expected_checksums, 'List of known checksums'); + +foreach my $c (@expected_checksums) { + ok(checksums_is_supported($c), "Checksum $c is supported"); + + my $uc = uc $c; + ok(checksums_is_supported($uc), "Checksum $uc (uppercase) is supported"); + + ok(defined checksums_get_property($c, 'name'), "Checksum $c has name"); + ok(defined checksums_get_property($c, 'regex'), "Checksum $c has regex"); + ok(defined checksums_get_property($c, 'strong'), "Checksum $c has strong"); +} + +my $ck = Dpkg::Checksums->new(); + +is(scalar $ck->get_files(), 0, 'No checksums recorded'); + +# Check add_from_file() + +foreach my $f (@data) { + $ck->add_from_file("$datadir/$f->{file}", key => $f->{file}); +} + +foreach my $alg (keys %str_checksum) { + my $str = $ck->export_to_string($alg); + is($str, $str_checksum{$alg}, "Export checksum $alg to string from file"); +} + +test_checksums($ck); + +# Check add_from_string() + +foreach my $alg (keys %str_checksum) { + $ck->add_from_string($alg, $str_checksum{$alg}); + + my $str = $ck->export_to_string($alg); + is($str, $str_checksum{$alg}, "Export checksum $alg to string from string"); +} + +test_checksums($ck); + +# Check remove_file() + +ok($ck->has_file('data-2'), 'To be removed file is present'); +$ck->remove_file('data-2'); +ok(!$ck->has_file('data-2'), 'Remove file is not present'); + +# Check add_from_control() +my $ctrl; +foreach my $f (@data) { + next if $f->{file} ne 'data-2'; + foreach my $alg (keys %{$f->{sums}}) { + $ctrl->{"Checksums-$alg"} = "\n$f->{sums}->{$alg} $f->{size} $f->{file}"; + } +} +$ck->add_from_control($ctrl); + +test_checksums($ck); + +# Check export_to_control() + +my $ctrl_export = {}; +$ck->export_to_control($ctrl_export); + +foreach my $alg (keys %str_checksum) { + is($ctrl_export->{"Checksums-$alg"}, $str_checksum{$alg}, + "Export checksum $alg to a control object"); +} diff --git a/scripts/t/Dpkg_Checksums/data-1 b/scripts/t/Dpkg_Checksums/data-1 new file mode 100644 index 0000000..2e51274 --- /dev/null +++ b/scripts/t/Dpkg_Checksums/data-1 @@ -0,0 +1 @@ +data-1 diff --git a/scripts/t/Dpkg_Checksums/data-2 b/scripts/t/Dpkg_Checksums/data-2 new file mode 100644 index 0000000..e1a5ff3 --- /dev/null +++ b/scripts/t/Dpkg_Checksums/data-2 @@ -0,0 +1 @@ +data-2 data-2 diff --git a/scripts/t/Dpkg_Checksums/empty b/scripts/t/Dpkg_Checksums/empty new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/scripts/t/Dpkg_Checksums/empty diff --git a/scripts/t/Dpkg_Compression.t b/scripts/t/Dpkg_Compression.t new file mode 100644 index 0000000..3fd5983 --- /dev/null +++ b/scripts/t/Dpkg_Compression.t @@ -0,0 +1,176 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 48; +use Test::Dpkg qw(:paths); + +use IPC::Cmd qw(can_run); + +use_ok('Dpkg::Compression'); +use_ok('Dpkg::Compression::FileHandle'); + +my $tmpdir = test_get_temp_path(); +my @lines = ("One\n", "Two\n", "Three\n"); +my $fh; +my $have_gunzip = can_run('gunzip'); + +sub test_write { + my ($filename, $check_result) = @_; + + $fh = Dpkg::Compression::FileHandle->new(); + open $fh, '>', $filename or die 'open failed'; + print { $fh } $lines[0]; + syswrite($fh, $lines[1]); + printf { $fh } '%s', $lines[2]; + close $fh or die 'close failed'; + + $check_result->($filename, 'std functions'); + + unlink $filename or die "cannot unlink $filename"; + + $fh = Dpkg::Compression::FileHandle->new(); + $fh->open($filename, 'w'); + $fh->print($lines[0]); + $fh->write($lines[1], length($lines[1])); + $fh->printf('%s', $lines[2]); + $fh->close() or die 'close failed'; + + $check_result->($filename, 'IO::Handle methods'); +} + +sub check_uncompressed { + my ($filename, $method) = @_; + open(my $read_fh, '<', $filename) or die "cannot read $filename"; + my @read = <$read_fh>; + close $read_fh or die 'cannot close'; + is_deeply(\@lines, \@read, "$filename correctly written ($method)"); +} + +sub check_compressed { + my ($filename, $method) = @_; + open my $read_fh, '-|', 'gunzip', '-c', "$tmpdir/myfile.gz" + or die 'cannot fork zcat'; + my @read = <$read_fh>; + close $read_fh or die 'cannot close'; + is_deeply(\@lines, \@read, "$filename correctly written ($method)"); +} + +sub test_read { + my $filename = shift; + + $fh = Dpkg::Compression::FileHandle->new(); + open($fh, '<', $filename) or die 'open failed'; + my @read = <$fh>; + close $fh or die 'close failed'; + + is_deeply(\@lines, \@read, "$filename correctly read (std functions)"); + + @read = (); + $fh = Dpkg::Compression::FileHandle->new(); + $fh->open($filename, 'r') or die 'open failed'; + @read = $fh->getlines(); + $fh->close() or die 'close failed'; + + is_deeply(\@lines, \@read, "$filename correctly read (IO::Handle methods)"); +} + +# Check compression properties. + +my @compressors = compression_get_list(); +is_deeply([ sort @compressors ] , [ qw(bzip2 gzip lzma xz) ], + 'supported compressors'); + +is(compression_get_default(), 'xz', 'default compressor is xz'); +eval { + compression_set_default('invented-compressor'); +}; +ok($@, 'cannot set compressor to an unsupported name'); +is(compression_get_default(), 'xz', 'default compressor is still xz'); +compression_set_default('gzip'); +is(compression_get_default(), 'gzip', 'default compressor changed to gzip'); +compression_set_default('xz'); +is(compression_get_default(), 'xz', 'default compressor reset to xz'); + +ok(compression_is_supported('gzip'), 'gzip is supported'); +ok(compression_is_supported('xz'), 'xz is supported'); +ok(compression_is_supported('bzip2'), 'bzip2 is supported'); +ok(compression_is_supported('lzma'), 'lzma is supported'); + +is(compression_guess_from_filename('filename'), undef, + 'compressor <none> guessed from "filename"'); +is(compression_guess_from_filename('filename.gz'), 'gzip', + 'compressor <none> guessed from "filename"'); +is(compression_guess_from_filename('filename.xz'), 'xz', + 'compressor <none> guessed from "filename"'); +is(compression_guess_from_filename('filename.bz2'), 'bzip2', + 'compressor <none> guessed from "filename"'); +is(compression_guess_from_filename('filename.lzma'), 'lzma', + 'compressor <none> guessed from "filename"'); + +is(compression_get_file_extension('gzip'), 'gz', 'gzip file ext'); +is(compression_get_file_extension('xz'), 'xz', 'xz file ext'); +is(compression_get_file_extension('bzip2'), 'bz2', 'bzip2 file ext'); +is(compression_get_file_extension('lzma'), 'lzma', 'lzma file ext'); + +is(compression_get_level('gzip'), 9, 'gzip level is 9'); +compression_set_level('gzip', 1); +is(compression_get_level('gzip'), 1, 'gzip level is now 1'); +compression_set_level('gzip'); +is(compression_get_level('gzip'), 9, 'gzip level is back to 9'); +is(compression_get_level('xz'), 6, 'xz level is 6'); +is(compression_get_level('bzip2'), 9, 'bzip2 level is 9'); +is(compression_get_level('lzma'), 6, 'lzma level is 6'); + +my $ext_regex = compression_get_file_extension_regex(); + +ok('filename.gz' =~ m/\.$ext_regex$/, '.gz matches regex'); +ok('filename.xz' =~ m/\.$ext_regex$/, '.xz matches regex'); +ok('filename.bz2' =~ m/\.$ext_regex$/, '.bz2 matches regex'); +ok('filename.lzma' =~ m/\.$ext_regex$/, '.lzma matches regex'); + +# Test changing the default compression levels +my $old_level = compression_get_default_level(); +compression_set_default_level(1); +is(compression_get_default_level(), 1, 'change default compression level'); +compression_set_default_level(5); +is(compression_get_default_level(), 5, 'change default compression level'); +compression_set_default_level(undef); +is(compression_get_default_level(), $old_level, 'reset default compression level'); + +ok(! compression_is_valid_level(0), 'compression 0 is invalid'); +ok(compression_is_valid_level(1), 'compression 1 is valid'); +ok(compression_is_valid_level(5), 'compression 5 is valid'); +ok(compression_is_valid_level(9), 'compression 9 is valid'); +ok(compression_is_valid_level('fast'), 'compression fast is valid'); +ok(compression_is_valid_level('best'), 'compression best is valid'); + +# Test write on uncompressed file +test_write("$tmpdir/myfile", \&check_uncompressed); + +SKIP: { + skip 'gunzip not available', 1 if not $have_gunzip; + + # Test write on compressed file + test_write("$tmpdir/myfile.gz", \&check_compressed); +} + +# Test read on uncompressed file +test_read("$tmpdir/myfile"); + +# Test read on compressed file +test_read("$tmpdir/myfile.gz"); diff --git a/scripts/t/Dpkg_Conf.t b/scripts/t/Dpkg_Conf.t new file mode 100644 index 0000000..432c508 --- /dev/null +++ b/scripts/t/Dpkg_Conf.t @@ -0,0 +1,119 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 9; +use Test::Dpkg qw(:paths); + +BEGIN { + use_ok('Dpkg::Conf'); +} + +my $datadir = test_get_data_path(); + +my ($conf, $count, @opts); + +my @expected_long_opts = ( +'--option-double-quotes=value double quotes', +'--option-single-quotes=value single quotes', +'--option-space=value words space', +qw( +--option-dupe=value1 +--option-name=value-name +--option-indent=value-indent +--option-equal=value-equal=subvalue-equal +--option-noequal=value-noequal +--option-dupe=value2 +--option-simple +--option-dash=value-dash +--option-dupe=value3 +--l=v +)); +my @expected_short_opts = qw( +-o=vd +-s +); + +$conf = Dpkg::Conf->new(); +local $SIG{__WARN__} = sub { }; +$count = $conf->load("$datadir/config-mixed"); +delete $SIG{__WARN__}; +is($count, 13, 'Load a config file, only long options'); + +@opts = $conf->get_options(); +is_deeply(\@opts, \@expected_long_opts, 'Parse long options'); + +$conf = Dpkg::Conf->new(allow_short => 1); +$count = $conf->load("$datadir/config-mixed"); +is($count, 15, 'Load a config file, mixed options'); + +@opts = $conf->get_options(); +my @expected_mixed_opts = ( @expected_long_opts, @expected_short_opts ); +is_deeply(\@opts, \@expected_mixed_opts, 'Parse mixed options'); + +my $expected_mixed_output = <<'MIXED'; +option-double-quotes = "value double quotes" +option-single-quotes = "value single quotes" +option-space = "value words space" +option-dupe = "value1" +option-name = "value-name" +option-indent = "value-indent" +option-equal = "value-equal=subvalue-equal" +option-noequal = "value-noequal" +option-dupe = "value2" +option-simple +option-dash = "value-dash" +option-dupe = "value3" +l = "v" +-o = "vd" +-s +MIXED + +is($conf->output, $expected_mixed_output, 'Output mixed options'); + +my $expected_filter; + +$expected_filter = <<'FILTER'; +l = "v" +-o = "vd" +-s +FILTER + +$conf = Dpkg::Conf->new(allow_short => 1); +$conf->load("$datadir/config-mixed"); +$conf->filter(remove => sub { $_[0] =~ m/^--option/ }); +is($conf->output, $expected_filter, 'Filter remove'); + +$expected_filter = <<'FILTER'; +option-double-quotes = "value double quotes" +option-single-quotes = "value single quotes" +FILTER + +$conf = Dpkg::Conf->new(allow_short => 1); +$conf->load("$datadir/config-mixed"); +$conf->filter(keep => sub { $_[0] =~ m/^--option-[a-z]+-quotes/ }); +is($conf->output, $expected_filter, 'Filter keep'); + +$expected_filter = <<'FILTER'; +l = "v" +FILTER + +$conf = Dpkg::Conf->new(allow_short => 1); +$conf->load("$datadir/config-mixed"); +$conf->filter(remove => sub { $_[0] =~ m/^--option/ }, + keep => sub { $_[0] =~ m/^--/ }); +is($conf->output, $expected_filter, 'Filter keep and remove'); diff --git a/scripts/t/Dpkg_Conf/config-mixed b/scripts/t/Dpkg_Conf/config-mixed new file mode 100644 index 0000000..87c0405 --- /dev/null +++ b/scripts/t/Dpkg_Conf/config-mixed @@ -0,0 +1,26 @@ +# Comment followed by an empty line. + +option-double-quotes = "value double quotes" +option-single-quotes = 'value single quotes' +option-space = value words space + +option-dupe=value1 +option-name=value-name + + # Indented comment. + option-indent = value-indent + +option-equal=value-equal=subvalue-equal +option-noequal value-noequal +option-dupe=value2 +option-simple + +# Fully spelled out options. +--option-dash=value-dash +--option-dupe=value3 + +# Long option with one character name. +l=v +# Short option. +-o=vd +-s diff --git a/scripts/t/Dpkg_Control.t b/scripts/t/Dpkg_Control.t new file mode 100644 index 0000000..29311b8 --- /dev/null +++ b/scripts/t/Dpkg_Control.t @@ -0,0 +1,148 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More; +use Test::Dpkg qw(:needs :paths); + +BEGIN { + plan tests => 24; + + use_ok('Dpkg::Control'); + use_ok('Dpkg::Control::Info'); +} + +my $datadir = test_get_data_path(); + +sub parse_ctrl { + my ($type, $path) = @_; + + my $ctrl = Dpkg::Control->new(type => $type); + eval { + $ctrl->load($path); + 1; + } or return; + + return $ctrl; +} + +sub parse_dsc { + my $path = shift; + + return parse_ctrl(CTRL_DSC, $path); +} + +my $c = Dpkg::Control::Info->new("$datadir/control-1"); + +my $io_data; +my $io; + +open $io, '>', \$io_data or die "canno open io string\n";; + +$c->output($io); +my $expected = 'Source: mysource +Empty-Field: +Long-Field: line1 + line 2 line 2 line 2 + . + line 3 line 3 line 3 + . + .. + line 4 +My-Field-One: myvalue1 +My-Field-Two: myvalue2 +Numeric-Field: 0 + +Package: mypackage1 +Architecture: any +Depends: libc6 + +Package: mypackage2 +Architecture: all +Depends: hello + +Package: mypackage3 +Architecture: all +Depends: hello +Description: short one + long one + very long one +'; +is($io_data, $expected, "Dump of $datadir/control-1"); + +my $src = $c->get_source(); +is($src, $c->[0], 'array representation of Dpkg::Control::Info 1/2'); +is($src->{'numeric-field'}, '0', 'Numeric 0 value parsed correctly'); +is($src->{'my-field-one'}, 'myvalue1', 'Access field through badly capitalized field name'); +is($src->{'long-field'}, +'line1 +line 2 line 2 line 2 + + line 3 line 3 line 3 + +. +line 4', 'Get multi-line field'); +is($src->{'Empty-field'}, '', 'Get empty field'); + +my $pkg = $c->get_pkg_by_idx(1); +is($pkg, $c->[1], 'array representation of Dpkg::Control::Info 2/2'); +is($pkg->{package}, 'mypackage1', 'Name of first package'); + +$pkg = $c->get_pkg_by_name('mypackage3'); +is($pkg->{package}, 'mypackage3', 'Name of third package'); +is($pkg->{Depends}, 'hello', 'Name of third package'); + +$pkg = $c->get_pkg_by_idx(2); +open $io, '>', \$io_data or die "canno open io string\n";; +$pkg->output($io); + +is($io_data, +'Package: mypackage2 +Architecture: all +Depends: hello +', "Dump of second binary package of $datadir/control-1"); + +# Check OpenPGP armored signatures in source control files + +my $dsc; + +$dsc = parse_dsc("$datadir/bogus-unsigned.dsc"); +is($dsc, undef, 'Unsigned .dsc w/ OpenPGP armor'); + +$dsc = parse_dsc("$datadir/bogus-armor-no-sig.dsc"); +is($dsc, undef, 'Signed .dsc w/ OpenPGP armor missing signature'); + +$dsc = parse_dsc("$datadir/bogus-armor-trail.dsc"); +is($dsc, undef, 'Signed .dsc w/ bogus OpenPGP armor trailer'); + +$dsc = parse_dsc("$datadir/bogus-armor-inline.dsc"); +is($dsc, undef, 'Signed .dsc w/ bogus OpenPGP inline armor'); + +$dsc = parse_dsc("$datadir/bogus-armor-formfeed.dsc"); +is($dsc, undef, 'Signed .dsc w/ bogus OpenPGP armor line'); + +$dsc = parse_dsc("$datadir/bogus-armor-double.dsc"); +ok(defined $dsc, 'Signed .dsc w/ two OpenPGP armor signatures'); +is($dsc->{Source}, 'pass', 'Signed spaced .dsc package name'); + +$dsc = parse_dsc("$datadir/bogus-armor-spaces.dsc"); +ok(defined $dsc, 'Signed .dsc w/ spaced OpenPGP armor'); +is($dsc->{Source}, 'pass', 'Signed spaced .dsc package name'); + +$dsc = parse_dsc("$datadir/bogus-armor-nested.dsc"); +ok(defined $dsc, 'Signed .dsc w/ nested OpenPGP armor'); +is($dsc->{Source}, 'pass', 'Signed nested .dsc package name'); diff --git a/scripts/t/Dpkg_Control/bogus-armor-double.dsc b/scripts/t/Dpkg_Control/bogus-armor-double.dsc new file mode 100644 index 0000000..1888a00 --- /dev/null +++ b/scripts/t/Dpkg_Control/bogus-armor-double.dsc @@ -0,0 +1,13 @@ +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Source: pass + +-----BEGIN PGP SIGNATURE----- + +Valid signature here. +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +Fake signature here. +-----END PGP SIGNATURE----- diff --git a/scripts/t/Dpkg_Control/bogus-armor-formfeed.dsc b/scripts/t/Dpkg_Control/bogus-armor-formfeed.dsc new file mode 100644 index 0000000..70aab18 --- /dev/null +++ b/scripts/t/Dpkg_Control/bogus-armor-formfeed.dsc @@ -0,0 +1,19 @@ +-----BEGIN PGP SIGNED MESSAGE----- + +Source: fail + +-----BEGIN PGP SIGNATURE----- +Version: vim v7.3.547 (GNU/Linux) + +Fake signature here. +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Source: pass + +-----BEGIN PGP SIGNATURE +Version: GnuPG v1.4.12 (GNU/Linux) + +Valid signature here. +-----END PGP SIGNATURE----- diff --git a/scripts/t/Dpkg_Control/bogus-armor-inline.dsc b/scripts/t/Dpkg_Control/bogus-armor-inline.dsc new file mode 100644 index 0000000..44942c1 --- /dev/null +++ b/scripts/t/Dpkg_Control/bogus-armor-inline.dsc @@ -0,0 +1,9 @@ +Source: fail +-----BEGIN PGP SIGNED MESSAGE----- + +Binary: pass + +-----BEGIN PGP SIGNATURE----- + +Valid signature here. +-----END PGP SIGNATURE----- diff --git a/scripts/t/Dpkg_Control/bogus-armor-nested.dsc b/scripts/t/Dpkg_Control/bogus-armor-nested.dsc new file mode 100644 index 0000000..ca99c35 --- /dev/null +++ b/scripts/t/Dpkg_Control/bogus-armor-nested.dsc @@ -0,0 +1,15 @@ +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Source: pass + +-----BEGIN PGP SIGNATURE----- +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Source: fail + +-----BEGIN PGP SIGNATURE----- + +Valid signature here. +-----END PGP SIGNATURE----- diff --git a/scripts/t/Dpkg_Control/bogus-armor-no-sig.dsc b/scripts/t/Dpkg_Control/bogus-armor-no-sig.dsc new file mode 100644 index 0000000..4502a18 --- /dev/null +++ b/scripts/t/Dpkg_Control/bogus-armor-no-sig.dsc @@ -0,0 +1,4 @@ +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Source: pass diff --git a/scripts/t/Dpkg_Control/bogus-armor-spaces.dsc b/scripts/t/Dpkg_Control/bogus-armor-spaces.dsc new file mode 100644 index 0000000..ab71ab5 --- /dev/null +++ b/scripts/t/Dpkg_Control/bogus-armor-spaces.dsc @@ -0,0 +1,18 @@ +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Source: pass + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.4.12 (GNU/Linux) + +Valid signature here. +-----END PGP SIGNATURE----- + +Source: fail + +-----BEGIN PGP SIGNATURE +Version: vim v7.3.547 (GNU/Linux) + +Fake signature here. +-----END PGP SIGNATURE diff --git a/scripts/t/Dpkg_Control/bogus-armor-trail.dsc b/scripts/t/Dpkg_Control/bogus-armor-trail.dsc new file mode 100644 index 0000000..90b00f1 --- /dev/null +++ b/scripts/t/Dpkg_Control/bogus-armor-trail.dsc @@ -0,0 +1,14 @@ +-----BEGIN PGP SIGNED MESSAGE + +Source: fail + +-----BEGIN PGP SIGNATURE +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + +Source: pass + +-----BEGIN PGP SIGNATURE----- + +Valid signature here. +-----END PGP SIGNATURE----- diff --git a/scripts/t/Dpkg_Control/bogus-unsigned.dsc b/scripts/t/Dpkg_Control/bogus-unsigned.dsc new file mode 100644 index 0000000..7573eb3 --- /dev/null +++ b/scripts/t/Dpkg_Control/bogus-unsigned.dsc @@ -0,0 +1,5 @@ +-----BEGIN PGP MESSAGE----- + +Source: fail + +-----END PGP MESSAGE----- diff --git a/scripts/t/Dpkg_Control/control-1 b/scripts/t/Dpkg_Control/control-1 new file mode 100644 index 0000000..0c70533 --- /dev/null +++ b/scripts/t/Dpkg_Control/control-1 @@ -0,0 +1,30 @@ +Source: mysource +# This is a comment +numeric-field: 0 +my-field-one: myvalue1 +my-field-two: myvalue2 +long-field: line1 + line 2 line 2 line 2 + . + line 3 line 3 line 3 + . + .. + line 4 +empty-field: + +# First package +Package: mypackage1 +Architecture: any +Depends: libc6 + +# Second package +Package: mypackage2 +Architecture: all +Depends: hello + +Package: mypackage3 +Architecture: all +Depends:hello +Description: short one + long one + very long one diff --git a/scripts/t/Dpkg_Control_Fields.t b/scripts/t/Dpkg_Control_Fields.t new file mode 100644 index 0000000..800e649 --- /dev/null +++ b/scripts/t/Dpkg_Control_Fields.t @@ -0,0 +1,540 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More; +use Test::Dpkg qw(:paths); + +BEGIN { + plan tests => 2603; + + use_ok('Dpkg::Control::Types'); + use_ok('Dpkg::Control::FieldsCore'); + use_ok('Dpkg::Control'); +} + +#my $datadir = test_get_data_path(); + +my @src_dep_fields = qw( + Build-Depends + Build-Depends-Arch + Build-Depends-Indep + Build-Conflicts + Build-Conflicts-Arch + Build-Conflicts-Indep +); +my @bin_dep_normal_fields = qw( + Pre-Depends + Depends + Recommends + Suggests + Enhances +); +my @bin_dep_union_fields = qw( + Conflicts + Breaks + Replaces + Provides + Built-Using + Static-Built-Using +); +my @bin_dep_fields = ( + @bin_dep_normal_fields, + @bin_dep_union_fields, +); +my @src_checksums = qw( + Checksums-Md5 + Checksums-Sha1 + Checksums-Sha256 +); +my @bin_checksums = qw( + MD5sum + SHA1 + SHA256 +); +my @src_files = ( + @src_checksums, + qw( + Files + ), +); +my @bin_files = ( + qw( + Filename + Size + ), + @bin_checksums, +); +my @vcs_fields = qw( + Vcs-Browser + Vcs-Arch + Vcs-Bzr + Vcs-Cvs + Vcs-Darcs + Vcs-Git + Vcs-Hg + Vcs-Mtn + Vcs-Svn +); +my @test_fields = qw( + Testsuite + Testsuite-Triggers +); + +my %fields = ( + CTRL_TMPL_SRC() => { + name => 'debian/control source stanza', + fields => [ + qw( + Source + Section + Priority + Maintainer + Uploaders + Origin + Bugs + ), + @vcs_fields, + qw( + Homepage + Standards-Version + Rules-Requires-Root + ), + @src_dep_fields, + @test_fields, + qw( + Description + ), + ], + }, + CTRL_TMPL_PKG() => { + name => 'debian/control binary stanza', + fields => [ + qw( + Package + Package-Type + Section + Priority + Architecture + Subarchitecture + Multi-Arch + Essential + Protected + Build-Essential + Build-Profiles + Built-For-Profiles + Kernel-Version + ), + @bin_dep_fields, + qw( + Homepage + Installer-Menu-Item + Task + Tag + Description + ), + ], + }, + CTRL_DSC() => { + name => '.dsc', + fields => [ + qw( + Format + Source + Binary + Architecture + Version + Origin + Maintainer + Uploaders + Homepage + Description + Standards-Version + ), + @vcs_fields, + @test_fields, + @src_dep_fields, + qw( + Package-List + ), + @src_files, + ], + }, + CTRL_DEB() => { + name => 'DEBIAN/control', + fields => [ + qw( + Package + Package-Type + Source + Version + Kernel-Version + Built-For-Profiles + Auto-Built-Package + Architecture + Subarchitecture + Installer-Menu-Item + Build-Essential + Essential + Protected + Origin + Bugs + Maintainer + Installed-Size + ), + @bin_dep_fields, + qw( + Section + Priority + Multi-Arch + Homepage + Description + Tag + Task + ), + ], + }, + CTRL_REPO_SRC() => { + name => 'Sources', + fields => [ + qw( + Format + Package + Binary + Architecture + Version + Priority + Section + Origin + Maintainer + Uploaders + Homepage + Description + Standards-Version + ), + @vcs_fields, + @test_fields, + @src_dep_fields, + qw( + Package-List + Directory + ), + @src_files, + ], + }, + CTRL_REPO_PKG() => { + name => 'Packages', + fields => [ + qw( + Package + Package-Type + Source + Version + Kernel-Version + Built-For-Profiles + Auto-Built-Package + Architecture + Subarchitecture + Installer-Menu-Item + Build-Essential + Essential + Protected + Origin + Bugs + Maintainer + Installed-Size + ), + @bin_dep_fields, + @bin_files, + qw( + Section + Priority + Multi-Arch + Homepage + Description + Tag + Task + ), + ], + }, + CTRL_REPO_RELEASE() => { + name => 'Release', + fields => [ + qw( + Origin + Label + Suite + Version + Codename + Changelogs + Date + Valid-Until + NotAutomatic + ButAutomaticUpgrades + Acquire-By-Hash + No-Support-for-Architecture-all + Architectures + Components + Description + ), + @bin_checksums, + ], + }, + CTRL_CHANGELOG() => { + name => 'debian/changelog', + fields => [ + qw( + Source + Binary-Only + Version + Distribution + Urgency + Maintainer + Timestamp + Date + Closes + Changes + ), + ], + }, + CTRL_COPYRIGHT_HEADER() => { + name => 'debian/copyright Format stanza', + fields => [ + qw( + Format + Upstream-Name + Upstream-Contact + Source + Disclaimer + Comment + License + Copyright + ), + ], + }, + CTRL_COPYRIGHT_FILES() => { + name => 'debian/copyright Files stanza', + fields => [ + qw( + Files + Copyright + License + Comment + ), + ], + }, + CTRL_COPYRIGHT_LICENSE() => { + name => 'debian/copyright License stanza', + fields => [ + qw( + License + Comment + ), + ], + }, + CTRL_TESTS() => { + name => 'debian/tests/control', + fields => [ + qw( + Test-Command + Tests + Tests-Directory + Architecture + Restrictions + Features + Classes + Depends + ), + ], + }, + CTRL_FILE_BUILDINFO() => { + name => '.buildinfo', + fields => [ + qw( + Format + Source + Binary + Architecture + Version + Binary-Only-Changes + ), + @src_checksums, + qw( + Build-Origin + Build-Architecture + Build-Kernel-Version + Build-Date + Build-Path + Build-Tainted-By + Installed-Build-Depends + Environment + ), + ], + }, + CTRL_FILE_CHANGES() => { + name => '.changes', + fields => [ + qw( + Format + Date + Source + Binary + Binary-Only + Built-For-Profiles + Architecture + Version + Distribution + Urgency + Maintainer + Changed-By + Description + Closes + Changes + ), + @src_files, + ], + }, + CTRL_FILE_VENDOR() => { + name => 'dpkg origin', + fields => [ + qw( + Vendor + Vendor-Url + Bugs + Parent + ), + ], + }, + CTRL_FILE_STATUS() => { + name => 'dpkg status', + fields => [ + qw( + Package + Essential + Protected + Status + Priority + Section + Installed-Size + Origin + Maintainer + Bugs + Architecture + Multi-Arch + Source + Version + Config-Version + Replaces + Provides + Depends + Pre-Depends + Recommends + Suggests + Breaks + Conflicts + Enhances + Conffiles + Description + Triggers-Pending + Triggers-Awaited + Auto-Built-Package + Build-Essential + Built-For-Profiles + Built-Using + Static-Built-Using + Homepage + Installer-Menu-Item + Kernel-Version + Package-Type + Subarchitecture + Tag + Task + ), + ], + }, +); + +is_deeply([ field_list_src_dep() ], + [ @src_dep_fields ], + 'List of build dependencies'); +is_deeply([ field_list_pkg_dep() ], + [ @bin_dep_fields ], + 'List of build dependencies'); + +is(field_capitalize('invented-field'), 'Invented-Field', + 'Field Invented-Field capitalization'); +ok(!field_is_official('invented-field'), + 'Field Invented-Field is not official'); + +my %known_fields; +foreach my $type (sort keys %fields) { + if (not $fields{$type}->{unordered}) { + is_deeply([ field_ordered_list($type) ], $fields{$type}->{fields}, + "List of $fields{$type}->{name} fields"); + } + + foreach my $field (@{$fields{$type}->{fields}}) { + $known_fields{$field} = 1; + } +} + +foreach my $field (sort keys %known_fields) { + is(field_capitalize($field), $field, "Field $field capitalization"); + is(field_capitalize(lc $field), $field, "Field lc($field) capitalization"); + is(field_capitalize(uc $field), $field, "Field uc($field) capitalization"); + + ok(field_is_official($field), "Field $field is official"); + ok(field_is_official(lc $field), "Field lc($field) is official"); + ok(field_is_official(uc $field), "Field uc($field) is official"); +} + +foreach my $type (sort keys %fields) { + my %allowed_fields = map { $_ => 1 } @{$fields{$type}->{fields}}; + + foreach my $field (sort keys %known_fields) { + if ($allowed_fields{$field}) { + ok(field_is_allowed_in($field, $type), + "Field $field allowed for type $fields{$type}->{name}"); + } else { + ok(!field_is_allowed_in($field, $type), + "Field $field not allowed for type $fields{$type}->{name}"); + } + } +} + +# Check deb822 field parsers + +my $ctrl = Dpkg::Control->new(type => CTRL_DEB); + +my ($source, $version); + +$ctrl->{Package} = 'test-binary'; +$ctrl->{Version} = '2.0-1'; +$ctrl->{Source} = 'test-source (1.0)'; +($source, $version) = field_parse_binary_source($ctrl); +is($source, 'test-source', 'Source package from binary w/ Source field'); +is($version, '1.0', 'Source version from binary w/ Source field'); + +$ctrl->{Source} = 'test-source'; +($source, $version) = field_parse_binary_source($ctrl); +is($source, 'test-source', 'Source package from binary w/ Source field w/o version'); +is($version, '2.0-1', 'Source version from binary w/ Source field w/o version'); + +delete $ctrl->{Source}; +($source, $version) = field_parse_binary_source($ctrl); +is($source, 'test-binary', 'Source package from binary w/o Source field'); +is($version, '2.0-1', 'Source version from binary w/o Source field'); diff --git a/scripts/t/Dpkg_Control_Tests.t b/scripts/t/Dpkg_Control_Tests.t new file mode 100644 index 0000000..27042dc --- /dev/null +++ b/scripts/t/Dpkg_Control_Tests.t @@ -0,0 +1,71 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 5; +use Test::Dpkg qw(:paths); + +BEGIN { + use_ok('Dpkg::Control::Tests'); +} + +my $datadir = test_get_data_path(); + +sub parse_tests { + my $path = shift; + + my $tests = Dpkg::Control::Tests->new(); + eval { + $tests->load($path); + 1; + } or return; + + return $tests; +} + +my $tests; + +$tests = parse_tests("$datadir/tests-missing-fields"); +is($tests, undef, 'autopkgtest missing required fields'); + +$tests = parse_tests("$datadir/tests-plain-text"); +is($tests, undef, 'autopkgtest is not in deb822 format'); + +my $expected = <<'TESTS'; +Tests: aaa, bbb, ccc + +Tests: danger, warning +Restrictions: rw-build-tree, needs-root, breaks-testbed + +Tests: depends +Depends: @, @builddeps@, extra-package + +Tests: dir +Tests-Directory: . + +Tests: feature + +Tests: class +Classes: self-test + +Test-Command: command arg1 arg2 + +TESTS + +$tests = parse_tests("$datadir/tests-valid"); +ok(defined $tests, 'Valid autopkgtest control file'); +is($tests->output(), $expected, 'autopkgtest control file dumped'); diff --git a/scripts/t/Dpkg_Control_Tests/tests-missing-fields b/scripts/t/Dpkg_Control_Tests/tests-missing-fields new file mode 100644 index 0000000..7f7794d --- /dev/null +++ b/scripts/t/Dpkg_Control_Tests/tests-missing-fields @@ -0,0 +1,7 @@ +Tests: aaa + +Test-Command: command + +Other: + +Tests: bbb diff --git a/scripts/t/Dpkg_Control_Tests/tests-plain-text b/scripts/t/Dpkg_Control_Tests/tests-plain-text new file mode 100644 index 0000000..a29d388 --- /dev/null +++ b/scripts/t/Dpkg_Control_Tests/tests-plain-text @@ -0,0 +1,6 @@ +This is a plain text file +that does not contain + + any of the expected fields nor values + +and should fail to load. diff --git a/scripts/t/Dpkg_Control_Tests/tests-valid b/scripts/t/Dpkg_Control_Tests/tests-valid new file mode 100644 index 0000000..c0ad60b --- /dev/null +++ b/scripts/t/Dpkg_Control_Tests/tests-valid @@ -0,0 +1,18 @@ +Tests: aaa, bbb, ccc + +Tests: danger, warning +Restrictions: rw-build-tree, needs-root, breaks-testbed + +Tests: depends +Depends: @, @builddeps@, extra-package + +Tests: dir +Tests-Directory: . + +Tests: feature +Features: + +Tests: class +Classes: self-test + +Test-Command: command arg1 arg2 diff --git a/scripts/t/Dpkg_Deps.t b/scripts/t/Dpkg_Deps.t new file mode 100644 index 0000000..b6a10d6 --- /dev/null +++ b/scripts/t/Dpkg_Deps.t @@ -0,0 +1,368 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 84; + +use Dpkg::Arch qw(get_host_arch); +use Dpkg::Version; + +$ENV{DEB_BUILD_ARCH} = 'amd64'; +$ENV{DEB_HOST_ARCH} = 'amd64'; + +use_ok('Dpkg::Deps'); + +is(deps_concat(), '', 'Concatenate an empty list'); +is(deps_concat(undef), '', 'Concatenate list with undef'); +is(deps_concat(''), '', 'Concatenate an empty string'); +is(deps_concat('', undef), '', 'Concatenate empty string with undef'); +is(deps_concat('dep-a', undef, 'dep-b'), 'dep-a, dep-b', + 'Concatenate two strings with intermixed undef'); + +sub test_dep_parse_option { + my %options = @_; + + eval { + my $dep_croak = deps_parse('pkg', %options); + }; + my $options = join ' ', map { "$_=$options{$_}" } keys %options; + ok(defined $@, "Parse with bogus arch options $options"); +} + +test_dep_parse_option(host_arch => 'all'); +test_dep_parse_option(host_arch => 'any'); +test_dep_parse_option(host_arch => 'linux-any'); +test_dep_parse_option(host_arch => 'unknown-arch'); +test_dep_parse_option(build_arch => 'all'); +test_dep_parse_option(build_arch => 'any'); +test_dep_parse_option(build_arch => 'linux-any'); +test_dep_parse_option(build_arch => 'unknown-arch'); + +my $field_multiline = ' , , libgtk2.0-common (= 2.10.13-1) , libatk1.0-0 (>= +1.13.2), libc6 (>= 2.5-5), libcairo2 (>= 1.4.0), libcupsys2 (>= 1.2.7) <profile.a> +<profile.b +profile.c> +<profile.d>, +libfontconfig1 (>= 2.4.0), libglib2.0-0 ( >= 2.12.9), libgnutls13 (>= +1.6.3-0), libjpeg62, python (<< 2.5) , , '; +my $field_multiline_sorted = 'libatk1.0-0 (>= 1.13.2), libc6 (>= 2.5-5), libcairo2 (>= 1.4.0), libcupsys2 (>= 1.2.7) <profile.a> <profile.b profile.c> <profile.d>, libfontconfig1 (>= 2.4.0), libglib2.0-0 (>= 2.12.9), libgnutls13 (>= 1.6.3-0), libgtk2.0-common (= 2.10.13-1), libjpeg62, python (<< 2.5)'; + +my $dep_multiline = deps_parse($field_multiline); +$dep_multiline->sort(); +is($dep_multiline->output(), $field_multiline_sorted, 'Parse, sort and output'); + +my $dep_sorted = deps_parse('pkgz, pkgz | pkgb, pkgz | pkga, pkga (>= 1.0), pkgz (<= 2.0)'); +$dep_sorted->sort(); +is($dep_sorted->output(), 'pkga (>= 1.0), pkgz, pkgz | pkga, pkgz | pkgb, pkgz (<= 2.0)', 'Check sort() algorithm'); + +my $dep_subset = deps_parse('libatk1.0-0 (>> 1.10), libc6, libcairo2'); +is($dep_multiline->implies($dep_subset), 1, 'Dep implies subset of itself'); +is($dep_subset->implies($dep_multiline), undef, "Subset doesn't imply superset"); +my $dep_opposite = deps_parse('python (>= 2.5)'); +is($dep_opposite->implies($dep_multiline), 0, 'Opposite condition implies NOT the depends'); + +my $dep_or1 = deps_parse('a|b (>=1.0)|c (>= 2.0)'); +my $dep_or2 = deps_parse('x|y|a|b|c (<= 0.5)|c (>=1.5)|d|e'); +is($dep_or1->implies($dep_or2), 1, 'Implication between OR 1/2'); +is($dep_or2->implies($dep_or1), undef, 'Implication between OR 2/2'); + +my $dep_ma_host = deps_parse('libcairo2'); +my $dep_ma_any = deps_parse('libcairo2:any'); +my $dep_ma_build = deps_parse('libcairo2:native', build_dep => 1); +my $dep_ma_explicit = deps_parse('libcairo2:amd64'); +is($dep_ma_host->implies($dep_ma_any), undef, 'foo !-> foo:any'); +is($dep_ma_build->implies($dep_ma_any), undef, 'foo:native !-> foo:any'); +is($dep_ma_explicit->implies($dep_ma_any), undef, 'foo:<arch> !-> foo:any'); +is($dep_ma_any->implies($dep_ma_host), undef, 'foo:any !-> foo'); +is($dep_ma_any->implies($dep_ma_build), undef, 'foo:any !-> foo:native'); +is($dep_ma_any->implies($dep_ma_explicit), undef, 'foo:any !-> foo:<arch>'); +is($dep_ma_host->implies($dep_ma_host), 1, 'foo -> foo'); +is($dep_ma_any->implies($dep_ma_any), 1, 'foo:any -> foo:any'); +is($dep_ma_build->implies($dep_ma_build), 1, 'foo:native -> foo:native'); +is($dep_ma_explicit->implies($dep_ma_explicit), 1, 'foo:<arch>-> foo:<arch>'); + +my $field_tests = 'self, @, @builddeps@'; +$SIG{__WARN__} = sub {}; +my $dep_tests_fail = deps_parse($field_tests); +is($dep_tests_fail, undef, 'normal deps with @ in pkgname'); +$dep_tests_fail = deps_parse($field_tests, build_dep => 1); +is($dep_tests_fail, undef, 'build deps with @ in pkgname'); +delete $SIG{__WARN__}; +my $dep_tests_pass = deps_parse($field_tests, tests_dep => 1); +is($dep_tests_pass->output(), $field_tests, 'tests deps with @ in pkgname'); +$field_tests = 'self, pkgname:native, @, @builddeps@'; +$dep_tests_pass = deps_parse($field_tests, tests_dep => 1); +is($dep_tests_pass->output(), $field_tests, 'tests deps with :native and @ in pkgname'); + +my $field_arch = 'libc6 (>= 2.5) [!alpha !hurd-i386], libc6.1 [alpha], libc0.1 [hurd-i386]'; +my $dep_i386 = deps_parse($field_arch, reduce_arch => 1, host_arch => 'i386'); +my $dep_alpha = deps_parse($field_arch, reduce_arch => 1, host_arch => 'alpha'); +my $dep_hurd = deps_parse($field_arch, reduce_arch => 1, host_arch => 'hurd-i386'); +is($dep_i386->output(), 'libc6 (>= 2.5)', 'Arch reduce 1/3'); +is($dep_alpha->output(), 'libc6.1', 'Arch reduce 2/3'); +is($dep_hurd->output(), 'libc0.1', 'Arch reduce 3/3'); + +my $field_profile = 'dep1 <!stage1 !nocheck>, ' . +'dep2 <stage1 !nocheck>, ' . +'dep3 <nocheck !stage1>, ' . +'dep4 <stage1 nocheck>, ' . +'dep5 <stage1>, dep6 <!stage1>, ' . +'dep7 <stage1> | dep8 <nocheck>, ' . +'dep9 <!stage1> <!nocheck>, ' . +'dep10 <stage1> <!nocheck>, ' . +'dep11 <stage1> <nocheck>, '. +'dep12 <!nocheck> <!stage1>, ' . +'dep13 <nocheck> <!stage1>, ' . +'dep14 <nocheck> <stage1>'; +my $dep_noprof = deps_parse($field_profile, reduce_profiles => 1, build_profiles => []); +my $dep_stage1 = deps_parse($field_profile, reduce_profiles => 1, build_profiles => ['stage1']); +my $dep_nocheck = deps_parse($field_profile, reduce_profiles => 1, build_profiles => ['nocheck']); +my $dep_stage1nocheck = deps_parse($field_profile, reduce_profiles => 1, build_profiles => ['stage1', 'nocheck']); +is($dep_noprof->output(), 'dep1, dep6, dep9, dep10, dep12, dep13', 'Profile reduce 1/4'); +is($dep_stage1->output(), 'dep2, dep5, dep7, dep9, dep10, dep11, dep12, dep14', 'Profile reduce 2/4'); +is($dep_nocheck->output(), 'dep3, dep6, dep8, dep9, dep11, dep12, dep13, dep14', 'Profile reduce 3/4'); +is($dep_stage1nocheck->output(), 'dep4, dep5, dep7 | dep8, dep10, dep11, dep13, dep14', 'Profile reduce 4/4'); + +$dep_noprof = deps_parse($field_profile); +$dep_noprof->reduce_profiles([]); +$dep_stage1 = deps_parse($field_profile); +$dep_stage1->reduce_profiles(['stage1']); +$dep_nocheck = deps_parse($field_profile); +$dep_nocheck->reduce_profiles(['nocheck']); +$dep_stage1nocheck = deps_parse($field_profile); +$dep_stage1nocheck->reduce_profiles(['stage1', 'nocheck']); +is($dep_noprof->output(), 'dep1, dep6, dep9, dep10, dep12, dep13', 'Profile post-reduce 1/4'); +is($dep_stage1->output(), 'dep2, dep5, dep7, dep9, dep10, dep11, dep12, dep14', 'Profile post-reduce 2/4'); +is($dep_nocheck->output(), 'dep3, dep6, dep8, dep9, dep11, dep12, dep13, dep14', 'Profile post-reduce 3/4'); +is($dep_stage1nocheck->output(), 'dep4, dep5, dep7 | dep8, dep10, dep11, dep13, dep14', 'Profile post-reduce 4/4'); + +my $field_restrict = 'dep1 <!bootstrap !restrict>, ' . +'dep2 <bootstrap restrict>, ' . +'dep3 <!restrict>, ' . +'dep4 <restrict>, ' . +'dep5 <!bootstrap> <!restrict>, ' . +'dep6 <bootstrap> <restrict>'; +my $dep_restrict = deps_parse($field_restrict, reduce_restrictions => 1, build_profiles => []); +is($dep_restrict->output(), 'dep1, dep3, dep5', 'Unknown restrictions reduce'); + +$dep_restrict = deps_parse($field_restrict); +$dep_restrict->reduce_profiles([]); +is($dep_restrict->output(), 'dep1, dep3, dep5', 'Unknown restrictions post-reduce'); + +my $facts = Dpkg::Deps::KnownFacts->new(); +$facts->add_installed_package('mypackage', '1.3.4-1', get_host_arch(), 'no'); +$facts->add_installed_package('mypackage2', '1.3.4-1', 'somearch', 'no'); +$facts->add_installed_package('pkg-ma-foreign', '1.3.4-1', 'somearch', 'foreign'); +$facts->add_installed_package('pkg-ma-foreign2', '1.3.4-1', get_host_arch(), 'foreign'); +$facts->add_installed_package('pkg-ma-allowed', '1.3.4-1', 'somearch', 'allowed'); +$facts->add_installed_package('pkg-ma-allowed2', '1.3.4-1', 'somearch', 'allowed'); +$facts->add_installed_package('pkg-ma-allowed3', '1.3.4-1', get_host_arch(), 'allowed'); +$facts->add_installed_package('pkg-indep-normal', '1.3.4-1', 'all', 'no'); +$facts->add_installed_package('pkg-indep-foreign', '1.3.4-1', 'all', 'foreign'); +$facts->add_provided_package('myvirtual', undef, undef, 'mypackage'); +$facts->add_provided_package('myvirtual2', REL_EQ, '1.0-1', 'mypackage'); +$facts->add_provided_package('myvirtual3', REL_GE, '2.0-1', 'mypackage'); + +my $field_duplicate = 'libc6 (>= 2.3), libc6 (>= 2.6-1), mypackage (>= +1.3), myvirtual | something, python (>= 2.5), mypackage2, pkg-ma-foreign, +pkg-ma-foreign2, pkg-ma-allowed:any, pkg-ma-allowed2, pkg-ma-allowed3'; +my $dep_dup = deps_parse($field_duplicate); +$dep_dup->simplify_deps($facts, $dep_opposite); +is($dep_dup->output(), 'libc6 (>= 2.6-1), mypackage2, pkg-ma-allowed2', + 'Simplify deps'); + +my $dep_ma_all_normal_implicit_native = deps_parse('pkg-indep-normal', build_dep => 1); +my $dep_ma_all_normal_explicit_native = deps_parse('pkg-indep-normal:native', build_dep => 1); +my $dep_ma_all_foreign_implicit_native = deps_parse('pkg-indep-foreign', build_dep => 1); +my $dep_ma_all_foreign_explicit_native = deps_parse('pkg-indep-foreign:native', build_dep => 1); +$dep_ma_all_normal_implicit_native->simplify_deps($facts); +is($dep_ma_all_normal_implicit_native->output(), '', + 'Simplify arch:all m-a:no w/ implicit :native (satisfied)'); +$dep_ma_all_normal_explicit_native->simplify_deps($facts); +is($dep_ma_all_normal_explicit_native->output(), '', + 'Simplify arch:all m-a:no w/ explicit :native (satisfied)'); +$dep_ma_all_foreign_implicit_native->simplify_deps($facts); +is($dep_ma_all_foreign_implicit_native->output(), '', + 'Simplify arch:all m-a:foreign w/ implicit :native (satisfied)'); +$dep_ma_all_foreign_explicit_native->simplify_deps($facts); +is($dep_ma_all_foreign_explicit_native->output(), 'pkg-indep-foreign:native', + 'Simplify arch:all m-a:foreign w/ explicit :native (unsatisfied)'); + +TODO: { + +local $TODO = 'not yet implemented'; + +my $dep_or_eq = deps_parse('pkg-a | pkg-b | pkg-a'); +$dep_or_eq->simplify_deps($facts); +is($dep_or_eq->output(), 'pkg-a | pkg-b', + 'Simplify duped ORed, equal names'); + +$dep_or_eq = deps_parse('pkg-a (= 10) | pkg-b | pkg-a (= 10)'); +$dep_or_eq->simplify_deps($facts); +is($dep_or_eq->output(), 'pkg-a (= 10) | pkg-b', + 'Simplify duped ORed, matching version'); + +my $dep_or_subset = deps_parse('pkg-a (>= 10) | pkg-b | pkg-a (= 10)'); +$dep_or_eq->simplify_deps($facts); +is($dep_or_eq->output(), 'pkg-a (= 10) | pkg-b', + 'Simplify duped ORed, subset version'); + +$dep_or_subset = deps_parse('pkg-a (>= 10) <profile> | pkg-b | pkg-a (= 10) <profile>'); +$dep_or_eq->simplify_deps($facts); +is($dep_or_eq->output(), 'pkg-a (= 10) <profile> | pkg-b', + 'Simplify duped ORed, subset version'); + +} # TODO + +my $field_virtual = 'myvirtual | other'; +my $dep_virtual = deps_parse($field_virtual); +$dep_virtual->simplify_deps($facts); +is($dep_virtual->output(), '', + 'Simplify unversioned depends with unversioned virtual (satisfied)'); + +$field_virtual = 'myvirtual (>= 1.0) | other'; +$dep_virtual = deps_parse($field_virtual); +$dep_virtual->simplify_deps($facts); +is($dep_virtual->output(), 'myvirtual (>= 1.0) | other', + 'Simplify versioned depends on unversioned virtual (unsatisfied)'); + +$field_virtual = 'myvirtual2 (>= 0.0) | other'; +$dep_virtual = deps_parse($field_virtual); +$dep_virtual->simplify_deps($facts); +is($dep_virtual->output(), '', + 'Simplify versioned depends on versioned virtual (satisfied)'); + +$field_virtual = 'myvirtual2 (>= 2.0) | other'; +$dep_virtual = deps_parse($field_virtual); +$dep_virtual->simplify_deps($facts); +is($dep_virtual->output(), 'myvirtual2 (>= 2.0) | other', + 'Simplify versioned depends on versioned virtual (unsatisfied)'); + +$field_virtual = 'myvirtual3 (= 2.0-1)'; +$dep_virtual = deps_parse($field_virtual); +$dep_virtual->simplify_deps($facts); +is($dep_virtual->output(), 'myvirtual3 (= 2.0-1)', + 'Simplify versioned depends on GT versioned virtual (unsatisfied/ignored)'); + +my $field_dup_union = 'libc6 (>> 2.3), libc6 (>= 2.6-1), fake (<< 2.0), +fake(>> 3.0), fake (= 2.5), python (<< 2.5), python (= 2.4)'; +my $dep_dup_union = deps_parse($field_dup_union, union => 1); +$dep_dup_union->simplify_deps($facts); +is($dep_dup_union->output(), 'libc6 (>> 2.3), fake (<< 2.0), fake (>> 3.0), fake (= 2.5), python (<< 2.5)', 'Simplify union deps'); + +$dep_dup_union = deps_parse('sipsak (<= 0.9.6-2.1), sipsak (<= 0.9.6-2.2)', union => 1); +$dep_dup_union->simplify_deps($facts); +is($dep_dup_union->output(), 'sipsak (<= 0.9.6-2.2)', 'Simplify union deps 2'); + +my $dep_red = deps_parse('abc | xyz, two, abc'); +$dep_red->simplify_deps($facts, $dep_opposite); +is($dep_red->output(), 'abc, two', 'Simplification respect order'); +is("$dep_red", $dep_red->output(), 'Stringification == output()'); + +my $dep_profiles = deps_parse('dupe <stage1 cross>, dupe <stage1 cross>'); +$dep_profiles->simplify_deps($facts); +is($dep_profiles->output(), 'dupe <stage1 cross>', + 'Simplification respects duplicated profiles'); + +TODO: { + +local $TODO = 'not yet implemented'; + +$dep_profiles = deps_parse('tool <!cross>, tool <stage1 cross>'); +$dep_profiles->simplify_deps($facts); +is($dep_profiles->output(), 'tool <!cross> <stage1 cross>', + 'Simplify restriction formulas'); + +} # TODO + +$dep_profiles = deps_parse('libfoo-dev:native <!stage1>, libfoo-dev <!stage1 cross>', build_dep => 1); +$dep_profiles->simplify_deps($facts); +is($dep_profiles->output(), + 'libfoo-dev:native <!stage1>, libfoo-dev <!stage1 cross>', + 'Simplification respects archqualifiers and profiles'); + +my $dep_archqual = deps_parse('pkg, pkg:any'); +$dep_archqual->simplify_deps($facts); +is($dep_archqual->output(), 'pkg, pkg:any', + 'Simplify respect arch-qualified ANDed dependencies 1/2'); + +$dep_archqual = deps_parse('pkg:amd64, pkg:any, pkg:i386'); +$dep_archqual->simplify_deps($facts); +is($dep_archqual->output(), 'pkg:amd64, pkg:any, pkg:i386', + 'Simplify respects arch-qualified ANDed dependencies 2/2'); + +$dep_archqual = deps_parse('pkg | pkg:any'); +$dep_archqual->simplify_deps($facts); +is($dep_archqual->output(), 'pkg | pkg:any', + 'Simplify respect arch-qualified ORed dependencies 1/2'); + +$dep_archqual = deps_parse('pkg:amd64 | pkg:i386 | pkg:any'); +$dep_archqual->simplify_deps($facts); +is($dep_archqual->output(), 'pkg:amd64 | pkg:i386 | pkg:any', + 'Simplify respect arch-qualified ORed dependencies 2/2'); + +my $dep_version = deps_parse('pkg, pkg (= 1.0)'); +$dep_version->simplify_deps($facts); +is($dep_version->output(), 'pkg (= 1.0)', 'Simplification merges versions'); + +my $dep_empty1 = deps_parse(''); +is($dep_empty1->output(), '', 'Empty dependency'); + +my $dep_empty2 = deps_parse(' , , ', union => 1); +is($dep_empty2->output(), '', "' , , ' is also an empty dependency"); + +# Check sloppy but acceptable dependencies + +my $dep_sloppy_version = deps_parse('package (= 1.0 )'); +is($dep_sloppy_version->output(), 'package (= 1.0)', 'sloppy version restriction'); + +my $dep_sloppy_arch = deps_parse('package [ alpha ]'); +is($dep_sloppy_arch->output(), 'package [alpha]', 'sloppy arch restriction'); + +my $dep_sloppy_profile = deps_parse('package < !profile > < other >'); +is($dep_sloppy_profile->output(), 'package <!profile> <other>', + 'sloppy profile restriction'); + +$SIG{__WARN__} = sub {}; + +my $dep_bad_version = deps_parse('package (= 1.0) (>= 2.0)'); +is($dep_bad_version, undef, 'Bogus repeated version restriction'); + +my $dep_bad_arch = deps_parse('package [alpha] [amd64]'); +is($dep_bad_arch, undef, 'Bogus repeated arch restriction'); + +my $dep_bad_multiline = deps_parse("a, foo\nbar, c"); +is($dep_bad_multiline, undef, 'invalid dependency split over multiple line'); + +delete $SIG{__WARN__}; + +my $dep_iter = deps_parse('a, b:armel, c | d:armhf, d:mips (>> 1.2)'); +my %dep_arches; +my %dep_pkgs; +deps_iterate($dep_iter, sub { + my $dep = shift; + + $dep_pkgs{$dep->{package}} = 1; + if ($dep->{archqual}) { + $dep_arches{$dep->{archqual}} = 1; + } + return 1; +}); +my @dep_arches = sort keys %dep_arches; +my @dep_pkgs = sort keys %dep_pkgs; +is("@dep_arches", 'armel armhf mips', 'Dependency iterator, get arches'); +is("@dep_pkgs", 'a b c d', 'Dependency iterator, get packages'); diff --git a/scripts/t/Dpkg_Dist_Files.t b/scripts/t/Dpkg_Dist_Files.t new file mode 100644 index 0000000..7e820b5 --- /dev/null +++ b/scripts/t/Dpkg_Dist_Files.t @@ -0,0 +1,214 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 26; +use Test::Dpkg qw(:paths); + +use_ok('Dpkg::Dist::Files'); + +my $datadir = test_get_data_path(); + +my $expected; +my %expected = ( + 'pkg-src_4:2.0+1A~rc1-1.dsc' => { + filename => 'pkg-src_4:2.0+1A~rc1-1.dsc', + section => 'source', + priority => 'extra', + attrs => {}, + }, + 'pkg-src_4:2.0+1A~rc1-1.tar.xz' => { + filename => 'pkg-src_4:2.0+1A~rc1-1.tar.xz', + section => 'source', + priority => 'extra', + attrs => {}, + }, + 'pkg-templ_1.2.3_arch.type' => { + filename => 'pkg-templ_1.2.3_arch.type', + package => 'pkg-templ', + package_type => 'type', + version => '1.2.3', + arch => 'arch', + section => 'section', + priority => 'priority', + attrs => {}, + }, + 'pkg-arch_2.0.0_amd64.deb' => { + filename => 'pkg-arch_2.0.0_amd64.deb', + package => 'pkg-arch', + package_type => 'deb', + version => '2.0.0', + arch => 'amd64', + section => 'admin', + priority => 'required', + attrs => {}, + }, + 'pkg-indep_0.0.1-2_all.deb' => { + filename => 'pkg-indep_0.0.1-2_all.deb', + package => 'pkg-indep', + package_type => 'deb', + version => '0.0.1-2', + arch => 'all', + section => 'net', + priority => 'standard', + attrs => {}, + }, + 'other_0.txt' => { + filename => 'other_0.txt', + section => 'text', + priority => 'optional', + attrs => { + 'mime-type' => 'text/plain', + }, + }, + 'BY-HAND-file' => { + filename => 'BY-HAND-file', + section => 'webdocs', + priority => 'optional', + attrs => { + 'by-hand' => 'true' + }, + }, + 'another:filename' => { + filename => 'another:filename', + section => 'by-hand', + priority => 'extra', + attrs => {}, + }, + 'added-on-the-fly' => { + filename => 'added-on-the-fly', + section => 'void', + priority => 'wish', + attrs => {}, + }, +); + +my $dist = Dpkg::Dist::Files->new(); +$dist->load("$datadir/files-byhand") or error('cannot parse file'); + +$expected = <<'FILES'; +BY-HAND-file webdocs optional by-hand=true +other_0.txt text optional mime-type=text/plain +pkg-arch_2.0.0_amd64.deb admin required +pkg-indep_0.0.1-2_all.deb net standard +pkg-templ_1.2.3_arch.type section priority +FILES + +is($dist->output(), $expected, 'Parsed dist file'); +foreach my $f ($dist->get_files()) { + my $filename = $f->{filename}; + + is_deeply($f, $expected{$filename}, + "Detail for individual dist file $filename, via get_files()"); + + my $fs = $dist->get_file($filename); + is_deeply($fs, $expected{$filename}, + "Detail for individual dist file $filename, via get_file()"); +} + +is($dist->parse_filename('file%invalid'), undef, 'invalid filename'); + +$expected = <<'FILES'; +BY-HAND-file webdocs optional by-hand=true +added-on-the-fly void wish +other_0.txt text optional mime-type=text/plain +pkg-arch_2.0.0_amd64.deb void imperative +pkg-templ_1.2.3_arch.type section priority +FILES + +$dist->add_file('added-on-the-fly', 'void', 'wish'); +is_deeply($dist->get_file('added-on-the-fly'), $expected{'added-on-the-fly'}, + 'Get added file added-on-the-fly'); + +$dist->add_file('pkg-arch_2.0.0_amd64.deb', 'void', 'imperative'); +my %expected_pkg_arch = %{$expected{'pkg-arch_2.0.0_amd64.deb'}}; +$expected_pkg_arch{section} = 'void'; +$expected_pkg_arch{priority} = 'imperative'; +is_deeply($dist->get_file('pkg-arch_2.0.0_amd64.deb'), \%expected_pkg_arch, + 'Get modified file pkg-arch_2.0.0_amd64.deb'); + +$dist->del_file('pkg-indep_0.0.1-2_all.deb'); +is($dist->get_file('unknown'), undef, 'Get unknown file'); +is($dist->get_file('pkg-indep_0.0.1-2_all.deb'), undef, 'Get deleted file'); +is($dist->output(), $expected, 'Modified dist object'); + +$expected = <<'FILES'; +another:filename by-hand extra +pkg-src_4:2.0+1A~rc1-1.dsc source extra +pkg-src_4:2.0+1A~rc1-1.tar.xz source extra +FILES + +$dist->reset(); +$dist->add_file('pkg-src_4:2.0+1A~rc1-1.dsc', 'source', 'extra'); +$dist->add_file('pkg-src_4:2.0+1A~rc1-1.tar.xz', 'source', 'extra'); +$dist->add_file('another:filename', 'by-hand', 'extra'); + +is_deeply($dist->get_file('pkg-src_4:2.0+1A~rc1-1.dsc'), + $expected{'pkg-src_4:2.0+1A~rc1-1.dsc'}, + 'Get added file pkg-src_4:2.0+1A~rc1-1.dsc'); +is_deeply($dist->get_file('pkg-src_4:2.0+1A~rc1-1.tar.xz'), + $expected{'pkg-src_4:2.0+1A~rc1-1.tar.xz'}, + 'Get added file pkg-src_4:2.0+1A~rc1-1.tar.xz'); +is_deeply($dist->get_file('another:filename'), + $expected{'another:filename'}, + 'Get added file another:filename'); +is($dist->output, $expected, 'Added source files'); + +$expected = <<'FILES'; +BY-HAND-file webdocs optional by-hand=true +other_0.txt text optional mime-type=text/plain +pkg-arch_2.0.0_amd64.deb admin required +pkg-frag-a_0.0_arch.type section priority +pkg-frag-b_0.0_arch.type section priority +pkg-indep_0.0.1-2_all.deb net standard +pkg-templ_1.2.3_arch.type section priority +FILES + +$dist->reset(); +$dist->load_dir($datadir) or error('cannot parse fragment files'); +is($dist->output(), $expected, 'Parse fragment directory'); + +$expected = <<'FILES'; +pkg-arch_2.0.0_amd64.deb admin required +pkg-indep_0.0.1-2_all.deb net standard +pkg-templ_1.2.3_arch.type section priority +FILES + +$dist->reset(); +$dist->load("$datadir/files-byhand") or error('cannot parse file'); +$dist->filter(remove => sub { $_[0]->{priority} eq 'optional' }); +is($dist->output(), $expected, 'Filter remove priority optional'); + +$expected = <<'FILES'; +BY-HAND-file webdocs optional by-hand=true +other_0.txt text optional mime-type=text/plain +FILES + +$dist->reset(); +$dist->load("$datadir/files-byhand") or error('cannot parse file'); +$dist->filter(keep => sub { $_[0]->{priority} eq 'optional' }); +is($dist->output(), $expected, 'Filter keep priority optional'); + +$expected = <<'FILES'; +BY-HAND-file webdocs optional by-hand=true +FILES + +$dist->reset(); +$dist->load("$datadir/files-byhand") or error('cannot parse file'); +$dist->filter(remove => sub { $_[0]->{section} eq 'text' }, + keep => sub { $_[0]->{priority} eq 'optional' }); +is($dist->output(), $expected, 'Filter remove section text, keep priority optional'); diff --git a/scripts/t/Dpkg_Dist_Files/files-byhand b/scripts/t/Dpkg_Dist_Files/files-byhand new file mode 100644 index 0000000..416b14f --- /dev/null +++ b/scripts/t/Dpkg_Dist_Files/files-byhand @@ -0,0 +1,5 @@ +pkg-templ_1.2.3_arch.type section priority +pkg-arch_2.0.0_amd64.deb admin required +pkg-indep_0.0.1-2_all.deb net standard +other_0.txt text optional mime-type=text/plain +BY-HAND-file webdocs optional by-hand=true diff --git a/scripts/t/Dpkg_Dist_Files/files-fragment-a b/scripts/t/Dpkg_Dist_Files/files-fragment-a new file mode 100644 index 0000000..fd6461d --- /dev/null +++ b/scripts/t/Dpkg_Dist_Files/files-fragment-a @@ -0,0 +1 @@ +pkg-frag-a_0.0_arch.type section priority diff --git a/scripts/t/Dpkg_Dist_Files/files-fragment-b b/scripts/t/Dpkg_Dist_Files/files-fragment-b new file mode 100644 index 0000000..2acf22f --- /dev/null +++ b/scripts/t/Dpkg_Dist_Files/files-fragment-b @@ -0,0 +1 @@ +pkg-frag-b_0.0_arch.type section priority diff --git a/scripts/t/Dpkg_ErrorHandling.t b/scripts/t/Dpkg_ErrorHandling.t new file mode 100644 index 0000000..3ef93a4 --- /dev/null +++ b/scripts/t/Dpkg_ErrorHandling.t @@ -0,0 +1,25 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 1; + +BEGIN { + use_ok('Dpkg::ErrorHandling'); +} + +# TODO: Add actual test cases. diff --git a/scripts/t/Dpkg_Exit.t b/scripts/t/Dpkg_Exit.t new file mode 100644 index 0000000..5e83689 --- /dev/null +++ b/scripts/t/Dpkg_Exit.t @@ -0,0 +1,66 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 7; + +BEGIN { + use_ok('Dpkg::Exit'); +} + +my $track = 0; + +sub test_handler { + $track++; +} + +Dpkg::Exit::run_exit_handlers(); + +is($track, 0, 'no handlers run'); + +Dpkg::Exit::push_exit_handler(\&test_handler); +Dpkg::Exit::pop_exit_handler(); + +Dpkg::Exit::run_exit_handlers(); + +is($track, 0, 'push/pop; no handlers run'); + +Dpkg::Exit::push_exit_handler(\&test_handler); + +Dpkg::Exit::run_exit_handlers(); + +is($track, 1, 'push; handler run'); + +# Check the exit handlers, must be the last thing done. +sub exit_handler { + pass('exit handler invoked'); + exit 0; +} + +sub ini_handler { + pass('ini handler invoked'); +} + +sub end_handler { + pass('end handler invoked'); +} + +Dpkg::Exit::push_exit_handler(\&end_handler); +Dpkg::Exit::push_exit_handler(\&exit_handler); +Dpkg::Exit::push_exit_handler(\&ini_handler); + +kill 'INT', $$; diff --git a/scripts/t/Dpkg_File.t b/scripts/t/Dpkg_File.t new file mode 100644 index 0000000..a1292af --- /dev/null +++ b/scripts/t/Dpkg_File.t @@ -0,0 +1,78 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 10; +use Test::Dpkg qw(:paths); + +use File::Compare; +use File::Path qw(rmtree); + +BEGIN { + use_ok('Dpkg::File'); +} + +my $datadir = test_get_data_path(); +my $tempdir = test_get_temp_path(); + +my ($data, $data_ref, $data_fh); + +$data = file_slurp("$datadir/slurp-me"); +$data_ref = <<'DATA'; +first line +next line +final line +DATA +is($data, $data_ref, 'slurped data'); + +file_dump("$tempdir/slurp-me", $data); +ok(compare("$tempdir/slurp-me", "$datadir/slurp-me") == 0, + 'dumped slurped data'); + +open $data_fh, '<', "$datadir/slurp-me" + or die "cannot open $datadir/slurp-me for reading: $!"; +my $discard = <$data_fh>; +$data = file_slurp($data_fh); +close $data_fh; +$data_ref = <<'DATA'; +next line +final line +DATA +is($data, $data_ref, 'slurped partial data'); + +file_dump("$tempdir/dump-partial", $data); +ok(compare("$tempdir/dump-partial", "$datadir/dump-partial") == 0, + 'dumped slurped partial data'); + +open $data_fh, '>', "$tempdir/append-me" + or die "cannot create $tempdir/append-me: $!"; +print { $data_fh } "append line\n"; +file_dump($data_fh, "new line\nend line\n"); +close $data_fh; +ok(compare("$tempdir/append-me", "$datadir/append-me") == 0, + 'dumped appended data'); + +$data = undef; +eval { + $data = file_slurp("$datadir/non-existent"); +}; +ok($@, 'cannot slurp missing file'); + +ok(! -e "$tempdir/touched", 'file to be touched does not exist'); +file_touch("$tempdir/touched"); +ok(-e "$tempdir/touched", 'touched file exists'); +ok(-z "$tempdir/touched", 'touched file is empty'); diff --git a/scripts/t/Dpkg_File/append-me b/scripts/t/Dpkg_File/append-me new file mode 100644 index 0000000..d332d64 --- /dev/null +++ b/scripts/t/Dpkg_File/append-me @@ -0,0 +1,3 @@ +append line +new line +end line diff --git a/scripts/t/Dpkg_File/dump-partial b/scripts/t/Dpkg_File/dump-partial new file mode 100644 index 0000000..4a00dc0 --- /dev/null +++ b/scripts/t/Dpkg_File/dump-partial @@ -0,0 +1,2 @@ +next line +final line diff --git a/scripts/t/Dpkg_File/slurp-me b/scripts/t/Dpkg_File/slurp-me new file mode 100644 index 0000000..8840ed4 --- /dev/null +++ b/scripts/t/Dpkg_File/slurp-me @@ -0,0 +1,3 @@ +first line +next line +final line diff --git a/scripts/t/Dpkg_Getopt.t b/scripts/t/Dpkg_Getopt.t new file mode 100644 index 0000000..50e0921 --- /dev/null +++ b/scripts/t/Dpkg_Getopt.t @@ -0,0 +1,38 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 4; + +BEGIN { + use_ok('Dpkg::Getopt'); +} + +my @expect_argv; + +@ARGV = normalize_options(args => [ qw(-a -bfoo -c var) ]); +@expect_argv = qw(-a -b foo -c var); +is_deeply(\@ARGV, \@expect_argv, 'unbundle short options'); + +@ARGV = normalize_options(args => [ qw(--option-a --option-b value --option-c=value) ]); +@expect_argv = qw(--option-a --option-b value --option-c value); +is_deeply(\@ARGV, \@expect_argv, 'unbundle long options'); + +@ARGV = normalize_options(args => [ qw(-aaa -bbb --option-a=oa -- --opt=arg -dval) ], + delim => '--'); +@expect_argv = qw(-a aa -b bb --option-a oa -- --opt=arg -dval); +is_deeply(\@ARGV, \@expect_argv, 'unbundle options with delimiter'); diff --git a/scripts/t/Dpkg_Gettext.t b/scripts/t/Dpkg_Gettext.t new file mode 100644 index 0000000..332d09f --- /dev/null +++ b/scripts/t/Dpkg_Gettext.t @@ -0,0 +1,25 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 1; + +BEGIN { + use_ok('Dpkg::Gettext'); +} + +# TODO: Add actual test cases. diff --git a/scripts/t/Dpkg_IPC.t b/scripts/t/Dpkg_IPC.t new file mode 100644 index 0000000..450d98d --- /dev/null +++ b/scripts/t/Dpkg_IPC.t @@ -0,0 +1,71 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 8; + +use File::Temp qw(tempfile); + +use Dpkg::File; + +use_ok('Dpkg::IPC'); + +my ($tmp1_fh, $tmp1_name) = tempfile(UNLINK => 1); +my ($tmp2_fh, $tmp2_name) = tempfile(UNLINK => 1); + +my $string1 = "foo\nbar\n"; +my $string2; + +file_dump($tmp1_name, $string1); + +my $pid = spawn(exec => 'cat', + from_string => \$string1, + to_string => \$string2); + +ok($pid, 'execute cat program, I/O to variables'); + +is($string2, $string1, '{from,to}_string'); + +$pid = spawn(exec => 'cat', + from_handle => $tmp1_fh, + to_handle => $tmp2_fh); + +ok($pid, 'execute cat program, I/O to filehandles'); + +wait_child($pid); + +$string2 = file_slurp($tmp2_name); + +is($string2, $string1, '{from,to}_handle'); + +$pid = spawn(exec => 'cat', + from_file => $tmp1_name, + to_file => $tmp2_name, + wait_child => 1); + +ok($pid, 'execute cat program, I/O to filenames and wait'); + +$string2 = file_slurp($tmp2_name); + +is($string2, $string1, '{from,to}_file'); + +eval { + $pid = spawn(exec => ['sleep', '10'], + wait_child => 1, + timeout => 1); +}; +ok($@, 'fails on timeout'); diff --git a/scripts/t/Dpkg_Index.t b/scripts/t/Dpkg_Index.t new file mode 100644 index 0000000..b17c74b --- /dev/null +++ b/scripts/t/Dpkg_Index.t @@ -0,0 +1,25 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 1; + +BEGIN { + use_ok('Dpkg::Index'); +} + +# TODO: Add actual test cases. diff --git a/scripts/t/Dpkg_Interface_Storable.t b/scripts/t/Dpkg_Interface_Storable.t new file mode 100644 index 0000000..963e140 --- /dev/null +++ b/scripts/t/Dpkg_Interface_Storable.t @@ -0,0 +1,25 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 1; + +BEGIN { + use_ok('Dpkg::Interface::Storable'); +} + +# TODO: Add actual test cases. diff --git a/scripts/t/Dpkg_Lock.t b/scripts/t/Dpkg_Lock.t new file mode 100644 index 0000000..b30e2c1 --- /dev/null +++ b/scripts/t/Dpkg_Lock.t @@ -0,0 +1,25 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 1; + +BEGIN { + use_ok('Dpkg::Lock'); +} + +# TODO: Add actual test cases. diff --git a/scripts/t/Dpkg_OpenPGP.t b/scripts/t/Dpkg_OpenPGP.t new file mode 100644 index 0000000..c3cd724 --- /dev/null +++ b/scripts/t/Dpkg_OpenPGP.t @@ -0,0 +1,114 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More; +use Test::Dpkg qw(:paths :needs); + +use File::Compare; + +use Dpkg::ErrorHandling; +use Dpkg::Path qw(find_command); +use Dpkg::OpenPGP::KeyHandle; + +my %backend_cmd = ( + auto => 'auto', + gpg => 'gpg', + sq => 'sq', + sqop => 'sop', + 'pgpainless-cli' => 'sop', +); +my @cmds = test_needs_openpgp_backend(); +unshift @cmds, 'auto'; + +plan tests => 2 + 15 * scalar @cmds; + +use_ok('Dpkg::OpenPGP'); +use_ok('Dpkg::OpenPGP::ErrorCodes'); + +report_options(quiet_warnings => 1); + +sub test_diff +{ + my ($exp_file, $gen_file, $desc) = @_; + + my $res = compare($exp_file, $gen_file); + if ($res) { + system "diff -u '$exp_file' '$gen_file' >&2"; + } + ok($res == 0, "$desc ($exp_file vs $gen_file)"); +} + +foreach my $cmd (@cmds) { + my $datadir = test_get_data_path(); + my $tempdir = test_get_temp_path(); + + my $backend = $backend_cmd{$cmd}; + my $openpgp = Dpkg::OpenPGP->new( + backend => $backend, + cmd => $cmd, + ); + + ok($openpgp->dearmor('PUBLIC KEY BLOCK', "$datadir/dpkg-test-pub.asc", "$tempdir/dpkg-test-pub.pgp") == OPENPGP_OK(), + "($backend:$cmd) dearmoring OpenPGP ASCII Armored certificate"); + ok($openpgp->armor('PUBLIC KEY BLOCK', "$tempdir/dpkg-test-pub.pgp", "$tempdir/dpkg-test-pub.asc") == OPENPGP_OK(), + "($backend:$cmd) armoring OpenPGP binary certificate"); + test_diff("$datadir/dpkg-test-pub.asc", "$tempdir/dpkg-test-pub.asc", + "($backend:$cmd) OpenPGP certificate dearmor/armor round-trip correctly"); + + ok($openpgp->armor('SIGNATURE', "$datadir/sign-file.sig", "$tempdir/sign-file.asc") == OPENPGP_OK(), + "($backend:$cmd) armoring OpenPGP binary signature succeeded"); + ok(compare("$datadir/sign-file.sig", "$tempdir/sign-file.asc") != 0, + "($backend:$cmd) armoring OpenPGP ASCII Armor changed the file"); + ok($openpgp->armor('SIGNATURE', "$datadir/sign-file.asc", "$tempdir/sign-file-rearmor.asc") == OPENPGP_OK(), + "($backend:$cmd) armoring OpenPGP armored signature succeeded"); + test_diff("$datadir/sign-file.asc", "$tempdir/sign-file-rearmor.asc", + "($backend:$cmd) rearmoring OpenPGP ASCII Armor changed the file"); + + ok($openpgp->dearmor('SIGNATURE', "$tempdir/sign-file.asc", "$tempdir/sign-file.sig") == OPENPGP_OK(), + "($backend:$cmd) dearmoring OpenPGP armored signature succeeded"); + test_diff("$datadir/sign-file.sig", "$tempdir/sign-file.sig", + "($backend:$cmd) dearmored OpenPGP ASCII Armor signature matches"); + + my $cert = "$datadir/dpkg-test-pub.asc"; + + ok($openpgp->inline_verify("$datadir/sign-file-inline.asc", undef, $cert) == OPENPGP_OK(), + "($backend:$cmd) verify OpenPGP ASCII Armor inline signature"); + ok($openpgp->inline_verify("$datadir/sign-file-inline.sig", undef, $cert) == OPENPGP_OK(), + "($backend:$cmd) verify OpenPGP binary inline signature"); + + ok($openpgp->verify("$datadir/sign-file", "$datadir/sign-file.asc", $cert) == OPENPGP_OK(), + "($backend:$cmd) verify OpenPGP ASCII Armor detached signature"); + ok($openpgp->verify("$datadir/sign-file", "$datadir/sign-file.sig", $cert) == OPENPGP_OK(), + "($backend:$cmd) verify OpenPGP binary detached signature"); + + my $key = Dpkg::OpenPGP::KeyHandle->new( + type => 'keyfile', + handle => "$datadir/dpkg-test-sec.asc", + ); + + SKIP: { + skip 'cannot use secrets', 2 unless $openpgp->can_use_secrets($key); + + ok($openpgp->inline_sign("$datadir/sign-file", "$tempdir/sign-file-inline.asc", $key) == OPENPGP_OK(), + "($backend:$cmd) inline OpenPGP sign"); + ok($openpgp->inline_verify("$tempdir/sign-file-inline.asc", undef, $cert) == OPENPGP_OK(), + "($backend:$cmd) verify generated inline OpenPGP signature"); + }; + + # TODO: Add more test cases. +} diff --git a/scripts/t/Dpkg_OpenPGP/dpkg-test-pub.asc b/scripts/t/Dpkg_OpenPGP/dpkg-test-pub.asc new file mode 100644 index 0000000..f9b9f2b --- /dev/null +++ b/scripts/t/Dpkg_OpenPGP/dpkg-test-pub.asc @@ -0,0 +1,24 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +xjMEYtiJpRYJKwYBBAHaRw8BAQdAPc9bt2qxxLSlbrcdtR70gPFeqCusNUh/LjQV +9es9JPbCwAsEHxYKAH0FgmLYiaUDCwkHCRDQUbmhp4t5cEcUAAAAAAAeACBzYWx0 +QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfarUJqlr3ies5QhbUfk4/CGJ8yjA5A +xU2FniSvr1MEWAMVCggCmwECHgEWIQQ0iPyXWWjO+6ezdVTQUbmhp4t5cAAAeKwB +ALhQhFu11tuBqJkeqbsB+zDw3TqINXDdOnZsz4zQTP8cAQCXB24twCDSwgL5ApXD +LDKxacm+yTJG1xAr5fey/WM6Dc0lRHBrZyBUZXN0IEtleSA8ZHBrZy10ZXN0QGV4 +YW1wbGUub3JnPsLADgQTFgoAgAWCYtiJpQMLCQcJENBRuaGni3lwRxQAAAAAAB4A +IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5lEbcjt2RQSjys6N6+y4VDN +OVw0W5VOTjJKEWDQHZDmAxUKCAKZAQKbAQIeARYhBDSI/JdZaM77p7N1VNBRuaGn +i3lwAAA/3wD6A46mcuHcy26BOyz8co2cl53+tQeZ1F2qhg2kcofLA3UBAL7BWWPc +Zojs6SbiB8Dc7BrYkJ4jk13jYpYXwa7CnEwPzjMEYtiJpRYJKwYBBAHaRw8BAQdA +EC8I7eVdWPckXSEJdxYtGSUTOfSUFtP31dZZSiHawivCwL8EGBYKATEFgmLYiaUJ +ENBRuaGni3lwRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y +Z3wtg1MDVcKCPrpDO5sjWVCjoFjYX3/+1+KopBiO8UPtApsCvqAEGRYKAG8FgmLY +iaUJEF8IeVKOdEodRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw +Lm9yZ5tsuhbNSkLk/OacoV9yfg+ediDvQ51kf9N6Ue1y0k+nFiEEld5RAbTaqSHO +dkqUXwh5Uo50Sh0AAGMlAP4jFUATpYnAjF8rnh/3Oh7ZNXzRXmju8voJnkPh9C+P +GAD/aGKxGy1wpAQT+qJnNMIXIVq//E6Nw+Bg+iC9+Sy+KwoWIQQ0iPyXWWjO+6ez +dVTQUbmhp4t5cAAAyQwA/RFPJCO1yGV0ifxxfruj9qxr9ND3zo1YbIDJUdJS+QyX +AQC/SgSs3xBCVcXjIq2ot1YUhSaZ9VdonekgYr5VdmDMBw== +=dG1m +-----END PGP PUBLIC KEY BLOCK----- diff --git a/scripts/t/Dpkg_OpenPGP/dpkg-test-sec.asc b/scripts/t/Dpkg_OpenPGP/dpkg-test-sec.asc new file mode 100644 index 0000000..75fc7b3 --- /dev/null +++ b/scripts/t/Dpkg_OpenPGP/dpkg-test-sec.asc @@ -0,0 +1,28 @@ +-----BEGIN PGP PRIVATE KEY BLOCK----- +Comment: 3488 FC97 5968 CEFB A7B3 7554 D051 B9A1 A78B 7970 +Comment: Dpkg Test Key <dpkg-test@example.org> + +xVgEYtiJpRYJKwYBBAHaRw8BAQdAPc9bt2qxxLSlbrcdtR70gPFeqCusNUh/LjQV +9es9JPYAAQCuHs3w2a7cIhaFk82fIsXfpIGMJUHh2tJj/6TzUTIYehIhwsALBB8W +CgB9BYJi2ImlAwsJBwkQ0FG5oaeLeXBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu +c2VxdW9pYS1wZ3Aub3Jn2q1Capa94nrOUIW1H5OPwhifMowOQMVNhZ4kr69TBFgD +FQoIApsBAh4BFiEENIj8l1lozvuns3VU0FG5oaeLeXAAAHisAQC4UIRbtdbbgaiZ +Hqm7Afsw8N06iDVw3Tp2bM+M0Ez/HAEAlwduLcAg0sIC+QKVwywysWnJvskyRtcQ +K+X3sv1jOg3NJURwa2cgVGVzdCBLZXkgPGRwa2ctdGVzdEBleGFtcGxlLm9yZz7C +wA4EExYKAIAFgmLYiaUDCwkHCRDQUbmhp4t5cEcUAAAAAAAeACBzYWx0QG5vdGF0 +aW9ucy5zZXF1b2lhLXBncC5vcmeZRG3I7dkUEo8rOjevsuFQzTlcNFuVTk4yShFg +0B2Q5gMVCggCmQECmwECHgEWIQQ0iPyXWWjO+6ezdVTQUbmhp4t5cAAAP98A+gOO +pnLh3MtugTss/HKNnJed/rUHmdRdqoYNpHKHywN1AQC+wVlj3GaI7Okm4gfA3Owa +2JCeI5Nd42KWF8GuwpxMD8dYBGLYiaUWCSsGAQQB2kcPAQEHQBAvCO3lXVj3JF0h +CXcWLRklEzn0lBbT99XWWUoh2sIrAAD+KhjwmbT+2rv06tPgJnBEP4x7CEMJdTlk +t7Z/M0dlVhQQXMLAvwQYFgoBMQWCYtiJpQkQ0FG5oaeLeXBHFAAAAAAAHgAgc2Fs +dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnfC2DUwNVwoI+ukM7myNZUKOgWNhf +f/7X4qikGI7xQ+0CmwK+oAQZFgoAbwWCYtiJpQkQXwh5Uo50Sh1HFAAAAAAAHgAg +c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnm2y6Fs1KQuT85pyhX3J+D552 +IO9DnWR/03pR7XLST6cWIQSV3lEBtNqpIc52SpRfCHlSjnRKHQAAYyUA/iMVQBOl +icCMXyueH/c6Htk1fNFeaO7y+gmeQ+H0L48YAP9oYrEbLXCkBBP6omc0whchWr/8 +To3D4GD6IL35LL4rChYhBDSI/JdZaM77p7N1VNBRuaGni3lwAADJDAD9EU8kI7XI +ZXSJ/HF+u6P2rGv00PfOjVhsgMlR0lL5DJcBAL9KBKzfEEJVxeMirai3VhSFJpn1 +V2id6SBivlV2YMwH +=D6tH +-----END PGP PRIVATE KEY BLOCK----- diff --git a/scripts/t/Dpkg_OpenPGP/sign-file b/scripts/t/Dpkg_OpenPGP/sign-file new file mode 100644 index 0000000..7fb0a1c --- /dev/null +++ b/scripts/t/Dpkg_OpenPGP/sign-file @@ -0,0 +1,5 @@ +This is a data file that will be signed +as part of the dpkg OpenPGP test suite. + +It contains «UTF-8» characters so that +we can check binary and ASCII signatures ☺. diff --git a/scripts/t/Dpkg_OpenPGP/sign-file-inline.asc b/scripts/t/Dpkg_OpenPGP/sign-file-inline.asc new file mode 100644 index 0000000..38059f8 --- /dev/null +++ b/scripts/t/Dpkg_OpenPGP/sign-file-inline.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA512 + +This is a data file that will be signed +as part of the dpkg OpenPGP test suite. + +It contains «UTF-8» characters so that +we can check binary and ASCII signatures ☺. +-----BEGIN PGP SIGNATURE----- + +wr0EARYKAG8FgmNn/JoJEF8IeVKOdEodRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z +LnNlcXVvaWEtcGdwLm9yZ6ner4BBATzhFswk2JmdwxDwRwEY7Ez64dxHFNuT0rIn +FiEEld5RAbTaqSHOdkqUXwh5Uo50Sh0AAH26AQCojIenPOWX7+GUk+lKeo+7hnpx +nozY9z/+4Pe1KamB4AEAsL9fpRgmecLcVhHBteK8t8/laLkzdY4nji+1BmeRrgQ= +=4UM2 +-----END PGP SIGNATURE----- diff --git a/scripts/t/Dpkg_OpenPGP/sign-file-inline.sig b/scripts/t/Dpkg_OpenPGP/sign-file-inline.sig Binary files differnew file mode 100644 index 0000000..cb07a8e --- /dev/null +++ b/scripts/t/Dpkg_OpenPGP/sign-file-inline.sig diff --git a/scripts/t/Dpkg_OpenPGP/sign-file.asc b/scripts/t/Dpkg_OpenPGP/sign-file.asc new file mode 100644 index 0000000..5b96d6f --- /dev/null +++ b/scripts/t/Dpkg_OpenPGP/sign-file.asc @@ -0,0 +1,8 @@ +-----BEGIN PGP SIGNATURE----- + +wr0EABYKAG8FgmNn+7oJEF8IeVKOdEodRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z +LnNlcXVvaWEtcGdwLm9yZ6I+NlLnxa3+q9VIr0tkR75ehn2pOJ0a5T7TbEKamHeH +FiEEld5RAbTaqSHOdkqUXwh5Uo50Sh0AADADAP0edQHN/mcxubIU8Z8RTbdBe0uu +AyzTI/4rIjImBPRoxgEAoWB+JczVmgeVRdkm8BW77PqFailPUf0mnokZZszz+Qc= +=qfwq +-----END PGP SIGNATURE----- diff --git a/scripts/t/Dpkg_OpenPGP/sign-file.sig b/scripts/t/Dpkg_OpenPGP/sign-file.sig Binary files differnew file mode 100644 index 0000000..125424c --- /dev/null +++ b/scripts/t/Dpkg_OpenPGP/sign-file.sig diff --git a/scripts/t/Dpkg_OpenPGP_KeyHandle.t b/scripts/t/Dpkg_OpenPGP_KeyHandle.t new file mode 100644 index 0000000..23a8c9b --- /dev/null +++ b/scripts/t/Dpkg_OpenPGP_KeyHandle.t @@ -0,0 +1,90 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 21; + +BEGIN { + use_ok('Dpkg::OpenPGP::KeyHandle'); +} + +my @ref_keys = ( + { + type => 'auto', + handle => '0x12345678', + exp_type => 'keyid', + exp_handle => '12345678', + }, { + type => 'auto', + handle => '0x1234567890abcdef', + exp_type => 'keyid', + exp_handle => '1234567890abcdef', + }, { + type => 'auto', + handle => '0x1234567890abcdef1234567890abcdef', + exp_type => 'keyid', + exp_handle => '1234567890abcdef1234567890abcdef', + }, { + type => 'auto', + handle => 'Alice Auster', + exp_type => 'userid', + exp_handle => 'Alice Auster', + }, { + type => 'auto', + handle => 'Alice Auster <alice@example.org>', + exp_type => 'userid', + exp_handle => 'Alice Auster <alice@example.org>', + }, { + type => 'keyid', + handle => '0x12345678', + exp_type => 'keyid', + exp_handle => '12345678', + }, { + type => 'keyid', + handle => '0x1234567890abcdef', + exp_type => 'keyid', + exp_handle => '1234567890abcdef', + }, { + type => 'keyid', + handle => '0x1234567890abcdef1234567890abcdef', + exp_type => 'keyid', + exp_handle => '1234567890abcdef1234567890abcdef', + }, { + type => 'userid', + handle => 'Alice Auster', + exp_type => 'userid', + exp_handle => 'Alice Auster', + }, { + type => 'userid', + handle => 'Alice Auster <alice@example.org>', + exp_type => 'userid', + exp_handle => 'Alice Auster <alice@example.org>', + } +); + +foreach my $ref_key (@ref_keys) { + my $key = Dpkg::OpenPGP::KeyHandle->new( + type => $ref_key->{type}, + handle => $ref_key->{handle}, + ); + is($key->type, $ref_key->{exp_type}, + 'key type ' . $key->type . " sanitized as $ref_key->{exp_type}"); + is($key->handle, $ref_key->{exp_handle}, + 'key handle ' . $key->handle . " sanitized as $ref_key->{exp_handle}"); +} + +# TODO: Add actual test cases. diff --git a/scripts/t/Dpkg_Package.t b/scripts/t/Dpkg_Package.t new file mode 100644 index 0000000..cc2979f --- /dev/null +++ b/scripts/t/Dpkg_Package.t @@ -0,0 +1,42 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 12; + +use_ok('Dpkg::Package'); + +ok(pkg_name_is_illegal(undef), 'package name is undef'); +ok(pkg_name_is_illegal(''), 'package name is empty'); +ok(pkg_name_is_illegal('%_&'), 'package name has invalid chars'); +ok(pkg_name_is_illegal('ABC'), 'package name has uppercase chars'); +ok(pkg_name_is_illegal('-abc'), 'package name has a dash'); + +is(pkg_name_is_illegal('pkg+name-1.0'), undef, 'package name is valid'); + +eval { set_source_name('foo%bar') }; +ok($@, 'cannot set invalid source package name'); +is(get_source_name(), undef, 'invalid source package name unset'); + +set_source_name('source'); +is(get_source_name(), 'source', 'set/get source package name'); + +set_source_name('source'); +is(get_source_name(), 'source', 'reset/get same source package name'); + +eval { set_source_name('other') }; +ok($@, 'cannot set different source package name'); diff --git a/scripts/t/Dpkg_Path.t b/scripts/t/Dpkg_Path.t new file mode 100644 index 0000000..0b0d6bd --- /dev/null +++ b/scripts/t/Dpkg_Path.t @@ -0,0 +1,237 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 34; +use Test::Dpkg qw(:paths); + +use Cwd qw(realpath); +use File::Path qw(make_path rmtree); +use File::Spec::Functions qw(abs2rel); + +use Dpkg::File; + +use_ok('Dpkg::Path', 'canonpath', 'resolve_symlink', + 'check_files_are_the_same', + 'check_directory_traversal', + 'get_pkg_root_dir', + 'guess_pkg_root_dir', 'relative_to_pkg_root'); + +my $tmpdir = test_get_temp_path(); + +make_path("$tmpdir/a/b/c"); +make_path("$tmpdir/a/DEBIAN"); +make_path("$tmpdir/debian/a/b/c"); +symlink 'a/b/c', "$tmpdir/cbis"; +symlink '/this/does/not/exist', "$tmpdir/tmp"; +symlink '.', "$tmpdir/here"; + +is(canonpath("$tmpdir/./a///b/c"), "$tmpdir/a/b/c", 'canonpath basic test'); +is(canonpath("$tmpdir/a/b/../../a/b/c"), "$tmpdir/a/b/c", 'canonpath and ..'); +is(canonpath("$tmpdir/a/b/c/../../"), "$tmpdir/a", 'canonpath .. at end'); +is(canonpath("$tmpdir/cbis/../"), "$tmpdir/cbis/..", 'canonpath .. after symlink'); + +is(resolve_symlink("$tmpdir/here/cbis"), "$tmpdir/here/a/b/c", 'resolve_symlink'); +is(resolve_symlink("$tmpdir/tmp"), '/this/does/not/exist', 'resolve_symlink absolute'); +is(resolve_symlink("$tmpdir/here"), $tmpdir, 'resolve_symlink .'); + +ok(!check_files_are_the_same("$tmpdir/here", $tmpdir), 'Symlink is not the same!'); +ok(check_files_are_the_same("$tmpdir/here/a", "$tmpdir/a"), 'Same directory'); + +sub gen_hier_travbase { + my $basedir = shift; + + make_path("$basedir/subdir"); + file_touch("$basedir/file"); + file_touch("$basedir/subdir/subfile"); + symlink 'file', "$basedir/symlink-file"; + symlink 'subdir/subfile', "$basedir/symlink-subfile"; +} + +my $travbase = "$tmpdir/travbase"; +my $travbase_out = "$tmpdir/travbase-out"; +my %travtype = ( + none => { + fail => 0, + gen => sub { }, + }, + same => { + fail => 0, + chroot => "$tmpdir/travbase-same", + gen => sub { + my $basedir = shift; + symlink '../..', "$basedir/subdir/root"; + }, + }, + dev_null => { + fail => 0, + gen => sub { + my $basedir = shift; + symlink '/dev/null', "$basedir/dev-null"; + }, + }, + dots => { + fail => 0, + gen => sub { + my $basedir = shift; + symlink 'aa..bb..cc', "$basedir/dots"; + }, + }, + rel => { + fail => 1, + gen => sub { + my $basedir = shift; + symlink '../../..', "$basedir/rel"; + }, + }, + abs => { + fail => 1, + gen => sub { + my $basedir = shift; + symlink '/etc', "$basedir/abs"; + }, + }, + loop => { + fail => 1, + gen => sub { + my $basedir = shift; + symlink 'self', "$basedir/self"; + }, + }, + enoent_rel => { + fail => 0, + gen => sub { + my $basedir = shift; + symlink 'not-existent', "$basedir/enoent-rel"; + }, + }, + enoent_abs => { + fail => 1, + gen => sub { + my $basedir = shift; + symlink '/not-existent', "$basedir/enoent-abs"; + }, + }, + enoent_indirect_rel => { + fail => 0, + gen => sub { + my $basedir = shift; + symlink 'not-existent', "$basedir/enoent-rel"; + symlink 'enoent-rel', "$basedir/enoent-indirect-rel"; + }, + }, + enoent_indirect_abs => { + fail => 1, + gen => sub { + my $basedir = shift; + symlink '/not-existent', "$basedir/enoent-abs"; + symlink realpath("$basedir/enoent-abs"), "$basedir/enoent-indirect-abs"; + }, + }, + base_in_none => { + fail => 0, + gen => sub { + my $basedir = shift; + rename $basedir, "$basedir-real"; + symlink 'base_in_none-real', $basedir; + }, + }, + base_in_rel => { + fail => 1, + gen => sub { + my $basedir = shift; + rename $basedir, "$basedir-real"; + symlink 'base_in_rel-real', $basedir; + symlink '../../..', "$basedir/rel"; + }, + }, + base_in_abs => { + fail => 1, + gen => sub { + my $basedir = shift; + rename $basedir, "$basedir-real"; + symlink 'base_in_abs-real', $basedir; + symlink '/etc', "$basedir/abs"; + }, + }, + base_out_empty => { + fail => 1, + root => $travbase_out, + gen => sub { + my $basedir = shift; + rmtree($basedir); + make_path($basedir); + }, + }, + base_out_none => { + fail => 1, + root => $travbase_out, + gen => sub { }, + }, + base_out_rel => { + fail => 1, + root => $travbase_out, + gen => sub { + my $basedir = shift; + symlink '../../..', "$basedir/rel"; + }, + }, + base_out_abs => { + fail => 1, + root => $travbase_out, + gen => sub { + my $basedir = shift; + symlink '/etc', "$basedir/abs"; + }, + }, +); + +foreach my $travtype (sort keys %travtype) { + my $trav = $travtype{$travtype}; + my $rootdir = $trav->{chroot} // $trav->{root} // $travbase; + my $hierdir = "$rootdir/$travtype"; + my $travdir = "$travbase/$travtype"; + + gen_hier_travbase($hierdir); + symlink abs2rel($hierdir, $travbase), $travdir if exists $trav->{root}; + $trav->{gen}->($hierdir); + + my $catch; + eval { + check_directory_traversal($travbase, $travdir); + 1; + } or do { + $catch = $@; + }; + if ($trav->{fail}) { + ok($catch, "directory traversal type $travtype detected"); + note("traversal reason: $catch") if $catch; + } else { + ok(! $catch, "no directory traversal type $travtype"); + diag("error from check_directory_traversal => $catch") if $catch; + } +} + +is(get_pkg_root_dir("$tmpdir/a/b/c"), "$tmpdir/a", 'get_pkg_root_dir'); +is(guess_pkg_root_dir("$tmpdir/a/b/c"), "$tmpdir/a", 'guess_pkg_root_dir'); +is(relative_to_pkg_root("$tmpdir/a/b/c"), 'b/c', 'relative_to_pkg_root'); + +chdir($tmpdir); + +is(get_pkg_root_dir('debian/a/b/c'), undef, 'get_pkg_root_dir undef'); +is(relative_to_pkg_root('debian/a/b/c'), undef, 'relative_to_pkg_root undef'); +is(guess_pkg_root_dir('debian/a/b/c'), 'debian/a', 'guess_pkg_root_dir fallback'); diff --git a/scripts/t/Dpkg_Shlibs.t b/scripts/t/Dpkg_Shlibs.t new file mode 100644 index 0000000..7cc325c --- /dev/null +++ b/scripts/t/Dpkg_Shlibs.t @@ -0,0 +1,786 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More; +use Test::Dpkg qw(:needs :paths); + +use Cwd; +use IPC::Cmd qw(can_run); + +plan tests => 150; + +$ENV{DEB_BUILD_ARCH} = 'amd64'; +$ENV{DEB_HOST_ARCH} = 'amd64'; + +use_ok('Dpkg::Shlibs'); + +my $tmp; +my @tmp; +my %tmp; + +my $datadir = test_get_data_path(); + +my @librarypaths; + +{ + # XXX: Keep as long as we support the deprecated LD_LIBRARY_PATH. + local $ENV{LD_LIBRARY_PATH} = '/test-env'; + + Dpkg::Shlibs::add_library_dir('/test-a'); + @librarypaths = Dpkg::Shlibs::get_library_paths(); + is($librarypaths[0], '/test-a', 'add_library_dir() does not get lost'); + + Dpkg::Shlibs::add_library_dir('/test-b'); + @librarypaths = Dpkg::Shlibs::get_library_paths(); + is_deeply([ @librarypaths[0, 1] ] , [ '/test-a', '/test-b' ], + 'add_library_dir() prepends'); +} + +Dpkg::Shlibs::blank_library_paths(); + +# We want relative paths inside the ld.so.conf fragments to work, and $srcdir +# is usually a relative path, so let's temporarily switch directory. +# XXX: An alternative would be to make parse_ldso_conf relative path aware. +my $cwd = getcwd(); +test_needs_srcdir_switch(); +Dpkg::Shlibs::parse_ldso_conf('t/Dpkg_Shlibs/ld.so.conf'); +chdir($cwd); + +@librarypaths = Dpkg::Shlibs::get_library_paths(); +is_deeply(\@librarypaths, + [ qw(/nonexistent32 /nonexistent/lib64 + /usr/local/lib /nonexistent/lib128) ], 'parsed library paths'); + +use_ok('Dpkg::Shlibs::Objdump'); + +my $obj = Dpkg::Shlibs::Objdump::Object->new; + +open my $objdump, '<', "$datadir/objdump.dbd-pg" + or die "$datadir/objdump.dbd-pg: $!"; +$obj->parse_objdump_output($objdump); +close $objdump; +ok(!$obj->is_public_library(), 'Pg.so is not a public library'); +ok(!$obj->is_executable(), 'Pg.so is not an executable'); + +open $objdump, '<', "$datadir/objdump.ls" + or die "$datadir/objdump.ls: $!"; +$obj->reset(); +$obj->parse_objdump_output($objdump); +close $objdump; +ok(!$obj->is_public_library(), 'ls is not a public library'); +ok($obj->is_executable(), 'ls is an executable'); + +my $sym = $obj->get_symbol('optarg@GLIBC_2.0'); +ok($sym, 'optarg@GLIBC_2.0 exists'); +ok(!$sym->{defined}, 'R_*_COPY relocations are taken into account'); + +open $objdump, '<', "$datadir/objdump.space" + or die "$datadir/objdump.space: $!"; +$obj->reset(); +$obj->parse_objdump_output($objdump); +close $objdump; + +# Non-regression test for #506139 +$sym = $obj->get_symbol('singlespace'); +ok($sym, 'version less symbol separated by a single space are correctly parsed'); + +open $objdump, '<', "$datadir/objdump.libc6-2.6" + or die "$datadir/objdump.libc6-2.6: $!"; +$obj->reset(); +$obj->parse_objdump_output($objdump); +close $objdump; + +ok($obj->is_public_library(), 'libc6 is a public library'); +ok($obj->is_executable(), 'libc6 is an executable'); + +is($obj->{SONAME}, 'libc.so.6', 'SONAME'); +is($obj->{HASH}, '0x13d99c', 'HASH'); +is($obj->{GNU_HASH}, '0x194', 'GNU_HASH'); +is($obj->{format}, 'elf32-i386', 'format'); +is_deeply($obj->{flags}, { DYNAMIC => 1, HAS_SYMS => 1, D_PAGED => 1 }, 'flags'); +is_deeply($obj->{NEEDED}, [ 'ld-linux.so.2' ], 'NEEDED'); +is_deeply([ $obj->get_needed_libraries ], [ 'ld-linux.so.2' ], 'NEEDED'); + +$sym = $obj->get_symbol('_sys_nerr@GLIBC_2.3'); +is_deeply( $sym, { name => '_sys_nerr', version => 'GLIBC_2.3', + soname => 'libc.so.6', objid => 'libc.so.6', + section => '.rodata', dynamic => 1, + debug => '', type => 'O', weak => '', + local => '', global => 1, visibility => '', + hidden => 1, defined => 1 }, 'Symbol' ); +$sym = $obj->get_symbol('_IO_stdin_used'); +is_deeply( $sym, { name => '_IO_stdin_used', version => '', + soname => 'libc.so.6', objid => 'libc.so.6', + section => '*UND*', dynamic => 1, + debug => '', type => ' ', weak => 1, + local => '', global => '', visibility => '', + hidden => '', defined => '' }, 'Symbol 2' ); + +my @syms = $obj->get_exported_dynamic_symbols; +is( scalar @syms, 2231, 'defined && dynamic' ); +@syms = $obj->get_undefined_dynamic_symbols; +is( scalar @syms, 9, 'undefined && dynamic' ); + + +my $obj_old = Dpkg::Shlibs::Objdump::Object->new; + +open $objdump, '<', "$datadir/objdump.libc6-2.3" + or die "$datadir/objdump.libc6-2.3: $!"; +$obj_old->parse_objdump_output($objdump); +close $objdump; + + +use_ok('Dpkg::Shlibs::SymbolFile'); +use_ok('Dpkg::Shlibs::Symbol'); + +my $sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/symbol_file.tmp"); +my $sym_file_dup = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/symbol_file.tmp"); +my $sym_file_old = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/symbol_file.tmp"); + +$sym_file->merge_symbols($obj_old, '2.3.6.ds1-13'); +$sym_file_old->merge_symbols($obj_old, '2.3.6.ds1-13'); + +ok( $sym_file->has_object('libc.so.6'), 'SONAME in sym file' ); + +$sym_file->merge_symbols($obj, '2.6-1'); + +ok( $sym_file->get_new_symbols($sym_file_old), 'has new symbols' ); +ok( $sym_file_old->get_lost_symbols($sym_file), 'has lost symbols' ); + +is( $sym_file_old->lookup_symbol('__bss_start@Base', ['libc.so.6']), + undef, 'internal symbols are ignored' ); + +%tmp = $sym_file->lookup_symbol('_errno@GLIBC_2.0', ['libc.so.6'], 1); +isa_ok($tmp{symbol}, 'Dpkg::Shlibs::Symbol'); +is_deeply(\%tmp, { symbol => Dpkg::Shlibs::Symbol->new(symbol => '_errno@GLIBC_2.0', + minver => '2.3.6.ds1-13', dep_id => 0, + deprecated => '2.6-1'), soname => 'libc.so.6' }, + 'deprecated symbol'); + +# Wildcard test +my $pat = $sym_file_old->create_symbol('*@GLIBC_PRIVATE 2.3.6.wildcard'); +$sym_file_old->add_symbol($pat, 'libc.so.6'); +$sym_file_old->merge_symbols($obj, '2.6-1'); +$sym = $sym_file_old->lookup_symbol('__nss_services_lookup@GLIBC_PRIVATE', 'libc.so.6'); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => '__nss_services_lookup@GLIBC_PRIVATE', + minver => '2.3.6.wildcard', dep_id => 0, deprecated => 0, + tags => { symver => undef, optional => undef }, + tagorder => [ 'symver', 'optional' ], + matching_pattern => $pat ), 'wildcarded symbol'); + +# Save -> Load test +use File::Temp; +use File::Basename qw(basename); + +sub save_load_test { + my ($symfile, $comment, @opts) = @_; + + my $save_file = File::Temp->new(); + $symfile->save($save_file->filename, @opts); + my $dup = Dpkg::Shlibs::SymbolFile->new(file => $save_file->filename); + # Force sync of non-stored attributes + $dup->{file} = $symfile->{file}; + $dup->{arch} = $symfile->{arch}; + + is_deeply($dup, $symfile, $comment); + if (-f $symfile->{file}) { + is(system('diff', '-u', $symfile->{file}, $save_file->filename), 0, + basename($symfile->{file}) . ' dumped identical'); + } +} + +save_load_test( $sym_file, 'save -> load' ); + + +# Test ignoring internal symbols +open $objdump, '<', "$datadir/objdump.internal" + or die "objdump.internal: $!"; +$obj->reset(); +$obj->parse_objdump_output($objdump); +close $objdump; + +# Do not ignore any internal symbols +$sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/symbols.internal-filter"); +$sym_file->merge_symbols($obj, '100.MISSING'); + +$sym = $sym_file->lookup_symbol('symbol@Base', ['libinternal.so.0']); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol@Base', + minver => '1.0', dep_id => 0, deprecated => 0), + 'symbol unaffected w/o including internal symbols'); + +$sym = $sym_file->lookup_symbol('.gomp_critical_user_foo@Base', ['libinternal.so.0']); +is($sym, undef, 'gomp symbol omitted while filtering internal symbols'); + +$sym = $sym_file->lookup_symbol('__aeabi_lcmp@GCC_3.0', ['libinternal.so.0']); +is($sym, undef, 'known aeabi symbol omitted while filtering internal symbols'); + +$sym = $sym_file->lookup_symbol('__aeabi_unknown@GCC_4.0', ['libinternal.so.0']); +is($sym, undef, 'unknown aeabi symbol omitted while filtering internal symbols'); + +# Include internal symbols using the allow-internal tag. +$sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/symbols.internal-allow"); +$sym_file->merge_symbols($obj, '100.MISSING'); + +$sym = $sym_file->lookup_symbol('symbol@Base', ['libinternal.so.0']); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol@Base', + minver => '1.0', dep_id => 0, deprecated => 0), + 'symbol unaffected while including internal symbols via symbol tag'); + +$sym = $sym_file->lookup_symbol('.gomp_critical_user_foo@Base', ['libinternal.so.0']); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => '.gomp_critical_user_foo@Base', + minver => '2.0', dep_id => 0, deprecated => 0, + tags => { 'allow-internal' => undef }, + tagorder => [ 'allow-internal' ]), + 'internal gomp symbol included via symbol tag'); + +$sym = $sym_file->lookup_symbol('__aeabi_lcmp@GCC_3.0', ['libinternal.so.0']); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => '__aeabi_lcmp@GCC_3.0', + minver => '3.0', dep_id => 0, deprecated => 0, + tags => { 'allow-internal' => undef }, + tagorder => [ 'allow-internal' ]), + 'internal known aeabi symbol included via symbol tag'); + +$sym = $sym_file->lookup_symbol('__aeabi_unknown@GCC_4.0', ['libinternal.so.0']); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => '__aeabi_unknown@GCC_4.0', + minver => '4.0', dep_id => 0, deprecated => 0, + tags => { 'allow-internal' => undef }, + tagorder => [ 'allow-internal' ]), + 'internal unknown aeabi symbol omitted via symbol tag'); + +# Include internal symbols using the Allow-Internal-Symbol-Groups field +$sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/symbols.internal-allow-groups"); +$sym_file->merge_symbols($obj, '100.MISSING'); + +$sym = $sym_file->lookup_symbol('symbol@Base', ['libinternal.so.0']); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol@Base', + minver => '1.0', dep_id => 0, deprecated => 0), + 'symbol unaffected w/o including internal symbols'); + +$sym = $sym_file->lookup_symbol('.gomp_critical_user_foo@Base', ['libinternal.so.0']); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => '.gomp_critical_user_foo@Base', + minver => '2.0', dep_id => 0, deprecated => 0), + 'internal gomp symbol included via library field'); + +$sym = $sym_file->lookup_symbol('__aeabi_lcmp@GCC_3.0', ['libinternal.so.0']); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => '__aeabi_lcmp@GCC_3.0', + minver => '3.0', dep_id => 0, deprecated => 0), + 'internal known aeabi symbol included via library field'); + +$sym = $sym_file->lookup_symbol('__aeabi_unknown@GCC_4.0', ['libinternal.so.0']); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => '__aeabi_unknown@GCC_4.0', + minver => '4.0', dep_id => 0, deprecated => 0), + 'internal unknown aeabi symbol included via library field'); + + +# Test include mechanism of SymbolFile +$sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/symbols.include-1"); + +$sym = $sym_file->lookup_symbol('symbol_before@Base', ['libfake.so.1']); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol_before@Base', + minver => '0.9', dep_id => 0, deprecated => 0), + 'symbol before include not lost'); + +$sym = $sym_file->lookup_symbol('symbol_after@Base', ['libfake.so.1']); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol_after@Base', + minver => '1.1', dep_id => 0, deprecated => 0), + 'symbol after include not lost'); + +$sym = $sym_file->lookup_symbol('symbol1_fake1@Base', ['libfake.so.1']); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol1_fake1@Base', + minver => '1.0', dep_id => 0, deprecated => 0), + 'overrides order with #include'); + +$sym = $sym_file->lookup_symbol('symbol3_fake1@Base', ['libfake.so.1']); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol3_fake1@Base', + minver => '0', dep_id => 0, deprecated => 0), + 'overrides order with #include'); + +is($sym_file->get_smallest_version('libfake.so.1'), '0', + 'get_smallest_version with null version'); + +$sym = $sym_file->lookup_symbol('symbol_in_libdivert@Base', ['libdivert.so.1']); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol_in_libdivert@Base', + minver => '1.0~beta1', dep_id => 0, deprecated => 0), + '#include can change current object'); + +$sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/symbols.include-2"); + +$sym = $sym_file->lookup_symbol('symbol1_fake2@Base', ['libfake.so.1']); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol1_fake2@Base', + minver => '1.0', dep_id => 1, deprecated => 0), + 'overrides order with circular #include'); + +is($sym_file->get_smallest_version('libfake.so.1'), '1.0', + 'get_smallest_version'); + +my $io_data; +my $io; + +# Check dump output +open $io, '>', \$io_data or die "cannot open io string\n"; +$sym_file->output($io, package => 'libfake1'); +is($io_data, +'libfake.so.1 libfake1 #MINVER# +| libvirtualfake +* Build-Depends-Package: libfake-dev + symbol1_fake2@Base 1.0 1 + symbol2_fake2@Base 1.0 + symbol3_fake2@Base 1.1 +', "Dump of $datadir/symbols.include-2"); + + +# Check parsing of objdump output on ia64 (local symbols +# without versions and with visibility attribute) +$obj = Dpkg::Shlibs::Objdump::Object->new; + +open $objdump, '<', "$datadir/objdump.glib-ia64" + or die "$datadir/objdump.glib-ia64: $!"; +$obj->parse_objdump_output($objdump); +close $objdump; +ok($obj->is_public_library(), 'glib-ia64 is a public library'); +ok(!$obj->is_executable(), 'glib-ia64 is not an executable'); + +$sym = $obj->get_symbol('IA__g_free'); +is_deeply( $sym, { name => 'IA__g_free', version => '', + soname => 'libglib-2.0.so.0', objid => 'libglib-2.0.so.0', + section => '.text', dynamic => 1, + debug => '', type => 'F', weak => '', + local => 1, global => '', visibility => 'hidden', + hidden => '', defined => 1 }, + 'symbol with visibility without version' ); + +# Check parsing of objdump output when symbol names contain spaces +$obj = Dpkg::Shlibs::Objdump::Object->new; + +open $objdump, '<', "$datadir/objdump.spacesyms" + or die "$datadir/objdump.spacesyms: $!"; +$obj->parse_objdump_output($objdump); +close $objdump; + +sub check_spacesym { + my ($name, $version, $visibility) = @_; + + $visibility //= ''; + $sym = $obj->get_symbol($name . "@" . $version); + is_deeply($sym, { name => $name, version => $version, + soname => 'libspacesyms.so.1', + objid => 'libspacesyms.so.1', + section => '.text', dynamic => 1, + debug => '', type => 'F', weak => '', + local => '', global => 1, visibility => $visibility, + hidden => '', defined => 1 }, $name); + ok(defined $obj->{dynrelocs}{$name . "@@" . $version}, + "dynreloc found for $name"); +} + +check_spacesym('symdefaultvernospacedefault', 'Base'); +check_spacesym('symdefaultvernospaceprotected', 'Base', 'protected'); +check_spacesym('symlongvernospacedefault', 'VERY_LONG_VERSION_1'); +check_spacesym('symlongvernospaceprotected', 'VERY_LONG_VERSION_1', 'protected'); +check_spacesym('symshortvernospacedefault', 'V1'); +check_spacesym('symshortvernospaceprotected', 'V1', 'protected'); +check_spacesym('symdefaultverSPA CEdefault', 'Base'); +check_spacesym('symdefaultverSPA CEprotected', 'Base', 'protected'); +check_spacesym('symlongverSPA CEdefault', 'VERY_LONG_VERSION_1'); +check_spacesym('symlongverSPA CEprotected', 'VERY_LONG_VERSION_1', 'protected'); +check_spacesym('symshortverSPA CEdefault', 'V1'); +check_spacesym('symshortverSPA CEprotected', 'V1', 'protected'); + +####### Test symbol tagging support ###### + +# Parsing/dumping +# Template mode +$sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/basictags.symbols", arch => 'amd64'); +save_load_test($sym_file, 'template save -> load', template_mode => 1); + +# Dumping in non-template mode (amd64) (test for arch tags) +open $io, '>', \$io_data or die "cannot open io string\n"; +$sym_file->output($io); +is($io_data, +'libbasictags.so.1 libbasictags1 #MINVER# +| libbasictags1 (>= 1.1) + symbol11_optional@Base 1.1 1 + symbol21_amd64@Base 2.1 + symbol25_64@Base 2.5 + symbol26_little@Base 2.6 + symbol31_randomtag@Base 3.1 + symbol51_untagged@Base 5.1 +', 'template vs. non-template on amd64'); + +# Dumping in non-template mode (mips) (test for arch tags) +open $io, '>', \$io_data or die "cannot open io string\n"; +$sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/basictags.symbols", arch => 'mips'); +$sym_file->output($io); +is($io_data, +'libbasictags.so.1 libbasictags1 #MINVER# +| libbasictags1 (>= 1.1) + symbol11_optional@Base 1.1 1 + symbol23_mips@Base 2.3 + symbol24_32@Base 2.4 + symbol27_big@Base 2.7 + symbol31_randomtag@Base 3.1 + symbol42_mips_and_optional@Base 4.2 + symbol51_untagged@Base 5.1 +', 'template vs. non-template on mips'); + +# Dumping in non-template mode (i386) (test for arch tags) +open $io, '>', \$io_data or die "cannot open io string\n"; +$sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/basictags.symbols", arch => 'i386'); +$sym_file_dup = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/basictags.symbols", arch => 'i386'); +$sym_file->output($io); +is($io_data, +'libbasictags.so.1 libbasictags1 #MINVER# +| libbasictags1 (>= 1.1) + symbol11_optional@Base 1.1 1 + symbol22_i386@Base 2.2 + symbol24_32@Base 2.4 + symbol26_little@Base 2.6 + symbol28_little_32@Base 2.8 + symbol31_randomtag@Base 3.1 + symbol41_i386_and_optional@Base 4.1 + symbol51_untagged@Base 5.1 +', 'template vs. non-template on i386'); + +ok (defined $sym_file->{objects}{'libbasictags.so.1'}{syms}{'symbol21_amd64@Base'}, + 'syms keys are symbol names without quotes'); + +# Preload objdumps +my $tags_obj_i386 = Dpkg::Shlibs::Objdump::Object->new(); +open $objdump, '<', "$datadir/objdump.basictags-i386" + or die "$datadir/objdump.basictags-i386: $!"; +$tags_obj_i386->parse_objdump_output($objdump); +close $objdump; +$sym_file->merge_symbols($tags_obj_i386, '100.MISSING'); +is_deeply($sym_file, $sym_file_dup, 'is objdump.basictags-i386 and basictags.symbols in sync'); + +my $tags_obj_amd64 = Dpkg::Shlibs::Objdump::Object->new(); +open $objdump, '<', "$datadir/objdump.basictags-amd64" + or die "$datadir/objdump.basictags-amd64: $!"; +$tags_obj_amd64->parse_objdump_output($objdump); +close $objdump; + +# Merge/get_{new,lost} tests for optional tag: +# - disappeared +my $symbol11 = $tags_obj_i386->get_symbol('symbol11_optional@Base'); +delete $tags_obj_i386->{dynsyms}{'symbol11_optional@Base'}; +$sym_file->merge_symbols($tags_obj_i386, '100.MISSING'); + +$sym = $sym_file->lookup_symbol('symbol11_optional@Base', ['libbasictags.so.1'], 1); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol11_optional@Base', + symbol_templ => 'symbol11_optional@Base', + minver => '1.1', dep_id => 1, deprecated => '100.MISSING', + tags => { optional => undef }, tagorder => [ 'optional' ]), + 'disappeared optional symbol gets deprecated'); + +$sym_file->merge_symbols($tags_obj_i386, '101.MISSING'); +$sym = $sym_file->lookup_symbol('symbol11_optional@Base', ['libbasictags.so.1'], 1); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol11_optional@Base', + symbol_templ => 'symbol11_optional@Base', + minver => '1.1', dep_id => 1, deprecated => '101.MISSING', + tags => { optional => undef }, tagorder => [ 'optional' ]), + 'deprecated text of MISSING optional symbol gets rebumped each merge'); + +is( scalar($sym_file->get_lost_symbols($sym_file_dup)), 0, 'missing optional symbol is not LOST'); + +# - reappeared (undeprecate, minver should be 1.1, not 100.MISSED) +$tags_obj_i386->add_dynamic_symbol($symbol11); +$sym_file->merge_symbols($tags_obj_i386, '100.MISSING'); +$sym = $sym_file->lookup_symbol('symbol11_optional@Base', ['libbasictags.so.1']); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol11_optional@Base', + symbol_templ => 'symbol11_optional@Base', + minver => '1.1', dep_id => 1, deprecated => 0, + tags => { optional => undef }, tagorder => [ 'optional' ]), + 'reappeared optional symbol gets undeprecated + minver'); +is( scalar($sym_file->get_lost_symbols($sym_file_dup) + + $sym_file->get_new_symbols($sym_file_dup)), 0, 'reappeared optional symbol: neither NEW nor LOST'); + +# Merge/get_{new,lost} tests for arch tag: +# - arch specific appears on wrong arch: 'arch' tag should be removed +my $symbol21 = $tags_obj_amd64->get_symbol('symbol21_amd64@Base'); +$tags_obj_i386->add_dynamic_symbol($symbol21); +$sym_file->merge_symbols($tags_obj_i386, '100.MISSING'); +$sym = $sym_file->lookup_symbol('symbol21_amd64@Base', ['libbasictags.so.1']); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol21_amd64@Base', + symbol_templ => 'symbol21_amd64@Base', symbol_quoted => "'", + minver => '2.1', dep_id => 0, deprecated => 0), + 'symbol appears on foreign arch, arch tag should be removed'); +@tmp = map { $_->{symbol}->get_symbolname() } $sym_file->get_new_symbols($sym_file_dup); +is_deeply( \@tmp, [ 'symbol21_amd64@Base' ], 'symbol from foreign arch is NEW'); +is( $sym->get_symbolspec(1), ' symbol21_amd64@Base 2.1', 'no tags => no quotes in the symbol name' ); + +# - arch specific symbol disappears +delete $tags_obj_i386->{dynsyms}{'symbol22_i386@Base'}; +delete $tags_obj_i386->{dynsyms}{'symbol24_32@Base'}; +delete $tags_obj_i386->{dynsyms}{'symbol26_little@Base'}; +delete $tags_obj_i386->{dynsyms}{'symbol28_little_32@Base'}; +delete $tags_obj_i386->{dynsyms}{'symbol41_i386_and_optional@Base'}; +$sym_file->merge_symbols($tags_obj_i386, '100.MISSING'); + +$sym = $sym_file->lookup_symbol('symbol22_i386@Base', ['libbasictags.so.1'], 1); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol22_i386@Base', + symbol_templ => 'symbol22_i386@Base', + minver => '2.2', dep_id => 0, deprecated => '100.MISSING', + tags => { arch => '!amd64 !ia64 !mips' }, + tagorder => [ 'arch' ]), + 'disappeared arch specific symbol gets deprecated'); +$sym = $sym_file->lookup_symbol('symbol24_32@Base', ['libbasictags.so.1'], 1); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol24_32@Base', + symbol_templ => 'symbol24_32@Base', + minver => '2.4', dep_id => 0, deprecated => '100.MISSING', + tags => { 'arch-bits' => '32' }, + tagorder => [ 'arch-bits' ]), + 'disappeared arch bits specific symbol gets deprecated'); +$sym = $sym_file->lookup_symbol('symbol26_little@Base', ['libbasictags.so.1'], 1); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol26_little@Base', + symbol_templ => 'symbol26_little@Base', + minver => '2.6', dep_id => 0, deprecated => '100.MISSING', + tags => { 'arch-endian' => 'little' }, + tagorder => [ 'arch-endian' ]), + 'disappeared arch endian specific symbol gets deprecated'); +$sym = $sym_file->lookup_symbol('symbol28_little_32@Base', ['libbasictags.so.1'], 1); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol28_little_32@Base', + symbol_templ => 'symbol28_little_32@Base', + minver => '2.8', dep_id => 0, deprecated => '100.MISSING', + tags => { 'arch-bits' => '32', 'arch-endian' => 'little' }, + tagorder => [ 'arch-bits', 'arch-endian' ]), + 'disappeared arch bits and endian specific symbol gets deprecated'); +$sym = $sym_file->lookup_symbol('symbol41_i386_and_optional@Base', ['libbasictags.so.1'], 1); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol41_i386_and_optional@Base', + symbol_templ => 'symbol41_i386_and_optional@Base', + symbol_quoted => '"', + minver => '4.1', dep_id => 0, deprecated => '100.MISSING', + tags => { arch => 'i386', optional => 'reason' }, + tagorder => [ 'arch', 'optional' ]), + 'disappeared optional arch specific symbol gets deprecated'); +@tmp = sort map { $_->{symbol}->get_symbolname() } $sym_file->get_lost_symbols($sym_file_dup); +is_deeply(\@tmp, [ 'symbol22_i386@Base', 'symbol24_32@Base', + 'symbol26_little@Base', 'symbol28_little_32@Base' ], + "missing arch specific is LOST, but optional arch specific isn't"); + +# Tests for tagged #includes +$sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/symbols.include-3", arch => 'i386'); +$sym = $sym_file->lookup_symbol('symbol2_fake1@Base', ['libbasictags.so.2']); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol2_fake1@Base', + minver => '1.0', + tags => { optional => undef, 'random tag' => 'random value' }, + tagorder => [ 'optional', 'random tag' ] ), + 'symbols from #included file inherits tags'); +$sym = $sym_file->lookup_symbol('symbol41_i386_and_optional@Base', ['libbasictags.so.1']); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol41_i386_and_optional@Base', + symbol_templ => 'symbol41_i386_and_optional@Base', + symbol_quoted => '"', + minver => '4.1', + tags => { optional => 'reason', t => 'v', arch => 'i386' }, + tagorder => [ 'optional', 't', 'arch' ]), + 'symbols in #included file can override tag values'); +$sym = $sym_file->lookup_symbol('symbol51_untagged@Base', ['libbasictags.so.1']); +is_deeply($sym, Dpkg::Shlibs::Symbol->new(symbol => 'symbol51_untagged@Base', + minver => '5.1', + tags => { optional => 'from parent', t => 'v' }, + tagorder => [ 'optional', 't' ]), + 'symbols are properly cloned when #including'); + +# Test Symbol::clone() +$sym = Dpkg::Shlibs::Symbol->new(symbol => 'foobar', testfield => 1, teststruct => { foo => 1 }); +$tmp = $sym->clone(); +$tmp->{teststruct}{foo} = 3; +$tmp->{testfield} = 3; +is ( $sym->{teststruct}{foo}, 1, 'original field "foo" not changed' ); +is ( $sym->{testfield}, 1, 'original field "testfield" not changed' ); + +############ Test symbol patterns ########### + +SKIP: { + +skip 'c++filt not available', 41 if not can_run('c++filt'); + +sub load_patterns_obj { + $obj = Dpkg::Shlibs::Objdump::Object->new(); + open $objdump, '<', "$datadir/objdump.patterns" + or die "$datadir/objdump.patterns: $!"; + $obj->parse_objdump_output($objdump); + close $objdump; + return $obj; +} + +sub load_patterns_symbols { + $sym_file = Dpkg::Shlibs::SymbolFile->new(file => "$datadir/patterns.symbols"); + return $sym_file; +} + +load_patterns_obj(); +$sym_file_dup = load_patterns_symbols(); +load_patterns_symbols(); + +save_load_test($sym_file, 'save -> load test of patterns template', template_mode => 1); + +isnt( $sym_file->get_patterns('libpatterns.so.1') , 0, + 'patterns.symbols has patterns'); + +$sym_file->merge_symbols($obj, '100.MISSING'); + +@tmp = map { $_->get_symbolname() } $sym_file->get_lost_symbols($sym_file_dup); +is_deeply(\@tmp, [], 'no LOST symbols if all patterns matched.'); +@tmp = map { $_->get_symbolname() } $sym_file->get_new_symbols($sym_file_dup); +is_deeply(\@tmp, [], 'no NEW symbols if all patterns matched.'); + +# Pattern resolution order: aliases (c++, symver), generic +$sym = $sym_file->lookup_symbol('SYMVER_1@SYMVER_1', 'libpatterns.so.1'); +is($sym->{minver}, '1', 'specific SYMVER_1 symbol'); + +$sym = $sym_file->lookup_symbol('_ZN3NSB6Symver14symver_method1Ev@SYMVER_1', 'libpatterns.so.1'); +is($sym->{minver}, '1.method1', 'specific symbol preferred over pattern'); + +$sym = $sym_file->lookup_symbol('_ZN3NSB6Symver14symver_method2Ev@SYMVER_1', 'libpatterns.so.1'); +is($sym->{minver}, '1.method2', 'c++ alias pattern preferred over generic pattern'); +is($sym->get_pattern()->get_symbolname(), 'NSB::Symver::symver_method2()@SYMVER_1', + 'c++ alias pattern preferred over generic pattern, on demangled name'); + +$sym = $sym_file->lookup_symbol('_ZN3NSB6SymverD1Ev@SYMVER_1', 'libpatterns.so.1'); +is ( $sym->{minver}, '1.generic', 'generic (c++ & symver) pattern covers the rest (destructor)' ); +ok($sym->get_pattern()->equals($sym_file->create_symbol('(c++|symver)SYMVER_1 1.generic')), + 'generic (c++ & symver) pattern covers the rest (destructor), compared'); + +# Test old style wildcard support +load_patterns_symbols(); +$sym = $sym_file->create_symbol('*@SYMVEROPT_2 2'); +ok($sym->is_optional(), 'Old style wildcard is optional'); +is($sym->get_alias_type(), 'symver', 'old style wildcard is a symver pattern'); +is($sym->get_symbolname(), 'SYMVEROPT_2', 'wildcard pattern got renamed'); + +$pat = $sym_file->lookup_pattern('(symver|optional)SYMVEROPT_2', 'libpatterns.so.1'); +$sym->{symbol_templ} = $pat->{symbol_templ}; +is_deeply($pat, $sym, 'old style wildcard is the same as (symver|optional)'); + +# Get rid of all SymverOptional symbols +foreach my $tmp (keys %{$obj->{dynsyms}}) { + delete $obj->{dynsyms}{$tmp} if ($tmp =~ /SymverOptional/); +} +$sym_file->merge_symbols($obj, '100.MISSING'); +is_deeply ( [ map { $_->get_symbolname() } $pat->get_pattern_matches() ], + [], 'old style wildcard matches nothing.'); +is($pat->{deprecated}, '100.MISSING', 'old style wildcard gets deprecated.'); +@tmp = map { $_->{symbol}->get_symbolname() } $sym_file->get_lost_symbols($sym_file_dup); +is_deeply(\@tmp, [], 'but old style wildcard is not LOST.'); + +# 'Internal' pattern covers all internal symbols +load_patterns_obj(); +@tmp = grep { $_->get_symbolname() =~ /Internal/ } $sym_file->get_symbols('libpatterns.so.1'); +$sym = $sym_file->create_symbol('(regex|c++)^_Z(T[ISV])?N3NSA6ClassA8Internal.*@Base$ 1.internal'); +$pat = $sym_file->lookup_pattern($sym, 'libpatterns.so.1'); +is_deeply ([ sort $pat->get_pattern_matches() ], [ sort @tmp ], + 'Pattern covers all internal symbols'); +is($tmp[0]->{minver}, '1.internal', 'internal pattern covers first symbol'); + +# Lookup private pattern +my @private_symnames = sort qw( + _ZN3NSA6ClassA7Private11privmethod1Ei@Base + _ZN3NSA6ClassA7Private11privmethod2Ei@Base + _ZN3NSA6ClassA7PrivateC1Ev@Base + _ZN3NSA6ClassA7PrivateC2Ev@Base + _ZN3NSA6ClassA7PrivateD0Ev@Base + _ZN3NSA6ClassA7PrivateD1Ev@Base + _ZN3NSA6ClassA7PrivateD2Ev@Base + _ZTIN3NSA6ClassA7PrivateE@Base + _ZTSN3NSA6ClassA7PrivateE@Base + _ZTVN3NSA6ClassA7PrivateE@Base +); +$sym = $sym_file->create_symbol('(c++|regex|optional)NSA::ClassA::Private(::.*)?@Base 1'); +$pat = $sym_file->lookup_pattern($sym, 'libpatterns.so.1'); +isnt( $pat, undef, 'pattern for private class has been found' ); +is_deeply( [ sort map { $_->get_symbolname() } $pat->get_pattern_matches() ], + \@private_symnames, 'private pattern matched expected symbols'); +ok( ($pat->get_pattern_matches())[0]->is_optional(), + 'private symbol is optional like its pattern'); +ok( $sym_file->lookup_symbol(($pat->get_pattern_matches())[0], 'libpatterns.so.1'), + 'lookup_symbol() finds symbols matched by pattern (after merge)'); + +# Get rid of a private symbol, it should not be lost +delete $obj->{dynsyms}{$private_symnames[0]}; +load_patterns_symbols(); +$sym_file->merge_symbols($obj, '100.MISSING'); + +$pat = $sym_file->lookup_pattern($sym, 'libpatterns.so.1'); +@tmp = map { $_->{symbol}->get_symbolname() } $sym_file->get_lost_symbols($sym_file_dup); +is_deeply(\@tmp, [], 'no LOST symbols when got rid of patterned optional symbol.'); +ok(!$pat->{deprecated}, 'there are still matches, pattern is not deprecated.'); + +# Get rid of all private symbols, the pattern should be deprecated. +foreach my $tmp (@private_symnames) { + delete $obj->{dynsyms}{$tmp}; +} +load_patterns_symbols(); +$sym_file->merge_symbols($obj, '100.MISSING'); + +$pat = $sym_file->lookup_pattern($sym, 'libpatterns.so.1', 1); +@tmp = $sym_file->get_lost_symbols($sym_file_dup); +is_deeply( \@tmp, [ ], + 'All private symbols gone, but pattern is not LOST because it is optional.'); +is( $pat->{deprecated}, '100.MISSING', + 'All private symbols gone - pattern deprecated.'); + +# Internal symbols. All covered by the pattern? +@tmp = grep { $_->get_symbolname() =~ /Internal/ } values %{$sym_file->{objects}{'libpatterns.so.1'}{syms}}; +$sym = $sym_file->create_symbol('(regex|c++)^_Z(T[ISV])?N3NSA6ClassA8Internal.*@Base$ 1.internal'); +$pat = $sym_file->lookup_pattern($sym, 'libpatterns.so.1'); +is_deeply ([ sort $pat->get_pattern_matches() ], [ sort @tmp ], + 'Pattern covers all internal symbols'); +is($tmp[0]->{minver}, '1.internal', 'internal pattern covers first symbol'); + +# Delete matches of the non-optional pattern +$sym = $sym_file->create_symbol('(c++)"non-virtual thunk to NSB::ClassD::generate_vt(char const*) const@Base" 1'); +$pat = $sym_file->lookup_pattern($sym, 'libpatterns.so.1'); +isnt( $pat, undef, 'lookup_pattern() finds alias-based pattern' ); + +is(scalar($pat->get_pattern_matches()), 2, 'two matches for the generate_vt pattern'); +foreach my $tmp ($pat->get_pattern_matches()) { + delete $obj->{dynsyms}{$tmp->get_symbolname()}; +} +load_patterns_symbols(); +$sym_file->merge_symbols($obj, '100.MISSING'); + +$pat = $sym_file->lookup_pattern($sym, 'libpatterns.so.1', 1); +@tmp = map { scalar $sym_file->lookup_pattern($_->{symbol}, 'libpatterns.so.1', 1) } + $sym_file->get_lost_symbols($sym_file_dup); +is_deeply(\@tmp, [ $pat ], 'No matches - generate_vt() pattern is LOST.'); +is( $pat->{deprecated}, '100.MISSING', + 'No matches - generate_vt() pattern is deprecated.'); + +# Pattern undeprecation when matches are discovered +load_patterns_obj(); +load_patterns_symbols(); + +$pat = $sym_file_dup->lookup_pattern($sym, 'libpatterns.so.1'); +$pat->{deprecated} = '0.1-1'; +$pat = $sym_file->lookup_pattern($sym, 'libpatterns.so.1'); +$pat->{deprecated} = '0.1-1'; + +$sym_file->merge_symbols($obj, '100.FOUND'); +ok( ! $pat->{deprecated}, + 'Previously deprecated pattern with matches got undeprecated'); +is( $pat->{minver}, '100.FOUND', + 'Previously deprecated pattern with matches got minver bumped'); +@tmp = map { $_->{symbol}->get_symbolspec(1) } $sym_file->get_new_symbols($sym_file_dup); +is_deeply( \@tmp, [ $pat->get_symbolspec(1) ], + 'Previously deprecated pattern with matches is NEW. Matches themselves are not NEW.'); +foreach my $sym ($pat->get_pattern_matches()) { + ok(!$sym->{deprecated}, $sym->get_symbolname() . ': not deprecated'); + is($sym->{minver}, '100.FOUND', $sym->get_symbolname() . ': version bumped'); +} + +} diff --git a/scripts/t/Dpkg_Shlibs/basictags.c b/scripts/t/Dpkg_Shlibs/basictags.c new file mode 100644 index 0000000..4f1d337 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/basictags.c @@ -0,0 +1,63 @@ +/* + * $ gcc -shared -fPIC -Wl,-soname -Wl,libbasictags.so.1 \ + * -o libbasictags.so.1 -DAMD64 basictags.c + * $ objdump -wfpTR libbasictags.so.1 > objdump.basictags-amd64 + * $ gcc -shared -fPIC -Wl,-soname -Wl,libbasictags.so.1 \ + * -o libbasictags.so.1 -DI386 basictags.c + * $ objdump -wfpTR libbasictags.so.1 > objdump.basictags-i386 + * $ gcc -shared -fPIC -Wl,-soname -Wl,libbasictags.so.1 \ + * -o libbasictags.so.1 -DMIPS basictags.c + * $ objdump -wfpTR libbasictags.so.1 > objdump.basictags-mips + */ + +void symbol11_optional(void); +void symbol11_optional(void) {} + +#if defined(AMD64) +void symbol21_amd64(void); +void symbol21_amd64(void) {} +#elif defined(I386) +void symbol22_i386(void); +void symbol22_i386(void) {} +#elif defined(MIPS) +void symbol23_mips(void); +void symbol23_mips(void) {} +#endif + +#if defined(AMD64) +void symbol25_64(void); +void symbol25_64(void) {} +#else +void symbol24_32(void); +void symbol24_32(void) {} +#endif + +#if defined(MIPS) +void symbol27_big(void); +void symbol27_big(void) {} +#else +void symbol26_little(void); +void symbol26_little(void) {} +#endif + +#if defined(I386) +void symbol28_little_32(void); +void symbol28_little_32(void) {} +#endif + +void symbol31_randomtag(void); +void symbol31_randomtag(void) {} + +/* (arch=i386|optional)symbol41_i386_and_optional@Base */ +#if defined(I386) +void symbol41_i386_and_optional(void); +void symbol41_i386_and_optional(void) {} +#endif +/* (arch=mips|optional)symbol42_i386_and_optional@Base */ +#if defined(MIPS) +void symbol42_mips_and_optional(void); +void symbol42_mips_and_optional(void) {} +#endif + +void symbol51_untagged(void); +void symbol51_untagged(void) {} diff --git a/scripts/t/Dpkg_Shlibs/basictags.symbols b/scripts/t/Dpkg_Shlibs/basictags.symbols new file mode 100644 index 0000000..af1dfc6 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/basictags.symbols @@ -0,0 +1,15 @@ +libbasictags.so.1 libbasictags1 #MINVER# +| libbasictags1 (>= 1.1) + (optional)symbol11_optional@Base 1.1 1 + (arch=amd64 ia64 alpha)'symbol21_amd64@Base' 2.1 + (arch=!amd64 !ia64 !mips)symbol22_i386@Base 2.2 + (arch=!amd64 !ia64 !i386)symbol23_mips@Base 2.3 + (arch-bits=32)symbol24_32@Base 2.4 + (arch-bits=64)symbol25_64@Base 2.5 + (arch-endian=little)symbol26_little@Base 2.6 + (arch-endian=big)symbol27_big@Base 2.7 + (arch-bits=32|arch-endian=little)symbol28_little_32@Base 2.8 + (randomtagname=randomtagvalue)symbol31_randomtag@Base 3.1 + (arch=i386|optional=reason)"symbol41_i386_and_optional@Base" 4.1 + (arch=mips|optional=reason)"symbol42_mips_and_optional@Base" 4.2 + symbol51_untagged@Base 5.1 diff --git a/scripts/t/Dpkg_Shlibs/ld.so.conf b/scripts/t/Dpkg_Shlibs/ld.so.conf new file mode 100644 index 0000000..cb7a19c --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/ld.so.conf @@ -0,0 +1,9 @@ +# Comment and empty line + +# Paths +/nonexistent32 +/nonexistent/lib64 + +include /nonexistent/*.conf +include t/Dpkg_Shlibs/ld.so.conf.d/*.conf + diff --git a/scripts/t/Dpkg_Shlibs/ld.so.conf.d/inf_recurse.conf b/scripts/t/Dpkg_Shlibs/ld.so.conf.d/inf_recurse.conf new file mode 100644 index 0000000..fbb83d8 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/ld.so.conf.d/inf_recurse.conf @@ -0,0 +1 @@ +include t/Dpkg_Shlibs/ld.so.conf diff --git a/scripts/t/Dpkg_Shlibs/ld.so.conf.d/normal.conf b/scripts/t/Dpkg_Shlibs/ld.so.conf.d/normal.conf new file mode 100644 index 0000000..26e8b98 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/ld.so.conf.d/normal.conf @@ -0,0 +1 @@ +/usr/local/lib/ diff --git a/scripts/t/Dpkg_Shlibs/ld.so.conf.d/recursive.conf b/scripts/t/Dpkg_Shlibs/ld.so.conf.d/recursive.conf new file mode 100644 index 0000000..702e41e --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/ld.so.conf.d/recursive.conf @@ -0,0 +1 @@ +include t/Dpkg_Shlibs/ld.so.conf_2 diff --git a/scripts/t/Dpkg_Shlibs/ld.so.conf_2 b/scripts/t/Dpkg_Shlibs/ld.so.conf_2 new file mode 100644 index 0000000..8afcaa5 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/ld.so.conf_2 @@ -0,0 +1 @@ +/nonexistent/lib128 diff --git a/scripts/t/Dpkg_Shlibs/objdump.basictags-amd64 b/scripts/t/Dpkg_Shlibs/objdump.basictags-amd64 new file mode 100644 index 0000000..aa53376 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/objdump.basictags-amd64 @@ -0,0 +1,78 @@ + +./t/Dpkg_Shlibs/libobjdump.basictags-amd64.so: file format elf32-i386 +architecture: i386, flags 0x00000150: +HAS_SYMS, DYNAMIC, D_PAGED +start address 0x00000450 + +Program Header: + LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12 + filesz 0x000006d0 memsz 0x000006d0 flags r-x + LOAD off 0x00000f18 vaddr 0x00001f18 paddr 0x00001f18 align 2**12 + filesz 0x000000f8 memsz 0x000000fc flags rw- + DYNAMIC off 0x00000f20 vaddr 0x00001f20 paddr 0x00001f20 align 2**2 + filesz 0x000000d0 memsz 0x000000d0 flags rw- + NOTE off 0x00000114 vaddr 0x00000114 paddr 0x00000114 align 2**2 + filesz 0x00000024 memsz 0x00000024 flags r-- +EH_FRAME off 0x000005b8 vaddr 0x000005b8 paddr 0x000005b8 align 2**2 + filesz 0x0000004c memsz 0x0000004c flags r-- + STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**4 + filesz 0x00000000 memsz 0x00000000 flags rw- + RELRO off 0x00000f18 vaddr 0x00001f18 paddr 0x00001f18 align 2**0 + filesz 0x000000e8 memsz 0x000000e8 flags r-- + +Dynamic Section: + NEEDED libc.so.6 + SONAME libbasictags.so.1 + INIT 0x00000404 + FINI 0x000005a4 + INIT_ARRAY 0x00001f18 + INIT_ARRAYSZ 0x00000004 + FINI_ARRAY 0x00001f1c + FINI_ARRAYSZ 0x00000004 + GNU_HASH 0x00000138 + STRTAB 0x00000288 + SYMTAB 0x00000188 + STRSZ 0x00000103 + SYMENT 0x00000010 + PLTGOT 0x00002000 + REL 0x000003cc + RELSZ 0x00000038 + RELENT 0x00000008 + VERNEED 0x000003ac + VERNEEDNUM 0x00000001 + VERSYM 0x0000038c + RELCOUNT 0x00000003 + +Version References: + required from libc.so.6: + 0x09691f73 0x00 02 GLIBC_2.1.3 + +DYNAMIC SYMBOL TABLE: +00000000 w D *UND* 00000000 _ITM_deregisterTMCloneTable +00000000 w DF *UND* 00000000 GLIBC_2.1.3 __cxa_finalize +00000000 w D *UND* 00000000 __gmon_start__ +00000000 w D *UND* 00000000 _ITM_registerTMCloneTable +00002010 g D .data 00000000 Base _edata +00000580 g DF .text 00000002 Base symbol26_little +00002014 g D .bss 00000000 Base _end +00000560 g DF .text 00000002 Base symbol21_amd64 +00002010 g D .bss 00000000 Base __bss_start +00000570 g DF .text 00000002 Base symbol25_64 +00000404 g DF .init 00000000 Base _init +00000590 g DF .text 00000002 Base symbol31_randomtag +000005a4 g DF .fini 00000000 Base _fini +000005a0 g DF .text 00000002 Base symbol51_untagged +00000550 g DF .text 00000002 Base symbol11_optional + + +DYNAMIC RELOCATION RECORDS +OFFSET TYPE VALUE +00001f18 R_386_RELATIVE *ABS* +00001f1c R_386_RELATIVE *ABS* +0000200c R_386_RELATIVE *ABS* +00001ff0 R_386_GLOB_DAT _ITM_deregisterTMCloneTable +00001ff4 R_386_GLOB_DAT __cxa_finalize@GLIBC_2.1.3 +00001ff8 R_386_GLOB_DAT __gmon_start__ +00001ffc R_386_GLOB_DAT _ITM_registerTMCloneTable + + diff --git a/scripts/t/Dpkg_Shlibs/objdump.basictags-i386 b/scripts/t/Dpkg_Shlibs/objdump.basictags-i386 new file mode 100644 index 0000000..af0f707 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/objdump.basictags-i386 @@ -0,0 +1,80 @@ + +./t/Dpkg_Shlibs/libobjdump.basictags-i386.so: file format elf32-i386 +architecture: i386, flags 0x00000150: +HAS_SYMS, DYNAMIC, D_PAGED +start address 0x000004b0 + +Program Header: + LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12 + filesz 0x00000788 memsz 0x00000788 flags r-x + LOAD off 0x00000f18 vaddr 0x00001f18 paddr 0x00001f18 align 2**12 + filesz 0x000000f8 memsz 0x000000fc flags rw- + DYNAMIC off 0x00000f20 vaddr 0x00001f20 paddr 0x00001f20 align 2**2 + filesz 0x000000d0 memsz 0x000000d0 flags rw- + NOTE off 0x00000114 vaddr 0x00000114 paddr 0x00000114 align 2**2 + filesz 0x00000024 memsz 0x00000024 flags r-- +EH_FRAME off 0x00000638 vaddr 0x00000638 paddr 0x00000638 align 2**2 + filesz 0x0000005c memsz 0x0000005c flags r-- + STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**4 + filesz 0x00000000 memsz 0x00000000 flags rw- + RELRO off 0x00000f18 vaddr 0x00001f18 paddr 0x00001f18 align 2**0 + filesz 0x000000e8 memsz 0x000000e8 flags r-- + +Dynamic Section: + NEEDED libc.so.6 + SONAME libbasictags.so.1 + INIT 0x00000464 + FINI 0x00000624 + INIT_ARRAY 0x00001f18 + INIT_ARRAYSZ 0x00000004 + FINI_ARRAY 0x00001f1c + FINI_ARRAYSZ 0x00000004 + GNU_HASH 0x00000138 + STRTAB 0x000002b8 + SYMTAB 0x00000198 + STRSZ 0x00000130 + SYMENT 0x00000010 + PLTGOT 0x00002000 + REL 0x0000042c + RELSZ 0x00000038 + RELENT 0x00000008 + VERNEED 0x0000040c + VERNEEDNUM 0x00000001 + VERSYM 0x000003e8 + RELCOUNT 0x00000003 + +Version References: + required from libc.so.6: + 0x09691f73 0x00 02 GLIBC_2.1.3 + +DYNAMIC SYMBOL TABLE: +00000000 w D *UND* 00000000 _ITM_deregisterTMCloneTable +00000000 w DF *UND* 00000000 GLIBC_2.1.3 __cxa_finalize +00000000 w D *UND* 00000000 __gmon_start__ +00000000 w D *UND* 00000000 _ITM_registerTMCloneTable +00002010 g D .data 00000000 Base _edata +000005e0 g DF .text 00000002 Base symbol26_little +00002014 g D .bss 00000000 Base _end +00000610 g DF .text 00000002 Base symbol41_i386_and_optional +000005c0 g DF .text 00000002 Base symbol22_i386 +000005f0 g DF .text 00000002 Base symbol28_little_32 +00002010 g D .bss 00000000 Base __bss_start +00000464 g DF .init 00000000 Base _init +00000600 g DF .text 00000002 Base symbol31_randomtag +000005d0 g DF .text 00000002 Base symbol24_32 +00000624 g DF .fini 00000000 Base _fini +00000620 g DF .text 00000002 Base symbol51_untagged +000005b0 g DF .text 00000002 Base symbol11_optional + + +DYNAMIC RELOCATION RECORDS +OFFSET TYPE VALUE +00001f18 R_386_RELATIVE *ABS* +00001f1c R_386_RELATIVE *ABS* +0000200c R_386_RELATIVE *ABS* +00001ff0 R_386_GLOB_DAT _ITM_deregisterTMCloneTable +00001ff4 R_386_GLOB_DAT __cxa_finalize@GLIBC_2.1.3 +00001ff8 R_386_GLOB_DAT __gmon_start__ +00001ffc R_386_GLOB_DAT _ITM_registerTMCloneTable + + diff --git a/scripts/t/Dpkg_Shlibs/objdump.basictags-mips b/scripts/t/Dpkg_Shlibs/objdump.basictags-mips new file mode 100644 index 0000000..27795c4 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/objdump.basictags-mips @@ -0,0 +1,79 @@ + +./t/Dpkg_Shlibs/libobjdump.basictags-mips.so: file format elf32-i386 +architecture: i386, flags 0x00000150: +HAS_SYMS, DYNAMIC, D_PAGED +start address 0x00000480 + +Program Header: + LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12 + filesz 0x0000072c memsz 0x0000072c flags r-x + LOAD off 0x00000f18 vaddr 0x00001f18 paddr 0x00001f18 align 2**12 + filesz 0x000000f8 memsz 0x000000fc flags rw- + DYNAMIC off 0x00000f20 vaddr 0x00001f20 paddr 0x00001f20 align 2**2 + filesz 0x000000d0 memsz 0x000000d0 flags rw- + NOTE off 0x00000114 vaddr 0x00000114 paddr 0x00000114 align 2**2 + filesz 0x00000024 memsz 0x00000024 flags r-- +EH_FRAME off 0x000005f8 vaddr 0x000005f8 paddr 0x000005f8 align 2**2 + filesz 0x00000054 memsz 0x00000054 flags r-- + STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**4 + filesz 0x00000000 memsz 0x00000000 flags rw- + RELRO off 0x00000f18 vaddr 0x00001f18 paddr 0x00001f18 align 2**0 + filesz 0x000000e8 memsz 0x000000e8 flags r-- + +Dynamic Section: + NEEDED libc.so.6 + SONAME libbasictags.so.1 + INIT 0x00000438 + FINI 0x000005e4 + INIT_ARRAY 0x00001f18 + INIT_ARRAYSZ 0x00000004 + FINI_ARRAY 0x00001f1c + FINI_ARRAYSZ 0x00000004 + GNU_HASH 0x00000138 + STRTAB 0x000002a4 + SYMTAB 0x00000194 + STRSZ 0x0000011a + SYMENT 0x00000010 + PLTGOT 0x00002000 + REL 0x00000400 + RELSZ 0x00000038 + RELENT 0x00000008 + VERNEED 0x000003e0 + VERNEEDNUM 0x00000001 + VERSYM 0x000003be + RELCOUNT 0x00000003 + +Version References: + required from libc.so.6: + 0x09691f73 0x00 02 GLIBC_2.1.3 + +DYNAMIC SYMBOL TABLE: +00000000 w D *UND* 00000000 _ITM_deregisterTMCloneTable +00000000 w DF *UND* 00000000 GLIBC_2.1.3 __cxa_finalize +00000000 w D *UND* 00000000 __gmon_start__ +00000000 w D *UND* 00000000 _ITM_registerTMCloneTable +00002010 g D .data 00000000 Base _edata +00002014 g D .bss 00000000 Base _end +000005d0 g DF .text 00000002 Base symbol42_mips_and_optional +00002010 g D .bss 00000000 Base __bss_start +00000438 g DF .init 00000000 Base _init +000005c0 g DF .text 00000002 Base symbol31_randomtag +000005a0 g DF .text 00000002 Base symbol24_32 +000005e4 g DF .fini 00000000 Base _fini +000005e0 g DF .text 00000002 Base symbol51_untagged +00000580 g DF .text 00000002 Base symbol11_optional +00000590 g DF .text 00000002 Base symbol23_mips +000005b0 g DF .text 00000002 Base symbol27_big + + +DYNAMIC RELOCATION RECORDS +OFFSET TYPE VALUE +00001f18 R_386_RELATIVE *ABS* +00001f1c R_386_RELATIVE *ABS* +0000200c R_386_RELATIVE *ABS* +00001ff0 R_386_GLOB_DAT _ITM_deregisterTMCloneTable +00001ff4 R_386_GLOB_DAT __cxa_finalize@GLIBC_2.1.3 +00001ff8 R_386_GLOB_DAT __gmon_start__ +00001ffc R_386_GLOB_DAT _ITM_registerTMCloneTable + + diff --git a/scripts/t/Dpkg_Shlibs/objdump.dbd-pg b/scripts/t/Dpkg_Shlibs/objdump.dbd-pg new file mode 100644 index 0000000..c515dff --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/objdump.dbd-pg @@ -0,0 +1,309 @@ + +/usr/lib/perl5/auto/DBD/Pg/Pg.so: file format elf32-i386 +architecture: i386, flags 0x00000150: +HAS_SYMS, DYNAMIC, D_PAGED +start address 0x000048f0 + +Program Header: + LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12 + filesz 0x00020c10 memsz 0x00020c10 flags r-x + LOAD off 0x00021000 vaddr 0x00021000 paddr 0x00021000 align 2**12 + filesz 0x00000c70 memsz 0x00000c74 flags rw- + DYNAMIC off 0x00021014 vaddr 0x00021014 paddr 0x00021014 align 2**2 + filesz 0x000000d0 memsz 0x000000d0 flags rw- + STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2 + filesz 0x00000000 memsz 0x00000000 flags rw- + +Dynamic Section: + NEEDED libpq.so.5 + NEEDED libc.so.6 + INIT 0x3d00 + FINI 0x1d854 + HASH 0xb4 + GNU_HASH 0x7e8 + STRTAB 0x1c30 + SYMTAB 0xbd0 + STRSZ 0xfa4 + SYMENT 0x10 + PLTGOT 0x211c8 + PLTRELSZ 0x5d8 + PLTREL 0x11 + JMPREL 0x3728 + REL 0x2e20 + RELSZ 0x908 + RELENT 0x8 + VERNEED 0x2de0 + VERNEEDNUM 0x1 + VERSYM 0x2bd4 + RELCOUNT 0x52 + +Version References: + required from libc.so.6: + 0x09691f73 0x00 04 GLIBC_2.1.3 + 0x0d696911 0x00 03 GLIBC_2.1 + 0x0d696910 0x00 02 GLIBC_2.0 + +DYNAMIC SYMBOL TABLE: +00000000 D *UND* 00000000 Perl_Top_ptr +00000000 DF *UND* 00000034 GLIBC_2.0 sprintf +00000000 DF *UND* 00000014 PQcmdStatus +00000000 D *UND* 00000000 Perl_mg_get +00000000 D *UND* 00000000 Perl_sv_setiv +00000000 D *UND* 00000000 Perl_is_utf8_string +00000000 D *UND* 00000000 Perl_sv_free +00000000 DF *UND* 00000011 PQpass +00000000 DF *UND* 00000191 PQputCopyEnd +00000000 D *UND* 00000000 Perl_av_len +00000000 D *UND* 00000000 Perl_get_sv +00000000 D *UND* 00000000 PerlIO_printf +00000000 D *UND* 00000000 Perl_Tstack_base_ptr +00000000 D *UND* 00000000 Perl_newRV_noinc +00000000 DF *UND* 000000ba lo_tell +00000000 DF *UND* 00000058 PQconsumeInput +00000000 w D *UND* 00000000 __gmon_start__ +00000000 w D *UND* 00000000 _Jv_RegisterClasses +00000000 DF *UND* 00000175 PQgetResult +00000000 D *UND* 00000000 Perl_Tstack_max_ptr +00000000 D *UND* 00000000 Perl_av_make +00000000 DF *UND* 0000004d PQfmod +00000000 DF *UND* 00000024 PQprotocolVersion +00000000 D *UND* 00000000 Perl_sv_2uv +00000000 DF *UND* 00000021 PQsetNoticeProcessor +00000000 DF *UND* 000000c6 GLIBC_2.0 strncpy +00000000 DF *UND* 00000014 PQstatus +00000000 D *UND* 00000000 Perl_Isv_yes_ptr +00000000 DF *UND* 00000058 GLIBC_2.0 memset +00000000 D *UND* 00000000 Perl_warn_nocontext +00000000 D *UND* 00000000 Perl_sv_2mortal +00000000 D *UND* 00000000 Perl_Tstack_sp_ptr +00000000 DF *UND* 00000014 PQresultStatus +00000000 DF *UND* 00000045 GLIBC_2.0 __strtol_internal +00000000 DF *UND* 00000019 PQhost +00000000 D *UND* 00000000 Perl_sv_setpv +00000000 D *UND* 00000000 Perl_av_undef +00000000 DF *UND* 000000e2 lo_lseek +00000000 DF *UND* 0000004d PQftable +00000000 D *UND* 00000000 Perl_form +00000000 DF *UND* 00000024 PQbackendPID +00000000 DF *UND* 00000010 PQntuples +00000000 DF *UND* 00000099 PQoidValue +00000000 DF *UND* 00000040 PQnotifies +00000000 DF *UND* 0000004d PQftype +00000000 DF *UND* 00000048 PQgetisnull +00000000 DF *UND* 00000033 PQresultErrorField +00000000 D *UND* 00000000 Perl_Tmarkstack_max_ptr +00000000 DF *UND* 000000bb lo_creat +00000000 DF *UND* 00000245 lo_export +00000000 D *UND* 00000000 pthread_getspecific +00000000 DF *UND* 0000005d PQexec +00000000 DF *UND* 00000020 PQsetErrorVerbosity +00000000 DF *UND* 00000041 PQconnectdb +00000000 DF *UND* 0000001c PQserverVersion +00000000 D *UND* 00000000 Perl_sv_2iv +00000000 DF *UND* 0000003e PQuntrace +00000000 DF *UND* 00000036 PQtrace +00000000 D *UND* 00000000 PerlIO_findFILE +00000000 D *UND* 00000000 Perl_av_extend +00000000 DF *UND* 00000046 GLIBC_2.0 memcpy +00000000 DF *UND* 000000af GLIBC_2.0 strlen +00000000 D *UND* 00000000 Perl_sv_upgrade +00000000 DF *UND* 00000041 PQendcopy +00000000 D *UND* 00000000 Perl_hv_store_ent +00000000 D *UND* 00000000 Perl_av_store +00000000 DF *UND* 0000009e PQexecPrepared +00000000 D *UND* 00000000 Perl_sv_setpvn +00000000 DF *UND* 000000ce lo_read +00000000 DF *UND* 00000024 GLIBC_2.0 strcpy +00000000 D *UND* 00000000 Perl_hv_fetch +00000000 DF *UND* 00000011 PQoptions +00000000 D *UND* 00000000 Perl_stack_grow +00000000 DF *UND* 00000011 PQdb +00000000 DF *UND* 000001fa lo_import +00000000 D *UND* 00000000 Perl_Tcurpad_ptr +00000000 DF *UND* 00000014 PQsocket +00000000 D *UND* 00000000 Perl_sv_newmortal +00000000 D *UND* 00000000 Perl_av_fetch +00000000 DF *UND* 00000011 PQuser +00000000 DF *UND* 00000084 PQprepare +00000000 DF *UND* 00000023 PQfreemem +00000000 D *UND* 00000000 Perl_Tdirty_ptr +00000000 DF *UND* 00000062 GLIBC_2.0 strcasecmp +00000000 DF *UND* 0000004d PQftablecol +00000000 DF *UND* 000000ba lo_unlink +00000000 D *UND* 00000000 Perl_call_method +00000000 D *UND* 00000000 Perl_Tmarkstack_ptr_ptr +00000000 DF *UND* 00000029 PQtransactionStatus +00000000 DF *UND* 0000002c PQfname +00000000 D *UND* 00000000 Perl_newSV +00000000 D *UND* 00000000 Perl_mg_set +00000000 D *UND* 00000000 Perl_sv_2io +00000000 DF *UND* 0000012c PQputCopyData +00000000 D *UND* 00000000 Perl_safesysrealloc +00000000 DF *UND* 000000ab PQexecParams +00000000 D *UND* 00000000 Perl_newSViv +00000000 DF *UND* 000000a4 PQgetCopyData +00000000 D *UND* 00000000 Perl_sv_unref +00000000 DF *UND* 00000027 PQfinish +00000000 D *UND* 00000000 Perl_Isv_no_ptr +00000000 D *UND* 00000000 Perl_mg_find +00000000 DF *UND* 00000035 PQerrorMessage +00000000 D *UND* 00000000 Perl_newAV +00000000 DF *UND* 000001aa GLIBC_2.0 strcat +00000000 D *UND* 00000000 Perl_croak_nocontext +00000000 D *UND* 00000000 Perl_sv_grow +00000000 DF *UND* 000000c6 GLIBC_2.1 __rawmemchr +00000000 DF *UND* 00000011 PQnfields +00000000 D *UND* 00000000 Perl_av_pop +00000000 DF *UND* 000000cd lo_open +00000000 D *UND* 00000000 Perl_safesysmalloc +00000000 D *UND* 00000000 Perl_newSVpv +00000000 D *UND* 00000000 pow +00000000 DF *UND* 00000034 GLIBC_2.0 sscanf +00000000 D *UND* 00000000 Perl_mg_size +00000000 D *UND* 00000000 Perl_av_push +00000000 D *UND* 00000000 Perl_Tna_ptr +00000000 DF *UND* 000000f3 GLIBC_2.0 strncmp +00000000 D *UND* 00000000 PL_memory_wrap +00000000 D *UND* 00000000 Perl_croak +00000000 D *UND* 00000000 Perl_Isv_undef_ptr +00000000 D *UND* 00000000 Perl_safesysfree +00000000 DF *UND* 00000011 PQport +00000000 DF *UND* 0000003f PQgetvalue +00000000 DF *UND* 0000003b GLIBC_2.0 snprintf +00000000 D *UND* 00000000 Perl_newXS +00000000 DF *UND* 000000ba lo_close +00000000 D *UND* 00000000 Perl_newSVuv +00000000 D *UND* 00000000 Perl_sv_2bool +00000000 D *UND* 00000000 Perl_newHV +00000000 D *UND* 00000000 Perl_Gthr_key_ptr +00000000 DF *UND* 00000054 GLIBC_2.0 strcmp +00000000 w DF *UND* 00000176 GLIBC_2.1.3 __cxa_finalize +00000000 D *UND* 00000000 Perl_newSVpvn +00000000 D *UND* 00000000 Perl_markstack_grow +00000000 DF *UND* 000000eb lo_write +00000000 DF *UND* 00000175 PQcmdTuples +00000000 D *UND* 00000000 Perl_newRV +00000000 DF *UND* 0000004d PQfsize +00000000 D *UND* 00000000 Perl_sv_backoff +00000000 D *UND* 00000000 Perl_dowantarray +00000000 DF *UND* 0000006e PQclear +00000000 D *UND* 00000000 Perl_sv_2pv_flags +0000b0b0 g DF .text 000001a6 Base XS_DBD__Pg__db__ping +00006bc0 g DF .text 0000025f Base XS_DBD__Pg__db__pg_type_info +0001cac0 g DF .text 00000059 Base dequote_bool +00007f00 g DF .text 0000026b Base XS_DBD__Pg__db_putline +00007100 g DF .text 000001a0 Base XS_DBD__Pg__db_endcopy +00006e20 g DF .text 00000133 Base XS_DBD__Pg__db_pg_server_untrace +0000a750 g DF .text 000002d3 Base XS_DBD__Pg__db_pg_rollback_to +00012e00 g DF .text 00000211 Base pg_db_release +00018120 g DF .text 00001707 Base dbd_st_prepare +000138a0 g DF .text 00000234 Base pg_db_getline +00010800 g DF .text 0000062a Base XS_DBD__Pg__db_selectall_arrayref +0000ad10 g DF .text 000001a6 Base XS_DBD__Pg__db_pg_notifies +00007990 g DF .text 0000056c Base XS_DBD__Pg__db_pg_getline +00013270 g DF .text 0000020a Base pg_db_savepoint +00009640 g DF .text 00000619 Base XS_DBD__Pg__db_lo_read +00010e30 g DF .text 00000413 Base XS_DBD__Pg__db__login +0001a890 g DF .text 00000022 Base dbd_db_rollback +0001b150 g DF .text 000006d7 Base dbd_db_login +00019a60 g DF .text 000000ae Base dbd_db_getfd +00019e60 g DF .text 00000657 Base dbd_db_FETCH_attrib +0001d020 g DF .text 000000b2 Base quote_bool +00010020 g DF .text 0000020e Base XS_DBD__Pg__db_commit +0001ca90 g DF .text 00000028 Base dequote_char +00012cf0 g DF .text 00000104 Base pg_db_lo_creat +00007440 g DF .text 00000542 Base XS_DBD__Pg__db_getline +00006f60 g DF .text 00000194 Base XS_DBD__Pg__db_pg_server_trace +00012be0 g DF .text 00000103 Base pg_db_lo_write +0000db20 g DF .text 00000608 Base XS_DBD__Pg__st_blob_read +0000aa30 g DF .text 000002d3 Base XS_DBD__Pg__db_pg_savepoint +0000bcb0 g DF .text 000002d8 Base XS_DBD__Pg__st_execute +0001d0e0 g DF .text 00000156 Base quote_bytea +00008e70 g DF .text 000003db Base XS_DBD__Pg__db_lo_lseek +0001cb20 g DF .text 000000c2 Base quote_circle +0000e950 g DF .text 00000266 Base XS_DBD__Pg__st_fetchall_arrayref +0001d780 g DF .text 0000009b Base sql_type_data +00021c70 g D *ABS* 00000000 Base _edata +00015df0 g DF .text 00000155 Base dbd_st_finish +0000d220 g DF .text 000003f4 Base XS_DBD__Pg__st_DESTROY +0000aec0 g DF .text 000001e5 Base XS_DBD__Pg__db_getfd +0001ccc0 g DF .text 000000b2 Base quote_geom +0001d2e0 g DF .text 00000497 Base pg_type_data +00015c30 g DF .text 000001b5 Base dbd_db_ping +0001d854 g DF .fini 00000000 Base _fini +00013560 g DF .text 000000e7 Base pg_db_pg_server_trace +000127b0 g DF .text 00000118 Base pg_db_lo_open +00003d00 g DF .init 00000000 Base _init +0000e130 g DF .text 0000022f Base XS_DBD__Pg__st_fetchrow_array +0001cbf0 g DF .text 000000c2 Base quote_path +00015930 g DF .text 000002f9 Base dbd_st_destroy +00011450 g DF .text 00000336 Base XS_DBD__Pg_constant +00014fb0 g DF .text 0000029e Base dbd_st_STORE_attrib +0000cac0 g DF .text 000004bc Base XS_DBD__Pg__st_bind_param +0000f190 g DF .text 0000020e Base XS_DBD__Pg__db_rollback +00004990 g DF .text 00001e07 Base boot_DBD__Pg +00021c70 g D *ABS* 00000000 Base __bss_start +0001ca60 g DF .text 00000028 Base dequote_string +0000d840 g DF .text 000002d2 Base XS_DBD__Pg__st_STORE +00008170 g DF .text 0000026b Base XS_DBD__Pg__db_pg_putline +0001c790 g DF .text 00000295 Base pg_quickexec +000072a0 g DF .text 0000019f Base XS_DBD__Pg__db_pg_endcopy +00008700 g DF .text 0000028b Base XS_DBD__Pg__db_lo_import +00019830 g DF .text 0000022b Base dbd_db_pg_notifies +00011ab0 g DF .text 000000ee Base pg_db_lo_close +0001ae70 g DF .text 000001c6 Base dbd_db_disconnect +00021c74 g D *ABS* 00000000 Base _end +0000cf80 g DF .text 000002a0 Base XS_DBD__Pg__st_finish +00019b10 g DF .text 00000343 Base dbd_discon_all +00011790 g DF .text 00000050 Base dbd_init +000117e0 g DF .text 000000a9 Base dbd_st_rows +0001a8c0 g DF .text 00000022 Base dbd_db_commit +00009ec0 g DF .text 0000032b Base XS_DBD__Pg__db_lo_open +0001ce70 g DF .text 000000fe Base dequote_bytea +0000ebc0 g DF .text 000001f0 Base XS_DBD__Pg__st_rows +0000bf90 g DF .text 0000056d Base XS_DBD__Pg__db_quote +0001cfb0 g DF .text 0000006c Base quote_integer +0000d620 g DF .text 0000021b Base XS_DBD__Pg__st_FETCH_attrib +00013480 g DF .text 000000e0 Base pg_db_pg_server_untrace +0000a1f0 g DF .text 0000027c Base XS_DBD__Pg__db_lo_creat +00009250 g DF .text 000003eb Base XS_DBD__Pg__db_lo_write +000067a0 g DF .text 00000208 Base XS_DBD__Pg__st_state +0001ca30 g DF .text 00000028 Base null_dequote +00013020 g DF .text 00000250 Base pg_db_rollback_to +00010230 g DF .text 000005cb Base XS_DBD__Pg__db_selectrow_arrayref +00008990 g DF .text 0000025b Base XS_DBD__Pg__db_lo_unlink +000128d0 g DF .text 00000104 Base pg_db_lo_import +0000fb30 g DF .text 0000020a Base XS_DBD__Pg__db_FETCH +00012af0 g DF .text 000000ee Base pg_db_lo_tell +0000a470 g DF .text 000002d3 Base XS_DBD__Pg__db_pg_release +00011250 g DF .text 000001fa Base XS_DBD__Pg__dr_discon_all_ +00013ce0 g DF .text 000012cd Base dbd_st_FETCH_attrib +0000b860 g DF .text 00000450 Base XS_DBD__Pg__db_do +0000edb0 g DF .text 000003d6 Base XS_DBD__Pg__st__prepare +0001d240 g DF .text 0000003f Base quote_sql_binary +0000fd40 g DF .text 000002d2 Base XS_DBD__Pg__db_STORE +000083e0 g DF .text 0000031b Base XS_DBD__Pg__db_lo_export +0001cd80 g DF .text 000000e4 Base quote_string +0000f3a0 g DF .text 00000378 Base XS_DBD__Pg__db_disconnect +0000c500 g DF .text 000005be Base XS_DBD__Pg__st_bind_param_inout +0000f720 g DF .text 0000040e Base XS_DBD__Pg__db_DESTROY +00013ae0 g DF .text 000001f4 Base pg_db_putline +00013650 g DF .text 00000244 Base pg_db_endcopy +00016b40 g DF .text 000015d1 Base dbd_st_execute +000129e0 g DF .text 00000110 Base pg_db_lo_unlink +0001cf70 g DF .text 00000038 Base dequote_sql_binary +00011890 g DF .text 0000010a Base pg_db_lo_lseek +0001d280 g DF .text 00000055 Base null_quote +00008bf0 g DF .text 0000027c Base XS_DBD__Pg__db_lo_tell +0001a8f0 g DF .text 00000579 Base dbd_db_STORE_attrib +0001b9a0 g DF .text 00000def Base dbd_bind_ph +000119a0 g DF .text 00000103 Base pg_db_lo_read +00015f50 g DF .text 000006ed Base dbd_st_fetch +0000e360 g DF .text 00000224 Base XS_DBD__Pg__st_fetchrow_arrayref +000069b0 g DF .text 00000208 Base XS_DBD__Pg__db_state +00012690 g DF .text 00000118 Base pg_db_lo_export +0001b040 g DF .text 0000010f Base dbd_db_destroy +00009c60 g DF .text 0000025b Base XS_DBD__Pg__db_lo_close +00011ea0 g DF .text 00000379 Base dbd_st_blob_read + + diff --git a/scripts/t/Dpkg_Shlibs/objdump.glib-ia64 b/scripts/t/Dpkg_Shlibs/objdump.glib-ia64 new file mode 100644 index 0000000..a3ff4d8 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/objdump.glib-ia64 @@ -0,0 +1,350 @@ + +/usr/lib/libglib-2.0.so.0: file format elf64-little +architecture: ia64-elf64, flags 0x00000150: +HAS_SYMS, DYNAMIC, D_PAGED +start address 0x000000000002dc40 + +Program Header: + LOAD off 0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**16 + filesz 0x0000000000158820 memsz 0x0000000000158820 flags r-x + LOAD off 0x0000000000158820 vaddr 0x0000000000168820 paddr 0x0000000000168820 align 2**16 + filesz 0x0000000000001498 memsz 0x0000000000001a90 flags rw- + DYNAMIC off 0x0000000000158948 vaddr 0x0000000000168948 paddr 0x0000000000168948 align 2**3 + filesz 0x00000000000001f0 memsz 0x00000000000001f0 flags rw- + STACK off 0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**3 + filesz 0x0000000000000000 memsz 0x0000000000000000 flags rw- +0x70000001 off 0x0000000000150e28 vaddr 0x0000000000150e28 paddr 0x0000000000150e28 align 2**3 + filesz 0x00000000000079f8 memsz 0x00000000000079f8 flags r-- + +Dynamic Section: + NEEDED libc.so.6.1 + SONAME libglib-2.0.so.0 + INIT 0x15070 + FINI 0x106360 + INIT_ARRAY 0x168820 + INIT_ARRAYSZ 0x18 + FINI_ARRAY 0x168838 + FINI_ARRAYSZ 0x8 + HASH 0x158 + GNU_HASH 0x25c8 + STRTAB 0xc4c0 + SYMTAB 0x4a38 + STRSZ 0x5deb + SYMENT 0x18 + 0x70000000 0x168dd8 + PLTGOT 0x168dd8 + PLTRELSZ 0xcd8 + PLTREL 0x7 + JMPREL 0x14398 + RELA 0x12d18 + RELASZ 0x1680 + RELAENT 0x18 + VERNEED 0x12ce8 + VERNEEDNUM 0x1 + VERSYM 0x122ac + RELACOUNT 0x60 + +Version References: + required from libc.so.6.1: + 0x0d696913 0x00 03 GLIBC_2.3 + 0x0d696912 0x00 02 GLIBC_2.2 + +DYNAMIC SYMBOL TABLE: +00000000000bbaa0 l DF .text 00000000000006b0 .hidden IA__g_thread_pool_new +000000000007b730 l DF .text 0000000000000200 .hidden IA__g_option_group_free +00000000000b2f30 l DF .text 0000000000000060 .hidden IA__g_str_equal +00000000000cd0c0 l DF .text 0000000000000010 .hidden IA__g_direct_hash +0000000000095660 l DF .text 00000000000001d0 .hidden IA__g_scanner_warn +00000000001062e0 l DF .text 0000000000000080 .hidden __do_global_ctors_aux +0000000000071fe0 l DF .text 00000000000000f0 .hidden IA__g_free +0000000000074a30 l DF .text 0000000000000370 .hidden _g_log_fallback_handler +0000000000077080 l DF .text 0000000000000a20 .hidden IA__g_log_default_handler +00000000000afc90 l DF .text 0000000000000090 .hidden IA__g_str_hash +0000000000095830 l DF .text 00000000000001f0 .hidden IA__g_scanner_error +00000000000d4d60 l DF .text 0000000000000290 g_io_unix_get_flags +00000000000d4a60 l DF .text 0000000000000120 g_io_unix_set_flags +00000000000d4b80 l DF .text 0000000000000020 g_io_unix_free +00000000000d4ba0 l DF .text 00000000000000c0 g_io_unix_create_watch +00000000000d4c60 l DF .text 0000000000000100 g_io_unix_close +00000000000d4ff0 l DF .text 00000000000001f0 g_io_unix_seek +00000000000d51e0 l DF .text 0000000000000150 g_io_unix_write +00000000000d5330 l DF .text 0000000000000180 g_io_unix_read +00000000000d4820 l DF .text 0000000000000030 g_io_unix_finalize +00000000000d4950 l DF .text 0000000000000110 g_io_unix_dispatch +00000000000d4850 l DF .text 0000000000000080 g_io_unix_check +00000000000d48d0 l DF .text 0000000000000080 g_io_unix_prepare +00000000000cd720 l DF .text 0000000000000090 language_names_cache_free +00000000000c89f0 l DF .text 0000000000000090 charset_cache_free +00000000000c20f0 l DF .text 0000000000000050 interval_compare +00000000000bb270 l DF .text 0000000000000830 g_thread_pool_thread_proxy +00000000000b3360 l DF .text 0000000000000050 g_thread_fail +00000000000b33b0 l DF .text 00000000000000c0 gettime +00000000000b8c70 l DF .text 00000000000004a0 g_thread_cleanup +00000000000b6790 l DF .text 00000000000003b0 g_thread_create_proxy +00000000000a37a0 l DF .text 0000000000000320 private_thread_memory_cleanup +000000000009a7d0 l DF .text 00000000000000e0 iter_compare +0000000000094c10 l DF .text 0000000000000060 g_scanner_destroy_symbol_table_entry +0000000000095f50 l DF .text 00000000000001b0 g_scanner_msg_handler +0000000000096100 l DF .text 00000000000000a0 g_scanner_key_equal +0000000000093210 l DF .text 0000000000000080 g_scanner_key_hash +0000000000093290 l DF .text 00000000000000c0 g_scanner_foreach_internal +0000000000092510 l DF .text 00000000000004a0 interpolate_replacement +000000000008cd60 l DF .text 0000000000000050 literal_replacement +000000000008cd00 l DF .text 0000000000000060 free_interpolation_data +0000000000089190 l DF .text 0000000000000040 relation_delete_value_tuple +0000000000089c20 l DF .text 0000000000000030 g_relation_free_array +0000000000089690 l DF .text 0000000000000210 g_relation_delete_tuple +00000000000895a0 l DF .text 00000000000000f0 g_relation_select_tuple +0000000000088c30 l DF .text 00000000000000a0 g_relation_print_index +0000000000088cd0 l DF .text 0000000000000170 g_relation_print_one +00000000000889a0 l DF .text 0000000000000020 tuple_hash_2 +0000000000088940 l DF .text 0000000000000060 tuple_equal_2 +000000000007bc50 l DF .text 0000000000000050 dgettext_swapped +00000000000787b0 l DF .text 0000000000000040 g_node_find_func +0000000000071570 l DF .text 0000000000000200 profiler_try_realloc +0000000000071770 l DF .text 0000000000000150 profiler_try_malloc +0000000000073410 l DF .text 0000000000000190 profiler_calloc +00000000000718c0 l DF .text 00000000000001c0 profiler_free +0000000000073380 l DF .text 0000000000000090 profiler_realloc +00000000000735a0 l DF .text 0000000000000090 profiler_malloc +0000000000071a80 l DF .text 00000000000000d0 fallback_calloc +000000000005a2b0 l DF .text 0000000000000040 g_source_callback_get +000000000005d650 l DF .text 00000000000000e0 g_source_callback_unref +000000000005a290 l DF .text 0000000000000020 g_source_callback_ref +000000000005a340 l DF .text 00000000000000c0 g_idle_dispatch +000000000005a330 l DF .text 0000000000000010 g_idle_check +000000000005a310 l DF .text 0000000000000020 g_idle_prepare +000000000005a400 l DF .text 00000000000000c0 g_child_watch_dispatch +000000000005a5c0 l DF .text 0000000000000020 g_child_watch_check +000000000005a5e0 l DF .text 0000000000000030 g_child_watch_prepare +0000000000060390 l DF .text 0000000000000160 g_timeout_dispatch +00000000000604f0 l DF .text 00000000000000f0 g_timeout_check +00000000000605e0 l DF .text 0000000000000310 g_timeout_prepare +000000000005cc20 l DF .text 0000000000000030 g_main_dispatch_free +000000000005b130 l DF .text 00000000000000b0 g_child_watch_signal_handler +00000000000619f0 l DF .text 00000000000002e0 child_watch_helper_thread +000000000004d830 l DF .text 00000000000000b0 g_key_file_key_value_pair_free +0000000000041860 l DF .text 0000000000000090 default_finalize_hook +000000000002b370 l DF .text 0000000000000090 filename_charset_cache_free +000000000001fe80 l DF .text 0000000000000440 text_raw_cb +0000000000020660 l DF .text 0000000000000480 end_element_raw_cb +0000000000026110 l DF .text 0000000000001cf0 start_element_raw_cb +000000000001e790 l DF .text 0000000000000060 parse_data_free +000000000001e6e0 l DF .text 00000000000000b0 bookmark_app_info_free +000000000001e960 l DF .text 0000000000000260 bookmark_item_free +000000000001c300 l DF .text 0000000000000020 stack_trace_sigchld +0000000000019a00 l DF .text 0000000000000070 g_async_queue_invert_compare +0000000000016be0 l DF .text 0000000000000080 __do_jv_register_classes +0000000000016b20 l DF .text 00000000000000b0 __do_global_dtors_aux +0000000000016aa0 l DF .text 0000000000000070 gmon_initializer +0000000000000000 DF *UND* 0000000000000370 GLIBC_2.2 getpwuid +0000000000000000 DF *UND* 0000000000000550 GLIBC_2.2 freopen +0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 __strtod_internal +0000000000000000 DF *UND* 0000000000000240 GLIBC_2.2 feof +0000000000000000 DF *UND* 0000000000000450 GLIBC_2.2 localeconv +0000000000000000 DF *UND* 00000000000001e0 GLIBC_2.2 strcpy +0000000000000000 DF *UND* 0000000000000200 GLIBC_2.2 raise +0000000000000000 DO *UND* 0000000000000008 GLIBC_2.2 environ +0000000000000000 DF *UND* 0000000000000030 GLIBC_2.2 getuid +0000000000000000 DF *UND* 0000000000000180 GLIBC_2.2 waitpid +0000000000000000 DF *UND* 0000000000000100 GLIBC_2.2 strcasecmp +0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 select +0000000000000000 DF *UND* 0000000000000110 GLIBC_2.2 closedir +0000000000000000 DF *UND* 0000000000000440 GLIBC_2.2 fwrite +0000000000000000 DF *UND* 00000000000001d0 GLIBC_2.2 rewinddir +0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 close +0000000000000000 DF *UND* 0000000000000280 GLIBC_2.2 strstr +0000000000000000 DF *UND* 0000000000000080 GLIBC_2.2 time +0000000000000000 DF *UND* 0000000000000520 GLIBC_2.2 fdopen +0000000000000000 w D *UND* 0000000000000000 __gmon_start__ +0000000000000000 w D *UND* 0000000000000000 _Jv_RegisterClasses +0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 wcsxfrm +0000000000000000 DF *UND* 00000000000000c0 GLIBC_2.2 strncasecmp +0000000000000000 DF *UND* 00000000000000d0 GLIBC_2.2 remove +0000000000000000 DF *UND* 00000000000004f0 GLIBC_2.2 malloc +0000000000000000 DF *UND* 0000000000000080 GLIBC_2.2 execve +0000000000000000 DF *UND* 00000000000000b0 GLIBC_2.2 fprintf +0000000000000000 DF *UND* 0000000000000200 GLIBC_2.2 setpwent +0000000000000000 DF *UND* 0000000000000100 GLIBC_2.2 nl_langinfo +0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 chdir +0000000000000000 DF *UND* 0000000000000100 GLIBC_2.2 gethostname +0000000000000000 w DO *UND* 0000000000000008 GLIBC_2.2 _environ +0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 rmdir +0000000000000000 DF *UND* 0000000000000390 GLIBC_2.2 fputc +0000000000000000 DF *UND* 0000000000000170 GLIBC_2.2 poll +0000000000000000 DF *UND* 00000000000003e0 GLIBC_2.2 getcwd +0000000000000000 DO *UND* 0000000000000008 GLIBC_2.2 stdin +0000000000000000 DF *UND* 00000000000004f0 GLIBC_2.2 getpwnam_r +0000000000000000 DF *UND* 0000000000000520 GLIBC_2.2 memmove +0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 __strtoul_internal +0000000000000000 DO *UND* 0000000000000008 GLIBC_2.2 stdout +0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 strncmp +0000000000000000 DF *UND* 0000000000000320 GLIBC_2.2 vasprintf +0000000000000000 DF *UND* 0000000000000210 GLIBC_2.2 endpwent +0000000000000000 DF *UND* 00000000000001f0 GLIBC_2.2 fcntl +0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 dup2 +0000000000000000 DF *UND* 00000000000007e0 GLIBC_2.2 fork +0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 gmtime +0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 readlink +0000000000000000 DF *UND* 0000000000000080 GLIBC_2.3 __ctype_toupper_loc +0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 lseek +0000000000000000 DF *UND* 00000000000000c0 GLIBC_2.2 __fxstat +0000000000000000 DF *UND* 00000000000000b0 GLIBC_2.2 fscanf +0000000000000000 DO *UND* 0000000000000008 GLIBC_2.2 __environ +0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 munmap +0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 strftime +0000000000000000 DF *UND* 00000000000003a0 GLIBC_2.2 fread +0000000000000000 DF *UND* 0000000000007090 GLIBC_2.2 vfprintf +0000000000000000 DF *UND* 00000000000000b0 GLIBC_2.2 snprintf +0000000000000000 DF *UND* 0000000000000330 GLIBC_2.2 iconv_open +0000000000000000 DF *UND* 0000000000000080 GLIBC_2.3 __ctype_b_loc +0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 nanosleep +0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 pipe +0000000000000000 DF *UND* 0000000000000090 GLIBC_2.2 strpbrk +0000000000000000 DF *UND* 0000000000000640 GLIBC_2.2 realloc +0000000000000000 DF *UND* 0000000000000240 GLIBC_2.2 ferror +0000000000000000 DF *UND* 00000000000004f0 GLIBC_2.2 getpwuid_r +0000000000000000 DF *UND* 0000000000000030 GLIBC_2.2 strcmp +0000000000000000 DF *UND* 00000000000000e0 GLIBC_2.2 setenv +0000000000000000 DF *UND* 0000000000000650 GLIBC_2.2 fclose +0000000000000000 w DF *UND* 0000000000000220 GLIBC_2.2 __cxa_finalize +0000000000000000 DF *UND* 0000000000000020 GLIBC_2.2 __errno_location +0000000000000000 DF *UND* 00000000000002c0 GLIBC_2.2 exit +0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 open +0000000000000000 DF *UND* 0000000000000590 GLIBC_2.2 abort +0000000000000000 DF *UND* 0000000000000400 GLIBC_2.2 fputs +0000000000000000 DF *UND* 00000000000000a0 GLIBC_2.2 sigemptyset +0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 localtime_r +0000000000000000 DF *UND* 00000000000000b0 GLIBC_2.2 sprintf +0000000000000000 DF *UND* 00000000000002c0 GLIBC_2.2 unsetenv +0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 mmap +0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 mkdir +0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 creat +0000000000000000 DF *UND* 00000000000000d0 GLIBC_2.2 getpid +0000000000000000 DF *UND* 0000000000000170 GLIBC_2.2 strerror +0000000000000000 DF *UND* 0000000000000220 GLIBC_2.2 memcmp +0000000000000000 DF *UND* 0000000000000320 GLIBC_2.2 qsort +0000000000000000 DF *UND* 0000000000000c70 GLIBC_2.2 sysconf +0000000000000000 DF *UND* 0000000000000190 GLIBC_2.2 bsearch +0000000000000000 DF *UND* 00000000000001b0 GLIBC_2.2 signal +0000000000000000 DF *UND* 00000000000000c0 GLIBC_2.2 __xstat +0000000000000000 DF *UND* 00000000000000c0 GLIBC_2.2 __lxstat +0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 wcscoll +0000000000000000 DF *UND* 0000000000000160 GLIBC_2.2 vsprintf +0000000000000000 DF *UND* 0000000000000130 GLIBC_2.2 vsnprintf +0000000000000000 DF *UND* 00000000000003e0 GLIBC_2.2 strncpy +0000000000000000 DF *UND* 00000000000002e0 GLIBC_2.2 getenv +0000000000000000 DF *UND* 0000000000000120 GLIBC_2.2 strchr +0000000000000000 DF *UND* 00000000000008c0 GLIBC_2.2 calloc +0000000000000000 DF *UND* 00000000000000a0 GLIBC_2.2 __cxa_atexit +0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 write +0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 stpcpy +0000000000000000 DF *UND* 0000000000000450 GLIBC_2.2 fgets +0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 rename +0000000000000000 DF *UND* 0000000000000310 GLIBC_2.2 __uflow +0000000000000000 DF *UND* 0000000000000410 GLIBC_2.2 memset +0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 fopen +0000000000000000 DF *UND* 0000000000000050 GLIBC_2.2 __strtol_internal +0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 unlink +0000000000000000 DF *UND* 0000000000000430 GLIBC_2.2 iconv +0000000000000000 DF *UND* 00000000000001b0 GLIBC_2.2 perror +0000000000000000 DF *UND* 0000000000000880 GLIBC_2.2 execvp +0000000000000000 DF *UND* 0000000000000330 GLIBC_2.2 ungetc +0000000000000000 DF *UND* 0000000000000140 GLIBC_2.2 _exit +0000000000000000 DF *UND* 0000000000000080 GLIBC_2.3 __ctype_tolower_loc +0000000000000000 DF *UND* 0000000000000070 GLIBC_2.2 bindtextdomain +0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 chmod +0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 timegm +0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 read +0000000000000000 DF *UND* 0000000000000300 GLIBC_2.2 readdir +0000000000000000 DF *UND* 0000000000000300 GLIBC_2.2 free +0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 dcgettext +0000000000000000 DF *UND* 00000000000000e0 GLIBC_2.2 strrchr +0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 access +0000000000000000 DF *UND* 0000000000000390 GLIBC_2.2 fflush +0000000000000000 DF *UND* 0000000000000070 GLIBC_2.2 bind_textdomain_codeset +0000000000000000 DF *UND* 00000000000001c0 GLIBC_2.2 opendir +0000000000000000 DF *UND* 0000000000000530 GLIBC_2.2 strsignal +0000000000000000 DF *UND* 0000000000000070 GLIBC_2.2 isatty +0000000000000000 DF *UND* 0000000000000130 GLIBC_2.2 posix_memalign +0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 gettimeofday +0000000000000000 DF *UND* 00000000000000a0 GLIBC_2.2 iconv_close +0000000000000000 DF *UND* 0000000000000040 GLIBC_2.2 dup +0000000000000000 DF *UND* 0000000000000540 GLIBC_2.2 memcpy +0000000000000000 DO *UND* 0000000000000008 GLIBC_2.2 stderr +0000000000000000 DF *UND* 0000000000000030 GLIBC_2.2 getppid +0000000000000000 DF *UND* 0000000000000100 GLIBC_2.2 strlen +0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 execv +0000000000000000 DF *UND* 0000000000000f50 GLIBC_2.2 setlocale +0000000000000000 DF *UND* 0000000000000060 GLIBC_2.2 sigaction +00000000000909e0 g DF .text 0000000000000310 Base g_regex_match_full +0000000000038400 g DF .text 0000000000000660 Base g_date_strftime +0000000000017530 g DF .text 00000000000000f0 Base g_ptr_array_add +00000000000c6930 g DF .text 00000000000001e0 Base g_utf8_strreverse +0000000000039650 g DF .text 0000000000000030 Base g_date_set_time +00000000000cab10 g DF .text 0000000000000710 Base g_utf8_collate_key_for_filename +00000000000c26f0 g DF .text 0000000000000160 Base g_unichar_type +000000000002a930 g DF .text 0000000000000430 Base g_uri_list_extract_uris +00000000000cf850 g DF .text 0000000000000350 Base g_get_system_data_dirs +000000000008b450 g DF .text 0000000000000070 Base g_rand_new_with_seed_array +00000000000a7410 g DF .text 0000000000000080 Base g_slist_concat +0000000000033c50 g DF .text 0000000000000020 Base g_date_valid_weekday +000000000003f090 g DF .text 0000000000000190 Base g_hash_table_get_values +0000000000058710 g DF .text 0000000000000010 Base g_list_pop_allocator +000000000008c9a0 g DF .text 00000000000000b0 Base g_match_info_is_partial_match +00000000000d3620 g DF .text 0000000000000290 Base g_get_user_name +00000000000a84d0 g DF .text 0000000000000030 Base g_slist_free_1 +00000000000cccc0 g DF .text 00000000000002b0 Base g_unicode_canonical_decomposition +00000000000656e0 g DF .text 0000000000000550 Base g_main_context_unref +00000000000d42b0 g DF .text 0000000000000100 Base g_vsprintf +0000000000079f90 g DF .text 00000000000000e0 Base g_node_get_root +0000000000016df0 g DF .text 0000000000000130 Base g_ptr_array_remove_index_fast +000000000007b3b0 g DF .text 0000000000000080 Base g_option_group_set_parse_hooks +00000000000b2c80 g DF .text 0000000000000170 Base g_string_chunk_clear +0000000000021620 g DF .text 0000000000000040 Base g_bookmark_file_error_quark +0000000000088490 g DF .text 0000000000000110 Base g_queue_sort +00000000000c7c00 g DF .text 0000000000000530 Base g_utf16_to_utf8 +00000000000197e0 g DF .text 0000000000000050 Base g_byte_array_prepend +0000000000053510 g DF .text 0000000000000580 Base g_key_file_get_string_list +0000000000169a40 g DO .sdata 0000000000000008 Base glib_mem_profiler_table +00000000000a8760 g DF .text 00000000000000d0 Base g_slist_remove_link +00000000000a8130 g DF .text 0000000000000060 Base g_slist_prepend +0000000000063bf0 g DF .text 0000000000000390 Base g_main_context_find_source_by_user_data +000000000005c540 g DF .text 00000000000000d0 Base g_main_loop_is_running +000000000003c5e0 g DF .text 0000000000000030 Base g_mkstemp +00000000000b0440 g DF .text 0000000000000140 Base g_string_set_size +0000000000088160 g DF .text 0000000000000110 Base g_queue_insert_after +00000000000738a0 g DF .text 0000000000000150 Base g_log_set_default_handler +0000000000059c30 g DF .text 00000000000000b0 Base g_list_delete_link +0000000000058a10 g DF .text 0000000000000090 Base g_list_position +0000000000059110 g DF .text 0000000000000100 Base g_list_find_custom +00000000000b0990 g DF .text 00000000000000f0 Base g_string_ascii_down +00000000000629a0 g DF .text 0000000000000130 Base g_main_loop_new +000000000005acb0 g DF .text 00000000000000b0 Base g_source_get_context +0000000000033c00 g DF .text 0000000000000020 Base g_date_valid_year +00000000000a7d90 g DF .text 0000000000000030 Base g_slist_insert_sorted +000000000009f6a0 g DF .text 0000000000000f20 Base g_shell_parse_argv +00000000000bca30 g DF .text 00000000000000f0 Base g_timer_stop +0000000000099ec0 g DF .text 0000000000000120 Base g_scanner_peek_next_token +000000000002d5a0 g DF .text 00000000000000f0 Base g_filename_display_basename +00000000000305c0 g DF .text 0000000000000580 Base g_dataset_id_get_data +0000000000064a50 g DF .text 0000000000000480 Base g_source_attach +000000000003e5d0 g DF .text 0000000000000360 Base g_mkdir_with_parents +000000000001de50 g DF .text 0000000000000110 Base g_bookmark_file_has_item +0000000000065050 g DF .text 00000000000001c0 Base g_child_watch_add_full +00000000000a8830 g DF .text 0000000000000050 Base g_freopen +00000000000a8730 g DF .text 0000000000000030 Base g_slist_alloc +0000000000054a60 g DF .text 0000000000000480 Base g_key_file_get_locale_string +0000000000094fd0 g DF .text 00000000000001b0 Base g_scanner_input_file +0000000000093660 g DF .text 00000000000000a0 Base g_scanner_set_scope +0000000000022780 g DF .text 0000000000000180 Base g_bookmark_file_get_visited +000000000002f280 g DF .text 00000000000003a0 Base g_datalist_id_get_data +0000000000040000 g DF .text 00000000000000e0 Base g_hash_table_new_full +00000000000d2f40 g DF .text 0000000000000260 Base g_get_user_config_dir +0000000000059700 g DF .text 0000000000000280 Base g_list_insert_before +0000000000079270 g DF .text 00000000000000f0 Base g_node_n_children +00000000000d0680 g DF .text 0000000000000460 Base g_get_user_cache_dir +000000000006a5a0 g DF .text 00000000000000d0 Base g_markup_parse_context_get_element +00000000000aefe0 g DF .text 00000000000000a0 Base g_strndup + + diff --git a/scripts/t/Dpkg_Shlibs/objdump.internal b/scripts/t/Dpkg_Shlibs/objdump.internal new file mode 100644 index 0000000..c492a54 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/objdump.internal @@ -0,0 +1,15 @@ + +libinternal.so.0: file format elf32-littlearm +architecture: arm, flags 0x00000150: +HAS_SYMS, DYNAMIC, D_PAGED +start address 0x0000f668 + +Dynamic Section: + SONAME libinternal.so.0 + +DYNAMIC SYMBOL TABLE: +00018ef4 g DF .text 00000008 Base .gomp_critical_user_foo +0001c7f0 g DF .text 00000018 Base .gomp_critical_user_bar +00011614 g DF .text 00000014 GCC_3.0 __aeabi_lcmp +000115d8 w DF .text 00000000 GCC_4.0 __aeabi_unknown +00015378 g DF .text 0000000c Base symbol diff --git a/scripts/t/Dpkg_Shlibs/objdump.libc6-2.3 b/scripts/t/Dpkg_Shlibs/objdump.libc6-2.3 new file mode 100644 index 0000000..e761051 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/objdump.libc6-2.3 @@ -0,0 +1,2276 @@ + +/lib/libc.so.6: file format elf32-i386 +architecture: i386, flags 0x00000150: +HAS_SYMS, DYNAMIC, D_PAGED +start address 0x000161b0 + +Program Header: + PHDR off 0x00000034 vaddr 0x00000034 paddr 0x00000034 align 2**2 + filesz 0x00000120 memsz 0x00000120 flags r-x + INTERP off 0x0010f4a0 vaddr 0x0010f4a0 paddr 0x0010f4a0 align 2**0 + filesz 0x00000013 memsz 0x00000013 flags r-- + LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12 + filesz 0x00110208 memsz 0x00110208 flags r-x + LOAD off 0x00110c0c vaddr 0x00111c0c paddr 0x00111c0c align 2**12 + filesz 0x00006300 memsz 0x00008d28 flags rw- + DYNAMIC off 0x00115d3c vaddr 0x00116d3c paddr 0x00116d3c align 2**2 + filesz 0x000000e0 memsz 0x000000e0 flags rw- + NOTE off 0x00000154 vaddr 0x00000154 paddr 0x00000154 align 2**2 + filesz 0x00000020 memsz 0x00000020 flags r-- +EH_FRAME off 0x0010f4b4 vaddr 0x0010f4b4 paddr 0x0010f4b4 align 2**2 + filesz 0x00000d54 memsz 0x00000d54 flags r-- + STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2 + filesz 0x00000000 memsz 0x00000000 flags rw- + RELRO off 0x00110c0c vaddr 0x00111c0c paddr 0x00111c0c align 2**5 + filesz 0x00005200 memsz 0x00005200 flags r-- + +Dynamic Section: + NEEDED ld-linux.so.2 + SONAME libc.so.6 + INIT 0x15280 + FINI_ARRAY 0x1152d4 + FINI_ARRAYSZ 0x4 + HASH 0x174 + STRTAB 0xbbc8 + SYMTAB 0x3388 + STRSZ 0x530f + SYMENT 0x10 + PLTGOT 0x116ff4 + PLTRELSZ 0xa8 + PLTREL 0x11 + JMPREL 0x14fe8 + REL 0x122a0 + RELSZ 0x2d48 + RELENT 0x8 + VERDEF 0x11fe0 + VERDEFNUM 0x12 + VERNEED 0x12250 + VERNEEDNUM 0x1 + VERSYM 0x10ed8 + RELCOUNT 0x548 + +Version definitions: +1 0x01 0x0865f4e6 libc.so.6 +2 0x00 0x0d696910 GLIBC_2.0 +3 0x00 0x0d696911 GLIBC_2.1 + GLIBC_2.0 +4 0x00 0x09691f71 GLIBC_2.1.1 + GLIBC_2.1 +5 0x00 0x09691f72 GLIBC_2.1.2 + GLIBC_2.1.1 +6 0x00 0x09691f73 GLIBC_2.1.3 + GLIBC_2.1.2 +7 0x00 0x0d696912 GLIBC_2.2 + GLIBC_2.1.3 +8 0x00 0x09691a71 GLIBC_2.2.1 + GLIBC_2.2 +9 0x00 0x09691a72 GLIBC_2.2.2 + GLIBC_2.2.1 +10 0x00 0x09691a73 GLIBC_2.2.3 + GLIBC_2.2.2 +11 0x00 0x09691a74 GLIBC_2.2.4 + GLIBC_2.2.3 +12 0x00 0x09691a76 GLIBC_2.2.6 + GLIBC_2.2.4 +13 0x00 0x0d696913 GLIBC_2.3 + GLIBC_2.2.6 +14 0x00 0x09691972 GLIBC_2.3.2 + GLIBC_2.3 +15 0x00 0x09691973 GLIBC_2.3.3 + GLIBC_2.3.2 +16 0x00 0x09691974 GLIBC_2.3.4 + GLIBC_2.3.3 +17 0x00 0x0963cf85 GLIBC_PRIVATE + GLIBC_2.3.4 +18 0x00 0x0b792650 GCC_3.0 + +Version References: + required from ld-linux.so.2: + 0x0d696911 0x00 22 GLIBC_2.1 + 0x0d696913 0x00 21 GLIBC_2.3 + 0x0963cf85 0x00 20 GLIBC_PRIVATE + 0x0d696910 0x00 19 GLIBC_2.0 + +DYNAMIC SYMBOL TABLE: +000151f0 l d .text 00000000 .text +000f47a0 l d __libc_freeres_fn 00000000 __libc_freeres_fn +000f5480 l d __libc_thread_freeres_fn 00000000 __libc_thread_freeres_fn +000f5620 l d .rodata 00000000 .rodata +0010f4a0 l d .interp 00000000 .interp +0010f4b4 l d .eh_frame_hdr 00000000 .eh_frame_hdr +00111c0c l d .eh_frame 00000000 .eh_frame +001152d8 l d .ctors 00000000 .ctors +001152e8 l d .dtors 00000000 .dtors +001152f0 l d __libc_subfreeres 00000000 __libc_subfreeres +00115344 l d __libc_atexit 00000000 __libc_atexit +00115348 l d __libc_thread_subfreeres 00000000 __libc_thread_subfreeres +00115360 l d .data.rel.ro 00000000 .data.rel.ro +00117060 l d .data 00000000 .data +00117f20 l d .bss 00000000 .bss +000036fc g D *ABS* 00000000 Base __bss_start +00056ef0 g DF .text 000000db GLIBC_2.2 getwchar +0002c1e0 w DF .text 00000049 GLIBC_2.0 seed48_r +000e3fc0 g DF .text 00000068 GLIBC_2.0 xdr_cryptkeyres +000286a0 w DF .text 00000063 GLIBC_2.0 longjmp +000579f0 g DF .text 000000fa GLIBC_2.0 putchar +00069c20 w DF .text 00000041 GLIBC_2.0 stpcpy +000b89f0 w DF .text 00000129 GLIBC_2.0 tsearch +00117a10 g DO .data 00000004 GLIBC_2.0 __morecore +001078f8 g DO .rodata 00000010 GLIBC_2.1 in6addr_any +00085440 g DF .text 00000054 GLIBC_2.1 ntp_gettime +000874d0 g DF .text 000000a8 GLIBC_2.0 setgrent +0005fee0 g DF .text 00000028 GLIBC_2.0 _IO_remove_marker +000be0a0 w DF .text 0000007d GLIBC_2.3 iswalpha_l +00028900 g DF .text 0000013c GLIBC_PRIVATE __libc_sigaction +000281d0 g DF .text 00000048 GLIBC_2.0 __isnanl +000c60d0 g DF .text 00000033 GLIBC_2.3.2 pthread_cond_wait +00015700 g DF .text 00000038 (GLIBC_2.0) __cmpdi2 +000ba670 g DF .text 00000036 (GLIBC_2.0) vm86 +000379e0 g DF .text 00000027 GLIBC_2.1 wcstoimax +00053110 g DF .text 00000041 GLIBC_2.0 putw +0006f110 w DF .text 00000048 GLIBC_2.0 mbrlen +00068500 g DF .text 00000020 GLIBC_2.0 strcpy +000b3be0 g DF .text 00000036 GLIBC_2.0 chroot +000b7910 g DF .text 0000005e GLIBC_2.0 qgcvt +00058900 g DF .text 000000db GLIBC_2.2 _IO_wdefault_xsgetn +0007ad70 g DF .text 0000002d GLIBC_2.0 asctime +000ee2b0 g DF .text 000000f0 GLIBC_PRIVATE _dl_vsym +00060a60 g DF .text 00000115 GLIBC_2.0 _IO_link_in +000ba2c0 g DF .text 00000066 GLIBC_2.2 __sysctl +000c6110 g DF .text 0000003a GLIBC_2.3.2 pthread_cond_timedwait +00118d40 g DO .bss 00000004 GLIBC_2.0 __daylight +000b2c00 g DF .text 0000006a GLIBC_2.1 setrlimit64 +000d30b0 g DF .text 00000040 GLIBC_2.0 rcmd +000efb40 g DF .text 00000096 GCC_3.0 _Unwind_Find_FDE +0002a9a0 w DF .text 00000115 GLIBC_2.0 unsetenv +00117d78 w DO .data 00000004 GLIBC_2.0 __malloc_hook +0011732c g DO .data 00000004 GLIBC_2.0 h_nerr +000d8a10 g DF .text 00000226 GLIBC_2.0 authunix_create +00028850 w DF .text 00000046 GLIBC_2.0 gsignal +000c5cf0 g DF .text 0000002a GLIBC_2.1 pthread_attr_init +0005fd90 g DF .text 00000049 GLIBC_2.0 _IO_sputbackc +00060cc0 g DF .text 000000a5 GLIBC_2.0 _IO_default_finish +000b4170 g DF .text 0000002c GLIBC_2.2 mkstemp64 +00025bc0 w DF .text 000000f3 GLIBC_2.0 textdomain +000dfe70 g DF .text 0000002a GLIBC_2.1.1 xdr_longlong_t +000b9020 g DF .text 0000001d GLIBC_2.0 warnx +000a28c0 g DF .text 000000f2 GLIBC_2.3.4 regexec +00069960 w DF .text 0000001e GLIBC_2.0 bcmp +000f2a60 g DF .text 0000005f (GLIBC_2.0) getgrgid_r +00028630 g DF .text 00000038 GLIBC_2.0 setjmp +00020870 g DF .text 0000050d (GLIBC_2.0) localeconv +00022800 g DF .text 00000017 GLIBC_2.1 __isxdigit_l +00118640 w DO .bss 00000004 GLIBC_2.0 __malloc_initialize_hook +00066c00 g DF .text 00000021 GLIBC_2.0 __default_morecore +000c6000 g DF .text 0000002a (GLIBC_2.0) pthread_cond_broadcast +000891a0 w DF .text 0000007c GLIBC_2.0 waitpid +00000000 g DO *ABS* 00000000 GCC_3.0 GCC_3.0 +001157a0 g DO .data.rel.ro 00000100 (GLIBC_2.1) sys_sigabbrev +000d76d0 g DF .text 000000e1 GLIBC_2.3.3 inet6_option_alloc +000e1210 g DF .text 00000195 GLIBC_2.0 xdrrec_create +00000000 g DO *ABS* 00000000 GLIBC_2.2.6 GLIBC_2.2.6 +000e9700 g DF .text 00000015 GLIBC_2.1 fdetach +000dda40 g DF .text 000000f7 GLIBC_2.0 xprt_register +000ac030 g DF .text 00000032 (GLIBC_2.1) __lxstat64 +00089890 w DF .text 00000061 GLIBC_2.0 pause +000b3130 w DF .text 0000003c GLIBC_2.0 ioctl +000dbe00 g DF .text 00000675 GLIBC_2.0 clnt_broadcast +000b35c0 w DF .text 00000072 GLIBC_2.0 writev +00056450 g DF .text 0000012f GLIBC_2.0 _IO_setbuffer +000ba9e0 g DF .text 00000036 GLIBC_2.0 get_kernel_syms +000290b0 g DF .text 000000b9 GLIBC_2.0 siginterrupt +00000000 DO *UND* 00000014 GLIBC_2.0 _r_debug +000ebd40 g DF .text 00000021 GLIBC_2.1 pututxline +0005ba90 w DF .text 0000003a GLIBC_2.0 vscanf +000becc0 g DF .text 000003b8 GLIBC_2.0 putspent +000cffb0 g DF .text 000000a2 GLIBC_2.0 getservent +000d5810 g DF .text 0000009c GLIBC_2.1 if_indextoname +000abfb0 g DF .text 00000032 (GLIBC_2.1) __xstat64 +000865f0 g DF .text 00000071 GLIBC_2.2 getdirentries64 +000280d0 w DF .text 00000082 GLIBC_2.0 ldexpf +00069660 w DF .text 000000fe GLIBC_2.0 strtok_r +00058040 g DF .text 0000007c GLIBC_2.2 _IO_wdoallocbuf +000b7260 g DF .text 0000002e GLIBC_2.0 munlockall +000cb740 g DF .text 0000008a GLIBC_2.0 __nss_hosts_lookup +000e9ab0 w DF .text 00000068 GLIBC_2.0 getutid +000ad4a0 g DF .text 00000035 GLIBC_2.1 chown +0006e900 g DF .text 00000084 GLIBC_2.0 wcstok +0008a470 w DF .text 0000000c GLIBC_2.0 getgid +0008a430 g DF .text 00000008 GLIBC_2.0 __getpid +000b9cc0 g DF .text 00000132 GLIBC_2.2 getloadavg +000cc6f0 g DF .text 00000072 GLIBC_2.3.4 __strcpy_chk +00054ca0 g DF .text 00000113 GLIBC_2.0 _IO_fread +00060150 g DF .text 0000002d GLIBC_2.2 _IO_list_lock +00087760 g DF .text 000001de GLIBC_2.1.2 getgrnam_r +00043ce0 g DF .text 00000039 GLIBC_2.0 printf +0008b0f0 w DF .text 00000673 GLIBC_2.0 sysconf +0002dcb0 g DF .text 00000052 GLIBC_2.0 __strtod_internal +001178e0 g DO .data 00000004 GLIBC_2.0 stdout +000567f0 w DF .text 000000c4 GLIBC_2.0 vsprintf +0002b740 w DF .text 00000062 GLIBC_2.0 random +000b3970 g DF .text 00000094 GLIBC_2.0 __select +000b4460 g DF .text 00000017 GLIBC_2.0 setfsent +000abcf0 g DF .text 0000003a GLIBC_2.0 utime +000f29f0 g DF .text 00000024 (GLIBC_2.1) versionsort64 +000dee30 g DF .text 0000027e GLIBC_2.0 svcudp_enablecache +00070650 w DF .text 00000052 GLIBC_2.0 wcstof +00118d40 w DO .bss 00000004 GLIBC_2.0 daylight +00060de0 g DF .text 00000081 GLIBC_2.0 _IO_default_doallocate +000f1830 g DF .text 000001bc (GLIBC_2.0) _IO_file_xsputn +0006d3f0 g DF .text 00000038 GLIBC_2.1.1 __memset_gcn_by2 +0002c080 g DF .text 0000002e GLIBC_2.0 lrand48_r +0005c8d0 g DF .text 0000003b GLIBC_2.2 __fsetlocking +000b3790 w DF .text 00000039 GLIBC_2.0 getdtablesize +00067fd0 g DF .text 00000021 GLIBC_2.0 _obstack_memory_used +0002dbc0 w DF .text 0000002e GLIBC_2.1 __strtoull_l +000b2390 g DF .text 00000010 GLIBC_2.0 cfgetospeed +000e4100 g DF .text 0000003b GLIBC_2.1 xdr_netnamestr +00057d10 w DF .text 000000f5 GLIBC_2.2 vswprintf +000ce800 g DF .text 000000b2 GLIBC_2.0 sethostent +000be020 w DF .text 0000007d GLIBC_2.3 iswalnum_l +000d0200 g DF .text 000000ad GLIBC_2.0 setservent +000f2640 g DF .text 0000018f (GLIBC_2.1) readdir64_r +000d1ab0 g DF .text 00000060 GLIBC_2.0 __ivaliduser +00021520 w DF .text 00000159 GLIBC_2.3 duplocale +000e9580 g DF .text 0000001f GLIBC_2.1 isastream +0005d0b0 g DF .text 0000003b GLIBC_2.0 putc_unlocked +0008a810 g DF .text 000000dd GLIBC_2.0 getlogin +00057f60 g DF .text 00000033 GLIBC_2.2 _IO_least_wmarker +000c5c90 g DF .text 0000002a GLIBC_2.0 pthread_attr_destroy +000540c0 g DF .text 00000251 GLIBC_2.1 _IO_fdopen +000bb060 w DF .text 00000078 GLIBC_2.0 recv +000ba030 g DF .text 0000003c GLIBC_2.3 llistxattr +000baee0 w DF .text 00000078 GLIBC_2.0 connect +000eede0 g DF .text 0000004e GLIBC_2.0 __register_frame +00055ec0 g DF .text 0000008b GLIBC_2.1 _IO_popen +000acf00 g DF .text 00000125 GLIBC_2.1 lockf64 +000567f0 g DF .text 000000c4 GLIBC_2.0 _IO_vsprintf +00086070 g DF .text 000000cb GLIBC_2.2 readdir64 +000be3a0 w DF .text 0000007d GLIBC_2.3 iswprint_l +00056710 w DF .text 000000d4 GLIBC_2.0 ungetc +0002c5b0 g DF .text 00000059 GLIBC_2.0 __strtoull_internal +000ebd10 g DF .text 00000021 GLIBC_2.1 getutxline +000dd320 g DF .text 00000036 GLIBC_2.0 svcerr_auth +000b2a30 g DF .text 000000a9 GLIBC_2.1 tcgetsid +000d4570 g DF .text 00000052 GLIBC_2.0 endnetgrent +00087340 g DF .text 000000db GLIBC_2.1.2 getgrent_r +00000000 w D *UND* 00000000 __pthread_once +00022700 g DF .text 00000015 GLIBC_2.1 __iscntrl_l +00055a50 g DF .text 0000017d GLIBC_2.1 _IO_proc_close +0002dbc0 w DF .text 0000002e GLIBC_2.3 strtoull_l +00086560 g DF .text 00000024 GLIBC_2.2 versionsort64 +000d79a0 g DF .text 0000014d GLIBC_2.3.4 setipv4sourcefilter +000e9b20 w DF .text 00000068 GLIBC_2.0 getutline +00054320 g DF .text 000000eb GLIBC_2.0 _IO_fflush +000582d0 g DF .text 00000082 GLIBC_2.2 _IO_seekwmark +000cc6a0 g DF .text 00000047 GLIBC_2.3.4 __strcat_chk +000d4b30 g DF .text 00000165 GLIBC_2.1.2 getaliasbyname_r +000d0980 g DF .text 00000165 GLIBC_2.1.2 getrpcbynumber_r +00116840 g DO .data.rel.ro 00000054 GLIBC_2.2 _IO_wfile_jumps +00029200 g DF .text 00000034 GLIBC_2.0 sigemptyset +000be2a0 w DF .text 0000007d GLIBC_2.3 iswlower_l +00015430 w DF .text 00000016 GLIBC_2.1 gnu_get_libc_version +0005c770 g DF .text 0000002c GLIBC_2.2 __fbufsize +000b5190 w DF .text 000000ce GLIBC_2.0 utimes +000ba990 g DF .text 00000042 GLIBC_2.3.2 epoll_wait +000291d0 g DF .text 00000022 GLIBC_2.0 __sigdelset +000579a0 g DF .text 0000004f GLIBC_2.2 putwchar_unlocked +0005ad00 g DF .text 00000068 GLIBC_2.0 _IO_ferror +000687f0 g DF .text 000000b2 GLIBC_2.0 strerror +0008b770 w DF .text 00000201 GLIBC_2.0 fpathconf +000e9690 g DF .text 00000048 GLIBC_2.1 putpmsg +000540c0 g DF .text 00000251 GLIBC_2.1 fdopen +000ddfd0 g DF .text 00000043 GLIBC_2.0 svc_exit +0006e270 w DF .text 000000db GLIBC_2.2 memrchr +00068780 w DF .text 00000064 GLIBC_2.0 strndup +0008a460 w DF .text 0000000c GLIBC_2.0 geteuid +000ba0b0 g DF .text 00000048 GLIBC_2.3 lsetxattr +000c6ed0 g DF .text 000002b4 GLIBC_2.0 inet_pton +000bb960 g DF .text 00000055 GLIBC_2.2 msgctl +000f1520 g DF .text 00000101 (GLIBC_2.0) fsetpos +0006f110 g DF .text 00000048 GLIBC_2.0 __mbrlen +00065ed0 w DF .text 00000199 GLIBC_2.0 malloc_get_state +0006af40 w DF .text 000000a4 GLIBC_2.0 argz_add_sep +0006e120 g DF .text 00000071 GLIBC_2.1.1 __strncpy_by2 +000a4490 g DF .text 00000036 GLIBC_2.0 __sched_get_priority_max +00115480 g DO .data.rel.ro 000001f8 GLIBC_2.3 sys_errlist +00055bd0 g DF .text 000002e9 GLIBC_2.1 _IO_proc_open +000e3d50 g DF .text 0000008f GLIBC_2.1 key_secretkey_is_set +000d4710 g DF .text 000000db GLIBC_2.1.2 getaliasent_r +00029590 g DF .text 00000067 GLIBC_PRIVATE __libc_allocate_rtsig_private +00036f80 g DF .text 000000a4 GLIBC_2.0 __xpg_basename +00028ec0 w DF .text 00000019 GLIBC_2.0 sigpause +00069980 g DF .text 0000008d GLIBC_2.0 memmove +000b9e30 g DF .text 00000042 GLIBC_2.3 fgetxattr +000b8000 g DF .text 00000045 GLIBC_2.0 hsearch +0006ddf0 g DF .text 0000003b GLIBC_2.1.1 __strpbrk_c2 +0011a820 g DO .bss 00000004 GLIBC_2.0 __rcmd_errstr +000c6400 g DF .text 00000034 GLIBC_2.0 pthread_exit +000a4310 g DF .text 00000045 GLIBC_2.0 getopt_long +000e4a10 g DF .text 000001c6 GLIBC_2.1 authdes_getucred +0005c8a0 g DF .text 0000002c GLIBC_2.2 __fpending +00029880 g DF .text 00000074 GLIBC_2.1 sighold +000ceed0 g DF .text 000000a9 GLIBC_2.0 endnetent +00043d20 w DF .text 0000003b GLIBC_2.0 snprintf +000b6d40 g DF .text 0000004d GLIBC_2.0 syscall +000610f0 g DF .text 000000be GLIBC_2.0 _IO_default_xsgetn +0008acd0 w DF .text 000001ea GLIBC_2.0 pathconf +00069660 g DF .text 000000fe GLIBC_2.0 __strtok_r +000b4d70 g DF .text 0000002a GLIBC_2.2 __endmntent +000d1f40 g DF .text 0000009f GLIBC_2.2 ruserok_af +000db810 g DF .text 0000013c GLIBC_2.0 pmap_set +000b6fd0 w DF .text 0000003a GLIBC_2.0 munmap +00022700 w DF .text 00000015 GLIBC_2.3 iscntrl_l +000a43a0 g DF .text 0000003a GLIBC_2.0 __sched_getparam +0005ad70 w DF .text 00000027 GLIBC_2.0 fileno_unlocked +000bfab0 w DF .text 0000007a GLIBC_2.0 ulckpwdf +000a43a0 w DF .text 0000003a GLIBC_2.0 sched_getparam +000afea0 g DF .text 00000032 GLIBC_2.0 fts_set +0007db40 w DF .text 0000056c GLIBC_2.1 getdate_r +000286a0 w DF .text 00000063 GLIBC_2.0 _longjmp +000b57a0 g DF .text 000004b7 GLIBC_2.0 getttyent +000703b0 g DF .text 00000058 GLIBC_2.1 wcstoull +0011a824 g DO .bss 00000004 GLIBC_2.0 rexecoptions +0005c5f0 g DF .text 0000017a GLIBC_2.1 ftello64 +000caf70 g DF .text 000006a4 GLIBC_2.2.2 __nss_hostname_digits_dots +000e7010 g DF .text 00000068 GLIBC_2.1 xdr_uint8_t +000e08f0 g DF .text 00000032 GLIBC_2.0 xdrmem_create +00069ba0 g DF .text 00000010 GLIBC_2.0 __ffs +00029bb0 g DF .text 00000028 GLIBC_2.0 atol +000bdfb0 g DF .text 0000006d GLIBC_2.1 __towupper_l +00027bb0 g DF .text 00000027 GLIBC_2.0 __isnan +000dcab0 g DF .text 00000033 GLIBC_2.0 xdr_des_block +000f23c0 g DF .text 0000006f (GLIBC_2.0) _IO_file_init +000d44a0 g DF .text 00000034 GLIBC_PRIVATE __internal_setnetgrent +000e2660 g DF .text 0000002a GLIBC_2.1 ecb_crypt +000acaa0 w DF .text 0000007c GLIBC_2.0 __write +000dcaf0 g DF .text 00000062 GLIBC_2.0 xdr_opaque_auth +000f1100 g DF .text 00000088 (GLIBC_2.0) popen +000661b0 w DF .text 00000225 GLIBC_2.0 malloc_stats +0005fa90 g DF .text 0000002a GLIBC_2.0 _IO_sgetn +00070530 g DF .text 00000052 GLIBC_2.0 __wcstold_internal +000b4390 g DF .text 00000030 GLIBC_2.0 endfsent +000d38f0 g DF .text 00000445 GLIBC_2.0 ruserpass +0005d000 w DF .text 00000028 GLIBC_2.0 getc_unlocked +0011a5a0 g DO .bss 00000004 GLIBC_2.0 _nl_domain_bindings +00086f30 g DF .text 00000125 GLIBC_2.0 getgrgid +000890b0 w DF .text 00000036 GLIBC_2.0 times +000d9240 g DF .text 000000dd GLIBC_2.0 clnt_spcreateerror +000ac0f0 w DF .text 0000012f GLIBC_2.1 statfs64 +00027fb0 w DF .text 0000009a GLIBC_2.0 modff +0011a6b8 g DO .bss 00000004 GLIBC_2.0 re_syntax_options +000afe70 g DF .text 00000024 GLIBC_2.1 ftw64 +0002be50 g DF .text 00000037 GLIBC_2.0 nrand48 +000f3b50 g DF .text 00000031 (GLIBC_2.0) chown +00037980 g DF .text 00000027 GLIBC_2.1 strtoimax +0011a6e0 g DO .bss 00000004 GLIBC_2.1 argp_program_bug_address +000cf210 g DF .text 00000125 GLIBC_2.0 getprotobynumber +000d85d0 g DF .text 0000016c GLIBC_2.0 authunix_create_default +000d3ed0 g DF .text 000001d2 GLIBC_PRIVATE __internal_getnetgrent_r +000d93b0 g DF .text 00000090 GLIBC_2.0 clnt_perrno +0002a780 g DF .text 000000ef GLIBC_2.0 getenv +0005d470 g DF .text 0000003b GLIBC_2.0 _IO_file_seek +0006e580 w DF .text 00000064 GLIBC_2.0 wcslen +000bd4c0 w DF .text 000000d5 GLIBC_2.0 iswcntrl +000be5a0 w DF .text 0000006d GLIBC_2.3 towlower_l +000cc440 g DF .text 00000005 GLIBC_2.2 __cyg_profile_func_exit +000ab0a0 w DF .text 00000094 GLIBC_2.1 pwrite64 +000ac7a0 w DF .text 0000003a GLIBC_2.0 fchmod +000f21e0 g DF .text 00000063 (GLIBC_2.0) _IO_file_setbuf +00087190 g DF .text 000001ac GLIBC_2.1 putgrent +00104d78 g DO .rodata 00000004 (GLIBC_2.1) _sys_nerr +000bd920 w DF .text 000000d5 GLIBC_2.0 iswpunct +000674f0 g DF .text 000001e5 GLIBC_2.0 mtrace +000b4e30 g DF .text 0000035f GLIBC_2.2 __getmntent_r +000ba530 g DF .text 00000013 GLIBC_2.0 setfsuid +0002ddd0 w DF .text 00000052 GLIBC_2.0 strtold +0008a480 w DF .text 0000000c GLIBC_2.0 getegid +00022640 g DF .text 0000007b GLIBC_2.0 isblank +00115680 g DO .data.rel.ro 00000104 GLIBC_2.3.3 sys_siglist +000ebc80 g DF .text 00000017 GLIBC_2.1 setutxent +0005b7e0 g DF .text 00000038 GLIBC_2.0 setlinebuf +0006a7d0 g DF .text 000000c6 GLIBC_2.1 __rawmemchr +000b2f80 g DF .text 0000003c GLIBC_2.0 setpriority +0002b2b0 g DF .text 0000000d GLIBC_2.0 labs +000702f0 g DF .text 00000058 GLIBC_2.1 wcstoll +00054a80 g DF .text 000000cc GLIBC_2.2 fopencookie +000ab140 g DF .text 00000034 GLIBC_2.2 posix_spawn_file_actions_init +000b2f30 g DF .text 00000042 GLIBC_2.0 getpriority +000bd300 w DF .text 000000d5 GLIBC_2.0 iswalpha +000557d0 w DF .text 0000016f GLIBC_2.0 gets +000f2570 g DF .text 000000cb (GLIBC_2.1) readdir64 +000c85f0 g DF .text 00000029 GLIBC_2.2 __res_ninit +000babe0 w DF .text 00000036 GLIBC_2.0 personality +00000000 w D *UND* 00000000 __pthread_key_create +000bd3e0 w DF .text 000000d5 GLIBC_2.1 iswblank +0005fe70 g DF .text 0000006a GLIBC_2.0 _IO_init_marker +0006a740 g DF .text 00000082 GLIBC_2.0 memmem +0002c370 g DF .text 00000059 GLIBC_2.0 __strtol_internal +0005f670 g DF .text 0000008f GLIBC_2.1 _IO_file_finish +00000000 g DO *ABS* 00000000 GLIBC_2.3.4 GLIBC_2.3.4 +0008a710 w DF .text 00000035 GLIBC_2.0 getresuid +00029e20 g DF .text 0000006c GLIBC_2.0 bsearch +00029900 g DF .text 00000074 GLIBC_2.1 sigrelse +000bc350 g DF .text 000001c1 GLIBC_2.0 __monstartup +000b4250 g DF .text 0000003c GLIBC_2.0 usleep +000f3b90 g DF .text 0000002b (GLIBC_2.1) nftw +000f2490 g DF .text 000000d5 (GLIBC_2.0) _IO_file_close_it +000ce670 g DF .text 000000da GLIBC_2.1.2 gethostent_r +0006edd0 w DF .text 00000034 GLIBC_2.2 wmempcpy +000cbf50 w DF .text 000002bd GLIBC_2.1 backtrace_symbols +00117d88 g DO .data 00000008 GLIBC_2.0 __tzname +00058490 g DF .text 00000054 GLIBC_2.2 __woverflow +00117960 g DO .data 00000050 GLIBC_2.0 _IO_stdout_ +000e4610 g DF .text 0000005d GLIBC_2.1 getnetname +00089a40 w DF .text 00000068 GLIBC_2.0 execve +00117560 g DO .data 00000098 GLIBC_2.1 _IO_2_1_stdout_ +000cf7b0 g DF .text 00000125 GLIBC_2.0 getprotobyname +00029560 g DF .text 00000027 GLIBC_2.1 __libc_current_sigrtmax +00070410 g DF .text 00000059 GLIBC_2.0 __wcstoull_internal +000568c0 w DF .text 00000093 GLIBC_2.0 vsscanf +000bba10 g DF .text 0000004f GLIBC_2.0 semget +000c5fd0 g DF .text 0000002a GLIBC_2.0 pthread_condattr_init +000e6ec0 g DF .text 00000069 GLIBC_2.1 xdr_int16_t +0006adb0 w DF .text 00000122 GLIBC_2.0 argz_insert +0008a430 w DF .text 00000008 GLIBC_2.0 getpid +000b3760 w DF .text 00000026 GLIBC_2.0 getpagesize +00000000 w D *UND* 00000000 __pthread_rwlock_wrlock +000d74b0 g DF .text 00000033 GLIBC_2.3.3 inet6_option_init +0002bfe0 w DF .text 00000099 GLIBC_2.0 erand48_r +000ba070 g DF .text 0000003a GLIBC_2.3 lremovexattr +000ebda0 g DF .text 0000002a GLIBC_2.1 updwtmpx +00035000 w DF .text 00000027 GLIBC_2.1 __strtold_l +000dfdb0 g DF .text 000000bd GLIBC_2.1.1 xdr_u_hyper +00054410 g DF .text 000001b8 GLIBC_2.2 _IO_fgetpos +0006b410 g DF .text 00000042 GLIBC_2.0 envz_get +000b8050 g DF .text 000001e0 GLIBC_2.0 hsearch_r +000ad070 g DF .text 0000003a GLIBC_2.0 __dup2 +0002a630 g DF .text 00000147 GLIBC_2.0 qsort +000d44e0 w DF .text 00000086 GLIBC_2.0 getnetgrent_r +000d47f0 g DF .text 000000a6 GLIBC_2.0 endaliasent +0006e870 g DF .text 00000035 GLIBC_2.0 wcsrchr +000ad4e0 w DF .text 00000035 GLIBC_2.0 fchown +000b5430 w DF .text 0000003a GLIBC_2.0 truncate +0002bae0 w DF .text 00000103 GLIBC_2.0 setstate_r +00052290 g DF .text 00000024 GLIBC_2.0 fscanf +000e3ae0 g DF .text 00000073 GLIBC_2.1 key_decryptsession +000545d0 w DF .text 00000151 GLIBC_2.0 fgets +00060640 g DF .text 00000177 GLIBC_2.0 _IO_flush_all_linebuffered +000b9af0 g DF .text 000000cb GLIBC_2.0 dirname +000f2c20 g DF .text 00000e58 (GLIBC_2.1) glob64 +00073ea0 w DF .text 00000037 GLIBC_2.1 __wcstod_l +00057bd0 g DF .text 00000036 GLIBC_2.2 vwprintf +000bf2c0 g DF .text 00000165 GLIBC_2.1.2 getspnam_r +000ced40 g DF .text 000000a4 GLIBC_2.0 getnetent +0002c4f0 g DF .text 00000059 GLIBC_2.0 __strtoll_internal +000f2a20 g DF .text 00000037 (GLIBC_2.0) getgrent_r +000ba280 g DF .text 0000003a GLIBC_2.3.4 vm86 +000bd140 w DF .text 000000d5 GLIBC_2.0 iswxdigit +0005a4f0 g DF .text 0000014c GLIBC_2.2 _IO_wdo_write +000b3af0 g DF .text 000000a2 GLIBC_PRIVATE __libc_pselect +0006e350 g DF .text 000000ac GLIBC_2.3.4 __xpg_strerror_r +000d7590 g DF .text 000000c1 GLIBC_2.3.3 inet6_option_find +00055380 w DF .text 0000024e GLIBC_2.0 __getdelim +0006d650 g DF .text 0000003f GLIBC_2.1.1 __strcmp_gg +000aca20 w DF .text 0000007c GLIBC_2.0 __read +000b9380 w DF .text 00000185 GLIBC_2.0 error_at_line +0006b620 g DF .text 000000fb GLIBC_2.0 envz_add +000beb20 g DF .text 00000195 GLIBC_2.0 fgetspent +000cea20 g DF .text 000001d0 GLIBC_2.1.2 getnetbyaddr_r +000b7fd0 g DF .text 0000002d GLIBC_2.0 hcreate +00087fe0 w DF .text 000000d2 GLIBC_2.0 getpw +000e3be0 g DF .text 0000005a GLIBC_2.1 key_setsecret +000abff0 g DF .text 00000032 (GLIBC_2.1) __fxstat64 +000b1610 g DF .text 0000005f GLIBC_2.3.3 posix_fadvise64 +000ccca0 g DF .text 000000ff GLIBC_2.3.4 __fprintf_chk +00053270 g DF .text 0000002d GLIBC_2.0 _IO_funlockfile +000f3e40 g DF .text 0000005f (GLIBC_2.0) getspnam_r +000e3900 g DF .text 0000005f GLIBC_2.1 key_get_conv +000c7280 g DF .text 00000287 GLIBC_2.0 inet_nsap_addr +000ba100 g DF .text 0000003a GLIBC_2.3 removexattr +0005b220 w DF .text 000000cc GLIBC_2.0 getc +000227e0 w DF .text 00000017 GLIBC_2.3 isupper_l +00057170 g DF .text 000000a2 GLIBC_2.2 fgetws_unlocked +000bac60 w DF .text 00000048 GLIBC_2.0 prctl +000f3bc0 g DF .text 0000002b (GLIBC_2.1) nftw64 +000be4a0 g DF .text 0000007d GLIBC_2.1 __iswspace_l +000ad1e0 w DF .text 00000036 GLIBC_2.0 fchdir +000580c0 g DF .text 00000075 GLIBC_2.2 _IO_switch_to_wget_mode +000bb840 w DF .text 000000c4 GLIBC_2.0 msgrcv +000bbb20 g DF .text 00000066 GLIBC_2.0 shmat +00117d7c w DO .data 00000004 GLIBC_2.0 __realloc_hook +000ba570 g DF .text 00000028 GLIBC_2.3.3 gnu_dev_major +000a27a0 w DF .text 00000048 GLIBC_2.0 re_search_2 +00069ef0 g DF .text 00000046 GLIBC_2.0 memcpy +00052700 g DF .text 0000009d GLIBC_2.1 tmpfile +0007d9a0 w DF .text 0000003c GLIBC_2.0 setitimer +0006e990 w DF .text 0000012c GLIBC_2.1 wcswcs +000601e0 g DF .text 000000ee GLIBC_2.0 _IO_default_xsputn +00104d78 g DO .rodata 00000004 (GLIBC_2.1) sys_nerr +001179c0 g DO .data 00000050 GLIBC_2.0 _IO_stderr_ +000f2bc0 g DF .text 0000005f (GLIBC_2.0) getpwuid_r +00029560 g DF .text 00000027 GLIBC_PRIVATE __libc_current_sigrtmax_private +000dbb10 g DF .text 000001ae GLIBC_2.0 pmap_getport +00056580 w DF .text 0000018f GLIBC_2.0 setvbuf +0006aad0 w DF .text 0000003e GLIBC_2.0 argz_count +00089da0 g DF .text 00000195 GLIBC_2.0 execl +0006d500 g DF .text 00000031 GLIBC_2.1.1 __mempcpy_byn +00085950 g DF .text 0000007a GLIBC_2.0 seekdir +00055210 g DF .text 00000167 GLIBC_2.0 _IO_fwrite +000a4510 w DF .text 0000003a GLIBC_2.0 sched_rr_get_interval +0005b5a0 g DF .text 00000021 GLIBC_2.1 pclose +0005fde0 g DF .text 0000004c GLIBC_2.0 _IO_sungetc +000bb460 g DF .text 00000050 GLIBC_2.0 isfdtype +00022820 g DF .text 00000011 GLIBC_2.1 __tolower_l +0008c350 g DF .text 00000e58 GLIBC_2.0 glob +000dd1e0 g DF .text 0000004e GLIBC_2.0 svc_sendreply +000ebce0 g DF .text 00000021 GLIBC_2.1 getutxid +00052410 g DF .text 000000c8 GLIBC_2.0 perror +0001dc90 g DF .text 00000016 GLIBC_PRIVATE __gconv_get_cache +000db460 g DF .text 0000002d GLIBC_2.0 _rpc_dtablesize +000e3b60 g DF .text 00000073 GLIBC_2.1 key_encryptsession +00000000 g DO *ABS* 00000000 GLIBC_2.1.1 GLIBC_2.1.1 +000c60a0 g DF .text 0000002a (GLIBC_2.0) pthread_cond_signal +0006a600 g DF .text 0000003e GLIBC_2.0 swab +00022580 g DF .text 00000015 GLIBC_2.1 __isblank_l +0002d5c0 w DF .text 0000002e GLIBC_2.3 strtoll_l +000ad0f0 w DF .text 00000078 GLIBC_2.0 creat +00088970 g DF .text 000001de GLIBC_2.1.2 getpwuid_r +000adf50 w DF .text 0000003c GLIBC_2.0 readlink +00067440 g DF .text 00000005 GLIBC_2.0 tr_break +000b2b20 g DF .text 00000032 GLIBC_2.2 setrlimit +0006dbb0 g DF .text 000000b2 GLIBC_2.1.1 __stpcpy_small +00027f20 w DF .text 00000024 GLIBC_2.0 isinff +000b3970 w DF .text 00000094 GLIBC_PRIVATE __libc_select +00059e40 g DF .text 00000233 GLIBC_2.2 _IO_wfile_overflow +00065960 g DF .text 00000225 GLIBC_2.0 __libc_memalign +000c6150 g DF .text 00000036 GLIBC_2.0 pthread_equal +0005c7f0 g DF .text 00000013 GLIBC_2.2 __fwritable +00055f50 w DF .text 0000017f GLIBC_2.0 puts +000d4670 g DF .text 00000098 GLIBC_2.0 getnetgrent +0002b1e0 g DF .text 000000b6 GLIBC_2.1.3 __cxa_finalize +000611b0 g DF .text 00000067 GLIBC_2.0 __overflow +0006d480 g DF .text 00000033 GLIBC_2.1.1 __mempcpy_by4 +000b8ff0 g DF .text 00000022 GLIBC_2.0 errx +000ad070 w DF .text 0000003a GLIBC_2.0 dup2 +000f09a0 g DF .text 00000095 (GLIBC_2.0) _IO_fopen +00029530 g DF .text 00000027 GLIBC_2.1 __libc_current_sigrtmin +00022250 g DF .text 0000007d GLIBC_2.0 islower +00070350 g DF .text 00000059 GLIBC_2.0 __wcstoll_internal +000b95d0 g DF .text 00000068 GLIBC_2.0 ustat +0006f160 w DF .text 0000024b GLIBC_2.0 mbrtowc +000bb660 g DF .text 0000002c GLIBC_2.2.4 sockatmark +00023d90 w DF .text 00000041 GLIBC_2.2 dngettext +000b2940 g DF .text 00000033 GLIBC_2.0 tcflush +00089bf0 g DF .text 000001ad GLIBC_2.0 execle +00056960 g DF .text 000001a3 GLIBC_2.2 fgetpos64 +00053200 g DF .text 0000002d GLIBC_2.0 _IO_flockfile +0005c820 g DF .text 00000076 GLIBC_2.2 __fpurge +00021f60 g DF .text 00000068 GLIBC_2.0 tolower +0008a450 w DF .text 0000000c GLIBC_2.0 getuid +000b6010 g DF .text 000002f6 GLIBC_2.0 getpass +0006aa80 w DF .text 00000047 GLIBC_2.0 argz_add +00022ec0 w DF .text 00000023 GLIBC_2.0 dgettext +00027b80 g DF .text 0000002d GLIBC_2.0 __isinf +000858d0 g DF .text 00000077 GLIBC_2.0 rewinddir +000b2980 g DF .text 00000077 GLIBC_2.0 tcsendbreak +000bd680 w DF .text 000000d5 GLIBC_2.0 iswlower +0006dee0 g DF .text 00000063 GLIBC_2.1.1 __strsep_2c +0002bfb0 g DF .text 0000002e GLIBC_2.0 drand48_r +00035550 w DF .text 0000007d GLIBC_2.0 system +0005ac90 w DF .text 00000068 GLIBC_2.0 feof +00057010 g DF .text 00000151 GLIBC_2.2 fgetws +000b4870 w DF .text 00000083 GLIBC_2.0 hasmntopt +000dd0f0 g DF .text 00000039 GLIBC_2.2.3 __rpc_thread_svc_max_pollfd +0005e190 g DF .text 00000032 GLIBC_2.0 _IO_file_close +0006e820 g DF .text 00000041 GLIBC_2.0 wcspbrk +0006aee0 w DF .text 00000054 GLIBC_2.0 argz_stringify +000701d0 g DF .text 00000058 GLIBC_2.0 wcstol +00022820 w DF .text 00000011 GLIBC_2.3 tolower_l +00067d40 g DF .text 000000ba GLIBC_2.0 _obstack_begin_1 +000dde40 g DF .text 0000009d GLIBC_2.0 svcraw_create +00065780 g DF .text 000001d4 GLIBC_2.0 malloc +0011a5a4 g DO .bss 00000004 GLIBC_2.0 _nl_msg_cat_cntr +00053160 g DF .text 00000057 GLIBC_2.0 remove +000ac840 w DF .text 0000007c GLIBC_2.0 __open +0005fff0 g DF .text 00000036 GLIBC_2.0 _IO_unsave_markers +000155f0 g DF .text 0000002a (GLIBC_2.0) __floatdidf +000ade90 w DF .text 00000032 GLIBC_2.0 isatty +000ab520 g DF .text 0000004e GLIBC_2.2 posix_spawn +000b23a0 g DF .text 00000018 GLIBC_2.0 cfgetispeed +000bdf30 w DF .text 0000007d GLIBC_2.3 iswxdigit_l +00022ec0 g DF .text 00000023 GLIBC_2.0 __dgettext +000a2a10 g DF .text 000003af GLIBC_2.0 confstr +0006e010 g DF .text 00000045 GLIBC_2.1.1 __strcat_c +000bda00 w DF .text 000000d5 GLIBC_2.0 iswspace +00000000 g DO *ABS* 00000000 GLIBC_2.1 GLIBC_2.1 +00088630 g DF .text 000000a6 GLIBC_2.0 endpwent +000286a0 w DF .text 00000063 GLIBC_2.0 siglongjmp +00054dc0 g DF .text 00000131 GLIBC_2.2 fsetpos +000c5f20 g DF .text 00000033 GLIBC_2.0 pthread_attr_getscope +000dea50 g DF .text 000002a5 GLIBC_2.0 svctcp_create +001174c0 g DO .data 00000098 GLIBC_2.1 _IO_2_1_stdin_ +00089640 w DF .text 0000024e GLIBC_2.0 sleep +000f0a40 g DF .text 000001c7 (GLIBC_2.0) fdopen +0011a6bc g DO .bss 00000004 GLIBC_2.0 optarg +00022780 g DF .text 00000017 GLIBC_2.1 __isprint_l +000a43e0 w DF .text 0000003c GLIBC_2.0 sched_setscheduler +00043da0 g DF .text 00000034 GLIBC_2.1 __asprintf +000688b0 g DF .text 00000154 GLIBC_2.0 __strerror_r +00069b60 g DF .text 00000032 GLIBC_2.0 __bzero +0006ee10 w DF .text 0000017c GLIBC_2.0 btowc +000bada0 g DF .text 00000036 GLIBC_2.0 sysinfo +00027e80 w DF .text 00000083 GLIBC_2.0 ldexp +0011a6d0 g DO .bss 00000004 GLIBC_2.0 loc2 +0002c550 g DF .text 00000058 GLIBC_2.0 strtoll +0005bb50 w DF .text 000000f5 GLIBC_2.0 vsnprintf +00080aa0 g DF .text 00001e8b GLIBC_2.3 __strftime_l +000e3f30 g DF .text 0000008f GLIBC_2.1 xdr_unixcred +00015be0 g DF .text 00000113 GLIBC_2.1 iconv_open +00115480 g DO .data.rel.ro 000001ec (GLIBC_2.0) sys_errlist +0002c5b0 g DF .text 00000059 (GLIBC_2.0) __strtouq_internal +000e2410 g DF .text 0000006b GLIBC_2.1 authdes_create +0007a030 w DF .text 00000063 GLIBC_2.3 wcscasecmp_l +000ce0c0 g DF .text 0000027e GLIBC_2.1.2 gethostbyname2_r +0006d580 g DF .text 0000003c GLIBC_2.1.1 __strncpy_gg +0005b3d0 g DF .text 000000c2 GLIBC_2.0 open_memstream +000e4180 g DF .text 00000032 GLIBC_2.0 xdr_keystatus +0011a4cc g DO .bss 00000004 GLIBC_PRIVATE _dl_open_hook +000bb0e0 w DF .text 00000078 GLIBC_2.0 recvfrom +00117dd4 g DO .data 00000014 GLIBC_2.0 h_errlist +000b2850 w DF .text 000000a8 GLIBC_2.0 tcdrain +000dd280 g DF .text 00000042 GLIBC_2.0 svcerr_decode +000e0480 g DF .text 00000166 GLIBC_2.0 xdr_bytes +000ede60 g DF .text 00000033 GLIBC_2.1 _dl_mcount_wrapper +000379b0 g DF .text 00000027 GLIBC_2.1 strtoumax +000f0a40 g DF .text 000001c7 (GLIBC_2.0) _IO_fdopen +000ac070 w DF .text 0000003a GLIBC_2.0 statfs +000e6ca0 g DF .text 000000d3 GLIBC_2.1.1 xdr_int64_t +0006e6b0 g DF .text 000000bf GLIBC_2.0 wcsncmp +00089ab0 g DF .text 000000f1 GLIBC_2.0 fexecve +000c9960 g DF .text 00000360 GLIBC_PRIVATE __nss_lookup_function +000bac20 g DF .text 0000003a GLIBC_2.2.1 pivot_root +000ebdd0 g DF .text 00000033 GLIBC_2.1.1 getutmpx +0006d9a0 g DF .text 00000036 GLIBC_2.1.1 __strstr_cg +00000000 w D *UND* 00000000 __pthread_rwlock_rdlock +000225a0 g DF .text 00000042 GLIBC_2.0 _toupper +000e0cf0 g DF .text 0000005d GLIBC_2.0 xdrrec_endofrecord +000286a0 g DF .text 00000063 GLIBC_PRIVATE __libc_longjmp +0002b910 w DF .text 000000b9 GLIBC_2.0 random_r +0002c490 g DF .text 00000058 GLIBC_2.0 strtoul +0006c810 w DF .text 00000a85 GLIBC_2.3 strxfrm_l +000bcb80 w DF .text 000004b8 GLIBC_2.2.3 sprofil +000e9720 w DF .text 00000068 GLIBC_2.0 getutent +00061f40 g DF .text 000000a5 GLIBC_PRIVATE __libc_malloc_pthread_startup +00070e50 w DF .text 0000003e GLIBC_2.1 __wcstoul_l +000a4420 w DF .text 00000036 GLIBC_2.0 sched_getscheduler +0006e990 g DF .text 0000012c GLIBC_2.0 wcsstr +00057c50 g DF .text 0000003f GLIBC_2.2 wscanf +00085740 w DF .text 0000018f GLIBC_2.0 readdir_r +000ebcc0 g DF .text 00000017 GLIBC_2.1 endutxent +000b4100 g DF .text 0000003e GLIBC_2.0 mktemp +00035000 w DF .text 00000027 GLIBC_2.3 strtold_l +00057fa0 g DF .text 0000002b GLIBC_2.2 _IO_switch_to_main_wget_area +000ba630 w DF .text 0000003c GLIBC_2.1 modify_ldt +000223d0 g DF .text 0000007b GLIBC_2.0 ispunct +000c6500 g DF .text 00000048 GLIBC_PRIVATE __libc_pthread_init +0007b830 w DF .text 0000003a GLIBC_2.0 settimeofday +000cd920 g DF .text 00000162 GLIBC_2.0 gethostbyaddr +00022780 w DF .text 00000017 GLIBC_2.3 isprint_l +00022e70 g DF .text 00000043 GLIBC_2.0 __dcgettext +0002b690 g DF .text 000000a3 GLIBC_2.0 wctomb +00027f70 w DF .text 00000011 GLIBC_2.0 finitef +0006a720 g DF .text 0000001b GLIBC_2.0 memfrob +00067e00 g DF .text 00000199 GLIBC_2.0 _obstack_newchunk +000702f0 w DF .text 00000058 GLIBC_2.0 wcstoq +00054f00 g DF .text 000001d8 GLIBC_2.0 _IO_ftell +00080aa0 w DF .text 00001e8b GLIBC_2.3 strftime_l +0011728c g DO .data 00000004 GLIBC_2.0 opterr +000d8e80 g DF .text 000002dc GLIBC_2.0 clnt_create +00029070 w DF .text 0000003a GLIBC_2.0 sigaltstack +000616c0 g DF .text 0000004e GLIBC_2.0 _IO_str_init_readonly +000adfd0 w DF .text 00000036 GLIBC_2.0 rmdir +0007b870 w DF .text 00000119 GLIBC_2.0 adjtime +000ba780 g DF .text 00000036 GLIBC_2.0 __adjtimex +0002b640 g DF .text 00000046 GLIBC_2.0 wcstombs +00027df0 w DF .text 0000000d GLIBC_2.1 scalbln +0006d9e0 g DF .text 00000046 GLIBC_2.1.1 __strstr_g +000bf830 w DF .text 00000082 GLIBC_2.0 sgetspent_r +000226c0 w DF .text 00000015 GLIBC_2.3 isalnum_l +000bb3e0 w DF .text 00000039 GLIBC_2.0 socket +000b3970 w DF .text 00000094 GLIBC_2.0 select +000baa20 g DF .text 00000048 GLIBC_2.0 init_module +000efc80 g DF .text 0000007c GLIBC_2.0 __frame_state_for +00000000 w D *UND* 00000000 _pthread_cleanup_pop_restore +00027f70 g DF .text 00000011 GLIBC_2.0 __finitef +00085670 w DF .text 000000cb GLIBC_2.0 readdir +0005c810 g DF .text 0000000f GLIBC_2.2 __flbf +000ac0b0 w DF .text 0000003a GLIBC_2.0 fstatfs +000581e0 g DF .text 0000003f GLIBC_2.2 _IO_adjust_wcolumn +000ad520 w DF .text 00000035 GLIBC_2.0 lchown +0006ed00 w DF .text 000000c8 GLIBC_2.0 wcpncpy +000e21e0 g DF .text 00000228 GLIBC_2.1 authdes_pk_create +000a2880 w DF .text 00000039 GLIBC_2.0 re_match +00086e40 g DF .text 00000032 GLIBC_2.0 setgroups +000dc610 g DF .text 00000100 GLIBC_2.0 pmap_rmtcall +0002b070 g DF .text 00000036 GLIBC_PRIVATE __on_exit +0002c430 g DF .text 00000059 GLIBC_2.0 __strtoul_internal +00061290 g DF .text 0000015c GLIBC_2.0 _IO_str_seekoff +00065520 w DF .text 00000147 GLIBC_2.0 pvalloc +000ba8c0 g DF .text 0000003c GLIBC_2.0 delete_module +0005e560 g DF .text 0000055b GLIBC_2.1 _IO_file_seekoff +000d96f0 g DF .text 00000094 GLIBC_2.0 clnt_perror +0005cf90 g DF .text 0000000b GLIBC_2.0 clearerr_unlocked +000d05c0 g DF .text 000000e2 GLIBC_2.1.2 getrpcent_r +000d1fe0 g DF .text 00000031 GLIBC_2.0 ruserok +0011a6c4 g DO .bss 00000004 GLIBC_2.0 error_message_count +00022450 g DF .text 0000007d GLIBC_2.0 isspace +00057cd0 g DF .text 0000003a GLIBC_2.2 vwscanf +000c5da0 g DF .text 00000033 GLIBC_2.0 pthread_attr_getinheritsched +00119118 w DO .bss 00000004 GLIBC_2.0 ___brk_addr +000f4490 g DF .text 00000037 (GLIBC_2.0) getaliasent_r +00000000 w D *UND* 00000000 __pthread_rwlock_unlock +000b8280 g DF .text 000000ce GLIBC_2.0 hcreate_r +00022840 w DF .text 00000011 GLIBC_2.3 toupper_l +000bf8c0 w DF .text 000001d7 GLIBC_2.0 fgetspent_r +00069a70 g DF .text 00000044 GLIBC_2.1 mempcpy +000b0d70 g DF .text 00000273 GLIBC_2.0 fts_open +00043ce0 g DF .text 00000039 GLIBC_2.0 _IO_printf +00062aa0 g DF .text 00000087 GLIBC_2.0 __libc_mallinfo +000156c0 g DF .text 00000038 (GLIBC_2.0) __ucmpdi2 +00054320 w DF .text 000000eb GLIBC_2.0 fflush +001190fc w DO .bss 00000004 GLIBC_2.0 _environ +0011a6b4 g DO .bss 00000004 GLIBC_2.1 getdate_err +0008a660 g DF .text 00000013 GLIBC_2.0 __bsd_getpgrp +000ad170 g DF .text 00000023 GLIBC_2.1 creat64 +000dfba0 g DF .text 0000000a GLIBC_2.0 xdr_void +000e4140 g DF .text 0000003b GLIBC_2.0 xdr_keybuf +000e6ca0 g DF .text 000000d3 GLIBC_2.3.4 xdr_quad_t +00022e30 w DF .text 00000015 GLIBC_2.2 bind_textdomain_codeset +000abc90 g DF .text 00000018 GLIBC_2.2 posix_madvise +000c4600 w DF .text 000001b5 GLIBC_2.1 argp_error +000aae90 g DF .text 00000082 GLIBC_PRIVATE __libc_pwrite +000f4430 g DF .text 0000005f (GLIBC_2.0) getrpcbynumber_r +000d0810 g DF .text 00000165 GLIBC_2.1.2 getrpcbyname_r +000f42e0 g DF .text 00000066 (GLIBC_2.0) getservbyport_r +000b5470 w DF .text 0000003a GLIBC_2.0 ftruncate +000d12a0 g DF .text 00000158 GLIBC_2.0 ether_ntohost +00027f50 w DF .text 00000018 GLIBC_2.0 isnanf +000b42d0 g DF .text 00000032 GLIBC_2.0 stty +000dbcc0 g DF .text 00000077 GLIBC_2.0 xdr_pmap +0005eac0 g DF .text 000000da GLIBC_2.1 _IO_file_sync +000f43d0 g DF .text 0000005f (GLIBC_2.0) getrpcbyname_r +000baba0 g DF .text 0000003c GLIBC_2.0 nfsservctl +000dd3d0 g DF .text 0000004e GLIBC_2.0 svcerr_progvers +0006d320 g DF .text 00000031 GLIBC_2.1.1 __memcpy_g +00028770 w DF .text 000000da GLIBC_2.0 ssignal +000be720 g DF .text 00000071 GLIBC_2.2 __wctrans_l +00086670 g DF .text 0000018a GLIBC_2.0 fgetgrent +0008b9f0 w DF .text 00000082 GLIBC_2.0 glob_pattern_p +000ba330 g DF .text 0000008e GLIBC_2.0 __clone +000dd230 g DF .text 00000042 GLIBC_2.0 svcerr_noproc +00056ec0 w DF .text 0000002a GLIBC_2.2 getwc_unlocked +0006dc70 g DF .text 00000039 GLIBC_2.1.1 __strcspn_c1 +00057870 g DF .text 00000038 GLIBC_2.2 putwc_unlocked +00000000 w D *UND* 00000000 __pthread_kill_other_threads_np +000f1260 g DF .text 00000124 (GLIBC_2.0) _IO_fgetpos +00015aa0 g DF .text 00000035 (GLIBC_2.0) __udivdi3 +000f29c0 g DF .text 00000024 (GLIBC_2.1) alphasort64 +000d0360 g DF .text 00000125 GLIBC_2.0 getrpcbyname +0002b520 g DF .text 00000046 GLIBC_2.0 mbstowcs +0002a870 g DF .text 00000091 GLIBC_2.0 putenv +0006ab10 w DF .text 000000a3 GLIBC_2.0 argz_create +000acb20 w DF .text 0000003c GLIBC_2.0 lseek +00065c60 g DF .text 0000021c GLIBC_2.0 __libc_realloc +00020e00 g DF .text 00000049 GLIBC_2.2 __nl_langinfo_l +0006ebd0 w DF .text 00000058 GLIBC_2.0 wmemcpy +00029270 g DF .text 00000040 GLIBC_2.0 sigaddset +000ba5a0 g DF .text 0000001d GLIBC_2.3.3 gnu_dev_minor +000159e0 g DF .text 000000ba (GLIBC_2.0) __moddi3 +00028c20 g DF .text 00000066 GLIBC_PRIVATE __libc_sigwait +0002a910 w DF .text 00000082 GLIBC_2.0 clearenv +001190fc g DO .bss 00000004 GLIBC_2.0 __environ +0005f700 g DF .text 0000019b GLIBC_2.1 _IO_file_close_it +00020870 g DF .text 0000050d GLIBC_2.2 localeconv +000890f0 w DF .text 000000a9 GLIBC_2.0 __wait +000ab4f0 g DF .text 00000012 GLIBC_2.2 posix_spawnattr_getpgroup +000b6f00 w DF .text 0000005e GLIBC_2.0 mmap +00057e90 g DF .text 000000a0 GLIBC_2.2 vswscanf +000e1970 g DF .text 000000ef GLIBC_2.0 getsecretkey +00069d80 w DF .text 00000085 GLIBC_2.0 strncasecmp +00089a28 w DF .text 00000013 GLIBC_2.1.1 _Exit +00117280 g DO .data 00000004 GLIBC_2.0 obstack_exit_failure +000e05f0 g DF .text 00000050 GLIBC_2.0 xdr_vector +000dd4d0 g DF .text 000001f7 GLIBC_2.2 svc_getreq_common +0002caf0 w DF .text 0000002e GLIBC_2.3 strtol_l +0006fd70 w DF .text 0000034d GLIBC_2.0 wcsnrtombs +000dc480 g DF .text 000000fe GLIBC_2.0 xdr_rmtcall_args +000cf560 g DF .text 000000e2 GLIBC_2.1.2 getprotoent_r +000d30f0 g DF .text 000005d3 GLIBC_2.2 rexec_af +00069b60 w DF .text 00000032 GLIBC_2.0 bzero +0006da30 g DF .text 000000df GLIBC_2.1.1 __mempcpy_small +0005c7d0 g DF .text 00000013 GLIBC_2.2 __freadable +0008a610 w DF .text 0000003a GLIBC_2.0 setpgid +000eb230 w DF .text 000000f3 GLIBC_2.2.1 posix_openpt +000bb1e0 w DF .text 00000078 GLIBC_2.0 send +000b38b0 g DF .text 00000074 GLIBC_2.0 getdomainname +00104d74 g DO .rodata 00000004 (GLIBC_2.0) _sys_nerr +000dd420 g DF .text 00000036 GLIBC_2.0 svc_getreq +00056450 w DF .text 0000012f GLIBC_2.0 setbuffer +000a4710 g DF .text 00000042 GLIBC_2.0 freeaddrinfo +000e6400 g DF .text 00000012 GLIBC_2.1 svcunixfd_create +00029c10 g DF .text 00000210 GLIBC_2.0 abort +00071940 w DF .text 0000003e GLIBC_2.1 __wcstoull_l +000cf650 g DF .text 000000a6 GLIBC_2.0 endprotoent +000eb330 w DF .text 00000031 GLIBC_2.1 getpt +00022800 w DF .text 00000017 GLIBC_2.3 isxdigit_l +000e9c70 w DF .text 00000072 GLIBC_2.0 getutline_r +0002c0b0 w DF .text 00000054 GLIBC_2.0 nrand48_r +000dd8e0 g DF .text 000000b5 GLIBC_2.0 xprt_unregister +0006b380 g DF .text 00000081 GLIBC_2.0 envz_entry +000ba940 g DF .text 00000042 GLIBC_2.3.2 epoll_ctl +000c5ea0 g DF .text 00000033 GLIBC_2.0 pthread_attr_getschedpolicy +00115680 g DO .data.rel.ro 00000100 (GLIBC_2.1) sys_siglist +00000000 DO *UND* 00000438 GLIBC_PRIVATE _rtld_global +00069ba0 w DF .text 00000010 GLIBC_2.1 ffsl +00078520 w DF .text 0000004b GLIBC_2.0 wcscoll +000be610 w DF .text 0000008c GLIBC_2.3 wctype_l +000ecf50 g DF .text 00000a90 GLIBC_PRIVATE _dl_close +00020e90 g DF .text 0000068a GLIBC_2.1 __newlocale +000ebd70 g DF .text 00000021 GLIBC_2.1 utmpxname +00056ec0 w DF .text 0000002a GLIBC_2.2 fgetwc_unlocked +0003f2d0 g DF .text 000024e5 GLIBC_2.0 __printf_fp +00117d88 w DO .data 00000008 GLIBC_2.0 tzname +0007aee0 w DF .text 00000030 GLIBC_2.0 gmtime_r +0002bf40 g DF .text 00000039 GLIBC_2.0 seed48 +000ac760 w DF .text 0000003a GLIBC_2.0 chmod +000d4fb0 g DF .text 0000085d GLIBC_2.1 getnameinfo +00079660 w DF .text 000008f6 GLIBC_2.3 wcsxfrm_l +00053230 w DF .text 00000032 GLIBC_2.0 ftrylockfile +0002b9d0 w DF .text 0000010e GLIBC_2.0 srandom_r +00021fd0 g DF .text 0000007d GLIBC_2.0 isxdigit +000b8600 w DF .text 000003eb GLIBC_2.0 tdelete +000d77c0 g DF .text 00000075 GLIBC_2.3.3 inet6_option_append +00054b50 g DF .text 00000146 GLIBC_2.0 _IO_fputs +0008a5d0 g DF .text 00000036 GLIBC_2.0 __getpgid +000abbd0 g DF .text 0000003a GLIBC_2.2 posix_spawnattr_getschedparam +0011a6c8 g DO .bss 00000004 GLIBC_2.0 error_print_progname +000dffb0 g DF .text 0000004e GLIBC_2.0 xdr_char +0006d7f0 g DF .text 00000035 GLIBC_2.1.1 __strcspn_cg +0005f620 g DF .text 00000047 GLIBC_2.1 _IO_file_init +00089600 g DF .text 00000036 GLIBC_2.0 alarm +0005c7a0 g DF .text 0000001a GLIBC_2.2 __freading +00061440 g DF .text 00000042 GLIBC_2.0 _IO_str_pbackfail +000d9320 g DF .text 00000090 GLIBC_2.0 clnt_pcreateerror +00055ec0 g DF .text 0000008b GLIBC_2.1 popen +000f5480 g DF __libc_thread_freeres_fn 00000041 GLIBC_PRIVATE __libc_thread_freeres +00059430 g DF .text 000001c6 GLIBC_2.2 _IO_wfile_xsputn +000b71a0 g DF .text 0000003a GLIBC_2.0 mlock +000b3ba0 g DF .text 00000036 GLIBC_2.0 acct +000f3f80 g DF .text 00000066 (GLIBC_2.0) gethostbyname_r +0005eba0 g DF .text 000001eb GLIBC_2.1 _IO_file_overflow +000ca560 g DF .text 000000b0 GLIBC_2.0 __nss_next +000e5590 g DF .text 000000bb GLIBC_2.1 xdecrypt +000808f0 w DF .text 00000045 GLIBC_2.3.2 strptime_l +00089570 g DF .text 00000082 GLIBC_PRIVATE __libc_waitid +000b3110 g DF .text 00000015 GLIBC_2.0 sstk +0007a030 g DF .text 00000063 GLIBC_2.1 __wcscasecmp_l +00021680 g DF .text 00000084 GLIBC_2.1 __freelocale +0002c550 w DF .text 00000058 GLIBC_2.0 strtoq +0002c3d0 g DF .text 00000058 GLIBC_2.0 strtol +000285a0 g DF .text 0000002f GLIBC_2.0 __sigsetjmp +000afe20 g DF .text 00000041 GLIBC_2.3.3 nftw64 +000ad0b0 w DF .text 00000036 GLIBC_2.0 pipe +000cc670 g DF .text 0000002d GLIBC_2.3.4 __stpcpy_chk +000dc580 g DF .text 00000087 GLIBC_2.0 xdr_rmtcallres +000d0d60 g DF .text 00000157 GLIBC_2.0 ether_hostton +000cc210 g DF .text 0000022e GLIBC_2.1 __backtrace_symbols_fd +000b2d90 g DF .text 00000072 GLIBC_2.0 vlimit +0008a650 g DF .text 00000008 GLIBC_2.0 getpgrp +00068ac0 g DF .text 000000b7 GLIBC_2.0 strnlen +000ba6b0 g DF .text 0000003a (GLIBC_2.0) getrlimit +0006a7d0 w DF .text 000000c6 GLIBC_2.1 rawmemchr +000704d0 w DF .text 00000052 GLIBC_2.0 wcstod +000ce8c0 g DF .text 00000157 GLIBC_2.0 getnetbyaddr +000e0850 g DF .text 000000a0 GLIBC_2.0 xdr_double +00027f10 g DF .text 0000000f GLIBC_2.1 __signbit +0002b440 g DF .text 000000d2 GLIBC_2.0 mblen +00022740 w DF .text 00000017 GLIBC_2.3 islower_l +000ba800 g DF .text 0000003a GLIBC_2.1 capget +000ab3e0 g DF .text 00000034 GLIBC_2.2 posix_spawnattr_init +000abe90 g DF .text 0000008d GLIBC_2.0 __lxstat +00089070 w DF .text 00000036 GLIBC_2.0 uname +000bd840 w DF .text 000000d5 GLIBC_2.0 iswprint +00020e90 w DF .text 0000068a GLIBC_2.3 newlocale +00079660 g DF .text 000008f6 GLIBC_2.1 __wcsxfrm_l +000bae20 w DF .text 00000078 GLIBC_2.0 accept +00029590 g DF .text 00000067 GLIBC_2.1 __libc_allocate_rtsig +000b8fc0 g DF .text 00000023 GLIBC_2.0 verrx +00035ae0 g DF .text 00000066 GLIBC_2.0 a64l +000c6190 g DF .text 0000003a GLIBC_2.0 pthread_getschedparam +000eeda0 g DF .text 0000003f GLIBC_2.0 __register_frame_table +000b23c0 g DF .text 0000005c GLIBC_2.0 cfsetispeed +000f1390 g DF .text 00000181 (GLIBC_2.1) _IO_fgetpos64 +000e6e40 g DF .text 0000003f GLIBC_2.1 xdr_int32_t +000eaf60 w DF .text 00000103 GLIBC_2.0 utmpname +00056b40 g DF .text 00000137 GLIBC_2.2 _IO_fsetpos64 +0006a480 g DF .text 00000179 GLIBC_2.1 __strcasestr +000b8230 g DF .text 00000049 GLIBC_2.0 hdestroy_r +000531c0 g DF .text 0000003a GLIBC_2.0 rename +00022860 g DF .text 00000048 GLIBC_2.3 __isctype +000f4350 g DF .text 00000037 (GLIBC_2.0) getservent_r +000be6a0 g DF .text 00000072 GLIBC_2.1 __iswctype_l +000291a0 g DF .text 00000022 GLIBC_2.0 __sigaddset +000f3ad0 g DF .text 00000033 (GLIBC_2.3.3) sched_getaffinity +000dcb60 g DF .text 00000406 GLIBC_2.0 xdr_callmsg +00060090 g DF .text 00000016 GLIBC_2.2 _IO_iter_begin +000cc770 g DF .text 000000eb GLIBC_2.3.4 __strncat_chk +000c6300 g DF .text 00000033 GLIBC_2.0 pthread_setcancelstate +000e0210 g DF .text 000000a3 GLIBC_2.0 xdr_union +00070230 g DF .text 00000059 GLIBC_2.0 __wcstoul_internal +000b5720 g DF .text 00000072 GLIBC_2.0 setttyent +00029390 g DF .text 000000a7 GLIBC_2.0 __sysv_signal +00068df0 g DF .text 000001b9 GLIBC_2.0 strrchr +0006fa40 w DF .text 00000330 GLIBC_2.0 mbsnrtowcs +0006b720 g DF .text 0000002c GLIBC_2.0 basename +000228b0 g DF .text 00000071 GLIBC_2.3 __ctype_tolower_loc +00066dd0 g DF .text 0000002b GLIBC_2.0 mprobe +00089570 w DF .text 00000082 GLIBC_2.1 waitid +00118648 w DO .bss 00000004 GLIBC_2.0 __after_morecore_hook +00089900 w DF .text 00000078 GLIBC_2.0 nanosleep +0006e4a0 g DF .text 00000032 GLIBC_2.0 wcscpy +000e00d0 g DF .text 0000002a GLIBC_2.0 xdr_enum +00067c80 g DF .text 000000ba GLIBC_2.0 _obstack_begin +000be5a0 g DF .text 0000006d GLIBC_2.1 __towlower_l +00066840 w DF .text 000003b7 GLIBC_2.0 calloc +00039c80 g DF .text 0000009b GLIBC_2.0 cuserid +00028250 w DF .text 00000187 GLIBC_2.0 modfl +00069e10 w DF .text 00000041 GLIBC_2.3 strcasecmp_l +00015ae0 g DF .text 0000003b (GLIBC_2.0) __umoddi3 +000e0050 g DF .text 00000079 GLIBC_2.0 xdr_bool +0005e4d0 g DF .text 00000025 GLIBC_2.0 _IO_file_stat +00093ca0 w DF .text 0000004b GLIBC_2.0 re_set_registers +000bc270 w DF .text 0000008b GLIBC_2.2 moncontrol +000e4360 g DF .text 000001a2 GLIBC_2.1 host2netname +0002b2c0 w DF .text 00000031 GLIBC_2.1.1 imaxabs +000619b0 w DF .text 00000034 GLIBC_2.0 malloc_usable_size +0002dd70 g DF .text 00000052 GLIBC_2.0 __strtold_internal +000ba630 g DF .text 0000003c GLIBC_PRIVATE __modify_ldt +000b85e0 w DF .text 00000012 GLIBC_2.1 tdestroy +00089250 w DF .text 00000042 GLIBC_2.0 wait4 +0007a0a0 w DF .text 0000007c GLIBC_2.3 wcsncasecmp_l +000eed00 g DF .text 00000095 GCC_3.0 __register_frame_info_bases +00059cd0 g DF .text 0000016a GLIBC_2.2 _IO_wfile_sync +00065520 g DF .text 00000147 GLIBC_2.0 __libc_pvalloc +0002d5c0 w DF .text 0000002e GLIBC_2.1 __strtoll_l +000f2250 g DF .text 0000016b (GLIBC_2.0) _IO_file_fopen +000cd3b0 g DF .text 0000002d GLIBC_2.0 inet_lnaof +000f1260 g DF .text 00000124 (GLIBC_2.0) fgetpos +0002dd10 w DF .text 00000052 GLIBC_2.0 strtod +00000000 g DO *ABS* 00000000 GLIBC_2.1.2 GLIBC_2.1.2 +000e02c0 g DF .text 0000003b GLIBC_2.0 xdr_wrapstring +00027b80 w DF .text 0000002d GLIBC_2.0 isinf +000a4420 g DF .text 00000036 GLIBC_2.0 __sched_getscheduler +000dc8f0 g DF .text 00000085 GLIBC_2.0 xdr_rejected_reply +00068df0 w DF .text 000001b9 GLIBC_2.0 rindex +0006de80 g DF .text 0000005f GLIBC_2.1.1 __strtok_r_1c +000a6d20 g DF .text 0000007e GLIBC_2.1 gai_strerror +000cd3e0 g DF .text 0000005c GLIBC_2.0 inet_makeaddr +0011a6d4 g DO .bss 00000004 GLIBC_2.0 locs +000cf700 g DF .text 000000ad GLIBC_2.0 setprotoent +000ac490 w DF .text 00000153 GLIBC_2.1 statvfs64 +000b1b00 g DF .text 00000042 GLIBC_2.1 sendfile +0005e160 g DF .text 0000002a GLIBC_2.1 _IO_do_write +000bfb30 w DF .text 000002b5 GLIBC_2.0 lckpwdf +00000000 w D *UND* 00000000 __pthread_getspecific +000f4210 g DF .text 0000005f (GLIBC_2.0) getprotobyname_r +000c5fa0 g DF .text 0000002a GLIBC_2.0 pthread_condattr_destroy +000acaa0 w DF .text 0000007c GLIBC_2.0 write +000c5f60 g DF .text 00000033 GLIBC_2.0 pthread_attr_setscope +000b2b60 g DF .text 00000099 GLIBC_2.2 getrlimit64 +0011748c g DO .data 00000004 (GLIBC_2.2) __ctype32_toupper +000d2210 g DF .text 00000e93 GLIBC_2.2 rcmd_af +00065670 g DF .text 00000107 GLIBC_2.0 __libc_valloc +0006eac0 g DF .text 00000069 GLIBC_2.0 wmemchr +000cd440 g DF .text 0000002f GLIBC_2.0 inet_netof +000ba200 g DF .text 0000003c GLIBC_2.0 ioperm +000b2cb0 w DF .text 000000d2 GLIBC_2.0 ulimit +000328c0 w DF .text 00000027 GLIBC_2.1 __strtod_l +00115480 g DO .data.rel.ro 000001f4 (GLIBC_2.1) _sys_errlist +000cbe30 w DF .text 0000011e GLIBC_2.1 backtrace +00020e50 w DF .text 00000038 GLIBC_2.0 __ctype_get_mb_cur_max +00029b60 g DF .text 0000001f GLIBC_2.0 atof +000cbe30 g DF .text 0000011e GLIBC_2.1 __backtrace +001190fc w DO .bss 00000004 GLIBC_2.0 environ +000cbf50 g DF .text 000002bd GLIBC_2.1 __backtrace_symbols +000ba2c0 w DF .text 00000066 GLIBC_2.0 sysctl +000dfb80 g DF .text 0000001f GLIBC_2.0 xdr_free +00000000 DO *UND* 000001cc GLIBC_PRIVATE _rtld_global_ro +000e01d0 g DF .text 0000003a GLIBC_2.0 xdr_netobj +000b3cd0 g DF .text 00000036 GLIBC_2.0 fdatasync +00043cb0 g DF .text 00000024 GLIBC_2.0 fprintf +000f19f0 g DF .text 0000002a (GLIBC_2.0) _IO_do_write +000b7410 g DF .text 000002d5 GLIBC_2.0 fcvt_r +00117900 g DO .data 00000050 GLIBC_2.0 _IO_stdin_ +0002c140 w DF .text 00000052 GLIBC_2.0 jrand48_r +00029000 g DF .text 0000006e GLIBC_2.0 sigstack +0011a8e8 g DO .bss 00000004 GLIBC_2.1 __key_encryptsession_pk_LOCAL +00028af0 w DF .text 0000003a GLIBC_2.0 kill +0005d380 g DF .text 00000098 GLIBC_2.1 fputs_unlocked +000bd760 w DF .text 000000d5 GLIBC_2.0 iswgraph +000886e0 g DF .text 000000a8 GLIBC_2.0 setpwent +000c4550 w DF .text 000000af GLIBC_2.1 argp_state_help +000e3a50 g DF .text 00000081 GLIBC_2.1 key_encryptsession_pk +0007ae30 g DF .text 0000001b GLIBC_2.0 ctime +00069ba0 g DF .text 00000010 GLIBC_2.0 ffs +00021710 g DF .text 0000010e GLIBC_2.3 __uselocale +000eda10 w DF .text 00000189 GLIBC_2.2.4 dl_iterate_phdr +000cb860 g DF .text 0000008a GLIBC_2.0 __nss_group_lookup +000dd830 g DF .text 000000af GLIBC_2.0 svc_register +000e6fa0 g DF .text 00000068 GLIBC_2.1 xdr_int8_t +000dfbb0 g DF .text 00000041 GLIBC_2.0 xdr_long +00068140 g DF .text 000001aa GLIBC_2.0 strcat +0009f5d0 w DF .text 00000081 GLIBC_2.0 re_compile_pattern +0011a6e4 g DO .bss 00000004 GLIBC_2.1 argp_program_version +000d7b90 g DF .text 000001c1 GLIBC_2.3.4 getsourcefilter +00057780 g DF .text 000000e3 GLIBC_2.2 putwc +000ab470 g DF .text 00000038 GLIBC_2.2 posix_spawnattr_setsigdefault +00022e70 w DF .text 00000043 GLIBC_2.0 dcgettext +000baea0 g DF .text 00000039 GLIBC_2.0 bind +00030150 w DF .text 00000027 GLIBC_2.3 strtof_l +000be1a0 g DF .text 0000007d GLIBC_2.1 __iswcntrl_l +0002bd30 g DF .text 00000052 GLIBC_2.0 rand_r +0008a610 g DF .text 0000003a GLIBC_2.0 __setpgid +00117484 g DO .data 00000004 (GLIBC_2.0) __ctype_toupper +000b4e30 w DF .text 0000035f GLIBC_2.0 getmntent_r +000cf4b0 g DF .text 000000a2 GLIBC_2.0 getprotoent +000d7d60 g DF .text 0000017a GLIBC_2.3.4 setsourcefilter +000dd2d0 g DF .text 00000042 GLIBC_2.0 svcerr_systemerr +00028ee0 w DF .text 00000114 GLIBC_2.0 sigvec +000d5be0 g DF .text 00000326 GLIBC_2.1 if_nameindex +000c6b00 g DF .text 00000028 GLIBC_2.0 inet_addr +000b3350 w DF .text 00000072 GLIBC_2.0 readv +000b79e0 g DF .text 000000c3 GLIBC_2.0 qfcvt +000cd390 w DF .text 00000007 GLIBC_2.0 ntohl +000b54b0 g DF .text 00000050 GLIBC_2.1 truncate64 +000bd040 g DF .text 00000019 GLIBC_2.0 __profile_frequency +0003ee90 g DF .text 00000036 GLIBC_2.0 vprintf +0006d710 g DF .text 00000023 GLIBC_2.1.1 __strchr_g +000ba4d0 w DF .text 00000057 GLIBC_2.3 readahead +000c5cc0 g DF .text 0000002a (GLIBC_2.0) pthread_attr_init +000ba490 w DF .text 0000003a GLIBC_2.1 umount2 +00069c20 g DF .text 00000041 GLIBC_2.0 __stpcpy +000e4030 g DF .text 00000057 GLIBC_2.0 xdr_cryptkeyarg +000b5550 g DF .text 00000032 GLIBC_2.0 chflags +000b7970 g DF .text 00000064 GLIBC_2.0 qecvt +000abd30 g DF .text 0000003c GLIBC_2.0 mkfifo +000227c0 w DF .text 00000017 GLIBC_2.3 isspace_l +0007b7f0 g DF .text 0000003a GLIBC_2.0 __gettimeofday +000283e0 w DF .text 0000000d GLIBC_2.0 scalbnl +000d58b0 g DF .text 000000ae GLIBC_2.1 if_nametoindex +00061490 g DF .text 00000172 GLIBC_2.0 _IO_str_overflow +000ee430 g DF .text 00000021 GLIBC_2.0 __deregister_frame_info +0006d790 g DF .text 00000024 GLIBC_2.1.1 __strrchr_c +000b70d0 g DF .text 0000003c GLIBC_2.0 madvise +00115480 g DO .data.rel.ro 000001f4 (GLIBC_2.1) sys_errlist +0005bd00 w DF .text 000001c8 GLIBC_2.0 obstack_vprintf +000713d0 w DF .text 0000003e GLIBC_2.3 wcstoll_l +000b3d10 g DF .text 00000039 GLIBC_2.0 reboot +000bb1e0 w DF .text 00000078 GLIBC_2.0 __send +000ad1a0 w DF .text 00000036 GLIBC_2.0 chdir +00029770 w DF .text 00000069 GLIBC_2.1 sigwaitinfo +00057b90 g DF .text 0000003b GLIBC_2.2 swprintf +000c5de0 g DF .text 00000033 GLIBC_2.0 pthread_attr_setinheritsched +00027be0 g DF .text 00000011 GLIBC_2.0 __finite +00086c90 g DF .text 000000bf GLIBC_2.0 initgroups +0006e090 g DF .text 00000022 GLIBC_2.1.1 __memset_cg +00070e50 w DF .text 0000003e GLIBC_2.3 wcstoul_l +000ac070 g DF .text 0000003a GLIBC_2.2 __statfs +00117fe0 g DO .bss 00000004 (GLIBC_2.0) _errno +000db700 g DF .text 00000105 GLIBC_2.0 pmap_unset +0005bff0 g DF .text 000000e1 GLIBC_2.1 fseeko +000b3680 w DF .text 00000032 GLIBC_2.0 setregid +000b15c0 g DF .text 00000043 GLIBC_2.2 posix_fadvise +000b9fa0 g DF .text 0000003c GLIBC_2.3 listxattr +00029980 g DF .text 0000006e GLIBC_2.1 sigignore +000bbb90 g DF .text 0000004d GLIBC_2.0 shmdt +00027c20 w DF .text 000001cf GLIBC_2.0 modf +000ac3f0 g DF .text 00000094 GLIBC_2.1 fstatvfs +00087420 g DF .text 000000a6 GLIBC_2.0 endgrent +000bb360 g DF .text 00000039 GLIBC_2.0 setsockopt +001170f8 g DO .data 00000002 GLIBC_2.0 __fpu_control +000be420 g DF .text 0000007d GLIBC_2.1 __iswpunct_l +00028770 w DF .text 000000da GLIBC_2.0 bsd_signal +000dfed0 g DF .text 00000068 GLIBC_2.0 xdr_short +000be220 w DF .text 0000007d GLIBC_2.3 iswdigit_l +000ccb80 g DF .text 00000113 GLIBC_2.3.4 __printf_chk +0005b130 g DF .text 000000e1 GLIBC_2.0 fseek +0006ad60 w DF .text 00000049 GLIBC_2.0 argz_extract +00056580 g DF .text 0000018f GLIBC_2.0 _IO_setvbuf +000bab50 w DF .text 00000042 GLIBC_2.0 mremap +000c61d0 g DF .text 0000003a GLIBC_2.0 pthread_setschedparam +00039c50 g DF .text 00000030 GLIBC_2.0 ctermid +000f0870 g DF .text 0000003b (GLIBC_2.0) atexit +00089220 w DF .text 00000029 GLIBC_2.0 wait3 +000bb6d0 g DF .text 00000051 GLIBC_2.1 __libc_sa_len +00023de0 w DF .text 00000042 GLIBC_2.2 ngettext +00052900 g DF .text 0000007c GLIBC_2.0 tmpnam_r +000dd6d0 g DF .text 00000082 GLIBC_2.0 svc_getreqset +00020d80 g DF .text 0000007a GLIBC_2.0 nl_langinfo +000bbbe0 g DF .text 0000004f GLIBC_2.0 shmget +000225f0 g DF .text 00000042 GLIBC_2.0 _tolower +00055380 w DF .text 0000024e GLIBC_2.0 getdelim +000d4a00 g DF .text 00000125 GLIBC_2.0 getaliasbyname +000433d0 g DF .text 0000002d GLIBC_2.1 printf_size_info +000b7ab0 g DF .text 0000031e GLIBC_2.0 qfcvt_r +0002b7b0 w DF .text 0000007b GLIBC_2.0 setstate +000b2420 g DF .text 00000042 GLIBC_2.0 cfsetospeed +00069eb0 w DF .text 0000003e GLIBC_2.0 memccpy +000b5590 g DF .text 00000032 GLIBC_2.0 fchflags +000bade0 g DF .text 00000036 GLIBC_2.0 uselib +0006d360 g DF .text 0000001d GLIBC_2.1.1 __memset_ccn_by4 +00070590 w DF .text 00000052 GLIBC_2.0 wcstold +00117288 g DO .data 00000004 GLIBC_2.0 optind +00015410 w DF .text 00000016 GLIBC_2.1 gnu_get_libc_release +000abc70 g DF .text 00000015 GLIBC_2.2 posix_spawnattr_setschedparam +00055940 g DF .text 000000d3 GLIBC_2.0 _IO_padn +00089900 w DF .text 00000078 GLIBC_2.2.6 __nanosleep +000be320 g DF .text 0000007d GLIBC_2.1 __iswgraph_l +000697c0 w DF .text 0000019b GLIBC_2.0 memchr +00055620 g DF .text 000001a4 GLIBC_2.1 _IO_getline_info +000e96e0 g DF .text 00000015 GLIBC_2.1 fattach +000dd9a0 g DF .text 00000098 GLIBC_2.2 svc_getreq_poll +00088b50 g DF .text 00000332 GLIBC_PRIVATE _nss_files_parse_pwent +000b40c0 w DF .text 00000036 GLIBC_2.0 swapoff +000cd150 g DF .text 00000046 GLIBC_2.3.4 __chk_fail +00000000 g DO *ABS* 00000000 GLIBC_2.3.2 GLIBC_2.3.2 +0011a7c0 g DO .bss 00000030 GLIBC_2.2 _res_hconf +00027310 g DF .text 00000866 GLIBC_PRIVATE __open_catalog +001178dc g DO .data 00000004 GLIBC_2.0 stdin +000b8450 w DF .text 0000005b GLIBC_2.0 tfind +000890f0 w DF .text 000000a9 GLIBC_2.0 wait +000cc210 w DF .text 0000022e GLIBC_2.1 backtrace_symbols_fd +00028ea0 g DF .text 0000001c GLIBC_PRIVATE __libc___xpg_sigpause +00092ee0 g DF .text 000002ec GLIBC_2.2.3 fnmatch +000b7110 g DF .text 0000003c GLIBC_2.2 mincore +000a27f0 w DF .text 0000004a GLIBC_2.0 re_match_2 +000dc980 g DF .text 0000009e GLIBC_2.0 xdr_accepted_reply +00104d70 g DO .rodata 00000004 GLIBC_2.3 sys_nerr +00061710 g DF .text 00000047 GLIBC_2.0 _IO_str_init_static +000859e0 g DF .text 000001ed GLIBC_2.0 scandir +000ac750 w DF .text 00000010 GLIBC_2.0 umask +001198e0 g DO .bss 00000200 (GLIBC_2.0) _res +0006b750 g DF .text 0000103c GLIBC_2.1 __strcoll_l +000b8b20 g DF .text 00000048 GLIBC_2.0 lfind +000be6a0 w DF .text 00000072 GLIBC_2.3 iswctype_l +00055f50 g DF .text 0000017f GLIBC_2.0 _IO_puts +00069bb0 g DF .text 00000062 GLIBC_2.1 ffsll +00036df0 w DF .text 00000042 GLIBC_2.3 strfmon_l +00043de0 g DF .text 00000034 GLIBC_2.0 dprintf +000b9ec0 g DF .text 0000003a GLIBC_2.3 fremovexattr +000dd360 g DF .text 0000001c GLIBC_2.0 svcerr_weakauth +000d8c40 g DF .text 000000c1 GLIBC_2.0 xdr_authunix_parms +000f0c10 g DF .text 0000016c (GLIBC_2.0) fclose +0005ed90 g DF .text 0000020b GLIBC_2.1 _IO_file_underflow +000d4110 g DF .text 000002e8 GLIBC_2.0 innetgr +000de7a0 g DF .text 00000012 GLIBC_2.0 svcfd_create +00000000 g DO *ABS* 00000000 GLIBC_2.2.1 GLIBC_2.2.1 +0007b7a0 g DF .text 0000003c GLIBC_2.0 mktime +00088e90 w DF .text 000001d7 GLIBC_2.0 fgetpwent_r +00117db8 g DO .data 00000004 GLIBC_2.0 __progname +00118d44 w DO .bss 00000004 GLIBC_2.0 timezone +00028ec0 g DF .text 00000019 GLIBC_PRIVATE __libc_sigpause +0006a480 w DF .text 00000179 GLIBC_2.1 strcasestr +00000000 g DO *ABS* 00000000 GLIBC_2.0 GLIBC_2.0 +000f3ff0 g DF .text 00000041 (GLIBC_2.0) gethostent_r +000eee60 g DF .text 000000f4 GCC_3.0 __deregister_frame_info_bases +00027080 g DF .text 00000086 GLIBC_2.0 catgets +00066ce0 g DF .text 0000004d GLIBC_2.2 mcheck_check_all +00060a30 g DF .text 00000022 GLIBC_2.0 _IO_flush_all +0005ad00 w DF .text 00000068 GLIBC_2.0 ferror +000693c0 g DF .text 00000186 GLIBC_2.0 strstr +0007a0a0 g DF .text 0000007c GLIBC_2.1 __wcsncasecmp_l +000eb810 g DF .text 0000006a GLIBC_2.1 unlockpt +00056fd0 g DF .text 0000003b GLIBC_2.2 getwchar_unlocked +000dfea0 g DF .text 0000002a GLIBC_2.1.1 xdr_u_longlong_t +000600d0 g DF .text 00000008 GLIBC_2.2 _IO_iter_file +000e4830 g DF .text 000001d9 GLIBC_2.1 rtime +0005fe30 g DF .text 0000003b GLIBC_2.0 _IO_adjust_column +0002bd10 g DF .text 00000017 GLIBC_2.0 rand +000ebca0 g DF .text 00000017 GLIBC_2.1 getutxent +0011a6d8 g DO .bss 00000004 GLIBC_2.0 loc1 +00028230 w DF .text 0000001e GLIBC_2.0 copysignl +000e6d80 g DF .text 000000bb GLIBC_2.1.1 xdr_uint64_t +0005c0e0 g DF .text 000001c8 GLIBC_2.1 ftello +000acdc0 w DF .text 0000003a GLIBC_2.0 flock +00028220 w DF .text 0000000e GLIBC_2.0 finitel +00062bd0 w DF .text 000003db GLIBC_2.0 malloc_set_state +0008a500 w DF .text 0000002f GLIBC_2.0 setgid +00015260 g DF .text 00000005 GLIBC_2.0 __libc_init_first +0006d740 g DF .text 00000020 GLIBC_2.1.1 __strchrnul_c +00028770 w DF .text 000000da GLIBC_2.0 signal +000524e0 g DF .text 0000021b GLIBC_2.0 psignal +000c2b90 w DF .text 00000327 GLIBC_2.1 argp_failure +000aca20 w DF .text 0000007c GLIBC_2.0 read +00117fe0 g DO .bss 00000004 (GLIBC_2.0) errno +00086060 g DF .text 0000000a GLIBC_2.0 dirfd +000e9920 w DF .text 00000059 GLIBC_2.0 endutent +0006e060 g DF .text 00000022 GLIBC_2.1.1 __memset_gg +000bf210 g DF .text 000000a8 GLIBC_2.0 setspent +0006e090 g DF .text 00000022 GLIBC_2.1.1 __memset_cc +000ad3e0 g DF .text 000000bd GLIBC_2.0 get_current_dir_name +000be8b0 g DF .text 00000125 GLIBC_2.0 getspnam +0006d540 g DF .text 00000031 GLIBC_2.1.1 __stpcpy_g +000b66c0 g DF .text 00000080 GLIBC_2.0 openlog +000aaf90 w DF .text 00000094 GLIBC_2.1 pread64 +00029530 g DF .text 00000027 GLIBC_PRIVATE __libc_current_sigrtmin_private +000e0000 g DF .text 0000004e GLIBC_2.0 xdr_u_char +000bb260 w DF .text 00000078 GLIBC_2.0 sendmsg +000be520 g DF .text 0000007d GLIBC_2.1 __iswupper_l +00107908 g DO .rodata 00000010 GLIBC_2.1 in6addr_loopback +000bdd70 w DF .text 00000072 GLIBC_2.0 iswctype +000684b0 g DF .text 0000004b GLIBC_2.0 strcoll +000b6490 g DF .text 0000008a GLIBC_2.0 closelog +000da7c0 g DF .text 00000048 GLIBC_2.0 clntudp_create +000224d0 g DF .text 0000007d GLIBC_2.0 isupper +000e39c0 g DF .text 00000081 GLIBC_2.1 key_decryptsession_pk +0006aad0 g DF .text 0000003e GLIBC_2.0 __argz_count +00022840 g DF .text 00000011 GLIBC_2.1 __toupper_l +00068c40 g DF .text 000000f3 GLIBC_2.0 strncmp +000ab570 g DF .text 00000051 GLIBC_2.2 posix_spawnp +00043cb0 w DF .text 00000024 GLIBC_2.0 _IO_fprintf +0011a668 g DO .bss 00000004 (GLIBC_2.0) _obstack +000bacb0 g DF .text 00000048 GLIBC_2.0 query_module +0002af50 g DF .text 00000033 GLIBC_2.0 __secure_getenv +00035b50 g DF .text 0000004b GLIBC_2.0 l64a +00104d70 g DO .rodata 00000004 GLIBC_2.3 _sys_nerr +000685d0 g DF .text 00000146 GLIBC_2.1.1 __strverscmp +00058400 g DF .text 00000081 GLIBC_2.2 _IO_wdefault_doallocate +000226e0 g DF .text 00000017 GLIBC_2.1 __isalpha_l +000294b0 g DF .text 00000035 GLIBC_2.0 sigorset +0006f6e0 w DF .text 00000360 GLIBC_2.0 wcsrtombs +000e1a60 g DF .text 000000e8 GLIBC_2.0 getpublickey +000557d0 g DF .text 0000016f GLIBC_2.0 _IO_gets +00065780 g DF .text 000001d4 GLIBC_2.0 __libc_malloc +00085c40 g DF .text 00000024 GLIBC_2.0 alphasort +000aaf90 w DF .text 00000094 GLIBC_2.1 __pread64 +000b5fa0 g DF .text 00000040 GLIBC_2.0 getusershell +000b3870 g DF .text 0000003a GLIBC_2.0 sethostname +000bb690 g DF .text 00000040 GLIBC_2.0 __cmsg_nxthdr +00053230 g DF .text 00000032 GLIBC_2.0 _IO_ftrylockfile +000bd060 w DF .text 00000013 GLIBC_2.0 mcount +00022720 g DF .text 00000017 GLIBC_2.1 __isdigit_l +00085c70 g DF .text 00000024 GLIBC_2.1 versionsort +0006ec60 g DF .text 00000051 GLIBC_2.0 wmemset +000b98a0 w DF .text 0000001a GLIBC_2.0 get_avphys_pages +00000000 g DO *ABS* 00000000 GLIBC_PRIVATE GLIBC_PRIVATE +0008a680 g DF .text 0000001a GLIBC_2.0 setpgrp +000a9f60 g DF .text 00000df2 GLIBC_2.1 wordexp +0005ff30 g DF .text 0000003a GLIBC_2.0 _IO_marker_delta +000d4400 g DF .text 00000097 GLIBC_PRIVATE __internal_endnetgrent +000635b0 g DF .text 000000b8 GLIBC_2.0 __libc_free +00068d40 g DF .text 000000a3 GLIBC_2.0 strncpy +000adf90 w DF .text 00000036 GLIBC_2.0 unlink +0002aed0 w DF .text 00000073 GLIBC_2.0 setenv +000b2c70 w DF .text 0000003a GLIBC_2.0 getrusage +000b3ca0 g DF .text 0000002e GLIBC_2.0 sync +0005c2b0 g DF .text 0000024c GLIBC_2.1 freopen64 +0006de30 g DF .text 00000047 GLIBC_2.1.1 __strpbrk_c3 +00058190 g DF .text 0000004c GLIBC_2.2 _IO_sungetwc +00117db8 w DO .data 00000004 GLIBC_2.0 program_invocation_short_name +00069d10 w DF .text 00000068 GLIBC_2.0 strcasecmp +000cd390 g DF .text 00000007 GLIBC_2.0 htonl +000bb2e0 w DF .text 00000078 GLIBC_2.0 sendto +000ac7e0 g DF .text 00000015 GLIBC_2.3.2 lchmod +000dfc30 g DF .text 00000065 GLIBC_2.0 xdr_u_long +000226e0 w DF .text 00000017 GLIBC_2.3 isalpha_l +000a4490 w DF .text 00000036 GLIBC_2.0 sched_get_priority_max +000b4020 g DF .text 00000015 GLIBC_2.0 revoke +0005efa0 g DF .text 00000063 GLIBC_2.1 _IO_file_setbuf +000abb70 g DF .text 0000003a GLIBC_2.2 posix_spawnattr_getsigmask +000d45d0 g DF .text 00000068 GLIBC_2.0 setnetgrent +00053270 w DF .text 0000002d GLIBC_2.0 funlockfile +000ebe10 g DF .text 00000248 GLIBC_PRIVATE _dl_open +000785d0 g DF .text 00000096 GLIBC_2.0 wcwidth +00022560 g DF .text 00000011 GLIBC_2.0 isascii +000f4100 g DF .text 00000066 (GLIBC_2.0) getnetbyname_r +000dca20 g DF .text 00000081 GLIBC_2.0 xdr_replymsg +00065c60 g DF .text 0000021c GLIBC_2.0 realloc +000b4900 w DF .text 0000046f GLIBC_2.0 addmntent +0002b070 w DF .text 00000036 GLIBC_2.0 on_exit +000c6550 g DF .text 00000158 GLIBC_2.3.2 __register_atfork +000286a0 g DF .text 00000063 GLIBC_PRIVATE __libc_siglongjmp +0005bfd0 w DF .text 00000017 GLIBC_2.0 fcloseall +000bd080 g DF .text 000000bd GLIBC_2.0 towupper +000be220 g DF .text 0000007d GLIBC_2.1 __iswdigit_l +000e3c40 g DF .text 00000103 GLIBC_2.1 key_gendes +000be2a0 g DF .text 0000007d GLIBC_2.1 __iswlower_l +000d02b0 g DF .text 000000a2 GLIBC_2.0 getrpcent +00068720 g DF .text 00000057 GLIBC_2.0 __strdup +0002b1a0 g DF .text 0000003c GLIBC_2.1.3 __cxa_atexit +000be120 w DF .text 0000007d GLIBC_2.3 iswblank_l +00117328 g DO .data 00000004 GLIBC_2.1 argp_err_exit_status +000ebdd0 g DF .text 00000033 GLIBC_2.1.1 getutmp +000527a0 g DF .text 000000a2 GLIBC_2.1 tmpfile64 +00037b30 w DF .text 00000065 GLIBC_2.1 makecontext +00027f50 g DF .text 00000018 GLIBC_2.0 __isnanf +00000000 g DO *ABS* 00000000 GLIBC_2.3.3 GLIBC_2.3.3 +0006d5c0 g DF .text 00000033 GLIBC_2.1.1 __strcat_g +00104d74 g DO .rodata 00000004 (GLIBC_2.0) sys_nerr +00115680 g DO .data.rel.ro 00000100 (GLIBC_2.1) _sys_siglist +00058290 g DF .text 0000003d GLIBC_2.2 _IO_wmarker_delta +000ba900 g DF .text 00000036 GLIBC_2.3.2 epoll_create +000f3f10 g DF .text 00000063 (GLIBC_2.0) gethostbyname2_r +000f09a0 g DF .text 00000095 (GLIBC_2.0) fopen +00069ac0 g DF .text 0000009d GLIBC_2.0 bcopy +000700c0 w DF .text 00000075 GLIBC_2.1 wcsnlen +000c9730 w DF .text 0000010e (GLIBC_2.0) res_init +0005b220 g DF .text 000000cc GLIBC_2.0 _IO_getc +00062a90 g DF .text 0000000f GLIBC_2.0 __libc_mallopt +000b55f0 g DF .text 0000001a GLIBC_2.0 remque +00069550 g DF .text 0000010c GLIBC_2.0 strtok +000bded0 w DF .text 0000005d GLIBC_2.0 towctrans +00056710 g DF .text 000000d4 GLIBC_2.0 _IO_ungetc +00029240 g DF .text 00000027 GLIBC_2.0 sigfillset +000e6f30 g DF .text 00000069 GLIBC_2.1 xdr_uint16_t +00069960 g DF .text 0000001e GLIBC_2.0 memcmp +000a43e0 g DF .text 0000003c GLIBC_2.0 __sched_setscheduler +000bb020 g DF .text 00000039 GLIBC_2.0 listen +000dd380 g DF .text 00000042 GLIBC_2.0 svcerr_noprog +000f4f20 g DF __libc_freeres_fn 00000087 GLIBC_2.1 __libc_freeres +0007aee0 g DF .text 00000030 GLIBC_2.0 __gmtime_r +000a44d0 w DF .text 00000036 GLIBC_2.0 sched_get_priority_min +000b1670 g DF .text 000001d5 GLIBC_2.2 posix_fallocate +000df0b0 g DF .text 00000344 GLIBC_2.0 svcudp_bufcreate +000e0100 g DF .text 000000cd GLIBC_2.0 xdr_opaque +000a6da0 g DF .text 00000059 GLIBC_2.1 wordfree +00062b30 w DF .text 00000092 GLIBC_2.0 malloc_trim +000d7840 g DF .text 00000152 GLIBC_2.3.4 getipv4sourcefilter +00117480 g DO .data 00000004 (GLIBC_2.0) __ctype_tolower +000ab430 g DF .text 00000038 GLIBC_2.2 posix_spawnattr_getsigdefault +00037ba0 w DF .text 000000a6 GLIBC_2.1 swapcontext +00089980 w DF .text 00000059 GLIBC_2.0 fork +000299f0 g DF .text 0000016d GLIBC_2.1 sigset +00052300 g DF .text 00000034 GLIBC_2.0 sscanf +000713d0 w DF .text 0000003e GLIBC_2.1 __wcstoll_l +00022740 g DF .text 00000017 GLIBC_2.1 __islower_l +0006d8c0 g DF .text 00000047 GLIBC_2.1.1 __strspn_g +000c60a0 g DF .text 0000002a GLIBC_2.3.2 pthread_cond_signal +00089bb0 g DF .text 00000034 GLIBC_2.0 execv +000b4da0 w DF .text 00000084 GLIBC_2.0 setmntent +000a4460 g DF .text 0000002e GLIBC_2.0 __sched_yield +000220d0 g DF .text 0000007d GLIBC_2.0 isalpha +000ac350 g DF .text 00000094 GLIBC_2.1 statvfs +00086e80 g DF .text 000000a2 GLIBC_2.0 getgrent +00069e10 g DF .text 00000041 GLIBC_2.1 __strcasecmp_l +0006e4e0 g DF .text 0000003c GLIBC_2.0 wcscspn +00000000 g DO *ABS* 00000000 GLIBC_2.2.3 GLIBC_2.2.3 +00070290 g DF .text 00000058 GLIBC_2.0 wcstoul +000f1a20 g DF .text 0000006d (GLIBC_2.0) _IO_file_write +0005ff10 g DF .text 00000013 GLIBC_2.0 _IO_marker_difference +00068b80 g DF .text 000000b8 GLIBC_2.0 strncat +0008a790 w DF .text 00000035 GLIBC_2.0 setresuid +000b2ef0 g DF .text 00000031 GLIBC_2.0 vtimes +0008a2b0 g DF .text 0000017a GLIBC_2.0 execlp +000ab340 g DF .text 00000097 GLIBC_2.2 posix_spawn_file_actions_adddup2 +00057330 g DF .text 0000007b GLIBC_2.2 fputws_unlocked +000bb780 w DF .text 000000b5 GLIBC_2.0 msgsnd +00028a40 w DF .text 00000053 GLIBC_2.0 sigaction +0002bf80 g DF .text 0000002d GLIBC_2.0 lcong48 +000e57f0 g DF .text 000002da GLIBC_2.1 clntunix_create +0006e440 g DF .text 00000021 GLIBC_2.0 wcschr +000583a0 g DF .text 00000058 GLIBC_2.2 _IO_free_wbackup_area +000dc850 g DF .text 0000009d GLIBC_2.0 xdr_callhdr +000b3930 g DF .text 0000003a GLIBC_2.0 setdomainname +0009f490 w DF .text 0000013f GLIBC_2.0 re_comp +000b4d70 w DF .text 0000002a GLIBC_2.0 endmntent +0002bf10 g DF .text 0000002d GLIBC_2.0 srand48 +000c9730 g DF .text 0000010e GLIBC_2.2 __res_init +000db540 g DF .text 000000e7 GLIBC_2.0 getrpcport +000288a0 g DF .text 00000042 GLIBC_2.0 killpg +000b1510 g DF .text 000000a2 GLIBC_2.1 __poll +000b3760 g DF .text 00000026 GLIBC_2.0 __getpagesize +000cf340 g DF .text 00000165 GLIBC_2.1.2 getprotobynumber_r +00054ca0 w DF .text 00000113 GLIBC_2.0 fread +0011962c g DO .bss 00000004 GLIBC_PRIVATE __librt_multiple_threads +000ccfb0 g DF .text 00000195 GLIBC_2.3.4 __gets_chk +0006f160 g DF .text 0000024b GLIBC_2.0 __mbrtowc +0008a530 w DF .text 00000097 GLIBC_2.0 group_member +000cda90 g DF .text 000002d2 GLIBC_2.1.2 gethostbyaddr_r +000abc10 g DF .text 0000003b GLIBC_2.2 posix_spawnattr_setsigmask +000b41f0 g DF .text 00000053 GLIBC_2.0 ualarm +000ccda0 g DF .text 00000110 GLIBC_2.3.4 __vprintf_chk +00060180 g DF .text 00000052 GLIBC_2.0 _IO_free_backup_area +000adbd0 w DF .text 000002b3 GLIBC_2.0 ttyname_r +00029340 w DF .text 00000015 GLIBC_2.0 sigreturn +000cd620 g DF .text 000002c6 GLIBC_2.0 inet_network +000e95f0 g DF .text 00000048 GLIBC_2.1 getpmsg +000bc350 w DF .text 000001c1 GLIBC_2.0 monstartup +00000000 g DO *ABS* 00000000 GLIBC_2.2 GLIBC_2.2 +00057c90 g DF .text 00000034 GLIBC_2.2 fwscanf +000b3090 w DF .text 00000073 GLIBC_2.0 sbrk +0008a8f0 g DF .text 00000149 GLIBC_2.0 getlogin_r +00103c60 g DO .rodata 00000024 GLIBC_PRIVATE _itoa_lower_digits +00068720 w DF .text 00000057 GLIBC_2.0 strdup +00028050 w DF .text 0000000d GLIBC_2.0 scalbnf +00060fb0 g DF .text 00000138 GLIBC_2.0 __underflow +000c6950 w DF .text 000001a9 GLIBC_2.0 inet_aton +00022760 g DF .text 00000017 GLIBC_2.1 __isgraph_l +000a4550 g DF .text 0000007a GLIBC_2.3.4 sched_getaffinity +000b46a0 g DF .text 0000002b GLIBC_2.0 getfsent +0007e0b0 g DF .text 00000052 GLIBC_2.1 getdate +0006e1a0 g DF .text 00000069 GLIBC_2.1.1 __strncpy_by4 +000ba240 g DF .text 00000036 GLIBC_2.0 iopl +000d1230 g DF .text 0000006a GLIBC_2.0 ether_ntoa_r +00067fa0 g DF .text 0000002c GLIBC_2.0 _obstack_allocated_p +000abfb0 g DF .text 00000032 GLIBC_2.2 __xstat64 +0002c610 g DF .text 00000058 GLIBC_2.0 strtoull +000ce750 g DF .text 000000a9 GLIBC_2.0 endhostent +00000000 w D *UND* 00000000 _pthread_cleanup_push_defer +000682f0 w DF .text 00000167 GLIBC_2.0 index +0009ff50 w DF .text 00000125 GLIBC_2.0 regcomp +0002c110 g DF .text 0000002e GLIBC_2.0 mrand48_r +00029170 g DF .text 00000028 GLIBC_2.0 __sigismember +000adf10 w DF .text 0000003a GLIBC_2.0 symlink +0007b7f0 w DF .text 0000003a GLIBC_2.0 gettimeofday +000b6310 g DF .text 000000c2 GLIBC_2.0 ttyslot +00028b70 g DF .text 000000a2 GLIBC_2.1.3 __sigsuspend +00037ac0 w DF .text 00000068 GLIBC_2.0 setcontext +000f4040 g DF .text 00000063 (GLIBC_2.0) getnetbyaddr_r +000d4950 g DF .text 000000a2 GLIBC_2.0 getaliasent +000f4390 g DF .text 00000037 (GLIBC_2.0) getrpcent_r +00021710 w DF .text 0000010e GLIBC_2.3 uselocale +0007ac70 w DF .text 000000fa GLIBC_2.0 asctime_r +0006e5f0 g DF .text 000000b8 GLIBC_2.0 wcsncat +000ad0b0 g DF .text 00000036 GLIBC_2.0 __pipe +000a41d0 g DF .text 00000043 GLIBC_2.0 getopt +000b3640 w DF .text 00000032 GLIBC_2.0 setreuid +0006d380 g DF .text 0000002f GLIBC_2.1.1 __memset_ccn_by2 +000584f0 g DF .text 000000fd GLIBC_2.2 _IO_wdefault_xsputn +0007af10 g DF .text 00000036 GLIBC_2.0 localtime +0005fa50 g DF .text 00000033 GLIBC_2.0 _IO_default_uflow +000578b0 g DF .text 000000ec GLIBC_2.2 putwchar +00069a10 g DF .text 00000056 GLIBC_2.0 memset +000cc440 g DF .text 00000005 GLIBC_2.2 __cyg_profile_func_enter +00037a10 g DF .text 00000027 GLIBC_2.1 wcstoumax +000e41c0 g DF .text 00000091 GLIBC_2.1 netname2host +000b8e80 g DF .text 00000022 GLIBC_2.0 err +000f3d50 g DF .text 0000005c (GLIBC_2.0) semctl +00015e80 g DF .text 00000038 GLIBC_2.1 iconv_close +0002caf0 w DF .text 0000002e GLIBC_2.1 __strtol_l +000f1e80 g DF .text 0000009a (GLIBC_2.0) _IO_file_sync +000b7340 g DF .text 000000c3 GLIBC_2.0 fcvt +000b2a00 g DF .text 00000030 GLIBC_2.0 cfmakeraw +000aef00 g DF .text 00000024 GLIBC_2.0 ftw +00029360 g DF .text 00000022 GLIBC_2.0 siggetmask +000ace00 g DF .text 000000f6 GLIBC_2.0 lockf +000c6060 g DF .text 00000033 GLIBC_2.3.2 pthread_cond_init +000c6480 g DF .text 0000000b GLIBC_PRIVATE __librt_disable_asynccancel +000763d0 w DF .text 00000037 GLIBC_2.3 wcstold_l +0006e8b0 g DF .text 0000004d GLIBC_2.0 wcsspn +000d1e30 g DF .text 000000cf GLIBC_2.2 iruserok_af +0008a6a0 g DF .text 00000036 GLIBC_2.0 getsid +00054f00 w DF .text 000001d8 GLIBC_2.0 ftell +000227a0 g DF .text 00000015 GLIBC_2.1 __ispunct_l +000cc4a0 g DF .text 0000009e GLIBC_2.3.4 __memmove_chk +0002b8b0 w DF .text 0000005b GLIBC_2.0 srand +000cc970 g DF .text 000000be GLIBC_2.3.4 __vsprintf_chk +000b3f50 g DF .text 000000ca GLIBC_2.0 sethostid +000dd130 g DF .text 00000039 GLIBC_2.2.3 __rpc_thread_svc_pollfd +000f3c60 g DF .text 00000099 (GLIBC_2.1) getrlimit64 +000be610 g DF .text 0000008c GLIBC_2.1 __wctype_l +00069760 g DF .text 00000052 GLIBC_2.0 strxfrm +000be0a0 g DF .text 0000007d GLIBC_2.1 __iswalpha_l +00035ce0 g DF .text 00000067 GLIBC_2.0 strfmon +000f3b10 g DF .text 00000033 (GLIBC_2.3.3) sched_setaffinity +000b98c0 w DF .text 0000001a GLIBC_2.0 get_phys_pages +000445f0 w DF .text 00003c1e GLIBC_2.2 vfwprintf +0006f670 w DF .text 00000067 GLIBC_2.0 mbsrtowcs +000cca30 g DF .text 00000039 GLIBC_2.3.4 __snprintf_chk +00115680 g DO .data.rel.ro 00000080 (GLIBC_2.0) sys_siglist +000be1a0 w DF .text 0000007d GLIBC_2.3 iswcntrl_l +000f2b60 g DF .text 0000005f (GLIBC_2.0) getpwnam_r +000bdc70 w DF .text 000000fd GLIBC_2.0 wctype +0005ac30 g DF .text 0000005c GLIBC_2.0 clearerr +000b9fe0 g DF .text 00000042 GLIBC_2.3 lgetxattr +000c6000 g DF .text 0000002a GLIBC_2.3.2 pthread_cond_broadcast +000ab2a0 g DF .text 00000094 GLIBC_2.2 posix_spawn_file_actions_addopen +0002b830 w DF .text 0000007b GLIBC_2.0 initstate +00062a90 w DF .text 0000000f GLIBC_2.0 mallopt +000cceb0 g DF .text 000000fc GLIBC_2.3.4 __vfprintf_chk +000eb730 g DF .text 000000d7 GLIBC_2.1 grantpt +000ac8c0 w DF .text 000000d4 GLIBC_2.1 open64 +0005b2f0 g DF .text 000000d9 GLIBC_2.0 getchar +000ab4b0 g DF .text 00000012 GLIBC_2.2 posix_spawnattr_getflags +000e0300 g DF .text 0000017a GLIBC_2.0 xdr_string +000cd3a0 w DF .text 0000000e GLIBC_2.0 ntohs +00087e40 g DF .text 00000195 GLIBC_2.0 fgetpwent +000cd4c0 g DF .text 00000105 GLIBC_2.0 inet_ntoa +0008a440 w DF .text 00000008 GLIBC_2.0 getppid +000b2700 w DF .text 000000be GLIBC_2.0 tcgetattr +000e4510 g DF .text 000000fc GLIBC_2.1 user2netname +000cfd00 g DF .text 00000135 GLIBC_2.0 getservbyport +000b4310 g DF .text 0000007a GLIBC_2.0 ptrace +000ca4b0 g DF .text 000000ae GLIBC_2.0 __nss_configure_lookup +0007b7e0 g DF .text 00000010 GLIBC_2.0 time +000f3c20 g DF .text 0000003e (GLIBC_2.2) posix_fallocate64 +000b5cb0 g DF .text 00000052 GLIBC_2.0 endusershell +0006d690 g DF .text 00000042 GLIBC_2.1.1 __strncmp_g +000854a0 w DF .text 00000134 GLIBC_2.0 opendir +00058810 g DF .text 000000e7 GLIBC_2.2 __wunderflow +0006d2a0 g DF .text 00000033 GLIBC_2.1.1 __memcpy_by4 +000cc450 g DF .text 00000050 GLIBC_2.3.4 __memcpy_chk +000cedf0 g DF .text 000000da GLIBC_2.1.2 getnetent_r +00060e70 g DF .text 00000138 GLIBC_2.0 __uflow +0008a490 w DF .text 00000032 GLIBC_2.0 getgroups +000e1690 g DF .text 00000035 GLIBC_2.0 xdrstdio_create +0006d880 g DF .text 00000035 GLIBC_2.1.1 __strspn_cg +000f3ea0 g DF .text 0000006c (GLIBC_2.0) gethostbyaddr_r +000eec70 g DF .text 00000087 GCC_3.0 __register_frame_info_table_bases +00035550 g DF .text 0000007d GLIBC_PRIVATE __libc_system +000d2020 g DF .text 000001c9 GLIBC_2.2 rresvport_af +000222d0 g DF .text 0000007d GLIBC_2.0 isgraph +0006e770 g DF .text 000000ab GLIBC_2.0 wcsncpy +00021bb0 g DF .text 00000162 GLIBC_2.0 __assert_fail +00052300 g DF .text 00000034 GLIBC_2.0 _IO_sscanf +0006d760 g DF .text 00000022 GLIBC_2.1.1 __strchrnul_g +000b1510 w DF .text 000000a2 GLIBC_2.0 poll +00029680 w DF .text 00000072 GLIBC_2.1 sigtimedwait +000ba7c0 g DF .text 0000003a GLIBC_2.0 bdflush +000c60d0 g DF .text 00000033 (GLIBC_2.0) pthread_cond_wait +000d0490 g DF .text 00000125 GLIBC_2.0 getrpcbynumber +000bb730 g DF .text 00000047 GLIBC_2.0 ftok +000f2ac0 g DF .text 0000005f (GLIBC_2.0) getgrnam_r +000f0c10 g DF .text 0000016c (GLIBC_2.0) _IO_fclose +000bdf30 g DF .text 0000007d GLIBC_2.1 __iswxdigit_l +000c6110 g DF .text 0000003a (GLIBC_2.0) pthread_cond_timedwait +00086d50 g DF .text 000000ee GLIBC_2.2.4 getgrouplist +00057fd0 g DF .text 0000002d GLIBC_2.2 _IO_switch_to_wbackup_area +000b6740 g DF .text 00000024 GLIBC_2.0 syslog +00022050 g DF .text 0000007b GLIBC_2.0 isalnum +000784e0 w DF .text 00000037 GLIBC_2.1 __wcstof_l +000ebc20 g DF .text 00000055 GLIBC_2.1 ptsname +00028500 g DF .text 00000023 GLIBC_2.1 __signbitl +000600e0 g DF .text 0000003b GLIBC_2.2 _IO_list_resetlock +00070140 w DF .text 00000024 GLIBC_2.2 wcschrnul +000829f0 w DF .text 000021b8 GLIBC_2.3 wcsftime_l +0007d960 w DF .text 0000003a GLIBC_2.0 getitimer +000b7fa0 w DF .text 00000024 GLIBC_2.0 hdestroy +00052850 g DF .text 000000af GLIBC_2.0 tmpnam +00057b50 w DF .text 00000034 GLIBC_2.2 fwprintf +000abf20 g DF .text 00000082 GLIBC_2.0 __xmknod +00022350 g DF .text 0000007d GLIBC_2.0 isprint +000b36c0 g DF .text 0000004d GLIBC_2.0 seteuid +0002be90 g DF .text 00000034 GLIBC_2.0 mrand48 +000dfca0 g DF .text 0000002a GLIBC_2.0 xdr_u_int +000e0f40 g DF .text 00000056 GLIBC_2.0 xdrrec_skiprecord +000568c0 w DF .text 00000093 GLIBC_2.0 __vsscanf +0005b5d0 w DF .text 000000e7 GLIBC_2.0 putc +0006c810 g DF .text 00000a85 GLIBC_2.1 __strxfrm_l +000a42c0 g DF .text 00000048 GLIBC_2.0 getopt_long_only +0006b750 w DF .text 0000103c GLIBC_2.3 strcoll_l +000b56e0 g DF .text 0000003c GLIBC_2.0 endttyent +000e6ca0 g DF .text 000000d3 GLIBC_2.3.4 xdr_u_quad_t +000be7a0 g DF .text 0000005d GLIBC_2.1 __towctrans_l +000dbd40 g DF .text 000000b1 GLIBC_2.0 xdr_pmaplist +000a45d0 g DF .text 0000013f GLIBC_2.3.4 sched_setaffinity +0006b460 g DF .text 00000088 GLIBC_2.0 envz_strip +000c5d20 g DF .text 00000033 GLIBC_2.0 pthread_attr_getdetachstate +000c6030 g DF .text 0000002a (GLIBC_2.0) pthread_cond_destroy +000ba3c0 w DF .text 00000087 GLIBC_2.0 llseek +0006dcb0 g DF .text 00000048 GLIBC_2.1.1 __strcspn_c2 +000acb20 w DF .text 0000003c GLIBC_2.0 __lseek +00102375 g DO .rodata 00000012 GLIBC_2.0 _nl_default_dirname +000bab00 w DF .text 00000048 GLIBC_2.0 mount +00028ea0 w DF .text 0000001c GLIBC_2.2 __xpg_sigpause +000d06b0 g DF .text 000000a6 GLIBC_2.0 endrpcent +000c71b0 g DF .text 000000c9 GLIBC_2.0 inet_nsap_ntoa +00027be0 w DF .text 00000011 GLIBC_2.0 finite +000b2fc0 g DF .text 0000007c GLIBC_2.0 nice +000555d0 g DF .text 00000045 GLIBC_2.0 _IO_getline +000b4da0 g DF .text 00000084 GLIBC_2.2 __setmntent +00087c30 w DF .text 00000208 GLIBC_2.0 fgetgrent_r +000b4290 g DF .text 00000032 GLIBC_2.0 gtty +000d21f0 g DF .text 0000001c GLIBC_2.0 rresvport +000c6880 g DF .text 000000d0 GLIBC_2.0 herror +0005d1c0 g DF .text 0000005b GLIBC_2.1 fread_unlocked +00068460 g DF .text 00000043 GLIBC_2.0 strcmp +00058000 g DF .text 00000035 GLIBC_2.2 _IO_wdefault_uflow +000b76f0 g DF .text 00000220 GLIBC_2.0 ecvt_r +00117334 g DO .data 00000004 GLIBC_2.0 __check_rhosts_file +00115680 g DO .data.rel.ro 00000080 (GLIBC_2.0) _sys_siglist +000bb3a0 w DF .text 00000039 GLIBC_2.0 shutdown +000c5a10 w DF .text 00000038 GLIBC_2.1 argp_usage +000c47c0 w DF .text 0000001d GLIBC_2.1 argp_help +000e4260 g DF .text 000000f8 GLIBC_2.1 netname2user +00016910 g DF .text 00000016 GLIBC_PRIVATE __gconv_get_alias_db +000c62b0 g DF .text 0000002a GLIBC_2.0 pthread_mutex_unlock +000d9b90 g DF .text 000002ba GLIBC_2.0 callrpc +000dc710 g DF .text 00000135 GLIBC_2.0 _seterr_reply +000dd1b0 g DF .text 00000030 GLIBC_2.2.3 __rpc_thread_svc_fdset +000db950 g DF .text 00000119 GLIBC_2.0 pmap_getmaps +0002be10 g DF .text 00000034 GLIBC_2.0 lrand48 +00117d84 g DO .data 00000004 GLIBC_2.0 obstack_alloc_failed_handler +000be420 w DF .text 0000007d GLIBC_2.3 iswpunct_l +00115480 g DO .data.rel.ro 000001f8 GLIBC_2.3 _sys_errlist +000ad770 g DF .text 00000274 GLIBC_2.0 ttyname +000417c0 w DF .text 0000009d GLIBC_2.0 register_printf_function +00088420 g DF .text 00000125 GLIBC_2.0 getpwuid +000f1630 g DF .text 00000101 (GLIBC_2.1) _IO_fsetpos64 +000f0ec0 g DF .text 00000235 (GLIBC_2.0) _IO_proc_open +000ad030 w DF .text 00000036 GLIBC_2.0 dup +000cd8f0 g DF .text 00000028 GLIBC_2.0 __h_errno_location +000c9920 g DF .text 00000031 GLIBC_PRIVATE __nss_disable_nscd +000ab210 g DF .text 00000084 GLIBC_2.2 posix_spawn_file_actions_addclose +0002cfa0 w DF .text 0000002e GLIBC_2.3 strtoul_l +000b1850 g DF .text 000002ad GLIBC_2.3.3 posix_fallocate64 +000b4080 w DF .text 0000003a GLIBC_2.0 swapon +00028c90 w DF .text 0000007a GLIBC_2.0 sigblock +0006d830 g DF .text 00000048 GLIBC_2.1.1 __strcspn_g +00027c00 w DF .text 0000001e GLIBC_2.0 copysign +000297e0 w DF .text 0000009e GLIBC_2.1 sigqueue +00092ee0 g DF .text 000002ec (GLIBC_2.0) fnmatch +000ad220 w DF .text 00000137 GLIBC_2.0 getcwd +000acba0 w DF .text 00000116 GLIBC_2.0 euidaccess +0006d2e0 g DF .text 0000003c GLIBC_2.1.1 __memcpy_by2 +000c9840 g DF .text 00000028 GLIBC_2.2 __res_state +000cdd70 g DF .text 0000019a GLIBC_2.0 gethostbyname +000690c0 g DF .text 000001f2 GLIBC_2.0 strsignal +00000000 w D *UND* 00000000 _dl_starting_up +000882f0 g DF .text 00000125 GLIBC_2.0 getpwnam +00060d70 g DF .text 00000070 GLIBC_2.0 _IO_setb +000eee30 g DF .text 0000002f GLIBC_2.0 __deregister_frame +000bf160 g DF .text 000000a6 GLIBC_2.0 endspent +000d84c0 g DF .text 0000005c GLIBC_2.0 authnone_create +00022860 w DF .text 00000048 GLIBC_2.3 isctype +000899e0 g DF .text 00000048 GLIBC_2.1.2 __vfork +00000000 g DO *ABS* 00000000 GLIBC_2.2.4 GLIBC_2.2.4 +00027f90 w DF .text 0000001e GLIBC_2.0 copysignf +0006dd60 g DF .text 0000002e GLIBC_2.1.1 __strspn_c1 +00088790 g DF .text 000001de GLIBC_2.1.2 getpwnam_r +000cfa50 g DF .text 00000135 GLIBC_2.0 getservbyname +0005b220 w DF .text 000000cc GLIBC_2.0 fgetc +000b37d0 w DF .text 00000096 GLIBC_2.0 gethostname +00065960 w DF .text 00000225 GLIBC_2.0 memalign +00043d60 g DF .text 00000034 GLIBC_2.0 sprintf +000f20f0 g DF .text 000000e6 (GLIBC_2.0) _IO_file_underflow +000b8d00 g DF .text 0000014d GLIBC_2.0 vwarn +00069a70 g DF .text 00000044 GLIBC_2.0 __mempcpy +000d0b20 g DF .text 00000234 GLIBC_2.0 ether_aton_r +000da030 g DF .text 0000033d GLIBC_2.0 clnttcp_create +00043da0 w DF .text 00000034 GLIBC_2.0 asprintf +000b7050 w DF .text 0000007c GLIBC_2.0 msync +00053ef0 g DF .text 000001ca GLIBC_2.1 fclose +000688b0 w DF .text 00000154 GLIBC_2.0 strerror_r +00059600 g DF .text 000006c2 GLIBC_2.2 _IO_wfile_seekoff +0007ae90 g DF .text 0000000d GLIBC_2.0 difftime +000be020 g DF .text 0000007d GLIBC_2.1 __iswalnum_l +00037a40 w DF .text 0000007b GLIBC_2.1 getcontext +0002dc50 w DF .text 00000052 GLIBC_2.0 strtof +0005a080 g DF .text 00000469 GLIBC_2.2 _IO_wfile_underflow +000b55d0 g DF .text 0000001b GLIBC_2.0 insque +000328c0 w DF .text 00000027 GLIBC_2.3 strtod_l +00022550 w DF .text 0000000b GLIBC_2.1 __toascii_l +000b3af0 w DF .text 000000a2 GLIBC_2.0 pselect +00022550 g DF .text 0000000b GLIBC_2.0 toascii +00053db0 g DF .text 0000013e GLIBC_2.0 _IO_file_doallocate +000545d0 g DF .text 00000151 GLIBC_2.0 _IO_fgets +00068520 g DF .text 000000ae GLIBC_2.0 strcspn +001022fc g DO .rodata 00000005 GLIBC_2.0 _libc_intl_domainname +00069e60 w DF .text 0000004e GLIBC_2.3 strncasecmp_l +000cf040 g DF .text 000001c7 GLIBC_2.1.2 getnetbyname_r +000be4a0 w DF .text 0000007d GLIBC_2.3 iswspace_l +000bdfb0 w DF .text 0000006d GLIBC_2.3 towupper_l +000be3a0 g DF .text 0000007d GLIBC_2.1 __iswprint_l +000b7dd0 g DF .text 000001cc GLIBC_2.0 qecvt_r +000e3ec0 g DF .text 00000068 GLIBC_2.0 xdr_key_netstres +00058220 g DF .text 00000070 GLIBC_2.2 _IO_init_wmarker +0006d950 g DF .text 00000045 GLIBC_2.1.1 __strpbrk_g +00053200 w DF .text 0000002d GLIBC_2.0 flockfile +0001e9e0 g DF .text 0000065e GLIBC_2.0 setlocale +000baf60 w DF .text 00000039 GLIBC_2.0 getpeername +00036e40 g DF .text 00000139 GLIBC_2.0 getsubopt +000bd5a0 w DF .text 000000d5 GLIBC_2.0 iswdigit +000b2470 g DF .text 00000074 GLIBC_2.0 cfsetspeed +000522c0 g DF .text 0000003f GLIBC_2.0 scanf +0009c410 w DF .text 000000a8 GLIBC_2.0 regerror +000e3960 g DF .text 0000005a GLIBC_2.1 key_setnet +0005e500 g DF .text 00000057 GLIBC_2.0 _IO_file_read +000ce340 g DF .text 00000271 GLIBC_2.1.2 gethostbyname_r +001178e4 g DO .data 00000004 GLIBC_2.0 stderr +0007ae50 g DF .text 00000039 GLIBC_2.0 ctime_r +000b5280 w DF .text 000001a6 GLIBC_2.3 futimes +000ba450 w DF .text 00000036 GLIBC_2.0 umount +000e9980 w DF .text 00000062 GLIBC_2.0 pututline +000d48a0 g DF .text 000000a8 GLIBC_2.0 setaliasent +000b6f60 w DF .text 00000070 GLIBC_2.1 mmap64 +000bbc30 g DF .text 00000055 GLIBC_2.2 shmctl +000829f0 g DF .text 000021b8 GLIBC_2.3 __wcsftime_l +000b4140 g DF .text 00000029 GLIBC_2.0 mkstemp +0006dd90 g DF .text 00000023 GLIBC_2.1.1 __strspn_c2 +000b5c60 g DF .text 0000004c GLIBC_2.0 getttynam +000b9510 w DF .text 000000b5 GLIBC_2.0 error +000be120 g DF .text 0000007d GLIBC_2.1 __iswblank_l +0002bdd0 g DF .text 00000037 GLIBC_2.0 erand48 +00027df0 w DF .text 0000000d GLIBC_2.0 scalbn +000ac5f0 w DF .text 00000153 GLIBC_2.1 fstatvfs64 +000899e0 w DF .text 00000048 GLIBC_2.0 vfork +000d0760 g DF .text 000000ad GLIBC_2.0 setrpcent +00015d00 g DF .text 0000017e GLIBC_2.1 iconv +000b63e0 g DF .text 00000023 GLIBC_2.0 setlogmask +00116a80 g DO .data.rel.ro 00000054 GLIBC_2.0 _IO_file_jumps +0002b8b0 w DF .text 0000005b GLIBC_2.0 srandom +000680c0 g DF .text 00000078 GLIBC_2.0 obstack_free +0006b090 w DF .text 000002e9 GLIBC_2.0 argz_replace +000bc6c0 w DF .text 000001ba GLIBC_2.0 profil +0006a3f0 w DF .text 00000090 GLIBC_2.0 strsep +000e9640 g DF .text 00000050 GLIBC_2.1 putmsg +000635b0 w DF .text 000000b8 GLIBC_2.0 cfree +00030150 w DF .text 00000027 GLIBC_2.1 __strtof_l +000ba140 g DF .text 00000048 GLIBC_2.3 setxattr +000e1be0 g DF .text 000000b3 GLIBC_2.1 xdr_sizeof +00022560 w DF .text 00000011 GLIBC_2.1 __isascii_l +00067450 g DF .text 00000094 GLIBC_2.0 muntrace +00027f20 g DF .text 00000024 GLIBC_2.0 __isinff +000ac220 w DF .text 0000012f GLIBC_2.1 fstatfs64 +000891a0 g DF .text 0000007c GLIBC_2.0 __waitpid +000f41d0 g DF .text 00000037 (GLIBC_2.0) getprotoent_r +00027bb0 w DF .text 00000027 GLIBC_2.0 isnan +000f1520 g DF .text 00000101 (GLIBC_2.0) _IO_fsetpos +000d6890 g DF .text 00000bae GLIBC_2.3 getifaddrs +00089980 g DF .text 00000059 GLIBC_PRIVATE __libc_fork +0009feb0 w DF .text 00000092 GLIBC_2.0 re_compile_fastmap +000e1540 g DF .text 00000142 GLIBC_2.0 xdr_reference +000f4270 g DF .text 00000066 (GLIBC_2.0) getservbyname_r +000b8e50 g DF .text 00000023 GLIBC_2.0 verr +000be520 w DF .text 0000007d GLIBC_2.3 iswupper_l +00057af0 g DF .text 00000059 GLIBC_2.0 putchar_unlocked +000a4360 w DF .text 0000003a GLIBC_2.0 sched_setparam +0002b350 g DF .text 00000044 GLIBC_2.0 ldiv +000de130 g DF .text 00000222 GLIBC_2.0 registerrpc +000292f0 g DF .text 00000046 GLIBC_2.0 sigismember +000705f0 g DF .text 00000052 GLIBC_2.0 __wcstof_internal +0007b7a0 w DF .text 0000003c GLIBC_2.0 timelocal +00015620 g DF .text 00000031 (GLIBC_2.0) __fixunsxfdi +000ab510 g DF .text 00000010 GLIBC_2.2 posix_spawnattr_setpgroup +000e2690 g DF .text 000000a0 GLIBC_2.1 cbc_crypt +000c9620 g DF .text 00000106 GLIBC_PRIVATE __res_maybe_init +00056df0 w DF .text 000000cd GLIBC_2.2 getwc +0011a8ec g DO .bss 00000004 GLIBC_2.1 __key_gendes_LOCAL +00043400 g DF .text 000008a1 GLIBC_2.1 printf_size +00070a60 w DF .text 0000003e GLIBC_2.3 wcstol_l +000f1100 g DF .text 00000088 (GLIBC_2.0) _IO_popen +000b3c20 w DF .text 00000071 GLIBC_2.0 fsync +0006d7c0 g DF .text 00000028 GLIBC_2.1.1 __strrchr_g +000ac030 g DF .text 00000032 GLIBC_2.2 __lxstat64 +00065670 w DF .text 00000107 GLIBC_2.0 valloc +0006a3f0 g DF .text 00000090 GLIBC_2.1.1 __strsep_g +000f3e00 g DF .text 00000037 (GLIBC_2.0) getspent_r +00028170 w DF .text 00000055 GLIBC_2.0 isinfl +0005ada0 g DF .text 000000e7 GLIBC_2.0 fputc +00000000 DF *UND* 000003de GLIBC_2.3 ___tls_get_addr +000ca610 g DF .text 000003c4 GLIBC_2.0 __nss_database_lookup +000d1f00 g DF .text 00000031 GLIBC_2.0 iruserok +0006b4f0 g DF .text 000000df GLIBC_2.0 envz_merge +000b72e0 g DF .text 00000056 GLIBC_2.0 ecvt +000be800 g DF .text 000000a2 GLIBC_2.0 getspent +00078770 g DF .text 00000ee8 GLIBC_2.1 __wcscoll_l +000cc860 g DF .text 000000b8 GLIBC_2.3.4 __strncpy_chk +000281d0 w DF .text 00000048 GLIBC_2.0 isnanl +0005cfa0 g DF .text 00000010 GLIBC_2.0 feof_unlocked +000c6490 g DF .text 00000065 GLIBC_PRIVATE __librt_enable_asynccancel +000e0ee0 g DF .text 00000059 GLIBC_2.0 xdrrec_eof +00058ce0 g DF .text 000000ab GLIBC_2.2 _IO_wdefault_finish +000ede10 g DF .text 00000043 GLIBC_2.1 _dl_mcount_wrapper_check +0007da80 g DF .text 0000003e GLIBC_2.0 timegm +000b9c40 w DF .text 00000073 GLIBC_2.0 step +0006df50 g DF .text 00000073 GLIBC_2.1.1 __strsep_3c +000b0ff0 g DF .text 00000517 GLIBC_2.0 fts_read +0005d0f0 g DF .text 000000d0 GLIBC_2.0 _IO_peekc_locked +00020e00 w DF .text 00000049 GLIBC_2.3 nl_langinfo_l +00062aa0 w DF .text 00000087 GLIBC_2.0 mallinfo +000d9440 g DF .text 000002ac GLIBC_2.0 clnt_sperror +000bc300 g DF .text 00000042 GLIBC_2.0 _mcleanup +0005ac90 g DF .text 00000068 GLIBC_2.0 _IO_feof +000229b0 g DF .text 00000071 GLIBC_2.3 __ctype_b_loc +0006a640 g DF .text 000000dc GLIBC_2.0 strfry +00117290 g DO .data 00000004 GLIBC_2.0 optopt +0005d030 g DF .text 00000039 GLIBC_2.0 getchar_unlocked +000baee0 w DF .text 00000078 GLIBC_2.0 __connect +000f3db0 g DF .text 0000004f (GLIBC_2.0) shmctl +0006db10 g DF .text 00000094 GLIBC_2.1.1 __strcpy_small +00068780 g DF .text 00000064 GLIBC_2.2 __strndup +00119b50 g DO .bss 00000004 (GLIBC_2.0) h_errno +00088550 g DF .text 000000db GLIBC_2.1.2 getpwent_r +000aadb0 w DF .text 00000082 GLIBC_2.1 pread +000cfe40 g DF .text 0000016c GLIBC_2.1.2 getservbyport_r +000c62e0 g DF .text 00000020 GLIBC_2.0 pthread_self +000f0d80 g DF .text 0000013d (GLIBC_2.0) _IO_proc_close +000c6340 g DF .text 00000033 GLIBC_2.0 pthread_setcanceltype +0005ab20 g DF .text 0000010f GLIBC_2.2 fwide +000bdae0 w DF .text 000000d0 GLIBC_2.0 iswupper +00115480 g DO .data.rel.ro 000001ec (GLIBC_2.0) _sys_errlist +000bafe0 w DF .text 00000039 GLIBC_2.0 getsockopt +00087580 g DF .text 000001de GLIBC_2.1.2 getgrgid_r +000bf080 g DF .text 000000db GLIBC_2.1.2 getspent_r +0008ba80 g DF .text 0000006a GLIBC_2.0 globfree +0007af50 w DF .text 00000033 GLIBC_2.0 localtime_r +000c67e0 g DF .text 0000009e GLIBC_2.0 hstrerror +000d60c0 g DF .text 00000021 GLIBC_2.3 freeifaddrs +000a4a90 g DF .text 00000625 GLIBC_2.0 getaddrinfo +000168f0 g DF .text 00000016 GLIBC_PRIVATE __gconv_get_modules_db +00093980 w DF .text 0000001f GLIBC_2.0 re_set_syntax +000bb420 w DF .text 00000039 GLIBC_2.0 socketpair +00058140 g DF .text 00000049 GLIBC_2.2 _IO_sputbackwc +0008a7d0 w DF .text 00000035 GLIBC_2.0 setresgid +0005d070 g DF .text 0000003e GLIBC_2.0 fflush_unlocked +000b7150 w DF .text 00000048 GLIBC_2.3.3 remap_file_pages +000edf70 g DF .text 00000037 GLIBC_PRIVATE __libc_dlclose +000b8550 w DF .text 00000022 GLIBC_2.0 twalk +000b5260 w DF .text 00000015 GLIBC_2.3 lutimes +000f1190 g DF .text 00000021 (GLIBC_2.0) pclose +000e24f0 g DF .text 000000bf GLIBC_2.1 xdr_authdes_cred +00080940 g DF .text 00000059 GLIBC_2.0 strftime +0006abc0 w DF .text 000000c7 GLIBC_2.0 argz_create_sep +00028050 w DF .text 0000000d GLIBC_2.1 scalblnf +00057220 g DF .text 0000010f GLIBC_2.2 fputws +00070a60 w DF .text 0000003e GLIBC_2.1 __wcstol_l +000e9b90 w DF .text 000000d2 GLIBC_2.0 getutid_r +0005d220 g DF .text 000000a6 GLIBC_2.1 fwrite_unlocked +0005bed0 w DF .text 00000034 GLIBC_2.0 obstack_printf +00118d44 g DO .bss 00000004 GLIBC_2.0 __timezone +0006eb30 g DF .text 0000009c GLIBC_2.0 wmemcmp +0007dac0 g DF .text 0000007a GLIBC_2.0 ftime +0002b3a0 g DF .text 00000095 GLIBC_2.0 lldiv +0006d3b0 g DF .text 00000035 GLIBC_2.1.1 __memset_gcn_by4 +00058360 g DF .text 00000036 GLIBC_2.2 _IO_unsave_wmarkers +0006ec30 w DF .text 00000024 GLIBC_2.0 wmemmove +000b1b50 g DF .text 00000042 GLIBC_2.3 sendfile64 +0005f0a0 g DF .text 00000147 GLIBC_2.0 _IO_file_open +000ab4d0 g DF .text 0000001e GLIBC_2.2 posix_spawnattr_setflags +000c7580 g DF .text 00000034 GLIBC_2.0 __res_randomid +00086590 g DF .text 0000005e GLIBC_2.0 getdirentries +000221d0 g DF .text 0000007d GLIBC_2.0 isdigit +000f1f20 g DF .text 00000143 (GLIBC_2.0) _IO_file_overflow +00054dc0 g DF .text 00000131 GLIBC_2.2 _IO_fsetpos +000f44d0 g DF .text 0000005f (GLIBC_2.0) getaliasbyname_r +00069c70 w DF .text 00000091 GLIBC_2.0 stpncpy +000b41a0 g DF .text 00000043 GLIBC_2.2 mkdtemp +000b4700 g DF .text 00000084 GLIBC_2.0 getmntent +000226c0 g DF .text 00000015 GLIBC_2.1 __isalnum_l +00055210 w DF .text 00000167 GLIBC_2.0 fwrite +00060120 g DF .text 0000002d GLIBC_2.2 _IO_list_unlock +000ac9a0 w DF .text 00000071 GLIBC_2.0 __close +000bad00 g DF .text 00000042 GLIBC_2.0 quotactl +0007da20 g DF .text 00000058 GLIBC_2.0 dysize +000f11c0 g DF .text 0000009d (GLIBC_2.0) tmpfile +0011a8f4 g DO .bss 0000000c GLIBC_2.0 svcauthdes_stats +00037340 g DF .text 00000631 GLIBC_2.1 fmtmsg +000acb60 w DF .text 0000003a GLIBC_2.0 access +0011a664 g DO .bss 00000004 GLIBC_2.0 mallwatch +000ba550 g DF .text 00000013 GLIBC_2.0 setfsgid +000abd70 g DF .text 0000008d GLIBC_2.0 __xstat +000a44d0 g DF .text 00000036 GLIBC_2.0 __sched_get_priority_min +000aeeb0 g DF .text 00000041 GLIBC_2.3.3 nftw +0002c4f0 g DF .text 00000059 (GLIBC_2.0) __strtoq_internal +0005f940 g DF .text 00000077 GLIBC_2.0 _IO_switch_to_get_mode +0006d600 g DF .text 00000042 GLIBC_2.1.1 __strncat_g +000e5530 g DF .text 0000005a GLIBC_2.1 passwd2des +000ab1e0 g DF .text 00000026 GLIBC_2.2 posix_spawn_file_actions_destroy +000e95a0 g DF .text 0000004d GLIBC_2.1 getmsg +00048410 g DF .text 00005615 GLIBC_2.0 _IO_vfscanf +000d8d10 g DF .text 0000016c GLIBC_2.0 bindresvport +00056960 g DF .text 000001a3 GLIBC_2.2 _IO_fgetpos64 +000d0af0 g DF .text 0000002d GLIBC_2.0 ether_aton +000cd3a0 g DF .text 0000000e GLIBC_2.0 htons +00035ab0 w DF .text 00000029 GLIBC_2.0 canonicalize_file_name +0002dbf0 g DF .text 00000052 GLIBC_2.0 __strtof_internal +000c6210 g DF .text 0000002a GLIBC_2.0 pthread_mutex_destroy +0011a840 g DO .bss 00000080 GLIBC_2.0 svc_fdset +00021680 w DF .text 00000084 GLIBC_2.3 freelocale +00027110 g DF .text 0000006d GLIBC_2.0 catclose +001157a0 g DO .data.rel.ro 00000080 (GLIBC_2.0) sys_sigabbrev +000b8b70 g DF .text 00000075 GLIBC_2.0 lsearch +00079f60 w DF .text 00000053 GLIBC_2.1 wcscasecmp +000483d0 w DF .text 00000037 GLIBC_2.0 vfscanf +000f1630 g DF .text 00000101 (GLIBC_2.1) fsetpos64 +0007e110 g DF .text 00000062 GLIBC_2.0 strptime +000dd170 g DF .text 00000039 GLIBC_2.2.3 __rpc_thread_createerr +0005b6c0 g DF .text 000000d2 GLIBC_2.0 rewind +0002c610 w DF .text 00000058 GLIBC_2.0 strtouq +00117284 g DO .data 00000004 GLIBC_2.0 re_max_failures +0005ae90 g DF .text 00000296 GLIBC_2.0 freopen +00066e00 g DF .text 000000f8 GLIBC_2.0 mcheck +000589e0 g DF .text 000000e7 GLIBC_2.2 __wuflow +000a2840 w DF .text 00000037 GLIBC_2.0 re_search +0005d000 w DF .text 00000028 GLIBC_2.1 fgetc_unlocked +0008b0f0 g DF .text 00000673 GLIBC_2.2 __sysconf +000bb840 g DF .text 000000c4 GLIBC_PRIVATE __libc_msgrcv +0002bbf0 w DF .text 00000117 GLIBC_2.0 initstate_r +000c6280 g DF .text 0000002a GLIBC_2.0 pthread_mutex_lock +000f4170 g DF .text 0000005f (GLIBC_2.0) getprotobynumber_r +0002bd90 g DF .text 00000034 GLIBC_2.0 drand48 +000b27c0 g DF .text 00000041 GLIBC_2.0 tcgetpgrp +000d5b90 g DF .text 00000046 GLIBC_2.1 if_freenameindex +00028a40 w DF .text 00000053 GLIBC_2.0 __sigaction +000cc920 g DF .text 00000032 GLIBC_2.3.4 __sprintf_chk +00029470 g DF .text 00000035 GLIBC_2.0 sigandset +00022ef0 w DF .text 00000024 GLIBC_2.0 gettext +00066840 g DF .text 000003b7 GLIBC_2.0 __libc_calloc +0006aee0 g DF .text 00000054 GLIBC_2.0 __argz_stringify +00028170 g DF .text 00000055 GLIBC_2.0 __isinfl +0002c230 w DF .text 0000006a GLIBC_2.0 lcong48_r +00119118 g DO .bss 00000004 GLIBC_2.0 __curbrk +00057690 g DF .text 000000e1 GLIBC_2.2 ungetwc +00070170 g DF .text 00000059 GLIBC_2.0 __wcstol_internal +00015690 g DF .text 00000023 (GLIBC_2.0) __fixunsdfdi +00000000 DO *UND* 00000004 GLIBC_PRIVATE __libc_enable_secure +0006d450 g DF .text 00000030 GLIBC_2.1.1 __strcpy_g +000b1510 g DF .text 000000a2 GLIBC_PRIVATE __libc_poll +000e0810 g DF .text 0000003e GLIBC_2.0 xdr_float +0005f9c0 g DF .text 00000076 GLIBC_2.0 _IO_doallocbuf +00069e60 g DF .text 0000004e GLIBC_2.1 __strncasecmp_l +00000000 g DO *ABS* 00000000 GLIBC_2.2.2 GLIBC_2.2.2 +00060640 w DF .text 00000177 GLIBC_2.2 _flushlbf +000ce5c0 g DF .text 000000a4 GLIBC_2.0 gethostent +000809a0 g DF .text 00000059 GLIBC_2.2 wcsftime +000cebf0 g DF .text 0000014c GLIBC_2.0 getnetbyname +000dd760 g DF .text 00000074 GLIBC_2.0 svc_unregister +000155c0 g DF .text 00000028 GLIBC_2.0 __errno_location +00015960 g DF .text 0000007c (GLIBC_2.0) __divdi3 +00036df0 g DF .text 00000042 GLIBC_2.1 __strfmon_l +000aded0 w DF .text 0000003a GLIBC_2.0 link +000bba60 g DF .text 00000062 GLIBC_2.2 semctl +000b98e0 w DF .text 00000210 GLIBC_2.0 get_nprocs +0006ac90 g DF .text 00000044 GLIBC_2.0 __argz_next +00087940 g DF .text 000002e5 GLIBC_PRIVATE _nss_files_parse_grent +00117488 g DO .data 00000004 (GLIBC_2.2) __ctype32_tolower +0005bb50 w DF .text 000000f5 GLIBC_2.0 __vsnprintf +0006e520 g DF .text 0000005b GLIBC_2.0 wcsdup +000be7a0 w DF .text 0000005d GLIBC_2.3 towctrans_l +000680c0 g DF .text 00000078 GLIBC_2.0 _obstack_free +000bb9c0 g DF .text 0000004f GLIBC_2.0 semop +0002af90 g DF .text 000000db GLIBC_2.0 exit +000c6060 g DF .text 00000033 (GLIBC_2.0) pthread_cond_init +00118644 w DO .bss 00000004 GLIBC_2.0 __free_hook +000c6030 g DF .text 0000002a GLIBC_2.3.2 pthread_cond_destroy +0006d430 g DF .text 00000016 GLIBC_2.1.1 __strlen_g +000bdbb0 g DF .text 000000be GLIBC_2.0 towlower +00000000 w D *UND* 00000000 __pthread_setspecific +00069d10 g DF .text 00000068 GLIBC_2.0 __strcasecmp +000bb780 g DF .text 000000b5 GLIBC_PRIVATE __libc_msgsnd +000abe00 g DF .text 0000008d GLIBC_2.0 __fxstat +000d1200 g DF .text 0000002d GLIBC_2.0 ether_ntoa +0002cfa0 w DF .text 0000002e GLIBC_2.1 __strtoul_l +0002b2c0 g DF .text 00000031 GLIBC_2.0 llabs +00043d60 g DF .text 00000034 GLIBC_2.0 _IO_sprintf +000d74f0 g DF .text 0000009d GLIBC_2.3.3 inet6_option_next +000be320 w DF .text 0000007d GLIBC_2.3 iswgraph_l +00022e50 w DF .text 00000015 GLIBC_2.0 bindtextdomain +0007d9e0 g DF .text 00000036 GLIBC_2.0 stime +000b9e80 g DF .text 0000003c GLIBC_2.3 flistxattr +000baac0 g DF .text 0000003c GLIBC_2.0 klogctl +00058c50 g DF .text 00000083 GLIBC_2.2 _IO_wsetb +000292b0 g DF .text 00000040 GLIBC_2.0 sigdelset +00035c60 g DF .text 0000007c GLIBC_2.0 rpmatch +0005b7a0 g DF .text 00000033 GLIBC_2.0 setbuf +00028060 w DF .text 0000006b GLIBC_2.0 frexpf +000e5650 g DF .text 000000bb GLIBC_2.0 xencrypt +00029390 w DF .text 000000a7 GLIBC_2.1 sysv_signal +000c6bc0 g DF .text 00000255 GLIBC_2.0 inet_ntop +000283f0 w DF .text 00000072 GLIBC_2.0 frexpl +00022720 w DF .text 00000017 GLIBC_2.3 isdigit_l +000b3040 w DF .text 00000042 GLIBC_2.0 brk +000bd220 w DF .text 000000d5 GLIBC_2.0 iswalnum +000db490 g DF .text 000000ac GLIBC_2.0 get_myaddress +00057f30 g DF .text 00000024 GLIBC_2.2 swscanf +0008a750 w DF .text 00000035 GLIBC_2.0 getresgid +00021d20 g DF .text 00000195 GLIBC_2.0 __assert_perror_fail +0003ad40 g DF .text 0000414a GLIBC_2.0 _IO_vfprintf +00087060 g DF .text 00000125 GLIBC_2.0 getgrnam +0011a8c0 g DO .bss 0000000c GLIBC_2.0 _null_auth +0006e470 g DF .text 0000002e GLIBC_2.0 wcscmp +000e14c0 g DF .text 0000007f GLIBC_2.0 xdr_pointer +000cdf10 g DF .text 000001a2 GLIBC_2.0 gethostbyname2 +000ab0a0 w DF .text 00000094 GLIBC_2.1 __pwrite64 +000561e0 g DF .text 000000ea GLIBC_2.0 _IO_seekoff +000ba5c0 g DF .text 0000006b GLIBC_2.3.3 gnu_dev_makedev +00056b40 g DF .text 00000137 GLIBC_2.2 fsetpos64 +0011a6cc g DO .bss 00000004 GLIBC_2.0 error_one_per_line +000ddb40 g DF .text 00000062 GLIBC_2.1 _authenticate +00000000 DO *UND* 00000004 GLIBC_PRIVATE _dl_argv +000227a0 w DF .text 00000015 GLIBC_2.3 ispunct_l +000b7290 g DF .text 00000050 GLIBC_2.0 gcvt +000ba780 w DF .text 00000036 GLIBC_2.1 ntp_adjtime +00054840 g DF .text 00000033 GLIBC_2.1 fopen +00029b80 g DF .text 00000028 GLIBC_2.0 atoi +0008d450 g DF .text 0000006a GLIBC_2.1 globfree64 +0006d910 g DF .text 00000032 GLIBC_2.1.1 __strpbrk_cg +00022150 g DF .text 0000007b GLIBC_2.0 iscntrl +000aff20 g DF .text 000000ef GLIBC_2.0 fts_close +0005cfb0 g DF .text 00000010 GLIBC_2.0 ferror_unlocked +00027180 g DF .text 00000182 GLIBC_2.0 catopen +0005b5d0 g DF .text 000000e7 GLIBC_2.0 _IO_putc +000f3d00 g DF .text 0000004f (GLIBC_2.0) msgctl +000ba6f0 g DF .text 0000003a (GLIBC_2.0) setrlimit +000cca70 g DF .text 00000102 GLIBC_2.3.4 __vsnprintf_chk +000e99f0 w DF .text 00000069 GLIBC_2.0 getutent_r +000f27d0 g DF .text 000001ed (GLIBC_2.1) scandir64 +0005ad70 g DF .text 00000027 GLIBC_2.0 fileno +000c4de0 w DF .text 00000b50 GLIBC_2.1 argp_parse +000b6770 g DF .text 000005c7 GLIBC_2.0 vsyslog +000370e0 g DF .text 00000072 GLIBC_2.1 addseverity +000c5ee0 g DF .text 00000033 GLIBC_2.0 pthread_attr_setschedpolicy +00061220 g DF .text 00000042 GLIBC_2.0 _IO_str_underflow +000d36d0 g DF .text 0000003f GLIBC_2.0 rexec +00028670 g DF .text 00000022 GLIBC_2.0 _setjmp +0005d2d0 g DF .text 000000a2 GLIBC_2.1 fgets_unlocked +00022930 g DF .text 00000071 GLIBC_2.3 __ctype_toupper_loc +00071940 w DF .text 0000003e GLIBC_2.3 wcstoull_l +00028160 g DF .text 0000000d GLIBC_2.1 __signbitf +00053080 w DF .text 0000003a GLIBC_2.0 getline +00073ea0 w DF .text 00000037 GLIBC_2.3 wcstod_l +0006ecc0 w DF .text 00000038 GLIBC_2.0 wcpcpy +000d0150 g DF .text 000000a6 GLIBC_2.0 endservent +00000000 w D *UND* 00000000 _IO_stdin_used +00089a28 g DF .text 00000013 GLIBC_2.0 _exit +000e6840 g DF .text 000002c8 GLIBC_2.1 svcunix_create +0006e400 w DF .text 00000034 GLIBC_2.0 wcscat +00056360 g DF .text 000000e3 GLIBC_2.0 _IO_seekpos +000f1a90 g DF .text 000003f0 (GLIBC_2.0) _IO_file_seekoff +00054410 g DF .text 000001b8 GLIBC_2.2 fgetpos +00078770 w DF .text 00000ee8 GLIBC_2.3 wcscoll_l +000685d0 w DF .text 00000146 GLIBC_2.1 strverscmp +00088240 g DF .text 000000a2 GLIBC_2.0 getpwent +0007aea0 g DF .text 00000033 GLIBC_2.0 gmtime +00069310 g DF .text 000000ae GLIBC_2.0 strspn +0006ef90 g DF .text 00000155 GLIBC_2.0 wctob +0005df90 g DF .text 000001cc GLIBC_2.1 _IO_file_xsputn +00053ef0 g DF .text 000001ca GLIBC_2.1 _IO_fclose +000b71e0 g DF .text 0000003a GLIBC_2.0 munlock +00052980 g DF .text 00000077 GLIBC_2.0 tempnam +000b6d90 g DF .text 00000168 GLIBC_2.0 daemon +000b8ed0 g DF .text 000000ef GLIBC_2.0 vwarnx +000c6240 g DF .text 00000033 GLIBC_2.0 pthread_mutex_init +00015320 g DF .text 000000e7 GLIBC_2.0 __libc_start_main +000283e0 w DF .text 0000000d GLIBC_2.1 scalblnl +000ad0f0 g DF .text 00000078 GLIBC_PRIVATE __libc_creat +000d0060 g DF .text 000000e2 GLIBC_2.1.2 getservent_r +00068a10 g DF .text 000000af GLIBC_2.0 strlen +000ba3c0 w DF .text 00000087 GLIBC_2.1 lseek64 +0006aa00 w DF .text 00000078 GLIBC_2.0 argz_append +00028b30 g DF .text 00000034 GLIBC_2.0 sigpending +000ac840 w DF .text 0000007c GLIBC_2.0 open +000b4040 g DF .text 00000036 GLIBC_2.0 vhangup +00086140 g DF .text 0000018f GLIBC_2.2 readdir64_r +000f2b20 g DF .text 00000037 (GLIBC_2.0) getpwent_r +00117db4 w DO .data 00000004 GLIBC_2.0 program_invocation_name +000e6e80 g DF .text 0000003f GLIBC_2.1 xdr_uint32_t +000abbb0 g DF .text 00000015 GLIBC_2.2 posix_spawnattr_getschedpolicy +000ba330 w DF .text 0000008e GLIBC_2.0 clone +000edfb0 g DF .text 00000063 GLIBC_PRIVATE __libc_dlsym +00021ef0 g DF .text 00000068 GLIBC_2.0 toupper +000e0640 g DF .text 000001c7 GLIBC_2.0 xdr_array +00057c10 g DF .text 00000039 GLIBC_2.2 wprintf +000483d0 g DF .text 00000037 GLIBC_2.0 __vfscanf +000e4090 g DF .text 0000006c GLIBC_2.0 xdr_cryptkeyarg2 +000acd00 w DF .text 000000b3 GLIBC_2.0 __fcntl +000b2ae0 g DF .text 00000032 GLIBC_2.2 getrlimit +000b9f00 g DF .text 00000048 GLIBC_2.3 fsetxattr +00029be0 g DF .text 00000028 GLIBC_2.0 atoll +000e3410 g DF .text 00000037 GLIBC_2.1 des_setparity +000f1390 g DF .text 00000181 (GLIBC_2.1) fgetpos64 +0007ada0 g DF .text 00000088 GLIBC_2.0 clock +000530c0 g DF .text 00000049 GLIBC_2.0 getw +000e3de0 g DF .text 00000068 GLIBC_2.1 xdr_getcredres +0006d6e0 g DF .text 00000021 GLIBC_2.1.1 __strchr_c +00078570 g DF .text 00000052 GLIBC_2.0 wcsxfrm +0005b9b0 w DF .text 000000da GLIBC_2.0 vdprintf +00021ec0 g DF .text 00000025 GLIBC_2.2 __assert +0005fd30 g DF .text 0000003f GLIBC_2.0 _IO_init +00022760 w DF .text 00000017 GLIBC_2.3 isgraph_l +000763d0 w DF .text 00000037 GLIBC_2.1 __wcstold_l +00117478 g DO .data 00000004 (GLIBC_2.0) __ctype_b +000eb880 w DF .text 00000398 GLIBC_2.1 ptsname_r +00021520 g DF .text 00000159 GLIBC_2.1 __duplocale +00094c00 w DF .text 00000060 GLIBC_2.0 regfree +0006ac90 w DF .text 00000044 GLIBC_2.0 argz_next +0006e210 g DF .text 00000051 GLIBC_2.1.1 __strsep_1c +00089980 g DF .text 00000059 GLIBC_2.0 __fork +0002b300 g DF .text 00000044 GLIBC_2.0 div +000eb070 w DF .text 0000010d GLIBC_2.0 updwtmp +00022580 w DF .text 00000015 GLIBC_2.3 isblank_l +000f3a80 g DF .text 00000042 (GLIBC_2.0) regexec +0002b2a0 g DF .text 0000000d GLIBC_2.0 abs +00070470 g DF .text 00000052 GLIBC_2.0 __wcstod_internal +000682f0 g DF .text 00000167 GLIBC_2.0 strchr +000e9a60 w DF .text 0000004c GLIBC_2.0 setutent +000f2070 g DF .text 00000072 (GLIBC_2.0) _IO_file_attach +000600b0 g DF .text 00000007 GLIBC_2.2 _IO_iter_end +00078670 g DF .text 000000f5 GLIBC_2.0 wcswidth +000cc540 g DF .text 0000004e GLIBC_2.3.4 __mempcpy_chk +000e2480 g DF .text 00000069 GLIBC_2.1 xdr_authdes_verf +00054b50 w DF .text 00000146 GLIBC_2.0 fputs +0006ace0 g DF .text 00000080 GLIBC_2.0 argz_delete +0011a8cc g DO .bss 00000004 GLIBC_2.2 svc_max_pollfd +000ba780 w DF .text 00000036 GLIBC_2.0 adjtimex +00089fd0 g DF .text 000002de GLIBC_2.0 execvp +000d0ec0 g DF .text 00000334 GLIBC_2.0 ether_line +000c5e60 g DF .text 00000033 GLIBC_2.0 pthread_attr_setschedparam +00079fc0 w DF .text 0000006c GLIBC_2.1 wcsncasecmp +001157a0 g DO .data.rel.ro 00000104 GLIBC_2.3.3 sys_sigabbrev +0008a6e0 w DF .text 0000002e GLIBC_2.0 setsid +000ee290 g DF .text 0000001f GLIBC_PRIVATE _dl_sym +0005cb10 g DF .text 00000036 GLIBC_PRIVATE __libc_fatal +000355d0 g DF .text 000004d7 GLIBC_2.3 realpath +000880c0 g DF .text 00000175 GLIBC_2.0 putpwent +000b3090 g DF .text 00000073 GLIBC_2.0 __sbrk +000b3710 g DF .text 0000004d GLIBC_2.0 setegid +000b7010 w DF .text 0000003c GLIBC_2.0 mprotect +0005e390 g DF .text 00000082 GLIBC_2.1 _IO_file_attach +000ba840 g DF .text 0000003a GLIBC_2.1 capset +000b0c40 g DF .text 00000124 GLIBC_2.0 fts_children +0011a8d0 g DO .bss 00000010 GLIBC_2.0 rpc_createerr +000abc50 g DF .text 0000001d GLIBC_2.2 posix_spawnattr_setschedpolicy +000f0940 g DF .text 0000005a (GLIBC_2.0) fopencookie +0011a6e8 g DO .bss 00000004 GLIBC_2.1 argp_program_version_hook +00028e30 g DF .text 00000069 GLIBC_2.0 __sigpause +000855e0 w DF .text 00000085 GLIBC_2.0 closedir +00058ad0 g DF .text 00000175 GLIBC_2.2 _IO_wdefault_pbackfail +00029770 g DF .text 00000069 GLIBC_PRIVATE __libc_sigwaitinfo +000b8eb0 g DF .text 0000001d GLIBC_2.0 warn +000bf430 g DF .text 000003f5 GLIBC_PRIVATE _nss_files_parse_spent +00056df0 w DF .text 000000cd GLIBC_2.2 fgetwc +000cef80 g DF .text 000000b2 GLIBC_2.0 setnetent +00052250 w DF .text 00000037 GLIBC_2.2 vfwscanf +000be720 w DF .text 00000071 GLIBC_2.3 wctrans_l +0006e0c0 g DF .text 0000005f GLIBC_2.1.1 __strncpy_byn +0002b3a0 w DF .text 00000095 GLIBC_2.1.1 imaxdiv +00117698 g DO .data 00000004 GLIBC_2.0 _IO_list_all +000b9bc0 w DF .text 0000007c GLIBC_2.0 advance +000ba880 g DF .text 0000003c GLIBC_2.0 create_module +000703b0 w DF .text 00000058 GLIBC_2.0 wcstouq +000ee020 g DF .text 00000054 GLIBC_PRIVATE __libc_dlopen_mode +0006dfd0 g DF .text 00000031 GLIBC_2.1.1 __memcpy_c +000b5f80 g DF .text 0000001d GLIBC_2.0 setusershell +0006b5d0 g DF .text 00000047 GLIBC_2.0 envz_remove +0005b820 w DF .text 00000181 GLIBC_2.0 vasprintf +000b9f50 g DF .text 00000042 GLIBC_2.3 getxattr +000deda0 g DF .text 00000025 GLIBC_2.0 svcudp_create +000c5d60 g DF .text 00000033 GLIBC_2.0 pthread_attr_setdetachstate +000bb160 w DF .text 00000078 GLIBC_2.0 recvmsg +0005cfc0 g DF .text 0000003b GLIBC_2.0 fputc_unlocked +0006a8a0 w DF .text 0000015f GLIBC_2.1.1 strchrnul +0011a8e0 g DO .bss 00000004 GLIBC_2.2 svc_pollfd +000de020 g DF .text 00000105 GLIBC_2.0 svc_run +00000000 DO *UND* 0000000e GLIBC_PRIVATE _dl_out_of_memory +00086530 g DF .text 00000024 GLIBC_2.2 alphasort64 +0005c7c0 g DF .text 0000000f GLIBC_2.2 __fwriting +000227e0 g DF .text 00000017 GLIBC_2.1 __isupper_l +00028b70 g DF .text 000000a2 GLIBC_PRIVATE __libc_sigsuspend +000f3bf0 g DF .text 00000024 (GLIBC_2.2) posix_fadvise64 +0011a8f0 g DO .bss 00000004 GLIBC_2.1 __key_decryptsession_pk_LOCAL +000acd00 w DF .text 000000b3 GLIBC_2.0 fcntl +00000000 g DO *ABS* 00000000 GLIBC_2.1.3 GLIBC_2.1.3 +0007c870 w DF .text 00000074 GLIBC_2.0 tzset +000cf8e0 g DF .text 00000165 GLIBC_2.1.2 getprotobyname_r +000a4460 w DF .text 0000002e GLIBC_2.0 sched_yield +000cfb90 g DF .text 0000016c GLIBC_2.1.2 getservbyname_r +000bdd70 g DF .text 00000072 GLIBC_2.0 __iswctype +0006ddc0 g DF .text 00000028 GLIBC_2.1.1 __strspn_c3 +000edba0 g DF .text 00000269 GLIBC_PRIVATE _dl_addr +00066f00 g DF .text 00000030 GLIBC_2.2 mcheck_pedantic +000bd060 g DF .text 00000013 GLIBC_2.0 _mcount +00028470 w DF .text 00000084 GLIBC_2.0 ldexpl +00056d80 g DF .text 0000006e GLIBC_2.2 fputwc_unlocked +0008a4d0 w DF .text 0000002f GLIBC_2.0 setuid +0008a5d0 w DF .text 00000036 GLIBC_2.0 getpgid +000ac8c0 w DF .text 000000d4 GLIBC_2.2 __open64 +0005f1f0 g DF .text 0000042b GLIBC_2.1 _IO_file_fopen +0002bed0 g DF .text 00000037 GLIBC_2.0 jrand48 +00060b80 g DF .text 00000135 GLIBC_2.0 _IO_un_link +000ee3f0 g DF .text 00000036 GLIBC_2.0 __register_frame_info_table +00086340 g DF .text 000001ed GLIBC_2.2 scandir64 +0005e420 g DF .text 000000a4 GLIBC_2.1 _IO_file_write +000b3d50 g DF .text 000001fa GLIBC_2.0 gethostid +000f40b0 g DF .text 00000041 (GLIBC_2.0) getnetent_r +0005c500 g DF .text 000000e3 GLIBC_2.1 fseeko64 +000b98e0 w DF .text 00000210 GLIBC_2.0 get_nprocs_conf +000ad360 g DF .text 00000074 GLIBC_2.0 getwd +000a29c0 w DF .text 00000047 GLIBC_2.0 re_exec +000d7490 g DF .text 00000011 GLIBC_2.3.3 inet6_option_space +000da9c0 g DF .text 00000340 GLIBC_2.0 clntudp_bufcreate +00060490 g DF .text 00000142 GLIBC_2.0 _IO_default_pbackfail +000b24f0 g DF .text 0000020c GLIBC_2.0 tcsetattr +00119b50 w DO .bss 00000004 (GLIBC_2.0) _h_errno +0006d4c0 g DF .text 00000040 GLIBC_2.1.1 __mempcpy_by2 +00029440 g DF .text 0000002c GLIBC_2.0 sigisemptyset +000ac800 w DF .text 0000003a GLIBC_2.0 mkdir +00028d10 w DF .text 0000007a GLIBC_2.0 sigsetmask +00065b90 w DF .text 0000008c GLIBC_2.2 posix_memalign +000ee3b0 g DF .text 00000036 GLIBC_2.0 __register_frame_info +000bb910 g DF .text 0000004e GLIBC_2.0 msgget +000d9820 g DF .text 00000129 GLIBC_2.0 clntraw_create +000be9e0 g DF .text 0000013a GLIBC_2.0 sgetspent +00028c20 w DF .text 00000066 GLIBC_2.0 sigwait +0006f3b0 w DF .text 000002bc GLIBC_2.0 wcrtomb +0006dd00 g DF .text 00000058 GLIBC_2.1.1 __strcspn_c3 +000aae90 w DF .text 00000082 GLIBC_2.1 pwrite +00027e00 w DF .text 00000073 GLIBC_2.0 frexp +000ac9a0 w DF .text 00000071 GLIBC_2.0 close +00041860 g DF .text 00000108 GLIBC_2.0 parse_printf_format +000b7220 g DF .text 00000036 GLIBC_2.0 mlockall +000784e0 w DF .text 00000037 GLIBC_2.3 wcstof_l +0008aa40 g DF .text 00000015 GLIBC_2.0 setlogin +0011747c g DO .data 00000004 (GLIBC_2.0) __ctype32_b +000c5e20 g DF .text 00000033 GLIBC_2.0 pthread_attr_getschedparam +000600c0 g DF .text 0000000b GLIBC_2.2 _IO_iter_next +000abff0 g DF .text 00000032 GLIBC_2.2 __fxstat64 +000bbad0 g DF .text 0000004b GLIBC_2.3.3 semtimedop +0002b570 g DF .text 000000c4 GLIBC_2.0 mbtowc +0002c1a0 w DF .text 00000039 GLIBC_2.0 srand48_r +00117d80 w DO .data 00000004 GLIBC_2.0 __memalign_hook +000859d0 g DF .text 0000000b GLIBC_2.0 telldir +00023d40 w DF .text 00000048 GLIBC_2.2 dcngettext +000b4630 g DF .text 00000070 GLIBC_2.0 getfsspec +0005cbf0 g DF .text 0000013b GLIBC_2.2 fmemopen +000ab420 g DF .text 00000007 GLIBC_2.2 posix_spawnattr_destroy +0003ad40 g DF .text 0000414a GLIBC_2.0 vfprintf +00069c70 g DF .text 00000091 GLIBC_2.0 __stpncpy +00117600 g DO .data 00000098 GLIBC_2.1 _IO_2_1_stderr_ +00117db4 g DO .data 00000004 GLIBC_2.0 __progname_full +000cc590 g DF .text 000000db GLIBC_2.3.4 __memset_chk +00028220 g DF .text 0000000e GLIBC_2.0 __finitel +00115680 g DO .data.rel.ro 00000104 GLIBC_2.3.3 _sys_siglist +00068fb0 g DF .text 000000b3 GLIBC_2.0 strpbrk +000b2810 g DF .text 00000033 GLIBC_2.0 tcsetpgrp +00000000 g DO *ABS* 00000000 GLIBC_2.3 GLIBC_2.3 +00000000 DO *UND* 00000004 GLIBC_2.1 __libc_stack_end +0008e100 g DF .text 00000e58 GLIBC_2.2 glob64 +000cb8f0 g DF .text 0000008a GLIBC_2.0 __nss_passwd_lookup +000dfc00 g DF .text 0000002a GLIBC_2.0 xdr_int +000dfcd0 g DF .text 000000d6 GLIBC_2.1.1 xdr_hyper +00028b70 w DF .text 000000a2 GLIBC_2.0 sigsuspend +00056c80 g DF .text 000000fc GLIBC_2.2 fputwc +00028850 g DF .text 00000046 GLIBC_2.0 raise +000b45b0 g DF .text 00000071 GLIBC_2.0 getfsfile +000b2900 g DF .text 00000033 GLIBC_2.0 tcflow +000d91b0 g DF .text 00000084 GLIBC_2.0 clnt_sperrno +000227c0 g DF .text 00000017 GLIBC_2.1 __isspace_l +0005ff70 g DF .text 0000007c GLIBC_2.0 _IO_seekmark +000635b0 g DF .text 000000b8 GLIBC_2.0 free +000bded0 g DF .text 0000005d GLIBC_2.1 __towctrans +000c9870 g DF .text 000000b0 GLIBC_PRIVATE __gai_sigqueue +000dff40 g DF .text 00000068 GLIBC_2.0 xdr_u_short +000f08b0 g DF .text 0000003d (GLIBC_2.0) realpath +00028aa0 w DF .text 0000004b GLIBC_2.0 sigprocmask +00054840 g DF .text 00000033 GLIBC_2.1 _IO_fopen +000c7510 g DF .text 00000070 GLIBC_2.2 __res_nclose +000e3e50 g DF .text 0000006c GLIBC_2.0 xdr_key_netstarg +0006f0f0 w DF .text 00000019 GLIBC_2.0 mbsinit +000bafa0 g DF .text 00000039 GLIBC_2.0 getsockname +00056b10 w DF .text 00000030 GLIBC_2.1 fopen64 +000bddf0 w DF .text 000000d2 GLIBC_2.0 wctrans +000b5500 w DF .text 00000050 GLIBC_2.1 ftruncate64 + + diff --git a/scripts/t/Dpkg_Shlibs/objdump.libc6-2.6 b/scripts/t/Dpkg_Shlibs/objdump.libc6-2.6 new file mode 100644 index 0000000..ba68d1c --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/objdump.libc6-2.6 @@ -0,0 +1,2345 @@ + +/lib/libc.so.6: file format elf32-i386 +architecture: i386, flags 0x00000150: +HAS_SYMS, DYNAMIC, D_PAGED +start address 0x000161b0 + +Program Header: + PHDR off 0x00000034 vaddr 0x00000034 paddr 0x00000034 align 2**2 + filesz 0x00000140 memsz 0x00000140 flags r-x + INTERP off 0x0012d550 vaddr 0x0012d550 paddr 0x0012d550 align 2**0 + filesz 0x00000013 memsz 0x00000013 flags r-- + LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12 + filesz 0x00140ca4 memsz 0x00140ca4 flags r-x + LOAD off 0x001411f0 vaddr 0x001411f0 paddr 0x001411f0 align 2**12 + filesz 0x0000278c memsz 0x00005400 flags rw- + DYNAMIC off 0x00142d9c vaddr 0x00142d9c paddr 0x00142d9c align 2**2 + filesz 0x000000f0 memsz 0x000000f0 flags rw- + NOTE off 0x00000174 vaddr 0x00000174 paddr 0x00000174 align 2**2 + filesz 0x00000020 memsz 0x00000020 flags r-- + TLS off 0x001411f0 vaddr 0x001411f0 paddr 0x001411f0 align 2**2 + filesz 0x00000008 memsz 0x0000002c flags r-- +EH_FRAME off 0x0012d564 vaddr 0x0012d564 paddr 0x0012d564 align 2**2 + filesz 0x00002a2c memsz 0x00002a2c flags r-- + STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2 + filesz 0x00000000 memsz 0x00000000 flags rw- + RELRO off 0x001411f8 vaddr 0x001411f0 paddr 0x001411f0 align 2**0 + filesz 0x00001c94 memsz 0x00001c80 flags r-- + +Dynamic Section: + NEEDED ld-linux.so.2 + SONAME libc.so.6 + INIT 0x15ea0 + FINI_ARRAY 0x1411f8 + FINI_ARRAYSZ 0x4 + HASH 0x13d99c + GNU_HASH 0x194 + STRTAB 0xc85c + SYMTAB 0x3c4c + STRSZ 0x567a + SYMENT 0x10 + PLTGOT 0x142ff4 + PLTRELSZ 0x40 + PLTREL 0x11 + JMPREL 0x15d3c + REL 0x13374 + RELSZ 0x29c8 + RELENT 0x8 + VERDEF 0x13058 + VERDEFNUM 0x15 + FLAGS 0x10 + VERNEED 0x13334 + VERNEEDNUM 0x1 + VERSYM 0x11ed6 + RELCOUNT 0x4db + +Version definitions: +1 0x01 0x0865f4e6 libc.so.6 +2 0x00 0x0d696910 GLIBC_2.0 +3 0x00 0x0d696911 GLIBC_2.1 + GLIBC_2.0 +4 0x00 0x09691f71 GLIBC_2.1.1 + GLIBC_2.1 +5 0x00 0x09691f72 GLIBC_2.1.2 + GLIBC_2.1.1 +6 0x00 0x09691f73 GLIBC_2.1.3 + GLIBC_2.1.2 +7 0x00 0x0d696912 GLIBC_2.2 + GLIBC_2.1.3 +8 0x00 0x09691a71 GLIBC_2.2.1 + GLIBC_2.2 +9 0x00 0x09691a72 GLIBC_2.2.2 + GLIBC_2.2.1 +10 0x00 0x09691a73 GLIBC_2.2.3 + GLIBC_2.2.2 +11 0x00 0x09691a74 GLIBC_2.2.4 + GLIBC_2.2.3 +12 0x00 0x09691a76 GLIBC_2.2.6 + GLIBC_2.2.4 +13 0x00 0x0d696913 GLIBC_2.3 + GLIBC_2.2.6 +14 0x00 0x09691972 GLIBC_2.3.2 + GLIBC_2.3 +15 0x00 0x09691973 GLIBC_2.3.3 + GLIBC_2.3.2 +16 0x00 0x09691974 GLIBC_2.3.4 + GLIBC_2.3.3 +17 0x00 0x0d696914 GLIBC_2.4 + GLIBC_2.3.4 +18 0x00 0x0d696915 GLIBC_2.5 + GLIBC_2.4 +19 0x00 0x0d696916 GLIBC_2.6 + GLIBC_2.5 +20 0x00 0x0963cf85 GLIBC_PRIVATE + GLIBC_2.6 +21 0x00 0x0b792650 GCC_3.0 + +Version References: + required from ld-linux.so.2: + 0x0963cf85 0x00 24 GLIBC_PRIVATE + 0x0d696913 0x00 23 GLIBC_2.3 + 0x0d696911 0x00 22 GLIBC_2.1 + +DYNAMIC SYMBOL TABLE: +00000000 w D *UND* 00000000 _IO_stdin_used +00000000 w D *UND* 00000000 _dl_starting_up +00000000 DO *UND* 00000004 GLIBC_2.1 __libc_stack_end +00000000 DF *UND* 00000135 GLIBC_2.3 ___tls_get_addr +00000000 DF *UND* 00000085 GLIBC_PRIVATE _dl_tls_get_addr_soft +00000000 DO *UND* 000001c0 GLIBC_PRIVATE _rtld_global_ro +00000000 DO *UND* 00000004 GLIBC_PRIVATE __libc_enable_secure +00000000 DO *UND* 00000004 GLIBC_PRIVATE _dl_argv +00000000 DO *UND* 00000588 GLIBC_PRIVATE _rtld_global +000756d0 g DF .text 00000023 GLIBC_2.1.1 __strspn_c1 +0005bc90 g DF .text 00000101 GLIBC_2.2 putwchar +000e8950 g DF .text 00000034 GLIBC_2.4 __gethostname_chk +00075700 g DF .text 00000025 GLIBC_2.1.1 __strspn_c2 +000ec880 g DF .text 000000a8 GLIBC_2.0 setrpcent +0007b760 w DF .text 00000039 GLIBC_2.1 __wcstod_l +00075730 g DF .text 0000002a GLIBC_2.1.1 __strspn_c3 +000b7640 w DF .text 00000034 GLIBC_2.0 sched_get_priority_min +000d32b0 g DF .text 00000034 GLIBC_2.3.2 epoll_create +000e8990 g DF .text 00000024 GLIBC_2.4 __getdomainname_chk +000d3590 g DF .text 0000003a GLIBC_2.0 klogctl +00023eb0 g DF .text 00000011 GLIBC_2.1 __tolower_l +00046630 g DF .text 00000034 GLIBC_2.0 dprintf +000800b0 g DF .text 00000ef3 GLIBC_2.1 __wcscoll_l +00093590 w DF .text 00000070 GLIBC_2.0 setuid +000d5fe0 w DF .text 000000cb GLIBC_2.0 iswalpha +000835a0 g DF .text 00000038 GLIBC_2.0 __gettimeofday +000f0cb0 g DF .text 0000007c GLIBC_PRIVATE __internal_endnetgrent +000cbca0 g DF .text 00000034 GLIBC_2.0 chroot +001447c0 w DO .bss 00000004 GLIBC_2.0 daylight +0010e2b0 g DF .text 00000063 (GLIBC_2.0) _IO_file_setbuf +00063b10 g DF .text 00000063 GLIBC_2.1 _IO_file_setbuf +000861f0 g DF .text 00000052 GLIBC_2.1 getdate +000e8090 g DF .text 00000107 GLIBC_2.4 __vswprintf_chk +0010e320 g DF .text 0000015d (GLIBC_2.0) _IO_file_fopen +000df640 g DF .text 0000003c GLIBC_2.3.2 pthread_cond_signal +00111240 g DF .text 0000003c (GLIBC_2.0) pthread_cond_signal +00063d30 g DF .text 000005e0 GLIBC_2.1 _IO_file_fopen +0002fb70 w DF .text 00000030 GLIBC_2.3 strtoull_l +000fc6b0 g DF .text 00000068 GLIBC_2.0 xdr_short +00059a30 g DF .text 000000e9 GLIBC_2.0 _IO_padn +000d1740 g DF .text 00000048 GLIBC_2.0 lfind +00071a00 w DF .text 00000151 GLIBC_2.1 strcasestr +00092740 g DF .text 000002e3 GLIBC_PRIVATE __libc_fork +00103570 g DF .text 000000bc GLIBC_2.1.1 xdr_int64_t +0007b760 w DF .text 00000039 GLIBC_2.3 wcstod_l +000d3ee0 w DF .text 00000037 GLIBC_2.0 socket +00100360 g DF .text 00000081 GLIBC_2.1 key_encryptsession_pk +00072090 w DF .text 00000095 GLIBC_2.0 argz_create +000752d0 g DF .text 00000045 GLIBC_2.1.1 __strpbrk_g +0005bf20 g DF .text 00000049 GLIBC_2.0 putchar_unlocked +000f8960 g DF .text 000000f3 GLIBC_2.0 xdr_pmaplist +000e3790 g DF .text 000000f7 GLIBC_2.2 __res_init +00039340 g DF .text 00000095 GLIBC_2.0 __xpg_basename +000e6980 g DF .text 00000033 GLIBC_2.3.4 __stpcpy_chk +0005fc60 w DF .text 000000e7 GLIBC_2.0 getc +0005d0a0 g DF .text 00000133 GLIBC_2.2 _IO_wdefault_xsputn +00076770 w DF .text 000000bc GLIBC_2.0 wcpncpy +000cc210 g DF .text 0000003d GLIBC_2.2 mkdtemp +0002e190 w DF .text 00000039 GLIBC_2.0 srand48_r +0002b520 g DF .text 00000078 GLIBC_2.1 sighold +0006dc50 g DF .text 00000022 GLIBC_2.0 __default_morecore +000b7510 g DF .text 00000038 GLIBC_2.0 __sched_getparam +000ef5e0 g DF .text 00000076 GLIBC_2.0 iruserok +0003bf30 g DF .text 0000009b GLIBC_2.0 cuserid +00029440 w DF .text 00000027 GLIBC_2.0 isnan +0002d8e0 w DF .text 00000106 GLIBC_2.0 setstate_r +000766e0 g DF .text 00000045 GLIBC_2.0 wmemset +00109f60 g DF .text 00000086 GCC_3.0 __register_frame_info_bases +00000000 g DO *ABS* 00000000 GCC_3.0 GCC_3.0 +00063270 g DF .text 00000025 GLIBC_2.0 _IO_file_stat +00072580 w DF .text 0000038f GLIBC_2.0 argz_replace +00097320 g DF .text 0000006a GLIBC_2.1 globfree64 +000df030 w DF .text 00000037 GLIBC_2.1 argp_usage +0012d508 g DO .rodata 00000004 (GLIBC_2.1) _sys_nerr +0012d50c g DO .rodata 00000004 (GLIBC_2.3) _sys_nerr +0012d500 g DO .rodata 00000004 GLIBC_2.4 _sys_nerr +0012d504 g DO .rodata 00000004 (GLIBC_2.0) _sys_nerr +00072210 w DF .text 00000046 GLIBC_2.0 argz_next +00146334 g DO .bss 00000004 GLIBC_2.1 getdate_err +00111110 g DF .text 0000005f (GLIBC_2.0) getspnam_r +000d7eb0 g DF .text 0000017d GLIBC_2.1.2 getspnam_r +00092740 g DF .text 000002e3 GLIBC_2.0 __fork +000b75d0 g DF .text 0000002c GLIBC_2.0 __sched_yield +000e3790 w DF .text 000000f7 (GLIBC_2.0) res_init +00082a70 g DF .text 00000032 GLIBC_2.0 __gmtime_r +00037e30 g DF .text 0000004f GLIBC_2.0 l64a +00062130 g DF .text 00000094 GLIBC_2.1 _IO_file_attach +0010da30 g DF .text 00000085 (GLIBC_2.0) _IO_file_attach +00075360 g DF .text 00000046 GLIBC_2.1.1 __strstr_g +0008b0d0 w DF .text 00002517 GLIBC_2.3 wcsftime_l +00059890 w DF .text 00000180 GLIBC_2.0 gets +00061d80 g DF .text 00000036 GLIBC_2.0 putc_unlocked +000ec440 g DF .text 0000012d GLIBC_2.0 getrpcbyname +00058280 w DF .text 000000f8 GLIBC_2.0 fflush +000fa6e0 g DF .text 00000062 GLIBC_2.1 _authenticate +00037d40 g DF .text 000000e4 GLIBC_2.0 a64l +000d0a20 g DF .text 0000002d GLIBC_2.0 hcreate +0006fa50 g DF .text 00000022 GLIBC_2.0 strcpy +00015e80 g DF .text 00000005 GLIBC_2.0 __libc_init_first +000fc3b0 g DF .text 00000041 GLIBC_2.0 xdr_long +000d4800 g DF .text 00000062 GLIBC_2.0 shmget +0002a640 w DF .text 000000a7 GLIBC_2.0 sigsuspend +0005e700 g DF .text 00000170 GLIBC_2.2 _IO_wdo_write +00056990 g DF .text 00000049 GLIBC_2.0 getw +000cbe50 g DF .text 00000173 GLIBC_2.0 gethostid +00056e70 w DF .text 0000004b GLIBC_2.0 flockfile +00071d40 g DF .text 000000c6 GLIBC_2.1 __rawmemchr +00081a30 w DF .text 00000073 GLIBC_2.3 wcsncasecmp_l +00071ff0 w DF .text 00000049 GLIBC_2.0 argz_add +000e6260 g DF .text 000002bc GLIBC_2.1 __backtrace_symbols +00075a60 g DF .text 0000005d GLIBC_2.1.1 __strncpy_byn +00060330 w DF .text 0000017f GLIBC_2.0 vasprintf +00064870 g DF .text 000001d0 GLIBC_2.0 _IO_un_link +000e8ba0 g DF .text 00000050 GLIBC_2.4 __wcstombs_chk +000d5c60 g DF .text 00000013 GLIBC_2.0 _mcount +00077dd0 g DF .text 0000003e GLIBC_2.0 __wcstod_internal +000f55d0 g DF .text 000001d0 GLIBC_2.0 authunix_create +000765d0 g DF .text 000000a0 GLIBC_2.0 wmemcmp +00082a70 w DF .text 00000032 GLIBC_2.0 gmtime_r +000c2cf0 w DF .text 00000038 GLIBC_2.0 fchmod +000e6f90 g DF .text 000000d4 GLIBC_2.3.4 __printf_chk +00060800 w DF .text 000001c5 GLIBC_2.0 obstack_vprintf +00075200 g DF .text 00000033 GLIBC_2.1.1 __strspn_cg +000e8640 g DF .text 00000158 GLIBC_2.4 __fgetws_chk +00016650 g DF .text 00000038 (GLIBC_2.0) __cmpdi2 +000dfb20 g DF .text 000000eb GLIBC_2.3.2 __register_atfork +00090090 g DF .text 000000a7 GLIBC_2.0 setgrent +0002a790 w DF .text 00000055 GLIBC_2.0 sigwait +000d71b0 w DF .text 0000006e GLIBC_2.3 iswctype_l +000d6840 w DF .text 0000007b GLIBC_2.0 wctrans +0003d040 g DF .text 000043ec GLIBC_2.0 _IO_vfprintf +000cbc60 g DF .text 00000034 GLIBC_2.0 acct +0002cd30 g DF .text 000000f9 GLIBC_2.0 exit +000e8f40 g DF .text 00000007 GLIBC_2.0 htonl +00092dc0 g DF .text 0000015d GLIBC_2.0 execl +0009f030 w DF .text 0000001f GLIBC_2.0 re_set_syntax +000eb4c0 g DF .text 000000b0 GLIBC_2.0 endprotoent +000bf940 g DF .text 0000150f GLIBC_2.1 wordexp +000eb190 g DF .text 0000017d GLIBC_2.1.2 getprotobynumber_r +001117c0 g DF .text 0000005f (GLIBC_2.0) getprotobynumber_r +00023830 g DF .text 00000027 GLIBC_2.2 __assert +00029410 w DF .text 0000002d GLIBC_2.0 isinf +00061c50 g DF .text 0000000b GLIBC_2.0 clearerr_unlocked +00100a60 g DF .text 0000002a GLIBC_2.0 xdr_keybuf +0009e4f0 g DF .text 000002e9 GLIBC_2.2.3 fnmatch +0009e4f0 g DF .text 000002e9 (GLIBC_2.0) fnmatch +00023dd0 g DF .text 00000017 GLIBC_2.1 __islower_l +000d2f70 g DF .text 00000028 GLIBC_2.3.3 gnu_dev_major +000e8f50 g DF .text 0000000e GLIBC_2.0 htons +00103730 g DF .text 0000003f GLIBC_2.1 xdr_uint32_t +0008e1a0 w DF .text 000000af GLIBC_2.0 readdir +0002e1d0 w DF .text 0000004a GLIBC_2.0 seed48_r +0002b5a0 g DF .text 00000078 GLIBC_2.1 sigrelse +00093ef0 w DF .text 000001e0 GLIBC_2.0 pathconf +000e5280 g DF .text 00000652 GLIBC_2.2.2 __nss_hostname_digits_dots +00092c00 g DF .text 00000034 GLIBC_2.0 execv +000465b0 g DF .text 00000034 GLIBC_2.0 sprintf +00060070 g DF .text 000000f6 GLIBC_2.0 _IO_putc +000d3670 g DF .text 0000003a GLIBC_2.0 nfsservctl +00072a10 g DF .text 0000013e GLIBC_2.0 envz_merge +00020670 g DF .text 0000065e GLIBC_2.0 setlocale +00088f70 w DF .text 0000215c GLIBC_2.3 strftime_l +00071c90 g DF .text 0000001d GLIBC_2.0 memfrob +00076bd0 w DF .text 00000218 GLIBC_2.0 mbrtowc +00106e70 w DF .text 000000c9 GLIBC_2.0 getutid_r +0002d800 w DF .text 00000060 GLIBC_2.0 srand +000d6be0 w DF .text 00000090 GLIBC_2.3 iswcntrl_l +000dfd70 g DF .text 00000071 GLIBC_PRIVATE __libc_pthread_init +000d60b0 w DF .text 000000c9 GLIBC_2.1 iswblank +0006e920 g DF .text 00000005 GLIBC_2.0 tr_break +000c36f0 w DF .text 00000070 GLIBC_2.0 __write +000cba10 g DF .text 00000088 GLIBC_2.0 __select +000d5e80 g DF .text 00000081 GLIBC_2.0 towlower +000e8520 g DF .text 000000f8 GLIBC_2.4 __vfwprintf_chk +0005b4f0 g DF .text 000000ad GLIBC_2.2 fgetws_unlocked +000c48c0 w DF .text 000002c8 GLIBC_2.0 ttyname_r +00058860 g DF .text 00000032 GLIBC_2.1 fopen +0010cab0 g DF .text 00000097 (GLIBC_2.0) fopen +000bb6b0 g DF .text 0000014f GLIBC_2.1 gai_strerror +00076210 w DF .text 000000a4 GLIBC_2.0 wcsncpy +000d7670 g DF .text 0000018e GLIBC_2.0 fgetspent +00070630 g DF .text 00000226 GLIBC_2.0 strsignal +00070150 g DF .text 000000f7 GLIBC_2.0 strncmp +000eae60 g DF .text 000001d2 GLIBC_2.1.2 getnetbyname_r +00111750 g DF .text 00000066 (GLIBC_2.0) getnetbyname_r +000fb280 g DF .text 00000012 GLIBC_2.0 svcfd_create +000eb3d0 g DF .text 000000e4 GLIBC_2.1.2 getprotoent_r +000cdb40 w DF .text 00000038 GLIBC_2.0 ftruncate +00111820 g DF .text 000000e7 (GLIBC_2.0) getprotoent_r +00074f30 g DF .text 0000003c GLIBC_2.1.1 __strncpy_gg +00100850 g DF .text 0000008d GLIBC_2.1 xdr_unixcred +00025880 w DF .text 00000047 GLIBC_2.2 dcngettext +000f91e0 g DF .text 00000087 GLIBC_2.0 xdr_rmtcallres +0005a0a0 g DF .text 00000195 GLIBC_2.0 _IO_puts +000e10f0 g DF .text 000001d4 GLIBC_2.0 inet_nsap_addr +000dfff0 w DF .text 00000169 GLIBC_2.0 inet_aton +000bb800 g DF .text 0000005b GLIBC_2.1 wordfree +001464e0 g DO .bss 00000004 GLIBC_2.0 __rcmd_errstr +000cebd0 g DF .text 000000e5 GLIBC_2.0 ttyslot +000c1280 g DF .text 00000084 GLIBC_2.2 posix_spawn_file_actions_addclose +000657c0 g DF .text 00000038 GLIBC_2.0 _IO_unsave_markers +0008efb0 g DF .text 0000005f GLIBC_2.0 getdirentries +00064da0 g DF .text 00000039 GLIBC_2.0 _IO_default_uflow +000e7e00 g DF .text 00000041 GLIBC_2.4 __wcpcpy_chk +0002fca0 g DF .text 0000003e GLIBC_2.0 __strtold_internal +001430d0 g DO .data 00000004 GLIBC_2.0 optind +00075490 g DF .text 00000089 GLIBC_2.1.1 __strcpy_small +0002dda0 g DF .text 00000037 GLIBC_2.0 erand48 +00146370 g DO .bss 00000004 GLIBC_2.1 argp_program_version +000786e0 w DF .text 00000040 GLIBC_2.3 wcstoul_l +000d3030 w DF .text 0000003a GLIBC_2.1 modify_ldt +0006ba10 g DF .text 000001c5 GLIBC_2.0 __libc_memalign +000d3f60 g DF .text 00000062 GLIBC_2.0 isfdtype +000755e0 g DF .text 0000003b GLIBC_2.1.1 __strcspn_c1 +000cc5f0 g DF .text 000000d6 GLIBC_2.0 getfsfile +00075620 g DF .text 00000048 GLIBC_2.1.1 __strcspn_c2 +0002df50 g DF .text 0000002d GLIBC_2.0 lcong48 +00090ee0 g DF .text 000000a2 GLIBC_2.0 getpwent +00075670 g DF .text 00000058 GLIBC_2.1.1 __strcspn_c3 +000b5920 w DF .text 0000004b GLIBC_2.0 re_match_2 +00144104 w DO .bss 00000004 GLIBC_2.0 __free_hook +0008fc60 g DF .text 00000257 GLIBC_2.1 putgrent +00072470 w DF .text 00000054 GLIBC_2.0 argz_stringify +000ec0d0 g DF .text 000000e4 GLIBC_2.1.2 getservent_r +00111a70 g DF .text 000000e7 (GLIBC_2.0) getservent_r +0005f360 g DF .text 000000ec GLIBC_2.4 open_wmemstream +000f4580 g DF .text 00000106 GLIBC_2.5 inet6_opt_append +00070300 g DF .text 000001b9 GLIBC_2.0 strrchr +000ec270 g DF .text 000000a8 GLIBC_2.0 setservent +001084a0 w DF .text 000000f3 GLIBC_2.2.1 posix_openpt +000f9e30 g DF .text 00000042 GLIBC_2.0 svcerr_systemerr +00061d30 g DF .text 00000042 GLIBC_2.0 fflush_unlocked +000e8050 g DF .text 00000039 GLIBC_2.4 __swprintf_chk +00023df0 g DF .text 00000017 GLIBC_2.1 __isgraph_l +000c1d20 g DF .text 0000001d GLIBC_2.2 posix_spawnattr_setschedpolicy +0005a680 w DF .text 00000127 GLIBC_2.0 setbuffer +00091ec0 w DF .text 000000ac GLIBC_2.0 wait +0005bff0 g DF .text 00000036 GLIBC_2.2 vwprintf +0006bbe0 w DF .text 0000008c GLIBC_2.2 posix_memalign +000f3bd0 g DF .text 00000118 GLIBC_2.3.4 getipv4sourcefilter +00074e00 g DF .text 00000030 GLIBC_2.1.1 __strcpy_g +000e83f0 g DF .text 00000108 GLIBC_2.4 __vwprintf_chk +000562c0 g DF .text 00000074 GLIBC_2.0 tempnam +00023980 g DF .text 00000048 GLIBC_2.0 isalpha +000320d0 w DF .text 00000029 GLIBC_2.3 strtof_l +00110890 g DF .text 00000042 (GLIBC_2.0) regexec +000d2d90 w DF .text 000000a5 GLIBC_2.0 llseek +000b59f0 g DF .text 000000e7 GLIBC_2.3.4 regexec +000cc080 g DF .text 00000022 GLIBC_2.0 revoke +000b59b0 w DF .text 0000003a GLIBC_2.0 re_match +000d0ed0 w DF .text 000003f4 GLIBC_2.0 tdelete +000c4f70 g DF .text 00000128 GLIBC_2.4 readlinkat +000c3fc0 w DF .text 00000034 GLIBC_2.0 pipe +000e7cb0 g DF .text 0000004c GLIBC_2.4 __wctomb_chk +000d2300 w DF .text 0000001a GLIBC_2.0 get_avphys_pages +000f5180 g DF .text 00000170 GLIBC_2.0 authunix_create_default +0005f6a0 g DF .text 0000009a GLIBC_2.0 _IO_ferror +000ec590 g DF .text 0000012d GLIBC_2.0 getrpcbynumber +00072040 w DF .text 00000041 GLIBC_2.0 argz_count +0006fc90 g DF .text 00000057 GLIBC_2.0 __strdup +00094670 g DF .text 0000041d GLIBC_2.2 __sysconf +000e7b00 g DF .text 0000005d GLIBC_2.4 __readlink_chk +000cb620 w DF .text 00000076 GLIBC_2.0 setregid +000e2440 g DF .text 0000002b GLIBC_2.2 __res_ninit +000ca740 w DF .text 000000ac GLIBC_2.0 tcdrain +000f3cf0 g DF .text 0000014a GLIBC_2.3.4 setipv4sourcefilter +000ca8f0 g DF .text 00000030 GLIBC_2.0 cfmakeraw +00077e90 w DF .text 0000003f GLIBC_2.0 wcstold +000cafc0 g DF .text 00000073 GLIBC_2.0 __sbrk +00059d20 g DF .text 00000299 GLIBC_2.1 _IO_proc_open +000d4720 g DF .text 0000007b GLIBC_2.0 shmat +00055d50 g DF .text 00000197 GLIBC_2.0 perror +0010d070 g DF .text 00000299 (GLIBC_2.0) _IO_proc_open +000666c0 g DF .text 00000042 GLIBC_2.0 _IO_str_pbackfail +00143338 g DO .data 00000008 GLIBC_2.0 __tzname +00037e80 g DF .text 00000152 GLIBC_2.0 rpmatch +000c2b50 w DF .text 00000095 GLIBC_2.1 statvfs64 +000e8920 g DF .text 00000024 GLIBC_2.4 __getlogin_r_chk +00143344 g DO .data 00000004 GLIBC_2.0 __progname +00046500 w DF .text 00000024 GLIBC_2.0 _IO_fprintf +0006ad30 w DF .text 00000105 GLIBC_2.0 pvalloc +00024420 w DF .text 00000049 GLIBC_2.0 dcgettext +000facd0 g DF .text 000001f2 GLIBC_2.0 registerrpc +0005e4b0 g DF .text 0000024d GLIBC_2.2 _IO_wfile_overflow +00077c90 g DF .text 00000046 GLIBC_2.1 wcstoll +000c1580 g DF .text 00000010 GLIBC_2.2 posix_spawnattr_setpgroup +00144a94 w DO .bss 00000004 GLIBC_2.0 _environ +000d0810 g DF .text 000001d1 GLIBC_2.0 qecvt_r +0010e4f0 g DF .text 000000fe (GLIBC_2.0) _IO_do_write +000d0140 g DF .text 000001ff GLIBC_2.0 ecvt_r +00063120 g DF .text 0000002a GLIBC_2.1 _IO_do_write +00064c90 g DF .text 00000078 GLIBC_2.0 _IO_switch_to_get_mode +00075eb0 w DF .text 00000034 GLIBC_2.0 wcscat +00108f50 g DF .text 00000023 GLIBC_2.1 getutxid +001465ac g DO .bss 00000004 GLIBC_2.1 __key_gendes_LOCAL +00076df0 w DF .text 00000241 GLIBC_2.0 wcrtomb +000299f0 g DF .text 0000000d GLIBC_2.1 __signbitf +000ca1c0 g DF .text 0000004c GLIBC_2.6 sync_file_range +001462f0 g DO .bss 00000004 (GLIBC_2.0) _obstack +000ea5f0 g DF .text 00000162 GLIBC_2.0 getnetbyaddr +000d3a50 w DF .text 0000006c GLIBC_2.0 connect +000762c0 g DF .text 00000041 GLIBC_2.0 wcspbrk +00000008 g D .tbss 00000004 GLIBC_PRIVATE errno +00029440 g DF .text 00000027 GLIBC_2.0 __isnan +00075170 g DF .text 00000033 GLIBC_2.1.1 __strcspn_cg +00072b50 g DF .text 00000096 GLIBC_2.0 envz_remove +00029f60 w DF .text 00000064 GLIBC_2.0 _longjmp +00025910 w DF .text 00000041 GLIBC_2.2 ngettext +00029960 w DF .text 00000090 GLIBC_2.0 ldexpf +0005f750 w DF .text 00000034 GLIBC_2.0 fileno_unlocked +00146350 g DO .bss 00000004 GLIBC_2.0 error_print_progname +00029d90 g DF .text 00000023 GLIBC_2.1 __signbitl +00125578 g DO .rodata 00000010 GLIBC_2.1 in6addr_any +000cd800 g DF .text 00000022 GLIBC_2.3 lutimes +001090b0 w DF .text 00000175 GLIBC_2.2.4 dl_iterate_phdr +00100210 g DF .text 0000005f GLIBC_2.1 key_get_conv +000cfc20 g DF .text 00000038 GLIBC_2.0 munlock +000910f0 g DF .text 0000012d GLIBC_2.0 getpwuid +000711c0 w DF .text 00000091 GLIBC_2.0 stpncpy +000cdbf0 w DF .text 00000063 GLIBC_2.1 ftruncate64 +000c95f0 g DF .text 00000040 GLIBC_2.1 sendfile +000cf9b0 w DF .text 0000006e GLIBC_2.1 mmap64 +000e3aa0 g DF .text 00000038 GLIBC_PRIVATE __nss_disable_nscd +0010ef60 g DF .text 000000e5 (GLIBC_2.0) getpwent_r +00091240 g DF .text 000000e2 GLIBC_2.1.2 getpwent_r +000f4870 g DF .text 0000006c GLIBC_2.5 inet6_rth_init +0002b1d0 g DF .text 0000004f GLIBC_PRIVATE __libc_allocate_rtsig_private +00029d00 w DF .text 00000086 GLIBC_2.0 ldexpl +000f4310 g DF .text 00000075 GLIBC_2.5 inet6_opt_next +000fedc0 g DF .text 000000bc GLIBC_2.1 ecb_crypt +0005ba60 g DF .text 000000bb GLIBC_2.2 ungetwc +0008e730 g DF .text 00000024 GLIBC_2.1 versionsort +000fc670 g DF .text 0000001a GLIBC_2.1.1 xdr_longlong_t +0007fe70 w DF .text 00000039 GLIBC_2.1 __wcstof_l +000d0da0 w DF .text 0000005b GLIBC_2.0 tfind +00046530 g DF .text 00000039 GLIBC_2.0 _IO_printf +00072210 g DF .text 00000046 GLIBC_2.0 __argz_next +00076670 w DF .text 00000034 GLIBC_2.0 wmemcpy +000c1450 g DF .text 00000035 GLIBC_2.2 posix_spawnattr_init +000c25d0 g DF .text 0000015d GLIBC_2.4 __fxstatat64 +0002acd0 g DF .text 0000002a GLIBC_2.0 __sigismember +00074c90 g DF .text 0000003d GLIBC_2.1.1 __memcpy_by2 +000c42e0 g DF .text 000000c2 GLIBC_2.0 get_current_dir_name +000d4650 g DF .text 00000075 GLIBC_2.2 semctl +00110f20 g DF .text 0000006f (GLIBC_2.0) semctl +00061c80 g DF .text 00000036 GLIBC_2.0 fputc_unlocked +00077040 w DF .text 00000058 GLIBC_2.0 mbsrtowcs +00074c50 g DF .text 00000033 GLIBC_2.1.1 __memcpy_by4 +000d1aa0 g DF .text 00000023 GLIBC_2.0 verr +000eb040 g DF .text 0000012d GLIBC_2.0 getprotobynumber +000c50e0 g DF .text 0000014b GLIBC_2.4 unlinkat +00023d50 w DF .text 00000015 GLIBC_2.3 isalnum_l +000fe140 g DF .text 00000103 GLIBC_2.0 getsecretkey +00113170 g DF __libc_thread_freeres_fn 00000031 GLIBC_PRIVATE __libc_thread_freeres +000fecb0 g DF .text 00000056 GLIBC_2.1 xdr_authdes_verf +00143420 g DO .data 00000098 GLIBC_2.1 _IO_2_1_stdin_ +0002fba0 g DF .text 0000003e GLIBC_2.0 __strtof_internal +0008e150 w DF .text 0000004e GLIBC_2.0 closedir +0008f750 g DF .text 000000b4 GLIBC_2.0 initgroups +000e90d0 g DF .text 00000152 GLIBC_2.0 inet_ntoa +0007fe70 w DF .text 00000039 GLIBC_2.3 wcstof_l +00023250 g DF .text 00000088 GLIBC_2.1 __freelocale +0010f130 g DF .text 00001755 (GLIBC_2.1) glob64 +000981f0 g DF .text 00001755 GLIBC_2.2 glob64 +000e82d0 g DF .text 000000fb GLIBC_2.4 __fwprintf_chk +000f9270 g DF .text 000000fd GLIBC_2.0 pmap_rmtcall +00060070 w DF .text 000000f6 GLIBC_2.0 putc +000926d0 w DF .text 0000006c GLIBC_2.0 nanosleep +000c40e0 w DF .text 00000034 GLIBC_2.0 fchdir +000fc790 g DF .text 00000037 GLIBC_2.0 xdr_char +000d7da0 g DF .text 000000a7 GLIBC_2.0 setspent +00058ac0 g DF .text 000000cc GLIBC_2.2 fopencookie +0010ca50 g DF .text 0000005a (GLIBC_2.0) fopencookie +00029410 g DF .text 0000002d GLIBC_2.0 __isinf +000e6850 g DF .text 0000004e GLIBC_2.3.4 __mempcpy_chk +0005ce10 g DF .text 00000165 GLIBC_2.2 _IO_wdefault_pbackfail +000f10c0 g DF .text 000000b0 GLIBC_2.0 endaliasent +00056ed0 w DF .text 00000069 GLIBC_2.0 ftrylockfile +00078c50 w DF .text 00000040 GLIBC_2.3 wcstoll_l +00023d70 w DF .text 00000017 GLIBC_2.3 isalpha_l +00061c60 g DF .text 00000010 GLIBC_2.0 feof_unlocked +00023d00 g DF .text 00000046 GLIBC_2.0 isblank +000b58d0 w DF .text 0000004a GLIBC_2.0 re_search_2 +000f9d40 g DF .text 0000004e GLIBC_2.0 svc_sendreply +00023300 w DF .text 00000084 GLIBC_2.3 uselocale +000ce920 g DF .text 00000040 GLIBC_2.0 getusershell +0002ac10 g DF .text 000000b9 GLIBC_2.0 siginterrupt +0008f9c0 g DF .text 0000012d GLIBC_2.0 getgrgid +000d3330 g DF .text 0000007c GLIBC_2.3.2 epoll_wait +000d20a0 w DF .text 000000d7 GLIBC_2.0 error +0005af20 g DF .text 00000111 GLIBC_2.2 fputwc +000c1f40 g DF .text 00000041 GLIBC_2.4 mkfifoat +00111b80 g DF .text 000000e7 (GLIBC_2.0) getrpcent_r +000d3450 g DF .text 00000034 GLIBC_2.0 get_kernel_syms +000ec6e0 g DF .text 000000e4 GLIBC_2.1.2 getrpcent_r +00058fa0 w DF .text 000001d1 GLIBC_2.0 ftell +000e7980 g DF .text 0000005d GLIBC_2.4 __read_chk +00145800 g DO .bss 00000200 (GLIBC_2.0) _res +000e02e0 g DF .text 00000947 GLIBC_2.0 inet_ntop +00070250 g DF .text 000000a7 GLIBC_2.0 strncpy +0002a060 w DF .text 000000cf GLIBC_2.0 signal +000cb950 g DF .text 00000074 GLIBC_2.0 getdomainname +000e87c0 g DF .text 000000a8 GLIBC_2.4 __fgetws_unlocked_chk +000e2470 g DF .text 00000112 GLIBC_2.2 __res_nclose +000d36b0 w DF .text 00000034 GLIBC_2.0 personality +0005a0a0 w DF .text 00000195 GLIBC_2.0 puts +000d7020 g DF .text 00000092 GLIBC_2.1 __iswupper_l +000e6d70 g DF .text 000000c2 GLIBC_2.3.4 __vsprintf_chk +0002d480 g DF .text 00000046 GLIBC_2.0 mbstowcs +000228b0 g DF .text 000007fa GLIBC_2.1 __newlocale +000cae30 g DF .text 0000004d GLIBC_2.0 getpriority +00039210 g DF .text 00000130 GLIBC_2.0 getsubopt +000ca920 g DF .text 000000a7 GLIBC_2.1 tcgetsid +00092740 w DF .text 000002e3 GLIBC_2.0 fork +000569e0 g DF .text 0000003f GLIBC_2.0 putw +000d1c10 g DF .text 0000001d GLIBC_2.0 warnx +000d2b60 g DF .text 0000003a GLIBC_2.0 ioperm +0005a7d0 g DF .text 00000189 GLIBC_2.0 _IO_setvbuf +000f8340 g DF .text 00000100 GLIBC_2.0 pmap_unset +00109590 g DF .text 00000043 GLIBC_2.1 _dl_mcount_wrapper_check +000d6590 w DF .text 000000cb GLIBC_2.0 iswspace +00106780 g DF .text 0000001e GLIBC_2.1 isastream +0005c100 g DF .text 0000003c GLIBC_2.2 vwscanf +0002a4c0 w DF .text 0000009e GLIBC_2.0 sigprocmask +000650e0 g DF .text 0000004b GLIBC_2.0 _IO_sputbackc +0005b5a0 g DF .text 00000122 GLIBC_2.2 fputws +0002eea0 w DF .text 00000030 GLIBC_2.3 strtoul_l +00125588 g DO .rodata 00000010 GLIBC_2.1 in6addr_loopback +000d2910 g DF .text 0000003a GLIBC_2.3 listxattr +00075090 g DF .text 0000001c GLIBC_2.1.1 __strchr_c +0002e220 w DF .text 0000006a GLIBC_2.0 lcong48_r +0009f550 w DF .text 00000060 GLIBC_2.0 regfree +000e8ff0 g DF .text 0000002f GLIBC_2.0 inet_netof +000b7510 w DF .text 00000038 GLIBC_2.0 sched_getparam +000244a0 w DF .text 00000023 GLIBC_2.0 gettext +000921f0 w DF .text 000001cd GLIBC_2.1 waitid +0002adb0 g DF .text 00000060 GLIBC_2.0 sigfillset +0005c660 g DF .text 0000006c GLIBC_2.2 _IO_init_wmarker +000cd830 w DF .text 00000157 GLIBC_2.3 futimes +000f6860 g DF .text 000002d3 GLIBC_2.0 callrpc +000750b0 g DF .text 0000001e GLIBC_2.1.1 __strchr_g +000cc2f0 g DF .text 00000044 GLIBC_2.0 gtty +00083580 g DF .text 0000001b GLIBC_2.0 time +0006b890 g DF .text 00000180 GLIBC_2.0 __libc_malloc +0008f900 g DF .text 000000a2 GLIBC_2.0 getgrent +000d3130 w DF .text 00000034 GLIBC_2.1 ntp_adjtime +000e7e50 g DF .text 0000003b GLIBC_2.4 __wcsncpy_chk +000cb5a0 w DF .text 00000076 GLIBC_2.0 setreuid +0002b130 g DF .text 0000005f GLIBC_2.0 sigorset +00065420 g DF .text 00000024 GLIBC_2.0 _IO_flush_all +0008e270 w DF .text 00000110 GLIBC_2.0 readdir_r +0002df80 g DF .text 0000002e GLIBC_2.0 drand48_r +0006ba10 w DF .text 000001c5 GLIBC_2.0 memalign +00050a50 w DF .text 00000039 GLIBC_2.0 vfscanf +0005adc0 g DF .text 0000013c GLIBC_2.2 fsetpos64 +0010d900 g DF .text 0000010e (GLIBC_2.1) fsetpos64 +000eaca0 g DF .text 000000b0 GLIBC_2.0 endnetent +000d0aa0 g DF .text 000001cd GLIBC_2.0 hsearch_r +000e8bf0 g DF .text 00000046 GLIBC_2.4 __stack_chk_fail +00081910 w DF .text 00000047 GLIBC_2.1 wcscasecmp +000cf7e0 g DF .text 0000016f GLIBC_2.0 daemon +0005f5f0 g DF .text 0000009a GLIBC_2.0 _IO_feof +001004f0 g DF .text 0000005a GLIBC_2.1 key_setsecret +000c20b0 g DF .text 0000008e GLIBC_2.0 __lxstat +000fab50 g DF .text 0000012a GLIBC_2.0 svc_run +0005d000 g DF .text 00000093 GLIBC_2.2 _IO_wdefault_finish +00110f90 g DF .text 00000062 (GLIBC_2.0) shmctl +000786e0 w DF .text 00000040 GLIBC_2.1 __wcstoul_l +000d4870 g DF .text 00000065 GLIBC_2.2 shmctl +000d3550 g DF .text 00000038 GLIBC_2.4 inotify_rm_watch +00103570 g DF .text 000000bc GLIBC_2.3.4 xdr_quad_t +00058280 g DF .text 000000f8 GLIBC_2.0 _IO_fflush +00076bd0 g DF .text 00000218 GLIBC_2.0 __mbrtowc +000c50a0 w DF .text 00000034 GLIBC_2.0 unlink +0005be00 g DF .text 00000101 GLIBC_2.0 putchar +000fcf40 g DF .text 00000032 GLIBC_2.0 xdrmem_create +000df850 g DF .text 0000003c GLIBC_2.0 pthread_mutex_lock +00061fe0 g DF .text 000000a7 GLIBC_2.1 fgets_unlocked +000d7820 g DF .text 000003c3 GLIBC_2.0 putspent +000d3b80 g DF .text 00000037 GLIBC_2.0 listen +001036f0 g DF .text 0000003f GLIBC_2.1 xdr_int32_t +000d43c0 w DF .text 000000c5 GLIBC_2.0 msgrcv +000ee340 g DF .text 00000060 GLIBC_2.0 __ivaliduser +000ec380 g DF .text 000000a2 GLIBC_2.0 getrpcent +000cba10 w DF .text 00000088 GLIBC_2.0 select +000d3d10 w DF .text 0000006c GLIBC_2.0 __send +000d63f0 w DF .text 000000cb GLIBC_2.0 iswprint +000c2ec0 w DF .text 00000038 GLIBC_2.0 mkdir +000d6a20 g DF .text 00000090 GLIBC_2.1 __iswalnum_l +00023e30 w DF .text 00000015 GLIBC_2.3 ispunct_l +000617c0 g DF .text 00000036 GLIBC_PRIVATE __libc_fatal +00146374 g DO .bss 00000004 GLIBC_2.1 argp_program_version_hook +000d47a0 g DF .text 00000060 GLIBC_2.0 shmdt +0006cff0 g DF .text 00000487 GLIBC_2.0 realloc +000c10c0 w DF .text 000000ef GLIBC_2.1 __pwrite64 +0002d6f0 w DF .text 0000007f GLIBC_2.0 setstate +000c2770 w DF .text 00000038 GLIBC_2.0 fstatfs +0012754e g DO .rodata 00000005 GLIBC_2.0 _libc_intl_domainname +0012d518 g DO .rodata 00000004 GLIBC_2.0 h_nerr +000f23d0 g DF .text 0000031c GLIBC_2.1 if_nameindex +00076870 w DF .text 0000018e GLIBC_2.0 btowc +00072470 g DF .text 00000054 GLIBC_2.0 __argz_stringify +0005a980 g DF .text 000000ac GLIBC_2.0 _IO_ungetc +00075a30 g DF .text 00000022 GLIBC_2.1.1 __memset_cc +0008e3a0 g DF .text 00000068 GLIBC_2.0 rewinddir +0005c620 g DF .text 0000003f GLIBC_2.2 _IO_adjust_wcolumn +0002fce0 w DF .text 0000003f GLIBC_2.0 strtold +000d6ab0 g DF .text 00000092 GLIBC_2.1 __iswalpha_l +001007e0 g DF .text 00000068 GLIBC_2.0 xdr_key_netstres +00111d50 g DF .text 000000e5 (GLIBC_2.0) getaliasent_r +000f0fd0 g DF .text 000000e2 GLIBC_2.1.2 getaliasent_r +000cbce0 w DF .text 00000065 GLIBC_2.0 fsync +00082930 g DF .text 0000008d GLIBC_2.0 clock +00075a30 g DF .text 00000022 GLIBC_2.1.1 __memset_cg +00106850 g DF .text 00000063 GLIBC_2.1 putmsg +000f9640 g DF .text 00000083 GLIBC_2.0 xdr_replymsg +000d41c0 g DF .text 00000041 GLIBC_2.2.4 sockatmark +000d5c80 g DF .text 00000075 GLIBC_2.0 towupper +0002b950 g DF .text 00000267 GLIBC_2.0 abort +0014383c g DO .data 00000004 GLIBC_2.0 stdin +000fc720 g DF .text 00000068 GLIBC_2.0 xdr_u_short +00065450 g DF .text 000001fd GLIBC_2.0 _IO_flush_all_linebuffered +0002e4e0 g DF .text 00000046 GLIBC_2.0 strtoll +00092a84 g DF .text 00000013 GLIBC_2.0 _exit +00039d20 g DF .text 00000029 GLIBC_2.1 wcstoumax +000fa3e0 g DF .text 00000295 GLIBC_2.2 svc_getreq_common +0005aa40 w DF .text 000000c9 GLIBC_2.0 vsprintf +0002b420 w DF .text 00000055 GLIBC_2.1 sigwaitinfo +000d4e00 w DF .text 00000092 GLIBC_2.2 moncontrol +000d3f20 w DF .text 00000037 GLIBC_2.0 socketpair +000e12d0 g DF .text 00000136 GLIBC_PRIVATE __res_iclose +0002d270 g DF .text 00000044 GLIBC_2.0 div +00070d20 w DF .text 0000019b GLIBC_2.0 memchr +00034930 w DF .text 00000029 GLIBC_2.1 __strtod_l +000704c0 g DF .text 000000b3 GLIBC_2.0 strpbrk +000ecc90 g DF .text 0000002d GLIBC_2.0 ether_aton +00075c10 w DF .text 000000bb GLIBC_2.2 memrchr +00023860 g DF .text 00000037 GLIBC_2.0 tolower +000c3680 w DF .text 00000070 GLIBC_2.0 __read +000d09f0 w DF .text 00000026 GLIBC_2.0 hdestroy +0010a0c0 g DF .text 0000003a GLIBC_2.0 __register_frame_info_table +00059fc0 g DF .text 0000008d GLIBC_2.1 popen +0010d310 g DF .text 0000008a (GLIBC_2.0) popen +0006ce00 w DF .text 000001e5 GLIBC_2.0 cfree +00023c50 g DF .text 00000028 GLIBC_2.0 _tolower +000ee780 g DF .text 000000a1 GLIBC_2.2 ruserok_af +000d2630 w DF .text 0000006f GLIBC_2.0 step +00024420 g DF .text 00000049 GLIBC_2.0 __dcgettext +000d68c0 w DF .text 0000005d GLIBC_2.0 towctrans +000d2a10 g DF .text 00000046 GLIBC_2.3 lsetxattr +000cdda0 g DF .text 00000071 GLIBC_2.0 setttyent +000c3060 w DF .text 000000e5 GLIBC_2.2 __open64 +00093790 g DF .text 00000013 GLIBC_2.0 __bsd_getpgrp +000934c0 g DF .text 00000031 GLIBC_2.0 getpid +00039d50 w DF .text 00000079 GLIBC_2.1 getcontext +0002a560 w DF .text 00000038 GLIBC_2.0 kill +00070860 g DF .text 000000ae GLIBC_2.0 strspn +000df530 g DF .text 0000003c GLIBC_2.0 pthread_condattr_init +00143340 w DO .data 00000004 GLIBC_2.0 program_invocation_name +0002d310 w DF .text 00000095 GLIBC_2.1.1 imaxdiv +00110de0 g DF .text 00000040 (GLIBC_2.2) posix_fallocate64 +000c9350 g DF .text 00000295 GLIBC_2.3.3 posix_fallocate64 +000fa9c0 g DF .text 0000009c GLIBC_2.0 svcraw_create +000b7600 g DF .text 00000034 GLIBC_2.0 __sched_get_priority_max +000722f0 w DF .text 00000042 GLIBC_2.0 argz_extract +000243e0 w DF .text 00000015 GLIBC_2.2 bind_textdomain_codeset +000583a0 g DF .text 000001df GLIBC_2.2 fgetpos +0005abb0 g DF .text 000001af GLIBC_2.2 _IO_fgetpos64 +0010d4c0 g DF .text 0000013b (GLIBC_2.0) fgetpos +0010d620 g DF .text 00000184 (GLIBC_2.1) _IO_fgetpos64 +0006fc90 w DF .text 00000057 GLIBC_2.0 strdup +000c4070 g DF .text 00000022 GLIBC_2.1 creat64 +00061cc0 w DF .text 0000002a GLIBC_2.0 getc_unlocked +000fac80 g DF .text 00000043 GLIBC_2.0 svc_exit +00088ed0 g DF .text 00000045 GLIBC_2.0 strftime +000e0c30 g DF .text 000003e5 GLIBC_2.0 inet_pton +00074fb0 g DF .text 00000045 GLIBC_2.1.1 __strncat_g +000613a0 g DF .text 0000000f GLIBC_2.2 __flbf +000c3e10 g DF .text 00000130 GLIBC_2.1 lockf64 +0005c3e0 g DF .text 0000002b GLIBC_2.2 _IO_switch_to_main_wget_area +00101ea0 g DF .text 0000023b GLIBC_2.0 xencrypt +001068c0 g DF .text 00000046 GLIBC_2.1 putpmsg +00143338 w DO .data 00000008 GLIBC_2.0 tzname +00037700 g DF .text 0000007d GLIBC_PRIVATE __libc_system +001037e0 g DF .text 00000069 GLIBC_2.1 xdr_uint16_t +00068ec0 g DF .text 0000014b GLIBC_2.0 __libc_mallopt +0002afc0 w DF .text 000000a2 GLIBC_2.1 sysv_signal +0002f510 w DF .text 00000030 GLIBC_2.3 strtoll_l +000df310 g DF .text 00000043 GLIBC_2.0 pthread_attr_getschedparam +000c3f80 g DF .text 00000038 GLIBC_2.0 __dup2 +000df7c0 g DF .text 0000003c GLIBC_2.0 pthread_mutex_destroy +0005b0c0 w DF .text 000000e7 GLIBC_2.2 fgetwc +000cac60 g DF .text 00000074 GLIBC_2.0 vlimit +000c2cb0 w DF .text 00000038 GLIBC_2.0 chmod +000cafc0 w DF .text 00000073 GLIBC_2.0 sbrk +00023550 g DF .text 00000150 GLIBC_2.0 __assert_fail +001021c0 g DF .text 0000027a GLIBC_2.1 clntunix_create +00075110 g DF .text 00000020 GLIBC_2.1.1 __strrchr_c +00023cb0 w DF .text 0000000b GLIBC_2.1 __toascii_l +000d5f10 w DF .text 000000c9 GLIBC_2.0 iswalnum +00029470 w DF .text 00000011 GLIBC_2.0 finite +000edbc0 g DF .text 0000006a GLIBC_2.0 ether_ntoa_r +000ccec0 g DF .text 000008d5 GLIBC_2.2 __getmntent_r +00046530 g DF .text 00000039 GLIBC_2.0 printf +00023d50 g DF .text 00000015 GLIBC_2.1 __isalnum_l +000d3a50 w DF .text 0000006c GLIBC_2.0 __connect +000ea960 g DF .text 00000156 GLIBC_2.0 getnetbyname +000cc1b0 g DF .text 0000002b GLIBC_2.0 mkstemp +00075130 g DF .text 00000033 GLIBC_2.1.1 __strrchr_g +000c2a10 g DF .text 00000094 GLIBC_2.1 statvfs +000c3cc0 w DF .text 00000038 GLIBC_2.0 flock +000d1f40 w DF .text 0000015c GLIBC_2.0 error_at_line +00060190 g DF .text 000000f6 GLIBC_2.0 rewind +0002d230 g DF .text 00000031 GLIBC_2.0 llabs +00072e50 w DF .text 0000109f GLIBC_2.3 strcoll_l +001465a0 g DO .bss 0000000c GLIBC_2.0 _null_auth +00082af0 w DF .text 00000032 GLIBC_2.0 localtime_r +00075f80 g DF .text 0000003e GLIBC_2.0 wcscspn +000cace0 g DF .text 00000150 GLIBC_2.0 vtimes +00029490 w DF .text 0000001e GLIBC_2.0 copysign +000711c0 g DF .text 00000091 GLIBC_2.0 __stpncpy +000f44f0 g DF .text 00000090 GLIBC_2.5 inet6_opt_finish +000926d0 w DF .text 0000006c GLIBC_2.2.6 __nanosleep +00029840 w DF .text 0000009a GLIBC_2.0 modff +000d6250 w DF .text 000000cb GLIBC_2.0 iswlower +0002fc60 w DF .text 0000003f GLIBC_2.0 strtod +00029ee0 g DF .text 0000003e GLIBC_2.0 setjmp +000c8e50 g DF .text 000000a4 GLIBC_2.1 __poll +00023bb0 g DF .text 00000048 GLIBC_2.0 isspace +000e8870 g DF .text 0000002b GLIBC_2.4 __confstr_chk +00056240 g DF .text 00000080 GLIBC_2.0 tmpnam_r +000d7120 g DF .text 0000008b GLIBC_2.1 __wctype_l +0005b350 g DF .text 00000179 GLIBC_2.2 fgetws +00108ef0 g DF .text 00000017 GLIBC_2.1 setutxent +00023d70 g DF .text 00000017 GLIBC_2.1 __isalpha_l +0002fbe0 w DF .text 0000003f GLIBC_2.0 strtof +00078c50 w DF .text 00000040 GLIBC_2.1 __wcstoll_l +000d6c70 w DF .text 00000093 GLIBC_2.3 iswdigit_l +000d4300 g DF .text 000000b6 GLIBC_PRIVATE __libc_msgsnd +00082a30 g DF .text 00000035 GLIBC_2.0 gmtime +00023300 g DF .text 00000084 GLIBC_2.3 __uselocale +000e7ef0 g DF .text 000000e5 GLIBC_2.4 __wcsncat_chk +000710f0 g DF .text 00000010 GLIBC_2.0 ffs +000f9700 g DF .text 00000050 GLIBC_2.0 xdr_opaque_auth +00022890 w DF .text 0000001e GLIBC_2.0 __ctype_get_mb_cur_max +000d6d10 g DF .text 00000092 GLIBC_2.1 __iswlower_l +00029ae0 w DF .text 00000187 GLIBC_2.0 modfl +00072ca0 g DF .text 0000017d GLIBC_2.0 envz_add +00070ab0 g DF .text 00000112 GLIBC_2.0 strtok +001085a0 w DF .text 0000003b GLIBC_2.1 getpt +0002b480 w DF .text 000000a0 GLIBC_2.1 sigqueue +0002e3a0 g DF .text 00000046 GLIBC_2.0 strtol +00091330 g DF .text 000000b0 GLIBC_2.0 endpwent +00058860 g DF .text 00000032 GLIBC_2.1 _IO_fopen +0010cab0 g DF .text 00000097 (GLIBC_2.0) _IO_fopen +00075320 g DF .text 00000036 GLIBC_2.1.1 __strstr_cg +000c4b90 w DF .text 00000032 GLIBC_2.0 isatty +000c7440 g DF .text 000000f9 GLIBC_2.0 fts_close +000c4470 w DF .text 00000053 GLIBC_2.0 lchown +000cce30 w DF .text 00000083 GLIBC_2.0 setmntent +000cf950 w DF .text 0000005c GLIBC_2.0 mmap +000f0db0 g DF .text 000000ca GLIBC_2.0 endnetgrent +000632a0 g DF .text 0000003f GLIBC_2.0 _IO_file_read +000f4190 g DF .text 00000143 GLIBC_2.3.4 setsourcefilter +0010a570 g DF .text 00000052 GLIBC_2.0 __register_frame +00090c80 w DF .text 000000d4 GLIBC_2.0 getpw +000d8490 w DF .text 00000226 GLIBC_2.0 fgetspent_r +000b75d0 w DF .text 0000002c GLIBC_2.0 sched_yield +00000000 g DO *ABS* 00000000 GLIBC_PRIVATE GLIBC_PRIVATE +0002e4e0 w DF .text 00000046 GLIBC_2.0 strtoq +00095810 w DF .text 000000b6 GLIBC_2.0 glob_pattern_p +00075bb0 g DF .text 00000053 GLIBC_2.1.1 __strsep_1c +00081960 w DF .text 0000006c GLIBC_2.1 wcsncasecmp +00090390 g DF .text 000001ec GLIBC_2.1.2 getgrnam_r +000829e0 g DF .text 00000039 GLIBC_2.0 ctime_r +0010ef00 g DF .text 0000005f (GLIBC_2.0) getgrnam_r +00103570 g DF .text 000000bc GLIBC_2.3.4 xdr_u_quad_t +0002c6b0 w DF .text 00000088 GLIBC_2.0 clearenv +000d7120 w DF .text 0000008b GLIBC_2.3 wctype_l +000c2ab0 g DF .text 00000098 GLIBC_2.1 fstatvfs +0002a7f0 w DF .text 00000063 GLIBC_2.0 sigblock +000d4250 g DF .text 00000058 GLIBC_2.1 __libc_sa_len +0005f5f0 w DF .text 0000009a GLIBC_2.0 feof +001465b0 g DO .bss 00000004 GLIBC_2.1 __key_encryptsession_pk_LOCAL +000fb820 g DF .text 00000023 GLIBC_2.0 svcudp_create +000d6920 w DF .text 00000092 GLIBC_2.3 iswxdigit_l +000df4a0 g DF .text 00000043 GLIBC_2.0 pthread_attr_setscope +00071e10 w DF .text 0000015f GLIBC_2.1.1 strchrnul +000cc130 w DF .text 00000034 GLIBC_2.0 swapoff +001433fc g DO .data 00000004 (GLIBC_2.0) __ctype_tolower +000cf660 g DF .text 0000002c GLIBC_2.0 syslog +0002eea0 w DF .text 00000030 GLIBC_2.1 __strtoul_l +000c1490 g DF .text 00000007 GLIBC_2.2 posix_spawnattr_destroy +0010d7d0 g DF .text 00000110 (GLIBC_2.0) fsetpos +00058e40 g DF .text 0000013e GLIBC_2.2 fsetpos +000c0fd0 w DF .text 000000ef GLIBC_2.1 pread64 +000c37e0 w DF .text 000000f7 GLIBC_2.4 eaccess +000f3b40 g DF .text 0000001a GLIBC_2.3.3 inet6_option_alloc +00085b80 g DF .text 00000048 GLIBC_2.0 dysize +000c4de0 w DF .text 00000038 GLIBC_2.0 symlink +001438c0 g DO .data 00000050 GLIBC_2.0 _IO_stdout_ +0005c440 g DF .text 00000039 GLIBC_2.2 _IO_wdefault_uflow +000d7300 g DF .text 000000a2 GLIBC_2.0 getspent +000df220 g DF .text 00000043 GLIBC_2.0 pthread_attr_setdetachstate +000d27c0 g DF .text 00000040 GLIBC_2.3 fgetxattr +0002dab0 w DF .text 00000104 GLIBC_2.0 srandom_r +000cdb00 w DF .text 00000038 GLIBC_2.0 truncate +0006b590 g DF .text 000002fd GLIBC_2.0 __libc_calloc +00023b10 g DF .text 00000048 GLIBC_2.0 isprint +000c9120 g DF .text 00000046 GLIBC_2.2 posix_fadvise +00071410 w DF .text 00000046 GLIBC_2.0 memccpy +00092c40 g DF .text 0000017c GLIBC_2.0 execle +000d26a0 g DF .text 000000e8 GLIBC_2.2 getloadavg +00088f20 g DF .text 00000045 GLIBC_2.2 wcsftime +000ca2a0 g DF .text 0000006c GLIBC_2.0 cfsetispeed +000e4400 g DF .text 00000228 GLIBC_2.0 __nss_configure_lookup +0002d2c0 g DF .text 00000044 GLIBC_2.0 ldiv +000fc3a0 g DF .text 0000000a GLIBC_2.0 xdr_void +000edb90 g DF .text 0000002d GLIBC_2.0 ether_ntoa +000441b0 g DF .text 000000fe GLIBC_2.0 parse_printf_format +0005fc60 w DF .text 000000e7 GLIBC_2.0 fgetc +000d38a0 g DF .text 00000040 GLIBC_2.5 tee +00100770 g DF .text 0000006c GLIBC_2.0 xdr_key_netstarg +00071ba0 g DF .text 000000e3 GLIBC_2.0 strfry +0005aa40 g DF .text 000000c9 GLIBC_2.0 _IO_vsprintf +000cbdf0 g DF .text 00000057 GLIBC_2.0 reboot +00111e60 g DF .text 0000005f (GLIBC_2.0) getaliasbyname_r +000f1490 g DF .text 0000017d GLIBC_2.1.2 getaliasbyname_r +0002dea0 g DF .text 00000037 GLIBC_2.0 jrand48 +00111450 g DF .text 00000066 (GLIBC_2.0) gethostbyname_r +000e9fd0 g DF .text 0000029e GLIBC_2.1.2 gethostbyname_r +00093370 g DF .text 00000145 GLIBC_2.0 execlp +00071b60 g DF .text 0000003f GLIBC_2.0 swab +00056f40 g DF .text 0000002f GLIBC_2.0 _IO_funlockfile +00056e70 g DF .text 0000004b GLIBC_2.0 _IO_flockfile +00075860 g DF .text 00000072 GLIBC_2.1.1 __strsep_2c +0008e420 g DF .text 0000006c GLIBC_2.0 seekdir +00023ce0 w DF .text 00000015 GLIBC_2.3 isblank_l +00023cc0 w DF .text 00000011 GLIBC_2.1 __isascii_l +0008eea0 g DF .text 00000024 GLIBC_2.2 alphasort64 +000f8740 g DF .text 000001a6 GLIBC_2.0 pmap_getport +0010ed30 g DF .text 00000024 (GLIBC_2.1) alphasort64 +00039e40 w DF .text 00000065 GLIBC_2.1 makecontext +000cbd80 g DF .text 00000065 GLIBC_2.0 fdatasync +00101320 g DF .text 000001bd GLIBC_2.1 authdes_getucred +000cdb80 g DF .text 00000063 GLIBC_2.1 truncate64 +000d6db0 g DF .text 00000092 GLIBC_2.1 __iswgraph_l +00023e30 g DF .text 00000015 GLIBC_2.1 __ispunct_l +00039cc0 g DF .text 00000029 GLIBC_2.1 strtoumax +000d9740 w DF .text 0000018d GLIBC_2.1 argp_failure +00071260 g DF .text 00000062 GLIBC_2.0 __strcasecmp +00050a50 g DF .text 00000039 GLIBC_2.0 __vfscanf +000585a0 w DF .text 00000171 GLIBC_2.0 fgets +000d67d0 g DF .text 0000006e GLIBC_2.0 __iswctype +00111640 g DF .text 000000e5 (GLIBC_2.0) getnetent_r +000eabb0 g DF .text 000000ed GLIBC_2.1.2 getnetent_r +000c1540 g DF .text 0000001c GLIBC_2.2 posix_spawnattr_setflags +00110920 g DF .text 00000032 (GLIBC_2.3.3) sched_setaffinity +000b7750 g DF .text 00000144 GLIBC_2.3.4 sched_setaffinity +00060590 w DF .text 0000003c GLIBC_2.0 vscanf +00090fa0 g DF .text 0000012d GLIBC_2.0 getpwnam +000f3b60 g DF .text 0000006b GLIBC_2.3.3 inet6_option_append +0006b590 w DF .text 000002fd GLIBC_2.0 calloc +0002e530 g DF .text 00000045 (GLIBC_2.0) __strtouq_internal +00093500 w DF .text 00000008 GLIBC_2.0 getppid +001275a5 g DO .rodata 00000012 GLIBC_2.0 _nl_default_dirname +001067a0 g DF .text 00000060 GLIBC_2.1 getmsg +0005c7a0 g DF .text 00000038 GLIBC_2.2 _IO_unsave_wmarkers +00109230 g DF .text 00000353 GLIBC_PRIVATE _dl_addr +000cfaa0 w DF .text 00000070 GLIBC_2.0 msync +00065070 g DF .text 00000042 GLIBC_2.0 _IO_init +000297a0 g DF .text 0000000f GLIBC_2.1 __signbit +000c96c0 g DF .text 00000022 GLIBC_2.6 futimens +00056ce0 g DF .text 0000018f GLIBC_2.4 renameat +00082800 w DF .text 0000012d GLIBC_2.0 asctime_r +00023250 w DF .text 00000088 GLIBC_2.3 freelocale +0006ff50 g DF .text 000000af GLIBC_2.0 strlen +0002d770 w DF .text 00000086 GLIBC_2.0 initstate +000e7fe0 g DF .text 0000002b GLIBC_2.4 __wmemset_chk +0005a980 w DF .text 000000ac GLIBC_2.0 ungetc +00075ef0 g DF .text 00000021 GLIBC_2.0 wcschr +000238e0 g DF .text 00000048 GLIBC_2.0 isxdigit +000ed480 g DF .text 00000705 GLIBC_2.0 ether_line +00064310 g DF .text 00000047 GLIBC_2.1 _IO_file_init +0005cd20 g DF .text 000000e7 GLIBC_2.2 __wuflow +000c3d00 g DF .text 00000108 GLIBC_2.0 lockf +001433f4 g DO .data 00000004 (GLIBC_2.0) __ctype_b +0010e480 g DF .text 0000006f (GLIBC_2.0) _IO_file_init +000fed10 g DF .text 000000ae GLIBC_2.1 xdr_authdes_cred +000d67d0 w DF .text 0000006e GLIBC_2.0 iswctype +000d03a0 g DF .text 00000063 GLIBC_2.0 qecvt +00075a00 g DF .text 00000022 GLIBC_2.1.1 __memset_gg +0010d410 g DF .text 000000a2 (GLIBC_2.0) tmpfile +000f0d30 g DF .text 00000071 GLIBC_PRIVATE __internal_setnetgrent +00076b80 g DF .text 00000048 GLIBC_2.0 __mbrlen +00056020 g DF .text 000000a2 GLIBC_2.1 tmpfile +00103850 g DF .text 00000068 GLIBC_2.1 xdr_int8_t +000d69c0 g DF .text 0000005d GLIBC_2.1 __towupper_l +000d5660 w DF .text 000004ec GLIBC_2.2.3 sprofil +000d36f0 g DF .text 00000038 GLIBC_2.2.1 pivot_root +00072910 g DF .text 0000007a GLIBC_2.0 envz_entry +000f57a0 g DF .text 000000be GLIBC_2.0 xdr_authunix_parms +000fa0b0 g DF .text 0000009e GLIBC_2.0 xprt_unregister +001434c0 g DO .data 00000098 GLIBC_2.1 _IO_2_1_stdout_ +000228b0 w DF .text 000007fa GLIBC_2.3 newlocale +000ef700 g DF .text 000005f9 GLIBC_2.2 rexec_af +000d12d0 w DF .text 000002bf GLIBC_2.0 tsearch +000f1340 g DF .text 0000012d GLIBC_2.0 getaliasbyname +000f9f10 g DF .text 0000004e GLIBC_2.0 svcerr_progvers +00023e50 w DF .text 00000017 GLIBC_2.3 isspace_l +00072340 w DF .text 00000124 GLIBC_2.0 argz_insert +00075970 g DF .text 00000031 GLIBC_2.1.1 __memcpy_c +0002a130 w DF .text 0000008a GLIBC_2.0 gsignal +000f4450 g DF .text 00000048 GLIBC_2.5 inet6_opt_get_val +001113e0 g DF .text 00000063 (GLIBC_2.0) gethostbyname2_r +0002cff0 g DF .text 00000057 GLIBC_2.1.3 __cxa_atexit +000e9d20 g DF .text 000002ac GLIBC_2.1.2 gethostbyname2_r +000c11b0 g DF .text 00000035 GLIBC_2.2 posix_spawn_file_actions_init +000685d0 w DF .text 00000277 GLIBC_2.0 malloc_stats +000d3730 w DF .text 00000046 GLIBC_2.0 prctl +00061350 g DF .text 0000000f GLIBC_2.2 __fwriting +000cecf0 g DF .text 00000023 GLIBC_2.0 setlogmask +000758e0 g DF .text 00000086 GLIBC_2.1.1 __strsep_3c +000d72a0 g DF .text 0000005d GLIBC_2.1 __towctrans_l +000fc890 g DF .text 0000001a GLIBC_2.0 xdr_enum +001419b0 g DO .data.rel.ro 00000014 GLIBC_2.0 h_errlist +00061ed0 g DF .text 0000005b GLIBC_2.1 fread_unlocked +00074cd0 g DF .text 00000033 GLIBC_2.1.1 __memcpy_g +000d38e0 g DF .text 00000034 GLIBC_2.4 unshare +000caf70 w DF .text 00000044 GLIBC_2.0 brk +000d3d10 w DF .text 0000006c GLIBC_2.0 send +00023e10 w DF .text 00000017 GLIBC_2.3 isprint_l +00085b00 w DF .text 0000003a GLIBC_2.0 setitimer +000d68c0 g DF .text 0000005d GLIBC_2.1 __towctrans +001416a0 g DO .data.rel.ro 00000080 (GLIBC_2.0) sys_sigabbrev +00039dd0 w DF .text 00000066 GLIBC_2.0 setcontext +001416a0 g DO .data.rel.ro 00000100 (GLIBC_2.1) sys_sigabbrev +001416a0 g DO .data.rel.ro 00000104 GLIBC_2.3.3 sys_sigabbrev +000f3830 g DF .text 000000ad GLIBC_2.3.3 inet6_option_next +0002ad60 g DF .text 0000004d GLIBC_2.0 sigemptyset +000d7020 w DF .text 00000092 GLIBC_2.3 iswupper_l +00109e30 g DF .text 0000001f GLIBC_PRIVATE _dl_sym +000cefd0 g DF .text 00000085 GLIBC_2.0 openlog +000b9d90 g DF .text 0000077f GLIBC_2.0 getaddrinfo +00065650 g DF .text 0000006a GLIBC_2.0 _IO_init_marker +00061cf0 g DF .text 0000003d GLIBC_2.0 getchar_unlocked +000e3890 g DF .text 0000011b GLIBC_PRIVATE __res_maybe_init +000d24e0 g DF .text 000000cc GLIBC_2.0 dirname +00017b50 g DF .text 00000016 GLIBC_PRIVATE __gconv_get_alias_db +00070f70 g DF .text 00000056 GLIBC_2.0 memset +00022600 g DF .text 000001a2 GLIBC_2.2 localeconv +00022600 g DF .text 000001a2 (GLIBC_2.0) localeconv +000ca210 g DF .text 00000010 GLIBC_2.0 cfgetospeed +00074d30 g DF .text 0000002f GLIBC_2.1.1 __memset_ccn_by2 +000cb490 w DF .text 00000103 GLIBC_2.0 writev +00066370 g DF .text 000000e2 GLIBC_2.0 _IO_default_xsgetn +00023930 g DF .text 00000046 GLIBC_2.0 isalnum +00074d10 g DF .text 0000001d GLIBC_2.1.1 __memset_ccn_by4 +00106a10 w DF .text 00000051 GLIBC_2.0 setutent +000f9370 g DF .text 00000125 GLIBC_2.0 _seterr_reply +0005c500 g DF .text 00000079 GLIBC_2.2 _IO_switch_to_wget_mode +000f4820 g DF .text 00000047 GLIBC_2.5 inet6_rth_add +00061cc0 w DF .text 0000002a GLIBC_2.1 fgetc_unlocked +0005bfb0 g DF .text 0000003b GLIBC_2.2 swprintf +000d1ad0 g DF .text 0000001d GLIBC_2.0 warn +0005fd70 g DF .text 000000f2 GLIBC_2.0 getchar +00106d90 w DF .text 00000068 GLIBC_2.0 getutid +0001f6a0 g DF .text 00000016 GLIBC_PRIVATE __gconv_get_cache +000958d0 g DF .text 00001859 GLIBC_2.0 glob +00070910 g DF .text 00000192 GLIBC_2.0 strstr +000d46d0 g DF .text 00000049 GLIBC_2.3.3 semtimedop +0002ccf0 g DF .text 00000035 GLIBC_2.0 __secure_getenv +00077aa0 w DF .text 00000075 GLIBC_2.1 wcsnlen +00077ed0 g DF .text 0000003e GLIBC_2.0 __wcstof_internal +0006fa80 g DF .text 000000ae GLIBC_2.0 strcspn +000ca870 g DF .text 00000075 GLIBC_2.0 tcsendbreak +0008e4a0 g DF .text 0000000b GLIBC_2.0 telldir +00023a70 g DF .text 00000048 GLIBC_2.0 islower +000c9670 g DF .text 00000044 GLIBC_2.6 utimensat +000cfd80 g DF .text 000000c4 GLIBC_2.0 fcvt +000320d0 w DF .text 00000029 GLIBC_2.1 __strtof_l +00016520 g DF .text 0000001d GLIBC_2.0 __errno_location +000c5230 w DF .text 00000034 GLIBC_2.0 rmdir +0005a680 g DF .text 00000127 GLIBC_2.0 _IO_setbuffer +000658a0 g DF .text 00000008 GLIBC_2.2 _IO_iter_file +000d3a10 g DF .text 00000037 GLIBC_2.0 bind +0002f510 w DF .text 00000030 GLIBC_2.1 __strtoll_l +000ca390 g DF .text 00000243 GLIBC_2.0 tcsetattr +0005fb40 g DF .text 000000fa GLIBC_2.0 fseek +000fce60 g DF .text 0000003e GLIBC_2.0 xdr_float +000b5b70 g DF .text 000003bc GLIBC_2.0 confstr +000c40a0 w DF .text 00000034 GLIBC_2.0 chdir +000c3060 w DF .text 000000e5 GLIBC_2.1 open64 +000f46c0 g DF .text 00000019 GLIBC_2.5 inet6_rth_segments +000c3680 w DF .text 00000070 GLIBC_2.0 read +0006e930 g DF .text 00000094 GLIBC_2.0 muntrace +0005b200 g DF .text 000000f2 GLIBC_2.2 getwchar +00070ec0 g DF .text 0000001e GLIBC_2.0 memcmp +000f18f0 g DF .text 00000913 GLIBC_2.1 getnameinfo +000cb800 w DF .text 00000026 GLIBC_2.0 getpagesize +000fe3e0 g DF .text 000000b9 GLIBC_2.1 xdr_sizeof +00016690 g DF .text 000001fe (GLIBC_2.0) __moddi3 +00024470 w DF .text 00000022 GLIBC_2.0 dgettext +00074de0 g DF .text 00000018 GLIBC_2.1.1 __strlen_g +00058fa0 g DF .text 000001d1 GLIBC_2.0 _IO_ftell +0005bb30 g DF .text 000000f6 GLIBC_2.2 putwc +000f8180 g DF .text 000000e9 GLIBC_2.0 getrpcport +000658b0 g DF .text 0000004d GLIBC_2.2 _IO_list_lock +000465b0 g DF .text 00000034 GLIBC_2.0 _IO_sprintf +000e79e0 g DF .text 00000042 GLIBC_2.4 __pread_chk +000cfbe0 g DF .text 00000038 GLIBC_2.0 mlock +0008ffe0 g DF .text 000000b0 GLIBC_2.0 endgrent +0006fcf0 w DF .text 00000064 GLIBC_2.0 strndup +000d3490 g DF .text 00000046 GLIBC_2.0 init_module +000cf630 g DF .text 0000002b GLIBC_2.4 __syslog_chk +000826e0 g DF .text 0000011b GLIBC_2.0 asctime +000f5d10 g DF .text 00000084 GLIBC_2.0 clnt_sperrno +000fd990 g DF .text 0000016a GLIBC_2.0 xdrrec_skiprecord +00077400 w DF .text 00000362 GLIBC_2.0 mbsnrtowcs +00072e50 g DF .text 0000109f GLIBC_2.1 __strcoll_l +000e39f0 g DF .text 000000ae GLIBC_PRIVATE __gai_sigqueue +000238a0 g DF .text 00000037 GLIBC_2.0 toupper +000eb570 g DF .text 000000a8 GLIBC_2.0 setprotoent +000934c0 g DF .text 00000031 GLIBC_2.0 __getpid +0002d4d0 g DF .text 000000b9 GLIBC_2.0 mbtowc +0010a030 g DF .text 00000084 GCC_3.0 __register_frame_info_table_bases +00100b60 g DF .text 000000f9 GLIBC_2.1 netname2user +00023c80 g DF .text 00000028 GLIBC_2.0 _toupper +000d3b40 w DF .text 00000037 GLIBC_2.0 getsockopt +000fb520 g DF .text 00000245 GLIBC_2.0 svctcp_create +0005cf80 g DF .text 00000080 GLIBC_2.2 _IO_wsetb +000593f0 w DF .text 00000278 GLIBC_2.0 getdelim +0008f8c0 g DF .text 0000003f GLIBC_2.0 setgroups +000f5fe0 g DF .text 0000009a GLIBC_2.0 clnt_perrno +000d2aa0 g DF .text 00000046 GLIBC_2.3 setxattr +0010b930 g DF .text 00000096 GCC_3.0 _Unwind_Find_FDE +0002dfb0 w DF .text 000000a0 GLIBC_2.0 erand48_r +0002dde0 g DF .text 00000034 GLIBC_2.0 lrand48 +00064d10 g DF .text 0000007a GLIBC_2.0 _IO_doallocbuf +000c4650 g DF .text 0000026a GLIBC_2.0 ttyname +00144aa4 w DO .bss 00000004 GLIBC_2.0 ___brk_addr +001089b0 g DF .text 000000d5 GLIBC_2.1 grantpt +000df190 g DF .text 0000003c GLIBC_2.1 pthread_attr_init +00070fd0 g DF .text 00000044 GLIBC_2.1 mempcpy +000df150 g DF .text 0000003c (GLIBC_2.0) pthread_attr_init +000dfe90 g DF .text 00000155 GLIBC_2.0 herror +000b7340 g DF .text 00000049 GLIBC_2.0 getopt +00077c40 g DF .text 00000046 GLIBC_2.0 wcstoul +000e78d0 g DF .text 000000a8 GLIBC_2.4 __fgets_unlocked_chk +001081b0 w DF .text 000000f9 GLIBC_2.0 utmpname +00093b00 g DF .text 00000149 GLIBC_2.0 getlogin_r +00023db0 w DF .text 00000017 GLIBC_2.3 isdigit_l +00046dd0 w DF .text 00003e13 GLIBC_2.2 vfwprintf +000cce30 g DF .text 00000083 GLIBC_2.2 __setmntent +0005a370 g DF .text 00000100 GLIBC_2.0 _IO_seekoff +000ca7f0 g DF .text 00000032 GLIBC_2.0 tcflow +000d0cc0 g DF .text 000000d4 GLIBC_2.0 hcreate_r +00077d30 w DF .text 00000046 GLIBC_2.0 wcstouq +0005c480 g DF .text 0000007e GLIBC_2.2 _IO_wdoallocbuf +000efd00 g DF .text 0000003e GLIBC_2.0 rexec +000d4490 g DF .text 00000061 GLIBC_2.0 msgget +0005c0c0 g DF .text 00000034 GLIBC_2.2 fwscanf +00103770 g DF .text 00000069 GLIBC_2.1 xdr_int16_t +000e7bf0 g DF .text 00000034 GLIBC_2.4 __getcwd_chk +000c2d60 g DF .text 0000015a GLIBC_2.4 fchmodat +00072990 g DF .text 0000007a GLIBC_2.0 envz_strip +001461a8 g DO .bss 00000004 GLIBC_PRIVATE _dl_open_hook +000c3f80 w DF .text 00000038 GLIBC_2.0 dup2 +0005f550 g DF .text 00000085 GLIBC_2.0 clearerr +00144a94 w DO .bss 00000004 GLIBC_2.0 environ +000eea20 g DF .text 00000b7b GLIBC_2.2 rcmd_af +000f9c50 g DF .text 00000039 GLIBC_2.2.3 __rpc_thread_svc_max_pollfd +00092670 w DF .text 00000055 GLIBC_2.0 pause +0002c740 w DF .text 000000fe GLIBC_2.0 unsetenv +0002dd00 g DF .text 00000052 GLIBC_2.0 rand_r +0010c980 g DF .text 0000003d (GLIBC_2.0) atexit +00066d30 g DF .text 0000003f GLIBC_2.0 _IO_str_init_static +00029470 g DF .text 00000011 GLIBC_2.0 __finite +00083540 w DF .text 0000003c GLIBC_2.0 timelocal +000724d0 w DF .text 000000a5 GLIBC_2.0 argz_add_sep +000fdd10 g DF .text 0000006b GLIBC_2.0 xdr_pointer +00076a00 g DF .text 0000015e GLIBC_2.0 wctob +00029f60 w DF .text 00000064 GLIBC_2.0 longjmp +000c2180 g DF .text 0000003f (GLIBC_2.1) __fxstat64 +00086250 g DF .text 0000004a GLIBC_2.0 strptime +00062f30 g DF .text 000001e4 GLIBC_2.1 _IO_file_xsputn +000c2180 g DF .text 0000003f GLIBC_2.2 __fxstat64 +0010dac0 g DF .text 000002a5 (GLIBC_2.0) _IO_file_xsputn +000f6080 g DF .text 00000395 GLIBC_2.0 clnt_sperror +000e7140 g DF .text 000000f2 GLIBC_2.3.4 __vprintf_chk +000d3130 g DF .text 00000034 GLIBC_2.0 __adjtimex +000d3ea0 w DF .text 00000037 GLIBC_2.0 shutdown +00106910 g DF .text 00000022 GLIBC_2.1 fattach +00029f20 g DF .text 00000036 GLIBC_2.0 _setjmp +00060650 w DF .text 000000f7 GLIBC_2.0 vsnprintf +000c8e50 w DF .text 000000a4 GLIBC_2.0 poll +0006bcb0 w DF .text 0000018c GLIBC_2.0 malloc_get_state +00106800 g DF .text 00000046 GLIBC_2.1 getpmsg +00059690 g DF .text 00000047 GLIBC_2.0 _IO_getline +00108ea0 g DF .text 00000045 GLIBC_2.1 ptsname +00092b00 g DF .text 000000f5 GLIBC_2.0 fexecve +000afff0 w DF .text 0000013a GLIBC_2.0 re_comp +000f6420 g DF .text 00000044 GLIBC_2.0 clnt_perror +000d0340 g DF .text 0000005e GLIBC_2.0 qgcvt +000f9d90 g DF .text 00000042 GLIBC_2.0 svcerr_noproc +00077b50 g DF .text 00000045 GLIBC_2.0 __wcstol_internal +000656f0 g DF .text 00000011 GLIBC_2.0 _IO_marker_difference +000e7080 g DF .text 000000a8 GLIBC_2.3.4 __fprintf_chk +000713a0 g DF .text 00000069 GLIBC_2.1 __strncasecmp_l +0002ae10 g DF .text 0000006a GLIBC_2.0 sigaddset +00055d10 g DF .text 00000034 GLIBC_2.0 _IO_sscanf +000829c0 g DF .text 0000001b GLIBC_2.0 ctime +0010bc30 g DF .text 0000007b GLIBC_2.0 __frame_state_for +000d6660 w DF .text 000000cb GLIBC_2.0 iswupper +000f9ec0 g DF .text 00000042 GLIBC_2.0 svcerr_noprog +00065880 g DF .text 00000007 GLIBC_2.2 _IO_iter_end +000e7d50 g DF .text 0000003e GLIBC_2.4 __wmemcpy_chk +0008fb10 g DF .text 0000012d GLIBC_2.0 getgrnam +000d3130 w DF .text 00000034 GLIBC_2.0 adjtimex +000df890 g DF .text 0000003c GLIBC_2.0 pthread_mutex_unlock +000cb910 g DF .text 00000038 GLIBC_2.0 sethostname +00065980 g DF .text 00000070 GLIBC_2.0 _IO_setb +000c0fd0 w DF .text 000000ef GLIBC_2.1 __pread64 +0006dc80 g DF .text 000000f8 GLIBC_2.0 mcheck +00023ce0 g DF .text 00000015 GLIBC_2.1 __isblank_l +000fdd80 g DF .text 000000df GLIBC_2.0 xdr_reference +0010f0d0 g DF .text 0000005f (GLIBC_2.0) getpwuid_r +000916e0 g DF .text 000001ec GLIBC_2.1.2 getpwuid_r +000ec7d0 g DF .text 000000b0 GLIBC_2.0 endrpcent +00100ac0 g DF .text 00000091 GLIBC_2.1 netname2host +000e9230 g DF .text 00000282 GLIBC_2.0 inet_network +0002c610 g DF .text 00000091 GLIBC_2.0 putenv +0007ffb0 g DF .text 00000100 GLIBC_2.0 wcswidth +00023ef0 w DF .text 0000002c GLIBC_2.3 isctype +000f8440 g DF .text 0000013a GLIBC_2.0 pmap_set +00111170 g DF .text 0000003c (GLIBC_2.0) pthread_cond_broadcast +000c4410 w DF .text 00000053 GLIBC_2.0 fchown +000df570 g DF .text 0000003c GLIBC_2.3.2 pthread_cond_broadcast +00028ab0 g DF .text 00000172 GLIBC_2.0 catopen +000791a0 w DF .text 00000040 GLIBC_2.1 __wcstoull_l +00000000 g DO *ABS* 00000000 GLIBC_2.0 GLIBC_2.0 +000fc980 g DF .text 00000029 GLIBC_2.0 xdr_netobj +000d42b0 g DF .text 00000047 GLIBC_2.0 ftok +00064a40 g DF .text 000001b2 GLIBC_2.0 _IO_link_in +00000000 g DO *ABS* 00000000 GLIBC_2.1 GLIBC_2.1 +00044110 w DF .text 00000097 GLIBC_2.0 register_printf_function +00029e40 g DF .text 00000035 GLIBC_2.0 __sigsetjmp +00000000 g DO *ABS* 00000000 GLIBC_2.2 GLIBC_2.2 +000710f0 g DF .text 00000010 GLIBC_2.0 __ffs +00143840 g DO .data 00000004 GLIBC_2.0 stdout +000cde20 g DF .text 0000078d GLIBC_2.0 getttyent +000e8f90 g DF .text 0000005c GLIBC_2.0 inet_makeaddr +00000000 g DO *ABS* 00000000 GLIBC_2.3 GLIBC_2.3 +00144aa4 g DO .bss 00000004 GLIBC_2.0 __curbrk +00000000 g DO *ABS* 00000000 GLIBC_2.4 GLIBC_2.4 +00000000 g DO *ABS* 00000000 GLIBC_2.5 GLIBC_2.5 +000e94e0 g DF .text 00000169 GLIBC_2.0 gethostbyaddr +0010d310 g DF .text 0000008a (GLIBC_2.0) _IO_popen +00000000 g DO *ABS* 00000000 GLIBC_2.6 GLIBC_2.6 +000d2320 w DF .text 0000001a GLIBC_2.0 get_phys_pages +00059fc0 g DF .text 0000008d GLIBC_2.1 _IO_popen +000dd1e0 w DF .text 0000001d GLIBC_2.1 argp_help +0005f790 g DF .text 000000f6 GLIBC_2.0 fputc +00143400 g DO .data 00000004 (GLIBC_2.0) __ctype_toupper +001114c0 g DF .text 000000e5 (GLIBC_2.0) gethostent_r +00065740 g DF .text 00000079 GLIBC_2.0 _IO_seekmark +000ea340 g DF .text 000000ed GLIBC_2.1.2 gethostent_r +000d70c0 g DF .text 0000005d GLIBC_2.1 __towlower_l +00029690 w DF .text 00000072 GLIBC_2.0 frexp +00055ef0 g DF .text 0000012e GLIBC_2.0 psignal +000d1be0 g DF .text 00000023 GLIBC_2.0 verrx +00093c70 g DF .text 00000022 GLIBC_2.0 setlogin +000f05f0 g DF .text 000001b3 GLIBC_PRIVATE __internal_getnetgrent_r +00061040 g DF .text 000000f8 GLIBC_2.1 fseeko64 +00142a00 g DO .data.rel.ro 00000054 GLIBC_2.0 _IO_file_jumps +0010ed60 g DF .text 00000024 (GLIBC_2.1) versionsort64 +0008eed0 g DF .text 00000024 GLIBC_2.2 versionsort64 +000d2840 g DF .text 00000038 GLIBC_2.3 fremovexattr +000e7d00 g DF .text 00000042 GLIBC_2.4 __wcscpy_chk +0006ae90 g DF .text 000000fc GLIBC_2.0 __libc_valloc +00065130 g DF .text 0000004b GLIBC_2.0 _IO_sungetc +000d3bc0 w DF .text 0000006c GLIBC_2.0 recv +000f8050 g DF .text 0000002d GLIBC_2.0 _rpc_dtablesize +000d3230 g DF .text 0000003a GLIBC_2.0 create_module +000937d0 g DF .text 00000034 GLIBC_2.0 getsid +000cc170 g DF .text 0000003d GLIBC_2.0 mktemp +000e0160 g DF .text 00000172 GLIBC_2.0 inet_addr +000cab50 w DF .text 00000038 GLIBC_2.0 getrusage +00061dc0 g DF .text 000000ec GLIBC_2.0 _IO_peekc_locked +000656c0 g DF .text 00000028 GLIBC_2.0 _IO_remove_marker +000e8b50 g DF .text 00000050 GLIBC_2.4 __mbstowcs_chk +00143328 w DO .data 00000004 GLIBC_2.0 __malloc_hook +00023e50 g DF .text 00000017 GLIBC_2.1 __isspace_l +000c8740 g DF .text 0000070d GLIBC_2.0 fts_read +000d6d10 w DF .text 00000092 GLIBC_2.3 iswlower_l +000d6320 w DF .text 000000cb GLIBC_2.0 iswgraph +000cc6d0 g DF .text 000000d5 GLIBC_2.0 getfsspec +0002e490 g DF .text 00000045 GLIBC_2.0 __strtoll_internal +000cc250 g DF .text 00000051 GLIBC_2.0 ualarm +00058b90 w DF .text 00000149 GLIBC_2.0 fputs +000d3780 g DF .text 00000046 GLIBC_2.0 query_module +000c1250 g DF .text 00000028 GLIBC_2.2 posix_spawn_file_actions_destroy +00070bd0 w DF .text 00000104 GLIBC_2.0 strtok_r +000ea430 g DF .text 000000b0 GLIBC_2.0 endhostent +00023e10 g DF .text 00000017 GLIBC_2.1 __isprint_l +000df680 g DF .text 00000043 GLIBC_2.3.2 pthread_cond_wait +00111280 g DF .text 00000043 (GLIBC_2.0) pthread_cond_wait +00072260 g DF .text 00000088 GLIBC_2.0 argz_delete +0005c8c0 g DF .text 00000053 GLIBC_2.2 __woverflow +000fc420 g DF .text 00000065 GLIBC_2.0 xdr_u_long +000e7dc0 g DF .text 0000003e GLIBC_2.4 __wmempcpy_chk +00094a90 w DF .text 000001f5 GLIBC_2.0 fpathconf +00023d90 w DF .text 00000015 GLIBC_2.3 iscntrl_l +000a2230 w DF .text 000000a7 GLIBC_2.0 regerror +00070000 g DF .text 0000009d GLIBC_2.0 strnlen +0002de20 g DF .text 00000037 GLIBC_2.0 nrand48 +00111000 g DF .text 000000e5 (GLIBC_2.0) getspent_r +00076830 w DF .text 00000034 GLIBC_2.2 wmempcpy +000d7c00 g DF .text 000000e2 GLIBC_2.1.2 getspent_r +0014636c g DO .bss 00000004 GLIBC_2.1 argp_program_bug_address +000c3760 w DF .text 0000003a GLIBC_2.0 lseek +00093990 w DF .text 00000085 GLIBC_2.0 setresgid +0002abd0 w DF .text 00000038 GLIBC_2.0 sigaltstack +00075040 g DF .text 00000042 GLIBC_2.1.1 __strncmp_g +000fca80 g DF .text 00000123 GLIBC_2.0 xdr_string +00085c10 g DF .text 00000072 GLIBC_2.0 ftime +00071460 g DF .text 00000046 GLIBC_2.0 memcpy +0005b0c0 w DF .text 000000e7 GLIBC_2.2 getwc +00076b80 w DF .text 00000048 GLIBC_2.0 mbrlen +000ce660 g DF .text 00000052 GLIBC_2.0 endusershell +000c4250 g DF .text 00000089 GLIBC_2.0 getwd +000b7640 g DF .text 00000034 GLIBC_2.0 __sched_get_priority_min +00060df0 g DF .text 00000228 GLIBC_2.1 freopen64 +0010cd10 g DF .text 00000183 (GLIBC_2.0) fclose +00057d70 g DF .text 000001e8 GLIBC_2.1 fclose +00085c90 w DF .text 00000558 GLIBC_2.1 getdate_r +000c1d40 g DF .text 00000015 GLIBC_2.2 posix_spawnattr_setschedparam +0005c710 g DF .text 00000082 GLIBC_2.2 _IO_seekwmark +00065180 g DF .text 0000003c GLIBC_2.0 _IO_adjust_column +000c37e0 w DF .text 000000f7 GLIBC_2.0 euidaccess +0002a8d0 g DF .text 0000012e GLIBC_2.0 __sigpause +000c4e20 g DF .text 0000010c GLIBC_2.4 symlinkat +0002dce0 g DF .text 00000017 GLIBC_2.0 rand +000cbaa0 w DF .text 000001c0 GLIBC_2.0 pselect +000df950 g DF .text 00000043 GLIBC_2.0 pthread_setcanceltype +000ca700 g DF .text 00000032 GLIBC_2.0 tcsetpgrp +00075f20 g DF .text 0000002e GLIBC_2.0 wcscmp +000e67a0 g DF .text 000000a3 GLIBC_2.3.4 __memmove_chk +000c71c0 g DF .text 00000052 GLIBC_2.3.3 nftw64 +000cfa60 w DF .text 0000003a GLIBC_2.0 mprotect +00110d80 g DF .text 0000002b (GLIBC_2.1) nftw64 +000e7ba0 g DF .text 00000043 GLIBC_2.4 __getwd_chk +000759b0 g DF .text 00000045 GLIBC_2.1.1 __strcat_c +000e3ae0 g DF .text 00000355 GLIBC_PRIVATE __nss_lookup_function +000710f0 w DF .text 00000010 GLIBC_2.1 ffsl +000cc890 g DF .text 000000aa GLIBC_2.0 getmntent +00109f30 g DF .text 0000001d GLIBC_PRIVATE __libc_dl_error_tsd +000819d0 g DF .text 00000055 GLIBC_2.1 __wcscasecmp_l +0002e350 g DF .text 00000045 GLIBC_2.0 __strtol_internal +000e6e80 g DF .text 0000010c GLIBC_2.3.4 __vsnprintf_chk +00074f70 g DF .text 00000036 GLIBC_2.1.1 __strcat_g +0008b0d0 g DF .text 00002517 GLIBC_2.3 __wcsftime_l +00057c30 g DF .text 0000013c GLIBC_2.0 _IO_file_doallocate +0002e440 g DF .text 00000046 GLIBC_2.0 strtoul +000618a0 g DF .text 00000144 GLIBC_2.2 fmemopen +000df770 g DF .text 0000004a GLIBC_2.0 pthread_setschedparam +000d0c70 g DF .text 0000004f GLIBC_2.0 hdestroy_r +000d7cf0 g DF .text 000000b0 GLIBC_2.0 endspent +000cfca0 g DF .text 0000002c GLIBC_2.0 munlockall +0002aa20 w DF .text 0000001b GLIBC_2.0 sigpause +000fc490 g DF .text 0000001a GLIBC_2.0 xdr_u_int +000416a0 g DF .text 00000036 GLIBC_2.0 vprintf +00109040 g DF .text 00000032 GLIBC_2.1.1 getutmpx +00109040 g DF .text 00000032 GLIBC_2.1.1 getutmp +000d3e60 g DF .text 00000037 GLIBC_2.0 setsockopt +0006b890 g DF .text 00000180 GLIBC_2.0 malloc +00065ae0 g DF .text 0000010e GLIBC_2.0 _IO_default_xsputn +000cfb90 w DF .text 00000046 GLIBC_2.3.3 remap_file_pages +00029f60 w DF .text 00000064 GLIBC_2.0 siglongjmp +001465b8 g DO .bss 0000000c GLIBC_2.0 svcauthdes_stats +000ce990 g DF .text 00000240 GLIBC_2.0 getpass +0002e580 w DF .text 00000046 GLIBC_2.0 strtouq +00143404 g DO .data 00000004 (GLIBC_2.2) __ctype32_tolower +00100a90 g DF .text 00000022 GLIBC_2.0 xdr_keystatus +000d3920 g DF .text 00000034 GLIBC_2.0 uselib +0002b070 g DF .text 00000052 GLIBC_2.0 sigisemptyset +00075240 g DF .text 00000044 GLIBC_2.1.1 __strspn_g +0002a1c0 g DF .text 00000044 GLIBC_2.0 killpg +00037fe0 g DF .text 00000048 GLIBC_2.0 strfmon +000230e0 w DF .text 0000014b GLIBC_2.3 duplocale +0006f690 g DF .text 000001aa GLIBC_2.0 strcat +000fc400 g DF .text 0000001a GLIBC_2.0 xdr_int +000c2ca0 w DF .text 00000010 GLIBC_2.0 umask +00071260 w DF .text 00000062 GLIBC_2.0 strcasecmp +0008ef00 w DF .text 000000a2 GLIBC_2.4 fdopendir +00061160 g DF .text 00000179 GLIBC_2.1 ftello64 +000df3b0 g DF .text 00000043 GLIBC_2.0 pthread_attr_getschedpolicy +0010c9c0 g DF .text 0000003f (GLIBC_2.0) realpath +00037800 g DF .text 0000050e GLIBC_2.3 realpath +00085bd0 g DF .text 0000003e GLIBC_2.0 timegm +00060c10 g DF .text 000001bb GLIBC_2.1 ftello +000294b0 w DF .text 000001cf GLIBC_2.0 modf +00109870 g DF .text 0000008b GLIBC_PRIVATE __libc_dlclose +00068850 g DF .text 0000018a GLIBC_2.0 __libc_mallinfo +0002a130 g DF .text 0000008a GLIBC_2.0 raise +000cb750 g DF .text 000000a7 GLIBC_2.0 setegid +000670f0 w DF .text 00000034 GLIBC_2.0 malloc_usable_size +00023db0 g DF .text 00000017 GLIBC_2.1 __isdigit_l +000d2f50 g DF .text 00000013 GLIBC_2.0 setfsgid +0005c840 g DF .text 0000007e GLIBC_2.2 _IO_wdefault_doallocate +0004ae40 g DF .text 00005c04 GLIBC_2.0 _IO_vfscanf +00056a20 g DF .text 0000005c GLIBC_2.0 remove +000b7550 w DF .text 0000003a GLIBC_2.0 sched_setscheduler +0007dce0 w DF .text 00000039 GLIBC_2.3 wcstold_l +00093740 w DF .text 00000038 GLIBC_2.0 setpgid +000d3ac0 w DF .text 00000037 GLIBC_2.0 getpeername +000819d0 w DF .text 00000055 GLIBC_2.3 wcscasecmp_l +00074da0 g DF .text 00000038 GLIBC_2.1.1 __memset_gcn_by2 +000e7750 g DF .text 00000158 GLIBC_2.4 __fgets_chk +0006fb30 g DF .text 00000154 GLIBC_2.1.1 __strverscmp +000e39d0 g DF .text 00000019 GLIBC_2.2 __res_state +000f8580 g DF .text 00000115 GLIBC_2.0 pmap_getmaps +000298f0 w DF .text 0000006a GLIBC_2.0 frexpf +00141360 g DO .data.rel.ro 000001f8 (GLIBC_2.3) sys_errlist +0006fcf0 g DF .text 00000064 GLIBC_2.2 __strndup +00141360 g DO .data.rel.ro 000001ec (GLIBC_2.0) sys_errlist +00141360 g DO .data.rel.ro 00000210 GLIBC_2.4 sys_errlist +00074d60 g DF .text 00000035 GLIBC_2.1.1 __memset_gcn_by4 +00141360 g DO .data.rel.ro 000001f4 (GLIBC_2.1) sys_errlist +001462ec g DO .bss 00000004 GLIBC_2.0 mallwatch +00065450 w DF .text 000001fd GLIBC_2.2 _flushlbf +00076b60 w DF .text 00000019 GLIBC_2.0 mbsinit +000d69c0 w DF .text 0000005d GLIBC_2.3 towupper_l +000e6b90 g DF .text 000000bc GLIBC_2.3.4 __strncpy_chk +00093530 w DF .text 0000000c GLIBC_2.0 getgid +0010a520 g DF .text 00000043 GLIBC_2.0 __register_frame_table +000b0260 w DF .text 0000007c GLIBC_2.0 re_compile_pattern +000465f0 w DF .text 00000034 GLIBC_2.0 asprintf +00084630 w DF .text 00000079 GLIBC_2.0 tzset +000c0f10 g DF .text 000000bc GLIBC_PRIVATE __libc_pwrite +001430cc g DO .data 00000004 GLIBC_2.0 re_max_failures +000c21c0 g DF .text 0000003f (GLIBC_2.1) __lxstat64 +00143920 g DO .data 00000050 GLIBC_2.0 _IO_stderr_ +000c21c0 g DF .text 0000003f GLIBC_2.2 __lxstat64 +00029c80 w DF .text 00000071 GLIBC_2.0 frexpl +000fd820 g DF .text 00000170 GLIBC_2.0 xdrrec_eof +00023c00 g DF .text 00000048 GLIBC_2.0 isupper +000cf600 g DF .text 00000029 GLIBC_2.0 vsyslog +00016a10 g DF .text 0000019e (GLIBC_2.0) __umoddi3 +000fb9e0 g DF .text 000002ee GLIBC_2.0 svcudp_bufcreate +0006fe20 g DF .text 00000121 GLIBC_2.0 __strerror_r +00029800 w DF .text 00000011 GLIBC_2.0 finitef +000c28e0 w DF .text 0000012b GLIBC_2.1 fstatfs64 +00106e00 w DF .text 00000068 GLIBC_2.0 getutline +000e5970 g DF .text 0000008a GLIBC_PRIVATE __nss_services_lookup +00066100 g DF .text 00000138 GLIBC_2.0 __uflow +00070fd0 g DF .text 00000044 GLIBC_2.0 __mempcpy +0002ea30 w DF .text 00000030 GLIBC_2.3 strtol_l +000297e0 g DF .text 00000018 GLIBC_2.0 __isnanf +00022820 g DF .text 00000067 GLIBC_2.2 __nl_langinfo_l +000fa150 g DF .text 00000087 GLIBC_2.2 svc_getreq_poll +00029ab0 w DF .text 0000000e GLIBC_2.0 finitel +000c1d90 g DF .text 00000081 GLIBC_2.6 __sched_cpucount +000df2c0 g DF .text 00000043 GLIBC_2.0 pthread_attr_setinheritsched +00000000 g DO *ABS* 00000000 GLIBC_2.1.1 GLIBC_2.1.1 +00146510 g DO .bss 00000004 GLIBC_2.2 svc_pollfd +00000000 g DO *ABS* 00000000 GLIBC_2.1.2 GLIBC_2.1.2 +00060650 w DF .text 000000f7 GLIBC_2.0 __vsnprintf +000227b0 g DF .text 00000070 GLIBC_2.0 nl_langinfo +00000000 g DO *ABS* 00000000 GLIBC_2.1.3 GLIBC_2.1.3 +000cc460 g DF .text 00000089 GLIBC_2.0 setfsent +000cc940 w DF .text 00000092 GLIBC_2.0 hasmntopt +00029a60 g DF .text 00000046 GLIBC_2.0 __isnanl +0002b1b0 g DF .text 00000016 GLIBC_2.1 __libc_current_sigrtmax +0008e0b0 w DF .text 00000092 GLIBC_2.0 opendir +000ea770 g DF .text 000001e1 GLIBC_2.1.2 getnetbyaddr_r +001115d0 g DF .text 00000063 (GLIBC_2.0) getnetbyaddr_r +00076080 g DF .text 000000a1 GLIBC_2.0 wcsncat +00029680 w DF .text 0000000d GLIBC_2.1 scalbln +000ea270 g DF .text 000000ab GLIBC_2.0 gethostent +000e8ab0 g DF .text 00000042 GLIBC_2.4 __mbsrtowcs_chk +000585a0 g DF .text 00000171 GLIBC_2.0 _IO_fgets +00146500 g DO .bss 00000010 GLIBC_2.0 rpc_createerr +000710c0 w DF .text 0000002e GLIBC_2.0 bzero +000f8a60 g DF .text 00000685 GLIBC_2.0 clnt_broadcast +0002ad00 g DF .text 00000024 GLIBC_2.0 __sigaddset +000297b0 g DF .text 00000024 GLIBC_2.0 __isinff +0006e220 g DF .text 000000bd GLIBC_2.2 mcheck_check_all +00143164 g DO .data 00000004 GLIBC_2.1 argp_err_exit_status +000d73c0 g DF .text 0000012d GLIBC_2.0 getspnam +000df4f0 g DF .text 0000003c GLIBC_2.0 pthread_condattr_destroy +000c2730 g DF .text 00000038 GLIBC_2.2 __statfs +00144a94 g DO .bss 00000004 GLIBC_2.0 __environ +000e7e90 g DF .text 00000056 GLIBC_2.4 __wcscat_chk +000c2140 g DF .text 0000003f GLIBC_2.2 __xstat64 +00090850 w DF .text 0000024e GLIBC_2.0 fgetgrent_r +000c2140 g DF .text 0000003f (GLIBC_2.1) __xstat64 +000f37d0 g DF .text 00000011 GLIBC_2.3.3 inet6_option_space +000d2cd0 w DF .text 00000090 GLIBC_2.0 clone +000d6ef0 g DF .text 00000090 GLIBC_2.1 __iswpunct_l +0002c520 g DF .text 000000ef GLIBC_2.0 getenv +00023fa0 g DF .text 0000003c GLIBC_2.3 __ctype_b_loc +00029a00 g DF .text 00000055 GLIBC_2.0 __isinfl +001108e0 g DF .text 00000032 (GLIBC_2.3.3) sched_getaffinity +000b76c0 g DF .text 00000089 GLIBC_2.3.4 sched_getaffinity +0002aa00 w DF .text 0000001b GLIBC_2.2 __xpg_sigpause +000d5230 w DF .text 000001cd GLIBC_2.0 profil +00055d10 g DF .text 00000034 GLIBC_2.0 sscanf +0010a100 g DF .text 00000023 GLIBC_2.0 __deregister_frame_info +00093900 w DF .text 00000085 GLIBC_2.0 setresuid +0002e130 w DF .text 00000052 GLIBC_2.0 jrand48_r +000d3c30 w DF .text 0000006c GLIBC_2.0 recvfrom +00074e70 g DF .text 00000040 GLIBC_2.1.1 __mempcpy_by2 +000d5c40 g DF .text 00000019 GLIBC_2.0 __profile_frequency +00077770 w DF .text 0000032f GLIBC_2.0 wcsnrtombs +00074e30 g DF .text 00000033 GLIBC_2.1.1 __mempcpy_by4 +00146520 g DO .bss 00000080 GLIBC_2.0 svc_fdset +000ef660 g DF .text 0000009c GLIBC_2.0 ruserok +0006f550 g DF .text 0000002c GLIBC_2.0 _obstack_allocated_p +000c7250 g DF .text 0000003b GLIBC_2.0 fts_set +000fc690 g DF .text 0000001a GLIBC_2.1.1 xdr_u_longlong_t +000caec0 g DF .text 000000ab GLIBC_2.0 nice +000b0130 w DF .text 00000126 GLIBC_2.0 regcomp +00101c60 g DF .text 0000023b GLIBC_2.1 xdecrypt +000c2ff0 w DF .text 00000070 GLIBC_2.0 __open +00085ac0 w DF .text 00000038 GLIBC_2.0 getitimer +00023ac0 g DF .text 00000048 GLIBC_2.0 isgraph +00146344 g DO .bss 00000004 GLIBC_2.0 optarg +00028a30 g DF .text 00000080 GLIBC_2.0 catclose +000f7630 g DF .text 000002db GLIBC_2.0 clntudp_bufcreate +000eb950 g DF .text 0000013d GLIBC_2.0 getservbyname +00061330 g DF .text 0000001a GLIBC_2.2 __freading +0007ff30 g DF .text 0000007b GLIBC_2.0 wcwidth +00143844 g DO .data 00000004 GLIBC_2.0 stderr +000d4500 g DF .text 00000065 GLIBC_2.2 msgctl +00110eb0 g DF .text 00000062 (GLIBC_2.0) msgctl +000e8f60 g DF .text 0000002d GLIBC_2.0 inet_lnaof +0002ae80 g DF .text 0000006a GLIBC_2.0 sigdelset +00016110 w DF .text 00000016 GLIBC_2.1 gnu_get_libc_release +000cb070 w DF .text 0000003a GLIBC_2.0 ioctl +000c44d0 g DF .text 00000178 GLIBC_2.4 fchownat +000923c0 g DF .text 00000034 GLIBC_2.0 alarm +00143560 g DO .data 00000098 GLIBC_2.1 _IO_2_1_stderr_ +0005c580 g DF .text 00000049 GLIBC_2.2 _IO_sputbackwc +0006ad30 g DF .text 00000105 GLIBC_2.0 __libc_pvalloc +00037700 w DF .text 0000007d GLIBC_2.0 system +00100700 g DF .text 00000068 GLIBC_2.1 xdr_getcredres +000782f0 w DF .text 00000040 GLIBC_2.1 __wcstol_l +00055c30 w DF .text 00000039 GLIBC_2.2 vfwscanf +000d3520 g DF .text 0000002c GLIBC_2.4 inotify_init +000cdc60 g DF .text 00000044 GLIBC_2.0 chflags +000d1c60 g DF .text 00000026 GLIBC_2.0 err +000ebab0 g DF .text 000001fb GLIBC_2.1.2 getservbyname_r +00111990 g DF .text 00000066 (GLIBC_2.0) getservbyname_r +000fc810 g DF .text 00000079 GLIBC_2.0 xdr_bool +00071100 g DF .text 00000064 GLIBC_2.1 ffsll +00023ef0 g DF .text 0000002c GLIBC_2.3 __isctype +000caae0 g DF .text 0000006a GLIBC_2.1 setrlimit64 +00093670 w DF .text 00000088 GLIBC_2.0 group_member +000c1e60 g DF .text 00000056 GLIBC_2.6 sched_getcpu +000583a0 g DF .text 000001df GLIBC_2.2 _IO_fgetpos +00065a80 g DF .text 00000052 GLIBC_2.0 _IO_free_backup_area +000cfa20 w DF .text 00000038 GLIBC_2.0 munmap +0010d4c0 g DF .text 0000013b (GLIBC_2.0) _IO_fgetpos +000c14e0 g DF .text 00000037 GLIBC_2.2 posix_spawnattr_setsigdefault +0006f2e0 g DF .text 000000cc GLIBC_2.0 _obstack_begin_1 +000918d0 g DF .text 00000319 GLIBC_PRIVATE _nss_files_parse_pwent +000e88a0 g DF .text 0000003b GLIBC_2.4 __getgroups_chk +00091fe0 w DF .text 00000029 GLIBC_2.0 wait3 +00092010 w DF .text 00000040 GLIBC_2.0 wait4 +0006f3b0 g DF .text 00000195 GLIBC_2.0 _obstack_newchunk +00074ef0 g DF .text 00000034 GLIBC_2.1.1 __stpcpy_g +000d25b0 w DF .text 0000007c GLIBC_2.0 advance +000f42e0 g DF .text 0000002a GLIBC_2.5 inet6_opt_init +00143024 g DO .data 00000002 GLIBC_2.0 __fpu_control +00109ff0 g DF .text 0000003a GLIBC_2.0 __register_frame_info +000e9980 g DF .text 000001a5 GLIBC_2.0 gethostbyname +000c3760 w DF .text 0000003a GLIBC_2.0 __lseek +000e6e40 g DF .text 00000039 GLIBC_2.3.4 __snprintf_chk +001430d8 g DO .data 00000004 GLIBC_2.0 optopt +000c13b0 g DF .text 00000097 GLIBC_2.2 posix_spawn_file_actions_adddup2 +000782f0 w DF .text 00000040 GLIBC_2.3 wcstol_l +00146354 g DO .bss 00000004 GLIBC_2.0 error_message_count +00023d90 g DF .text 00000015 GLIBC_2.1 __iscntrl_l +000c2f00 g DF .text 000000ed GLIBC_2.4 mkdirat +000cb6a0 g DF .text 000000a7 GLIBC_2.0 seteuid +00075f50 g DF .text 0000002c GLIBC_2.0 wcscpy +0002e0f0 g DF .text 00000037 GLIBC_2.0 mrand48_r +000d2f30 g DF .text 00000013 GLIBC_2.0 setfsuid +000c3f40 w DF .text 00000034 GLIBC_2.0 dup +000e68a0 g DF .text 000000d9 GLIBC_2.3.4 __memset_chk +00143860 g DO .data 00000050 GLIBC_2.0 _IO_stdin_ +000df9a0 g DF .text 00000046 GLIBC_2.0 pthread_exit +000fc7d0 g DF .text 00000037 GLIBC_2.0 xdr_u_char +0005b310 g DF .text 0000003d GLIBC_2.2 getwchar_unlocked +00146340 g DO .bss 00000004 GLIBC_2.0 re_syntax_options +00108fb0 g DF .text 00000023 GLIBC_2.1 pututxline +000d4300 w DF .text 000000b6 GLIBC_2.0 msgsnd +00093a20 g DF .text 000000dd GLIBC_2.0 getlogin +000cdcb0 g DF .text 00000044 GLIBC_2.0 fchflags +0002b0d0 g DF .text 0000005f GLIBC_2.0 sigandset +000298e0 w DF .text 0000000d GLIBC_2.0 scalbnf +000b7680 w DF .text 00000038 GLIBC_2.0 sched_rr_get_interval +00064360 g DF .text 00000091 GLIBC_2.1 _IO_file_finish +000d2c50 g DF .text 00000075 GLIBC_2.2 __sysctl +000fcea0 g DF .text 000000a0 GLIBC_2.0 xdr_double +00093550 w DF .text 0000003f GLIBC_2.0 getgroups +00029c70 w DF .text 0000000d GLIBC_2.0 scalbnl +000cb210 w DF .text 00000103 GLIBC_2.0 readv +00093510 w DF .text 0000000c GLIBC_2.0 getuid +000ef5a0 g DF .text 0000003f GLIBC_2.0 rcmd +000c4f30 w DF .text 0000003a GLIBC_2.0 readlink +000d1790 g DF .text 0000008b GLIBC_2.0 lsearch +000ee6b0 g DF .text 000000ca GLIBC_2.2 iruserok_af +00055c90 g DF .text 00000024 GLIBC_2.0 fscanf +000eccc0 g DF .text 00000656 GLIBC_2.0 ether_aton_r +00041ac0 g DF .text 0000264a GLIBC_2.0 __printf_fp +000d3620 w DF .text 00000046 GLIBC_2.0 mremap +000d2ec0 w DF .text 0000006a GLIBC_2.3 readahead +00100c60 g DF .text 000001a0 GLIBC_2.1 host2netname +000d2a60 g DF .text 00000038 GLIBC_2.3 removexattr +0005c410 g DF .text 0000002d GLIBC_2.2 _IO_switch_to_wbackup_area +000f88f0 g DF .text 0000006f GLIBC_2.0 xdr_pmap +00000000 g DO *ABS* 00000000 GLIBC_2.2.1 GLIBC_2.2.1 +00074eb0 g DF .text 00000033 GLIBC_2.1.1 __mempcpy_byn +000eb310 g DF .text 000000a2 GLIBC_2.0 getprotoent +00092aa0 w DF .text 00000053 GLIBC_2.0 execve +0005e350 g DF .text 0000015f GLIBC_2.2 _IO_wfile_sync +00000000 g DO *ABS* 00000000 GLIBC_2.2.2 GLIBC_2.2.2 +000fc8b0 g DF .text 000000cd GLIBC_2.0 xdr_opaque +00093540 w DF .text 0000000c GLIBC_2.0 getegid +00000000 g DO *ABS* 00000000 GLIBC_2.2.3 GLIBC_2.2.3 +00000000 g DO *ABS* 00000000 GLIBC_2.2.4 GLIBC_2.2.4 +000caa10 g DF .text 0000003f GLIBC_2.2 setrlimit +000d30f0 g DF .text 00000038 (GLIBC_2.0) setrlimit +000b7480 g DF .text 00000047 GLIBC_2.0 getopt_long +00063c10 g DF .text 0000011b GLIBC_2.0 _IO_file_open +00000000 g DO *ABS* 00000000 GLIBC_2.2.6 GLIBC_2.2.6 +000835e0 w DF .text 00000038 GLIBC_2.0 settimeofday +0005fe80 g DF .text 000000cb GLIBC_2.0 open_memstream +000cb040 g DF .text 00000022 GLIBC_2.0 sstk +00109e50 g DF .text 000000d7 GLIBC_PRIVATE _dl_vsym +000613b0 g DF .text 00000076 GLIBC_2.2 __fpurge +00108fe0 g DF .text 00000023 GLIBC_2.1 utmpxname +00093700 w DF .text 00000034 GLIBC_2.0 getpgid +0002b1b0 g DF .text 00000016 GLIBC_PRIVATE __libc_current_sigrtmax_private +00037150 w DF .text 00000029 GLIBC_2.3 strtold_l +000e6aa0 g DF .text 000000e7 GLIBC_2.3.4 __strncat_chk +000c1d60 g DF .text 00000024 GLIBC_2.2 posix_madvise +000c1560 g DF .text 00000012 GLIBC_2.2 posix_spawnattr_getpgroup +000d1af0 g DF .text 000000e3 GLIBC_2.0 vwarnx +000753b0 g DF .text 000000d3 GLIBC_2.1.1 __mempcpy_small +0010d620 g DF .text 00000184 (GLIBC_2.1) fgetpos64 +0005abb0 g DF .text 000001af GLIBC_2.2 fgetpos64 +0006f840 w DF .text 00000167 GLIBC_2.0 index +001464e4 g DO .bss 00000004 GLIBC_2.0 rexecoptions +000df1d0 g DF .text 00000043 GLIBC_2.0 pthread_attr_getdetachstate +0005daf0 g DF .text 0000019f GLIBC_2.2 _IO_wfile_xsputn +00092f20 g DF .text 00000441 GLIBC_2.0 execvp +000cfb50 g DF .text 0000003a GLIBC_2.2 mincore +00068850 w DF .text 0000018a GLIBC_2.0 mallinfo +000689e0 w DF .text 00000077 GLIBC_2.0 malloc_trim +000665f0 g DF .text 00000042 GLIBC_2.0 _IO_str_underflow +000f2710 g DF .text 00000023 GLIBC_2.3 freeifaddrs +000fb8b0 g DF .text 00000126 GLIBC_2.0 svcudp_enablecache +000230e0 g DF .text 0000014b GLIBC_2.1 __duplocale +00081a30 g DF .text 00000073 GLIBC_2.1 __wcsncasecmp_l +000c4c10 g DF .text 000001c1 GLIBC_2.4 linkat +00065d90 g DF .text 00000129 GLIBC_2.0 _IO_default_pbackfail +000f4690 g DF .text 00000024 GLIBC_2.5 inet6_rth_space +0005c7e0 g DF .text 00000058 GLIBC_2.2 _IO_free_wbackup_area +000df6d0 g DF .text 0000004a GLIBC_2.3.2 pthread_cond_timedwait +001112d0 g DF .text 0000004a (GLIBC_2.0) pthread_cond_timedwait +000914f0 g DF .text 000001ec GLIBC_2.1.2 getpwnam_r +0010d7d0 g DF .text 00000110 (GLIBC_2.0) _IO_fsetpos +0010f070 g DF .text 0000005f (GLIBC_2.0) getpwnam_r +00058e40 g DF .text 0000013e GLIBC_2.2 _IO_fsetpos +0014332c w DO .data 00000004 GLIBC_2.0 __realloc_hook +0005f8b0 g DF .text 0000026b GLIBC_2.0 freopen +000e6520 w DF .text 00000217 GLIBC_2.1 backtrace_symbols_fd +000712d0 w DF .text 0000007a GLIBC_2.0 strncasecmp +000c2200 g DF .text 00000096 GLIBC_2.0 __xmknod +0005dc90 g DF .text 000006b2 GLIBC_2.2 _IO_wfile_seekoff +000e7a80 g DF .text 00000032 GLIBC_2.4 __recv_chk +000cc390 g DF .text 0000008b GLIBC_2.0 ptrace +000f4710 g DF .text 00000106 GLIBC_2.5 inet6_rth_reverse +000cdd30 g DF .text 0000001a GLIBC_2.0 remque +000f2b40 g DF .text 00000c87 GLIBC_2.3 getifaddrs +000d70c0 w DF .text 0000005d GLIBC_2.3 towlower_l +0005bc50 g DF .text 00000038 GLIBC_2.2 putwc_unlocked +00045bc0 g DF .text 0000002b GLIBC_2.1 printf_size_info +00000020 g D .tbss 00000004 GLIBC_PRIVATE h_errno +00029680 w DF .text 0000000d GLIBC_2.0 scalbn +0007dce0 w DF .text 00000039 GLIBC_2.1 __wcstold_l +000f22d0 g DF .text 000000a4 GLIBC_2.1 if_nametoindex +000298e0 w DF .text 0000000d GLIBC_2.1 scalblnf +00077ce0 g DF .text 00000045 GLIBC_2.0 __wcstoll_internal +00146480 g DO .bss 00000030 GLIBC_2.2 _res_hconf +000c4000 w DF .text 0000006c GLIBC_2.0 creat +000c2020 g DF .text 0000008e GLIBC_2.0 __fxstat +0010e860 g DF .text 000000d8 (GLIBC_2.0) _IO_file_close_it +00064400 g DF .text 0000019d GLIBC_2.1 _IO_file_close_it +00029c70 w DF .text 0000000d GLIBC_2.1 scalblnl +000631f0 g DF .text 00000016 GLIBC_2.0 _IO_file_close +000700a0 g DF .text 000000aa GLIBC_2.0 strncat +001002d0 g DF .text 00000081 GLIBC_2.1 key_decryptsession_pk +0014316c g DO .data 00000004 GLIBC_2.0 __check_rhosts_file +000c9630 g DF .text 00000040 GLIBC_2.3 sendfile64 +000d3d80 w DF .text 0000006c GLIBC_2.0 sendmsg +000e6520 g DF .text 00000217 GLIBC_2.1 __backtrace_symbols_fd +00039cf0 g DF .text 00000029 GLIBC_2.1 wcstoimax +0002e580 g DF .text 00000046 GLIBC_2.0 strtoull +00071970 g DF .text 00000090 GLIBC_2.1.1 __strsep_g +0005cb30 g DF .text 000000e7 GLIBC_2.2 __wunderflow +00016bb0 g DF .text 00000133 (GLIBC_2.0) __udivdi3 +00057d70 g DF .text 000001e8 GLIBC_2.1 _IO_fclose +0010cd10 g DF .text 00000183 (GLIBC_2.0) _IO_fclose +00061380 g DF .text 00000013 GLIBC_2.2 __fwritable +000e7c30 g DF .text 00000038 GLIBC_2.4 __realpath_chk +0002afc0 g DF .text 000000a2 GLIBC_2.0 __sysv_signal +000cab90 w DF .text 000000cb GLIBC_2.0 ulimit +000609d0 w DF .text 00000034 GLIBC_2.0 obstack_printf +0005e870 g DF .text 00000475 GLIBC_2.2 _IO_wfile_underflow +0005b050 g DF .text 0000006d GLIBC_2.2 fputwc_unlocked +000c1c40 g DF .text 00000039 GLIBC_2.2 posix_spawnattr_getsigmask +000e5bb0 g DF .text 0000008c GLIBC_2.0 __nss_passwd_lookup +0002dd60 g DF .text 00000034 GLIBC_2.0 drand48 +000fc380 g DF .text 0000001f GLIBC_2.0 xdr_free +0005f750 g DF .text 00000034 GLIBC_2.0 fileno +0010d3e0 g DF .text 00000023 (GLIBC_2.0) pclose +000710c0 g DF .text 0000002e GLIBC_2.0 __bzero +000ea4e0 g DF .text 000000a8 GLIBC_2.0 sethostent +00023e90 g DF .text 00000017 GLIBC_2.1 __isxdigit_l +00060040 g DF .text 00000023 GLIBC_2.1 pclose +000f46e0 g DF .text 00000026 GLIBC_2.5 inet6_rth_getaddr +000b5970 w DF .text 00000039 GLIBC_2.0 re_search +00093740 g DF .text 00000038 GLIBC_2.0 __setpgid +000cb870 w DF .text 00000098 GLIBC_2.0 gethostname +00024470 g DF .text 00000022 GLIBC_2.0 __dgettext +000df0c0 g DF .text 00000046 GLIBC_2.0 pthread_equal +000d8400 w DF .text 0000008f GLIBC_2.0 sgetspent_r +000c2bf0 w DF .text 000000a3 GLIBC_2.1 fstatvfs64 +000cc2b0 g DF .text 0000003e GLIBC_2.0 usleep +000df800 g DF .text 00000043 GLIBC_2.0 pthread_mutex_init +000d2cd0 g DF .text 00000090 GLIBC_2.0 __clone +000cd7c0 w DF .text 0000003f GLIBC_2.0 utimes +00143408 g DO .data 00000004 (GLIBC_2.2) __ctype32_toupper +0002b690 g DF .text 000001fd GLIBC_2.1 sigset +000d4210 g DF .text 0000003e GLIBC_2.0 __cmsg_nxthdr +0006f580 g DF .text 00000021 GLIBC_2.0 _obstack_memory_used +000d2180 g DF .text 00000086 GLIBC_2.0 ustat +000c43b0 g DF .text 00000053 GLIBC_2.1 chown +00110960 g DF .text 00000031 (GLIBC_2.0) chown +0006cff0 g DF .text 00000487 GLIBC_2.0 __libc_realloc +000d3810 g DF .text 0000004c GLIBC_2.5 splice +000c1590 g DF .text 00000050 GLIBC_2.2 posix_spawn +000d6b50 g DF .text 00000090 GLIBC_2.1 __iswblank_l +0005c5d0 g DF .text 0000004b GLIBC_2.2 _IO_sungetwc +00121960 g DO .rodata 00000024 GLIBC_PRIVATE _itoa_lower_digits +000c4120 w DF .text 00000130 GLIBC_2.0 getcwd +000fccb0 g DF .text 0000004f GLIBC_2.0 xdr_vector +000593f0 w DF .text 00000278 GLIBC_2.0 __getdelim +00039eb0 w DF .text 000000a4 GLIBC_2.1 swapcontext +000f9d10 g DF .text 00000030 GLIBC_2.2.3 __rpc_thread_svc_fdset +00143340 g DO .data 00000004 GLIBC_2.0 __progname_full +000d2950 g DF .text 00000040 GLIBC_2.3 lgetxattr +001038c0 g DF .text 00000068 GLIBC_2.1 xdr_uint8_t +00029800 g DF .text 00000011 GLIBC_2.0 __finitef +00146358 g DO .bss 00000004 GLIBC_2.0 error_one_per_line +00080fb0 w DF .text 00000955 GLIBC_2.3 wcsxfrm_l +000fe9e0 g DF .text 0000022e GLIBC_2.1 authdes_pk_create +000f2230 g DF .text 0000009b GLIBC_2.1 if_indextoname +000d3960 g DF .text 00000040 GLIBC_2.5 vmsplice +0005c370 g DF .text 00000024 GLIBC_2.2 swscanf +000f9de0 g DF .text 00000042 GLIBC_2.0 svcerr_decode +00059270 w DF .text 0000015f GLIBC_2.0 fwrite +00109010 g DF .text 0000002a GLIBC_2.1 updwtmpx +00016130 w DF .text 00000016 GLIBC_2.1 gnu_get_libc_version +00029ab0 g DF .text 0000000e GLIBC_2.0 __finitel +000ffcc0 g DF .text 00000089 GLIBC_2.1 des_setparity +00029820 w DF .text 0000001e GLIBC_2.0 copysignf +000e6740 g DF .text 00000005 GLIBC_2.2 __cyg_profile_func_enter +00058d00 w DF .text 00000118 GLIBC_2.0 fread +000f4000 g DF .text 00000184 GLIBC_2.3.4 getsourcefilter +000297e0 w DF .text 00000018 GLIBC_2.0 isnanf +000d04e0 g DF .text 0000032a GLIBC_2.0 qfcvt_r +0002e050 g DF .text 00000037 GLIBC_2.0 lrand48_r +000cfe50 g DF .text 000002e1 GLIBC_2.0 fcvt_r +000835a0 w DF .text 00000038 GLIBC_2.0 gettimeofday +000d6a20 w DF .text 00000090 GLIBC_2.3 iswalnum_l +00017100 g DF .text 0000003a GLIBC_2.1 iconv_close +00083620 w DF .text 0000011c GLIBC_2.0 adjtime +000f07b0 w DF .text 00000095 GLIBC_2.0 getnetgrent_r +0002a360 w DF .text 00000157 GLIBC_2.0 sigaction +0005c6d0 g DF .text 0000003d GLIBC_2.2 _IO_wmarker_delta +00056a80 g DF .text 00000038 GLIBC_2.0 rename +00029ac0 w DF .text 0000001e GLIBC_2.0 copysignl +0002df10 g DF .text 00000039 GLIBC_2.0 seed48 +000cdd50 g DF .text 00000042 GLIBC_2.0 endttyent +00029a60 w DF .text 00000046 GLIBC_2.0 isnanl +000659f0 g DF .text 0000008d GLIBC_2.0 _IO_default_finish +001010f0 g DF .text 00000227 GLIBC_2.1 rtime +000cc7b0 g DF .text 000000a9 GLIBC_2.0 getfsent +000d32f0 g DF .text 00000040 GLIBC_2.3.2 epoll_ctl +000d6920 g DF .text 00000092 GLIBC_2.1 __iswxdigit_l +00058b90 g DF .text 00000149 GLIBC_2.0 _IO_fputs +00000000 g DO *ABS* 00000000 GLIBC_2.3.2 GLIBC_2.3.2 +000cfb10 g DF .text 0000003a GLIBC_2.0 madvise +00090580 g DF .text 000002c2 GLIBC_PRIVATE _nss_files_parse_grent +00100f00 g DF .text 00000063 GLIBC_2.1 getnetname +00101bf0 g DF .text 00000061 GLIBC_2.1 passwd2des +00000000 g DO *ABS* 00000000 GLIBC_2.3.3 GLIBC_2.3.3 +001095e0 g DF .text 00000033 GLIBC_2.1 _dl_mcount_wrapper +0002ad30 g DF .text 00000024 GLIBC_2.0 __sigdelset +00000000 g DO *ABS* 00000000 GLIBC_2.3.4 GLIBC_2.3.4 +0008e510 g DF .text 000001e4 GLIBC_2.0 scandir +00075520 g DF .text 000000b2 GLIBC_2.1.1 __stpcpy_small +000ead50 g DF .text 000000a8 GLIBC_2.0 setnetent +000cc1e0 g DF .text 0000002b GLIBC_2.2 mkstemp64 +0002b190 g DF .text 00000016 GLIBC_PRIVATE __libc_current_sigrtmin_private +000d2fa0 g DF .text 00000019 GLIBC_2.3.3 gnu_dev_minor +000297b0 w DF .text 00000024 GLIBC_2.0 isinff +000938a0 w DF .text 00000053 GLIBC_2.0 getresgid +00029f60 g DF .text 00000064 GLIBC_PRIVATE __libc_siglongjmp +000c2730 w DF .text 00000038 GLIBC_2.0 statfs +00093520 w DF .text 0000000c GLIBC_2.0 geteuid +000b74d0 w DF .text 00000038 GLIBC_2.0 sched_setparam +000e6750 g DF .text 00000050 GLIBC_2.3.4 __memcpy_chk +000ed320 g DF .text 00000153 GLIBC_2.0 ether_hostton +000d6ab0 w DF .text 00000092 GLIBC_2.3 iswalpha_l +000d37d0 g DF .text 00000040 GLIBC_2.0 quotactl +0002d800 w DF .text 00000060 GLIBC_2.0 srandom +000d6f80 g DF .text 00000092 GLIBC_2.1 __iswspace_l +000ecb10 g DF .text 0000017d GLIBC_2.1.2 getrpcbynumber_r +00111cf0 g DF .text 0000005f (GLIBC_2.0) getrpcbynumber_r +00029a00 w DF .text 00000055 GLIBC_2.0 isinfl +0002b890 g DF .text 00000023 GLIBC_2.0 atof +000ce5b0 g DF .text 000000a7 GLIBC_2.0 getttynam +0009f160 w DF .text 0000004b GLIBC_2.0 re_set_registers +00028c30 g DF .text 000007d2 GLIBC_PRIVATE __open_catalog +0002aef0 g DF .text 0000006e GLIBC_2.0 sigismember +000df360 g DF .text 00000043 GLIBC_2.0 pthread_attr_setschedparam +00071020 g DF .text 0000009f GLIBC_2.0 bcopy +000602f0 g DF .text 0000003b GLIBC_2.0 setlinebuf +000e6c50 g DF .text 000000cd GLIBC_2.4 __stpncpy_chk +00076430 w DF .text 0000011e GLIBC_2.1 wcswcs +0002b8c0 g DF .text 0000002b GLIBC_2.0 atoi +000d6e50 g DF .text 00000092 GLIBC_2.1 __iswprint_l +00075800 g DF .text 0000005e GLIBC_2.1.1 __strtok_r_1c +000fc4b0 g DF .text 000000cb GLIBC_2.1.1 xdr_hyper +0008f010 g DF .text 00000074 GLIBC_2.2 getdirentries64 +00085b40 g DF .text 00000034 GLIBC_2.0 stime +00027430 w DF .text 0000011d GLIBC_2.0 textdomain +000b7600 w DF .text 00000034 GLIBC_2.0 sched_get_priority_max +0002b8f0 g DF .text 0000002b GLIBC_2.0 atol +000ca830 g DF .text 00000032 GLIBC_2.0 tcflush +000c1ca0 g DF .text 00000039 GLIBC_2.2 posix_spawnattr_getschedparam +000f4390 g DF .text 000000b4 GLIBC_2.5 inet6_opt_find +00077d30 g DF .text 00000046 GLIBC_2.1 wcstoull +000edc30 g DF .text 00000155 GLIBC_2.0 ether_ntohost +00141580 g DO .data.rel.ro 00000100 (GLIBC_2.1) sys_siglist +00141580 g DO .data.rel.ro 00000080 (GLIBC_2.0) sys_siglist +000cfc60 g DF .text 00000034 GLIBC_2.0 mlockall +00141580 g DO .data.rel.ro 00000104 GLIBC_2.3.3 sys_siglist +000cc340 g DF .text 00000044 GLIBC_2.0 stty +000d5d00 w DF .text 000000cb GLIBC_2.0 iswxdigit +000c7220 g DF .text 00000026 GLIBC_2.1 ftw64 +00091f70 w DF .text 00000070 GLIBC_2.0 waitpid +000e8a10 g DF .text 00000049 GLIBC_2.4 __mbsnrtowcs_chk +00061430 g DF .text 0000002a GLIBC_2.2 __fpending +000c3610 w DF .text 00000065 GLIBC_2.0 close +00108a90 g DF .text 0000006b GLIBC_2.1 unlockpt +000fc9b0 g DF .text 00000090 GLIBC_2.0 xdr_union +000e6100 w DF .text 00000160 GLIBC_2.1 backtrace +0006fb30 w DF .text 00000154 GLIBC_2.1 strverscmp +000c1c80 g DF .text 00000015 GLIBC_2.2 posix_spawnattr_getschedpolicy +00028980 g DF .text 000000ab GLIBC_2.0 catgets +0002d310 g DF .text 00000095 GLIBC_2.0 lldiv +00106b50 w DF .text 0000005e GLIBC_2.0 endutent +000df900 w DF .text 00000043 GLIBC_2.0 pthread_setcancelstate +00056180 g DF .text 000000b8 GLIBC_2.0 tmpnam +000e1020 g DF .text 000000cf GLIBC_2.0 inet_nsap_ntoa +00075d80 g DF .text 00000126 GLIBC_2.6 strerror_l +000c2ff0 w DF .text 00000070 GLIBC_2.0 open +000d0ea0 w DF .text 00000022 GLIBC_2.0 twalk +0002dee0 g DF .text 0000002d GLIBC_2.0 srand48 +00023ed0 w DF .text 00000011 GLIBC_2.3 toupper_l +00102d10 g DF .text 00000012 GLIBC_2.1 svcunixfd_create +000d2ba0 g DF .text 00000034 GLIBC_2.0 iopl +000c6200 g DF .text 00000026 GLIBC_2.0 ftw +00077d80 g DF .text 00000045 GLIBC_2.0 __wcstoull_internal +000d7510 g DF .text 00000141 GLIBC_2.0 sgetspent +0006fe20 w DF .text 00000121 GLIBC_2.0 strerror_r +00065860 g DF .text 00000016 GLIBC_2.2 _IO_iter_begin +000df720 g DF .text 0000004a GLIBC_2.0 pthread_getschedparam +000258d0 w DF .text 00000040 GLIBC_2.2 dngettext +000f9cd0 g DF .text 00000039 GLIBC_2.2.3 __rpc_thread_createerr +000cc0b0 g DF .text 00000034 GLIBC_2.0 vhangup +00082ab0 g DF .text 00000035 GLIBC_2.0 localtime +00100650 g DF .text 0000008f GLIBC_2.1 key_secretkey_is_set +00082a20 g DF .text 0000000d GLIBC_2.0 difftime +000cc0f0 w DF .text 00000038 GLIBC_2.0 swapon +00108f30 g DF .text 00000017 GLIBC_2.1 endutxent +000d2d90 w DF .text 000000a5 GLIBC_2.1 lseek64 +000e8a60 g DF .text 00000049 GLIBC_2.4 __wcsnrtombs_chk +00061c70 g DF .text 00000010 GLIBC_2.0 ferror_unlocked +000d2e40 w DF .text 00000034 GLIBC_2.0 umount +00092a84 w DF .text 00000013 GLIBC_2.1.1 _Exit +000d31f0 g DF .text 00000038 GLIBC_2.1 capset +0006f840 g DF .text 00000167 GLIBC_2.0 strchr +000d7220 w DF .text 00000073 GLIBC_2.3 wctrans_l +000d2800 g DF .text 0000003a GLIBC_2.3 flistxattr +000f5da0 g DF .text 000001fd GLIBC_2.0 clnt_spcreateerror +0006f610 g DF .text 00000078 GLIBC_2.0 obstack_free +000df450 g DF .text 00000043 GLIBC_2.0 pthread_attr_getscope +000f1280 g DF .text 000000a2 GLIBC_2.0 getaliasent +00141360 g DO .data.rel.ro 000001f8 (GLIBC_2.3) _sys_errlist +00141360 g DO .data.rel.ro 00000210 GLIBC_2.4 _sys_errlist +00141360 g DO .data.rel.ro 000001f4 (GLIBC_2.1) _sys_errlist +00141360 g DO .data.rel.ro 000001ec (GLIBC_2.0) _sys_errlist +0002b620 g DF .text 00000070 GLIBC_2.1 sigignore +0002af60 w DF .text 00000022 GLIBC_2.0 sigreturn +000ee830 g DF .text 000001c7 GLIBC_2.2 rresvport_af +000d4ef0 g DF .text 000001a0 GLIBC_2.0 __monstartup +000d5dd0 w DF .text 000000a4 GLIBC_2.0 iswdigit +000fa3a0 g DF .text 00000037 GLIBC_2.0 svcerr_weakauth +00060ad0 w DF .text 00000017 GLIBC_2.0 fcloseall +000e81a0 g DF .text 0000010b GLIBC_2.4 __wprintf_chk +000d6180 w DF .text 000000c9 GLIBC_2.0 iswcntrl +000cce00 w DF .text 0000002c GLIBC_2.0 endmntent +00056f40 w DF .text 0000002f GLIBC_2.0 funlockfile +001447c4 g DO .bss 00000004 GLIBC_2.0 __timezone +00046500 g DF .text 00000024 GLIBC_2.0 fprintf +000d3b00 g DF .text 00000037 GLIBC_2.0 getsockname +000c1ec0 g DF .text 00000038 GLIBC_2.0 utime +0010eb40 g DF .text 000001e4 (GLIBC_2.1) scandir64 +0008ecb0 g DF .text 000001e4 GLIBC_2.2 scandir64 +000d0a50 g DF .text 00000045 GLIBC_2.0 hsearch +000dd100 w DF .text 000000dd GLIBC_2.1 argp_error +00146234 g DO .bss 00000004 GLIBC_2.0 _nl_domain_bindings +00075760 g DF .text 00000041 GLIBC_2.1.1 __strpbrk_c2 +0002d1f0 g DF .text 00000011 GLIBC_2.0 abs +000d3df0 w DF .text 0000006c GLIBC_2.0 sendto +000757b0 g DF .text 0000004c GLIBC_2.1.1 __strpbrk_c3 +000cc9e0 w DF .text 0000041f GLIBC_2.0 addmntent +000d6ef0 w DF .text 00000090 GLIBC_2.3 iswpunct_l +00037150 w DF .text 00000029 GLIBC_2.1 __strtold_l +001082d0 w DF .text 0000010f GLIBC_2.0 updwtmp +000e46e0 g DF .text 00000372 GLIBC_2.0 __nss_database_lookup +0005c3a0 g DF .text 00000033 GLIBC_2.2 _IO_least_wmarker +00070300 w DF .text 000001b9 GLIBC_2.0 rindex +00092a30 w DF .text 00000051 GLIBC_2.0 vfork +0010ed90 g DF .text 000000e5 (GLIBC_2.0) getgrent_r +000fa1e0 g DF .text 000000fe GLIBC_2.0 xprt_register +000393e0 g DF .text 000000f0 GLIBC_2.1 addseverity +0008fef0 g DF .text 000000e2 GLIBC_2.1.2 getgrent_r +000e7250 g DF .text 000000bc GLIBC_2.3.4 __vfprintf_chk +00083540 g DF .text 0000003c GLIBC_2.0 mktime +00100550 g DF .text 00000100 GLIBC_2.1 key_gendes +0002d3b0 g DF .text 000000c5 GLIBC_2.0 mblen +000d16e0 w DF .text 0000005c GLIBC_2.1 tdestroy +000d2c50 w DF .text 00000075 GLIBC_2.0 sysctl +000f5a20 g DF .text 000002e2 GLIBC_2.0 clnt_create +0008e700 g DF .text 00000024 GLIBC_2.0 alphasort +001447c4 w DO .bss 00000004 GLIBC_2.0 timezone +000f90f0 g DF .text 000000ec GLIBC_2.0 xdr_rmtcall_args +00070bd0 g DF .text 00000104 GLIBC_2.0 __strtok_r +00068ec0 w DF .text 0000014b GLIBC_2.0 mallopt +000fde60 g DF .text 00000035 GLIBC_2.0 xdrstdio_create +00039c90 g DF .text 00000029 GLIBC_2.1 strtoimax +00056950 w DF .text 00000039 GLIBC_2.0 getline +00144100 w DO .bss 00000004 GLIBC_2.0 __malloc_initialize_hook +000d6c70 g DF .text 00000093 GLIBC_2.1 __iswdigit_l +00071170 g DF .text 00000041 GLIBC_2.0 __stpcpy +00016f70 g DF .text 00000187 GLIBC_2.1 iconv +000f8080 g DF .text 000000f5 GLIBC_2.0 get_myaddress +000ec990 g DF .text 0000017d GLIBC_2.1.2 getrpcbyname_r +00111c90 g DF .text 0000005f (GLIBC_2.0) getrpcbyname_r +00143344 w DO .data 00000004 GLIBC_2.0 program_invocation_short_name +000d3170 g DF .text 00000038 GLIBC_2.0 bdflush +0002d230 w DF .text 00000031 GLIBC_2.1.1 imaxabs +00016540 g DF .text 0000002a (GLIBC_2.0) __floatdidf +000a2f60 w DF .text 00000093 GLIBC_2.0 re_compile_fastmap +000d29d0 g DF .text 00000038 GLIBC_2.3 lremovexattr +0010cb50 g DF .text 000001b6 (GLIBC_2.0) fdopen +00057fa0 g DF .text 000002da GLIBC_2.1 fdopen +000668e0 g DF .text 000001b9 GLIBC_2.0 _IO_str_seekoff +000ce900 g DF .text 0000001d GLIBC_2.0 setusershell +00142740 g DO .data.rel.ro 00000054 GLIBC_2.2 _IO_wfile_jumps +0008ea50 g DF .text 000000b0 GLIBC_2.2 readdir64 +0010e940 g DF .text 000000af (GLIBC_2.1) readdir64 +000f9750 g DF .text 00000406 GLIBC_2.0 xdr_callmsg +000f9e80 g DF .text 00000036 GLIBC_2.0 svcerr_auth +0002c3e0 g DF .text 0000013e GLIBC_2.0 qsort +00037d10 w DF .text 0000002b GLIBC_2.0 canonicalize_file_name +00093700 g DF .text 00000034 GLIBC_2.0 __getpgid +00016cf0 g DF .text 0000027d GLIBC_2.1 iconv_open +00064de0 g DF .text 0000002a GLIBC_2.0 _IO_sgetn +0002fc20 g DF .text 0000003e GLIBC_2.0 __strtod_internal +0005adc0 g DF .text 0000013c GLIBC_2.2 _IO_fsetpos64 +0010d900 g DF .text 0000010e (GLIBC_2.1) _IO_fsetpos64 +000391c0 w DF .text 00000042 GLIBC_2.3 strfmon_l +0002de60 g DF .text 00000034 GLIBC_2.0 mrand48 +000c1520 g DF .text 00000013 GLIBC_2.2 posix_spawnattr_getflags +000d39a0 w DF .text 0000006c GLIBC_2.0 accept +0002d590 g DF .text 00000046 GLIBC_2.0 wcstombs +0006ce00 g DF .text 000001e5 GLIBC_2.0 __libc_free +000e9b50 g DF .text 000001ab GLIBC_2.0 gethostbyname2 +000fee80 g DF .text 00000197 GLIBC_2.1 cbc_crypt +000e5a00 g DF .text 0000008c GLIBC_2.0 __nss_hosts_lookup +0002fb70 w DF .text 00000030 GLIBC_2.1 __strtoull_l +00100a20 g DF .text 0000003a GLIBC_2.1 xdr_netnamestr +00066aa0 g DF .text 00000189 GLIBC_2.0 _IO_str_overflow +00144108 w DO .bss 00000004 GLIBC_2.0 __after_morecore_hook +000de250 w DF .text 00000d40 GLIBC_2.1 argp_parse +0005a520 g DF .text 00000141 GLIBC_2.0 _IO_seekpos +00072bf0 g DF .text 000000a2 GLIBC_2.0 envz_get +00071a00 g DF .text 00000151 GLIBC_2.1 __strcasestr +00093840 w DF .text 00000053 GLIBC_2.0 getresuid +000c1ce0 g DF .text 0000003a GLIBC_2.2 posix_spawnattr_setsigmask +000dfdf0 g DF .text 00000096 GLIBC_2.0 hstrerror +000cf060 g DF .text 0000059d GLIBC_2.4 __vsyslog_chk +000d34e0 g DF .text 0000003a GLIBC_2.4 inotify_add_watch +0010cec0 g DF .text 000001a5 (GLIBC_2.0) _IO_proc_close +000ca5e0 w DF .text 000000d6 GLIBC_2.0 tcgetattr +00023cb0 g DF .text 0000000b GLIBC_2.0 toascii +00059b70 g DF .text 000001a5 GLIBC_2.1 _IO_proc_close +000c27b0 w DF .text 0000012b GLIBC_2.1 statfs64 +000f5040 g DF .text 00000081 GLIBC_2.0 authnone_create +00075000 g DF .text 0000003f GLIBC_2.1.1 __strcmp_gg +00023e70 w DF .text 00000017 GLIBC_2.3 isupper_l +000cbfd0 g DF .text 000000a5 GLIBC_2.0 sethostid +00108f80 g DF .text 00000023 GLIBC_2.1 getutxline +000560d0 g DF .text 000000a2 GLIBC_2.1 tmpfile64 +00092400 w DF .text 0000026a GLIBC_2.0 sleep +00091e80 w DF .text 00000034 GLIBC_2.0 times +00063840 g DF .text 000000dd GLIBC_2.1 _IO_file_sync +0010e5f0 g DF .text 00000097 (GLIBC_2.0) _IO_file_sync +0007fef0 g DF .text 0000003e GLIBC_2.0 wcsxfrm +000751b0 g DF .text 00000046 GLIBC_2.1.1 __strcspn_g +00073ef0 w DF .text 00000d51 GLIBC_2.3 strxfrm_l +0002b1d0 g DF .text 0000004f GLIBC_2.1 __libc_allocate_rtsig +000e89c0 g DF .text 00000049 GLIBC_2.4 __wcrtomb_chk +00023f60 g DF .text 0000003c GLIBC_2.3 __ctype_toupper_loc +000d2be0 g DF .text 00000038 GLIBC_2.3.4 vm86 +000d3070 g DF .text 00000034 (GLIBC_2.0) vm86 +000cdd00 g DF .text 0000002f GLIBC_2.0 insque +000f6500 g DF .text 00000126 GLIBC_2.0 clntraw_create +000d33b0 g DF .text 00000094 GLIBC_2.6 epoll_pwait +000cb800 g DF .text 00000026 GLIBC_2.0 __getpagesize +000e6a20 g DF .text 00000078 GLIBC_2.3.4 __strcpy_chk +0006ae90 w DF .text 000000fc GLIBC_2.0 valloc +00023f20 g DF .text 0000003c GLIBC_2.3 __ctype_tolower_loc +00108f10 g DF .text 00000017 GLIBC_2.1 getutxent +00065900 g DF .text 00000045 GLIBC_2.2 _IO_list_unlock +00143334 g DO .data 00000004 GLIBC_2.0 obstack_alloc_failed_handler +0005b6f0 g DF .text 0000007c GLIBC_2.2 fputws_unlocked +000fcd00 g DF .text 0000015c GLIBC_2.0 xdr_array +000d2990 g DF .text 0000003a GLIBC_2.3 llistxattr +0002d070 g DF .text 00000175 GLIBC_2.1.3 __cxa_finalize +0002b190 g DF .text 00000016 GLIBC_2.1 __libc_current_sigrtmin +000d2e80 w DF .text 00000038 GLIBC_2.1 umount2 +000cf790 g DF .text 0000004b GLIBC_2.0 syscall +0002a5a0 g DF .text 00000041 GLIBC_2.0 sigpending +0002bbf0 g DF .text 0000006c GLIBC_2.0 bsearch +00075290 g DF .text 00000032 GLIBC_2.1.1 __strpbrk_cg +000b78d0 g DF .text 00000044 GLIBC_2.0 freeaddrinfo +000713a0 w DF .text 00000069 GLIBC_2.3 strncasecmp_l +000236a0 g DF .text 00000181 GLIBC_2.0 __assert_perror_fail +000d2340 w DF .text 000001a0 GLIBC_2.0 get_nprocs +00111930 g DF .text 0000005f (GLIBC_2.0) getprotobyname_r +00075cd0 g DF .text 000000b0 GLIBC_2.3.4 __xpg_strerror_r +0005a7d0 w DF .text 00000189 GLIBC_2.0 setvbuf +000eb7d0 g DF .text 0000017d GLIBC_2.1.2 getprotobyname_r +00080fb0 g DF .text 00000955 GLIBC_2.1 __wcsxfrm_l +0005ab10 w DF .text 0000009b GLIBC_2.0 vsscanf +00111370 g DF .text 0000006c (GLIBC_2.0) gethostbyaddr_r +000e9670 g DF .text 0000030c GLIBC_2.1.2 gethostbyaddr_r +00016890 g DF .text 00000179 (GLIBC_2.0) __divdi3 +00090ad0 g DF .text 0000018e GLIBC_2.0 fgetpwent +000f1170 g DF .text 000000a7 GLIBC_2.0 setaliasent +0002a640 g DF .text 000000a7 GLIBC_2.1.3 __sigsuspend +000f9530 g DF .text 0000007f GLIBC_2.0 xdr_rejected_reply +000d31b0 g DF .text 00000038 GLIBC_2.1 capget +0010ea10 g DF .text 00000110 (GLIBC_2.1) readdir64_r +0008eb20 g DF .text 00000110 GLIBC_2.2 readdir64_r +000b7550 g DF .text 0000003a GLIBC_2.0 __sched_setscheduler +000fe250 g DF .text 000000fc GLIBC_2.0 getpublickey +000f9c90 g DF .text 00000039 GLIBC_2.2.3 __rpc_thread_svc_pollfd +000c7540 g DF .text 00000551 GLIBC_2.0 fts_open +000fa030 g DF .text 0000007e GLIBC_2.0 svc_unregister +00106ae0 w DF .text 00000062 GLIBC_2.0 pututline +00093810 w DF .text 0000002c GLIBC_2.0 setsid +00000004 g D .tdata 00000004 GLIBC_PRIVATE __resp +00106970 w DF .text 0000005e GLIBC_2.0 getutent +000c14a0 g DF .text 00000037 GLIBC_2.2 posix_spawnattr_getsigdefault +000d6db0 w DF .text 00000092 GLIBC_2.3 iswgraph_l +00045bf0 g DF .text 00000902 GLIBC_2.1 printf_size +000df110 g DF .text 0000003c GLIBC_2.0 pthread_attr_destroy +0007feb0 w DF .text 00000037 GLIBC_2.0 wcscoll +00077bf0 g DF .text 00000045 GLIBC_2.0 __wcstoul_internal +0010a5d0 g DF .text 00000031 GLIBC_2.0 __deregister_frame +0002a360 w DF .text 00000157 GLIBC_2.0 __sigaction +00103630 g DF .text 000000bb GLIBC_2.1.1 xdr_uint64_t +00103130 g DF .text 00000274 GLIBC_2.1 svcunix_create +0002e090 w DF .text 00000058 GLIBC_2.0 nrand48_r +000ca310 g DF .text 00000076 GLIBC_2.0 cfsetspeed +000d8030 g DF .text 000003cc GLIBC_PRIVATE _nss_files_parse_spent +00112c00 g DF __libc_freeres_fn 0000007b GLIBC_2.1 __libc_freeres +000c3c00 w DF .text 000000b7 GLIBC_2.0 fcntl +000e8010 g DF .text 0000003b GLIBC_2.4 __wcpncpy_chk +000d6730 w DF .text 0000009e GLIBC_2.0 wctype +00076340 g DF .text 0000004f GLIBC_2.0 wcsspn +00110e20 g DF .text 0000008e (GLIBC_2.1) getrlimit64 +000caa50 g DF .text 0000008e GLIBC_2.2 getrlimit64 +000f37f0 g DF .text 00000039 GLIBC_2.3.3 inet6_option_init +000d71b0 g DF .text 0000006e GLIBC_2.1 __iswctype_l +000cfd20 g DF .text 00000055 GLIBC_2.0 ecvt +000e7d90 g DF .text 0000002e GLIBC_2.4 __wmemmove_chk +000e6d20 g DF .text 00000032 GLIBC_2.3.4 __sprintf_chk +000eea00 g DF .text 0000001b GLIBC_2.0 rresvport +000f5860 g DF .text 000001b4 GLIBC_2.0 bindresvport +000ca240 g DF .text 00000051 GLIBC_2.0 cfsetospeed +000465f0 g DF .text 00000034 GLIBC_2.1 __asprintf +00071350 g DF .text 0000004f GLIBC_2.1 __strcasecmp_l +0005f250 g DF .text 000000f7 GLIBC_2.2 fwide +0010eea0 g DF .text 0000005f (GLIBC_2.0) getgrgid_r +000901a0 g DF .text 000001ec GLIBC_2.1.2 getgrgid_r +000df5f0 g DF .text 00000043 GLIBC_2.3.2 pthread_cond_init +001111f0 g DF .text 00000043 (GLIBC_2.0) pthread_cond_init +000937b0 g DF .text 0000001c GLIBC_2.0 setpgrp +00075fc0 g DF .text 0000005b GLIBC_2.0 wcsdup +000ca220 g DF .text 00000018 GLIBC_2.0 cfgetispeed +0002b920 g DF .text 0000002b GLIBC_2.0 atoll +0002a060 w DF .text 000000cf GLIBC_2.0 bsd_signal +00108b00 w DF .text 0000039c GLIBC_2.1 ptsname_r +0002ea30 w DF .text 00000030 GLIBC_2.1 __strtol_l +000d2880 g DF .text 00000046 GLIBC_2.3 fsetxattr +000e94c0 g DF .text 0000001d GLIBC_2.0 __h_errno_location +000fd360 g DF .text 00000162 GLIBC_2.0 xdrrec_create +0010dde0 g DF .text 000003de (GLIBC_2.0) _IO_file_seekoff +00056ed0 g DF .text 00000069 GLIBC_2.0 _IO_ftrylockfile +000632e0 g DF .text 0000055b GLIBC_2.1 _IO_file_seekoff +000c3610 w DF .text 00000065 GLIBC_2.0 __close +00065890 g DF .text 0000000b GLIBC_2.2 _IO_iter_next +000ccec0 w DF .text 000008d5 GLIBC_2.0 getmntent_r +000750d0 g DF .text 0000001b GLIBC_2.1.1 __strchrnul_c +0002d210 g DF .text 00000011 GLIBC_2.0 labs +001430c8 g DO .data 00000004 GLIBC_2.0 obstack_exit_failure +000c4bd0 w DF .text 00000038 GLIBC_2.0 link +00088f70 g DF .text 0000215c GLIBC_2.3 __strftime_l +001008e0 g DF .text 00000068 GLIBC_2.0 xdr_cryptkeyres +000cd990 g DF .text 00000167 GLIBC_2.4 futimesat +0005cc20 g DF .text 000000f1 GLIBC_2.2 _IO_wdefault_xsgetn +000f0910 g DF .text 00000399 GLIBC_2.0 innetgr +001435f8 g DO .data 00000004 GLIBC_2.0 _IO_list_all +000c33c0 w DF .text 00000089 GLIBC_2.4 openat +0005c1c0 w DF .text 000000f7 GLIBC_2.2 vswprintf +000d6be0 g DF .text 00000090 GLIBC_2.1 __iswcntrl_l +000604b0 w DF .text 000000dd GLIBC_2.0 vdprintf +000e7a30 g DF .text 00000049 GLIBC_2.4 __pread64_chk +000750f0 g DF .text 0000001d GLIBC_2.1.1 __strchrnul_g +000f7430 g DF .text 00000046 GLIBC_2.0 clntudp_create +000eb680 g DF .text 0000012d GLIBC_2.0 getprotobyname +0010a610 g DF .text 000000ea GCC_3.0 __deregister_frame_info_bases +000596e0 g DF .text 000001a4 GLIBC_2.1 _IO_getline_info +00023eb0 w DF .text 00000011 GLIBC_2.3 tolower_l +00061460 g DF .text 00000038 GLIBC_2.2 __fsetlocking +00088e80 w DF .text 00000044 GLIBC_2.3.2 strptime_l +00072130 w DF .text 000000d8 GLIBC_2.0 argz_create_sep +001433f8 g DO .data 00000004 (GLIBC_2.0) __ctype32_b +000c1f90 g DF .text 0000008e GLIBC_2.0 __xstat +000800b0 w DF .text 00000ef3 GLIBC_2.3 wcscoll_l +000e6100 g DF .text 00000160 GLIBC_2.1 __backtrace +000d30b0 g DF .text 00000038 (GLIBC_2.0) getrlimit +000ca9d0 g DF .text 0000003f GLIBC_2.2 getrlimit +0002a860 w DF .text 00000063 GLIBC_2.0 sigsetmask +00100470 g DF .text 00000073 GLIBC_2.1 key_encryptsession +00023a20 g DF .text 00000048 GLIBC_2.0 isdigit +00055cc0 g DF .text 00000041 GLIBC_2.0 scanf +000d28d0 g DF .text 00000040 GLIBC_2.3 getxattr +000c2d30 g DF .text 00000022 GLIBC_2.3.2 lchmod +000239d0 g DF .text 00000046 GLIBC_2.0 iscntrl +000d43c0 g DF .text 000000c5 GLIBC_PRIVATE __libc_msgrcv +000cb830 w DF .text 00000039 GLIBC_2.0 getdtablesize +000d35d0 w DF .text 00000046 GLIBC_2.0 mount +0012d500 g DO .rodata 00000004 GLIBC_2.4 sys_nerr +0012d50c g DO .rodata 00000004 (GLIBC_2.3) sys_nerr +0012d508 g DO .rodata 00000004 (GLIBC_2.1) sys_nerr +0012d504 g DO .rodata 00000004 (GLIBC_2.0) sys_nerr +00023ed0 g DF .text 00000011 GLIBC_2.1 __toupper_l +0002d9f0 w DF .text 000000b7 GLIBC_2.0 random_r +000d64c0 w DF .text 000000c9 GLIBC_2.0 iswpunct +000d1c30 g DF .text 00000026 GLIBC_2.0 errx +00071350 w DF .text 0000004f GLIBC_2.3 strcasecmp_l +00076550 g DF .text 00000073 GLIBC_2.0 wmemchr +00091e40 w DF .text 00000034 GLIBC_2.0 uname +00070ee0 g DF .text 0000008f GLIBC_2.0 memmove +00100270 g DF .text 0000005a GLIBC_2.1 key_setnet +00063150 g DF .text 00000097 GLIBC_2.1 _IO_file_write +0010dd70 g DF .text 0000006d (GLIBC_2.0) _IO_file_write +00146514 g DO .bss 00000004 GLIBC_2.2 svc_max_pollfd +00077e10 w DF .text 0000003f GLIBC_2.0 wcstod +00146238 g DO .bss 00000004 GLIBC_2.0 _nl_msg_cat_cntr +000e7500 g DF .text 00000046 GLIBC_2.3.4 __chk_fail +000f9fa0 g DF .text 00000082 GLIBC_2.0 svc_getreqset +000d5c60 w DF .text 00000013 GLIBC_2.0 mcount +0006df50 g DF .text 00000099 GLIBC_2.0 mprobe +000c15e0 g DF .text 00000050 GLIBC_2.2 posix_spawnp +00077f10 w DF .text 0000003f GLIBC_2.0 wcstof +0010e690 g DF .text 00000153 (GLIBC_2.0) _IO_file_overflow +000e8b00 g DF .text 00000042 GLIBC_2.4 __wcsrtombs_chk +000e6260 w DF .text 000002bc GLIBC_2.1 backtrace_symbols +00063920 g DF .text 000001ef GLIBC_2.1 _IO_file_overflow +00065950 g DF .text 0000002e GLIBC_2.2 _IO_list_resetlock +000d3030 g DF .text 0000003a GLIBC_PRIVATE __modify_ldt +000d4ea0 g DF .text 00000044 GLIBC_2.0 _mcleanup +000d7220 g DF .text 00000073 GLIBC_2.2 __wctrans_l +00023e90 w DF .text 00000017 GLIBC_2.3 isxdigit_l +0002b2f0 w DF .text 00000061 GLIBC_2.1 sigtimedwait +00059270 g DF .text 0000015f GLIBC_2.0 _IO_fwrite +000effc0 g DF .text 00000426 GLIBC_2.0 ruserpass +00076390 g DF .text 0000009b GLIBC_2.0 wcstok +000df8d0 g DF .text 00000030 GLIBC_2.0 pthread_self +000fa2e0 g DF .text 000000b9 GLIBC_2.0 svc_register +00091f70 g DF .text 00000070 GLIBC_2.0 __waitpid +00077ba0 g DF .text 00000046 GLIBC_2.0 wcstol +0005ad80 w DF .text 00000032 GLIBC_2.1 fopen64 +000df400 g DF .text 00000043 GLIBC_2.0 pthread_attr_setschedpolicy +0005c2c0 g DF .text 000000a6 GLIBC_2.2 vswscanf +00016570 g DF .text 00000031 (GLIBC_2.0) __fixunsxfdi +000ec1c0 g DF .text 000000b0 GLIBC_2.0 endservent +000e5b20 g DF .text 0000008c GLIBC_2.0 __nss_group_lookup +000c0e50 w DF .text 000000bc GLIBC_2.1 pread +00016610 g DF .text 00000038 (GLIBC_2.0) __ucmpdi2 +0003bf00 g DF .text 00000030 GLIBC_2.0 ctermid +00077b20 w DF .text 00000024 GLIBC_2.2 wcschrnul +00109740 g DF .text 00000099 GLIBC_PRIVATE __libc_dlsym +000c0f10 w DF .text 000000bc GLIBC_2.1 pwrite +000cce00 g DF .text 0000002c GLIBC_2.2 __endmntent +00077c90 w DF .text 00000046 GLIBC_2.0 wcstoq +0002ab50 g DF .text 0000007c GLIBC_2.0 sigstack +00092a30 g DF .text 00000051 GLIBC_2.1.2 __vfork +00071970 w DF .text 00000090 GLIBC_2.0 strsep +00061360 g DF .text 00000013 GLIBC_2.2 __freadable +000d6b50 w DF .text 00000090 GLIBC_2.3 iswblank_l +0006f210 g DF .text 000000c9 GLIBC_2.0 _obstack_begin +000f0f10 g DF .text 000000be GLIBC_2.0 getnetgrent +000645a0 g DF .text 00000210 GLIBC_2.1 _IO_file_underflow +0010e1c0 g DF .text 000000e8 (GLIBC_2.0) _IO_file_underflow +00100e00 g DF .text 000000fb GLIBC_2.1 user2netname +000e4630 g DF .text 000000b0 GLIBC_2.0 __nss_next +000770a0 w DF .text 0000035f GLIBC_2.0 wcsrtombs +00143970 g DO .data 00000004 GLIBC_2.0 __morecore +00024400 w DF .text 00000015 GLIBC_2.0 bindtextdomain +000c37a0 w DF .text 00000038 GLIBC_2.0 access +000b7590 g DF .text 00000034 GLIBC_2.0 __sched_getscheduler +000397c0 g DF .text 00000495 GLIBC_2.1 fmtmsg +000d0410 g DF .text 000000c4 GLIBC_2.0 qfcvt +0002e490 g DF .text 00000045 (GLIBC_2.0) __strtoq_internal +0008df80 g DF .text 00000056 GLIBC_2.1 ntp_gettime +0006de70 g DF .text 000000e0 GLIBC_2.2 mcheck_pedantic +0006e9d0 g DF .text 000001e5 GLIBC_2.0 mtrace +0005fc60 g DF .text 000000e7 GLIBC_2.0 _IO_getc +000c23f0 g DF .text 000001dc GLIBC_2.4 __fxstatat +00071cb0 g DF .text 00000084 GLIBC_2.0 memmem +0014635c g DO .bss 00000004 GLIBC_2.0 loc1 +00061300 g DF .text 0000002a GLIBC_2.2 __fbufsize +00065710 g DF .text 0000002f GLIBC_2.0 _IO_marker_delta +00146360 g DO .bss 00000004 GLIBC_2.0 loc2 +00071d40 w DF .text 000000c6 GLIBC_2.1 rawmemchr +000cbd50 g DF .text 0000002c GLIBC_2.0 sync +000d3860 g DF .text 00000034 GLIBC_2.0 sysinfo +0008f810 g DF .text 000000ae GLIBC_2.2.4 getgrouplist +00070ec0 w DF .text 0000001e GLIBC_2.0 bcmp +0005b1d0 w DF .text 0000002a GLIBC_2.2 getwc_unlocked +0002aa40 w DF .text 00000104 GLIBC_2.0 sigvec +001430d4 g DO .data 00000004 GLIBC_2.0 opterr +00071f70 w DF .text 00000074 GLIBC_2.0 argz_append +000f9f60 g DF .text 00000036 GLIBC_2.0 svc_getreq +00093600 w DF .text 00000070 GLIBC_2.0 setgid +00068a60 w DF .text 0000045a GLIBC_2.0 malloc_set_state +000e69c0 g DF .text 00000057 GLIBC_2.3.4 __strcat_chk +00072040 g DF .text 00000041 GLIBC_2.0 __argz_count +0005c030 g DF .text 00000039 GLIBC_2.2 wprintf +000d86f0 w DF .text 00000079 GLIBC_2.0 ulckpwdf +000c85f0 g DF .text 00000146 GLIBC_2.0 fts_children +00111a00 g DF .text 00000066 (GLIBC_2.0) getservbyport_r +000ebe10 g DF .text 000001fb GLIBC_2.1.2 getservbyport_r +000c1f00 g DF .text 0000003a GLIBC_2.0 mkfifo +00070ce0 g DF .text 0000003e GLIBC_2.0 strxfrm +000c3580 w DF .text 00000089 GLIBC_2.4 openat64 +000b7590 w DF .text 00000034 GLIBC_2.0 sched_getscheduler +0002ce30 w DF .text 00000051 GLIBC_2.0 on_exit +000c38e0 g DF .text 000002bb GLIBC_2.4 faccessat +001465b4 g DO .bss 00000004 GLIBC_2.1 __key_decryptsession_pk_LOCAL +000e1410 g DF .text 0000000f GLIBC_2.0 __res_randomid +000602b0 g DF .text 00000032 GLIBC_2.0 setbuf +00059890 g DF .text 00000180 GLIBC_2.0 _IO_gets +00061f30 g DF .text 000000a7 GLIBC_2.1 fwrite_unlocked +0006f9b0 g DF .text 00000054 GLIBC_2.0 strcmp +00029f60 g DF .text 00000064 GLIBC_PRIVATE __libc_longjmp +0002e530 g DF .text 00000045 GLIBC_2.0 __strtoull_internal +000d6f80 w DF .text 00000092 GLIBC_2.3 iswspace_l +000d3ca0 w DF .text 0000006c GLIBC_2.0 recvmsg +00023dd0 w DF .text 00000017 GLIBC_2.3 islower_l +00066240 g DF .text 00000128 GLIBC_2.0 __underflow +000c10c0 w DF .text 000000ef GLIBC_2.1 pwrite64 +0006fd60 g DF .text 000000b6 GLIBC_2.0 strerror +000391c0 g DF .text 00000042 GLIBC_2.1 __strfmon_l +000fca40 g DF .text 0000003a GLIBC_2.0 xdr_wrapstring +000ca6c0 g DF .text 00000038 GLIBC_2.0 tcgetpgrp +00015f50 g DF .text 000001b6 GLIBC_2.0 __libc_start_main +0008ea40 g DF .text 0000000a GLIBC_2.0 dirfd +0005b1d0 w DF .text 0000002a GLIBC_2.2 fgetwc_unlocked +00110d50 g DF .text 0000002b (GLIBC_2.1) nftw +000f96d0 g DF .text 00000022 GLIBC_2.0 xdr_des_block +000c61a0 g DF .text 00000052 GLIBC_2.3.3 nftw +000f94a0 g DF .text 0000008c GLIBC_2.0 xdr_callhdr +000d6e50 w DF .text 00000092 GLIBC_2.3 iswprint_l +001009b0 g DF .text 0000006c GLIBC_2.0 xdr_cryptkeyarg2 +000913e0 g DF .text 000000a7 GLIBC_2.0 setpwent +000d4570 g DF .text 00000062 GLIBC_2.0 semop +000cc420 g DF .text 00000034 GLIBC_2.0 endfsent +00023e70 g DF .text 00000017 GLIBC_2.1 __isupper_l +0005c070 g DF .text 00000041 GLIBC_2.2 wscanf +0005f6a0 w DF .text 0000009a GLIBC_2.0 ferror +00106a70 w DF .text 00000069 GLIBC_2.0 getutent_r +000fec10 g DF .text 0000009b GLIBC_2.1 authdes_create +000c8f00 g DF .text 00000220 GLIBC_2.4 ppoll +00071170 w DF .text 00000041 GLIBC_2.0 stpcpy +000df5b0 g DF .text 0000003c GLIBC_2.3.2 pthread_cond_destroy +00091bf0 w DF .text 00000221 GLIBC_2.0 fgetpwent_r +00073ef0 g DF .text 00000d51 GLIBC_2.1 __strxfrm_l +00106940 g DF .text 00000022 GLIBC_2.1 fdetach +00029710 w DF .text 00000085 GLIBC_2.0 ldexp +001111b0 g DF .text 0000003c (GLIBC_2.0) pthread_cond_destroy +000cfcd0 g DF .text 00000050 GLIBC_2.0 gcvt +00091ec0 w DF .text 000000ac GLIBC_2.0 __wait +0005bf70 w DF .text 00000034 GLIBC_2.2 fwprintf +000fcbb0 g DF .text 000000fe GLIBC_2.0 xdr_bytes +0002cbe0 w DF .text 00000074 GLIBC_2.0 setenv +00022820 w DF .text 00000067 GLIBC_2.3 nl_langinfo_l +000cae80 g DF .text 0000003a GLIBC_2.0 setpriority +000c1310 g DF .text 00000094 GLIBC_2.2 posix_spawn_file_actions_addopen +00017b30 g DF .text 00000016 GLIBC_PRIVATE __gconv_get_modules_db +00066080 g DF .text 0000007e GLIBC_2.0 _IO_default_doallocate +001097e0 g DF .text 00000088 GLIBC_PRIVATE __libc_dlopen_mode +00058d00 g DF .text 00000118 GLIBC_2.0 _IO_fread +0008f090 g DF .text 00000192 GLIBC_2.0 fgetgrent +000e7ac0 g DF .text 00000040 GLIBC_2.4 __recvfrom_chk +000cb9d0 g DF .text 00000038 GLIBC_2.0 setdomainname +000c36f0 w DF .text 00000070 GLIBC_2.0 write +000ebcb0 g DF .text 0000013d GLIBC_2.0 getservbyport +000f2380 g DF .text 00000048 GLIBC_2.1 if_freenameindex +00034930 w DF .text 00000029 GLIBC_2.3 strtod_l +000eaae0 g DF .text 000000ab GLIBC_2.0 getnetent +00106f60 w DF .text 00000068 GLIBC_2.0 getutline_r +00076020 w DF .text 00000054 GLIBC_2.0 wcslen +000c91a0 g DF .text 000001ae GLIBC_2.2 posix_fallocate +000c3fc0 g DF .text 00000034 GLIBC_2.0 __pipe +000d8770 w DF .text 0000038b GLIBC_2.0 lckpwdf +000fdb00 g DF .text 000000aa GLIBC_2.0 xdrrec_endofrecord +00060af0 g DF .text 000000fa GLIBC_2.1 fseeko +000d72a0 w DF .text 0000005d GLIBC_2.3 towctrans_l +0006fa10 g DF .text 00000037 GLIBC_2.0 strcoll +000f44a0 g DF .text 00000048 GLIBC_2.5 inet6_opt_set_val +0002a060 w DF .text 000000cf GLIBC_2.0 ssignal +0003d040 g DF .text 000043ec GLIBC_2.0 vfprintf +0002d680 w DF .text 00000067 GLIBC_2.0 random +00094d50 g DF .text 0000006a GLIBC_2.0 globfree +000d3270 g DF .text 0000003a GLIBC_2.0 delete_module +00077e50 g DF .text 0000003e GLIBC_2.0 __wcstold_internal +000dd050 w DF .text 000000af GLIBC_2.1 argp_state_help +00141580 g DO .data.rel.ro 00000100 (GLIBC_2.1) _sys_siglist +00141580 g DO .data.rel.ro 00000104 GLIBC_2.3.3 _sys_siglist +00072e20 g DF .text 0000002b GLIBC_2.0 basename +00141580 g DO .data.rel.ro 00000080 (GLIBC_2.0) _sys_siglist +000e8f40 w DF .text 00000007 GLIBC_2.0 ntohl +00093780 g DF .text 00000008 GLIBC_2.0 getpgrp +000b7430 g DF .text 00000047 GLIBC_2.0 getopt_long_only +000cf690 g DF .text 000000a2 GLIBC_2.0 closelog +00076130 g DF .text 000000d2 GLIBC_2.0 wcsncmp +000b5ae0 w DF .text 0000004d GLIBC_2.0 re_exec +00023cc0 g DF .text 00000011 GLIBC_2.0 isascii +000d2340 w DF .text 000001a0 GLIBC_2.0 get_nprocs_conf +000f5fa0 g DF .text 0000003d GLIBC_2.0 clnt_pcreateerror +000e7c70 g DF .text 0000003b GLIBC_2.4 __ptsname_r_chk +000d4ef0 w DF .text 000001a0 GLIBC_2.0 monstartup +000c3c00 w DF .text 000000b7 GLIBC_2.0 __fcntl +000e8f50 w DF .text 0000000e GLIBC_2.0 ntohs +00046570 w DF .text 0000003b GLIBC_2.0 snprintf +00066460 g DF .text 00000066 GLIBC_2.0 __overflow +0002e3f0 g DF .text 00000045 GLIBC_2.0 __strtoul_internal +000766b0 w DF .text 00000024 GLIBC_2.0 wmemmove +000c9170 g DF .text 00000030 GLIBC_2.3.3 posix_fadvise64 +00110db0 g DF .text 00000024 (GLIBC_2.2) posix_fadvise64 +00100950 g DF .text 00000057 GLIBC_2.0 xdr_cryptkeyarg +00094670 w DF .text 0000041d GLIBC_2.0 sysconf +000e7330 g DF .text 000001ab GLIBC_2.3.4 __gets_chk +0006f610 g DF .text 00000078 GLIBC_2.0 _obstack_free +000d2fc0 g DF .text 00000068 GLIBC_2.3.3 gnu_dev_makedev +000fc580 g DF .text 000000ea GLIBC_2.1.1 xdr_u_hyper +000f0850 g DF .text 000000bb GLIBC_2.0 setnetgrent +000c22a0 g DF .text 0000014d GLIBC_2.4 __xmknodat +000165e0 g DF .text 00000023 (GLIBC_2.0) __fixunsdfdi +0010cb50 g DF .text 000001b6 (GLIBC_2.0) _IO_fdopen +00057fa0 g DF .text 000002da GLIBC_2.1 _IO_fdopen +000f38e0 g DF .text 000000d6 GLIBC_2.3.3 inet6_option_find +000791a0 w DF .text 00000040 GLIBC_2.3 wcstoull_l +000f6d20 g DF .text 000002a9 GLIBC_2.0 clnttcp_create +00023df0 w DF .text 00000017 GLIBC_2.3 isgraph_l +000ec010 g DF .text 000000a2 GLIBC_2.0 getservent +000e88e0 g DF .text 0000003b GLIBC_2.4 __ttyname_r_chk +0002d5e0 g DF .text 00000093 GLIBC_2.0 wctomb +00146364 g DO .bss 00000004 GLIBC_2.0 locs +00062090 g DF .text 00000099 GLIBC_2.1 fputs_unlocked +0002af90 g DF .text 00000024 GLIBC_2.0 siggetmask +00143330 w DO .data 00000004 GLIBC_2.0 __memalign_hook +00090d60 g DF .text 00000177 GLIBC_2.0 putpwent +0005bdb0 g DF .text 0000004f GLIBC_2.2 putwchar_unlocked +00075ac0 g DF .text 00000073 GLIBC_2.1.1 __strncpy_by2 +000d45e0 g DF .text 00000062 GLIBC_2.0 semget +00066ce0 g DF .text 0000004c GLIBC_2.0 _IO_str_init_readonly +00075b40 g DF .text 0000006b GLIBC_2.1.1 __strncpy_by4 +0002dbc0 w DF .text 00000116 GLIBC_2.0 initstate_r +000f95b0 g DF .text 0000008f GLIBC_2.0 xdr_accepted_reply +0005ab10 w DF .text 0000009b GLIBC_2.0 __vsscanf +0006ce00 g DF .text 000001e5 GLIBC_2.0 free +00076430 g DF .text 0000011e GLIBC_2.0 wcsstr +00076310 g DF .text 00000028 GLIBC_2.0 wcsrchr +00023b60 g DF .text 00000046 GLIBC_2.0 ispunct +00062390 g DF .text 0000003b GLIBC_2.0 _IO_file_seek +001447c0 g DO .bss 00000004 GLIBC_2.0 __daylight +000e6740 g DF .text 00000005 GLIBC_2.2 __cyg_profile_func_exit +000df270 g DF .text 00000043 GLIBC_2.0 pthread_attr_getinheritsched +000e7b60 g DF .text 00000032 GLIBC_2.5 __readlinkat_chk +001003f0 g DF .text 00000073 GLIBC_2.1 key_decryptsession +000d1960 g DF .text 00000137 GLIBC_2.0 vwarn +00076730 w DF .text 00000038 GLIBC_2.0 wcpcpy + + diff --git a/scripts/t/Dpkg_Shlibs/objdump.ls b/scripts/t/Dpkg_Shlibs/objdump.ls new file mode 100644 index 0000000..30ae8be --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/objdump.ls @@ -0,0 +1,536 @@ + +/bin/ls: file format elf32-i386 +architecture: i386, flags 0x00000150: +HAS_SYMS, DYNAMIC, D_PAGED +start address 0x00003e16 + +Program Header: + PHDR off 0x00000034 vaddr 0x00000034 paddr 0x00000034 align 2**2 + filesz 0x00000120 memsz 0x00000120 flags r-x + INTERP off 0x00000154 vaddr 0x00000154 paddr 0x00000154 align 2**0 + filesz 0x00000013 memsz 0x00000013 flags r-- + LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12 + filesz 0x00021f10 memsz 0x00021f10 flags r-x + LOAD off 0x000229b8 vaddr 0x000239b8 paddr 0x000239b8 align 2**12 + filesz 0x0000098c memsz 0x00001b1c flags rw- + DYNAMIC off 0x00022eac vaddr 0x00023eac paddr 0x00023eac align 2**2 + filesz 0x000000f8 memsz 0x000000f8 flags rw- + NOTE off 0x00000168 vaddr 0x00000168 paddr 0x00000168 align 2**2 + filesz 0x00000044 memsz 0x00000044 flags r-- +EH_FRAME off 0x0001b5b8 vaddr 0x0001b5b8 paddr 0x0001b5b8 align 2**2 + filesz 0x000008cc memsz 0x000008cc flags r-- + STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**4 + filesz 0x00000000 memsz 0x00000000 flags rw- + RELRO off 0x000229b8 vaddr 0x000239b8 paddr 0x000239b8 align 2**0 + filesz 0x00000648 memsz 0x00000648 flags r-- + +Dynamic Section: + NEEDED libselinux.so.1 + NEEDED libc.so.6 + INIT 0x00001ce8 + FINI 0x00016524 + INIT_ARRAY 0x000239b8 + INIT_ARRAYSZ 0x00000004 + FINI_ARRAY 0x000239bc + FINI_ARRAYSZ 0x00000004 + GNU_HASH 0x000001ac + STRTAB 0x00000adc + SYMTAB 0x0000020c + STRSZ 0x00000638 + SYMENT 0x00000010 + DEBUG 0x00000000 + PLTGOT 0x00024000 + PLTRELSZ 0x00000388 + PLTREL 0x00000011 + JMPREL 0x00001960 + REL 0x000012d0 + RELSZ 0x00000690 + RELENT 0x00000008 + FLAGS_1 0x08000000 + VERNEED 0x00001230 + VERNEEDNUM 0x00000001 + VERSYM 0x00001114 + RELCOUNT 0x000000c6 + +Version References: + required from libc.so.6: + 0x0d696912 0x00 10 GLIBC_2.2 + 0x09691f73 0x00 09 GLIBC_2.1.3 + 0x09691a73 0x00 08 GLIBC_2.2.3 + 0x0d696914 0x00 07 GLIBC_2.4 + 0x06969197 0x00 06 GLIBC_2.17 + 0x0d696911 0x00 05 GLIBC_2.1 + 0x09691974 0x00 04 GLIBC_2.3.4 + 0x0d696910 0x00 03 GLIBC_2.0 + 0x0d696913 0x00 02 GLIBC_2.3 + +DYNAMIC SYMBOL TABLE: +00000000 DF *UND* 00000000 GLIBC_2.3 __ctype_toupper_loc +00000000 DF *UND* 00000000 GLIBC_2.0 unsetenv +00000000 DF *UND* 00000000 GLIBC_2.0 getpwnam +00000000 DF *UND* 00000000 GLIBC_2.0 raise +00000000 DF *UND* 00000000 GLIBC_2.3.4 __snprintf_chk +00000000 DO *UND* 00000000 GLIBC_2.0 __progname +00000000 DF *UND* 00000000 GLIBC_2.0 strcmp +00000000 DF *UND* 00000000 GLIBC_2.1 open64 +00000000 w D *UND* 00000000 _ITM_deregisterTMCloneTable +00000000 DF *UND* 00000000 GLIBC_2.0 getpwuid +00000000 DF *UND* 00000000 GLIBC_2.0 fflush +00000000 DO *UND* 00000000 GLIBC_2.0 stderr +00000000 DF *UND* 00000000 GLIBC_2.0 _exit +00000000 DF *UND* 00000000 GLIBC_2.0 sigprocmask +00000000 DF *UND* 00000000 GLIBC_2.0 dirfd +00000000 DF *UND* 00000000 GLIBC_2.0 wcwidth +00000000 DF *UND* 00000000 GLIBC_2.0 memmove +00000000 DF *UND* 00000000 GLIBC_2.0 _setjmp +00000000 DF *UND* 00000000 GLIBC_2.0 free +00000000 DF *UND* 00000000 GLIBC_2.0 memcpy +00000000 DF *UND* 00000000 GLIBC_2.0 mbsinit +00000000 DF *UND* 00000000 GLIBC_2.17 clock_gettime +00000000 DF *UND* 00000000 GLIBC_2.0 __strtoull_internal +00000000 DF *UND* 00000000 GLIBC_2.1 fclose +00000000 DF *UND* 00000000 GLIBC_2.1 fseeko64 +00000000 DF *UND* 00000000 GLIBC_2.0 signal +00000000 DF *UND* 00000000 GLIBC_2.0 memcmp +00000000 DF *UND* 00000000 GLIBC_2.0 gettimeofday +00000000 DO *UND* 00000000 GLIBC_2.0 __progname_full +00000000 DO *UND* 00000000 GLIBC_2.0 optind +00000000 DF *UND* 00000000 GLIBC_2.0 dcgettext +00000000 DF *UND* 00000000 GLIBC_2.0 mktime +00000000 DF *UND* 00000000 GLIBC_2.4 __stack_chk_fail +00000000 DF *UND* 00000000 GLIBC_2.0 localtime_r +00000000 DF *UND* 00000000 GLIBC_2.0 sigismember +00000000 DF *UND* 00000000 fgetfilecon +00000000 DF *UND* 00000000 GLIBC_2.0 fflush_unlocked +00000000 DF *UND* 00000000 GLIBC_2.0 iswcntrl +00000000 DF *UND* 00000000 GLIBC_2.0 textdomain +00000000 DF *UND* 00000000 GLIBC_2.0 readlink +00000000 DF *UND* 00000000 GLIBC_2.2.3 fnmatch +00000000 DF *UND* 00000000 GLIBC_2.0 iswprint +00000000 DF *UND* 00000000 GLIBC_2.0 ioctl +00000000 w DF *UND* 00000000 GLIBC_2.1.3 __cxa_finalize +00000000 DF *UND* 00000000 GLIBC_2.0 fwrite +00000000 DF *UND* 00000000 GLIBC_2.2 __fxstat64 +00000000 DF *UND* 00000000 GLIBC_2.0 tzset +00000000 DF *UND* 00000000 GLIBC_2.0 __ctype_get_mb_cur_max +00000000 DF *UND* 00000000 GLIBC_2.0 strcpy +00000000 DF *UND* 00000000 GLIBC_2.2 __fpending +00000000 DF *UND* 00000000 GLIBC_2.0 wcstombs +00000000 DF *UND* 00000000 GLIBC_2.0 mbrtowc +00000000 DF *UND* 00000000 GLIBC_2.0 gethostname +00000000 DF *UND* 00000000 GLIBC_2.1.3 __cxa_atexit +00000000 DF *UND* 00000000 GLIBC_2.0 error +00000000 DF *UND* 00000000 GLIBC_2.0 strcoll +00000000 DF *UND* 00000000 GLIBC_2.0 getenv +00000000 DF *UND* 00000000 GLIBC_2.0 realloc +00000000 DF *UND* 00000000 lgetfilecon +00000000 DF *UND* 00000000 GLIBC_2.0 malloc +00000000 DF *UND* 00000000 GLIBC_2.0 timegm +00000000 DF *UND* 00000000 GLIBC_2.2 __freading +00000000 DF *UND* 00000000 GLIBC_2.3.4 __memcpy_chk +00000000 w D *UND* 00000000 __gmon_start__ +00000000 DF *UND* 00000000 GLIBC_2.0 exit +00000000 DF *UND* 00000000 GLIBC_2.1 fdopen +00000000 DF *UND* 00000000 GLIBC_2.1 fputs_unlocked +00000000 DF *UND* 00000000 GLIBC_2.0 strftime +00000000 DF *UND* 00000000 GLIBC_2.0 getopt_long +00000000 DF *UND* 00000000 getfilecon +00000000 DF *UND* 00000000 GLIBC_2.0 strtoul +00000000 DF *UND* 00000000 GLIBC_2.0 strchr +00000000 DF *UND* 00000000 GLIBC_2.0 getcwd +00000000 DF *UND* 00000000 GLIBC_2.0 fscanf +00000000 DF *UND* 00000000 GLIBC_2.0 strlen +00000000 DF *UND* 00000000 GLIBC_2.0 setenv +00000000 DF *UND* 00000000 GLIBC_2.0 __libc_start_main +00000000 DF *UND* 00000000 GLIBC_2.0 sigaddset +00000000 DF *UND* 00000000 GLIBC_2.0 memset +00000000 DF *UND* 00000000 GLIBC_2.0 ungetc +00000000 DF *UND* 00000000 GLIBC_2.0 snprintf +00000000 DF *UND* 00000000 GLIBC_2.0 __errno_location +00000000 DF *UND* 00000000 GLIBC_2.0 tcgetpgrp +00000000 DF *UND* 00000000 GLIBC_2.0 fileno +00000000 DF *UND* 00000000 GLIBC_2.0 stpncpy +00000000 DO *UND* 00000000 GLIBC_2.0 stdout +00000000 DF *UND* 00000000 GLIBC_2.1 fwrite_unlocked +00000000 DF *UND* 00000000 GLIBC_2.3.4 __printf_chk +00000000 DF *UND* 00000000 GLIBC_2.1 mempcpy +00000000 DF *UND* 00000000 GLIBC_2.0 wcswidth +00000000 DF *UND* 00000000 GLIBC_2.0 sigemptyset +00000000 DF *UND* 00000000 GLIBC_2.0 __uflow +00000000 DO *UND* 00000000 GLIBC_2.0 program_invocation_name +00000000 DF *UND* 00000000 GLIBC_2.1 __rawmemchr +00000000 DF *UND* 00000000 GLIBC_2.0 nl_langinfo +00000000 DF *UND* 00000000 GLIBC_2.0 setlocale +00000000 DF *UND* 00000000 GLIBC_2.0 strrchr +00000000 DF *UND* 00000000 GLIBC_2.0 __overflow +00000000 DF *UND* 00000000 GLIBC_2.0 mbstowcs +00000000 DF *UND* 00000000 GLIBC_2.0 gmtime_r +00000000 DF *UND* 00000000 GLIBC_2.2 localeconv +00000000 DF *UND* 00000000 GLIBC_2.3 getxattr +00000000 DF *UND* 00000000 freecon +00000000 DF *UND* 00000000 GLIBC_2.1 lseek64 +00000000 DF *UND* 00000000 GLIBC_2.2 readdir64 +00000000 DO *UND* 00000000 GLIBC_2.0 program_invocation_short_name +00000000 DF *UND* 00000000 GLIBC_2.3.4 __fprintf_chk +00000000 DF *UND* 00000000 GLIBC_2.0 sigaction +00000000 DF *UND* 00000000 GLIBC_2.0 bindtextdomain +00000000 w D *UND* 00000000 _ITM_registerTMCloneTable +00000000 DF *UND* 00000000 GLIBC_2.0 strncmp +00000000 DF *UND* 00000000 GLIBC_2.0 isatty +00000000 DF *UND* 00000000 GLIBC_2.0 abort +00000000 DF *UND* 00000000 GLIBC_2.2 __xstat64 +00000000 DO *UND* 00000000 GLIBC_2.0 optarg +00000000 DF *UND* 00000000 GLIBC_2.2 __lxstat64 +00000000 DF *UND* 00000000 GLIBC_2.0 getgrnam +00000000 DF *UND* 00000000 GLIBC_2.0 close +00000000 DF *UND* 00000000 GLIBC_2.0 closedir +00000000 DF *UND* 00000000 GLIBC_2.0 strspn +00000000 DF *UND* 00000000 GLIBC_2.0 opendir +00000000 DF *UND* 00000000 GLIBC_2.0 getgrgid +00000000 DF *UND* 00000000 GLIBC_2.3 __ctype_tolower_loc +00000000 DF *UND* 00000000 GLIBC_2.0 __assert_fail +00000000 DF *UND* 00000000 GLIBC_2.3 __ctype_b_loc +00000000 DF *UND* 00000000 GLIBC_2.0 calloc +00000000 DF *UND* 00000000 GLIBC_2.3.4 __sprintf_chk +00024340 g DO .data 00000004 Base obstack_alloc_failed_handler +00014ed0 g DF .text 000000fb Base _obstack_newchunk +00024344 g D .data 00000000 Base _edata +00014ea0 g DF .text 0000002a Base _obstack_begin_1 +00014fd0 g DF .text 00000030 Base _obstack_allocated_p +000254d4 g D .bss 00000000 Base _end +00014e70 g DF .text 00000023 Base _obstack_begin +00016544 g DO .rodata 00000004 Base _IO_stdin_used +00015080 g DF .text 00000022 Base _obstack_memory_used +00024344 g D .bss 00000000 Base __bss_start +00001ce8 g DF .init 00000000 Base _init +00016524 g DF .fini 00000000 Base _fini +00015000 g DF .text 00000071 Base _obstack_free + + +DYNAMIC RELOCATION RECORDS +OFFSET TYPE VALUE +000239b8 R_386_RELATIVE *ABS* +000239bc R_386_RELATIVE *ABS* +000239c0 R_386_RELATIVE *ABS* +000239c4 R_386_RELATIVE *ABS* +000239c8 R_386_RELATIVE *ABS* +000239cc R_386_RELATIVE *ABS* +000239d0 R_386_RELATIVE *ABS* +000239d4 R_386_RELATIVE *ABS* +000239d8 R_386_RELATIVE *ABS* +000239dc R_386_RELATIVE *ABS* +000239e0 R_386_RELATIVE *ABS* +000239e4 R_386_RELATIVE *ABS* +000239e8 R_386_RELATIVE *ABS* +000239ec R_386_RELATIVE *ABS* +000239f0 R_386_RELATIVE *ABS* +000239f4 R_386_RELATIVE *ABS* +000239f8 R_386_RELATIVE *ABS* +000239fc R_386_RELATIVE *ABS* +00023a00 R_386_RELATIVE *ABS* +00023a04 R_386_RELATIVE *ABS* +00023a08 R_386_RELATIVE *ABS* +00023a0c R_386_RELATIVE *ABS* +00023a10 R_386_RELATIVE *ABS* +00023a14 R_386_RELATIVE *ABS* +00023a18 R_386_RELATIVE *ABS* +00023a1c R_386_RELATIVE *ABS* +00023a20 R_386_RELATIVE *ABS* +00023a24 R_386_RELATIVE *ABS* +00023a28 R_386_RELATIVE *ABS* +00023a2c R_386_RELATIVE *ABS* +00023a40 R_386_RELATIVE *ABS* +00023a44 R_386_RELATIVE *ABS* +00023a48 R_386_RELATIVE *ABS* +00023a4c R_386_RELATIVE *ABS* +00023a50 R_386_RELATIVE *ABS* +00023a54 R_386_RELATIVE *ABS* +00023a58 R_386_RELATIVE *ABS* +00023a5c R_386_RELATIVE *ABS* +00023a60 R_386_RELATIVE *ABS* +00023a64 R_386_RELATIVE *ABS* +00023a68 R_386_RELATIVE *ABS* +00023a6c R_386_RELATIVE *ABS* +00023a70 R_386_RELATIVE *ABS* +00023a74 R_386_RELATIVE *ABS* +00023a78 R_386_RELATIVE *ABS* +00023a7c R_386_RELATIVE *ABS* +00023a80 R_386_RELATIVE *ABS* +00023a84 R_386_RELATIVE *ABS* +00023a88 R_386_RELATIVE *ABS* +00023a8c R_386_RELATIVE *ABS* +00023a90 R_386_RELATIVE *ABS* +00023a94 R_386_RELATIVE *ABS* +00023a98 R_386_RELATIVE *ABS* +00023a9c R_386_RELATIVE *ABS* +00023aa0 R_386_RELATIVE *ABS* +00023aa4 R_386_RELATIVE *ABS* +00023aa8 R_386_RELATIVE *ABS* +00023aac R_386_RELATIVE *ABS* +00023ab0 R_386_RELATIVE *ABS* +00023ab4 R_386_RELATIVE *ABS* +00023ab8 R_386_RELATIVE *ABS* +00023abc R_386_RELATIVE *ABS* +00023ac0 R_386_RELATIVE *ABS* +00023ac8 R_386_RELATIVE *ABS* +00023acc R_386_RELATIVE *ABS* +00023ad0 R_386_RELATIVE *ABS* +00023ad4 R_386_RELATIVE *ABS* +00023ad8 R_386_RELATIVE *ABS* +00023ae0 R_386_RELATIVE *ABS* +00023ae4 R_386_RELATIVE *ABS* +00023ae8 R_386_RELATIVE *ABS* +00023aec R_386_RELATIVE *ABS* +00023af0 R_386_RELATIVE *ABS* +00023b00 R_386_RELATIVE *ABS* +00023b04 R_386_RELATIVE *ABS* +00023b08 R_386_RELATIVE *ABS* +00023b0c R_386_RELATIVE *ABS* +00023b10 R_386_RELATIVE *ABS* +00023b14 R_386_RELATIVE *ABS* +00023b18 R_386_RELATIVE *ABS* +00023b20 R_386_RELATIVE *ABS* +00023b30 R_386_RELATIVE *ABS* +00023b40 R_386_RELATIVE *ABS* +00023b50 R_386_RELATIVE *ABS* +00023b60 R_386_RELATIVE *ABS* +00023b70 R_386_RELATIVE *ABS* +00023b80 R_386_RELATIVE *ABS* +00023b90 R_386_RELATIVE *ABS* +00023ba0 R_386_RELATIVE *ABS* +00023bb0 R_386_RELATIVE *ABS* +00023bc0 R_386_RELATIVE *ABS* +00023bd0 R_386_RELATIVE *ABS* +00023be0 R_386_RELATIVE *ABS* +00023bf0 R_386_RELATIVE *ABS* +00023c00 R_386_RELATIVE *ABS* +00023c10 R_386_RELATIVE *ABS* +00023c20 R_386_RELATIVE *ABS* +00023c30 R_386_RELATIVE *ABS* +00023c40 R_386_RELATIVE *ABS* +00023c50 R_386_RELATIVE *ABS* +00023c60 R_386_RELATIVE *ABS* +00023c70 R_386_RELATIVE *ABS* +00023c80 R_386_RELATIVE *ABS* +00023c90 R_386_RELATIVE *ABS* +00023ca0 R_386_RELATIVE *ABS* +00023cb0 R_386_RELATIVE *ABS* +00023cc0 R_386_RELATIVE *ABS* +00023cd0 R_386_RELATIVE *ABS* +00023ce0 R_386_RELATIVE *ABS* +00023cf0 R_386_RELATIVE *ABS* +00023d00 R_386_RELATIVE *ABS* +00023d10 R_386_RELATIVE *ABS* +00023d20 R_386_RELATIVE *ABS* +00023d30 R_386_RELATIVE *ABS* +00023d40 R_386_RELATIVE *ABS* +00023d50 R_386_RELATIVE *ABS* +00023d60 R_386_RELATIVE *ABS* +00023d70 R_386_RELATIVE *ABS* +00023d80 R_386_RELATIVE *ABS* +00023d90 R_386_RELATIVE *ABS* +00023da0 R_386_RELATIVE *ABS* +00023db0 R_386_RELATIVE *ABS* +00023dc0 R_386_RELATIVE *ABS* +00023de0 R_386_RELATIVE *ABS* +00023de4 R_386_RELATIVE *ABS* +00023de8 R_386_RELATIVE *ABS* +00023dec R_386_RELATIVE *ABS* +00023df0 R_386_RELATIVE *ABS* +00023df4 R_386_RELATIVE *ABS* +00023df8 R_386_RELATIVE *ABS* +00023dfc R_386_RELATIVE *ABS* +00023e00 R_386_RELATIVE *ABS* +00023e04 R_386_RELATIVE *ABS* +00023e08 R_386_RELATIVE *ABS* +00023e0c R_386_RELATIVE *ABS* +00023e10 R_386_RELATIVE *ABS* +00023e14 R_386_RELATIVE *ABS* +00023e18 R_386_RELATIVE *ABS* +00023e1c R_386_RELATIVE *ABS* +00023e20 R_386_RELATIVE *ABS* +00023e24 R_386_RELATIVE *ABS* +00023e28 R_386_RELATIVE *ABS* +00023e2c R_386_RELATIVE *ABS* +00023e30 R_386_RELATIVE *ABS* +00023e34 R_386_RELATIVE *ABS* +00023e38 R_386_RELATIVE *ABS* +00023e3c R_386_RELATIVE *ABS* +00023e44 R_386_RELATIVE *ABS* +00023e48 R_386_RELATIVE *ABS* +00023e4c R_386_RELATIVE *ABS* +00023e50 R_386_RELATIVE *ABS* +00023e58 R_386_RELATIVE *ABS* +00023e5c R_386_RELATIVE *ABS* +00023e60 R_386_RELATIVE *ABS* +00023e64 R_386_RELATIVE *ABS* +00023e6c R_386_RELATIVE *ABS* +00023e70 R_386_RELATIVE *ABS* +00023e80 R_386_RELATIVE *ABS* +00023e84 R_386_RELATIVE *ABS* +00023e88 R_386_RELATIVE *ABS* +00023e8c R_386_RELATIVE *ABS* +00023e90 R_386_RELATIVE *ABS* +00023e94 R_386_RELATIVE *ABS* +00023e98 R_386_RELATIVE *ABS* +00023e9c R_386_RELATIVE *ABS* +00023ea0 R_386_RELATIVE *ABS* +00023ea4 R_386_RELATIVE *ABS* +00023fb8 R_386_RELATIVE *ABS* +00023fc0 R_386_RELATIVE *ABS* +00023fc8 R_386_RELATIVE *ABS* +00023fd0 R_386_RELATIVE *ABS* +00023fd8 R_386_RELATIVE *ABS* +000241e4 R_386_RELATIVE *ABS* +00024200 R_386_RELATIVE *ABS* +00024204 R_386_RELATIVE *ABS* +00024224 R_386_RELATIVE *ABS* +0002422c R_386_RELATIVE *ABS* +0002423c R_386_RELATIVE *ABS* +00024254 R_386_RELATIVE *ABS* +0002425c R_386_RELATIVE *ABS* +00024264 R_386_RELATIVE *ABS* +0002426c R_386_RELATIVE *ABS* +00024274 R_386_RELATIVE *ABS* +0002427c R_386_RELATIVE *ABS* +00024294 R_386_RELATIVE *ABS* +0002429c R_386_RELATIVE *ABS* +000242a4 R_386_RELATIVE *ABS* +000242ac R_386_RELATIVE *ABS* +000242b4 R_386_RELATIVE *ABS* +000242bc R_386_RELATIVE *ABS* +000242c4 R_386_RELATIVE *ABS* +000242cc R_386_RELATIVE *ABS* +000242dc R_386_RELATIVE *ABS* +000242e4 R_386_RELATIVE *ABS* +000242e8 R_386_RELATIVE *ABS* +00024334 R_386_RELATIVE *ABS* +0002433c R_386_RELATIVE *ABS* +00024340 R_386_RELATIVE *ABS* +00023fa4 R_386_GLOB_DAT _ITM_deregisterTMCloneTable +00023fa8 R_386_GLOB_DAT stderr@GLIBC_2.0 +00023fac R_386_GLOB_DAT free@GLIBC_2.0 +00023fb0 R_386_GLOB_DAT optind@GLIBC_2.0 +00023fb4 R_386_GLOB_DAT __cxa_finalize@GLIBC_2.1.3 +00023fbc R_386_GLOB_DAT malloc@GLIBC_2.0 +00023fc4 R_386_GLOB_DAT __gmon_start__ +00023fcc R_386_GLOB_DAT stdout@GLIBC_2.0 +00023fd4 R_386_GLOB_DAT program_invocation_name@GLIBC_2.0 +00023fdc R_386_GLOB_DAT program_invocation_short_name@GLIBC_2.0 +00023fe0 R_386_GLOB_DAT _ITM_registerTMCloneTable +00023fe4 R_386_GLOB_DAT optarg@GLIBC_2.0 +0002400c R_386_JUMP_SLOT __ctype_toupper_loc@GLIBC_2.3 +00024010 R_386_JUMP_SLOT unsetenv@GLIBC_2.0 +00024014 R_386_JUMP_SLOT getpwnam@GLIBC_2.0 +00024018 R_386_JUMP_SLOT raise@GLIBC_2.0 +0002401c R_386_JUMP_SLOT __snprintf_chk@GLIBC_2.3.4 +00024020 R_386_JUMP_SLOT strcmp@GLIBC_2.0 +00024024 R_386_JUMP_SLOT open64@GLIBC_2.1 +00024028 R_386_JUMP_SLOT getpwuid@GLIBC_2.0 +0002402c R_386_JUMP_SLOT fflush@GLIBC_2.0 +00024030 R_386_JUMP_SLOT _exit@GLIBC_2.0 +00024034 R_386_JUMP_SLOT sigprocmask@GLIBC_2.0 +00024038 R_386_JUMP_SLOT dirfd@GLIBC_2.0 +0002403c R_386_JUMP_SLOT wcwidth@GLIBC_2.0 +00024040 R_386_JUMP_SLOT memmove@GLIBC_2.0 +00024044 R_386_JUMP_SLOT _setjmp@GLIBC_2.0 +00024048 R_386_JUMP_SLOT memcpy@GLIBC_2.0 +0002404c R_386_JUMP_SLOT mbsinit@GLIBC_2.0 +00024050 R_386_JUMP_SLOT clock_gettime@GLIBC_2.17 +00024054 R_386_JUMP_SLOT __strtoull_internal@GLIBC_2.0 +00024058 R_386_JUMP_SLOT fclose@GLIBC_2.1 +0002405c R_386_JUMP_SLOT fseeko64@GLIBC_2.1 +00024060 R_386_JUMP_SLOT signal@GLIBC_2.0 +00024064 R_386_JUMP_SLOT memcmp@GLIBC_2.0 +00024068 R_386_JUMP_SLOT gettimeofday@GLIBC_2.0 +0002406c R_386_JUMP_SLOT dcgettext@GLIBC_2.0 +00024070 R_386_JUMP_SLOT mktime@GLIBC_2.0 +00024074 R_386_JUMP_SLOT __stack_chk_fail@GLIBC_2.4 +00024078 R_386_JUMP_SLOT localtime_r@GLIBC_2.0 +0002407c R_386_JUMP_SLOT sigismember@GLIBC_2.0 +00024080 R_386_JUMP_SLOT fgetfilecon +00024084 R_386_JUMP_SLOT fflush_unlocked@GLIBC_2.0 +00024088 R_386_JUMP_SLOT iswcntrl@GLIBC_2.0 +0002408c R_386_JUMP_SLOT textdomain@GLIBC_2.0 +00024090 R_386_JUMP_SLOT readlink@GLIBC_2.0 +00024094 R_386_JUMP_SLOT fnmatch@GLIBC_2.2.3 +00024098 R_386_JUMP_SLOT iswprint@GLIBC_2.0 +0002409c R_386_JUMP_SLOT ioctl@GLIBC_2.0 +000240a0 R_386_JUMP_SLOT fwrite@GLIBC_2.0 +000240a4 R_386_JUMP_SLOT __fxstat64@GLIBC_2.2 +000240a8 R_386_JUMP_SLOT tzset@GLIBC_2.0 +000240ac R_386_JUMP_SLOT __ctype_get_mb_cur_max@GLIBC_2.0 +000240b0 R_386_JUMP_SLOT strcpy@GLIBC_2.0 +000240b4 R_386_JUMP_SLOT __fpending@GLIBC_2.2 +000240b8 R_386_JUMP_SLOT wcstombs@GLIBC_2.0 +000240bc R_386_JUMP_SLOT mbrtowc@GLIBC_2.0 +000240c0 R_386_JUMP_SLOT gethostname@GLIBC_2.0 +000240c4 R_386_JUMP_SLOT __cxa_atexit@GLIBC_2.1.3 +000240c8 R_386_JUMP_SLOT error@GLIBC_2.0 +000240cc R_386_JUMP_SLOT strcoll@GLIBC_2.0 +000240d0 R_386_JUMP_SLOT getenv@GLIBC_2.0 +000240d4 R_386_JUMP_SLOT realloc@GLIBC_2.0 +000240d8 R_386_JUMP_SLOT lgetfilecon +000240dc R_386_JUMP_SLOT timegm@GLIBC_2.0 +000240e0 R_386_JUMP_SLOT __freading@GLIBC_2.2 +000240e4 R_386_JUMP_SLOT __memcpy_chk@GLIBC_2.3.4 +000240e8 R_386_JUMP_SLOT exit@GLIBC_2.0 +000240ec R_386_JUMP_SLOT fdopen@GLIBC_2.1 +000240f0 R_386_JUMP_SLOT fputs_unlocked@GLIBC_2.1 +000240f4 R_386_JUMP_SLOT strftime@GLIBC_2.0 +000240f8 R_386_JUMP_SLOT getopt_long@GLIBC_2.0 +000240fc R_386_JUMP_SLOT getfilecon +00024100 R_386_JUMP_SLOT strtoul@GLIBC_2.0 +00024104 R_386_JUMP_SLOT strchr@GLIBC_2.0 +00024108 R_386_JUMP_SLOT getcwd@GLIBC_2.0 +0002410c R_386_JUMP_SLOT fscanf@GLIBC_2.0 +00024110 R_386_JUMP_SLOT strlen@GLIBC_2.0 +00024114 R_386_JUMP_SLOT setenv@GLIBC_2.0 +00024118 R_386_JUMP_SLOT __libc_start_main@GLIBC_2.0 +0002411c R_386_JUMP_SLOT sigaddset@GLIBC_2.0 +00024120 R_386_JUMP_SLOT memset@GLIBC_2.0 +00024124 R_386_JUMP_SLOT ungetc@GLIBC_2.0 +00024128 R_386_JUMP_SLOT snprintf@GLIBC_2.0 +0002412c R_386_JUMP_SLOT __errno_location@GLIBC_2.0 +00024130 R_386_JUMP_SLOT tcgetpgrp@GLIBC_2.0 +00024134 R_386_JUMP_SLOT fileno@GLIBC_2.0 +00024138 R_386_JUMP_SLOT stpncpy@GLIBC_2.0 +0002413c R_386_JUMP_SLOT fwrite_unlocked@GLIBC_2.1 +00024140 R_386_JUMP_SLOT __printf_chk@GLIBC_2.3.4 +00024144 R_386_JUMP_SLOT mempcpy@GLIBC_2.1 +00024148 R_386_JUMP_SLOT wcswidth@GLIBC_2.0 +0002414c R_386_JUMP_SLOT sigemptyset@GLIBC_2.0 +00024150 R_386_JUMP_SLOT __uflow@GLIBC_2.0 +00024154 R_386_JUMP_SLOT __rawmemchr@GLIBC_2.1 +00024158 R_386_JUMP_SLOT nl_langinfo@GLIBC_2.0 +0002415c R_386_JUMP_SLOT setlocale@GLIBC_2.0 +00024160 R_386_JUMP_SLOT strrchr@GLIBC_2.0 +00024164 R_386_JUMP_SLOT __overflow@GLIBC_2.0 +00024168 R_386_JUMP_SLOT mbstowcs@GLIBC_2.0 +0002416c R_386_JUMP_SLOT gmtime_r@GLIBC_2.0 +00024170 R_386_JUMP_SLOT localeconv@GLIBC_2.2 +00024174 R_386_JUMP_SLOT getxattr@GLIBC_2.3 +00024178 R_386_JUMP_SLOT freecon +0002417c R_386_JUMP_SLOT lseek64@GLIBC_2.1 +00024180 R_386_JUMP_SLOT readdir64@GLIBC_2.2 +00024184 R_386_JUMP_SLOT __fprintf_chk@GLIBC_2.3.4 +00024188 R_386_JUMP_SLOT sigaction@GLIBC_2.0 +0002418c R_386_JUMP_SLOT bindtextdomain@GLIBC_2.0 +00024190 R_386_JUMP_SLOT strncmp@GLIBC_2.0 +00024194 R_386_JUMP_SLOT isatty@GLIBC_2.0 +00024198 R_386_JUMP_SLOT abort@GLIBC_2.0 +0002419c R_386_JUMP_SLOT __xstat64@GLIBC_2.2 +000241a0 R_386_JUMP_SLOT __lxstat64@GLIBC_2.2 +000241a4 R_386_JUMP_SLOT getgrnam@GLIBC_2.0 +000241a8 R_386_JUMP_SLOT close@GLIBC_2.0 +000241ac R_386_JUMP_SLOT closedir@GLIBC_2.0 +000241b0 R_386_JUMP_SLOT strspn@GLIBC_2.0 +000241b4 R_386_JUMP_SLOT opendir@GLIBC_2.0 +000241b8 R_386_JUMP_SLOT getgrgid@GLIBC_2.0 +000241bc R_386_JUMP_SLOT __ctype_tolower_loc@GLIBC_2.3 +000241c0 R_386_JUMP_SLOT __assert_fail@GLIBC_2.0 +000241c4 R_386_JUMP_SLOT __ctype_b_loc@GLIBC_2.3 +000241c8 R_386_JUMP_SLOT calloc@GLIBC_2.0 +000241cc R_386_JUMP_SLOT __sprintf_chk@GLIBC_2.3.4 + + diff --git a/scripts/t/Dpkg_Shlibs/objdump.patterns b/scripts/t/Dpkg_Shlibs/objdump.patterns new file mode 100644 index 0000000..571ad47 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/objdump.patterns @@ -0,0 +1,235 @@ + +./t/Dpkg_Shlibs/libobjdump.patterns.so: file format elf32-i386 +architecture: i386, flags 0x00000150: +HAS_SYMS, DYNAMIC, D_PAGED +start address 0x00001650 + +Program Header: + LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12 + filesz 0x0000212c memsz 0x0000212c flags r-x + LOAD off 0x00002dd8 vaddr 0x00003dd8 paddr 0x00003dd8 align 2**12 + filesz 0x00000274 memsz 0x00000278 flags rw- + DYNAMIC off 0x00002ec8 vaddr 0x00003ec8 paddr 0x00003ec8 align 2**2 + filesz 0x00000110 memsz 0x00000110 flags rw- + NOTE off 0x00000114 vaddr 0x00000114 paddr 0x00000114 align 2**2 + filesz 0x00000024 memsz 0x00000024 flags r-- +EH_FRAME off 0x00001ba0 vaddr 0x00001ba0 paddr 0x00001ba0 align 2**2 + filesz 0x00000134 memsz 0x00000134 flags r-- + STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**4 + filesz 0x00000000 memsz 0x00000000 flags rw- + RELRO off 0x00002dd8 vaddr 0x00003dd8 paddr 0x00003dd8 align 2**0 + filesz 0x00000228 memsz 0x00000228 flags r-- + +Dynamic Section: + NEEDED libstdc++.so.6 + NEEDED libm.so.6 + NEEDED libgcc_s.so.1 + NEEDED libc.so.6 + SONAME libpatterns.so.1 + INIT 0x00001520 + FINI 0x00001b2c + INIT_ARRAY 0x00003dd8 + INIT_ARRAYSZ 0x00000004 + FINI_ARRAY 0x00003ddc + FINI_ARRAYSZ 0x00000004 + GNU_HASH 0x00000138 + STRTAB 0x00000960 + SYMTAB 0x000003d0 + STRSZ 0x00000802 + SYMENT 0x00000010 + PLTGOT 0x00004000 + PLTRELSZ 0x00000070 + PLTREL 0x00000011 + JMPREL 0x000014b0 + REL 0x000012d8 + RELSZ 0x000001d8 + RELENT 0x00000008 + VERDEF 0x00001214 + VERDEFNUM 0x00000003 + VERNEED 0x00001268 + VERNEEDNUM 0x00000003 + VERSYM 0x00001162 + RELCOUNT 0x00000003 + +Version definitions: +1 0x01 0x03e92331 libpatterns.so.1 +2 0x00 0x0e2aa3a1 SYMVER_1 +3 0x00 0x0a4cbc82 SYMVEROPT_2 + +Version References: + required from libgcc_s.so.1: + 0x0b792650 0x00 07 GCC_3.0 + required from libstdc++.so.6: + 0x056bafd3 0x00 06 CXXABI_1.3 + 0x0bafd179 0x00 05 CXXABI_1.3.9 + required from libc.so.6: + 0x09691f73 0x00 04 GLIBC_2.1.3 + +DYNAMIC SYMBOL TABLE: +00000000 w DF *UND* 00000000 GLIBC_2.1.3 __cxa_finalize +00000000 DF *UND* 00000000 CXXABI_1.3.9 _ZdlPvj +00000000 DO *UND* 00000000 CXXABI_1.3 _ZTVN10__cxxabiv117__class_type_infoE +00000000 DF *UND* 00000000 CXXABI_1.3 __gxx_personality_v0 +00000000 DO *UND* 00000000 CXXABI_1.3 _ZTVN10__cxxabiv121__vmi_class_type_infoE +00000000 w D *UND* 00000000 _ITM_deregisterTMCloneTable +00000000 DF *UND* 00000000 GCC_3.0 _Unwind_Resume +00000000 w D *UND* 00000000 __gmon_start__ +00000000 w D *UND* 00000000 _ITM_registerTMCloneTable +00001b88 w DO .rodata 00000008 Base _ZTS6ClassC +00001790 g DF .text 00000002 Base _ZN6ClassBD1Ev +00001940 g DF .text 00000007 Base _ZThn16_N3NSB6ClassDD0Ev +000018e0 g DF .text 0000002a Base _ZN6ClassCD0Ev +00001a00 g DF .text 0000001a Base _ZN3NSA6ClassAC2Ev +00001af0 g DF .text 00000002 SYMVER_1 _ZN3NSB6SymverC2Ev +000019c0 g DF .text 0000001a Base _ZN3NSA6ClassA8InternalC2Ev +00001820 g DF .text 0000002a Base _ZN3NSA6ClassA7PrivateD0Ev +00001a60 g DF .text 0000008c Base _ZN3NSB6ClassDC2Ev +000019e0 g DF .text 00000002 Base _ZN3NSA6ClassA8Internal16internal_method1Ec +00001970 g DF .text 00000002 Base _ZThn12_NK3NSB6ClassD11generate_vtEPKc +00000000 g DO *ABS* 00000000 SYMVER_1 SYMVER_1 +00003e30 w DO .data.rel.ro 00000010 Base _ZTVN3NSA6ClassA7PrivateE +00001770 g DF .text 00000002 Base _ZN3NSA6ClassAD1Ev +00001760 g DF .text 00000002 Base _ZN3NSA6ClassA8InternalD1Ev +00001b00 g DF .text 00000002 SYMVER_1 _ZN3NSB6SymverD1Ev +00001a40 g DF .text 0000001a Base _ZN6ClassCC2Ev +00001b00 g DF .text 00000002 SYMVEROPT_2 _ZN3NSB14SymverOptionalD2Ev +00003e40 w DO .data.rel.ro 00000010 Base _ZTVN3NSA6ClassA8InternalE +00001980 g DF .text 0000001a Base _ZN3NSA6ClassA7PrivateC2Ev +000017b0 g DF .text 0000004d Base _ZN3NSB6ClassDD1Ev +000019a0 g DF .text 00000002 Base _ZN3NSA6ClassA7Private11privmethod1Ei +00001790 g DF .text 00000002 Base _ZN6ClassBD2Ev +00001810 g DF .text 00000007 Base _ZThn16_N3NSB6ClassDD1Ev +00001b2c g DF .fini 00000000 Base _fini +00001950 g DF .text 00000007 Base _ZThn12_N3NSB6ClassDD0Ev +000017a0 g DF .text 00000002 Base _ZN6ClassCD1Ev +00001750 g DF .text 00000002 Base _ZN3NSA6ClassA7PrivateD1Ev +00001520 g DF .init 00000000 Base _init +00003df8 w DO .data.rel.ro 00000008 Base _ZTI6ClassB +000019f0 g DF .text 00000002 Base _ZN3NSA6ClassA8Internal16internal_method2Ec +00003e00 w DO .data.rel.ro 00000008 Base _ZTI6ClassC +00001b00 g DF .text 00000002 SYMVER_1 _ZN3NSB6SymverD2Ev +00001760 g DF .text 00000002 Base _ZN3NSA6ClassA8InternalD2Ev +00000000 g DO *ABS* 00000000 SYMVEROPT_2 SYMVEROPT_2 +00001770 g DF .text 00000002 Base _ZN3NSA6ClassAD2Ev +00003e8c w DO .data.rel.ro 0000003c Base _ZTVN3NSB6ClassDE +00003e50 w DO .data.rel.ro 00000014 Base _ZTVN3NSA6ClassAE +000019b0 g DF .text 00000002 Base _ZN3NSA6ClassA7Private11privmethod2Ei +00001780 g DF .text 00000002 Base _ZNK3NSA6ClassA11generate_vtEPKc +000017b0 g DF .text 0000004d Base _ZN3NSB6ClassDD2Ev +00001960 g DF .text 00000002 Base _ZThn16_NK3NSB6ClassD11generate_vtEPKc +00001780 g DF .text 00000002 Base _ZNK6ClassC11generate_vtEPKc +00001800 g DF .text 00000007 Base _ZThn12_N3NSB6ClassDD1Ev +00001af0 g DF .text 00000002 SYMVEROPT_2 _ZN3NSB14SymverOptionalC1Ev +000017a0 g DF .text 00000002 Base _ZN6ClassCD2Ev +00001b10 g DF .text 00000002 SYMVER_1 _ZN3NSB6Symver14symver_method1Ev +00001750 g DF .text 00000002 Base _ZN3NSA6ClassA7PrivateD2Ev +00001780 g DF .text 00000002 Base _ZNK6ClassB11generate_vtEPKc +00001a20 g DF .text 0000001a Base _ZN6ClassBC1Ev +00003e64 w DO .data.rel.ro 00000014 Base _ZTV6ClassB +00003e78 w DO .data.rel.ro 00000014 Base _ZTV6ClassC +00001b70 w DO .rodata 0000000e Base _ZTSN3NSA6ClassAE +0000404c g D .data 00000000 Base _edata +00001b40 w DO .rodata 00000016 Base _ZTSN3NSA6ClassA7PrivateE +00001b90 w DO .rodata 0000000e Base _ZTSN3NSB6ClassDE +000018b0 g DF .text 0000002a Base _ZN6ClassBD0Ev +00003de0 w DO .data.rel.ro 00000008 Base _ZTIN3NSA6ClassA7PrivateE +00001af0 g DF .text 00000002 SYMVEROPT_2 _ZN3NSB14SymverOptionalC2Ev +000019c0 g DF .text 0000001a Base _ZN3NSA6ClassA8InternalC1Ev +00001af0 g DF .text 00000002 SYMVER_1 _ZN3NSB6SymverC1Ev +00004050 g D .bss 00000000 Base _end +00001a00 g DF .text 0000001a Base _ZN3NSA6ClassAC1Ev +00001b20 g DF .text 00000002 SYMVER_1 _ZN3NSB6Symver14symver_method2Ev +00001a60 g DF .text 0000008c Base _ZN3NSB6ClassDC1Ev +00001b58 w DO .rodata 00000017 Base _ZTSN3NSA6ClassA8InternalE +00001a20 g DF .text 0000001a Base _ZN6ClassBC2Ev +00001780 g DF .text 00000002 Base _ZNK3NSB6ClassD11generate_vtEPKc +00001b00 g DF .text 00000002 SYMVEROPT_2 _ZN3NSB14SymverOptionalD1Ev +00001880 g DF .text 0000002a Base _ZN3NSA6ClassAD0Ev +00001a40 g DF .text 0000001a Base _ZN6ClassCC1Ev +00001850 g DF .text 0000002a Base _ZN3NSA6ClassA8InternalD0Ev +00003de8 w DO .data.rel.ro 00000008 Base _ZTIN3NSA6ClassA8InternalE +0000404c g D .bss 00000000 Base __bss_start +00003e08 w DO .data.rel.ro 00000028 Base _ZTIN3NSB6ClassDE +00003df0 w DO .data.rel.ro 00000008 Base _ZTIN3NSA6ClassAE +00001910 g DF .text 0000002a Base _ZN3NSB6ClassDD0Ev +00001980 g DF .text 0000001a Base _ZN3NSA6ClassA7PrivateC1Ev +00001b80 w DO .rodata 00000008 Base _ZTS6ClassB + + +DYNAMIC RELOCATION RECORDS +OFFSET TYPE VALUE +00003dd8 R_386_RELATIVE *ABS* +00003ddc R_386_RELATIVE *ABS* +00004044 R_386_RELATIVE *ABS* +00003de0 R_386_32 _ZTVN10__cxxabiv117__class_type_infoE@CXXABI_1.3 +00003de8 R_386_32 _ZTVN10__cxxabiv117__class_type_infoE@CXXABI_1.3 +00003df0 R_386_32 _ZTVN10__cxxabiv117__class_type_infoE@CXXABI_1.3 +00003df8 R_386_32 _ZTVN10__cxxabiv117__class_type_infoE@CXXABI_1.3 +00003e00 R_386_32 _ZTVN10__cxxabiv117__class_type_infoE@CXXABI_1.3 +00003de4 R_386_32 _ZTSN3NSA6ClassA7PrivateE@@Base +00003dec R_386_32 _ZTSN3NSA6ClassA8InternalE@@Base +00003df4 R_386_32 _ZTSN3NSA6ClassAE@@Base +00003dfc R_386_32 _ZTS6ClassB@@Base +00003e04 R_386_32 _ZTS6ClassC@@Base +00003e08 R_386_32 _ZTVN10__cxxabiv121__vmi_class_type_infoE@CXXABI_1.3 +00003e0c R_386_32 _ZTSN3NSB6ClassDE@@Base +00003e18 R_386_32 _ZTIN3NSA6ClassAE@@Base +00003e54 R_386_32 _ZTIN3NSA6ClassAE@@Base +00003e20 R_386_32 _ZTI6ClassB@@Base +00003e68 R_386_32 _ZTI6ClassB@@Base +00003e28 R_386_32 _ZTI6ClassC@@Base +00003e7c R_386_32 _ZTI6ClassC@@Base +00003e34 R_386_32 _ZTIN3NSA6ClassA7PrivateE@@Base +00003e38 R_386_32 _ZN3NSA6ClassA7PrivateD1Ev@@Base +00003e3c R_386_32 _ZN3NSA6ClassA7PrivateD0Ev@@Base +00003e44 R_386_32 _ZTIN3NSA6ClassA8InternalE@@Base +00003e48 R_386_32 _ZN3NSA6ClassA8InternalD1Ev@@Base +00003e4c R_386_32 _ZN3NSA6ClassA8InternalD0Ev@@Base +00003e58 R_386_32 _ZN3NSA6ClassAD1Ev@@Base +00003e5c R_386_32 _ZN3NSA6ClassAD0Ev@@Base +00003e60 R_386_32 _ZNK3NSA6ClassA11generate_vtEPKc@@Base +00003e6c R_386_32 _ZN6ClassBD1Ev@@Base +00003e70 R_386_32 _ZN6ClassBD0Ev@@Base +00003e74 R_386_32 _ZNK6ClassB11generate_vtEPKc@@Base +00003e80 R_386_32 _ZN6ClassCD1Ev@@Base +00003e84 R_386_32 _ZN6ClassCD0Ev@@Base +00003e88 R_386_32 _ZNK6ClassC11generate_vtEPKc@@Base +00003e90 R_386_32 _ZTIN3NSB6ClassDE@@Base +00003ea4 R_386_32 _ZTIN3NSB6ClassDE@@Base +00003eb8 R_386_32 _ZTIN3NSB6ClassDE@@Base +00003e94 R_386_32 _ZN3NSB6ClassDD1Ev@@Base +00003e98 R_386_32 _ZN3NSB6ClassDD0Ev@@Base +00003e9c R_386_32 _ZNK3NSB6ClassD11generate_vtEPKc@@Base +00003ea8 R_386_32 _ZThn12_N3NSB6ClassDD1Ev@@Base +00003eac R_386_32 _ZThn12_N3NSB6ClassDD0Ev@@Base +00003eb0 R_386_32 _ZThn12_NK3NSB6ClassD11generate_vtEPKc@@Base +00003ebc R_386_32 _ZThn16_N3NSB6ClassDD1Ev@@Base +00003ec0 R_386_32 _ZThn16_N3NSB6ClassDD0Ev@@Base +00003ec4 R_386_32 _ZThn16_NK3NSB6ClassD11generate_vtEPKc@@Base +00003fd8 R_386_GLOB_DAT __cxa_finalize@GLIBC_2.1.3 +00003fdc R_386_GLOB_DAT _ZTVN3NSA6ClassA8InternalE@@Base +00003fe0 R_386_GLOB_DAT _ZTVN3NSB6ClassDE@@Base +00003fe4 R_386_GLOB_DAT _ZTVN3NSA6ClassAE@@Base +00003fe8 R_386_GLOB_DAT _ZTV6ClassC@@Base +00003fec R_386_GLOB_DAT _ZTV6ClassB@@Base +00003ff0 R_386_GLOB_DAT _ITM_deregisterTMCloneTable +00003ff4 R_386_GLOB_DAT _ZTVN3NSA6ClassA7PrivateE@@Base +00003ff8 R_386_GLOB_DAT __gmon_start__ +00003ffc R_386_GLOB_DAT _ITM_registerTMCloneTable +00004048 R_386_32 __gxx_personality_v0@CXXABI_1.3 +0000400c R_386_JUMP_SLOT _ZN6ClassBD1Ev@@Base +00004010 R_386_JUMP_SLOT _ZN6ClassBD2Ev@@Base +00004014 R_386_JUMP_SLOT _ZN3NSA6ClassA7PrivateD1Ev@@Base +00004018 R_386_JUMP_SLOT _ZN3NSA6ClassAD1Ev@@Base +0000401c R_386_JUMP_SLOT _ZN3NSA6ClassA8InternalD1Ev@@Base +00004020 R_386_JUMP_SLOT _ZdlPvj@CXXABI_1.3.9 +00004024 R_386_JUMP_SLOT _ZN3NSB6ClassDD1Ev@@Base +00004028 R_386_JUMP_SLOT _ZN6ClassCD2Ev@@Base +0000402c R_386_JUMP_SLOT _ZN3NSA6ClassAC2Ev@@Base +00004030 R_386_JUMP_SLOT _ZN6ClassBC2Ev@@Base +00004034 R_386_JUMP_SLOT _ZN6ClassCC2Ev@@Base +00004038 R_386_JUMP_SLOT _Unwind_Resume@GCC_3.0 +0000403c R_386_JUMP_SLOT _ZN3NSA6ClassAD2Ev@@Base +00004040 R_386_JUMP_SLOT _ZN6ClassCD1Ev@@Base + + diff --git a/scripts/t/Dpkg_Shlibs/objdump.space b/scripts/t/Dpkg_Shlibs/objdump.space new file mode 100644 index 0000000..7ef3f90 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/objdump.space @@ -0,0 +1,8 @@ + +phony-output: file format elf32-i386 +architecture: i386, flags 0x00000112: +EXEC_P, HAS_SYMS, D_PAGED +start address 0x08049b50 + +DYNAMIC SYMBOL TABLE: +00000000 DF *UND* 00000075 singlespace diff --git a/scripts/t/Dpkg_Shlibs/objdump.spacesyms b/scripts/t/Dpkg_Shlibs/objdump.spacesyms new file mode 100644 index 0000000..1b26af9 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/objdump.spacesyms @@ -0,0 +1,119 @@ + +./t/Dpkg_Shlibs/libobjdump.spacesyms.so: file format elf32-i386 +architecture: i386, flags 0x00000150: +HAS_SYMS, DYNAMIC, D_PAGED +start address 0x00000770 + +Program Header: + LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12 + filesz 0x00000d08 memsz 0x00000d08 flags r-x + LOAD off 0x00000f08 vaddr 0x00001f08 paddr 0x00001f08 align 2**12 + filesz 0x00000198 memsz 0x0000019c flags rw- + DYNAMIC off 0x00000f10 vaddr 0x00001f10 paddr 0x00001f10 align 2**2 + filesz 0x000000e0 memsz 0x000000e0 flags rw- + NOTE off 0x00000114 vaddr 0x00000114 paddr 0x00000114 align 2**2 + filesz 0x00000024 memsz 0x00000024 flags r-- +EH_FRAME off 0x000009f8 vaddr 0x000009f8 paddr 0x000009f8 align 2**2 + filesz 0x000000dc memsz 0x000000dc flags r-- + STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**4 + filesz 0x00000000 memsz 0x00000000 flags rw- + RELRO off 0x00000f08 vaddr 0x00001f08 paddr 0x00001f08 align 2**0 + filesz 0x000000f8 memsz 0x000000f8 flags r-- + +Dynamic Section: + NEEDED libc.so.6 + SONAME libspacesyms.so.1 + INIT 0x00000724 + FINI 0x000009e4 + INIT_ARRAY 0x00001f08 + INIT_ARRAYSZ 0x00000004 + FINI_ARRAY 0x00001f0c + FINI_ARRAYSZ 0x00000004 + GNU_HASH 0x00000138 + STRTAB 0x0000037c + SYMTAB 0x000001ec + STRSZ 0x00000200 + SYMENT 0x00000010 + PLTGOT 0x00002000 + REL 0x0000062c + RELSZ 0x000000f8 + RELENT 0x00000008 + VERDEF 0x000005b0 + VERDEFNUM 0x00000003 + VERNEED 0x0000060c + VERNEEDNUM 0x00000001 + VERSYM 0x0000057c + RELCOUNT 0x0000000f + +Version definitions: +1 0x01 0x026eb371 libspacesyms.so.1 +2 0x00 0x00000591 V1 +3 0x00 0x0df29ee1 VERY_LONG_VERSION_1 + V1 + +Version References: + required from libc.so.6: + 0x09691f73 0x00 04 GLIBC_2.1.3 + +DYNAMIC SYMBOL TABLE: +00000000 w D *UND* 00000000 _ITM_deregisterTMCloneTable +00000000 w DF *UND* 00000000 GLIBC_2.1.3 __cxa_finalize +00000000 w D *UND* 00000000 __gmon_start__ +00000000 w D *UND* 00000000 _ITM_registerTMCloneTable +000008c0 g DF .text 00000002 Base symdefaultverSPA CEdefault +000009e4 g DF .fini 00000000 Base _fini +00002040 g DO .data 00000060 Base funcs +00000724 g DF .init 00000000 Base _init +00000980 g DF .text 00000002 V1 symshortvernospacedefault +000020a0 g D .bss 00000000 Base __bss_start +00000890 g DF .text 00000002 Base .protected symdefaultvernospaceprotected +000020a4 g D .bss 00000000 Base _end +000009c0 g DF .text 00000002 V1 symshortverSPA CEdefault +00000000 g DO *ABS* 00000000 V1 V1 +000009a0 g DF .text 00000002 V1 .protected symshortvernospaceprotected +00000900 g DF .text 00000002 VERY_LONG_VERSION_1 symlongvernospacedefault +00000000 g DO *ABS* 00000000 VERY_LONG_VERSION_1 VERY_LONG_VERSION_1 +000020a0 g D .data 00000000 Base _edata +00000870 g DF .text 00000002 Base symdefaultvernospacedefault +00000960 g DF .text 00000002 VERY_LONG_VERSION_1 .protected symlongverSPA CEprotected +000008e0 g DF .text 00000002 Base .protected symdefaultverSPA CEprotected +00000940 g DF .text 00000002 VERY_LONG_VERSION_1 symlongverSPA CEdefault +000009e0 g DF .text 00000002 V1 .protected symshortverSPA CEprotected +00000920 g DF .text 00000002 VERY_LONG_VERSION_1 .protected symlongvernospaceprotected + + +DYNAMIC RELOCATION RECORDS +OFFSET TYPE VALUE +00001f08 R_386_RELATIVE *ABS* +00001f0c R_386_RELATIVE *ABS* +00002020 R_386_RELATIVE *ABS* +00002044 R_386_RELATIVE *ABS* +0000204c R_386_RELATIVE *ABS* +00002054 R_386_RELATIVE *ABS* +0000205c R_386_RELATIVE *ABS* +00002064 R_386_RELATIVE *ABS* +0000206c R_386_RELATIVE *ABS* +00002074 R_386_RELATIVE *ABS* +0000207c R_386_RELATIVE *ABS* +00002084 R_386_RELATIVE *ABS* +0000208c R_386_RELATIVE *ABS* +00002094 R_386_RELATIVE *ABS* +0000209c R_386_RELATIVE *ABS* +00001ff0 R_386_GLOB_DAT _ITM_deregisterTMCloneTable +00001ff4 R_386_GLOB_DAT __cxa_finalize@GLIBC_2.1.3 +00001ff8 R_386_GLOB_DAT __gmon_start__ +00001ffc R_386_GLOB_DAT _ITM_registerTMCloneTable +00002040 R_386_32 symdefaultvernospacedefault@@Base +00002048 R_386_32 symdefaultvernospaceprotected@@Base +00002050 R_386_32 symdefaultverSPA CEdefault@@Base +00002058 R_386_32 symdefaultverSPA CEprotected@@Base +00002060 R_386_32 symlongvernospacedefault@@VERY_LONG_VERSION_1 +00002068 R_386_32 symlongvernospaceprotected@@VERY_LONG_VERSION_1 +00002070 R_386_32 symlongverSPA CEdefault@@VERY_LONG_VERSION_1 +00002078 R_386_32 symlongverSPA CEprotected@@VERY_LONG_VERSION_1 +00002080 R_386_32 symshortvernospacedefault@@V1 +00002088 R_386_32 symshortvernospaceprotected@@V1 +00002090 R_386_32 symshortverSPA CEdefault@@V1 +00002098 R_386_32 symshortverSPA CEprotected@@V1 + + diff --git a/scripts/t/Dpkg_Shlibs/patterns.cpp b/scripts/t/Dpkg_Shlibs/patterns.cpp new file mode 100644 index 0000000..eb41664 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/patterns.cpp @@ -0,0 +1,99 @@ +#define EXPORT(x) x {} + +namespace NSA { + class ClassA { + private: + class Private { + public: + Private(); + virtual ~Private(); + void privmethod1(int); + void privmethod2(int); + }; + Private *p; + class Internal { + public: + Internal(); + virtual ~Internal(); + void internal_method1(char); + void internal_method2(char); + }; + Internal *i; + public: + ClassA(); + virtual ~ClassA(); + virtual void generate_vt(const char *) const; + }; + + EXPORT(ClassA::Private::Private()); + EXPORT(ClassA::Private::~Private()); + EXPORT(void ClassA::Private::privmethod1(int)); + EXPORT(void ClassA::Private::privmethod2(int)); + + EXPORT(ClassA::Internal::Internal()); + EXPORT(ClassA::Internal::~Internal()); + EXPORT(void ClassA::Internal::internal_method1(char)); + EXPORT(void ClassA::Internal::internal_method2(char)); + + EXPORT(ClassA::ClassA()); + EXPORT(ClassA::~ClassA()); + EXPORT(void ClassA::generate_vt(const char *) const); +}; + +class ClassB { +public: + ClassB(); + virtual ~ClassB(); + virtual void generate_vt(const char *) const; +}; + +EXPORT(ClassB::ClassB()); +EXPORT(ClassB::~ClassB()); +EXPORT(void ClassB::generate_vt(const char *) const); + +class ClassC { +public: + ClassC(); + virtual ~ClassC(); + virtual void generate_vt(const char *) const; +}; + +EXPORT(ClassC::ClassC()); +EXPORT(ClassC::~ClassC()); +EXPORT(void ClassC::generate_vt(const char *) const); + +namespace NSB { + class ClassD : public NSA::ClassA, public ClassB, public ClassC { + public: + ClassD(); + virtual ~ClassD(); + virtual void generate_vt(const char *) const override; + }; + + EXPORT(ClassD::ClassD()); + EXPORT(ClassD::~ClassD()); + EXPORT(void ClassD::generate_vt(const char *) const); + + class Symver { + public: + Symver(); + ~Symver(); + + void symver_method1(); + void symver_method2(); + }; + + EXPORT(Symver::Symver()); + EXPORT(Symver::~Symver()); + EXPORT(void Symver::symver_method1()); + EXPORT(void Symver::symver_method2()); + + class SymverOptional { + public: + SymverOptional(); + ~SymverOptional(); + }; + + EXPORT(SymverOptional::SymverOptional()); + EXPORT(SymverOptional::~SymverOptional()); +}; diff --git a/scripts/t/Dpkg_Shlibs/patterns.map b/scripts/t/Dpkg_Shlibs/patterns.map new file mode 100644 index 0000000..ace30b7 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/patterns.map @@ -0,0 +1,9 @@ +SYMVER_1 { + global: + _ZN3NSB6Symver*; +}; + +SYMVEROPT_2 { + global: + _ZN3NSB14SymverOptional*; +}; diff --git a/scripts/t/Dpkg_Shlibs/patterns.symbols b/scripts/t/Dpkg_Shlibs/patterns.symbols new file mode 100644 index 0000000..bacf799 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/patterns.symbols @@ -0,0 +1,47 @@ +libpatterns.so.1 libpatterns1 #MINVER# + (c++|regex|optional)NSA::ClassA::Private(::.*)?@Base 1.private + (c++)NSB::Symver::symver_method2()@SYMVER_1 1.method2 + (symver|optional)SYMVEROPT_2 2 + SYMVEROPT_2@SYMVEROPT_2 2 + (c++|symver)SYMVER_1 1.generic + SYMVER_1@SYMVER_1 1 + (regex|c++)^_Z(T[ISV])?N3NSA6ClassA8Internal.*@Base$ 1.internal + _ZN3NSA6ClassAC1Ev@Base 1 + _ZN3NSA6ClassAC2Ev@Base 1 + _ZN3NSA6ClassAD0Ev@Base 1 + _ZN3NSA6ClassAD1Ev@Base 1 + _ZN3NSA6ClassAD2Ev@Base 1 + _ZN3NSB6ClassDC1Ev@Base 1 + _ZN3NSB6ClassDC2Ev@Base 1 + _ZN3NSB6ClassDD0Ev@Base 1 + _ZN3NSB6ClassDD1Ev@Base 1 + _ZN3NSB6ClassDD2Ev@Base 1 + _ZN3NSB6Symver14symver_method1Ev@SYMVER_1 1.method1 + _ZN6ClassBC1Ev@Base 1 + _ZN6ClassBC2Ev@Base 1 + _ZN6ClassBD0Ev@Base 1 + _ZN6ClassBD1Ev@Base 1 + _ZN6ClassBD2Ev@Base 1 + _ZN6ClassCC1Ev@Base 1 + _ZN6ClassCC2Ev@Base 1 + _ZN6ClassCD0Ev@Base 1 + _ZN6ClassCD1Ev@Base 1 + _ZN6ClassCD2Ev@Base 1 + _ZNK3NSA6ClassA11generate_vtEPKc@Base 1 + _ZNK3NSB6ClassD11generate_vtEPKc@Base 1 + _ZNK6ClassB11generate_vtEPKc@Base 1 + _ZNK6ClassC11generate_vtEPKc@Base 1 + _ZTI6ClassB@Base 1 + _ZTI6ClassC@Base 1 + _ZTIN3NSA6ClassAE@Base 1 + _ZTIN3NSB6ClassDE@Base 1 + _ZTS6ClassB@Base 1 + _ZTS6ClassC@Base 1 + _ZTSN3NSA6ClassAE@Base 1 + _ZTSN3NSB6ClassDE@Base 1 + _ZTV6ClassB@Base 1 + _ZTV6ClassC@Base 1 + _ZTVN3NSA6ClassAE@Base 1 + _ZTVN3NSB6ClassDE@Base 1 + (c++)"non-virtual thunk to NSB::ClassD::generate_vt(char const*) const@Base" 1 + (c++)"non-virtual thunk to NSB::ClassD::~ClassD()@Base" 1 diff --git a/scripts/t/Dpkg_Shlibs/spacesyms-c-gen.pl b/scripts/t/Dpkg_Shlibs/spacesyms-c-gen.pl new file mode 100755 index 0000000..48434f4 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/spacesyms-c-gen.pl @@ -0,0 +1,37 @@ +#!/usr/bin/perl +# +# spacesyms-c-gen.pl +# +# Output a C file that contains symbols matching the shell glob +# sym{defaultver,longver,shortver}{nospace,SPACE}{default,hidden,protected,internal} +# with symbol visibility matching the final element and at least one relocation +# against each symbol. +# +# When used together with spacesyms-o-map.pl and spacesyms.map, makes a shared +# object that contains symbols that covers all cases of: +# +# 1) has a short, long or Base version, +# 2) has or does not have a space in the symbol name, +# 3) default, hidden, protected or internal visibility. + +use strict; +use warnings; + +my @symbols; + +foreach my $version (qw(defaultver longver shortver)) { + foreach my $space (qw(nospace SPACE)) { + foreach my $visibility (qw(default hidden protected internal)) { + my $symbol = "sym$version$space$visibility"; + push @symbols, $symbol; + print "void $symbol(void) __attribute__((visibility(\"$visibility\")));\n"; + print "void $symbol(void) {}\n"; + } + } +} + +print "void (*funcs[])(void) = {\n"; +foreach my $symbol (@symbols) { + print "$symbol,\n"; +} +print "};\n"; diff --git a/scripts/t/Dpkg_Shlibs/spacesyms-o-map.pl b/scripts/t/Dpkg_Shlibs/spacesyms-o-map.pl new file mode 100755 index 0000000..5081de4 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/spacesyms-o-map.pl @@ -0,0 +1,25 @@ +#!/usr/bin/perl +# +# spacesyms-o-map.pl INPUT OUTPUT +# +# Copy the object file INPUT to OUTPUT, redefining any symbol in INPUT that +# contains "SPACE" in its name to contain "SPA CE" instead. + +use strict; +use warnings; + +my ($input, $output) = @ARGV; +my @cmds = ('objcopy'); + +open my $nm, '-|', 'nm', $input or die "cannot run nm: $!"; +while (<$nm>) { + next if not m/SPACE/; + chomp; + my $x = (split / /, $_, 3)[2]; + my $y = $x =~ s/SPACE/SPA CE/r; + push @cmds, "--redefine-sym=$x=$y"; +} +close $nm; + +push @cmds, $input, $output; +exec { $cmds[0] } @cmds; diff --git a/scripts/t/Dpkg_Shlibs/spacesyms.map b/scripts/t/Dpkg_Shlibs/spacesyms.map new file mode 100644 index 0000000..0053446 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/spacesyms.map @@ -0,0 +1,7 @@ +V1 { + global: symshortver*; +}; + +VERY_LONG_VERSION_1 { + global: symlongver*; +} V1; diff --git a/scripts/t/Dpkg_Shlibs/symbols.fake-1 b/scripts/t/Dpkg_Shlibs/symbols.fake-1 new file mode 100644 index 0000000..f0a230e --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/symbols.fake-1 @@ -0,0 +1,3 @@ + symbol1_fake1@Base 1.0 + symbol2_fake1@Base 1.0 + symbol3_fake1@Base 1.0 diff --git a/scripts/t/Dpkg_Shlibs/symbols.fake-2 b/scripts/t/Dpkg_Shlibs/symbols.fake-2 new file mode 100644 index 0000000..3eed289 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/symbols.fake-2 @@ -0,0 +1,9 @@ +#include "symbols.include-2" +# This is just a comment +libfake.so.1 #PACKAGE# #MINVER# +* Build-Depends-Package: libfake-dev +# The alternate dependency is below +| libvirtualfake + symbol1_fake2@Base 1.0 1 + symbol2_fake2@Base 1.0 + symbol3_fake2@Base 1.1 diff --git a/scripts/t/Dpkg_Shlibs/symbols.fake-3 b/scripts/t/Dpkg_Shlibs/symbols.fake-3 new file mode 100644 index 0000000..576bf22 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/symbols.fake-3 @@ -0,0 +1,5 @@ +# if included, this file will change the current "object" parsed +# after the include it will be libdivert.so.1 instead of the object +# of the including symbols file +libdivert.so.1 libdivert1 #MINVER# + divert_something@Base 1.0 diff --git a/scripts/t/Dpkg_Shlibs/symbols.include-1 b/scripts/t/Dpkg_Shlibs/symbols.include-1 new file mode 100644 index 0000000..b524e78 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/symbols.include-1 @@ -0,0 +1,9 @@ +libfake.so.1 libfake1 #MINVER# + symbol1_fake1@Base 0.9 + symbol2_fake1@Base 0.9 + symbol_before@Base 0.9 +#include "symbols.fake-1" + symbol3_fake1@Base 0 + symbol_after@Base 1.1 +#include "symbols.fake-3" + symbol_in_libdivert@Base 1.0~beta1 diff --git a/scripts/t/Dpkg_Shlibs/symbols.include-2 b/scripts/t/Dpkg_Shlibs/symbols.include-2 new file mode 100644 index 0000000..0cc18fa --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/symbols.include-2 @@ -0,0 +1,3 @@ +libfake.so.1 libfake1 + symbol1_fake2@Base 0.5 +#include "symbols.fake-2" diff --git a/scripts/t/Dpkg_Shlibs/symbols.include-3 b/scripts/t/Dpkg_Shlibs/symbols.include-3 new file mode 100644 index 0000000..8c8f429 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/symbols.include-3 @@ -0,0 +1,5 @@ +libbasictags.so.2 libbasictags2 + symbol0_before@Base 1.0 +(optional|random tag=random value)#include "symbols.fake-1" + symbol9_after@Base 1.0 +(optional=from parent|t=v)#include "basictags.symbols" diff --git a/scripts/t/Dpkg_Shlibs/symbols.internal b/scripts/t/Dpkg_Shlibs/symbols.internal new file mode 100644 index 0000000..a6d3dd6 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/symbols.internal @@ -0,0 +1,4 @@ + .gomp_critical_user_foo@Base 2.0 + .gomp_critical_user_bar@Base 2.0 + __aeabi_lcmp@GCC_3.0 3.0 + __aeabi_unknown@GCC_4.0 4.0 diff --git a/scripts/t/Dpkg_Shlibs/symbols.internal-allow b/scripts/t/Dpkg_Shlibs/symbols.internal-allow new file mode 100644 index 0000000..ea40815 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/symbols.internal-allow @@ -0,0 +1,3 @@ +libinternal.so.0 libinternal0 #MINVER# +(allow-internal)#include "symbols.internal" + symbol@Base 1.0 diff --git a/scripts/t/Dpkg_Shlibs/symbols.internal-allow-groups b/scripts/t/Dpkg_Shlibs/symbols.internal-allow-groups new file mode 100644 index 0000000..e4492ec --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/symbols.internal-allow-groups @@ -0,0 +1,4 @@ +libinternal.so.0 libinternal0 #MINVER# +* Allow-Internal-Symbol-Groups: aeabi gomp +#include "symbols.internal" + symbol@Base 1.0 diff --git a/scripts/t/Dpkg_Shlibs/symbols.internal-filter b/scripts/t/Dpkg_Shlibs/symbols.internal-filter new file mode 100644 index 0000000..26e902f --- /dev/null +++ b/scripts/t/Dpkg_Shlibs/symbols.internal-filter @@ -0,0 +1,3 @@ +libinternal.so.0 libinternal0 #MINVER# +#include "symbols.internal" + symbol@Base 1.0 diff --git a/scripts/t/Dpkg_Shlibs_Cppfilt.t b/scripts/t/Dpkg_Shlibs_Cppfilt.t new file mode 100644 index 0000000..6a76977 --- /dev/null +++ b/scripts/t/Dpkg_Shlibs_Cppfilt.t @@ -0,0 +1,90 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More; +use Test::Dpkg qw(:needs); + +test_needs_command('c++filt'); + +plan tests => 124; + +use_ok('Dpkg::Shlibs::Cppfilt'); + +# Simple C++ demangling tests +is ( cppfilt_demangle_cpp('_ZNSt10istrstreamC1EPKcl'), + 'std::istrstream::istrstream(char const*, long)', + 'demangle symbol' ); +is ( cppfilt_demangle_cpp('_ZNSt10istrstreamC1EPKcl@Base'), + 'std::istrstream::istrstream(char const*, long)@Base', + 'demangle symbol with extra postfix' ); +is ( cppfilt_demangle_cpp('foobar _ZNSt10istrstreamC1EPKcl@Base'), + 'foobar std::istrstream::istrstream(char const*, long)@Base', + 'demangle symbol with garbage around it' ); +is ( cppfilt_demangle_cpp('FoobarInvalidSymbol'), undef, + 'non-demanglable string' ); + +# Mass C++ demangling. Checking if c++filt does not hang and cppfilt_demangle() +# immediately provides a correct answer to the caller (i.e. no buffering). +my @mangledtext = split(/\n+/s, <<'END'); +0000000000000000 DF *UND* 0000000000000000 GCC_3.0 _Unwind_SetIP +0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 __towlower_l +0000000000000000 DO *UND* 0000000000000000 GLIBC_2.2.5 stdout +0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 wmemset +0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 fflush +0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 getc +0000000000000000 w D *UND* 0000000000000000 pthread_join +00000000000cfc22 g DO .rodata 0000000000000001 GLIBCXX_3.4 _ZNSt14numeric_limitsIyE17has_signaling_NaNE +0000000000088d80 w DF .text 0000000000000064 GLIBCXX_3.4 _ZNSt11__timepunctIcEC2Em +00000000002f40a0 w DO .data.rel.ro 0000000000000020 GLIBCXX_3.4 _ZTTSt14basic_ifstreamIwSt11char_traitsIwEE +000000000005a5f0 g DF .text 0000000000000063 GLIBCXX_3.4.11 _ZNVSt9__atomic011atomic_flag5clearESt12memory_order +00000000000bdc20 w DF .text 0000000000000024 GLIBCXX_3.4 _ZNSbIwSt11char_traitsIwESaIwEEC1EPKwmRKS1_ +0000000000063850 g DF .text 0000000000000062 GLIBCXX_3.4 _ZNSt5ctypeIwED2Ev +00000000000898b0 w DF .text 0000000000000255 GLIBCXX_3.4 _ZNKSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecPK2tmPKcSB_ + +00000000000bff30 g DF .text 0000000000000019 _ZNSt18condition_variable10notify_oneEv@GLIBCXX_3.4.11 +00000000000666a0 g DF .text 000000000000003f _ZNKSt3tr14hashIRKSbIwSt11char_traitsIwESaIwEEEclES6_@GLIBCXX_3.4.10 +00000000002f6160 w DO .data.rel.ro 0000000000000050 _ZTTSt18basic_stringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 +END + +my @demangledtext = split(/\n+/s, <<'END'); +0000000000000000 DF *UND* 0000000000000000 GCC_3.0 _Unwind_SetIP +0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 __towlower_l +0000000000000000 DO *UND* 0000000000000000 GLIBC_2.2.5 stdout +0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 wmemset +0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 fflush +0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 getc +0000000000000000 w D *UND* 0000000000000000 pthread_join +00000000000cfc22 g DO .rodata 0000000000000001 GLIBCXX_3.4 std::numeric_limits<unsigned long long>::has_signaling_NaN +0000000000088d80 w DF .text 0000000000000064 GLIBCXX_3.4 std::__timepunct<char>::__timepunct(unsigned long) +00000000002f40a0 w DO .data.rel.ro 0000000000000020 GLIBCXX_3.4 VTT for std::basic_ifstream<wchar_t, std::char_traits<wchar_t> > +000000000005a5f0 g DF .text 0000000000000063 GLIBCXX_3.4.11 std::__atomic0::atomic_flag::clear(std::memory_order) volatile +00000000000bdc20 w DF .text 0000000000000024 GLIBCXX_3.4 std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string(wchar_t const*, unsigned long, std::allocator<wchar_t> const&) +0000000000063850 g DF .text 0000000000000062 GLIBCXX_3.4 std::ctype<wchar_t>::~ctype() +00000000000898b0 w DF .text 0000000000000255 GLIBCXX_3.4 std::time_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::put(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, tm const*, char const*, char const*) const + +00000000000bff30 g DF .text 0000000000000019 std::condition_variable::notify_one()@GLIBCXX_3.4.11 +00000000000666a0 g DF .text 000000000000003f std::tr1::hash<std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&>::operator()(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) const@GLIBCXX_3.4.10 +00000000002f6160 w DO .data.rel.ro 0000000000000050 VTT for std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >@GLIBCXX_3.4 +END + +for my $try (1 .. 7) { + for my $i (0 .. $#mangledtext) { + my $demangled = cppfilt_demangle_cpp($mangledtext[$i]) || $mangledtext[$i]; + is($demangled, $demangledtext[$i], "mass c++ demangling (${try}x" . (${i} + 1) . ')'); + } +} diff --git a/scripts/t/Dpkg_Source_Archive.t b/scripts/t/Dpkg_Source_Archive.t new file mode 100644 index 0000000..0d8d167 --- /dev/null +++ b/scripts/t/Dpkg_Source_Archive.t @@ -0,0 +1,122 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 4; +use Test::Dpkg qw(:paths); + +use File::Spec; +use File::Path qw(make_path); + +BEGIN { + use_ok('Dpkg::Source::Archive'); +} + +use Dpkg; +use Dpkg::File; + +my $tmpdir = test_get_temp_path(); + +sub test_path_escape +{ + my $name = shift; + + my $treedir = File::Spec->rel2abs("$tmpdir/$name-tree"); + my $overdir = File::Spec->rel2abs("$tmpdir/$name-overlay"); + my $outdir = "$tmpdir/$name-out"; + my $expdir = "$tmpdir/$name-exp"; + + # This is the base directory, where we are going to be extracting stuff + # into, which include traps. + make_path("$treedir/subdir-a"); + file_touch("$treedir/subdir-a/file-a"); + file_touch("$treedir/subdir-a/file-pre-a"); + make_path("$treedir/subdir-b"); + file_touch("$treedir/subdir-b/file-b"); + file_touch("$treedir/subdir-b/file-pre-b"); + symlink File::Spec->abs2rel($outdir, $treedir), "$treedir/symlink-escape"; + symlink File::Spec->abs2rel("$outdir/nonexistent", $treedir), "$treedir/symlink-nonexistent"; + symlink "$treedir/file", "$treedir/symlink-within"; + file_touch("$treedir/supposed-dir"); + + # This is the overlay directory, which we'll pack and extract over the + # base directory. + make_path($overdir); + make_path("$overdir/subdir-a/aa"); + file_dump("$overdir/subdir-a/aa/file-aa", 'aa'); + file_dump("$overdir/subdir-a/file-a", 'a'); + make_path("$overdir/subdir-b/bb"); + file_dump("$overdir/subdir-b/bb/file-bb", 'bb'); + file_dump("$overdir/subdir-b/file-b", 'b'); + make_path("$overdir/symlink-escape"); + file_dump("$overdir/symlink-escape/escaped-file", 'escaped'); + file_dump("$overdir/symlink-nonexistent", 'nonexistent'); + make_path("$overdir/symlink-within"); + make_path("$overdir/supposed-dir"); + file_dump("$overdir/supposed-dir/supposed-file", 'something'); + + # Generate overlay tar. + system($Dpkg::PROGTAR, '-cf', "$overdir.tar", '-C', $overdir, qw( + subdir-a subdir-b + symlink-escape/escaped-file symlink-nonexistent symlink-within + supposed-dir + )) == 0 + or die "cannot create overlay tar archive\n"; + + # This is the expected directory, which we'll be comparing against. + make_path($expdir); + system('cp', '-a', $overdir, $expdir) == 0 + or die "cannot copy overlay hierarchy into expected directory\n"; + + # Store the expected and out reference directories into a tar to compare + # its structure against the result reference. + system($Dpkg::PROGTAR, '-cf', "$expdir.tar", '-C', $overdir, qw( + subdir-a subdir-b + symlink-escape/escaped-file symlink-nonexistent symlink-within + supposed-dir + ), '-C', $treedir, qw( + subdir-a/file-pre-a + subdir-b/file-pre-b + )) == 0 + or die "cannot create expected tar archive\n"; + + # This directory is supposed to remain empty, anything inside implies a + # directory traversal. + make_path($outdir); + + my $warnseen; + local $SIG{__WARN__} = sub { $warnseen = $_[0] }; + + # Perform the extraction. + my $tar = Dpkg::Source::Archive->new(filename => "$overdir.tar"); + $tar->extract($treedir, in_place => 1); + + # Store the result into a tar to compare its structure against a reference. + system($Dpkg::PROGTAR, '-cf', "$treedir.tar", '-C', $treedir, '.'); + + # Check results + ok(length $warnseen && $warnseen =~ m/points outside source root/, + 'expected warning seen'); + ok(system($Dpkg::PROGTAR, '--compare', '-f', "$expdir.tar", '-C', $treedir) == 0, + 'expected directory matches'); + ok(! -e "$outdir/escaped-file", + 'expected output directory is empty, directory traversal'); +} + +test_path_escape('in-place'); + +# TODO: Add actual test cases. diff --git a/scripts/t/Dpkg_Source_Format.t b/scripts/t/Dpkg_Source_Format.t new file mode 100644 index 0000000..68aa04e --- /dev/null +++ b/scripts/t/Dpkg_Source_Format.t @@ -0,0 +1,63 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 14; + +BEGIN { + use_ok('Dpkg::Source::Format'); +} + +my $format = Dpkg::Source::Format->new(); +my @format_parts; +my $format_string; + +$format->set('4.3 (variant)'); +@format_parts = $format->get(); +is_deeply(\@format_parts, [ qw(4 3 variant) ], 'decomposition of format'); +$format_string = $format->get(); +ok($format_string eq '4.3 (variant)', 'function stringification of format'); +$format_string = "$format"; +ok($format_string eq '4.3 (variant)', 'operator stringification of format'); + +$format->set('5.5'); +$format_string = $format->get(); +ok($format_string eq '5.5', 'missing variant'); + +$format->set('6'); +$format_string = $format->get(); +ok($format_string eq '6.0', 'implied minor'); + +my %format_bogus = ( + 'a' => 'require numerical major', + '7.a' => 'require numerical minor', + '.5' => 'require non-empty major', + '7.' => 'require non-empty minor', + '7.0 ()' => 'require non-empty variant', + '7.0 ( )' => 'require non-space variant', + '7.0 (VARIANT)' => 'require lower-case variant', + '7.6.5' => 'excess version part', +); + +foreach my $format_bogus (sort keys %format_bogus) { + eval { + $format->set($format_bogus); + }; + ok($@, $format_bogus{$format_bogus}); +}; + +# TODO: Add actual test cases. diff --git a/scripts/t/Dpkg_Source_Functions.t b/scripts/t/Dpkg_Source_Functions.t new file mode 100644 index 0000000..3a3d5b9 --- /dev/null +++ b/scripts/t/Dpkg_Source_Functions.t @@ -0,0 +1,25 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 1; + +BEGIN { + use_ok('Dpkg::Source::Functions'); +} + +# TODO: Add actual test cases. diff --git a/scripts/t/Dpkg_Source_Package.t b/scripts/t/Dpkg_Source_Package.t new file mode 100644 index 0000000..509e422 --- /dev/null +++ b/scripts/t/Dpkg_Source_Package.t @@ -0,0 +1,62 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More; +use Test::Dpkg qw(:paths :needs); + +use File::Compare; + +use Dpkg::ErrorHandling; +use Dpkg::OpenPGP::ErrorCodes; + +test_needs_openpgp_backend(); + +plan tests => 6; + +use_ok('Dpkg::Source::Package'); + +report_options(quiet_warnings => 1); + +my $datadir = test_get_data_path(); +my $tmpdir = test_get_temp_path(); +my $ascfile; + +my $p = Dpkg::Source::Package->new(); + +$ascfile = "$tmpdir/package_1.0.orig.tar.enoent"; +is($p->armor_original_tarball_signature("$datadir/nonexistent", $ascfile), + undef, 'no conversion of inexistent file'); + +$ascfile = "$tmpdir/package_1.0.orig.tar.sig2asc"; +is($p->armor_original_tarball_signature("$datadir/package_1.0.orig.tar.sig", $ascfile), + OPENPGP_OK, 'conversion from binary sig to armored asc'); + +ok(compare($ascfile, "$datadir/package_1.0.orig.tar.asc") == 0, + 'binary signature converted to OpenPGP ASCII Armor'); + +# Grab the output messages. +eval { + $ascfile = "$tmpdir/package_1.0.orig.tar.asc2asc"; + is($p->armor_original_tarball_signature("$datadir/package_1.0.orig.tar.asc", $ascfile), + OPENPGP_OK, 'copy instead of converting already armored input'); +}; + +ok(compare($ascfile, "$datadir/package_1.0.orig.tar.asc") == 0, + 'OpenPGP ASCII Armor copied to destination'); + +# TODO: Add actual test cases. diff --git a/scripts/t/Dpkg_Source_Package/package_1.0.orig.tar b/scripts/t/Dpkg_Source_Package/package_1.0.orig.tar new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/scripts/t/Dpkg_Source_Package/package_1.0.orig.tar diff --git a/scripts/t/Dpkg_Source_Package/package_1.0.orig.tar.asc b/scripts/t/Dpkg_Source_Package/package_1.0.orig.tar.asc new file mode 100644 index 0000000..06f2ab0 --- /dev/null +++ b/scripts/t/Dpkg_Source_Package/package_1.0.orig.tar.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEETz509DYFDBD1aWV0uXK/PqSuV6MFAlnijuMACgkQuXK/PqSu +V6Oiuw/+P0+5BMH/WfsyhDrykF90tp2q6+eQvbgny8Mo1SJT647cS0bXFrZqd1Zr +22hFouKLbbqmJVm7GqIyWzg6mWvRJ85tvKMhwaUHiNKBrwOguw6crk8TdRidvS1p +m7E70wYdoPGvLt0Sr7nDWyaj82r3QkqTWTMxiD9jD4Z3w5Ztz08rpho6CJcGcAlv +09WGRVo+AiQLDRT70T7598lilHviFNGJdC9sVOrkEyFVDJZirnTvqXgqTJAy5Lve +DjTnfYAzmivtsQUXkYIj31XWLsiFa5mfpl6FSmFUSBPXALO++sZrL+mQZoUqnBv/ +bxCg3RYbPA6dpZ9IB/gyAvvEOEECeA4v5gDqGn67FeZsALPOEhvAYclkMtLOQBxr +sJD9GPCQtT2QfObmaUlqabXASNjzguayprh+a8CJChyBKWSvn6LoSdsBzesPT/bh +DJenc5M9jvIVShiwqQYCdYotebdKYDIvelblz0TbaTs5RZNGrizgj4Mrl0CaKVHs +51M8Vpb+w1TM+jm3b+5Na+v9TuS0TxGKI1FTyfjZMjF92AF3A13KanSWMg+37eE1 +R1R4pPuJ2s4xYULQNh+BTHlrGso43nxzc2gkJbsPRa6n3fZFRVdYfkIJgv4kzaQD +Lgsnhzrz1onBWvfnFWlJaRZ/ti4/3EEHAFvt25ZLMyJC2WOCG4I= +=N2cG +-----END PGP SIGNATURE----- diff --git a/scripts/t/Dpkg_Source_Package/package_1.0.orig.tar.sig b/scripts/t/Dpkg_Source_Package/package_1.0.orig.tar.sig Binary files differnew file mode 100644 index 0000000..a15acec --- /dev/null +++ b/scripts/t/Dpkg_Source_Package/package_1.0.orig.tar.sig diff --git a/scripts/t/Dpkg_Source_Patch.t b/scripts/t/Dpkg_Source_Patch.t new file mode 100644 index 0000000..fb64fe6 --- /dev/null +++ b/scripts/t/Dpkg_Source_Patch.t @@ -0,0 +1,72 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 10; +use Test::Dpkg qw(:paths); + +use File::Path qw(make_path); + +BEGIN { + use_ok('Dpkg::Source::Patch'); +} + +my $datadir = test_get_data_path(); +my $tmpdir = test_get_temp_path(); + +sub test_patch_escape { + my ($name, $symlink, $patchname, $desc) = @_; + + make_path("$tmpdir/$name-tree"); + make_path("$tmpdir/$name-out"); + symlink "../$name-out", "$tmpdir/$name-tree/$symlink"; + + my $patch = Dpkg::Source::Patch->new(filename => "$datadir/$patchname"); + eval { + $patch->apply("$tmpdir/$name-tree", verbose => 0); + }; + ok(rmdir "$tmpdir/$name-out", $desc); +} + +# This is CVE-2014-0471 with GNU patch >= 2.7 +test_patch_escape('c-style-parsed', "\tmp", 'c-style.patch', + 'patch(1) prevents escape using known c-style encoded filename'); + +# This is CVE-2014-0471 with GNU patch < 2.7 +test_patch_escape('c-style-unknown', '\\tmp', 'c-style.patch', + 'patch(1) prevents escape using unknown c-style encoded filename'); + +# This is CVE-2014-3865 +test_patch_escape('index-alone', 'symlink', 'index-alone.patch', + 'patch(1) prevents escape using Index: w/o ---/+++ header'); +test_patch_escape('index-+++', 'symlink', 'index-+++.patch', + 'patch(1) prevents escape using Index: w/ only +++ header'); +test_patch_escape('index-inert', 'symlink', 'index-inert.patch', + 'patch(1) should not fail to apply using an inert Index:'); +ok(-e "$tmpdir/index-inert-tree/inert-file", + 'patch(1) applies correctly with inert Index:'); + +# This is CVE-2014-3864 +test_patch_escape('partial', 'symlink', 'partial.patch', + 'patch(1) prevents escape using partial +++ header'); + +test_patch_escape('ghost-hunk', 'symlink', 'ghost-hunk.patch', + 'patch(1) prevents escape using a disabling hunk'); + +# This is CVE-2017-8283 +test_patch_escape('indent-header', 'symlink', 'indent-header.patch', + 'patch(1) prevents escape using indented hunks'); diff --git a/scripts/t/Dpkg_Source_Patch/c-style.patch b/scripts/t/Dpkg_Source_Patch/c-style.patch new file mode 100644 index 0000000..290a640 --- /dev/null +++ b/scripts/t/Dpkg_Source_Patch/c-style.patch @@ -0,0 +1,4 @@ +--- /dev/null ++++ "b/\tmp/c-style" +@@ -0,0 +1 @@ ++Escaped diff --git a/scripts/t/Dpkg_Source_Patch/ghost-hunk.patch b/scripts/t/Dpkg_Source_Patch/ghost-hunk.patch new file mode 100644 index 0000000..32c3efe --- /dev/null +++ b/scripts/t/Dpkg_Source_Patch/ghost-hunk.patch @@ -0,0 +1,7 @@ +--- a/disable/partial-file ++++ b/disable/partial-file +@@ -0,0 +1,1 @@disable ++++ b/symlink/hunk-file +--- a/symlink/hunk-file +@@ -0,0 +1,1 @@ ++Escaped diff --git a/scripts/t/Dpkg_Source_Patch/indent-header.patch b/scripts/t/Dpkg_Source_Patch/indent-header.patch new file mode 100644 index 0000000..4bef008 --- /dev/null +++ b/scripts/t/Dpkg_Source_Patch/indent-header.patch @@ -0,0 +1,9 @@ + --- /dev/null + +++ b/symlink/index-file + @@ -0,0 +1,1 @@ + +Escaped + +--- /dev/null ++++ b/dummy-file +@@ -0,0 +1,1 @@ ++Dummy to make the code see a valid hunk diff --git a/scripts/t/Dpkg_Source_Patch/index-+++.patch b/scripts/t/Dpkg_Source_Patch/index-+++.patch new file mode 100644 index 0000000..4ebc23e --- /dev/null +++ b/scripts/t/Dpkg_Source_Patch/index-+++.patch @@ -0,0 +1,4 @@ +Index: index/symlink/index-file ++++ +@@ -0,0 +1,1 @@ ++Escaped diff --git a/scripts/t/Dpkg_Source_Patch/index-alone.patch b/scripts/t/Dpkg_Source_Patch/index-alone.patch new file mode 100644 index 0000000..904d3d1 --- /dev/null +++ b/scripts/t/Dpkg_Source_Patch/index-alone.patch @@ -0,0 +1,3 @@ +Index: index/symlink/index-file +@@ -0,0 +1,1 @@ ++Escaped diff --git a/scripts/t/Dpkg_Source_Patch/index-inert.patch b/scripts/t/Dpkg_Source_Patch/index-inert.patch new file mode 100644 index 0000000..5d16c7d --- /dev/null +++ b/scripts/t/Dpkg_Source_Patch/index-inert.patch @@ -0,0 +1,8 @@ +This could be a comment about the patch itself, where we could use an +Index: a/ header with /../ inside that could be interpreted as a +malicious pseudo-header, so we should not validate it, + +--- /dev/null ++++ b/inert-file +@@ -0,0 +1,1 @@ ++Inert diff --git a/scripts/t/Dpkg_Source_Patch/partial.patch b/scripts/t/Dpkg_Source_Patch/partial.patch new file mode 100644 index 0000000..0878858 --- /dev/null +++ b/scripts/t/Dpkg_Source_Patch/partial.patch @@ -0,0 +1,3 @@ ++++ b/symlink/partial-file +@@ -0,0 +1,1 @@ ++Escaped diff --git a/scripts/t/Dpkg_Source_Quilt.t b/scripts/t/Dpkg_Source_Quilt.t new file mode 100644 index 0000000..14169a3 --- /dev/null +++ b/scripts/t/Dpkg_Source_Quilt.t @@ -0,0 +1,36 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 2; +use Test::Dpkg qw(:paths); + +BEGIN { + use_ok('Dpkg::Source::Quilt'); +} + +my $datadir = test_get_data_path(); + +my $quilt; +my (@series_got, @series_exp); + +$quilt = Dpkg::Source::Quilt->new("$datadir/parse"); +@series_got = $quilt->series(); +@series_exp = qw(change-a.patch change-b.patch change-c.patch change-d.patch); +is_deeply(\@series_got, \@series_exp, 'Parsed series file matches ref'); + +# TODO: Add actual test cases. diff --git a/scripts/t/Dpkg_Source_Quilt/parse/debian/patches/series b/scripts/t/Dpkg_Source_Quilt/parse/debian/patches/series new file mode 100644 index 0000000..6d9fbf5 --- /dev/null +++ b/scripts/t/Dpkg_Source_Quilt/parse/debian/patches/series @@ -0,0 +1,9 @@ + # Comment-only line + change-a.patch -p1 + + # Blank line with comments + change-b.patch + change-c.patch -p1 + change-d.patch + +# End comment diff --git a/scripts/t/Dpkg_Substvars.t b/scripts/t/Dpkg_Substvars.t new file mode 100644 index 0000000..61ac027 --- /dev/null +++ b/scripts/t/Dpkg_Substvars.t @@ -0,0 +1,280 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 56; +use Test::Dpkg qw(:paths); + +use Dpkg (); +use Dpkg::Arch qw(get_host_arch); + +$ENV{DEB_BUILD_ARCH} = 'amd64'; +$ENV{DEB_HOST_ARCH} = 'amd64'; + +use_ok('Dpkg::Substvars'); + +my $datadir = test_get_data_path(); + +my $output; +my $expected; + +my $s = Dpkg::Substvars->new(); + +$s->load("$datadir/substvars1"); + +# simple value tests +is($s->get('var1'), 'Some value', 'var1'); +is($s->get('var2'), 'Some other value', 'var2'); +is($s->get('var3'), 'Yet another value', 'var3'); +is($s->get('var4'), undef, 'no var4'); +is($s->get('optional-var5'), 'Optionally used value', 'optional-var5'); + +# Set automatic variable +$s->set_as_auto('var_auto', 'auto'); +is($s->get('var_auto'), 'auto', 'get var_auto'); + +$expected = <<'VARS'; +optional-var5?=Optionally used value +var1=Some value +var2=Some other value +var3=Yet another value +VARS +is($s->output(), $expected, 'No automatic variables output'); + +# overriding +$s->set('var1', 'New value'); +is($s->get('var1'), 'New value', 'var1 updated'); + +# deleting +$s->delete('var3'); +is($s->get('var3'), undef, 'var3 deleted'); + +# default variables +is($s->get('Newline'), "\n", 'newline'); +is($s->get('Space'), ' ', 'space'); +is($s->get('Tab'), "\t", 'tab'); +is($s->get('dpkg:Version'), $Dpkg::PROGVERSION, 'dpkg version 1'); + +# special variables +is($s->get('Arch'), undef, 'no arch'); +$s->set_arch_substvars(); +is($s->get('Arch'), get_host_arch(), 'arch'); + +is($s->get('vendor:Id'), undef, 'no vendor id'); +is($s->get('vendor:Name'), undef, 'no vendor name'); +$s->set_vendor_substvars(); +is($s->get('vendor:Id'), 'debian', 'vendor id'); +is($s->get('vendor:Name'), 'Debian', 'vendor name'); + +is($s->get($_), undef, 'no ' . $_) for qw/binary:Version source:Version source:Upstream-Version/; +$s->set_version_substvars('1:2.3.4~5-6.7.8~nmu9', '1:2.3.4~5-6.7.8~nmu9+bin0'); +is($s->get('binary:Version'), '1:2.3.4~5-6.7.8~nmu9+bin0', 'binary:Version'); +is($s->get('source:Version'), '1:2.3.4~5-6.7.8~nmu9', 'source:Version'); +is($s->get('source:Upstream-Version'), '1:2.3.4~5', 'source:Upstream-Version'); +$s->set_version_substvars('2.3.4~5-6.7.8~nmu9+b1', '1:2.3.4~5-6.7.8~nmu9+b1'); +is($s->get('binary:Version'), '1:2.3.4~5-6.7.8~nmu9+b1', 'binary:Version'); +is($s->get('source:Version'), '2.3.4~5-6.7.8~nmu9', 'source:Version'); +is($s->get('source:Upstream-Version'), '2.3.4~5', 'source:Upstream-Version'); +$s->set_version_substvars('1:2.3.4~5-6.7.8~nmu9+b0'); +is($s->get('binary:Version'), '1:2.3.4~5-6.7.8~nmu9+b0', 'binary:Version'); +is($s->get('source:Version'), '1:2.3.4~5-6.7.8~nmu9', 'source:Version'); +is($s->get('source:Upstream-Version'), '1:2.3.4~5', 'source:Upstream-Version'); + +is($s->get($_), undef, 'no ' . $_) foreach qw(source:Synopsis source:Extended-Description); +$s->set_desc_substvars("short synopsis\nthis is the long\nextended text\n"); +is($s->get('source:Synopsis'), 'short synopsis', 'contents of source:Synopsis'); +is($s->get('source:Extended-Description'), "this is the long\nextended text\n", + 'contents of source:Extended-Description'); + +my %ctrl_fields = ( + 'Some-Field' => 'some-value', + 'Other-Field' => 'other-value', + 'Alter-Field' => 'alter-value', +); +is($s->get($_), undef, 'no ' . $_) foreach sort keys %ctrl_fields; +$s->set_field_substvars(\%ctrl_fields, 'ctrl'); +is($s->get('ctrl:Some-Field'), 'some-value', 'contents of ctrl:Some-Field'); +is($s->get('ctrl:Other-Field'), 'other-value', 'contents of ctrl:Other-Field'); +is($s->get('ctrl:Alter-Field'), 'alter-value', 'contents of ctrl:Alter-Field'); + +# Direct replace: few +is($s->substvars('This is a string ${var1} with variables ${binary:Version}'), + 'This is a string New value with variables 1:2.3.4~5-6.7.8~nmu9+b0', + 'direct replace, few times'); + +# Direct replace: many times (more than the recursive limit) +$s->set('dr', 'feed'); +is($s->substvars('${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}' . + '${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}' . + '${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}' . + '${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}' . + '${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}' . + '${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}'), + 'feedfeedfeedfeedfeedfeedfeedfeedfeedfeed' . + 'feedfeedfeedfeedfeedfeedfeedfeedfeedfeed' . + 'feedfeedfeedfeedfeedfeedfeedfeedfeedfeed' . + 'feedfeedfeedfeedfeedfeedfeedfeedfeedfeed' . + 'feedfeedfeedfeedfeedfeedfeedfeedfeedfeed' . + 'feedfeedfeedfeedfeedfeedfeedfeedfeedfeed', + 'direct replace, many times'); + +# Add a test prefix to error and warning messages. +$s->set_msg_prefix('test '); + +$output = q{}; +$SIG{__WARN__} = sub { $output .= $_[0] }; +is($s->substvars('This is a string with unknown variable ${blubb}'), + 'This is a string with unknown variable ', + 'substvars missing'); +delete $SIG{__WARN__}; +is($output, + 'Dpkg_Substvars.t: warning: test substitution variable ${blubb} used, but is not defined' . "\n", + 'missing variables warning'); + +# Recursive replace: Simple. +$s->set('rvar', 'recursive ${var1}'); +is($s->substvars('This is a string with ${rvar}'), + 'This is a string with recursive New value', + 'recursive replace simple'); + +# Recursive replace: Constructed variables. +$s->set('partref', 'recursive result'); +$s->set('part1', '${pa'); +$s->set('part2', 'rtr'); +$s->set('part3', 'ef}'); +is($s->substvars('Constructed ${part1}${part2}${part3} replace'), + 'Constructed recursive result replace', + 'recursive constructed variable'); + +# Recursive replace: Cycle. +$s->set('ref0', '${ref1}'); +$s->set('ref1', '${ref2}'); +$s->set('ref2', '${ref0}'); + +eval { + $s->substvars('Cycle reference ${ref0}'); + 1; +}; +$output = $@ // q{}; +is($output, + 'Dpkg_Substvars.t: error: test too many ${ref0} substitutions ' . + "(recursive?) in 'Cycle reference \${ref1}'\n", + 'recursive cyclic expansion is limited'); + +# Recursive replace: Billion laughs. +$s->set('ex0', ':)'); +$s->set('ex1', '${ex0}${ex0}${ex0}${ex0}${ex0}${ex0}${ex0}${ex0}${ex0}${ex0}'); +$s->set('ex2', '${ex1}${ex1}${ex1}${ex1}${ex1}${ex1}${ex1}${ex1}${ex1}${ex1}'); +$s->set('ex3', '${ex2}${ex2}${ex2}${ex2}${ex2}${ex2}${ex2}${ex2}${ex2}${ex2}'); +$s->set('ex4', '${ex3}${ex3}${ex3}${ex3}${ex3}${ex3}${ex3}${ex3}${ex3}${ex3}'); +$s->set('ex5', '${ex4}${ex4}${ex4}${ex4}${ex4}${ex4}${ex4}${ex4}${ex4}${ex4}'); +$s->set('ex6', '${ex5}${ex5}${ex5}${ex5}${ex5}${ex5}${ex5}${ex5}${ex5}${ex5}'); +$s->set('ex7', '${ex6}${ex6}${ex6}${ex6}${ex6}${ex6}${ex6}${ex6}${ex6}${ex6}'); +$s->set('ex8', '${ex7}${ex7}${ex7}${ex7}${ex7}${ex7}${ex7}${ex7}${ex7}${ex7}'); +$s->set('ex9', '${ex8}${ex8}${ex8}${ex8}${ex8}${ex8}${ex8}${ex8}${ex8}${ex8}'); + +eval { + $s->substvars('Billion laughs ${ex9}'); + 1; +}; +$output = $@ // q{}; +is($output, + 'Dpkg_Substvars.t: error: test too many ${ex1} substitutions ' . + "(recursive?) in 'Billion laughs :):):):):):):):):):):):):):)" . + ':):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)' . + ':):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)' . + ':):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)' . + ':):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)' . + ':):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)' . + ':):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)' . + ':):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)' . + ':):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)' . + ':):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)' . + ':):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)' . + ':):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)' . + ':):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)' . + ':):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)' . + ':):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)' . + ':):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)' . + ':):):):):):):):):):):):):):):):):):):):):):):):):):)' . + '${ex0}${ex0}${ex0}${ex0}${ex0}${ex0}${ex0}${ex0}${ex0}${ex0}' . + '${ex2}${ex2}${ex2}${ex2}${ex2}' . + '${ex3}${ex3}${ex3}${ex3}${ex3}${ex3}${ex3}${ex3}${ex3}' . + '${ex4}${ex4}${ex4}${ex4}${ex4}${ex4}${ex4}${ex4}${ex4}' . + '${ex5}${ex5}${ex5}${ex5}${ex5}${ex5}${ex5}${ex5}${ex5}' . + '${ex6}${ex6}${ex6}${ex6}${ex6}${ex6}${ex6}${ex6}${ex6}' . + '${ex7}${ex7}${ex7}${ex7}${ex7}${ex7}${ex7}${ex7}${ex7}' . + '${ex8}${ex8}${ex8}${ex8}${ex8}${ex8}${ex8}${ex8}${ex8}' . + "'\n", + 'recursive or exponential expansion is limited'); + +# Strange input +is($s->substvars('Nothing to $ ${substitute here}, is it ${}?, it ${is'), + 'Nothing to $ ${substitute here}, is it ${}?, it ${is', + 'substvars strange'); + +# Warnings about unused variables +$output = ''; +$SIG{__WARN__} = sub { $output .= $_[0] }; +$s->warn_about_unused(); +delete $SIG{__WARN__}; +is($output, + 'Dpkg_Substvars.t: warning: test substitution variable ${var2} unused, but is defined' . "\n", + 'unused variables warnings'); + +# Disable warnings for a certain variable +$s->set_as_used('var_used', 'used'); +$s->mark_as_used('var2'); +$output = ''; +$SIG{__WARN__} = sub { $output .= $_[0] }; +$s->warn_about_unused(); +delete $SIG{__WARN__}; +is($output, '', 'disabled unused variables warnings'); + +$s->delete('var_used'); + +# Variable filters +my $sf; + +$expected = <<'VARS'; +name3=Yet another value +name4=Name value +otherprefix:var7=Quux +var1=Some value +var2=Some other value +VARS +$sf = Dpkg::Substvars->new("$datadir/substvars2"); +$sf->filter(remove => sub { $_[0] =~ m/^prefix:/ }); +is($sf->output(), $expected, 'Filter remove variables'); + +$expected = <<'VARS'; +otherprefix:var7=Quux +prefix:var5=Foo +var1=Some value +var2=Some other value +VARS +$sf = Dpkg::Substvars->new("$datadir/substvars2"); +$sf->filter(keep => sub { $_[0] =~ m/var/ }); +is($sf->output(), $expected, 'Filter keep variables'); + +$expected = <<'VARS'; +prefix:name6=Bar +VARS +$sf = Dpkg::Substvars->new("$datadir/substvars2"); +$sf->filter(remove => sub { $_[0] =~ m/var/ }, + keep => sub { $_[0] =~ m/^prefix:/ }); +is($sf->output(), $expected, 'Filter keep and remove variables'); diff --git a/scripts/t/Dpkg_Substvars/substvars1 b/scripts/t/Dpkg_Substvars/substvars1 new file mode 100644 index 0000000..a2196c8 --- /dev/null +++ b/scripts/t/Dpkg_Substvars/substvars1 @@ -0,0 +1,10 @@ +var1=Some value +var2=Some other value +# the next line is empty + +# the next line has some spaces + + # this line has a late comment +var3=Yet another value +#var4=This is not set +optional-var5?=Optionally used value diff --git a/scripts/t/Dpkg_Substvars/substvars2 b/scripts/t/Dpkg_Substvars/substvars2 new file mode 100644 index 0000000..27d5944 --- /dev/null +++ b/scripts/t/Dpkg_Substvars/substvars2 @@ -0,0 +1,7 @@ +var1=Some value +var2=Some other value +name3=Yet another value +name4=Name value +prefix:var5=Foo +prefix:name6=Bar +otherprefix:var7=Quux diff --git a/scripts/t/Dpkg_Vendor.t b/scripts/t/Dpkg_Vendor.t new file mode 100644 index 0000000..121f620 --- /dev/null +++ b/scripts/t/Dpkg_Vendor.t @@ -0,0 +1,40 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 7; + +# Delete variables that can affect the tests. +delete $ENV{DEB_VENDOR}; + +use_ok('Dpkg::Vendor', qw(get_vendor_dir get_current_vendor get_vendor_object)); + +is(get_vendor_dir(), $ENV{DPKG_ORIGINS_DIR}, 'Check vendor dir'); + +my ($vendor, $obj); + +$vendor = get_current_vendor(); +is($vendor, 'Debian', 'Check current vendor name'); + +$obj = get_vendor_object(); +is(ref($obj), 'Dpkg::Vendor::Debian', 'Check current vendor object'); +$obj = get_vendor_object('Devuan'); +is(ref($obj), 'Dpkg::Vendor::Devuan', 'Check Devuan vendor object'); +$obj = get_vendor_object('gNewSense'); +is(ref($obj), 'Dpkg::Vendor::Debian', 'Check parent fallback vendor object'); +$obj = get_vendor_object('Ubuntu'); +is(ref($obj), 'Dpkg::Vendor::Ubuntu', 'Check specific vendor object'); diff --git a/scripts/t/Dpkg_Version.t b/scripts/t/Dpkg_Version.t new file mode 100644 index 0000000..1de7968 --- /dev/null +++ b/scripts/t/Dpkg_Version.t @@ -0,0 +1,214 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More; + +use IPC::Cmd qw(can_run); + +use Dpkg::ErrorHandling; +use Dpkg::IPC; +use Dpkg::Version; + +report_options(quiet_warnings => 1); + +my @tests = <DATA>; +my @ops = qw( + < << lt + <= le + = eq + >= ge + > >> gt +); + +plan tests => scalar(@tests) * (3 * scalar(@ops) + 4) + 27; + +my $have_dpkg = can_run('dpkg'); + +sub dpkg_vercmp { + my ($a, $cmp, $b) = @_; + my $stderr; + + spawn(exec => [ 'dpkg', '--compare-versions', '--', $a, $cmp, $b ], + error_to_string => \$stderr, wait_child => 1, nocheck => 1); + diag("dpkg --compare-versions error=$?: $stderr") if $? and $? != 256; + + return $? == 0; +} + +sub obj_vercmp { + my ($a, $cmp, $b) = @_; + return $a < $b if $cmp eq '<<'; + return $a lt $b if $cmp eq 'lt'; + return $a <= $b if $cmp eq '<=' or $cmp eq '<'; + return $a le $b if $cmp eq 'le'; + return $a == $b if $cmp eq '='; + return $a eq $b if $cmp eq 'eq'; + return $a >= $b if $cmp eq '>=' or $cmp eq '>'; + return $a ge $b if $cmp eq 'ge'; + return $a > $b if $cmp eq '>>'; + return $a gt $b if $cmp eq 'gt'; +} + +my $truth = { + '-1' => { + '<<' => 1, 'lt' => 1, + '<=' => 1, 'le' => 1, '<' => 1, + '=' => 0, 'eq' => 0, + '>=' => 0, 'ge' => 0, '>' => 0, + '>>' => 0, 'gt' => 0, + }, + '0' => { + '<<' => 0, 'lt' => 0, + '<=' => 1, 'le' => 1, '<' => 1, + '=' => 1, 'eq' => 1, + '>=' => 1, 'ge' => 1, '>' => 1, + '>>' => 0, 'gt' => 0, + }, + '1' => { + '<<' => 0, 'lt' => 0, + '<=' => 0, 'le' => 0, '<' => 0, + '=' => 0, 'eq' => 0, + '>=' => 1, 'ge' => 1, '>' => 1, + '>>' => 1, 'gt' => 1, + }, +}; + +# Handling of empty/invalid versions +my $empty = Dpkg::Version->new(''); +ok($empty eq '', "Dpkg::Version->new('') eq ''"); +ok($empty->as_string() eq '', "Dpkg::Version->new('')->as_string() eq ''"); +ok(!$empty->is_valid(), 'empty version is invalid'); +$empty = Dpkg::Version->new('-0'); +ok($empty eq '', "Dpkg::Version->new('-0') eq '-0'"); +ok($empty->as_string() eq '-0', "Dpkg::Version->new('-0')->as_string() eq '-0'"); +ok(!$empty->is_valid(), 'empty upstream version is invalid'); +$empty = Dpkg::Version->new('0:-0'); +ok($empty eq '0:-0', "Dpkg::Version->new('0:-0') eq '0:-0'"); +ok($empty->as_string() eq '0:-0', "Dpkg::Version->new('0:-0')->as_string() eq '0:-0'"); +ok(!$empty->is_valid(), 'empty upstream version with epoch is invalid'); +$empty = Dpkg::Version->new(':1.0'); +ok($empty eq ':1.0', "Dpkg::Version->new(':1.0') eq ':1.0'"); +ok($empty->as_string() eq ':1.0', "Dpkg::Version->new(':1.0')->as_string() eq ':1.0'"); +ok(!$empty->is_valid(), 'empty epoch is invalid'); +$empty = Dpkg::Version->new('1.0-'); +ok($empty eq '1.0-', "Dpkg::Version->new('1.0-') eq '1.0-'"); +ok($empty->as_string() eq '1.0-', "Dpkg::Version->new('1.0-')->as_string() eq '1.0-'"); +ok(!$empty->is_valid(), 'empty revision is invalid'); +my $ver = Dpkg::Version->new('10a:5.2'); +ok(!$ver->is_valid(), 'bad epoch is invalid'); +ok(!$ver, 'bool eval of invalid leads to false'); +ok($ver eq '10a:5.2', 'invalid still same string 1/2'); +$ver = Dpkg::Version->new('5.2@3-2'); +ok($ver eq '5.2@3-2', 'invalid still same string 2/2'); +ok(!$ver->is_valid(), 'illegal character is invalid'); +$ver = Dpkg::Version->new('foo5.2'); +ok(!$ver->is_valid(), 'version does not start with digit 1/2'); +$ver = Dpkg::Version->new('0:foo5.2'); +ok(!$ver->is_valid(), 'version does not start with digit 2/2'); + +# Native and non-native versions +$ver = Dpkg::Version->new('1.0'); +ok($ver->is_native(), 'upstream version is native'); +$ver = Dpkg::Version->new('1:1.0'); +ok($ver->is_native(), 'upstream version w/ epoch is native'); +$ver = Dpkg::Version->new('1:1.0:1.0'); +ok($ver->is_native(), 'upstream version w/ epoch and colon is native'); +$ver = Dpkg::Version->new('1.0-1'); +ok(!$ver->is_native(), 'upstream version w/ revision is not native'); +$ver = Dpkg::Version->new('1.0-1.0-1'); +ok(!$ver->is_native(), 'upstream version w/ dash and revision is not native'); + +# Comparisons +foreach my $case (@tests) { + my ($a, $b, $res) = split ' ', $case; + my $va = Dpkg::Version->new($a, check => 1); + my $vb = Dpkg::Version->new($b, check => 1); + + is("$va", $a, "String representation of Dpkg::Version($a) is $a"); + is("$vb", $b, "String representation of Dpkg::Version($b) is $b"); + + is(version_compare($a, $b), $res, "$a cmp $b => $res"); + is($va <=> $vb, $res, "Dpkg::Version($a) <=> Dpkg::Version($b) => $res"); + foreach my $op (@ops) { + my $norm_op = version_normalize_relation($op); + if ($truth->{$res}{$op}) { + ok(version_compare_relation($a, $norm_op, $b), "$a $op $b => true"); + ok(obj_vercmp($va, $op, $vb), "Dpkg::Version($a) $op Dpkg::Version($b) => true"); + + SKIP: { + skip 'dpkg not available', 1 if not $have_dpkg; + + ok(dpkg_vercmp($a, $op, $b), "dpkg --compare-versions -- $a $op $b => true"); + } + } else { + ok(!version_compare_relation($a, $norm_op, $b), "$a $op $b => false"); + ok(!obj_vercmp($va, $op, $vb), "Dpkg::Version($a) $op Dpkg::Version($b) => false"); + + SKIP: { + skip 'dpkg not available', 1 if not $have_dpkg; + + ok(!dpkg_vercmp($a, $op, $b), "dpkg --compare-versions -- $a $op $b => false"); + } + } + } +} + +__DATA__ +1.0-1 2.0-2 -1 +2.2~rc-4 2.2-1 -1 +2.2-1 2.2~rc-4 1 +1.0000-1 1.0-1 0 +1 0:1 0 +0 0:0-0 0 +2:2.5 1:7.5 1 +1:0foo 0foo 1 +0:0foo 0foo 0 +0foo 0foo 0 +0foo-0 0foo 0 +0foo 0foo-0 0 +0foo 0fo 1 +0foo-0 0foo+ -1 +0foo~1 0foo -1 +0foo~foo+Bar 0foo~foo+bar -1 +0foo~~ 0foo~ -1 +1~ 1 -1 +12345+that-really-is-some-ver-0 12345+that-really-is-some-ver-10 -1 +0foo-0 0foo-01 -1 +0foo.bar 0foobar 1 +0foo.bar 0foo1bar 1 +0foo.bar 0foo0bar 1 +0foo1bar-1 0foobar-1 -1 +0foo2.0 0foo2 1 +0foo2.0.0 0foo2.10.0 -1 +0foo2.0 0foo2.0.0 -1 +0foo2.0 0foo2.10 -1 +0foo2.1 0foo2.10 -1 +1.09 1.9 0 +1.0.8+nmu1 1.0.8 1 +3.11 3.10+nmu1 1 +0.9j-20080306-4 0.9i-20070324-2 1 +1.2.0~b7-1 1.2.0~b6-1 1 +1.011-1 1.06-2 1 +0.0.9+dfsg1-1 0.0.8+dfsg1-3 1 +4.6.99+svn6582-1 4.6.99+svn6496-1 1 +53 52 1 +0.9.9~pre122-1 0.9.9~pre111-1 1 +2:2.3.2-2+lenny2 2:2.3.2-2 1 +1:3.8.1-1 3.8.GA-1 1 +1.0.1+gpl-1 1.0.1-2 1 +1a 1000a -1 diff --git a/scripts/t/dpkg_buildpackage.t b/scripts/t/dpkg_buildpackage.t new file mode 100644 index 0000000..bfcd23f --- /dev/null +++ b/scripts/t/dpkg_buildpackage.t @@ -0,0 +1,244 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More; +use Test::Dpkg qw(:needs :paths test_neutralize_checksums); + +use File::Spec::Functions qw(rel2abs); +use File::Compare; +use File::Path qw(make_path); +use File::Copy; + +use Dpkg::File; +use Dpkg::IPC; +use Dpkg::BuildTypes; +use Dpkg::Substvars; + +test_needs_command('fakeroot'); + +plan tests => 17; + +my $srcdir = rel2abs($ENV{srcdir} || '.'); +my $datadir = "$srcdir/t/dpkg_buildpackage"; +my $tmpdir = test_get_temp_path(); + +$ENV{$_} = rel2abs($ENV{$_}) foreach qw(DPKG_DATADIR DPKG_ORIGINS_DIR); + +# Any parallelization from the parent should be ignored, we are testing +# the makefiles serially anyway. +delete $ENV{MAKEFLAGS}; + +# Delete variables that can affect the tests. +delete $ENV{SOURCE_DATE_EPOCH}; + +# Delete other variables that can affect the tests. +delete $ENV{$_} foreach grep { m/^DEB_/ } keys %ENV; + +# Set architecture variables to not require dpkg nor gcc. +$ENV{PATH} = "$srcdir/t/mock-bin:$ENV{PATH}"; + +chdir $tmpdir; + +my $tmpl_format = <<'TMPL_FORMAT'; +3.0 (native) +TMPL_FORMAT + +my $tmpl_changelog = <<'TMPL_CHANGELOG'; +${source-name} (${source-version}) ${suite}; urgency=${urgency} + + * Entry. Closes: #12345 + + -- ${maintainer} Thu, 30 Jun 2016 20:15:12 +0200 +TMPL_CHANGELOG + +my $tmpl_control = <<'TMPL_CONTROL'; +Source: ${source-name} +Section: ${source-section} +Priority: ${source-priority} +Maintainer: ${maintainer} + +Package: test-binary-all +Architecture: all +Description: architecture independent binary package + +Package: test-binary-any +Architecture: any +Description: architecture dependent binary package +TMPL_CONTROL + +my $tmpl_rules = <<'TMPL_RULES'; +#!/usr/bin/make -f + +DI := debian/${binary-name-all} +DA := debian/${binary-name-any} + +# fakeroot confuses ASAN link order check. +export ASAN_OPTIONS = verify_asan_link_order=0 + +clean: + rm -f debian/files + rm -rf $(DI) $(DA) + +build-indep: +build-arch: +build: build-indep build-arch + +binary-indep: build-indep + rm -rf $(DI) + mkdir -p $(DI)/DEBIAN + dpkg-gencontrol -P$(DI) -p${binary-name-all} + dpkg-deb --build $(DI) .. + +binary-arch: build-arch + rm -rf $(DA) + mkdir -p $(DA)/DEBIAN + dpkg-gencontrol -P$(DA) -p${binary-name-any} + dpkg-deb --build $(DA) .. + +binary: binary-indep binary-arch + +.PHONY: clean build-indep build-arch build binary-indexp binary-arch binary +TMPL_RULES + +my %default_substvars = ( + 'source-name' => 'test-source', + 'source-version' => 0, + 'source-section' => 'test', + 'source-priority' => 'optional', + 'binary-name-all' => 'test-binary-all', + 'binary-name-any' => 'test-binary-any', + 'suite' => 'unstable', + 'urgency' => 'low', + 'maintainer' => 'Dpkg Developers <debian-dpkg@lists.debian.org>', +); + +sub gen_from_tmpl +{ + my ($pathname, $tmpl, $substvars) = @_; + + file_dump($pathname, $substvars->substvars($tmpl)); +} + +sub gen_source +{ + my (%options) = @_; + + my $substvars = Dpkg::Substvars->new(); + foreach my $var (%default_substvars) { + my $value = $options{$var} // $default_substvars{$var}; + + $substvars->set_as_auto($var, $value); + } + + my $source = $substvars->get('source-name'); + my $version = $substvars->get('source-version'); + my $basename = "$source\_$version"; + my $dirname = $basename =~ tr/_/-/r; + + make_path("$dirname/debian/source"); + + gen_from_tmpl("$dirname/debian/source/format", $tmpl_format, $substvars); + gen_from_tmpl("$dirname/debian/changelog", $tmpl_changelog, $substvars); + gen_from_tmpl("$dirname/debian/control", $tmpl_control, $substvars); + gen_from_tmpl("$dirname/debian/rules", $tmpl_rules, $substvars); + + return $basename; +} + +sub test_diff +{ + my $filename = shift; + + my $expected_file = "$datadir/$filename"; + my $generated_file = $filename; + + test_neutralize_checksums($generated_file); + + my $res = compare($expected_file, $generated_file); + if ($res) { + system "diff -u $expected_file $generated_file >&2"; + } + ok($res == 0, "generated file matches expected one ($expected_file)"); +} + +sub test_build +{ + my ($basename, $type) = @_; + my $dirname = $basename =~ tr/_/-/r; + + set_build_type($type, 'buildtype', nocheck => 1); + my $typename = get_build_options_from_type(); + + my $stderr; + + my @hook_names = qw( + preinit + init + preclean + source + build + binary + buildinfo + changes + postclean + check + sign + done + ); + my @hook_opts = map { + "--hook-$_=$datadir/hook a=%a p=%p v=%v s=%s u=%u >>../$basename\_$typename.hook" + } @hook_names; + + chdir $dirname; + spawn(exec => [ $ENV{PERL}, "$srcdir/dpkg-buildpackage.pl", + "--admindir=$datadir/dpkgdb", + '--host-arch=amd64', + '--ignore-builtin-builddeps', + '--no-sign', + "--build=$typename", + '--check-command=', + @hook_opts, + ], + error_to_string => \$stderr, + wait_child => 1, nocheck => 1); + chdir '..'; + + ok($? == 0, "dpkg-buildpackage --build=$typename succeeded"); + diag($stderr) unless $? == 0; + + if (build_has_all(BUILD_ARCH_DEP)) { + # Rename the file to preserve on consecutive invocations. + move("$basename\_amd64.changes", "$basename\_$typename.changes"); + } + + test_diff("$basename\_$typename.hook"); + + if (build_has_all(BUILD_SOURCE)) { + test_diff("$basename.dsc"); + } + + test_diff("$basename\_$typename.changes"); +} + +my $basename = gen_source(); + +test_build($basename, BUILD_SOURCE); +test_build($basename, BUILD_ARCH_INDEP); +test_build($basename, BUILD_ARCH_DEP); +test_build($basename, BUILD_BINARY); +test_build($basename, BUILD_FULL); diff --git a/scripts/t/dpkg_buildpackage/dpkgdb/status b/scripts/t/dpkg_buildpackage/dpkgdb/status new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/scripts/t/dpkg_buildpackage/dpkgdb/status diff --git a/scripts/t/dpkg_buildpackage/hook b/scripts/t/dpkg_buildpackage/hook new file mode 100755 index 0000000..9623311 --- /dev/null +++ b/scripts/t/dpkg_buildpackage/hook @@ -0,0 +1,25 @@ +#!/bin/sh +self="$(basename "$0")" +from="$(dirname "$0")" +case "$DPKG_BUILDPACKAGE_HOOK_NAME" in +source) + echo "$self: source-opts=$DPKG_BUILDPACKAGE_HOOK_SOURCE_OPTIONS" + ;; +build) + echo "$self: build-target=$DPKG_BUILDPACKAGE_HOOK_BUILD_TARGET" + ;; +binary) + echo "$self: binary-target=$DPKG_BUILDPACKAGE_HOOK_BINARY_TARGET" + ;; +buildinfo) + echo "$self: buildinfo-opts=$DPKG_BUILDPACKAGE_HOOK_BUILDINFO_OPTIONS" \ + | perl -p -E "s{\Q$from\E}{<ROOT>}g" + ;; +changes) + echo "$self: changes-opts=$DPKG_BUILDPACKAGE_HOOK_CHANGES_OPTIONS" + ;; +check) + echo "$self: check-opts=$DPKG_BUILDPACKAGE_HOOK_CHECK_OPTIONS" + ;; +esac +echo "$self: n=$DPKG_BUILDPACKAGE_HOOK_NAME $*" diff --git a/scripts/t/dpkg_buildpackage/test-source_0.dsc b/scripts/t/dpkg_buildpackage/test-source_0.dsc new file mode 100644 index 0000000..fe5b4f8 --- /dev/null +++ b/scripts/t/dpkg_buildpackage/test-source_0.dsc @@ -0,0 +1,15 @@ +Format: 3.0 (native) +Source: test-source +Binary: test-binary-all, test-binary-any +Architecture: any all +Version: 0 +Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org> +Package-List: + test-binary-all deb test optional arch=all + test-binary-any deb test optional arch=any +Checksums-Sha1: + 0000000000000000000000000000000000000000 0 test-source_0.tar.xz +Checksums-Sha256: + 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0.tar.xz +Files: + 00000000000000000000000000000000 0 test-source_0.tar.xz diff --git a/scripts/t/dpkg_buildpackage/test-source_0_all.changes b/scripts/t/dpkg_buildpackage/test-source_0_all.changes new file mode 100644 index 0000000..c6c444f --- /dev/null +++ b/scripts/t/dpkg_buildpackage/test-source_0_all.changes @@ -0,0 +1,26 @@ +Format: 1.8 +Date: Thu, 30 Jun 2016 20:15:12 +0200 +Source: test-source +Binary: test-binary-all +Architecture: all +Version: 0 +Distribution: unstable +Urgency: low +Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org> +Changed-By: Dpkg Developers <debian-dpkg@lists.debian.org> +Description: + test-binary-all - architecture independent binary package +Closes: 12345 +Changes: + test-source (0) unstable; urgency=low + . + * Entry. Closes: #12345 +Checksums-Sha1: + 0000000000000000000000000000000000000000 0 test-binary-all_0_all.deb + 0000000000000000000000000000000000000000 0 test-source_0_all.buildinfo +Checksums-Sha256: + 0000000000000000000000000000000000000000000000000000000000000000 0 test-binary-all_0_all.deb + 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0_all.buildinfo +Files: + 00000000000000000000000000000000 0 test optional test-binary-all_0_all.deb + 00000000000000000000000000000000 0 test optional test-source_0_all.buildinfo diff --git a/scripts/t/dpkg_buildpackage/test-source_0_all.hook b/scripts/t/dpkg_buildpackage/test-source_0_all.hook new file mode 100644 index 0000000..4dc28d8 --- /dev/null +++ b/scripts/t/dpkg_buildpackage/test-source_0_all.hook @@ -0,0 +1,18 @@ +hook: n=preinit a=1 p= v= s= u= +hook: n=init a=1 p=test-source v=0 s=0 u=0 +hook: n=preclean a=1 p=test-source v=0 s=0 u=0 +hook: source-opts= +hook: n=source a=0 p=test-source v=0 s=0 u=0 +hook: build-target=build-indep +hook: n=build a=1 p=test-source v=0 s=0 u=0 +hook: binary-target=binary-indep +hook: n=binary a=1 p=test-source v=0 s=0 u=0 +hook: buildinfo-opts=--build=all --admindir=<ROOT>/dpkgdb -O../test-source_0_all.buildinfo +hook: n=buildinfo a=1 p=test-source v=0 s=0 u=0 +hook: changes-opts=--build=all -O../test-source_0_all.changes +hook: n=changes a=1 p=test-source v=0 s=0 u=0 +hook: n=postclean a=0 p=test-source v=0 s=0 u=0 +hook: check-opts= +hook: n=check a=0 p=test-source v=0 s=0 u=0 +hook: n=sign a=0 p=test-source v=0 s=0 u=0 +hook: n=done a=1 p=test-source v=0 s=0 u=0 diff --git a/scripts/t/dpkg_buildpackage/test-source_0_any.changes b/scripts/t/dpkg_buildpackage/test-source_0_any.changes new file mode 100644 index 0000000..d67460c --- /dev/null +++ b/scripts/t/dpkg_buildpackage/test-source_0_any.changes @@ -0,0 +1,26 @@ +Format: 1.8 +Date: Thu, 30 Jun 2016 20:15:12 +0200 +Source: test-source +Binary: test-binary-any +Architecture: amd64 +Version: 0 +Distribution: unstable +Urgency: low +Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org> +Changed-By: Dpkg Developers <debian-dpkg@lists.debian.org> +Description: + test-binary-any - architecture dependent binary package +Closes: 12345 +Changes: + test-source (0) unstable; urgency=low + . + * Entry. Closes: #12345 +Checksums-Sha1: + 0000000000000000000000000000000000000000 0 test-binary-any_0_amd64.deb + 0000000000000000000000000000000000000000 0 test-source_0_amd64.buildinfo +Checksums-Sha256: + 0000000000000000000000000000000000000000000000000000000000000000 0 test-binary-any_0_amd64.deb + 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0_amd64.buildinfo +Files: + 00000000000000000000000000000000 0 test optional test-binary-any_0_amd64.deb + 00000000000000000000000000000000 0 test optional test-source_0_amd64.buildinfo diff --git a/scripts/t/dpkg_buildpackage/test-source_0_any.hook b/scripts/t/dpkg_buildpackage/test-source_0_any.hook new file mode 100644 index 0000000..430fbcd --- /dev/null +++ b/scripts/t/dpkg_buildpackage/test-source_0_any.hook @@ -0,0 +1,18 @@ +hook: n=preinit a=1 p= v= s= u= +hook: n=init a=1 p=test-source v=0 s=0 u=0 +hook: n=preclean a=1 p=test-source v=0 s=0 u=0 +hook: source-opts= +hook: n=source a=0 p=test-source v=0 s=0 u=0 +hook: build-target=build-arch +hook: n=build a=1 p=test-source v=0 s=0 u=0 +hook: binary-target=binary-arch +hook: n=binary a=1 p=test-source v=0 s=0 u=0 +hook: buildinfo-opts=--build=any --admindir=<ROOT>/dpkgdb -O../test-source_0_amd64.buildinfo +hook: n=buildinfo a=1 p=test-source v=0 s=0 u=0 +hook: changes-opts=--build=any -O../test-source_0_amd64.changes +hook: n=changes a=1 p=test-source v=0 s=0 u=0 +hook: n=postclean a=0 p=test-source v=0 s=0 u=0 +hook: check-opts= +hook: n=check a=0 p=test-source v=0 s=0 u=0 +hook: n=sign a=0 p=test-source v=0 s=0 u=0 +hook: n=done a=1 p=test-source v=0 s=0 u=0 diff --git a/scripts/t/dpkg_buildpackage/test-source_0_binary.changes b/scripts/t/dpkg_buildpackage/test-source_0_binary.changes new file mode 100644 index 0000000..7470ce5 --- /dev/null +++ b/scripts/t/dpkg_buildpackage/test-source_0_binary.changes @@ -0,0 +1,30 @@ +Format: 1.8 +Date: Thu, 30 Jun 2016 20:15:12 +0200 +Source: test-source +Binary: test-binary-all test-binary-any +Architecture: all amd64 +Version: 0 +Distribution: unstable +Urgency: low +Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org> +Changed-By: Dpkg Developers <debian-dpkg@lists.debian.org> +Description: + test-binary-all - architecture independent binary package + test-binary-any - architecture dependent binary package +Closes: 12345 +Changes: + test-source (0) unstable; urgency=low + . + * Entry. Closes: #12345 +Checksums-Sha1: + 0000000000000000000000000000000000000000 0 test-binary-all_0_all.deb + 0000000000000000000000000000000000000000 0 test-binary-any_0_amd64.deb + 0000000000000000000000000000000000000000 0 test-source_0_amd64.buildinfo +Checksums-Sha256: + 0000000000000000000000000000000000000000000000000000000000000000 0 test-binary-all_0_all.deb + 0000000000000000000000000000000000000000000000000000000000000000 0 test-binary-any_0_amd64.deb + 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0_amd64.buildinfo +Files: + 00000000000000000000000000000000 0 test optional test-binary-all_0_all.deb + 00000000000000000000000000000000 0 test optional test-binary-any_0_amd64.deb + 00000000000000000000000000000000 0 test optional test-source_0_amd64.buildinfo diff --git a/scripts/t/dpkg_buildpackage/test-source_0_binary.hook b/scripts/t/dpkg_buildpackage/test-source_0_binary.hook new file mode 100644 index 0000000..cf5be4f --- /dev/null +++ b/scripts/t/dpkg_buildpackage/test-source_0_binary.hook @@ -0,0 +1,18 @@ +hook: n=preinit a=1 p= v= s= u= +hook: n=init a=1 p=test-source v=0 s=0 u=0 +hook: n=preclean a=1 p=test-source v=0 s=0 u=0 +hook: source-opts= +hook: n=source a=0 p=test-source v=0 s=0 u=0 +hook: build-target=build +hook: n=build a=1 p=test-source v=0 s=0 u=0 +hook: binary-target=binary +hook: n=binary a=1 p=test-source v=0 s=0 u=0 +hook: buildinfo-opts=--build=binary --admindir=<ROOT>/dpkgdb -O../test-source_0_amd64.buildinfo +hook: n=buildinfo a=1 p=test-source v=0 s=0 u=0 +hook: changes-opts=--build=binary -O../test-source_0_amd64.changes +hook: n=changes a=1 p=test-source v=0 s=0 u=0 +hook: n=postclean a=0 p=test-source v=0 s=0 u=0 +hook: check-opts= +hook: n=check a=0 p=test-source v=0 s=0 u=0 +hook: n=sign a=0 p=test-source v=0 s=0 u=0 +hook: n=done a=1 p=test-source v=0 s=0 u=0 diff --git a/scripts/t/dpkg_buildpackage/test-source_0_full.changes b/scripts/t/dpkg_buildpackage/test-source_0_full.changes new file mode 100644 index 0000000..fef013c --- /dev/null +++ b/scripts/t/dpkg_buildpackage/test-source_0_full.changes @@ -0,0 +1,36 @@ +Format: 1.8 +Date: Thu, 30 Jun 2016 20:15:12 +0200 +Source: test-source +Binary: test-binary-all test-binary-any +Architecture: source all amd64 +Version: 0 +Distribution: unstable +Urgency: low +Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org> +Changed-By: Dpkg Developers <debian-dpkg@lists.debian.org> +Description: + test-binary-all - architecture independent binary package + test-binary-any - architecture dependent binary package +Closes: 12345 +Changes: + test-source (0) unstable; urgency=low + . + * Entry. Closes: #12345 +Checksums-Sha1: + 0000000000000000000000000000000000000000 0 test-source_0.dsc + 0000000000000000000000000000000000000000 0 test-source_0.tar.xz + 0000000000000000000000000000000000000000 0 test-binary-all_0_all.deb + 0000000000000000000000000000000000000000 0 test-binary-any_0_amd64.deb + 0000000000000000000000000000000000000000 0 test-source_0_amd64.buildinfo +Checksums-Sha256: + 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0.dsc + 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0.tar.xz + 0000000000000000000000000000000000000000000000000000000000000000 0 test-binary-all_0_all.deb + 0000000000000000000000000000000000000000000000000000000000000000 0 test-binary-any_0_amd64.deb + 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0_amd64.buildinfo +Files: + 00000000000000000000000000000000 0 test optional test-source_0.dsc + 00000000000000000000000000000000 0 test optional test-source_0.tar.xz + 00000000000000000000000000000000 0 test optional test-binary-all_0_all.deb + 00000000000000000000000000000000 0 test optional test-binary-any_0_amd64.deb + 00000000000000000000000000000000 0 test optional test-source_0_amd64.buildinfo diff --git a/scripts/t/dpkg_buildpackage/test-source_0_full.hook b/scripts/t/dpkg_buildpackage/test-source_0_full.hook new file mode 100644 index 0000000..086300d --- /dev/null +++ b/scripts/t/dpkg_buildpackage/test-source_0_full.hook @@ -0,0 +1,18 @@ +hook: n=preinit a=1 p= v= s= u= +hook: n=init a=1 p=test-source v=0 s=0 u=0 +hook: n=preclean a=1 p=test-source v=0 s=0 u=0 +hook: source-opts= +hook: n=source a=1 p=test-source v=0 s=0 u=0 +hook: build-target=build +hook: n=build a=1 p=test-source v=0 s=0 u=0 +hook: binary-target=binary +hook: n=binary a=1 p=test-source v=0 s=0 u=0 +hook: buildinfo-opts=--build=full --admindir=<ROOT>/dpkgdb -O../test-source_0_amd64.buildinfo +hook: n=buildinfo a=1 p=test-source v=0 s=0 u=0 +hook: changes-opts=--build=full -O../test-source_0_amd64.changes +hook: n=changes a=1 p=test-source v=0 s=0 u=0 +hook: n=postclean a=0 p=test-source v=0 s=0 u=0 +hook: check-opts= +hook: n=check a=0 p=test-source v=0 s=0 u=0 +hook: n=sign a=0 p=test-source v=0 s=0 u=0 +hook: n=done a=1 p=test-source v=0 s=0 u=0 diff --git a/scripts/t/dpkg_buildpackage/test-source_0_source.changes b/scripts/t/dpkg_buildpackage/test-source_0_source.changes new file mode 100644 index 0000000..8c2f3d1 --- /dev/null +++ b/scripts/t/dpkg_buildpackage/test-source_0_source.changes @@ -0,0 +1,26 @@ +Format: 1.8 +Date: Thu, 30 Jun 2016 20:15:12 +0200 +Source: test-source +Architecture: source +Version: 0 +Distribution: unstable +Urgency: low +Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org> +Changed-By: Dpkg Developers <debian-dpkg@lists.debian.org> +Closes: 12345 +Changes: + test-source (0) unstable; urgency=low + . + * Entry. Closes: #12345 +Checksums-Sha1: + 0000000000000000000000000000000000000000 0 test-source_0.dsc + 0000000000000000000000000000000000000000 0 test-source_0.tar.xz + 0000000000000000000000000000000000000000 0 test-source_0_source.buildinfo +Checksums-Sha256: + 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0.dsc + 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0.tar.xz + 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0_source.buildinfo +Files: + 00000000000000000000000000000000 0 test optional test-source_0.dsc + 00000000000000000000000000000000 0 test optional test-source_0.tar.xz + 00000000000000000000000000000000 0 test optional test-source_0_source.buildinfo diff --git a/scripts/t/dpkg_buildpackage/test-source_0_source.hook b/scripts/t/dpkg_buildpackage/test-source_0_source.hook new file mode 100644 index 0000000..eb7387a --- /dev/null +++ b/scripts/t/dpkg_buildpackage/test-source_0_source.hook @@ -0,0 +1,16 @@ +hook: n=preinit a=1 p= v= s= u= +hook: n=init a=1 p=test-source v=0 s=0 u=0 +hook: n=preclean a=1 p=test-source v=0 s=0 u=0 +hook: source-opts= +hook: n=source a=1 p=test-source v=0 s=0 u=0 +hook: build-target= +hook: n=build a=0 p=test-source v=0 s=0 u=0 +hook: buildinfo-opts=--build=source --admindir=<ROOT>/dpkgdb -O../test-source_0_source.buildinfo +hook: n=buildinfo a=1 p=test-source v=0 s=0 u=0 +hook: changes-opts=--build=source -O../test-source_0_source.changes +hook: n=changes a=1 p=test-source v=0 s=0 u=0 +hook: n=postclean a=0 p=test-source v=0 s=0 u=0 +hook: check-opts= +hook: n=check a=0 p=test-source v=0 s=0 u=0 +hook: n=sign a=0 p=test-source v=0 s=0 u=0 +hook: n=done a=1 p=test-source v=0 s=0 u=0 diff --git a/scripts/t/dpkg_mergechangelogs.t b/scripts/t/dpkg_mergechangelogs.t new file mode 100644 index 0000000..646cd2f --- /dev/null +++ b/scripts/t/dpkg_mergechangelogs.t @@ -0,0 +1,66 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 4; + +use File::Spec; +use File::Compare; +use File::Temp; + +use Dpkg::IPC; + +my $srcdir = $ENV{srcdir} || '.'; +my $datadir = "$srcdir/t/dpkg_mergechangelogs"; + +sub test_merge { + my ($expected_file, @options) = @_; + my $fh = File::Temp->new(); + spawn(exec => [ $ENV{PERL}, "$srcdir/dpkg-mergechangelogs.pl", @options ], + to_handle => $fh, error_to_file => '/dev/null', + wait_child => 1, nocheck => 1); + my $res = compare($expected_file, $fh->filename); + if ($res) { + system('diff', '-u', $expected_file, $fh->filename); + } + ok($res == 0, "merged changelog matches expected one ($expected_file)"); +} + +my $has_alg_merge = 1; +eval 'use Algorithm::Merge;'; +if ($@) { + $has_alg_merge = 0; +} + +my @input = ("$datadir/ch-old", "$datadir/ch-a", "$datadir/ch-b"); +if ($has_alg_merge) { + test_merge("$datadir/ch-merged", @input); + test_merge("$datadir/ch-merged-pr", '-m', @input); + test_merge("$datadir/ch-unreleased-merged", '--merge-unreleased', + ("$datadir/ch-unreleased-old", + "$datadir/ch-unreleased-a", + "$datadir/ch-unreleased-b")); +} else { + test_merge("$datadir/ch-merged-basic", @input); + test_merge("$datadir/ch-merged-pr-basic", '-m', @input); + test_merge("$datadir/ch-unreleased-merged-basic", '--merge-unreleased', + ("$datadir/ch-unreleased-old", + "$datadir/ch-unreleased-a", + "$datadir/ch-unreleased-b")); +} +test_merge("$datadir/ch-badver-merged", ("$datadir/ch-badver-old", + "$datadir/ch-badver-a", "$datadir/ch-badver-b")); diff --git a/scripts/t/dpkg_mergechangelogs/ch-a b/scripts/t/dpkg_mergechangelogs/ch-a new file mode 100644 index 0000000..ff5419d --- /dev/null +++ b/scripts/t/dpkg_mergechangelogs/ch-a @@ -0,0 +1,94 @@ +test (2.0-1) unstable; urgency=low + + * Version B with 2.0-1~exp3 contains only up to line 3 while version A + with 2.0-1 contains the 5 lines. The resulting version should have the + 5 lines without conflict with Algorithm::Merge and a conflict without. + * Line 1. + * Line 2. + * Line 3. + * Line 4. + * Line 5. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:23:09 +0200 + +test (1.2-2) unstable; urgency=low + + * This is the last entry in changelog O. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:18:50 +0200 + +test (1.2-1) unstable; urgency=low + + * This entry should not have conflicts with Algorithm::Merge installed. + * Changelog B should a have supplementary line above this one. + * Pi is 3.14 is true for all changelogs. + * Changelog A should have a supplementary line + somewhere in this sub-list + - The weather is nice + - Really no clouds in the sky + - Yet I'm hacking on dpkg + - What does that mean about me? + * This line should be shared but the next one is dropped in B only. + * If I'm here it's because the changelog is not B (I should not appear + in the resulting changelog). + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:09:07 +0200 + +test (1.1-1+conflict2) unstable; urgency=low + + * This entry has a conflict on the next line. + * I'm in changelog A. + * This line is the same in all 3 versions. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:07:40 +0200 + +test (1.1-1+conflict1) experimental; urgency=low + + * This entry has conflicts on the header line: A wants distribution + experimental (instead of unstable) and B wants urgency=high (instead + of low). + * But it also has a conflict on the trailer line. A changed the + timestamp to 18:05:00 and B to 18:06:00. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:05:00 +0200 + +test (1.1-1+change2) unstable; urgency=low + + * This entry is everywhere but the last line is different in A. The + merged version should have what's in A. Furthermore the timestamp in + B is set to 17:55:00, it should also be picked up. + * I'm definitely in changelog A. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:54:52 +0200 + +test (1.1-1+change1) unstable; urgency=high + + * This entry is everywhere but the last line is different in B. The + merged version should have what's in B. Furthermore the urgency in + A is set to high, it should also be picked up. + * I'm not in changelog B. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:50:58 +0200 + +test (1.0-3+a) experimental; urgency=low + + * This entry is present in A only. It's considered new and should thus + be in the merged changelog. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:44:39 +0200 + +test (1.0-2) unstable; urgency=low + + * This entry is dropped in B only. + * Since it's in O and A, it should not appear in the result. + * Pi is 3.14. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:39:15 +0200 + +test (1.0-1) unstable; urgency=low + + * Initial release. (Closes: #XXXXXX) + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:37:46 +0200 + +vim: et diff --git a/scripts/t/dpkg_mergechangelogs/ch-b b/scripts/t/dpkg_mergechangelogs/ch-b new file mode 100644 index 0000000..a74145f --- /dev/null +++ b/scripts/t/dpkg_mergechangelogs/ch-b @@ -0,0 +1,89 @@ +test (2.0-1~exp3) unstable; urgency=low + + * Version B with 2.0-1~exp3 contains only up to line 3 while version A + with 2.0-1 contains the 5 lines. The resulting version should have the + 5 lines without conflict with Algorithm::Merge and a conflict without. + * Line 1. + * Line 2. + * Line 3. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:23:09 +0200 + +test (1.2-2) unstable; urgency=low + + * This is the last entry in changelog O. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:18:50 +0200 + +test (1.2-1) unstable; urgency=low + + * This entry should not have conflicts with Algorithm::Merge installed. + * I'm the added line mentioned below (B-only). + * Changelog B should a have supplementary line above this one. + * Pi is 3.14 is true for all changelogs. + * Changelog A should have a supplementary line + somewhere in this sub-list + - The weather is nice + - Yet I'm hacking on dpkg + - What does that mean about me? + * This line should be shared but the next one is dropped in B only. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:09:07 +0200 + +test (1.1-1+conflict2) unstable; urgency=low + + * This entry has a conflict on the next line. + * I'm in changelog B. + * This line is the same in all 3 versions. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:07:40 +0200 + +test (1.1-1+conflict1) unstable; urgency=high + + * This entry has conflicts on the header line: A wants distribution + experimental (instead of unstable) and B wants urgency=high (instead + of low). + * But it also has a conflict on the trailer line. A changed the + timestamp to 18:05:00 and B to 18:06:00. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:06:00 +0200 + +test (1.1-1+change2) unstable; urgency=low + + * This entry is everywhere but the last line is different in A. The + merged version should have what's in A. Furthermore the timestamp in + B is set to 17:55:00, it should also be picked up. + * I'm not in changelog A. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:54:52 +0200 + +test (1.1-1+change1) unstable; urgency=low + + * This entry is everywhere but the last line is different in B. The + merged version should have what's in B. Furthermore the urgency in + A is set to high, it should also be picked up. + * I'm definitely in changelog B. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:50:58 +0200 + +test (1.0-3+b) experimental; urgency=low + + * This entry is present in B only. It's considered new and should thus + be in the merged changelog. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:47:38 +0200 + +test (1.0-3) unstable; urgency=low + + * This entry is dropped in A only. + * Since it's in O and B, it should not appear in the result. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:41:31 +0200 + +test (1.0-1) unstable; urgency=low + + * Initial release. (Closes: #XXXXXX) + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:37:46 +0200 + +vim: et diff --git a/scripts/t/dpkg_mergechangelogs/ch-badver-a b/scripts/t/dpkg_mergechangelogs/ch-badver-a new file mode 100644 index 0000000..d544e64 --- /dev/null +++ b/scripts/t/dpkg_mergechangelogs/ch-badver-a @@ -0,0 +1,5 @@ +egcs (ss-970814-1) experimental; urgency=low + + * Initial packaging (of initial snapshot!) + + -- Galen Hazelwood <galenh@micron.net> Wed, 20 Aug 1997 00:36:28 +0000 diff --git a/scripts/t/dpkg_mergechangelogs/ch-badver-b b/scripts/t/dpkg_mergechangelogs/ch-badver-b new file mode 100644 index 0000000..609254e --- /dev/null +++ b/scripts/t/dpkg_mergechangelogs/ch-badver-b @@ -0,0 +1,11 @@ +egcs (970904-1) experimental; urgency=low + + * New upstream snapshot + + -- Galen Hazelwood <galenh@micron.net> Sun, 7 Sep 1997 18:25:06 -0600 + +egcs (ss-970814-1) experimental; urgency=low + + * Initial packaging (of initial snapshot!) + + -- Galen Hazelwood <galenh@micron.net> Wed, 20 Aug 1997 00:36:28 +0000 diff --git a/scripts/t/dpkg_mergechangelogs/ch-badver-merged b/scripts/t/dpkg_mergechangelogs/ch-badver-merged new file mode 100644 index 0000000..609254e --- /dev/null +++ b/scripts/t/dpkg_mergechangelogs/ch-badver-merged @@ -0,0 +1,11 @@ +egcs (970904-1) experimental; urgency=low + + * New upstream snapshot + + -- Galen Hazelwood <galenh@micron.net> Sun, 7 Sep 1997 18:25:06 -0600 + +egcs (ss-970814-1) experimental; urgency=low + + * Initial packaging (of initial snapshot!) + + -- Galen Hazelwood <galenh@micron.net> Wed, 20 Aug 1997 00:36:28 +0000 diff --git a/scripts/t/dpkg_mergechangelogs/ch-badver-old b/scripts/t/dpkg_mergechangelogs/ch-badver-old new file mode 100644 index 0000000..d544e64 --- /dev/null +++ b/scripts/t/dpkg_mergechangelogs/ch-badver-old @@ -0,0 +1,5 @@ +egcs (ss-970814-1) experimental; urgency=low + + * Initial packaging (of initial snapshot!) + + -- Galen Hazelwood <galenh@micron.net> Wed, 20 Aug 1997 00:36:28 +0000 diff --git a/scripts/t/dpkg_mergechangelogs/ch-merged b/scripts/t/dpkg_mergechangelogs/ch-merged new file mode 100644 index 0000000..29a985d --- /dev/null +++ b/scripts/t/dpkg_mergechangelogs/ch-merged @@ -0,0 +1,115 @@ +test (2.0-1) unstable; urgency=low + + * Version B with 2.0-1~exp3 contains only up to line 3 while version A + with 2.0-1 contains the 5 lines. The resulting version should have the + 5 lines without conflict with Algorithm::Merge and a conflict without. + * Line 1. + * Line 2. + * Line 3. + * Line 4. + * Line 5. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:23:09 +0200 + +test (2.0-1~exp3) unstable; urgency=low + + * Version B with 2.0-1~exp3 contains only up to line 3 while version A + with 2.0-1 contains the 5 lines. The resulting version should have the + 5 lines without conflict with Algorithm::Merge and a conflict without. + * Line 1. + * Line 2. + * Line 3. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:23:09 +0200 + +test (1.2-2) unstable; urgency=low + + * This is the last entry in changelog O. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:18:50 +0200 + +test (1.2-1) unstable; urgency=low + + * This entry should not have conflicts with Algorithm::Merge installed. + * I'm the added line mentioned below (B-only). + * Changelog B should a have supplementary line above this one. + * Pi is 3.14 is true for all changelogs. + * Changelog A should have a supplementary line + somewhere in this sub-list + - The weather is nice + - Really no clouds in the sky + - Yet I'm hacking on dpkg + - What does that mean about me? + * This line should be shared but the next one is dropped in B only. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:09:07 +0200 + +test (1.1-1+conflict2) unstable; urgency=low + + * This entry has a conflict on the next line. +<<<<<<< + * I'm in changelog A. +======= + * I'm in changelog B. +>>>>>>> + * This line is the same in all 3 versions. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:07:40 +0200 + +<<<<<<< +test (1.1-1+conflict1) experimental; urgency=low +======= +test (1.1-1+conflict1) unstable; urgency=high +>>>>>>> + + * This entry has conflicts on the header line: A wants distribution + experimental (instead of unstable) and B wants urgency=high (instead + of low). + * But it also has a conflict on the trailer line. A changed the + timestamp to 18:05:00 and B to 18:06:00. + +<<<<<<< + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:05:00 +0200 +======= + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:06:00 +0200 +>>>>>>> + +test (1.1-1+change2) unstable; urgency=low + + * This entry is everywhere but the last line is different in A. The + merged version should have what's in A. Furthermore the timestamp in + B is set to 17:55:00, it should also be picked up. + * I'm definitely in changelog A. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:54:52 +0200 + +test (1.1-1+change1) unstable; urgency=high + + * This entry is everywhere but the last line is different in B. The + merged version should have what's in B. Furthermore the urgency in + A is set to high, it should also be picked up. + * I'm definitely in changelog B. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:50:58 +0200 + +test (1.0-3+b) experimental; urgency=low + + * This entry is present in B only. It's considered new and should thus + be in the merged changelog. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:47:38 +0200 + +test (1.0-3+a) experimental; urgency=low + + * This entry is present in A only. It's considered new and should thus + be in the merged changelog. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:44:39 +0200 + +test (1.0-1) unstable; urgency=low + + * Initial release. (Closes: #XXXXXX) + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:37:46 +0200 + +vim: et diff --git a/scripts/t/dpkg_mergechangelogs/ch-merged-basic b/scripts/t/dpkg_mergechangelogs/ch-merged-basic new file mode 100644 index 0000000..f89fe11 --- /dev/null +++ b/scripts/t/dpkg_mergechangelogs/ch-merged-basic @@ -0,0 +1,138 @@ +test (2.0-1) unstable; urgency=low + + * Version B with 2.0-1~exp3 contains only up to line 3 while version A + with 2.0-1 contains the 5 lines. The resulting version should have the + 5 lines without conflict with Algorithm::Merge and a conflict without. + * Line 1. + * Line 2. + * Line 3. + * Line 4. + * Line 5. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:23:09 +0200 + +test (2.0-1~exp3) unstable; urgency=low + + * Version B with 2.0-1~exp3 contains only up to line 3 while version A + with 2.0-1 contains the 5 lines. The resulting version should have the + 5 lines without conflict with Algorithm::Merge and a conflict without. + * Line 1. + * Line 2. + * Line 3. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:23:09 +0200 + +test (1.2-2) unstable; urgency=low + + * This is the last entry in changelog O. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:18:50 +0200 + +test (1.2-1) unstable; urgency=low + +<<<<<<< + * This entry should not have conflicts with Algorithm::Merge installed. + * Changelog B should a have supplementary line above this one. + * Pi is 3.14 is true for all changelogs. + * Changelog A should have a supplementary line + somewhere in this sub-list + - The weather is nice + - Really no clouds in the sky + - Yet I'm hacking on dpkg + - What does that mean about me? + * This line should be shared but the next one is dropped in B only. + * If I'm here it's because the changelog is not B (I should not appear + in the resulting changelog). +======= + * This entry should not have conflicts with Algorithm::Merge installed. + * I'm the added line mentioned below (B-only). + * Changelog B should a have supplementary line above this one. + * Pi is 3.14 is true for all changelogs. + * Changelog A should have a supplementary line + somewhere in this sub-list + - The weather is nice + - Yet I'm hacking on dpkg + - What does that mean about me? + * This line should be shared but the next one is dropped in B only. +>>>>>>> + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:09:07 +0200 + +test (1.1-1+conflict2) unstable; urgency=low + +<<<<<<< + * This entry has a conflict on the next line. + * I'm in changelog A. + * This line is the same in all 3 versions. +======= + * This entry has a conflict on the next line. + * I'm in changelog B. + * This line is the same in all 3 versions. +>>>>>>> + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:07:40 +0200 + +<<<<<<< +test (1.1-1+conflict1) experimental; urgency=low +======= +test (1.1-1+conflict1) unstable; urgency=high +>>>>>>> + + * This entry has conflicts on the header line: A wants distribution + experimental (instead of unstable) and B wants urgency=high (instead + of low). + * But it also has a conflict on the trailer line. A changed the + timestamp to 18:05:00 and B to 18:06:00. + +<<<<<<< + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:05:00 +0200 +======= + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:06:00 +0200 +>>>>>>> + +test (1.1-1+change2) unstable; urgency=low + + * This entry is everywhere but the last line is different in A. The + merged version should have what's in A. Furthermore the timestamp in + B is set to 17:55:00, it should also be picked up. + * I'm definitely in changelog A. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:54:52 +0200 + +test (1.1-1+change1) unstable; urgency=high + +<<<<<<< + * This entry is everywhere but the last line is different in B. The + merged version should have what's in B. Furthermore the urgency in + A is set to high, it should also be picked up. + * I'm not in changelog B. +======= + * This entry is everywhere but the last line is different in B. The + merged version should have what's in B. Furthermore the urgency in + A is set to high, it should also be picked up. + * I'm definitely in changelog B. +>>>>>>> + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:50:58 +0200 + +test (1.0-3+b) experimental; urgency=low + + * This entry is present in B only. It's considered new and should thus + be in the merged changelog. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:47:38 +0200 + +test (1.0-3+a) experimental; urgency=low + + * This entry is present in A only. It's considered new and should thus + be in the merged changelog. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:44:39 +0200 + +test (1.0-1) unstable; urgency=low + + * Initial release. (Closes: #XXXXXX) + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:37:46 +0200 + +vim: et diff --git a/scripts/t/dpkg_mergechangelogs/ch-merged-pr b/scripts/t/dpkg_mergechangelogs/ch-merged-pr new file mode 100644 index 0000000..a58f097 --- /dev/null +++ b/scripts/t/dpkg_mergechangelogs/ch-merged-pr @@ -0,0 +1,108 @@ +<<<<<<< +test (2.0-1) unstable; urgency=low +======= +test (2.0-1~exp3) unstable; urgency=low +>>>>>>> + + * Version B with 2.0-1~exp3 contains only up to line 3 while version A + with 2.0-1 contains the 5 lines. The resulting version should have the + 5 lines without conflict with Algorithm::Merge and a conflict without. + * Line 1. + * Line 2. + * Line 3. + * Line 4. + * Line 5. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:23:09 +0200 + +test (1.2-2) unstable; urgency=low + + * This is the last entry in changelog O. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:18:50 +0200 + +test (1.2-1) unstable; urgency=low + + * This entry should not have conflicts with Algorithm::Merge installed. + * I'm the added line mentioned below (B-only). + * Changelog B should a have supplementary line above this one. + * Pi is 3.14 is true for all changelogs. + * Changelog A should have a supplementary line + somewhere in this sub-list + - The weather is nice + - Really no clouds in the sky + - Yet I'm hacking on dpkg + - What does that mean about me? + * This line should be shared but the next one is dropped in B only. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:09:07 +0200 + +test (1.1-1+conflict2) unstable; urgency=low + + * This entry has a conflict on the next line. +<<<<<<< + * I'm in changelog A. +======= + * I'm in changelog B. +>>>>>>> + * This line is the same in all 3 versions. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:07:40 +0200 + +<<<<<<< +test (1.1-1+conflict1) experimental; urgency=low +======= +test (1.1-1+conflict1) unstable; urgency=high +>>>>>>> + + * This entry has conflicts on the header line: A wants distribution + experimental (instead of unstable) and B wants urgency=high (instead + of low). + * But it also has a conflict on the trailer line. A changed the + timestamp to 18:05:00 and B to 18:06:00. + +<<<<<<< + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:05:00 +0200 +======= + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:06:00 +0200 +>>>>>>> + +test (1.1-1+change2) unstable; urgency=low + + * This entry is everywhere but the last line is different in A. The + merged version should have what's in A. Furthermore the timestamp in + B is set to 17:55:00, it should also be picked up. + * I'm definitely in changelog A. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:54:52 +0200 + +test (1.1-1+change1) unstable; urgency=high + + * This entry is everywhere but the last line is different in B. The + merged version should have what's in B. Furthermore the urgency in + A is set to high, it should also be picked up. + * I'm definitely in changelog B. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:50:58 +0200 + +test (1.0-3+b) experimental; urgency=low + + * This entry is present in B only. It's considered new and should thus + be in the merged changelog. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:47:38 +0200 + +test (1.0-3+a) experimental; urgency=low + + * This entry is present in A only. It's considered new and should thus + be in the merged changelog. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:44:39 +0200 + +test (1.0-1) unstable; urgency=low + + * Initial release. (Closes: #XXXXXX) + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:37:46 +0200 + +vim: et diff --git a/scripts/t/dpkg_mergechangelogs/ch-merged-pr-basic b/scripts/t/dpkg_mergechangelogs/ch-merged-pr-basic new file mode 100644 index 0000000..7733612 --- /dev/null +++ b/scripts/t/dpkg_mergechangelogs/ch-merged-pr-basic @@ -0,0 +1,140 @@ +<<<<<<< +test (2.0-1) unstable; urgency=low +======= +test (2.0-1~exp3) unstable; urgency=low +>>>>>>> + +<<<<<<< + * Version B with 2.0-1~exp3 contains only up to line 3 while version A + with 2.0-1 contains the 5 lines. The resulting version should have the + 5 lines without conflict with Algorithm::Merge and a conflict without. + * Line 1. + * Line 2. + * Line 3. + * Line 4. + * Line 5. +======= + * Version B with 2.0-1~exp3 contains only up to line 3 while version A + with 2.0-1 contains the 5 lines. The resulting version should have the + 5 lines without conflict with Algorithm::Merge and a conflict without. + * Line 1. + * Line 2. + * Line 3. +>>>>>>> + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:23:09 +0200 + +test (1.2-2) unstable; urgency=low + + * This is the last entry in changelog O. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:18:50 +0200 + +test (1.2-1) unstable; urgency=low + +<<<<<<< + * This entry should not have conflicts with Algorithm::Merge installed. + * Changelog B should a have supplementary line above this one. + * Pi is 3.14 is true for all changelogs. + * Changelog A should have a supplementary line + somewhere in this sub-list + - The weather is nice + - Really no clouds in the sky + - Yet I'm hacking on dpkg + - What does that mean about me? + * This line should be shared but the next one is dropped in B only. + * If I'm here it's because the changelog is not B (I should not appear + in the resulting changelog). +======= + * This entry should not have conflicts with Algorithm::Merge installed. + * I'm the added line mentioned below (B-only). + * Changelog B should a have supplementary line above this one. + * Pi is 3.14 is true for all changelogs. + * Changelog A should have a supplementary line + somewhere in this sub-list + - The weather is nice + - Yet I'm hacking on dpkg + - What does that mean about me? + * This line should be shared but the next one is dropped in B only. +>>>>>>> + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:09:07 +0200 + +test (1.1-1+conflict2) unstable; urgency=low + +<<<<<<< + * This entry has a conflict on the next line. + * I'm in changelog A. + * This line is the same in all 3 versions. +======= + * This entry has a conflict on the next line. + * I'm in changelog B. + * This line is the same in all 3 versions. +>>>>>>> + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:07:40 +0200 + +<<<<<<< +test (1.1-1+conflict1) experimental; urgency=low +======= +test (1.1-1+conflict1) unstable; urgency=high +>>>>>>> + + * This entry has conflicts on the header line: A wants distribution + experimental (instead of unstable) and B wants urgency=high (instead + of low). + * But it also has a conflict on the trailer line. A changed the + timestamp to 18:05:00 and B to 18:06:00. + +<<<<<<< + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:05:00 +0200 +======= + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:06:00 +0200 +>>>>>>> + +test (1.1-1+change2) unstable; urgency=low + + * This entry is everywhere but the last line is different in A. The + merged version should have what's in A. Furthermore the timestamp in + B is set to 17:55:00, it should also be picked up. + * I'm definitely in changelog A. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:54:52 +0200 + +test (1.1-1+change1) unstable; urgency=high + +<<<<<<< + * This entry is everywhere but the last line is different in B. The + merged version should have what's in B. Furthermore the urgency in + A is set to high, it should also be picked up. + * I'm not in changelog B. +======= + * This entry is everywhere but the last line is different in B. The + merged version should have what's in B. Furthermore the urgency in + A is set to high, it should also be picked up. + * I'm definitely in changelog B. +>>>>>>> + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:50:58 +0200 + +test (1.0-3+b) experimental; urgency=low + + * This entry is present in B only. It's considered new and should thus + be in the merged changelog. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:47:38 +0200 + +test (1.0-3+a) experimental; urgency=low + + * This entry is present in A only. It's considered new and should thus + be in the merged changelog. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:44:39 +0200 + +test (1.0-1) unstable; urgency=low + + * Initial release. (Closes: #XXXXXX) + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:37:46 +0200 + +vim: et diff --git a/scripts/t/dpkg_mergechangelogs/ch-old b/scripts/t/dpkg_mergechangelogs/ch-old new file mode 100644 index 0000000..5ff7dd3 --- /dev/null +++ b/scripts/t/dpkg_mergechangelogs/ch-old @@ -0,0 +1,87 @@ +test (1.2-2) unstable; urgency=low + + * This is the last entry in changelog O. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:18:50 +0200 + +test (1.2-1) unstable; urgency=low + + * This entry should not have conflicts with Algorithm::Merge installed. + * Changelog B should a have supplementary line above this one. + * Pi is 3.14 is true for all changelogs. + * Changelog A should have a supplementary line + somewhere in this sub-list + - The weather is nice + - Yet I'm hacking on dpkg + - What does that mean about me? + * This line should be shared but the next one is dropped in B only. + * If I'm here it's because the changelog is not B (I should not appear + in the resulting changelog). + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:09:07 +0200 + +test (1.1-1+conflict2) unstable; urgency=low + + * This entry has a conflict on the next line. + * I'm in changelog O (old). + * This line is the same in all 3 versions. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:07:40 +0200 + +test (1.1-1+conflict1) unstable; urgency=low + + * This entry has conflicts on the header line: A wants distribution + experimental (instead of unstable) and B wants urgency=high (instead + of low). + * But it also has a conflict on the trailer line. A changed the + timestamp to 18:05:00 and B to 18:06:00. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 18:04:18 +0200 + +test (1.1-1+change2) unstable; urgency=low + + * This entry is everywhere but the last line is different in A. The + merged version should have what's in A. Furthermore the timestamp in + B is set to 17:55:00, it should also be picked up. + * I'm not in changelog A. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:54:52 +0200 + +test (1.1-1+change1) unstable; urgency=low + + * This entry is everywhere but the last line is different in B. The + merged version should have what's in B. Furthermore the urgency in + A is set to high, it should also be picked up. + * I'm not in changelog B. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:50:58 +0200 + +test (1.1-0.1) stable; urgency=low + + * This entry is present in O only, it should not appear in the merged + changelog. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:49:15 +0200 + +test (1.0-3) unstable; urgency=low + + * This entry is dropped in A only. + * Since it's in O and B, it should not appear in the result. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:41:31 +0200 + +test (1.0-2) unstable; urgency=low + + * This entry is dropped in B only. + * Since it's in O and A, it should not appear in the result. + * Pi is 3.14. + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:39:15 +0200 + +test (1.0-1) unstable; urgency=low + + * Initial release. (Closes: #XXXXXX) + + -- Raphaël Hertzog <hertzog@debian.org> Sun, 18 Apr 2010 17:37:46 +0200 + +vim: et diff --git a/scripts/t/dpkg_mergechangelogs/ch-unreleased-a b/scripts/t/dpkg_mergechangelogs/ch-unreleased-a new file mode 100644 index 0000000..d86d3ff --- /dev/null +++ b/scripts/t/dpkg_mergechangelogs/ch-unreleased-a @@ -0,0 +1,12 @@ +test (1.2-0) UNRELEASED; urgency=low + + * New upstream release. + - Adds a new feature. + + -- Dpkg Developers <debian-dpkg@lists.debian.org> Thu, 02 Sep 2021 05:26:30 +0200 + +test (1.0-1) unstable; urgency=low + + * Initial release. + + -- Dpkg Developers <debian-dpkg@lists.debian.org> Wed, 20 Aug 1997 00:36:28 +0000 diff --git a/scripts/t/dpkg_mergechangelogs/ch-unreleased-b b/scripts/t/dpkg_mergechangelogs/ch-unreleased-b new file mode 100644 index 0000000..96263e3 --- /dev/null +++ b/scripts/t/dpkg_mergechangelogs/ch-unreleased-b @@ -0,0 +1,12 @@ +test (1.1-1) UNRELEASED; urgency=low + + * New upstream release. + - Fixes a random bug. + + -- Dpkg Developers <debian-dpkg@lists.debian.org> Wed, 01 Sep 2021 05:27:48 +0200 + +test (1.0) unstable; urgency=low + + * Initial release. + + -- Dpkg Developers <debian-dpkg@lists.debian.org> Wed, 20 Aug 1997 00:36:28 +0000 diff --git a/scripts/t/dpkg_mergechangelogs/ch-unreleased-merged b/scripts/t/dpkg_mergechangelogs/ch-unreleased-merged new file mode 100644 index 0000000..5fbf866 --- /dev/null +++ b/scripts/t/dpkg_mergechangelogs/ch-unreleased-merged @@ -0,0 +1,24 @@ +<<<<<<< +test (1.2-0) UNRELEASED; urgency=low +======= +test (1.1-1) UNRELEASED; urgency=low +>>>>>>> + + * New upstream release. +<<<<<<< + - Adds a new feature. +======= + - Fixes a random bug. +>>>>>>> + +<<<<<<< + -- Dpkg Developers <debian-dpkg@lists.debian.org> Thu, 02 Sep 2021 05:26:30 +0200 +======= + -- Dpkg Developers <debian-dpkg@lists.debian.org> Wed, 01 Sep 2021 05:27:48 +0200 +>>>>>>> + +test (1.0-1) unstable; urgency=low + + * Initial release. + + -- Dpkg Developers <debian-dpkg@lists.debian.org> Wed, 20 Aug 1997 00:36:28 +0000 diff --git a/scripts/t/dpkg_mergechangelogs/ch-unreleased-merged-basic b/scripts/t/dpkg_mergechangelogs/ch-unreleased-merged-basic new file mode 100644 index 0000000..dd6938c --- /dev/null +++ b/scripts/t/dpkg_mergechangelogs/ch-unreleased-merged-basic @@ -0,0 +1,25 @@ +<<<<<<< +test (1.2-0) UNRELEASED; urgency=low +======= +test (1.1-1) UNRELEASED; urgency=low +>>>>>>> + +<<<<<<< + * New upstream release. + - Adds a new feature. +======= + * New upstream release. + - Fixes a random bug. +>>>>>>> + +<<<<<<< + -- Dpkg Developers <debian-dpkg@lists.debian.org> Thu, 02 Sep 2021 05:26:30 +0200 +======= + -- Dpkg Developers <debian-dpkg@lists.debian.org> Wed, 01 Sep 2021 05:27:48 +0200 +>>>>>>> + +test (1.0-1) unstable; urgency=low + + * Initial release. + + -- Dpkg Developers <debian-dpkg@lists.debian.org> Wed, 20 Aug 1997 00:36:28 +0000 diff --git a/scripts/t/dpkg_mergechangelogs/ch-unreleased-old b/scripts/t/dpkg_mergechangelogs/ch-unreleased-old new file mode 100644 index 0000000..e9377c3 --- /dev/null +++ b/scripts/t/dpkg_mergechangelogs/ch-unreleased-old @@ -0,0 +1,5 @@ +test (1.0) unstable; urgency=low + + * Initial release. + + -- Dpkg Developers <debian-dpkg@lists.debian.org> Wed, 20 Aug 1997 00:36:28 +0000 diff --git a/scripts/t/dpkg_source.t b/scripts/t/dpkg_source.t new file mode 100644 index 0000000..056aa95 --- /dev/null +++ b/scripts/t/dpkg_source.t @@ -0,0 +1,184 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More; +use Test::Dpkg qw(:needs :paths test_neutralize_checksums); + +use File::Spec::Functions qw(rel2abs); +use File::Compare; +use File::Path qw(make_path); + +use Dpkg::File; +use Dpkg::IPC; +use Dpkg::Substvars; + +test_needs_command('xz'); + +plan tests => 8; + +my $srcdir = rel2abs($ENV{srcdir} || '.'); +my $datadir = "$srcdir/t/dpkg_source"; +my $tmpdir = test_get_temp_path(); + +$ENV{$_} = rel2abs($ENV{$_}) foreach qw(DPKG_DATADIR DPKG_ORIGINS_DIR); + +# Delete variables that can affect the tests. +delete $ENV{SOURCE_DATE_EPOCH}; + +chdir $tmpdir; + +my $tmpl_format = <<'TMPL_FORMAT'; +3.0 (native) +TMPL_FORMAT + +my $tmpl_changelog = <<'TMPL_CHANGELOG'; +${source-name} (${source-version}) ${suite}; urgency=${urgency} + + * Test package. + + -- ${maintainer} Sat, 05 Jul 2014 21:11:22 +0200 +TMPL_CHANGELOG + +my $tmpl_control = <<'TMPL_CONTROL'; +Source: ${source-name} +Section: ${source-section} +Priority: ${source-priority} +Maintainer: ${maintainer} +Standards-Version: 1.0 +Testsuite: ${source-testsuite} + +Package: test-binary +Architecture: all +Description: test package +TMPL_CONTROL + +my $tmpl_control_tests = <<'TMPL_CONTROL_TESTS'; +Test-Command: test-unique +Depends: @, aa + +Tests: test-dupe +Depends: @builddeps@ + +Test-Command: test-dupe +Depends: bb, test-binary + +Test-Command: test-dupe +Depends: cc +TMPL_CONTROL_TESTS + +my %default_substvars = ( + 'source-name' => 'test-source', + 'source-version' => 0, + 'source-section' => 'test', + 'source-priority' => 'optional', + 'source-testsuite' => 'autopkgtest', + 'suite' => 'unstable', + 'urgency' => 'low', + 'maintainer' => 'Dpkg Developers <debian-dpkg@lists.debian.org>', +); + +sub gen_from_tmpl +{ + my ($pathname, $tmpl, $substvars) = @_; + + file_dump($pathname, $substvars->substvars($tmpl)); +} + +sub gen_source +{ + my (%options) = @_; + + my $substvars = Dpkg::Substvars->new(); + foreach my $var ((keys %default_substvars, keys %options)) { + my $value = $options{$var} // $default_substvars{$var}; + + $substvars->set_as_auto($var, $value); + } + + my $source = $substvars->get('source-name'); + my $version = $substvars->get('source-version'); + my $dirname = "$source-$version"; + + make_path("$dirname/debian/source"); + + gen_from_tmpl("$dirname/debian/source/format", $tmpl_format, $substvars); + gen_from_tmpl("$dirname/debian/changelog", $tmpl_changelog, $substvars); + gen_from_tmpl("$dirname/debian/control", $tmpl_control, $substvars); + + if (defined $options{'control-test'}) { + make_path("$dirname/debian/tests"); + gen_from_tmpl("$dirname/debian/tests/control", $options{'control-test'}, $substvars); + } + + return $dirname; +} + +sub test_diff +{ + my $filename = shift; + + my $expected_file = "$datadir/$filename"; + my $generated_file = $filename; + + test_neutralize_checksums($generated_file); + + my $res = compare($expected_file, $generated_file); + if ($res) { + system "diff -u $expected_file $generated_file >&2"; + } + ok($res == 0, "generated file matches expected one ($expected_file)"); +} + +sub test_build_source +{ + my ($name) = shift; + my $stderr; + + spawn(exec => [ $ENV{PERL}, "$srcdir/dpkg-source.pl", '--build', $name ], + error_to_string => \$stderr, + wait_child => 1, nocheck => 1); + + ok($? == 0, 'dpkg-source --build succeeded'); + diag($stderr) unless $? == 0; + + my $basename = $name =~ tr/-/_/r; + + test_diff("$basename.dsc"); +} + +my $dirname; + +$dirname = gen_source('source-name' => 'testsuite', + 'source-version' => 0, + 'control-test' => ''); +test_build_source($dirname); + +$dirname = gen_source('source-name' => 'testsuite', + 'source-version' => 1, + 'control-test' => ''); +test_build_source($dirname); + +$dirname = gen_source('source-name' => 'testsuite', + 'source-version' => 2, + 'source-testsuite' => 'smokepkgtest, unitpkgtest, funcpkgtest', + 'control-test' => $tmpl_control_tests); +test_build_source($dirname); + +$dirname = gen_source('source-name' => 'testsuite', + 'source-version' => 3); +test_build_source($dirname); diff --git a/scripts/t/dpkg_source/testsuite_0.dsc b/scripts/t/dpkg_source/testsuite_0.dsc new file mode 100644 index 0000000..4ec33a4 --- /dev/null +++ b/scripts/t/dpkg_source/testsuite_0.dsc @@ -0,0 +1,16 @@ +Format: 3.0 (native) +Source: testsuite +Binary: test-binary +Architecture: all +Version: 0 +Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org> +Standards-Version: 1.0 +Testsuite: autopkgtest +Package-List: + test-binary deb test optional arch=all +Checksums-Sha1: + 0000000000000000000000000000000000000000 0 testsuite_0.tar.xz +Checksums-Sha256: + 0000000000000000000000000000000000000000000000000000000000000000 0 testsuite_0.tar.xz +Files: + 00000000000000000000000000000000 0 testsuite_0.tar.xz diff --git a/scripts/t/dpkg_source/testsuite_1.dsc b/scripts/t/dpkg_source/testsuite_1.dsc new file mode 100644 index 0000000..c408625 --- /dev/null +++ b/scripts/t/dpkg_source/testsuite_1.dsc @@ -0,0 +1,16 @@ +Format: 3.0 (native) +Source: testsuite +Binary: test-binary +Architecture: all +Version: 1 +Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org> +Standards-Version: 1.0 +Testsuite: autopkgtest +Package-List: + test-binary deb test optional arch=all +Checksums-Sha1: + 0000000000000000000000000000000000000000 0 testsuite_1.tar.xz +Checksums-Sha256: + 0000000000000000000000000000000000000000000000000000000000000000 0 testsuite_1.tar.xz +Files: + 00000000000000000000000000000000 0 testsuite_1.tar.xz diff --git a/scripts/t/dpkg_source/testsuite_2.dsc b/scripts/t/dpkg_source/testsuite_2.dsc new file mode 100644 index 0000000..184c47e --- /dev/null +++ b/scripts/t/dpkg_source/testsuite_2.dsc @@ -0,0 +1,17 @@ +Format: 3.0 (native) +Source: testsuite +Binary: test-binary +Architecture: all +Version: 2 +Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org> +Standards-Version: 1.0 +Testsuite: autopkgtest, funcpkgtest, smokepkgtest, unitpkgtest +Testsuite-Triggers: @builddeps@, aa, bb, cc +Package-List: + test-binary deb test optional arch=all +Checksums-Sha1: + 0000000000000000000000000000000000000000 0 testsuite_2.tar.xz +Checksums-Sha256: + 0000000000000000000000000000000000000000000000000000000000000000 0 testsuite_2.tar.xz +Files: + 00000000000000000000000000000000 0 testsuite_2.tar.xz diff --git a/scripts/t/dpkg_source/testsuite_3.dsc b/scripts/t/dpkg_source/testsuite_3.dsc new file mode 100644 index 0000000..88be231 --- /dev/null +++ b/scripts/t/dpkg_source/testsuite_3.dsc @@ -0,0 +1,15 @@ +Format: 3.0 (native) +Source: testsuite +Binary: test-binary +Architecture: all +Version: 3 +Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org> +Standards-Version: 1.0 +Package-List: + test-binary deb test optional arch=all +Checksums-Sha1: + 0000000000000000000000000000000000000000 0 testsuite_3.tar.xz +Checksums-Sha256: + 0000000000000000000000000000000000000000000000000000000000000000 0 testsuite_3.tar.xz +Files: + 00000000000000000000000000000000 0 testsuite_3.tar.xz diff --git a/scripts/t/mk.t b/scripts/t/mk.t new file mode 100644 index 0000000..a31eef7 --- /dev/null +++ b/scripts/t/mk.t @@ -0,0 +1,153 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More tests => 12; +use Test::Dpkg qw(:paths); + +use File::Spec::Functions qw(rel2abs); + +use Dpkg (); +use Dpkg::ErrorHandling; +use Dpkg::IPC; +use Dpkg::Vendor; + +my $srcdir = rel2abs($ENV{srcdir} || '.'); +my $datadir = test_get_data_path(); + +# Turn these into absolute names so that we can safely switch to the test +# directory with «make -C». +$ENV{$_} = rel2abs($ENV{$_}) foreach qw(srcdir DPKG_DATADIR DPKG_ORIGINS_DIR); + +# Any parallelization from the parent should be ignored, we are testing +# the makefiles serially anyway. +delete $ENV{MAKEFLAGS}; + +# Delete other variables that can affect the tests. +delete $ENV{$_} foreach grep { m/^DEB_/ } keys %ENV; + +# Set architecture variables to not require dpkg nor gcc. +$ENV{PATH} = "$srcdir/t/mock-bin:$ENV{PATH}"; + +$ENV{DEB_BUILD_PATH} = rel2abs($datadir); + +sub test_makefile { + my ($makefile, $desc) = @_; + + $desc //= 'default'; + + spawn(exec => [ $Dpkg::PROGMAKE, '-C', $datadir, '-f', $makefile ], + wait_child => 1, nocheck => 1); + ok($? == 0, "makefile $makefile computes all values correctly ($desc)"); +} + +sub cmd_get_vars { + my (@cmd) = @_; + my %var; + + open my $cmd_fh, '-|', @cmd or subprocerr($cmd[0]); + while (<$cmd_fh>) { + chomp; + my ($key, $value) = split /=/, $_, 2; + $var{$key} = $value; + } + close $cmd_fh or subprocerr($cmd[0]); + + return %var; +} + +# Test makefiles. + +my %arch = cmd_get_vars($ENV{PERL}, "$srcdir/dpkg-architecture.pl", '-f'); + +while (my ($k, $v) = each %arch) { + delete $ENV{$k}; + $ENV{"TEST_$k"} = $v; +} +test_makefile('architecture.mk', 'without envvars'); +while (my ($k, $v) = each %arch) { + $ENV{$k} = $v; +} +test_makefile('architecture.mk', 'with envvars'); + +test_makefile('buildapi.mk'); + +$ENV{DEB_BUILD_OPTIONS} = 'parallel=16'; +$ENV{TEST_DEB_BUILD_OPTION_PARALLEL} = '16'; +test_makefile('buildopts.mk'); +delete $ENV{DEB_BUILD_OPTIONS}; +delete $ENV{TEST_DEB_BUILD_OPTION_PARALLEL}; + +my %buildflag = cmd_get_vars($ENV{PERL}, "$srcdir/dpkg-buildflags.pl"); + +while (my ($var, $flags) = each %buildflag) { + delete $ENV{$var}; + $ENV{"TEST_$var"} = $flags; +} +test_makefile('buildflags.mk'); + +my %buildtools = ( + AS => 'as', + CPP => 'gcc -E', + CC => 'gcc', + CXX => 'g++', + OBJC => 'gcc', + OBJCXX => 'g++', + F77 => 'gfortran', + FC => 'gfortran', + LD => 'ld', + STRIP => 'strip', + OBJCOPY => 'objcopy', + OBJDUMP => 'objdump', + NM => 'nm', + AR => 'ar', + RANLIB => 'ranlib', + PKG_CONFIG => 'pkgconf', +); + +while (my ($var, $tool) = each %buildtools) { + delete $ENV{$var}; + $ENV{"TEST_$var"} = "$ENV{DEB_HOST_GNU_TYPE}-$tool"; + delete $ENV{"${var}_FOR_BUILD"}; + $ENV{"TEST_${var}_FOR_BUILD"} = "$ENV{DEB_BUILD_GNU_TYPE}-$tool"; +} +test_makefile('buildtools.mk', 'without envvars'); + +$ENV{DEB_BUILD_OPTIONS} = 'nostrip'; +$ENV{TEST_STRIP} = ':'; +$ENV{TEST_STRIP_FOR_BUILD} = ':'; +test_makefile('buildtools.mk', 'with envvars'); +delete $ENV{DEB_BUILD_OPTIONS}; + +foreach my $tool (keys %buildtools) { + delete $ENV{${tool}}; + delete $ENV{"${tool}_FOR_BUILD"}; +} + +delete $ENV{SOURCE_DATE_EPOCH}; +# Timestamp in seconds since the epoch from date in test debian/changelog +# entry: «Tue, 04 Aug 2015 16:13:50 +0200». +$ENV{TEST_SOURCE_DATE_EPOCH} = 1438697630; +test_makefile('pkg-info.mk'); + +$ENV{SOURCE_DATE_EPOCH} = 100; +$ENV{TEST_SOURCE_DATE_EPOCH} = 100; +test_makefile('pkg-info.mk'); + +test_makefile('vendor.mk'); +test_makefile('vendor-v0.mk'); +test_makefile('vendor-v1.mk'); diff --git a/scripts/t/mk/architecture.mk b/scripts/t/mk/architecture.mk new file mode 100644 index 0000000..2ac0222 --- /dev/null +++ b/scripts/t/mk/architecture.mk @@ -0,0 +1,36 @@ +include $(srcdir)/mk/architecture.mk + +test: + test "$(DEB_BUILD_ARCH)" = "$(TEST_DEB_BUILD_ARCH)" + test "$(DEB_BUILD_ARCH_ABI)" = "$(TEST_DEB_BUILD_ARCH_ABI)" + test "$(DEB_BUILD_ARCH_BITS)" = "$(TEST_DEB_BUILD_ARCH_BITS)" + test "$(DEB_BUILD_ARCH_CPU)" = "$(TEST_DEB_BUILD_ARCH_CPU)" + test "$(DEB_BUILD_ARCH_ENDIAN)" = "$(TEST_DEB_BUILD_ARCH_ENDIAN)" + test "$(DEB_BUILD_ARCH_LIBC)" = "$(TEST_DEB_BUILD_ARCH_LIBC)" + test "$(DEB_BUILD_ARCH_OS)" = "$(TEST_DEB_BUILD_ARCH_OS)" + test "$(DEB_BUILD_GNU_CPU)" = "$(TEST_DEB_BUILD_GNU_CPU)" + test "$(DEB_BUILD_GNU_SYSTEM)" = "$(TEST_DEB_BUILD_GNU_SYSTEM)" + test "$(DEB_BUILD_GNU_TYPE)" = "$(TEST_DEB_BUILD_GNU_TYPE)" + test "$(DEB_BUILD_MULTIARCH)" = "$(TEST_DEB_BUILD_MULTIARCH)" + test "$(DEB_HOST_ARCH)" = "$(TEST_DEB_HOST_ARCH)" + test "$(DEB_HOST_ARCH_ABI)" = "$(TEST_DEB_HOST_ARCH_ABI)" + test "$(DEB_HOST_ARCH_BITS)" = "$(TEST_DEB_HOST_ARCH_BITS)" + test "$(DEB_HOST_ARCH_CPU)" = "$(TEST_DEB_HOST_ARCH_CPU)" + test "$(DEB_HOST_ARCH_ENDIAN)" = "$(TEST_DEB_HOST_ARCH_ENDIAN)" + test "$(DEB_HOST_ARCH_LIBC)" = "$(TEST_DEB_HOST_ARCH_LIBC)" + test "$(DEB_HOST_ARCH_OS)" = "$(TEST_DEB_HOST_ARCH_OS)" + test "$(DEB_HOST_GNU_CPU)" = "$(TEST_DEB_HOST_GNU_CPU)" + test "$(DEB_HOST_GNU_SYSTEM)" = "$(TEST_DEB_HOST_GNU_SYSTEM)" + test "$(DEB_HOST_GNU_TYPE)" = "$(TEST_DEB_HOST_GNU_TYPE)" + test "$(DEB_HOST_MULTIARCH)" = "$(TEST_DEB_HOST_MULTIARCH)" + test "$(DEB_TARGET_ARCH)" = "$(TEST_DEB_TARGET_ARCH)" + test "$(DEB_TARGET_ARCH_ABI)" = "$(TEST_DEB_TARGET_ARCH_ABI)" + test "$(DEB_TARGET_ARCH_BITS)" = "$(TEST_DEB_TARGET_ARCH_BITS)" + test "$(DEB_TARGET_ARCH_CPU)" = "$(TEST_DEB_TARGET_ARCH_CPU)" + test "$(DEB_TARGET_ARCH_ENDIAN)" = "$(TEST_DEB_TARGET_ARCH_ENDIAN)" + test "$(DEB_TARGET_ARCH_LIBC)" = "$(TEST_DEB_TARGET_ARCH_LIBC)" + test "$(DEB_TARGET_ARCH_OS)" = "$(TEST_DEB_TARGET_ARCH_OS)" + test "$(DEB_TARGET_GNU_CPU)" = "$(TEST_DEB_TARGET_GNU_CPU)" + test "$(DEB_TARGET_GNU_SYSTEM)" = "$(TEST_DEB_TARGET_GNU_SYSTEM)" + test "$(DEB_TARGET_GNU_TYPE)" = "$(TEST_DEB_TARGET_GNU_TYPE)" + test "$(DEB_TARGET_MULTIARCH)" = "$(TEST_DEB_TARGET_MULTIARCH)" diff --git a/scripts/t/mk/buildapi.mk b/scripts/t/mk/buildapi.mk new file mode 100644 index 0000000..96269bc --- /dev/null +++ b/scripts/t/mk/buildapi.mk @@ -0,0 +1,4 @@ +include $(srcdir)/mk/buildapi.mk + +test: + test "$(DPKG_BUILD_API)" = "0" diff --git a/scripts/t/mk/buildflags.mk b/scripts/t/mk/buildflags.mk new file mode 100644 index 0000000..94d85a7 --- /dev/null +++ b/scripts/t/mk/buildflags.mk @@ -0,0 +1,26 @@ +DEB_CPPFLAGS_MAINT_APPEND = -DTEST_MK=test-host +DEB_CPPFLAGS_FOR_BUILD_MAINT_APPEND = -DTEST_MK=test-build + +include $(srcdir)/mk/buildflags.mk + +test: + test "$(ASFLAGS)" = "$(TEST_ASFLAGS)" + test "$(ASFLAGS_FOR_BUILD)" = "$(TEST_ASFLAGS_FOR_BUILD)" + test "$(CFLAGS)" = "$(TEST_CFLAGS)" + test "$(CFLAGS_FOR_BUILD)" = "$(TEST_CFLAGS_FOR_BUILD)" + test "$(CPPFLAGS)" = "$(TEST_CPPFLAGS) -DTEST_MK=test-host" + test "$(CPPFLAGS_FOR_BUILD)" = "$(TEST_CPPFLAGS_FOR_BUILD)-DTEST_MK=test-build" + test "$(CXXFLAGS)" = "$(TEST_CXXFLAGS)" + test "$(CXXFLAGS_FOR_BUILD)" = "$(TEST_CXXFLAGS_FOR_BUILD)" + test "$(DFLAGS)" = "$(TEST_DFLAGS)" + test "$(DFLAGS_FOR_BUILD)" = "$(TEST_DFLAGS_FOR_BUILD)" + test "$(FCFLAGS)" = "$(TEST_FCFLAGS)" + test "$(FCFLAGS_FOR_BUILD)" = "$(TEST_FCFLAGS_FOR_BUILD)" + test "$(FFLAGS)" = "$(TEST_FFLAGS)" + test "$(FFLAGS_FOR_BUILD)" = "$(TEST_FFLAGS_FOR_BUILD)" + test "$(LDFLAGS)" = "$(TEST_LDFLAGS)" + test "$(LDFLAGS_FOR_BUILD)" = "$(TEST_LDFLAGS_FOR_BUILD)" + test "$(OBJCFLAGS)" = "$(TEST_OBJCFLAGS)" + test "$(OBJCFLAGS_FOR_BUILD)" = "$(TEST_OBJCFLAGS_FOR_BUILD)" + test "$(OBJCXXFLAGS)" = "$(TEST_OBJCXXFLAGS)" + test "$(OBJCXXFLAGS_FOR_BUILD)" = "$(TEST_OBJCXXFLAGS_FOR_BUILD)" diff --git a/scripts/t/mk/buildopts.mk b/scripts/t/mk/buildopts.mk new file mode 100644 index 0000000..46d0efa --- /dev/null +++ b/scripts/t/mk/buildopts.mk @@ -0,0 +1,4 @@ +include $(srcdir)/mk/buildopts.mk + +test: + test "$(DEB_BUILD_OPTION_PARALLEL)" = "$(TEST_DEB_BUILD_OPTION_PARALLEL)" diff --git a/scripts/t/mk/buildtools.mk b/scripts/t/mk/buildtools.mk new file mode 100644 index 0000000..6c27c5c --- /dev/null +++ b/scripts/t/mk/buildtools.mk @@ -0,0 +1,33 @@ +include $(srcdir)/mk/buildtools.mk + +test: + test "$(AS)" = "$(TEST_AS)" + test "$(AS_FOR_BUILD)" = "$(TEST_AS_FOR_BUILD)" + test "$(CC)" = "$(TEST_CC)" + test "$(CC_FOR_BUILD)" = "$(TEST_CC_FOR_BUILD)" + test "$(CXX)" = "$(TEST_CXX)" + test "$(CXX_FOR_BUILD)" = "$(TEST_CXX_FOR_BUILD)" + test "$(OBJC)" = "$(TEST_OBJC)" + test "$(OBJC_FOR_BUILD)" = "$(TEST_OBJC_FOR_BUILD)" + test "$(OBJCXX)" = "$(TEST_OBJCXX)" + test "$(OBJCXX_FOR_BUILD)" = "$(TEST_OBJCXX_FOR_BUILD)" + test "$(F77)" = "$(TEST_F77)" + test "$(F77_FOR_BUILD)" = "$(TEST_F77_FOR_BUILD)" + test "$(FC)" = "$(TEST_FC)" + test "$(FC_FOR_BUILD)" = "$(TEST_FC_FOR_BUILD)" + test "$(LD)" = "$(TEST_LD)" + test "$(LD_FOR_BUILD)" = "$(TEST_LD_FOR_BUILD)" + test "$(STRIP)" = "$(TEST_STRIP)" + test "$(STRIP_FOR_BUILD)" = "$(TEST_STRIP_FOR_BUILD)" + test "$(OBJCOPY)" = "$(TEST_OBJCOPY)" + test "$(OBJCOPY_FOR_BUILD)" = "$(TEST_OBJCOPY_FOR_BUILD)" + test "$(OBJDUMP)" = "$(TEST_OBJDUMP)" + test "$(OBJDUMP_FOR_BUILD)" = "$(TEST_OBJDUMP_FOR_BUILD)" + test "$(NM)" = "$(TEST_NM)" + test "$(NM_FOR_BUILD)" = "$(TEST_NM_FOR_BUILD)" + test "$(AR)" = "$(TEST_AR)" + test "$(AR_FOR_BUILD)" = "$(TEST_AR_FOR_BUILD)" + test "$(RANLIB)" = "$(TEST_RANLIB)" + test "$(RANLIB_FOR_BUILD)" = "$(TEST_RANLIB_FOR_BUILD)" + test "$(PKG_CONFIG)" = "$(TEST_PKG_CONFIG)" + test "$(PKG_CONFIG_FOR_BUILD)" = "$(TEST_PKG_CONFIG_FOR_BUILD)" diff --git a/scripts/t/mk/debian/changelog b/scripts/t/mk/debian/changelog new file mode 100644 index 0000000..728c8ec --- /dev/null +++ b/scripts/t/mk/debian/changelog @@ -0,0 +1,5 @@ +source (1:2:3.4-5-6) suite; urgency=low + + * Initial release. + + -- Dpkg Developers <debian-dpkg@lists.debian.org> Tue, 04 Aug 2015 16:13:50 +0200 diff --git a/scripts/t/mk/debian/control b/scripts/t/mk/debian/control new file mode 100644 index 0000000..43b35d3 --- /dev/null +++ b/scripts/t/mk/debian/control @@ -0,0 +1,6 @@ +Source: source +Build-Depends: + dpkg-build-api (= 0), + +Package: binary +Architecture: all diff --git a/scripts/t/mk/pkg-info.mk b/scripts/t/mk/pkg-info.mk new file mode 100644 index 0000000..c0e3287 --- /dev/null +++ b/scripts/t/mk/pkg-info.mk @@ -0,0 +1,11 @@ +include $(srcdir)/mk/pkg-info.mk + +test: + test "$(DEB_SOURCE)" = "source" + test "$(DEB_VERSION)" = "1:2:3.4-5-6" + test "$(DEB_VERSION_EPOCH_UPSTREAM)" = "1:2:3.4-5" + test "$(DEB_VERSION_UPSTREAM_REVISION)" = "2:3.4-5-6" + test "$(DEB_VERSION_UPSTREAM)" = "2:3.4-5" + test "$(DEB_DISTRIBUTION)" = "suite" + test '$(SOURCE_DATE_EPOCH)' = '$(TEST_SOURCE_DATE_EPOCH)' + test "$${SOURCE_DATE_EPOCH}" = '$(TEST_SOURCE_DATE_EPOCH)' diff --git a/scripts/t/mk/vendor-v0.mk b/scripts/t/mk/vendor-v0.mk new file mode 100644 index 0000000..602a8c6 --- /dev/null +++ b/scripts/t/mk/vendor-v0.mk @@ -0,0 +1,6 @@ +dpkg_vendor_derives_from = $(dpkg_vendor_derives_from_v0) + +include $(srcdir)/mk/vendor.mk + +test: + test "$(shell $(call dpkg_vendor_derives_from,debian))" = "yes" diff --git a/scripts/t/mk/vendor-v1.mk b/scripts/t/mk/vendor-v1.mk new file mode 100644 index 0000000..11c1314 --- /dev/null +++ b/scripts/t/mk/vendor-v1.mk @@ -0,0 +1,6 @@ +include $(srcdir)/mk/vendor.mk + +dpkg_vendor_derives_from = $(dpkg_vendor_derives_from_v1) + +test: + test "$(call dpkg_vendor_derives_from,debian)" = "yes" diff --git a/scripts/t/mk/vendor.mk b/scripts/t/mk/vendor.mk new file mode 100644 index 0000000..4e0d9ff --- /dev/null +++ b/scripts/t/mk/vendor.mk @@ -0,0 +1,6 @@ +include $(srcdir)/mk/vendor.mk + +test: + test "$(DEB_VENDOR)" = "Debian" + test "$(DEB_PARENT_VENDOR)" = "" + test "$(shell $(call dpkg_vendor_derives_from,debian))" = "yes" diff --git a/scripts/t/mock-bin/dpkg b/scripts/t/mock-bin/dpkg new file mode 100755 index 0000000..fbfba35 --- /dev/null +++ b/scripts/t/mock-bin/dpkg @@ -0,0 +1,20 @@ +#!/bin/sh + +set -e + +args="$@" + +while [ $# -gt 0 ]; do + opt="$1" + shift + + case "$opt" in + --print-architecture) + echo amd64 + exit 0 + esac +done + +# Otherwise fail hard. +echo "$0: unsupported command ($args) in mock wrapper" +exit 1 diff --git a/scripts/t/mock-bin/gcc b/scripts/t/mock-bin/gcc new file mode 100755 index 0000000..0174f17 --- /dev/null +++ b/scripts/t/mock-bin/gcc @@ -0,0 +1,20 @@ +#!/bin/sh + +set -e + +args="$@" + +while [ $# -gt 0 ]; do + opt="$1" + shift + + case "$opt" in + -dumpmachine) + echo x86_64-linux-gnu + exit 0 + esac +done + +# Otherwise fail hard. +echo "$0: unsupported command ($args) in mock wrapper" +exit 1 diff --git a/scripts/t/origins/debian b/scripts/t/origins/debian new file mode 100644 index 0000000..3b623d2 --- /dev/null +++ b/scripts/t/origins/debian @@ -0,0 +1,3 @@ +Vendor: Debian +Vendor-URL: https://www.debian.org/ +Bugs: debbugs://bugs.debian.org diff --git a/scripts/t/origins/default b/scripts/t/origins/default new file mode 100644 index 0000000..3b623d2 --- /dev/null +++ b/scripts/t/origins/default @@ -0,0 +1,3 @@ +Vendor: Debian +Vendor-URL: https://www.debian.org/ +Bugs: debbugs://bugs.debian.org diff --git a/scripts/t/origins/devuan b/scripts/t/origins/devuan new file mode 100644 index 0000000..5333148 --- /dev/null +++ b/scripts/t/origins/devuan @@ -0,0 +1,4 @@ +Vendor: Devuan +Vendor-URL: https://www.devuan.org/ +Bugs: debbugs://bugs.devuan.org +Parent: Debian diff --git a/scripts/t/origins/gnewsense b/scripts/t/origins/gnewsense new file mode 100644 index 0000000..e67f862 --- /dev/null +++ b/scripts/t/origins/gnewsense @@ -0,0 +1,4 @@ +Vendor: gNewSense +Vendor-URL: http://www.gnewsense.org/ +Bugs: https://savannah.nongnu.org/bugs/?group=gnewsense +Parent: Debian diff --git a/scripts/t/origins/ubuntu b/scripts/t/origins/ubuntu new file mode 100644 index 0000000..9ebae11 --- /dev/null +++ b/scripts/t/origins/ubuntu @@ -0,0 +1,4 @@ +Vendor: Ubuntu +Vendor-URL: https://www.ubuntu.com/ +Bugs: https://bugs.launchpad.net/ubuntu/+filebug +Parent: Debian |