go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/detector/parser_linux_version.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package detector 5 6 import ( 7 "errors" 8 "regexp" 9 ) 10 11 var ( 12 OS_RELEASE_REGEX = regexp.MustCompile(`(?m)^\s*(.+?)\s*=\s*['"]?([^'"\n]*)['"]?\s*$`) 13 LSB_RELEASE_REGEX = regexp.MustCompile(`(?m)^\s*(.+?)\s*=["']?(.+?)["']?$`) 14 RHEL_PLATFORM_REGEX = regexp.MustCompile(`^(.+)\srelease`) 15 RHEL_RELEASE_REGEX = regexp.MustCompile(`release ([\d\.]+)`) 16 ) 17 18 func ParseOsRelease(content string) (map[string]string, error) { 19 return parseKeyValue(content, OS_RELEASE_REGEX), nil 20 } 21 22 func ParseLsbRelease(content string) (map[string]string, error) { 23 return parseKeyValue(content, LSB_RELEASE_REGEX), nil 24 } 25 26 func parseKeyValue(content string, regex *regexp.Regexp) map[string]string { 27 res := regex.FindAllStringSubmatch(content, -1) 28 m := make(map[string]string) 29 for _, value := range res { 30 m[value[1]] = value[2] 31 } 32 return m 33 } 34 35 func ParseRhelVersion(releaseDescription string) (string, string, error) { 36 // extract platform name 37 m := RHEL_PLATFORM_REGEX.FindStringSubmatch(releaseDescription) 38 if len(m) < 1 { 39 return "", "", errors.New("could not parse rhel version") 40 } 41 name := m[1] 42 43 // extract release 44 n := RHEL_RELEASE_REGEX.FindStringSubmatch(releaseDescription) 45 if len(n) < 2 { 46 return "", "", errors.New("could not parse rhel version") 47 } 48 release := n[1] 49 50 return name, release, nil 51 }