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  }