go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/resources/services/launchd.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package services 5 6 import ( 7 "io" 8 "regexp" 9 10 "go.mondoo.com/cnquery/providers/os/connection/shared" 11 ) 12 13 var LAUNCHD_REGEX = regexp.MustCompile(`(?m)^\s*([\d-]*)\s+(\d)\s+(.*)$`) 14 15 // PID: pid of process 16 // Status: last know exit code 17 // ^\s*([\d-]*)\s+(\d)\s+(.*)$ 18 func ParseServiceLaunchD(input io.Reader) ([]*Service, error) { 19 var services []*Service 20 content, err := io.ReadAll(input) 21 if err != nil { 22 return nil, err 23 } 24 25 m := LAUNCHD_REGEX.FindAllStringSubmatch(string(content), -1) 26 for i := range m { 27 s := &Service{ 28 Name: m[i][3], 29 Enabled: true, 30 Installed: true, 31 Running: m[i][1] != "-", 32 Type: "launchd", 33 } 34 services = append(services, s) 35 } 36 return services, nil 37 } 38 39 // macOS is using launchd as default service manager 40 type LaunchDServiceManager struct { 41 conn shared.Connection 42 } 43 44 func (s *LaunchDServiceManager) Name() string { 45 return "launchd Service Manager" 46 } 47 48 func (s *LaunchDServiceManager) List() ([]*Service, error) { 49 c, err := s.conn.RunCommand("launchctl list") 50 if err != nil { 51 return nil, err 52 } 53 return ParseServiceLaunchD(c.Stdout) 54 }