From 7ef6c72fc0365e2a4497c6a7306a6c43d855d124 Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Sun, 1 Jan 2017 08:52:36 -0500 Subject: [PATCH 1/3] fix http auth fail when auth too long --- HTTPServer.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/HTTPServer.cpp b/HTTPServer.cpp index 1ba22303..b9c26cc5 100644 --- a/HTTPServer.cpp +++ b/HTTPServer.cpp @@ -713,9 +713,11 @@ namespace http { } /* method #2: 'Authorization' header sent */ if (req.headers.count("Authorization") > 0) { + bool result = false; std::string provided = req.headers.find("Authorization")->second; std::string expected = user + ":" + pass; - char b64_creds[64]; + size_t b64_sz = i2p::data::Base64EncodingBufferSize(expected.length()); + char * b64_creds = new char[b64_sz+1]; std::size_t len = 0; len = i2p::data::ByteStreamToBase64((unsigned char *)expected.c_str(), expected.length(), b64_creds, sizeof(b64_creds)); /* if we decoded properly then check credentials */ @@ -723,10 +725,10 @@ namespace http { b64_creds[len] = '\0'; expected = "Basic "; expected += b64_creds; - return expected == provided; + result = expected == provided; } - /** we decoded wrong so it's not a correct login credential */ - return false; + delete [] b64_creds; + return result; } LogPrint(eLogWarning, "HTTPServer: auth failure from ", m_Socket->remote_endpoint().address ()); From 75d790137dc9823da671c6f4c8c65fb9103c4ee8 Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Sun, 1 Jan 2017 08:54:11 -0500 Subject: [PATCH 2/3] don't use sizeof --- HTTPServer.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/HTTPServer.cpp b/HTTPServer.cpp index b9c26cc5..9cd8954d 100644 --- a/HTTPServer.cpp +++ b/HTTPServer.cpp @@ -716,10 +716,10 @@ namespace http { bool result = false; std::string provided = req.headers.find("Authorization")->second; std::string expected = user + ":" + pass; - size_t b64_sz = i2p::data::Base64EncodingBufferSize(expected.length()); - char * b64_creds = new char[b64_sz+1]; + size_t b64_sz = i2p::data::Base64EncodingBufferSize(expected.length()) + 1; + char * b64_creds = new char[b64_sz]; std::size_t len = 0; - len = i2p::data::ByteStreamToBase64((unsigned char *)expected.c_str(), expected.length(), b64_creds, sizeof(b64_creds)); + len = i2p::data::ByteStreamToBase64((unsigned char *)expected.c_str(), expected.length(), b64_creds, b64_sz); /* if we decoded properly then check credentials */ if(len) { b64_creds[len] = '\0'; From a8973f5463359956771cea8454f1baaf480181a3 Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Sun, 1 Jan 2017 08:58:21 -0500 Subject: [PATCH 3/3] add peer count to transports --- HTTPServer.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/HTTPServer.cpp b/HTTPServer.cpp index 9cd8954d..184e02b1 100644 --- a/HTTPServer.cpp +++ b/HTTPServer.cpp @@ -494,8 +494,9 @@ namespace http { auto ntcpServer = i2p::transport::transports.GetNTCPServer (); if (ntcpServer) { - s << "NTCP
\r\n"; - for (const auto& it: ntcpServer->GetNTCPSessions ()) + auto sessions = ntcpServer->GetNTCPSessions (); + s << "NTCP ( " << (int) sessions.size() << " )
\r\n"; + for (const auto& it: sessions ) { if (it.second && it.second->IsEstablished ()) { @@ -512,8 +513,9 @@ namespace http { auto ssuServer = i2p::transport::transports.GetSSUServer (); if (ssuServer) { - s << "
\r\nSSU
\r\n"; - for (const auto& it: ssuServer->GetSessions ()) + auto sessions = ssuServer->GetSessions (); + s << "
\r\nSSU ( " << (int) sessions.size() << " )
\r\n"; + for (const auto& it: sessions) { auto endpoint = it.second->GetRemoteEndpoint (); if (it.second->IsOutgoing ()) s << " ⇒ ";