// MsgInfoReq: collect information about the remote host // SPDX-License-Identifier: GPL-3.0-or-later // Copyright (C) 2021-2024 Simon Ruderich package info import ( "fmt" "runtime" "ruderich.org/simon/safcm" "ruderich.org/simon/safcm/remote/log" "ruderich.org/simon/safcm/remote/run" ) type Info struct { req safcm.MsgInfoReq resp safcm.MsgInfoResp cmd *run.Cmd logger *log.Logger } func Handle(req safcm.MsgInfoReq, runner run.Runner, fun log.LogFunc) safcm.MsgInfoResp { i := Info{ req: req, logger: log.NewLogger(fun), } i.cmd = run.NewCmd(runner, i.logger) err := i.handle() if err != nil { i.resp.Error = fmt.Sprintf("%v", err) } return i.resp } func (i *Info) handle() error { i.resp.Goos = runtime.GOOS i.resp.Goarch = runtime.GOARCH for _, x := range i.req.DetectGroups { stdout, _, err := i.cmd.Run("detect group", "/bin/sh", "-c", x) if err != nil { return err } i.resp.Output = append(i.resp.Output, string(stdout)) } return nil }