]> granicus.if.org Git - curl/commitdiff
schannel: Use GetVersionEx() when VerifyVersionInfo() isn't available
authorSteve Holme <steve_holme@hotmail.com>
Sat, 21 Nov 2015 02:43:17 +0000 (02:43 +0000)
committerSteve Holme <steve_holme@hotmail.com>
Sat, 21 Nov 2015 02:43:17 +0000 (02:43 +0000)
Regression from commit 7a8e861a5 as highlighted in the msys autobuilds.

lib/vtls/schannel.c

index 2174e21a3c7daf7ec98c7649ba99cfad0f68f280..0e7ae6d8f3ddda673785114cf1d680895e565c68 100644 (file)
@@ -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;