1#! /usr/bin/perl 2 3# ex:ts=8 sw=4: 4# $OpenBSD: my,v 1.6 2019/08/19 12:11:04 espie Exp $ 5# 6# Copyright (c) 2011 Marc Espie <espie@openbsd.org> 7# 8# Permission to use, copy, modify, and distribute this software for any 9# purpose with or without fee is hereby granted, provided that the above 10# copyright notice and this permission notice appear in all copies. 11# 12# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 13# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 14# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 15# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 16# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 17# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 18# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 19use strict; 20use warnings; 21use File::Path; 22 23my $root = $ENV{'ROOT'}; 24 25File::Path::make_path("$root/pkgdb"); 26 27$ENV{'PKG_DBDIR'} = "$root/pkgdb"; 28my $prog = "pkg_".(shift @ARGV); 29 30my @args = ('-D', 'nonroot', @ARGV); 31if ($prog ne 'pkg_info') { 32 unshift(@args, '-B', $root); 33} 34if ($prog eq 'pkg_add') { 35 unshift(@args, '-D', 'unsigned'); 36} 37unshift(@args, '-D', 'NOINSTALLPATH'); 38unshift(@args, '-D', 'DONTLOG'); 39if ($ENV{'DEBUG'}) { 40 unshift(@args, 'perl', '-d', "/usr/sbin/$prog", '-D', 'debug'); 41} else { 42 unshift(@args, $prog); 43} 44print STDERR join(' ', $prog, @ARGV), "\n" unless $ENV{'SILENT'} || $ENV{'VERBOSE'}; 45print join(' ', @args), "\n" if $ENV{'VERBOSE'}; 46 47my $choices = { 48 pkg_add => 'PkgAdd', 49 pkg_check => 'PkgCheck', 50 pkg_create => 'PkgCreate', 51 pkg_delete => 'PkgDelete', 52 pkg_info => 'PkgInfo', 53 pkg_sign => 'PkgSign', 54 fw_update => 'FwUpdate', 55}; 56 57if (defined $ENV{INJECT}) { 58 my $module = "OpenBSD::$choices->{$prog}"; 59 eval "require $module"; 60 if ($@) { 61 die $@; 62 } 63 eval "require \"$ENV{INJECT}\""; 64 if ($@) { 65 die $@; 66 } 67 @ARGV = @args; 68 exit($module->parse_and_run(shift @ARGV)); 69} else { 70 exec {$args[0]} @args; 71} 72