]> ruderich.org/simon Gitweb - safcm/safcm.git/blob - cmd/safcm-remote/info/info.go
config: disallow negative permissions
[safcm/safcm.git] / cmd / safcm-remote / info / info.go
1 // MsgInfoReq: collect information about the remote host
2
3 // Copyright (C) 2021  Simon Ruderich
4 //
5 // This program is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
18 package info
19
20 import (
21         "fmt"
22         "runtime"
23
24         "ruderich.org/simon/safcm"
25         "ruderich.org/simon/safcm/cmd/safcm-remote/log"
26         "ruderich.org/simon/safcm/cmd/safcm-remote/run"
27 )
28
29 type Info struct {
30         req  safcm.MsgInfoReq
31         resp safcm.MsgInfoResp
32
33         cmd    *run.Cmd
34         logger *log.PrefixLogger
35 }
36
37 const logPrefix = "info remote:"
38
39 func Handle(req safcm.MsgInfoReq,
40         runner run.Runner, fun log.LogFunc) safcm.MsgInfoResp {
41
42         i := Info{
43                 req:    req,
44                 logger: log.NewLogger(logPrefix, fun),
45         }
46         i.cmd = run.NewCmd(runner, i.logger)
47
48         err := i.handle()
49         if err != nil {
50                 i.resp.Error = fmt.Sprintf("%s %v", logPrefix, err)
51         }
52         return i.resp
53 }
54
55 func (i *Info) handle() error {
56         i.resp.Goos = runtime.GOOS
57         i.resp.Goarch = runtime.GOARCH
58
59         for _, x := range i.req.DetectGroups {
60                 stdout, _, err := i.cmd.Run("detect group",
61                         "/bin/sh", "-c", x)
62                 if err != nil {
63                         return err
64                 }
65                 i.resp.Output = append(i.resp.Output, string(stdout))
66         }
67
68         return nil
69 }