diff options
author | Steve Holme <steve_holme@hotmail.com> | 2012-04-22 18:49:27 +0100 |
---|---|---|
committer | Steve Holme <steve_holme@hotmail.com> | 2012-04-22 18:49:27 +0100 |
commit | 2976de480808119dae08fc6f52c8d75ba1aedb1a (patch) | |
tree | 891f310592492c901b660952f9f17d9d3de810af /lib/curl_sspi.c | |
parent | 560cd6227271752536de237e41c374d0a3e11f1d (diff) | |
download | curl-2976de480808119dae08fc6f52c8d75ba1aedb1a.tar.gz |
sspi: Added version information
Added version information for Windows SSPI to curl's main version
string and removed SSPI from the features string.
Diffstat (limited to 'lib/curl_sspi.c')
-rw-r--r-- | lib/curl_sspi.c | 64 |
1 files changed, 63 insertions, 1 deletions
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, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, 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() |