Skip to content

Commit d3d3004

Browse files
authored
🧹 mark AIX packages that have an efix applied (#5398)
1 parent 50369d1 commit d3d3004

4 files changed

Lines changed: 44 additions & 6 deletions

File tree

providers/os/resources/packages/aix_packages.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,26 @@ func parseAixPackages(pf *inventory.Platform, r io.Reader) ([]Package, error) {
3636
record := strings.Split(line, ":")
3737

3838
cpes, _ := cpe2.NewPackage2Cpe(record[1], record[1], record[2], "", pf.Arch)
39+
40+
state := record[4]
41+
qualifiers := map[string]string{}
42+
43+
if record[7] != "" {
44+
state = state + "|" + record[7]
45+
qualifiers["efix"] = "locked"
46+
}
47+
3948
// Fileset, Level, PtfID, State, Type, Description, EFIXLocked
4049
pkgs = append(pkgs, Package{
4150
Name: record[1],
4251
Version: record[2],
4352
Description: strings.TrimSpace(record[6]),
4453
Format: AixPkgFormat,
4554
PUrl: purl.NewPackageURL(
46-
pf, purl.TypeGeneric, record[1], record[2], purl.WithNamespace(pf.Name),
55+
pf, purl.TypeGeneric, record[1], record[2], purl.WithNamespace(pf.Name), purl.WithQualifiers(qualifiers),
4756
).String(),
48-
CPEs: cpes,
57+
CPEs: cpes,
58+
Status: state,
4959
})
5060

5161
}

providers/os/resources/packages/aix_packages_test.go

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,9 @@ import (
77
"os"
88
"testing"
99

10-
"go.mondoo.com/cnquery/v11/providers-sdk/v1/inventory"
11-
1210
"github.com/stretchr/testify/assert"
1311
"github.com/stretchr/testify/require"
12+
"go.mondoo.com/cnquery/v11/providers-sdk/v1/inventory"
1413
)
1514

1615
func TestParseAixPackages(t *testing.T) {
@@ -25,7 +24,7 @@ func TestParseAixPackages(t *testing.T) {
2524

2625
m, err := parseAixPackages(pf, f)
2726
require.Nil(t, err)
28-
assert.Equal(t, 16, len(m), "detected the right amount of packages")
27+
assert.Equal(t, 17, len(m), "detected the right amount of packages")
2928

3029
p := Package{
3130
Name: "X11.apps.msmit",
@@ -37,6 +36,21 @@ func TestParseAixPackages(t *testing.T) {
3736
"cpe:2.3:a:x11.apps.msmit:x11.apps.msmit:7.3.0:*:*:*:*:*:powerpc:*",
3837
},
3938
Format: "bff",
39+
Status: "COMMITTED",
40+
}
41+
assert.Contains(t, m, p)
42+
43+
p = Package{
44+
Name: "bos.sysmgt.nim.client",
45+
Version: "7.3.3.0",
46+
Description: "Network Install Manager - Client Tools",
47+
PUrl: "pkg:generic/aix/bos.sysmgt.nim.client@7.3.3.0?arch=powerpc&efix=locked",
48+
CPEs: []string{
49+
"cpe:2.3:a:bos.sysmgt.nim.client:bos.sysmgt.nim.client:7.3.3.0:*:*:*:*:*:powerpc:*",
50+
"cpe:2.3:a:bos.sysmgt.nim.client:bos.sysmgt.nim.client:7.3.3:*:*:*:*:*:powerpc:*",
51+
},
52+
Format: "bff",
53+
Status: "COMMITTED|EFIXLOCKED",
4054
}
4155
assert.Contains(t, m, p)
4256
}

providers/os/resources/packages/testdata/packages_aix.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,4 @@
1515
/usr/lib/objrepos:X11.apps.util:7.3.0.0::COMMITTED:I:AIXwindows Utility Applications :
1616
/usr/lib/objrepos:X11.apps.xdm:7.3.0.0::COMMITTED:I:AIXwindows xdm Application :
1717
/usr/lib/objrepos:X11.apps.xterm:7.3.0.0::COMMITTED:I:AIXwindows xterm Application :
18+
/usr/lib/objrepos:bos.sysmgt.nim.client:7.3.3.0::COMMITTED:I:Network Install Manager - Client Tools :EFIXLOCKED

providers/os/resources/purl/purl.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ type PackageURL struct {
3333

3434
// Used as metadata to fetch things like the architecture or linux distribution.
3535
platform *inventory.Platform
36+
37+
// Optional: qualifiers
38+
Qualifiers map[string]string
3639
}
3740

3841
// NewQualifiers creates a new Qualifiers slice from a map of key/value pairs.
@@ -106,7 +109,11 @@ func NewPackageURL(pf *inventory.Platform, t Type, name, version string, modifie
106109
}
107110

108111
func (purl PackageURL) String() string {
109-
qualifiers := map[string]string{}
112+
qualifiers := purl.Qualifiers
113+
if qualifiers == nil {
114+
qualifiers = map[string]string{}
115+
}
116+
110117
if purl.Arch != "" {
111118
qualifiers[QualifierArch] = purl.Arch
112119
}
@@ -172,3 +179,9 @@ func WithNamespace(namespace string) Modifier {
172179
purl.Namespace = namespace
173180
}
174181
}
182+
183+
func WithQualifiers(qualifiers map[string]string) Modifier {
184+
return func(purl *PackageURL) {
185+
purl.Qualifiers = qualifiers
186+
}
187+
}

0 commit comments

Comments
 (0)