go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/resources/kernel/sysctl.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package kernel 5 6 import ( 7 "archive/tar" 8 "bufio" 9 "io" 10 "strings" 11 12 "github.com/rs/zerolog/log" 13 ) 14 15 func ParseSysctl(r io.Reader, sep string) (map[string]string, error) { 16 kernelParameters := map[string]string{} 17 18 scanner := bufio.NewScanner(r) 19 for scanner.Scan() { 20 line := scanner.Text() 21 keyval := strings.Split(line, sep) 22 23 if len(keyval) == 2 { 24 kernelParameters[strings.TrimSpace(keyval[0])] = strings.TrimSpace(keyval[1]) 25 } else { 26 log.Debug().Str("line", line).Msg("cannot parse sysctl line") 27 continue 28 } 29 } 30 31 return kernelParameters, nil 32 } 33 34 func ParseLinuxSysctlProc(sysctlRootPath string, reader io.Reader) (map[string]string, error) { 35 kernelParameters := map[string]string{} 36 37 // parse kernel parameters from tar stream 38 tr := tar.NewReader(reader) 39 for { 40 h, err := tr.Next() 41 if err == io.EOF { 42 break 43 } 44 if err != nil { 45 return nil, err 46 } 47 48 if !h.FileInfo().IsDir() { 49 content, _ := io.ReadAll(tr) 50 // remove leading sysctl path 51 k := strings.Replace(h.Name, sysctlRootPath, "", -1) 52 k = strings.Replace(k, "/", ".", -1) 53 kernelParameters[k] = strings.TrimSpace(string(content)) 54 } 55 } 56 57 return kernelParameters, nil 58 }