From 0a075818e83337cad28529df317cca7bec93e32c Mon Sep 17 00:00:00 2001 From: "mkanat%bugzilla.org" <> Date: Sat, 29 Jul 2006 01:04:39 +0000 Subject: Bug 346275: checksetup.pl should read the "answers" file into a Safe Patch By Max Kanat-Alexander (module owner) a=myk --- checksetup.pl | 54 +++++++++++++++++++++++++++++++++++------------------- 1 file 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 =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 -- cgit v1.2.3-24-g4f1b