Loading lib/curl_schannel.c +8 −3 Original line number Diff line number Diff line Loading @@ -974,9 +974,14 @@ void Curl_schannel_cleanup() size_t Curl_schannel_version(char *buffer, size_t size) { char *version = Curl_sspi_version(); size = snprintf(buffer, size, "Schannel/%s", version); free(version); int sspi_major = 0, sspi_minor = 0, sspi_build = 0; if(!Curl_sspi_version(&sspi_major, &sspi_minor, &sspi_build, NULL)) size = snprintf(buffer, size, "WinSSPI/%d.%d.%d", sspi_major, sspi_minor, sspi_build); else size = snprintf(buffer, size, "WinSSPI/unknown"); return size; } Loading lib/curl_sspi.c +45 −32 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -122,50 +122,63 @@ Curl_sspi_global_cleanup(void) /* * Curl_sspi_version() * * This function returns a string representing the SSPI library version. * It will in any case return a usable string pointer which needs to be freed. * This function returns the SSPI library version information. */ char * Curl_sspi_version() 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; UINT length; if(s_hSecDll) { path = malloc(MAX_PATH); if(path) { if(!s_hSecDll) return CURLE_FAILED_INIT; path = (char *) 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, "\\", (LPVOID*)&version_info, &length)) { version = curl_maprintf("%d.%d.%d.%d", (version_info->dwProductVersionMS>>16)&0xffff, (version_info->dwProductVersionMS>>0)&0xffff, (version_info->dwProductVersionLS>>16)&0xffff, (version_info->dwProductVersionLS>>0)&0xffff); } } free(data); if(!VerQueryValue(data, "\\", &version_info, &handle)) result = CURLE_OUT_OF_MEMORY; } else result = CURLE_OUT_OF_MEMORY; } else result = CURLE_OUT_OF_MEMORY; } free(path); else result = CURLE_OUT_OF_MEMORY; } if(!version) version = curl_maprintf("%d", s_pSecFn ? s_pSecFn->dwVersion : 0); 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; } if(!version) version = strdup(""); Curl_safefree(data); Curl_safefree(path); return version; return result; } Loading lib/curl_sspi.h +2 −2 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2010, 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 Loading Loading @@ -63,7 +63,7 @@ CURLcode Curl_sspi_global_init(void); void Curl_sspi_global_cleanup(void); char* Curl_sspi_version(); CURLcode Curl_sspi_version(int *major, int *minor, int *build, int *special); char* Curl_sspi_status(SECURITY_STATUS status); char* Curl_sspi_status_msg(SECURITY_STATUS status); Loading Loading
lib/curl_schannel.c +8 −3 Original line number Diff line number Diff line Loading @@ -974,9 +974,14 @@ void Curl_schannel_cleanup() size_t Curl_schannel_version(char *buffer, size_t size) { char *version = Curl_sspi_version(); size = snprintf(buffer, size, "Schannel/%s", version); free(version); int sspi_major = 0, sspi_minor = 0, sspi_build = 0; if(!Curl_sspi_version(&sspi_major, &sspi_minor, &sspi_build, NULL)) size = snprintf(buffer, size, "WinSSPI/%d.%d.%d", sspi_major, sspi_minor, sspi_build); else size = snprintf(buffer, size, "WinSSPI/unknown"); return size; } Loading
lib/curl_sspi.c +45 −32 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -122,50 +122,63 @@ Curl_sspi_global_cleanup(void) /* * Curl_sspi_version() * * This function returns a string representing the SSPI library version. * It will in any case return a usable string pointer which needs to be freed. * This function returns the SSPI library version information. */ char * Curl_sspi_version() 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; UINT length; if(s_hSecDll) { path = malloc(MAX_PATH); if(path) { if(!s_hSecDll) return CURLE_FAILED_INIT; path = (char *) 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, "\\", (LPVOID*)&version_info, &length)) { version = curl_maprintf("%d.%d.%d.%d", (version_info->dwProductVersionMS>>16)&0xffff, (version_info->dwProductVersionMS>>0)&0xffff, (version_info->dwProductVersionLS>>16)&0xffff, (version_info->dwProductVersionLS>>0)&0xffff); } } free(data); if(!VerQueryValue(data, "\\", &version_info, &handle)) result = CURLE_OUT_OF_MEMORY; } else result = CURLE_OUT_OF_MEMORY; } else result = CURLE_OUT_OF_MEMORY; } free(path); else result = CURLE_OUT_OF_MEMORY; } if(!version) version = curl_maprintf("%d", s_pSecFn ? s_pSecFn->dwVersion : 0); 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; } if(!version) version = strdup(""); Curl_safefree(data); Curl_safefree(path); return version; return result; } Loading
lib/curl_sspi.h +2 −2 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2010, 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 Loading Loading @@ -63,7 +63,7 @@ CURLcode Curl_sspi_global_init(void); void Curl_sspi_global_cleanup(void); char* Curl_sspi_version(); CURLcode Curl_sspi_version(int *major, int *minor, int *build, int *special); char* Curl_sspi_status(SECURITY_STATUS status); char* Curl_sspi_status_msg(SECURITY_STATUS status); Loading