go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/resources/packages/aix_packages.go (about)

     1  // Copyright (c) Mondoo, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  package packages
     5  
     6  import (
     7  	"bufio"
     8  	"fmt"
     9  	"go.mondoo.com/cnquery/providers/os/connection/shared"
    10  	"io"
    11  	"strings"
    12  )
    13  
    14  const (
    15  	AixPkgFormat = "bff"
    16  )
    17  
    18  func parseAixPackages(r io.Reader) ([]Package, error) {
    19  	pkgs := []Package{}
    20  
    21  	scanner := bufio.NewScanner(r)
    22  	i := 0
    23  	for scanner.Scan() {
    24  		line := scanner.Text()
    25  		i++
    26  
    27  		if i == 1 {
    28  			continue
    29  		}
    30  
    31  		record := strings.Split(line, ":")
    32  
    33  		// Fileset, Level, PtfID, State, Type, Description, EFIXLocked
    34  		pkgs = append(pkgs, Package{
    35  			Name:        record[1],
    36  			Version:     record[2],
    37  			Description: strings.TrimSpace(record[6]),
    38  			Format:      AixPkgFormat,
    39  		})
    40  
    41  	}
    42  	return pkgs, nil
    43  }
    44  
    45  type AixPkgManager struct {
    46  	conn shared.Connection
    47  }
    48  
    49  func (f *AixPkgManager) Name() string {
    50  	return "AIX Package Manager"
    51  }
    52  
    53  func (f *AixPkgManager) Format() string {
    54  	return AixPkgFormat
    55  }
    56  
    57  func (f *AixPkgManager) List() ([]Package, error) {
    58  	cmd, err := f.conn.RunCommand("lslpp -cl ")
    59  	if err != nil {
    60  		return nil, fmt.Errorf("could not read freebsd package list")
    61  	}
    62  
    63  	return parseAixPackages(cmd.Stdout)
    64  }
    65  
    66  func (f *AixPkgManager) Available() (map[string]PackageUpdate, error) {
    67  	return map[string]PackageUpdate{}, nil
    68  }