| | |
| | | memset(tmpDrives, 0, sizeof(DiskInfo) * maxDrives); |
| | | statDrives = (__ino64_t *) malloc(maxDrives * sizeof(__ino64_t )); |
| | | memset(statDrives, 0, sizeof(__ino64_t ) * maxDrives); |
| | | ; |
| | | |
| | | aFile = setmntent("/proc/mounts", "r"); |
| | | if (aFile == NULL) { |
| | |
| | | if (drive_found == -1) { |
| | | LOG_DEBUG("mntent: %s %s %d\n", ent->mnt_fsname, ent->mnt_dir, |
| | | (unsigned long int)mount_stat.st_ino); |
| | | strncpy(tmpDrives[currentDrive].device, ent->mnt_fsname, 255-1); |
| | | strncpy(tmpDrives[currentDrive].device, ent->mnt_fsname, |
| | | 255 - 1); |
| | | statDrives[currentDrive] = mount_stat.st_ino; |
| | | drive_found = currentDrive; |
| | | currentDrive++; |
| | |
| | | if (diskInfos == NULL) { |
| | | *disk_info_size = currentDrive; |
| | | free(tmpDrives); |
| | | result = FUNC_RET_OK; |
| | | result = (currentDrive > 0) ? FUNC_RET_OK : FUNC_RET_NOT_AVAIL; |
| | | } else if (*disk_info_size >= currentDrive) { |
| | | disk_by_uuid_dir = opendir("/dev/disk/by-uuid"); |
| | | if (disk_by_uuid_dir == NULL) { |
| | |
| | | return FUNC_RET_OK; |
| | | } |
| | | |
| | | //0=NO 1=Docker/Lxc |
| | | static int checkContainerProc() { |
| | | //in docer /proc/self/cgroups contains the "docker" or "lxc" string |
| | | //https://stackoverflow.com/questions/23513045/how-to-check-if-a-process-is-running-inside-docker-container |
| | | char path[MAX_PATH] = { 0 }; |
| | | char proc_path[MAX_PATH], pidStr[64]; |
| | | pid_t pid = getpid(); |
| | | sprintf(pidStr, "%d", pid); |
| | | strcpy(proc_path, "/proc/"); |
| | | strcat(proc_path, pidStr); |
| | | strcat(proc_path, "/cgroup"); |
| | | |
| | | FILE * fp; |
| | | char * line = NULL; |
| | | size_t len = 0; |
| | | ssize_t read; |
| | | int result = 0; |
| | | |
| | | fp = fopen(proc_path, "r"); |
| | | if (fp == NULL) { |
| | | return 0; |
| | | } |
| | | |
| | | while ((read = getline(&line, &len, fp)) != -1 && result == 0) { |
| | | //line[len]=0; |
| | | //printf("Retrieved line of length %zu:\n", read); |
| | | //printf("%s", line); |
| | | if(strstr(line, "docker") != NULL || strstr(line, "lxc") != NULL) { |
| | | result = 1; |
| | | } |
| | | } |
| | | |
| | | fclose(fp); |
| | | if(line) free(line); |
| | | return result; |
| | | } |
| | | |
| | | //0=NO 1=Docker/Lxc |
| | | static int checkLXC() { |
| | | return (access("/var/run/systemd/container",F_OK)==0) ? 1:0; |
| | | } |
| | | |
| | | VIRTUALIZATION getVirtualization() { |
| | | VIRTUALIZATION result = NONE; |
| | | int isContainer = checkContainerProc(); |
| | | if (isContainer == 1) { |
| | | result = CONTAINER; |
| | | } else if(checkLXC()){ |
| | | result = CONTAINER; |
| | | } |
| | | return result; |
| | | |
| | | //http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html |
| | | // |
| | | //bool rc = true; |
| | |
| | | "pop %edx \n" |
| | | );*/ |
| | | |
| | | //systemd-detect-virt |
| | | return NONE; |
| | | } |
| | | |