improve authentification handling
This commit is contained in:
parent
d33a1c217e
commit
064ac198a9
|
@ -27,6 +27,18 @@ use HTTP::Cookies;
|
||||||
use URI;
|
use URI;
|
||||||
use IO::Socket::SSL;
|
use IO::Socket::SSL;
|
||||||
|
|
||||||
|
{
|
||||||
|
package CentreonUserAgent;
|
||||||
|
our @ISA = qw(LWP::UserAgent);
|
||||||
|
|
||||||
|
sub get_basic_credentials {
|
||||||
|
my($self, $realm, $uri, $proxy) = @_;
|
||||||
|
return if $proxy;
|
||||||
|
return $centreon::plugins::http::request_options->{username}, $centreon::plugins::http::request_options->{password} if $centreon::plugins::http::request_options->{credentials};
|
||||||
|
return undef, undef;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub new {
|
sub new {
|
||||||
my ($class, %options) = @_;
|
my ($class, %options) = @_;
|
||||||
my $self = {};
|
my $self = {};
|
||||||
|
@ -204,14 +216,14 @@ sub set_proxy {
|
||||||
sub request {
|
sub request {
|
||||||
my ($self, %options) = @_;
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
my $request_options = { %{$self->{options}} };
|
our $request_options = { %{$self->{options}} };
|
||||||
foreach (keys %options) {
|
foreach (keys %options) {
|
||||||
$request_options->{$_} = $options{$_} if (defined($options{$_}));
|
$request_options->{$_} = $options{$_} if (defined($options{$_}));
|
||||||
}
|
}
|
||||||
$self->check_options(request => $request_options);
|
$self->check_options(request => $request_options);
|
||||||
|
|
||||||
if (!defined($self->{ua})) {
|
if (!defined($self->{ua})) {
|
||||||
$self->{ua} = LWP::UserAgent->new(keep_alive => 1, protocols_allowed => ['http', 'https'], timeout => $request_options->{timeout});
|
$self->{ua} = CentreonUserAgent->new(keep_alive => 1, protocols_allowed => ['http', 'https'], timeout => $request_options->{timeout});
|
||||||
if (defined($request_options->{cookies_file})) {
|
if (defined($request_options->{cookies_file})) {
|
||||||
$self->{ua}->cookie_jar(HTTP::Cookies->new(file => $request_options->{cookies_file},
|
$self->{ua}->cookie_jar(HTTP::Cookies->new(file => $request_options->{cookies_file},
|
||||||
autosave => 1));
|
autosave => 1));
|
||||||
|
@ -265,15 +277,10 @@ sub request {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (defined($request_options->{credentials}) && defined($request_options->{ntlm})) {
|
if (defined($request_options->{credentials}) && defined($request_options->{ntlmv2})) {
|
||||||
$self->{ua}->credentials($request_options->{hostname} . ':' . $request_options->{port}, '', $request_options->{username}, $request_options->{password});
|
|
||||||
} elsif (defined($request_options->{credentials}) && defined($request_options->{ntlmv2})) {
|
|
||||||
centreon::plugins::misc::mymodule_load(output => $self->{output}, module => 'Authen::NTLM',
|
centreon::plugins::misc::mymodule_load(output => $self->{output}, module => 'Authen::NTLM',
|
||||||
error_msg => "Cannot load module 'Authen::NTLM'.");
|
error_msg => "Cannot load module 'Authen::NTLM'.");
|
||||||
Authen::NTLM::ntlmv2(1);
|
Authen::NTLM::ntlmv2(1);
|
||||||
$self->{ua}->credentials($request_options->{hostname} . ':' . $request_options->{port}, '', $request_options->{username}, $request_options->{password});
|
|
||||||
} elsif (defined($request_options->{credentials})) {
|
|
||||||
$req->authorization_basic($request_options->{username}, $request_options->{password});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$self->set_proxy(request => $request_options, url => $url);
|
$self->set_proxy(request => $request_options, url => $url);
|
||||||
|
@ -316,9 +323,15 @@ sub request {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) {
|
if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) {
|
||||||
|
my $short_msg = $response->status_line;
|
||||||
|
if ($short_msg =~ /^401/) {
|
||||||
|
my ($authenticate) = $response->www_authenticate =~ /(\S+)/;
|
||||||
|
$short_msg .= ' (' . $authenticate . ' authentification expected)';
|
||||||
|
}
|
||||||
|
|
||||||
$self->{output}->output_add(long_msg => $response->content, debug => 1);
|
$self->{output}->output_add(long_msg => $response->content, debug => 1);
|
||||||
$self->{output}->output_add(severity => $status,
|
$self->{output}->output_add(severity => $status,
|
||||||
short_msg => $response->status_line);
|
short_msg => $short_msg);
|
||||||
$self->{output}->display();
|
$self->{output}->display();
|
||||||
$self->{output}->exit();
|
$self->{output}->exit();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue