Attention is currently required from: flichtenheld, plaisthos. Hello plaisthos, flichtenheld,
I'd like you to do a code review. Please visit http://gerrit.openvpn.net/c/openvpn/+/944?usp=email to review the following change. Change subject: win: refactor get_windows_version() ...................................................................... win: refactor get_windows_version() It's 2025, and almost all clients now run on Windows 10 or newer. Instead of displaying: "Windows version 10.0 (Windows 10 or greater)" we now show the exact build number, e.g.: "Windows version: 10.0.22631" Remove "pre-Win7" checks in a few places. For IV_PLAT_VER, we now provide only the version number without binary architecture info. Previously: IV_PLAT_VER=10.0,_amd64_executable Now: IV_PLAT_VER=10.0.22631 Change-Id: I39d660ebeec76280e4d4357192b74bf2c0980615 Signed-off-by: Lev Stipakov <l...@openvpn.net> --- M src/openvpn/tun.c M src/openvpn/win32.c M src/openvpn/win32.h 3 files changed, 49 insertions(+), 93 deletions(-) git pull ssh://gerrit.openvpn.net:29418/openvpn refs/changes/44/944/1 diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c index 4f7de6c..5186afa 100644 --- a/src/openvpn/tun.c +++ b/src/openvpn/tun.c @@ -5428,11 +5428,8 @@ NETSH_PATH_SUFFIX, adapter_index, print_in6_addr(addr_list[i], 0, &gc)); - /* disable slow address validation on Windows 7 and higher */ - if (win32_version_info() >= WIN_7) - { - argv_printf_cat(&argv, "%s", "validate=no"); - } + /* disable slow address validation */ + argv_printf_cat(&argv, "%s", "validate=no"); /* Treat errors while adding as non-fatal as we do not check for duplicates */ netsh_command(&argv, 1, (i==0) ? M_FATAL : M_NONFATAL); @@ -5498,9 +5495,8 @@ adapter_index, print_in_addr_t(addr_list[i], 0, &gc)); - /* disable slow address validation on Windows 7 and higher */ - /* only for DNS */ - if (is_dns && win32_version_info() >= WIN_7) + /* disable slow address validation for DNS */ + if (is_dns) { argv_printf_cat(&argv, "%s", "validate=no"); } diff --git a/src/openvpn/win32.c b/src/openvpn/win32.c index edac71e..8d4c4a3 100644 --- a/src/openvpn/win32.c +++ b/src/openvpn/win32.c @@ -1283,42 +1283,6 @@ return true; } -int -win32_version_info(void) -{ - if (!IsWindowsXPOrGreater()) - { - msg(M_FATAL, "Error: Windows version must be XP or greater."); - } - - if (!IsWindowsVistaOrGreater()) - { - return WIN_XP; - } - - if (!IsWindows7OrGreater()) - { - return WIN_VISTA; - } - - if (!IsWindows8OrGreater()) - { - return WIN_7; - } - - if (!IsWindows8Point1OrGreater()) - { - return WIN_8; - } - - if (!IsWindows10OrGreater()) - { - return WIN_8_1; - } - - return WIN_10; -} - typedef enum { ARCH_X86, ARCH_AMD64, @@ -1420,57 +1384,50 @@ } } +typedef LONG (WINAPI *RtlGetVersionPtr)(PRTL_OSVERSIONINFOW); + const char * -win32_version_string(struct gc_arena *gc, bool add_name) +win32_version_string(struct gc_arena *gc, bool add_exec_info) { - int version = win32_version_info(); - struct buffer out = alloc_buf_gc(256, gc); - - switch (version) + HMODULE hMod = GetModuleHandleW(L"ntdll.dll"); + if (!hMod) { - case WIN_XP: - buf_printf(&out, "5.1%s", add_name ? " (Windows XP)" : ""); - break; - - case WIN_VISTA: - buf_printf(&out, "6.0%s", add_name ? " (Windows Vista)" : ""); - break; - - case WIN_7: - buf_printf(&out, "6.1%s", add_name ? " (Windows 7)" : ""); - break; - - case WIN_8: - buf_printf(&out, "6.2%s", add_name ? " (Windows 8)" : ""); - break; - - case WIN_8_1: - buf_printf(&out, "6.3%s", add_name ? " (Windows 8.1)" : ""); - break; - - case WIN_10: - buf_printf(&out, "10.0%s", add_name ? " (Windows 10 or greater)" : ""); - break; - - default: - msg(M_NONFATAL, "Unknown Windows version: %d", version); - buf_printf(&out, "0.0%s", add_name ? " (unknown)" : ""); - break; + return "N/A"; } - buf_printf(&out, ", "); - - arch_t process_arch, host_arch; - win32_get_arch(&process_arch, &host_arch); - win32_print_arch(process_arch, &out); - - buf_printf(&out, " executable"); - - if (host_arch != ARCH_NATIVE) + RtlGetVersionPtr fn = (RtlGetVersionPtr)GetProcAddress(hMod, "RtlGetVersion"); + if (!fn) { - buf_printf(&out, " running on "); - win32_print_arch(host_arch, &out); - buf_printf(&out, " host"); + return "N/A"; + } + + RTL_OSVERSIONINFOW rovi = { 0 }; + rovi.dwOSVersionInfoSize = sizeof(rovi); + if (fn(&rovi) != 0) + { + return "N/A"; + } + + struct buffer out = alloc_buf_gc(256, gc); + + buf_printf(&out, "%lu.%lu.%lu", rovi.dwMajorVersion, rovi.dwMinorVersion, rovi.dwBuildNumber); + + if (add_exec_info) + { + buf_printf(&out, ", "); + + arch_t process_arch, host_arch; + win32_get_arch(&process_arch, &host_arch); + win32_print_arch(process_arch, &out); + + buf_printf(&out, " executable"); + + if (host_arch != ARCH_NATIVE) + { + buf_printf(&out, " running on "); + win32_print_arch(host_arch, &out); + buf_printf(&out, " host"); + } } return (const char *)out.data; diff --git a/src/openvpn/win32.h b/src/openvpn/win32.h index 081beeb..d663586 100644 --- a/src/openvpn/win32.h +++ b/src/openvpn/win32.h @@ -301,11 +301,14 @@ int win32_version_info(void); -/* - * String representation of Windows version number and name, see - * https://msdn.microsoft.com/en-us/library/windows/desktop/ms724832(v=vs.85).aspx +/** + * @brief Get Windows version string, optionally with architecture info. + * + * @param gc gc arena to allocate string. + * @param add_exec_info Whether to include architecture details. + * @return Version string, or "N/A" on failure. */ -const char *win32_version_string(struct gc_arena *gc, bool add_name); +const char *win32_version_string(struct gc_arena *gc, bool add_exec_info); /* * Send the |size| bytes in buffer |data| to the interactive service |pipe| -- To view, visit http://gerrit.openvpn.net/c/openvpn/+/944?usp=email To unsubscribe, or for help writing mail filters, visit http://gerrit.openvpn.net/settings Gerrit-Project: openvpn Gerrit-Branch: master Gerrit-Change-Id: I39d660ebeec76280e4d4357192b74bf2c0980615 Gerrit-Change-Number: 944 Gerrit-PatchSet: 1 Gerrit-Owner: stipa <lstipa...@gmail.com> Gerrit-Reviewer: flichtenheld <fr...@lichtenheld.com> Gerrit-Reviewer: plaisthos <arne-open...@rfc2549.org> Gerrit-CC: openvpn-devel <openvpn-devel@lists.sourceforge.net> Gerrit-Attention: plaisthos <arne-open...@rfc2549.org> Gerrit-Attention: flichtenheld <fr...@lichtenheld.com> Gerrit-MessageType: newchange
_______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel