From 791b90b9898cc41869538f1dfc303588436682b7 Mon Sep 17 00:00:00 2001 From: B Stack Date: Sat, 15 Feb 2020 11:50:31 -0500 Subject: add upstream 10.20 It is worth noting that the send email feature is not present in the GPL release. --- zen/system.cpp | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 zen/system.cpp (limited to 'zen/system.cpp') diff --git a/zen/system.cpp b/zen/system.cpp new file mode 100644 index 00000000..5945484f --- /dev/null +++ b/zen/system.cpp @@ -0,0 +1,84 @@ +// ***************************************************************************** +// * This file is part of the FreeFileSync project. It is distributed under * +// * GNU General Public License: https://www.gnu.org/licenses/gpl-3.0 * +// * Copyright (C) Zenju (zenju AT freefilesync DOT org) - All Rights Reserved * +// ***************************************************************************** + +#include "system.h" +#include "file_access.h" +#include "crc.h" + + #include "symlink_target.h" + #include "file_io.h" + #include + #include //IFF_LOOPBACK + #include //sockaddr_ll + + #include //getuid() + #include //getpwuid_r() + #include "shell_execute.h" + +using namespace zen; + + +std::wstring zen::getUserName() //throw FileError +{ + const uid_t userIdNo = ::getuid(); //never fails + + std::vector buffer(std::max(10000, ::sysconf(_SC_GETPW_R_SIZE_MAX))); //::sysconf may return long(-1) + struct passwd buffer2 = {}; + struct passwd* pwsEntry = nullptr; + if (::getpwuid_r(userIdNo, &buffer2, &buffer[0], buffer.size(), &pwsEntry) != 0) //getlogin() is deprecated and not working on Ubuntu at all!!! + THROW_LAST_FILE_ERROR(_("Cannot get process information."), L"getpwuid_r"); + if (!pwsEntry) + throw FileError(_("Cannot get process information."), L"no login found"); //should not happen? + + return utfTo(pwsEntry->pw_name); +} + + +namespace +{ +} + + +ComputerModel zen::getComputerModel() //throw FileError +{ + try + { + auto tryGetInfo = [](const Zstring& filePath) + { + if (!fileAvailable(filePath)) + return std::wstring(); + try + { + const std::string stream = loadBinContainer(filePath, nullptr /*notifyUnbufferedIO*/); //throw FileError + return utfTo(trimCpy(stream)); + } + catch (const FileError& e) { throw SysError(e.toString()); } //errors should be further enriched by context info => SysError + }; + return { tryGetInfo("/sys/devices/virtual/dmi/id/product_name"), //throw SysError + tryGetInfo("/sys/devices/virtual/dmi/id/sys_vendor") }; // + + } + catch (const SysError& e) { throw FileError(_("Cannot get process information."), e.toString()); } +} + + + + +std::wstring zen::getOsDescription() //throw FileError +{ + try + { + const std::string osName = trimCpy(getCommandOutput("lsb_release --id -s" )); //throw SysError + const std::string osVersion = trimCpy(getCommandOutput("lsb_release --release -s")); // + return utfTo(osName + " " + osVersion); //e.g. "CentOS 7.7.1908" + + } + catch (const SysError& e) { throw FileError(_("Cannot get process information."), e.toString()); } +} + + + + -- cgit