// MsgInfoReq: collect information about the remote host // Copyright (C) 2021 Simon Ruderich // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . package info import ( "fmt" "runtime" "ruderich.org/simon/safcm" "ruderich.org/simon/safcm/cmd/safcm-remote/log" "ruderich.org/simon/safcm/cmd/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 }