From 8d17117683226e90b8854fc7e5f99fe7cacae591 Mon Sep 17 00:00:00 2001 From: Steve Holme Date: Sat, 21 Nov 2015 02:43:17 +0000 Subject: schannel: Use GetVersionEx() when VerifyVersionInfo() isn't available Regression from commit 7a8e861a5 as highlighted in the msys autobuilds. --- lib/vtls/schannel.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/lib/vtls/schannel.c b/lib/vtls/schannel.c index 2174e21a3..0e7ae6d8f 100644 --- a/lib/vtls/schannel.c +++ b/lib/vtls/schannel.c @@ -1120,7 +1120,23 @@ cleanup: */ if(len && !connssl->decdata_offset && connssl->recv_connection_closed && !connssl->recv_sspi_close_notify) { - BOOL isWin2k; + bool isWin2k = FALSE; + +#if !defined(_WIN32_WINNT) || !defined(_WIN32_WINNT_WIN2K) || \ + (_WIN32_WINNT < _WIN32_WINNT_WIN2K) + OSVERSIONINFO osver; + + memset(&osver, 0, sizeof(osver)); + osver.dwOSVersionInfoSize = sizeof(osver); + + /* Find out the Windows version */ + if(!GetVersionEx(&osver)) + return CURLE_FAILED_INIT; + + /* Verify the version number is 5.0 */ + if(osver.dwMajorVersion == 5 && osver.dwMinorVersion == 0) + isWin2k = TRUE; +#else ULONGLONG cm; OSVERSIONINFOEX osver; @@ -1133,10 +1149,11 @@ cleanup: cm = VerSetConditionMask(cm, VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL); cm = VerSetConditionMask(cm, VER_SERVICEPACKMINOR, VER_GREATER_EQUAL); - isWin2k = VerifyVersionInfo(&osver, - (VER_MAJORVERSION | VER_MINORVERSION | - VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR), - cm); + if(VerifyVersionInfo(&osver, (VER_MAJORVERSION | VER_MINORVERSION | + VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR), + cm)) + isWin2k = TRUE; +#endif if(isWin2k && sspi_status == SEC_E_OK) connssl->recv_sspi_close_notify = true; -- cgit v1.2.3