gcontini
2021-05-19 6bd24f7782d09706eaf987b86eaebdcb67f01722
src/library/os/linux/os_linux.cpp
@@ -12,6 +12,7 @@
#include <sstream>
#include "../os.h"
#include "../../base/logger.h"
#include "../../base/string_utils.h"
#include <mntent.h>
#include <dirent.h>
@@ -30,6 +31,8 @@
#ifdef USE_DBUS
#include <dbus-1.0/dbus/dbus.h>
#endif
using namespace license;
/**
 *Usually uuid are hex number separated by "-". this method read up to 8 hex
@@ -97,20 +100,22 @@
FUNCTION_RETURN parse_blkid(const std::string &blkid_file_content, std::vector<DiskInfo> &diskInfos_out,
                     std::unordered_map<std::string, int> &disk_by_uuid) {
   DiskInfo diskInfo;
   DiskInfo diskInfo = {};
   int diskNum = 0;
   for (std::size_t oldpos = 0, pos = 0; (pos = blkid_file_content.find("</device>", oldpos)) != std::string::npos;
       oldpos = pos + 1) {
      std::string cur_dev = blkid_file_content.substr(oldpos, pos);
      diskInfo.id = diskNum++;
      std::string device = cur_dev.substr(cur_dev.find_last_of(">") + 1);
      strncpy(diskInfo.device, device.c_str(), MAX_PATH);
      mstrlcpy(diskInfo.device, device.c_str(), MAX_PATH);
      std::string label = getAttribute(cur_dev, "PARTLABEL");
      strncpy(diskInfo.label, label.c_str(), 255);
      mstrlcpy(diskInfo.label, label.c_str(), 255);
      std::string disk_sn = getAttribute(cur_dev, "UUID");
      parseUUID(disk_sn.c_str(), diskInfo.disk_sn, sizeof(diskInfo.disk_sn));
      std::string disk_type = getAttribute(cur_dev, "TYPE");
      disk_by_uuid.insert(std::pair<std::string, int>(disk_sn, diskInfo.id));
      diskInfo.label_initialized = true;
      diskInfo.sn_initialized = true;
      // unlikely that somebody put the swap on a removable disk.
      // this is a first rough guess on what can be a preferred disk for blkid devices
      // just in case /etc/fstab can't be accessed or it is not up to date.
@@ -165,7 +170,7 @@
            bool found = false;
            for (auto &diskInfo : disk_infos) {
               if (((int)(sym_stat.st_ino)) == diskInfo.id) {
                  strncpy(diskInfo.label, dir->d_name, 255 - 1);
                  mstrlcpy(diskInfo.label, dir->d_name, 255);
                  diskInfo.label_initialized = true;
                  LOG_DEBUG("Label for disk ino %d device %s, set to %s", sym_stat.st_ino, diskInfo.device,
                          diskInfo.label);
@@ -212,7 +217,7 @@
               if (pos != std::string::npos) {
                  device_name_s = device_name_s.substr(pos + 1);
               }
               strncpy(tmpDiskInfo.device, device_name_s.c_str(), sizeof(tmpDiskInfo.device));
               mstrlcpy(tmpDiskInfo.device, device_name_s.c_str(), sizeof(tmpDiskInfo.device));
               PARSE_ID_FUNC(dir->d_name, tmpDiskInfo.disk_sn, sizeof(tmpDiskInfo.disk_sn));
               tmpDiskInfo.sn_initialized = true;
               tmpDiskInfo.label_initialized = false;
@@ -363,12 +368,11 @@
   strcat(proc_path, "/exe");
   int ch = readlink(proc_path, path, MAX_PATH - 1);
   if (ch != -1) {
      path[ch] = '\0';
      strncpy(buffer, path, ch);
      result = FUNC_RET_OK;
   } else {
   if (ch > MAX_PATH || ch < 0) {
      result = FUNC_RET_ERROR;
   } else {
      mstrlcpy(buffer, path, ch + 1);
      result = FUNC_RET_OK;
   }
   return result;
}