diff options
| author | Paul Buetow <pbuetow@mimecast.com> | 2020-02-27 16:28:10 +0000 |
|---|---|---|
| committer | Paul Buetow <pbuetow@mimecast.com> | 2020-02-27 16:28:10 +0000 |
| commit | 40728693d9cfbd99458f12d5183119ec699b8907 (patch) | |
| tree | f2903f90f0db132b38d9c36639e908eae9e87541 /internal/server/server.go | |
| parent | b4176ce3443567b16fef9f91c5a42a63d8d5e026 (diff) | |
can run scheduled queries across a storage volume
Diffstat (limited to 'internal/server/server.go')
| -rw-r--r-- | internal/server/server.go | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/internal/server/server.go b/internal/server/server.go index 5c46147..34d0d88 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -6,6 +6,7 @@ import ( "fmt" "io" "net" + "strings" "github.com/mimecast/dtail/internal/config" "github.com/mimecast/dtail/internal/io/logger" @@ -198,16 +199,45 @@ func (s *Server) handleRequests(ctx context.Context, sshConn gossh.Conn, in <-ch func (s *Server) backgroundUserCallback(c gossh.ConnMetadata, authPayload []byte) (*gossh.Permissions, error) { user := user.New(c.User(), c.RemoteAddr().String()) + authInfo := string(authPayload) - if user.Name == config.ControlUser && string(authPayload) == config.ControlUser { + if user.Name == config.ControlUser && authInfo == config.ControlUser { logger.Debug(user, "Granting permissions to control user") return nil, nil } - if user.Name == config.ScheduledUser && string(authPayload) == s.sched.authPayload { - logger.Debug(user, "Granting permissions to schedule user") + if user.Name == config.ScheduledUser && s.canRunScheduledJob(c.RemoteAddr().String(), user, authInfo) { + logger.Debug(user, "Schedule user can run scheduled job remotely") return nil, nil } return nil, fmt.Errorf("user %s not authorized", user) } + +func (s *Server) canRunScheduledJob(addr string, user *user.User, jobName string) bool { + logger.Debug("canRunScheduledJob", user, jobName) + splitted := strings.Split(addr, ":") + ip := splitted[0] + + for _, job := range config.Server.Schedule { + if job.Name != jobName { + continue + } + for _, myAddr := range job.AllowFrom { + myIps, err := net.LookupIP(myAddr) + if err != nil { + logger.Error(user, myAddr, err) + continue + } + + for _, myIp := range myIps { + logger.Debug("canRunScheduledJob", "Comparing IP addresses", ip, myIp.String()) + if ip == myIp.String() { + return true + } + } + } + } + + return false +} |
