diff options
author | 2004-11-02 23:53:20 +0000 | |
---|---|---|
committer | 2004-11-02 23:53:20 +0000 | |
commit | ffe45cef103fee792f88d9683ed445b8a7be88f3 (patch) | |
tree | bf18f847ccaa882e6b95efa4c0e3fedf14a6365b | |
parent | plug evcount.9 into build (diff) | |
download | wireguard-openbsd-ffe45cef103fee792f88d9683ed445b8a7be88f3.tar.xz wireguard-openbsd-ffe45cef103fee792f88d9683ed445b8a7be88f3.zip |
logic error: match library version of *new* plist against existing packages.
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/Update.pm | 65 | ||||
-rw-r--r-- | usr.sbin/pkg_add/pkg_add | 5 |
2 files changed, 44 insertions, 26 deletions
diff --git a/usr.sbin/pkg_add/OpenBSD/Update.pm b/usr.sbin/pkg_add/OpenBSD/Update.pm index e9f3c02b5c7..86f026f2e73 100644 --- a/usr.sbin/pkg_add/OpenBSD/Update.pm +++ b/usr.sbin/pkg_add/OpenBSD/Update.pm @@ -1,5 +1,5 @@ # ex:ts=8 sw=4: -# $OpenBSD: Update.pm,v 1.8 2004/11/02 18:50:36 espie Exp $ +# $OpenBSD: Update.pm,v 1.9 2004/11/02 23:53:21 espie Exp $ # # Copyright (c) 2004 Marc Espie <espie@openbsd.org> # @@ -33,6 +33,11 @@ sub can_update sub validate_depend { } + +sub register_libs +{ +} + sub updatable() { 1 } sub extract @@ -101,31 +106,10 @@ sub validate_depend $state->{okay} = 0; return; } - for my $spec (split(/,/, $self->{libspec})) { - my $dir; - if ($spec =~ m|.*/|) { - $dir = "$&"; - $spec = $'; - } else { - $dir = "lib"; - } - if ($spec =~ m/^(.*)\.(\d+)\.(\d+)$/) { - my ($libname, $major, $minor) = ($1, $2, $3); - my $v = $state->{libs}->{"$dir/lib$libname"}; - if (!defined $v) { - print "No such lib $libname\n"; - $state->{okay} = 0; - } - unless ($v->[0] == $major && $v->[1] >= $minor) { - print "Bad library version for $libname\n"; - $state->{okay} = 0; - } - } - } + push(@{$state->{libs_to_check}}, split(/,/, $self->{libspec})); } - package OpenBSD::PackingElement::Lib; -sub can_update +sub register_libs { my ($self, $state) = @_; @@ -162,7 +146,7 @@ sub can_do my $wantlist = []; my $r = OpenBSD::RequiredBy->new($toreplace); $state->{okay} = 1; - $state->{libs} = {}; + $state->{libs_to_check} = []; my $plist = OpenBSD::PackingList->fromfile(installed_info($toreplace).CONTENTS); $plist->visit('can_update', $state); if (-f $$r) { @@ -186,10 +170,41 @@ sub can_do } $plist->{wantlist} = $wantlist; + $plist->{libs_to_check} = $state->{libs_to_check}; return $state->{okay} ? $plist : 0; } +sub verify_libs +{ + my ($plist, $state) = @_; + $state->{libs} = {}; + $plist->visit('register_libs', $state); + for my $spec (@{$state->{libs_to_check}}) { + my $dir; + if ($spec =~ m|.*/|) { + $dir = "$&"; + $spec = $'; + } else { + $dir = "lib"; + } + if ($spec =~ m/^(.*)\.(\d+)\.(\d+)$/) { + my ($libname, $major, $minor) = ($1, $2, $3); + my $v = $state->{libs}->{"$dir/lib$libname"}; + if (!defined $v) { + print "No such lib $libname\n"; + return 0; + } + unless ($v->[0] == $major && $v->[1] >= $minor) { + print "Bad library version for $libname\n"; + return 0; + } + } + } + return 1; +} + + sub adjust_dependency { my ($dep, $from, $into) = @_; diff --git a/usr.sbin/pkg_add/pkg_add b/usr.sbin/pkg_add/pkg_add index 0c211cc8091..542774ababa 100644 --- a/usr.sbin/pkg_add/pkg_add +++ b/usr.sbin/pkg_add/pkg_add @@ -1,7 +1,7 @@ #! /usr/bin/perl # ex:ts=8 sw=4: -# $OpenBSD: pkg_add,v 1.92 2004/11/01 19:48:58 espie Exp $ +# $OpenBSD: pkg_add,v 1.93 2004/11/02 23:53:20 espie Exp $ # # Copyright (c) 2003-2004 Marc Espie <espie@openbsd.org> # @@ -155,6 +155,9 @@ sub pre_add($$) if ($toreplace ne '1') { $plist->{replacing} = $toreplace; $avoid = $toreplace->pkgname(); + if (!OpenBSD::Update::verify_libs($plist, $state)) { + return undef; + } } # second handling of conflicts my $l = OpenBSD::PkgCfl->make_conflict_list($plist); |