summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorespie <espie@openbsd.org>2004-11-02 23:53:20 +0000
committerespie <espie@openbsd.org>2004-11-02 23:53:20 +0000
commitffe45cef103fee792f88d9683ed445b8a7be88f3 (patch)
treebf18f847ccaa882e6b95efa4c0e3fedf14a6365b
parentplug evcount.9 into build (diff)
downloadwireguard-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.pm65
-rw-r--r--usr.sbin/pkg_add/pkg_add5
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);