go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/resources/packages/pacman_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 "io" 10 "regexp" 11 12 "github.com/cockroachdb/errors" 13 "go.mondoo.com/cnquery/providers/os/connection/shared" 14 ) 15 16 const ( 17 PacmanPkgFormat = "pacman" 18 ) 19 20 var PACMAN_REGEX = regexp.MustCompile(`^([\w-]*)\s([\w\d-+.:]+)$`) 21 22 func ParsePacmanPackages(input io.Reader) []Package { 23 pkgs := []Package{} 24 scanner := bufio.NewScanner(input) 25 for scanner.Scan() { 26 line := scanner.Text() 27 m := PACMAN_REGEX.FindStringSubmatch(line) 28 if m != nil { 29 pkgs = append(pkgs, Package{ 30 Name: m[1], 31 Version: m[2], 32 Format: PacmanPkgFormat, 33 }) 34 } 35 } 36 return pkgs 37 } 38 39 // Arch, Manjaro 40 type PacmanPkgManager struct { 41 conn shared.Connection 42 } 43 44 func (ppm *PacmanPkgManager) Name() string { 45 return "Pacman Package Manager" 46 } 47 48 func (ppm *PacmanPkgManager) Format() string { 49 return PacmanPkgFormat 50 } 51 52 func (ppm *PacmanPkgManager) List() ([]Package, error) { 53 cmd, err := ppm.conn.RunCommand("pacman -Q") 54 if err != nil { 55 return nil, fmt.Errorf("could not read package list") 56 } 57 58 return ParsePacmanPackages(cmd.Stdout), nil 59 } 60 61 func (ppm *PacmanPkgManager) Available() (map[string]PackageUpdate, error) { 62 return nil, errors.New("Available() not implemented for pacman") 63 }