From 2976de480808119dae08fc6f52c8d75ba1aedb1a Mon Sep 17 00:00:00 2001 From: Steve Holme Date: Sun, 22 Apr 2012 18:49:27 +0100 Subject: sspi: Added version information Added version information for Windows SSPI to curl's main version string and removed SSPI from the features string. --- lib/curl_sspi.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) (limited to 'lib/curl_sspi.c') diff --git a/lib/curl_sspi.c b/lib/curl_sspi.c index b985dbceb..e065f86c5 100644 --- a/lib/curl_sspi.c +++ b/lib/curl_sspi.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2009, Daniel Stenberg, , et al. + * Copyright (C) 1998 - 2012, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -101,6 +101,68 @@ Curl_sspi_global_init(void) return CURLE_OK; } +/* + * Curl_sspi_version() + * + * This function returns the SSPI library version information. + */ +CURLcode Curl_sspi_version(int *major, int *minor, int *build, int *special) +{ + CURLcode result = CURLE_OK; + VS_FIXEDFILEINFO *version_info = NULL; + LPTSTR version = NULL; + LPTSTR path = NULL; + LPVOID data = NULL; + DWORD size, handle; + + if(!s_hSecDll) + return CURLE_FAILED_INIT; + + path = malloc(MAX_PATH); + if(!path) + return CURLE_OUT_OF_MEMORY; + + if(GetModuleFileName(s_hSecDll, path, MAX_PATH)) { + size = GetFileVersionInfoSize(path, &handle); + if(size) { + data = malloc(size); + if(data) { + if(GetFileVersionInfo(path, handle, size, data)) { + if(!VerQueryValue(data, "\\", &version_info, &handle)) + result = CURLE_OUT_OF_MEMORY; + } + else + result = CURLE_OUT_OF_MEMORY; + } + else + result = CURLE_OUT_OF_MEMORY; + } + else + result = CURLE_OUT_OF_MEMORY; + } + else + result = CURLE_OUT_OF_MEMORY; + + /* Set the out parameters */ + if(!result) { + if(major) + *major = (version_info->dwProductVersionMS >> 16) & 0xffff; + + if(minor) + *minor = (version_info->dwProductVersionMS >> 0) & 0xffff; + + if(build) + *build = (version_info->dwProductVersionLS >> 16) & 0xffff; + + if(special) + *special = (version_info->dwProductVersionLS >> 0) & 0xffff; + } + + Curl_safefree(data); + Curl_safefree(path); + + return result; +} /* * Curl_sspi_global_cleanup() -- cgit v1.2.1