diff options
author | Stephen Toub <stoub@microsoft.com> | 2017-04-20 08:25:50 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-20 08:25:50 +0300 |
commit | b5e830365796613f5d076970653cc939d8726a94 (patch) | |
tree | 32cf3b1bfc975f35830ccc96f823119bee270ec7 /src | |
parent | 7b58c73bddb5246472702863f76ed68e1d2d8735 (diff) | |
parent | 8499dc22409f59db6b83ad8a4da9cfac9357b6f9 (diff) |
Merge pull request #18627 from stephentoub/defaultcreds_unix
Add support for UseDefaultCredentials to CurlHandler
Diffstat (limited to 'src')
3 files changed, 15 insertions, 5 deletions
diff --git a/src/Common/src/System/Net/Http/HttpHandlerDefaults.cs b/src/Common/src/System/Net/Http/HttpHandlerDefaults.cs index 4f25252624..dc44bffa70 100644 --- a/src/Common/src/System/Net/Http/HttpHandlerDefaults.cs +++ b/src/Common/src/System/Net/Http/HttpHandlerDefaults.cs @@ -18,6 +18,7 @@ namespace System.Net.Http public const bool DefaultPreAuthenticate = false; public const ClientCertificateOption DefaultClientCertificateOption = ClientCertificateOption.Manual; public const bool DefaultUseProxy = true; + public const bool DefaultUseDefaultCredentials = false; public static TimeSpan DefaultConnectTimeout => TimeSpan.FromSeconds(60); } } diff --git a/src/System.Net.Http/src/System/Net/Http/Unix/CurlHandler.EasyRequest.cs b/src/System.Net.Http/src/System/Net/Http/Unix/CurlHandler.EasyRequest.cs index 03e512f140..6e07d0b9f0 100644 --- a/src/System.Net.Http/src/System/Net/Http/Unix/CurlHandler.EasyRequest.cs +++ b/src/System.Net.Http/src/System/Net/Http/Unix/CurlHandler.EasyRequest.cs @@ -105,7 +105,7 @@ namespace System.Net.Http SetVersion(); SetDecompressionOptions(); SetProxyOptions(_requestMessage.RequestUri); - SetCredentialsOptions(_handler.GetCredentials(_requestMessage.RequestUri)); + SetCredentialsOptions(_handler._useDefaultCredentials ? GetDefaultCredentialAndAuth() : _handler.GetCredentials(_requestMessage.RequestUri)); SetCookieOption(_requestMessage.RequestUri); SetRequestHeaders(); SetSslOptions(); @@ -341,7 +341,9 @@ namespace System.Net.Http // Just as with WinHttpHandler, for security reasons, we drop the server credential if it is // anything other than a CredentialCache. We allow credentials in a CredentialCache since they // are specifically tied to URIs. - updatedCredentials = GetCredentials(newUri, _handler.Credentials as CredentialCache, s_orderedAuthTypes); + updatedCredentials = _handler._useDefaultCredentials ? + GetDefaultCredentialAndAuth() : + GetCredentials(newUri, _handler.Credentials as CredentialCache, s_orderedAuthTypes); // Reset proxy - it is possible that the proxy has different credentials for the new URI SetProxyOptions(newUri); @@ -615,7 +617,6 @@ namespace System.Net.Http { if (credentials == CredentialCache.DefaultCredentials) { - // No "default credentials" on Unix; nop just like UseDefaultCredentials. EventSourceTrace("DefaultCredentials set for proxy. Skipping."); } else if (credentials != null) @@ -662,6 +663,9 @@ namespace System.Net.Http EventSourceTrace("Credentials set."); } + private static KeyValuePair<NetworkCredential, CURLAUTH> GetDefaultCredentialAndAuth() => + new KeyValuePair<NetworkCredential, CURLAUTH>(CredentialCache.DefaultNetworkCredentials, CURLAUTH.Negotiate); + internal void SetCookieOption(Uri uri) { if (!_handler._useCookie) diff --git a/src/System.Net.Http/src/System/Net/Http/Unix/CurlHandler.cs b/src/System.Net.Http/src/System/Net/Http/Unix/CurlHandler.cs index fd000da9c1..9ba67cd4e4 100644 --- a/src/System.Net.Http/src/System/Net/Http/Unix/CurlHandler.cs +++ b/src/System.Net.Http/src/System/Net/Http/Unix/CurlHandler.cs @@ -138,6 +138,7 @@ namespace System.Net.Http private DecompressionMethods _automaticDecompression = HttpHandlerDefaults.DefaultAutomaticDecompression; private bool _preAuthenticate = HttpHandlerDefaults.DefaultPreAuthenticate; private CredentialCache _credentialCache = null; // protected by LockObject + private bool _useDefaultCredentials = HttpHandlerDefaults.DefaultUseDefaultCredentials; private CookieContainer _cookieContainer = new CookieContainer(); private bool _useCookie = HttpHandlerDefaults.DefaultUseCookies; private TimeSpan _connectTimeout = Timeout.InfiniteTimeSpan; @@ -405,8 +406,12 @@ namespace System.Net.Http internal bool UseDefaultCredentials { - get { return false; } - set { } + get { return _useDefaultCredentials; } + set + { + CheckDisposedOrStarted(); + _useDefaultCredentials = value; + } } public IDictionary<string, object> Properties |