Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(294)

Unified Diff: net/url_request/url_request_http_job.cc

Issue 176032: Adding commandline option to override bans on certain port numbers through a ... (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 11 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/url_request/url_request_http_job.h ('k') | net/url_request/url_request_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/url_request/url_request_http_job.cc
===================================================================
--- net/url_request/url_request_http_job.cc (revision 24426)
+++ net/url_request/url_request_http_job.cc (working copy)
@@ -29,6 +29,9 @@
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_error_job.h"
+// static
+std::set<int> URLRequestHttpJob::explicitly_allowed_ports_;
+
// TODO(darin): make sure the port blocking code is not lost
// static
@@ -36,7 +39,8 @@
const std::string& scheme) {
DCHECK(scheme == "http" || scheme == "https");
- if (!net::IsPortAllowedByDefault(request->url().IntPort()))
+ int port = request->url().IntPort();
+ if (!net::IsPortAllowedByDefault(port) && !IsPortAllowedByOverride(port))
return new URLRequestErrorJob(request, net::ERR_UNSAFE_PORT);
if (!request->context() ||
@@ -58,6 +62,34 @@
return new URLRequestHttpJob(request);
}
+// static
+void URLRequestHttpJob::SetExplicitlyAllowedPorts(
darin (slow to review) 2009/09/01 06:49:23 it seems like we'd want to allow port overrides fo
+ const std::wstring& allowed_ports) {
+ if (allowed_ports.empty())
+ return;
+
+ std::set<int> ports;
+ size_t last = 0;
+ size_t size = allowed_ports.size();
+ // The comma delimiter.
+ const std::wstring::value_type kComma = L',';
+
+ // Overflow is still possible for evil user inputs.
+ for (size_t i = 0; i <= size; ++i) {
+ // The string should be composed of only digits and commas.
+ if (i != size && !IsAsciiDigit(allowed_ports[i]) &&
+ (allowed_ports[i] != kComma))
+ return;
+ if (i == size || allowed_ports[i] == kComma) {
+ size_t length = i - last;
+ if (length > 0)
+ ports.insert(StringToInt(allowed_ports.substr(last, length)));
+ last = i + 1;
+ }
+ }
+ explicitly_allowed_ports_ = ports;
+}
+
URLRequestHttpJob::URLRequestHttpJob(URLRequest* request)
: URLRequestJob(request),
context_(request->context()),
@@ -345,6 +377,19 @@
this, &URLRequestHttpJob::OnStartCompleted, rv));
}
+// static
+bool URLRequestHttpJob::IsPortAllowedByOverride(int port) {
+ if (explicitly_allowed_ports().empty())
+ return false;
+
+ std::set<int>::const_iterator it =
+ std::find(explicitly_allowed_ports().begin(),
+ explicitly_allowed_ports().end(),
+ port);
+
+ return it != explicitly_allowed_ports().end();
+}
+
void URLRequestHttpJob::CancelAuth() {
// Proxy gets set first, then WWW.
if (proxy_auth_state_ == net::AUTH_STATE_NEED_AUTH) {
« no previous file with comments | « net/url_request/url_request_http_job.h ('k') | net/url_request/url_request_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698