From cdfb1935a46038ffb5d63de876bb9b3628b59ee3 Mon Sep 17 00:00:00 2001
From: pkriko <pkrikorian@centreon.com>
Date: Thu, 11 Jan 2018 11:37:21 +0100
Subject: [PATCH] Enhancement NTLMv2

---
 apps/protocols/http/mode/expectedcontent.pm | 5 +++++
 apps/protocols/http/mode/jsoncontent.pm     | 5 +++++
 apps/protocols/http/mode/response.pm        | 5 +++++
 apps/protocols/http/mode/soapcontent.pm     | 5 +++++
 centreon/plugins/http.pm                    | 7 ++++++-
 5 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/apps/protocols/http/mode/expectedcontent.pm b/apps/protocols/http/mode/expectedcontent.pm
index 8290d1148..09f0860a7 100644
--- a/apps/protocols/http/mode/expectedcontent.pm
+++ b/apps/protocols/http/mode/expectedcontent.pm
@@ -43,6 +43,7 @@ sub new {
             "urlpath:s"             => { name => 'url_path' },
             "credentials"           => { name => 'credentials' },
             "ntlm"                  => { name => 'ntlm' },
+	    "ntlmv2"		    => { name => 'ntlmv2' },
             "username:s"            => { name => 'username' },
             "password:s"            => { name => 'password' },
             "proxyurl:s"            => { name => 'proxyurl' },
@@ -201,6 +202,10 @@ Specify this option if you access webpage over basic authentication
 
 Specify this option if you access webpage over ntlm authentication (Use with --credentials option)
 
+=item B<--ntlmv2>
+
+Specify this option if you access webpage over ntlmv2 authentication (Use with --credentials and --port options)
+
 =item B<--username>
 
 Specify username for basic authentication (Mandatory if --credentials is specidied)
diff --git a/apps/protocols/http/mode/jsoncontent.pm b/apps/protocols/http/mode/jsoncontent.pm
index ef774dd63..5a302096d 100644
--- a/apps/protocols/http/mode/jsoncontent.pm
+++ b/apps/protocols/http/mode/jsoncontent.pm
@@ -47,6 +47,7 @@ sub new {
             "urlpath:s"             => { name => 'url_path' },
             "credentials"           => { name => 'credentials' },
             "ntlm"                  => { name => 'ntlm' },
+	    "ntlmv2"		    => { name => 'ntlmv2' },
             "username:s"            => { name => 'username' },
             "password:s"            => { name => 'password' },
             "proxyurl:s"            => { name => 'proxyurl' },
@@ -398,6 +399,10 @@ Specify this option if you access webpage over basic authentication
 
 Specify this option if you access webpage over ntlm authentication (Use with --credentials option)
 
+=item B<--ntlmv2>
+
+Specify this option if you access webpage over ntlmv2 authentication (Use with --credentials and --port options)
+
 =item B<--username>
 
 Specify username for basic authentication (Mandatory if --credentials is specidied)
diff --git a/apps/protocols/http/mode/response.pm b/apps/protocols/http/mode/response.pm
index 985dbc1ac..b30bab8f9 100644
--- a/apps/protocols/http/mode/response.pm
+++ b/apps/protocols/http/mode/response.pm
@@ -43,6 +43,7 @@ sub new {
          "urlpath:s"     => { name => 'url_path' },
          "credentials"   => { name => 'credentials' },
          "ntlm"          => { name => 'ntlm' },
+	 "ntlmv2"	 => { name => 'ntlmv2' },
          "username:s"    => { name => 'username' },
          "password:s"    => { name => 'password' },
          "proxyurl:s"    => { name => 'proxyurl' },
@@ -179,6 +180,10 @@ Specify this option if you access webpage over basic authentication
 
 Specify this option if you access webpage over ntlm authentication (Use with --credentials option)
 
+=item B<--ntlmv2>
+
+Specify this option if you access webpage over ntlmv2 authentication (Use with --credentials and --port options)
+
 =item B<--username>
 
 Specify username for basic authentication (Mandatory if --credentials is specidied)
diff --git a/apps/protocols/http/mode/soapcontent.pm b/apps/protocols/http/mode/soapcontent.pm
index 6671bdadf..c75cd1cf8 100644
--- a/apps/protocols/http/mode/soapcontent.pm
+++ b/apps/protocols/http/mode/soapcontent.pm
@@ -47,6 +47,7 @@ sub new {
             "urlpath:s"             => { name => 'url_path' },
             "credentials"           => { name => 'credentials' },
             "ntlm"                  => { name => 'ntlm' },
+	    "ntlmv2"		    => { name => 'ntlmv2' },
             "username:s"            => { name => 'username' },
             "password:s"            => { name => 'password' },
             "proxyurl:s"            => { name => 'proxyurl' },
@@ -425,6 +426,10 @@ Specify this option if you access webpage over basic authentication
 
 Specify this option if you access webpage over ntlm authentication (Use with --credentials option)
 
+=item B<--ntlmv2>
+
+Specify this option if you access webpage over ntlmv2 authentication (Use with --credentials and --port options)
+
 =item B<--username>
 
 Specify username for basic authentication (Mandatory if --credentials is specidied)
diff --git a/centreon/plugins/http.pm b/centreon/plugins/http.pm
index fa6b655c6..5c0d5934b 100644
--- a/centreon/plugins/http.pm
+++ b/centreon/plugins/http.pm
@@ -26,6 +26,7 @@ use LWP::UserAgent;
 use HTTP::Cookies;
 use URI;
 use IO::Socket::SSL;
+use Data::Dumper;
 
 sub new {
     my ($class, %options) = @_;
@@ -264,9 +265,13 @@ sub request {
             $req->content($uri_post->query);
         }
     }
-
+    
     if (defined($request_options->{credentials}) && defined($request_options->{ntlm})) {
         $self->{ua}->credentials($request_options->{hostname} . ':' . $request_options->{port}, '', $request_options->{username}, $request_options->{password});
+    } elsif (defined($request_options->{credentials}) && defined($request_options->{ntlmv2})) {
+	eval "use Authen::NTLM"; die $@ if $@;
+	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});
     }