Skip to content

Commit

Permalink
apt command validator consider commands order (#153)
Browse files Browse the repository at this point in the history
  • Loading branch information
tomoyamachi authored Sep 11, 2021
1 parent ff9e964 commit 4e1ad0d
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 60 deletions.
47 changes: 17 additions & 30 deletions pkg/assessor/manifest/manifest.go
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ func useSudo(cmdSlices map[int][]string) bool {

func useDistUpgrade(cmdSlices map[int][]string) bool {
for _, cmdSlice := range cmdSlices {
if containsThreshold(cmdSlice, []string{"apt-get", "apt", "dist-upgrade"}, 2) {
if checkAptCommand(cmdSlice, "dist-upgrade") {
return true
}
}
Expand All @@ -203,7 +203,7 @@ func useDistUpgrade(cmdSlices map[int][]string) bool {

func useADDstatement(cmdSlices map[int][]string) bool {
for _, cmdSlice := range cmdSlices {
if containsThreshold(cmdSlice, []string{"ADD", "in", "buildkit"}, 2) {
if containsAll(cmdSlice, []string{"ADD", "in"}) || containsAll(cmdSlice, []string{"ADD", "buildkit"}) {
return true
}
}
Expand All @@ -226,51 +226,38 @@ func checkAptLibraryDirChanged(target []string) bool {

func reducableAptGetUpdate(cmdSlices map[int][]string) bool {
var useAptUpdate bool
var useAptInstallOrUpgrade bool
for _, cmdSlice := range cmdSlices {
// map order must be sorted
for i := 0; i < len(cmdSlices); i++ {
cmdSlice := cmdSlices[i]
if !useAptUpdate && checkAptCommand(cmdSlice, "update") {
useAptUpdate = true
}
// TODO: apt install/upgrade must be run after library updated
if !useAptInstallOrUpgrade {
if useAptUpdate {
// apt install/upgrade must be run after library updated
if checkAptCommand(cmdSlice, "install") || checkAptCommand(cmdSlice, "upgrade") {
useAptInstallOrUpgrade = true
return false
}
}
if useAptUpdate && useAptInstallOrUpgrade {
return false
}
}

if useAptUpdate && !useAptInstallOrUpgrade {
return true
}
return false
return useAptUpdate
}

var removeAptLibCmds = []string{"rm", "-rf", "-fr", "-r", "-fR", "/var/lib/apt/lists", "/var/lib/apt/lists/*", "/var/lib/apt/lists/*;"}

func reducableAptGetInstall(cmdSlices map[int][]string) bool {
var useAptLibrary bool
var useRmCache bool
for _, cmdSlice := range cmdSlices {
// map order must be sorted
for i := 0; i < len(cmdSlices); i++ {
cmdSlice := cmdSlices[i]
if !useAptLibrary && checkAptLibraryDirChanged(cmdSlice) {
useAptLibrary = true
}

// TODO: remove cache must be run after apt library directory changed
if !useRmCache && containsThreshold(
cmdSlice,
[]string{"rm", "-rf", "-fr", "-r", "-fR", "/var/lib/apt/lists", "/var/lib/apt/lists/*", "/var/lib/apt/lists/*;"}, 3) {
useRmCache = true
}

if useAptLibrary && useRmCache {
// remove cache must be run after apt library directory changed
if useAptLibrary && containsThreshold(cmdSlice, removeAptLibCmds, 3) {
return false
}
}
if useAptLibrary && !useRmCache {
return true
}
return false
return useAptLibrary
}

func reducableApkAdd(cmdSlices map[int][]string) bool {
Expand Down
71 changes: 41 additions & 30 deletions pkg/assessor/manifest/manifest_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,17 @@ func TestReducableAptGetUpdate(t *testing.T) {
},
expected: false,
},
"UpdateAfterInstalled": {
cmdSlices: map[int][]string{
0: {
"apt-get", "-y", "--no-install-recommends", "install",
},
1: {
"apt-get", "update",
},
},
expected: true,
},
"CheckAptCommand": {
cmdSlices: map[int][]string{
0: {
Expand Down Expand Up @@ -282,36 +293,36 @@ func TestReducableAptGetInstall(t *testing.T) {
cmdSlices map[int][]string
expected bool
}{
//"Reducable": {
// cmdSlices: map[int][]string{
// 0: {
// "apt-get", "-y", "install",
// },
// 1: {
// "apt-get", "update",
// },
// },
// expected: true,
//},
//"OnlyUpdate": {
// cmdSlices: map[int][]string{
// 0: {
// "apt-get", "update",
// },
// 1: {
// "apt-get", "purge",
// },
// },
// expected: true,
//},
//"NoUpdateInstall": {
// cmdSlices: map[int][]string{
// 0: {
// "apt-get", "purge",
// },
// },
// expected: false,
//},
"Reducable": {
cmdSlices: map[int][]string{
0: {
"apt-get", "-y", "install",
},
1: {
"apt-get", "update",
},
},
expected: true,
},
"OnlyUpdate": {
cmdSlices: map[int][]string{
0: {
"apt-get", "update",
},
1: {
"apt-get", "purge",
},
},
expected: true,
},
"NoUpdateInstall": {
cmdSlices: map[int][]string{
0: {
"apt-get", "purge",
},
},
expected: false,
},
"UnReducable": {
cmdSlices: map[int][]string{
0: {
Expand Down

0 comments on commit 4e1ad0d

Please sign in to comment.