From d4edbb5a0aae0211389ce86264809b4237c73769 Mon Sep 17 00:00:00 2001
From: gcontini <1121667+gcontini@users.noreply.github.com>
Date: 周日, 08 3月 2020 21:27:16 +0800
Subject: [PATCH] Issues #14 and #6

---
 src/library/os/linux/execution_environment.cpp |   55 +++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 41 insertions(+), 14 deletions(-)

diff --git a/src/library/os/linux/execution_environment.cpp b/src/library/os/linux/execution_environment.cpp
index 81c5b16..9aad864 100644
--- a/src/library/os/linux/execution_environment.cpp
+++ b/src/library/os/linux/execution_environment.cpp
@@ -7,6 +7,8 @@
 #include <paths.h>
 #include <sys/stat.h>
 #include <unistd.h>
+#include <fstream>
+#include <iostream>
 #include <stdio.h>
 #include <string.h>
 #include <dirent.h>
@@ -15,8 +17,11 @@
 #include "../../base/base.h"
 #include "../cpu_info.hpp"
 #include "../execution_environment.hpp"
+#include "../../base/file_utils.hpp"
 
 namespace license {
+namespace os {
+using namespace std;
 
 // 0=NO 1=Docker/2=Lxc
 static int checkContainerProc() {
@@ -58,21 +63,43 @@
 	return result;
 }
 
-// 0=NO 1=Docker/Lxc
-static int checkLXC() { return (access("/var/run/systemd/container", F_OK) == 0) ? 1 : 0; }
-
-VIRTUALIZATION ExecutionEnvironment::getVirtualization() {
-	VIRTUALIZATION result = NONE;
-	CpuInfo cpuInfo;
-	int isContainer = checkContainerProc();
-	if (isContainer == 1) {
-		result = CONTAINER;
-	} else if (isContainer == 2 || checkLXC()) {
-		result = CONTAINER;
-	} else if (cpuInfo.cpu_virtual()) {
-		result = VM;
-	} else {
+// 0=NO 1=Docker/2=Lxc
+static int checkSystemdContainer() {
+	ifstream systemd_container("/var/run/systemd/container");
+	int result = 0;
+	if (systemd_container.good()) {
+		result = 1;
+		for (string line; getline(systemd_container, line);) {
+			if (line.find("docker") != string::npos) {
+				result = 1;
+				break;
+			} else if (line.find("lxc") != string::npos) {
+				result = 2;
+				break;
+			}
+		}
 	}
 	return result;
 }
+
+ExecutionEnvironment::ExecutionEnvironment() {
+	try {
+		bios_vendor = get_file_contents("/sys/class/dmi/id/sys_vendor", 256);
+	} catch (...) {
+	}
+	try {
+		bios_description = get_file_contents("/sys/class/dmi/id/modalias", 256);
+	} catch (...) {
+	}
+	try {
+		sys_vendor = get_file_contents("/sys/class/dmi/id/sys_vendor", 256);
+	} catch (...) {
+	}
+}
+
+bool ExecutionEnvironment::is_container() const { return (checkContainerProc() != 0 || checkSystemdContainer() != 0); }
+
+bool ExecutionEnvironment::is_docker() const { return (checkContainerProc() == 1 || checkSystemdContainer() == 1); }
+
+}  // namespace os
 }  // namespace license

--
Gitblit v1.9.1