summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormkanat%bugzilla.org <>2006-07-29 03:04:39 +0200
committermkanat%bugzilla.org <>2006-07-29 03:04:39 +0200
commit0a075818e83337cad28529df317cca7bec93e32c (patch)
tree671df7cf7615e13024d6d9fad3eb2b3792a07e04
parent0d94f047fb3f02733195ce8c5ed822502611339e (diff)
downloadbugzilla-0a075818e83337cad28529df317cca7bec93e32c.tar.gz
bugzilla-0a075818e83337cad28529df317cca7bec93e32c.tar.xz
Bug 346275: checksetup.pl should read the "answers" file into a Safe
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> (module owner) a=myk
-rwxr-xr-xchecksetup.pl54
1 files changed, 35 insertions, 19 deletions
diff --git a/checksetup.pl b/checksetup.pl
index 3906ae463..7ca2a5852 100755
--- a/checksetup.pl
+++ b/checksetup.pl
@@ -206,11 +206,18 @@ L<Bugzilla::Install::Requirements>
=cut
+######################################################################
+# Initialization
+######################################################################
+
use strict;
use 5.008;
use File::Basename;
use File::Find;
use Getopt::Long qw(:config bundling);
+use Pod::Usage;
+use Safe;
+
BEGIN { chdir dirname($0); }
use lib ".";
use Bugzilla::Constants;
@@ -220,31 +227,40 @@ if ($^O =~ /MSWin32/i) {
require 5.008001; # for CGI 2.93 or higher
}
-my ($silent, %switch);
-our %answer;
+######################################################################
+# Subroutines
+######################################################################
+
+sub read_answers_file {
+ my %hash;
+ if ($ARGV[0]) {
+ my $s = new Safe;
+ $s->rdo($ARGV[0]);
+
+ die "Error reading $ARGV[0]: $!" if $!;
+ die "Error evaluating $ARGV[0]: $@" if $@;
+
+ # Now read the param back out from the sandbox
+ %hash = %{$s->varglob('answer')};
+ }
+ return \%hash;
+}
+######################################################################
+# Live Code
+######################################################################
+
+my %switch;
GetOptions(\%switch, 'help|h|?', 'check-modules', 'no-templates|t',
'verbose|v|no-silent');
-###########################################################################
-# Check for help request. Display help page if --help/-h/-? was passed.
-###########################################################################
-use Pod::Usage;
+# Print the help message if that switch was selected.
pod2usage({-verbose => 1, -exitval => 1}) if $switch{'help'};
-###########################################################################
-# Non-interactive override. Pass a filename on the command line which is
-# a Perl script. This script defines a %answer hash whose names are tags
-# and whose values are answers to all the questions checksetup.pl asks.
-# Grep this file for references to that hash to see the tags to use for the
-# possible answers. One example is ADMIN_EMAIL.
-###########################################################################
-if ($ARGV[0] && ($ARGV[0] !~ /^-/)) {
- do $ARGV[0]
- or ($@ && die("Error $@ processing $ARGV[0]"))
- or die("Error $! processing $ARGV[0]");
- $silent = !$switch{'verbose'};
-}
+# Read in the "answers" file if it exists, for running in
+# non-interactive mode.
+our %answer = %{read_answers_file()};
+my $silent = scalar(keys %answer) && !$switch{'verbose'};
###########################################################################
# Display version information