From 2748d333279077cabed813842d6eeb222c7bd3a1 Mon Sep 17 00:00:00 2001 From: Roberto Scolaro Date: Wed, 25 Oct 2023 19:13:10 +0200 Subject: [PATCH] fix(userspace/falco): enable --support on windows Signed-off-by: Roberto Scolaro --- userspace/falco/app/actions/print_support.cpp | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/userspace/falco/app/actions/print_support.cpp b/userspace/falco/app/actions/print_support.cpp index 0f18d716a78..5a656078baf 100644 --- a/userspace/falco/app/actions/print_support.cpp +++ b/userspace/falco/app/actions/print_support.cpp @@ -15,7 +15,9 @@ See the License for the specific language governing permissions and limitations under the License. */ +#ifndef _WIN32 #include +#endif #include "actions.h" #include "../../versions_info.h" @@ -37,23 +39,61 @@ falco::app::run_result falco::app::actions::print_support(falco::app::state& s) if(s.options.print_support) { nlohmann::json support; - struct utsname sysinfo; std::string cmdline; +#ifndef _WIN32 + struct utsname sysinfo; if(uname(&sysinfo) != 0) { return run_result::fatal(std::string("Could not uname() to find system info: ") + strerror(errno)); } +#else + OSVERSIONINFO osvi; + SYSTEM_INFO sysInfo; + TCHAR computerName[256]; + DWORD size = sizeof(computerName); + + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetSystemInfo(&sysInfo); + if(!GetVersionEx(&osvi) || !GetComputerName(computerName, &size)) + { + return run_result::fatal(std::string("Could not get system info: ") + strerror(errno)); + } +#endif const falco::versions_info infos(s.offline_inspector); support["version"] = infos.falco_version; support["engine_info"] = infos.as_json(); +#ifndef _WIN32 support["system_info"]["sysname"] = sysinfo.sysname; support["system_info"]["nodename"] = sysinfo.nodename; support["system_info"]["release"] = sysinfo.release; support["system_info"]["version"] = sysinfo.version; support["system_info"]["machine"] = sysinfo.machine; +#else + support["system_info"]["sysname"] = "Windows"; + support["system_info"]["nodename"] = computerName; + support["system_info"]["release"] = osvi.dwMajorVersion; + support["system_info"]["version"] = osvi.dwMinorVersion; + + switch (sysInfo.wProcessorArchitecture) { + case PROCESSOR_ARCHITECTURE_AMD64: + support["system_info"]["machine"] = "x86_64"; + break; + case PROCESSOR_ARCHITECTURE_ARM: + support["system_info"]["machine"] = "ARM"; + break; + case PROCESSOR_ARCHITECTURE_ARM64: + support["system_info"]["machine"] = "ARM64"; + break; + case PROCESSOR_ARCHITECTURE_INTEL: + support["system_info"]["machine"] = "i386"; + break; + default: + support["system_info"]["machine"] = "unknown"; + } +#endif support["cmdline"] = s.cmdline; support["config"] = read_file(s.options.conf_filename); support["rules_files"] = nlohmann::json::array();