Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 28 additions & 1 deletion src/detection/packages/packages_linux.c
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,33 @@ static uint32_t getFlatpakPackages(FFstrbuf* baseDir, const char* dirname)
return num_elements;
}

static uint32_t getPacmanPackages(FFstrbuf* baseDir)
{
FF_STRBUF_AUTO_DESTROY pacmanDir = ffStrbufCreate();
// Get path to pacman.conf
uint32_t baseDirLen = baseDir->length;
ffStrbufAppendS(baseDir, "/etc/pacman.conf");

// Get DBPath for packages
ffParsePropFile(baseDir->chars, "DBPath =", &pacmanDir);
// If DBPath is specified
if (pacmanDir.length == 0) {
ffParsePropFile(baseDir->chars, "RootDir =", &pacmanDir);
// If DBpath is not specified and RootDir is specified
if (pacmanDir.length ==0)
// If both are not specified
ffStrbufClear(&pacmanDir);
ffStrbufTrimRight(&pacmanDir, '/');
ffStrbufAppendS(&pacmanDir, "/var/lib/pacman");
}
ffStrbufSubstrBefore(baseDir, baseDirLen);

ffStrbufTrimRight(&pacmanDir, '/');
ffStrbufAppendS(&pacmanDir, "/local");

return getNumElements(baseDir, pacmanDir.chars, true);
}

static void getPackageCounts(FFstrbuf* baseDir, FFPackagesResult* packageCounts, FFPackagesOptions* options)
{
if (!(options->disabled & FF_PACKAGES_FLAG_APK_BIT)) packageCounts->apk += getNumStrings(baseDir, "/lib/apk/db/installed", "C:Q", "apk");
Expand All @@ -426,7 +453,7 @@ static void getPackageCounts(FFstrbuf* baseDir, FFPackagesResult* packageCounts,
packageCounts->nixDefault += ffPackagesGetNix(baseDir, "/nix/var/nix/profiles/default");
packageCounts->nixSystem += ffPackagesGetNix(baseDir, "/run/current-system");
}
if (!(options->disabled & FF_PACKAGES_FLAG_PACMAN_BIT)) packageCounts->pacman += getNumElements(baseDir, "/var/lib/pacman/local", true);
if (!(options->disabled & FF_PACKAGES_FLAG_PACMAN_BIT)) packageCounts->pacman += getPacmanPackages(baseDir);
if (!(options->disabled & FF_PACKAGES_FLAG_LPKGBUILD_BIT)) packageCounts->lpkgbuild += getNumElements(baseDir, "/opt/Loc-OS-LPKG/lpkgbuild/remove", false);
if (!(options->disabled & FF_PACKAGES_FLAG_PKGTOOL_BIT)) packageCounts->pkgtool += getNumElements(baseDir, "/var/log/packages", false);
if (!(options->disabled & FF_PACKAGES_FLAG_RPM_BIT))
Expand Down