diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2019-08-25 15:53:27 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2019-08-25 15:53:27 +0300 |
commit | 0e7e7c20b7a953c1d5ad2d816aca21974d7802c9 (patch) | |
tree | f0b0da7acb1d6c57e3c9fca9d480866fd07924cf | |
parent | 447c9ac19f0ecac9a728de36409cc8d7afdf3001 (diff) | |
download | apache-defaults-0e7e7c20b7a953c1d5ad2d816aca21974d7802c9.tar.gz apache-defaults-0e7e7c20b7a953c1d5ad2d816aca21974d7802c9.tar.bz2 |
Make sure constructor never croaks if on_error is set to 'return'v1.02
-rw-r--r-- | Changes | 3 | ||||
-rw-r--r-- | lib/Apache/Defaults.pm | 49 |
2 files changed, 43 insertions, 9 deletions
@@ -1,3 +1,6 @@ +1.02 2019-08-25 + - Make sure constructor never croaks if on_error is set to 'return' + Improve diagnostics. 1.01 2018-07-17 - Prefer apachectl over invoking httpd directly. 1.00 2018-02-24 diff --git a/lib/Apache/Defaults.pm b/lib/Apache/Defaults.pm index 6108d23..5fa8217 100644 --- a/lib/Apache/Defaults.pm +++ b/lib/Apache/Defaults.pm @@ -9,7 +9,7 @@ use Text::ParseWords; use Symbol 'gensym'; use Carp; -our $VERSION = '1.01'; +our $VERSION = '1.02'; sub new { my $class = shift; @@ -44,23 +44,54 @@ sub new { croak "No suitable httpd binary found"; } - if ($v = delete $_{environ}) { - my $env = Shell::GetEnv->new('sh', ". $v", - { startup => 0 }); - if ($env->status) { + my $envfile = delete $_{environ}; + croak "unrecognized arguments" if keys(%_); + + if ($envfile) { + unless (-f $envfile) { + if ($self->{on_error} eq 'return') { + $self->{status} = 127; + $self->{error} = "environment file $envfile does not exist"; + return $self; + } else { + croak "environment file $envfile does not exist"; + } + } + unless (-r $envfile) { + if ($self->{on_error} eq 'return') { + $self->{status} = 127; + $self->{error} = "environment file $envfile is not readable"; + return $self; + } else { + croak "environment file $envfile is not readable"; + } + } + + my $env = eval { + Shell::GetEnv->new('sh', ". $envfile", { startup => 0 }); + }; + if ($@) { + if ($self->{on_error} eq 'return') { + $self->{status} = 127; + $self->{error} = $@; + return $self; + } else { + croak $@; + } + } elsif ($env->status) { if ($self->{on_error} eq 'return') { $self->{status} = $env->status; $self->{error} = "Failed to inherit environment"; + return $self; } else { croak sprintf("Got status %d trying to inherit environment", $env->status); } - } - $self->{environ} = $env->envs; + } else { + $self->{environ} = $env->envs; + } } - croak "unrecognized arguments" if keys(%_); - $self->_get_version_info unless $self->status; $self->_get_module_info unless $self->status; |