Skip to content

Commit 52c2ae8

Browse files
authored
[Container Scanning] Support scanning /var/lib/dpkg/status.d directory (#1721)
1 parent 9cab5c4 commit 52c2ae8

2 files changed

Lines changed: 21 additions & 8 deletions

File tree

Changelog.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# FOSSA CLI Changelog
22

3+
## 3.17.11
4+
5+
- Conan: Handle list-valued license in make_fossa_deps_conan ([#1719](https://github.com/fossas/fossa-cli/pull/1719)).
6+
- Strip non printable characters from locators ([#1720](https://github.com/fossas/fossa-cli/pull/1720)).
7+
- Container scanning: Support scanning /var/lib/dpkg/status.d directory ([#1721](https://github.com/fossas/fossa-cli/pull/1721)).
8+
39
## 3.17.10
410

511
- Licensing: Fix bad SPL matches ([#1717](https://github.com/fossas/fossa-cli/pull/1717)).

src/Strategy/Dpkg.hs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import Container.OsRelease (OsInfo)
99
import Control.Effect.Diagnostics (Diagnostics)
1010
import Control.Effect.Reader (Reader)
1111
import Data.Aeson (ToJSON)
12+
import Data.Foldable (find)
1213
import Data.String.Conversion (toText)
1314
import Data.Text qualified as Text
1415
import Discovery.Filters (AllFilters)
@@ -18,7 +19,7 @@ import Discovery.Walk (
1819
findFileNamed,
1920
walkWithFilters',
2021
)
21-
import Effect.ReadFS (Has, ReadFS)
22+
import Effect.ReadFS (Has, ReadFS, listDir)
2223
import GHC.Generics (Generic)
2324
import Path (Abs, Dir, File, Path, toFilePath)
2425
import Strategy.Dpkg.Database (analyze)
@@ -59,13 +60,19 @@ findProjects ::
5960
OsInfo ->
6061
Path Abs Dir ->
6162
m [DpkgDatabase]
62-
findProjects osInfo = walkWithFilters' $ \dir _ files -> do
63-
case findFileNamed "status" files of
64-
Nothing -> pure ([], WalkContinue)
65-
Just file -> do
66-
if (Text.isInfixOf "var/lib/dpkg/" $ toText . toFilePath $ file)
67-
then pure ([DpkgDatabase dir file osInfo], WalkContinue)
68-
else pure ([], WalkContinue)
63+
findProjects osInfo = walkWithFilters' $ \dir dirs files -> do
64+
let standardDBs = case findFileNamed "status" files of
65+
Just file ->
66+
if Text.isInfixOf "var/lib/dpkg/" (toText . toFilePath $ file)
67+
then [DpkgDatabase dir file osInfo]
68+
else []
69+
Nothing -> []
70+
statusD_DBs <- case find (\f -> toFilePath f == "var/lib/dpkg/status.d/") dirs of
71+
Just dir' -> do
72+
(_, filesInDir) <- listDir dir'
73+
pure $ map (\file -> DpkgDatabase dir' file osInfo) (filter (not . Text.isSuffixOf ".md5sums" . toText) filesInDir)
74+
Nothing -> pure []
75+
pure (standardDBs ++ statusD_DBs, WalkContinue)
6976

7077
mkProject :: DpkgDatabase -> DiscoveredProject DpkgDatabase
7178
mkProject project =

0 commit comments

Comments
 (0)