Skip to content

Commit

Permalink
feat(windows) export DetectKBsFromKernelVersion (#1703)
Browse files Browse the repository at this point in the history
  • Loading branch information
sadayuki-matsuno committed Jul 13, 2023
1 parent 457a3a9 commit f9276a7
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 20 deletions.
12 changes: 1 addition & 11 deletions scanner/scanner.go
Original file line number Diff line number Diff line change
Expand Up @@ -181,17 +181,7 @@ func ViaHTTP(header http.Header, body string, toLocalFile bool) (models.ScanResu
kernelVersion = formatKernelVersion(osInfo)
}

w := &windows{
base: base{
Distro: config.Distro{Family: family, Release: release},
osPackages: osPackages{
Kernel: models.Kernel{Version: kernelVersion},
},
log: logging.Log,
},
}

kbs, err := w.detectKBsFromKernelVersion()
kbs, err := DetectKBsFromKernelVersion(release, kernelVersion)
if err != nil {
return models.ScanResult{}, xerrors.Errorf("Failed to detect KBs from kernel version. err: %w", err)
}
Expand Down
16 changes: 8 additions & 8 deletions scanner/windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -1146,7 +1146,7 @@ func (o *windows) scanKBs() (*models.WindowsKB, error) {
}
}

kbs, err := o.detectKBsFromKernelVersion()
kbs, err := DetectKBsFromKernelVersion(o.getDistro().Release, o.Kernel.Version)
if err != nil {
return nil, xerrors.Errorf("Failed to detect KBs from kernel version. err: %w", err)
}
Expand Down Expand Up @@ -4399,14 +4399,14 @@ var windowsReleases = map[string]map[string]map[string]updateProgram{
},
}

func (o *windows) detectKBsFromKernelVersion() (models.WindowsKB, error) {
switch ss := strings.Split(o.Kernel.Version, "."); len(ss) {
func DetectKBsFromKernelVersion(release, kernelVersion string) (models.WindowsKB, error) {
switch ss := strings.Split(kernelVersion, "."); len(ss) {
case 3:
return models.WindowsKB{}, nil
case 4:
switch {
case strings.HasPrefix(o.getDistro().Release, "Windows 10 "), strings.HasPrefix(o.getDistro().Release, "Windows 11 "):
osver := strings.Split(o.getDistro().Release, " ")[1]
case strings.HasPrefix(release, "Windows 10 "), strings.HasPrefix(release, "Windows 11 "):
osver := strings.Split(release, " ")[1]

verReleases, ok := windowsReleases["Client"][osver]
if !ok {
Expand Down Expand Up @@ -4448,8 +4448,8 @@ func (o *windows) detectKBsFromKernelVersion() (models.WindowsKB, error) {
}

return kbs, nil
case strings.HasPrefix(o.getDistro().Release, "Windows Server 2016"), strings.HasPrefix(o.getDistro().Release, "Windows Server, Version 1709"), strings.HasPrefix(o.getDistro().Release, "Windows Server, Version 1809"), strings.HasPrefix(o.getDistro().Release, "Windows Server 2019"), strings.HasPrefix(o.getDistro().Release, "Windows Server, Version 1903"), strings.HasPrefix(o.getDistro().Release, "Windows Server, Version 1909"), strings.HasPrefix(o.getDistro().Release, "Windows Server, Version 2004"), strings.HasPrefix(o.getDistro().Release, "Windows Server, Version 20H2"), strings.HasPrefix(o.getDistro().Release, "Windows Server 2022"):
osver := strings.TrimSpace(strings.NewReplacer("Windows Server", "", ",", "", "(Server Core installation)", "").Replace(o.getDistro().Release))
case strings.HasPrefix(release, "Windows Server 2016"), strings.HasPrefix(release, "Windows Server, Version 1709"), strings.HasPrefix(release, "Windows Server, Version 1809"), strings.HasPrefix(release, "Windows Server 2019"), strings.HasPrefix(release, "Windows Server, Version 1903"), strings.HasPrefix(release, "Windows Server, Version 1909"), strings.HasPrefix(release, "Windows Server, Version 2004"), strings.HasPrefix(release, "Windows Server, Version 20H2"), strings.HasPrefix(release, "Windows Server 2022"):
osver := strings.TrimSpace(strings.NewReplacer("Windows Server", "", ",", "", "(Server Core installation)", "").Replace(release))

verReleases, ok := windowsReleases["Server"][osver]
if !ok {
Expand Down Expand Up @@ -4495,7 +4495,7 @@ func (o *windows) detectKBsFromKernelVersion() (models.WindowsKB, error) {
return models.WindowsKB{}, nil
}
default:
return models.WindowsKB{}, xerrors.Errorf("unexpected kernel version. expected: <major version>.<minor version>.<build>(.<revision>), actual: %s", o.Kernel.Version)
return models.WindowsKB{}, xerrors.Errorf("unexpected kernel version. expected: <major version>.<minor version>.<build>(.<revision>), actual: %s", kernelVersion)
}
}

Expand Down
2 changes: 1 addition & 1 deletion scanner/windows_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -784,7 +784,7 @@ func Test_windows_detectKBsFromKernelVersion(t *testing.T) {
o := &windows{
base: tt.base,
}
got, err := o.detectKBsFromKernelVersion()
got, err := DetectKBsFromKernelVersion(o.getDistro().Release, o.Kernel.Version)
if (err != nil) != tt.wantErr {
t.Errorf("windows.detectKBsFromKernelVersion() error = %v, wantErr %v", err, tt.wantErr)
return
Expand Down

0 comments on commit f9276a7

Please sign in to comment.