fix(userspace/falco): enable --support on windows

Signed-off-by: Roberto Scolaro <roberto.scolaro21@gmail.com>
This commit is contained in:
Roberto Scolaro 2023-10-25 19:13:10 +02:00 committed by poiana
parent 89e45ced87
commit 0ca5251128

View File

@ -15,7 +15,9 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
#ifndef _WIN32
#include <sys/utsname.h>
#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();