From: Haoyang Chen chenhaoyang@kylinos.cn
--- dlls/winhttp/tests/winhttp.c | 41 ++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+)
diff --git a/dlls/winhttp/tests/winhttp.c b/dlls/winhttp/tests/winhttp.c index 5ea0c45b183..a079fc5aded 100644 --- a/dlls/winhttp/tests/winhttp.c +++ b/dlls/winhttp/tests/winhttp.c @@ -4725,6 +4725,47 @@ static void test_IWinHttpRequest(int port) ok( V_VT( &cp ) == VT_I4, "got %#x\n", V_VT( &cp ) ); ok( V_I4( &cp ) == CP_UTF8, "got %ld\n", V_I4( &cp ) );
+ V_VT( &cp ) = VT_ERROR; + V_ERROR( &cp ) = 0xdeadbeef; + hr = IWinHttpRequest_get_Option( req, WinHttpRequestOption_SslErrorIgnoreFlags, &cp ); + ok( hr == S_OK, "got %#lx\n", hr ); + ok( V_VT( &cp ) == VT_I4, "got %#x\n", V_VT( &cp ) ); + ok( V_I4( &cp ) == 0, "got %lx\n", V_I4( &cp ) ); + + V_VT( &cp ) = VT_I4; + V_I4( &cp ) = 0x321; + hr = IWinHttpRequest_put_Option( req, WinHttpRequestOption_SslErrorIgnoreFlags, cp ); + ok( hr == E_INVALIDARG, "got %#lx\n", hr ); + + V_VT( &cp ) = VT_UI4; + V_UI4( &cp ) = 0x123; + hr = IWinHttpRequest_put_Option( req, WinHttpRequestOption_SslErrorIgnoreFlags, cp ); + ok( hr == E_INVALIDARG, "got %#lx\n", hr ); + + V_VT( &cp ) = VT_UI4; + V_UI4( &cp ) = SECURITY_FLAG_IGNORE_CERT_DATE_INVALID; + hr = IWinHttpRequest_put_Option( req, WinHttpRequestOption_SslErrorIgnoreFlags, cp ); + ok( hr == S_OK, "got %#lx\n", hr ); + + V_VT( &cp ) = VT_ERROR; + V_ERROR( &cp ) = 0xdeadbeef; + hr = IWinHttpRequest_get_Option( req, WinHttpRequestOption_SslErrorIgnoreFlags, &cp ); + ok( hr == S_OK, "got %#lx\n", hr ); + ok( V_VT( &cp ) == VT_I4, "got %#x\n", V_VT( &cp ) ); + ok( V_I4( &cp ) == SECURITY_FLAG_IGNORE_CERT_DATE_INVALID, "got %lx\n", V_I4( &cp ) ); + + V_VT( &cp ) = VT_I4; + V_I4( &cp ) = SECURITY_FLAG_IGNORE_UNKNOWN_CA|SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE; + hr = IWinHttpRequest_put_Option( req, WinHttpRequestOption_SslErrorIgnoreFlags, cp ); + ok( hr == S_OK, "got %#lx\n", hr ); + + V_VT( &cp ) = VT_ERROR; + V_ERROR( &cp ) = 0xdeadbeef; + hr = IWinHttpRequest_get_Option( req, WinHttpRequestOption_SslErrorIgnoreFlags, &cp ); + ok( hr == S_OK, "got %#lx\n", hr ); + ok( V_VT( &cp ) == VT_I4, "got %#x\n", V_VT( &cp ) ); + ok( V_I4( &cp ) == (SECURITY_FLAG_IGNORE_UNKNOWN_CA|SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE), "got %lx\n", V_I4( &cp ) ); + hr = IWinHttpRequest_Abort( req ); ok( hr == S_OK, "got %#lx\n", hr );
From: Haoyang Chen chenhaoyang@kylinos.cn
--- dlls/winhttp/request.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c index b86ff0beb1e..e64cefd6574 100644 --- a/dlls/winhttp/request.c +++ b/dlls/winhttp/request.c @@ -5985,6 +5985,13 @@ static HRESULT WINAPI winhttp_request_put_Option( FIXME("URL codepage %s is not recognized\n", debugstr_variant( &value )); break; } + case WinHttpRequestOption_SslErrorIgnoreFlags: + { + DWORD flags = V_I4( &value ); + if (!WinHttpSetOption(request->hrequest, WINHTTP_OPTION_SECURITY_FLAGS, &flags, sizeof(flags))) + hr = E_INVALIDARG; + break; + } default: FIXME("unimplemented option %u\n", option); hr = E_NOTIMPL;
From: Haoyang Chen chenhaoyang@kylinos.cn
--- dlls/winhttp/request.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c index e64cefd6574..3faedbfc82b 100644 --- a/dlls/winhttp/request.c +++ b/dlls/winhttp/request.c @@ -5935,6 +5935,20 @@ static HRESULT WINAPI winhttp_request_get_Option( V_VT( value ) = VT_I4; V_I4( value ) = request->url_codepage; break; + case WinHttpRequestOption_SslErrorIgnoreFlags: + { + DWORD flags; + DWORD size = sizeof(flags); + + if (WinHttpQueryOption(request->hrequest, WINHTTP_OPTION_SECURITY_FLAGS, &flags, &size)) + { + V_VT( value ) = VT_I4; + V_I4( value ) = flags; + } + else + hr = E_INVALIDARG; + break; + } default: FIXME("unimplemented option %u\n", option); hr = E_NOTIMPL;
On Tue Nov 12 02:37:59 2024 +0000, Hans Leidekker wrote:
Please use a new 'flags' variable for this.
Ok, thanks.