summaryrefslogtreecommitdiff
path: root/internal/server/handlers/readcommand.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/server/handlers/readcommand.go')
-rw-r--r--internal/server/handlers/readcommand.go27
1 files changed, 19 insertions, 8 deletions
diff --git a/internal/server/handlers/readcommand.go b/internal/server/handlers/readcommand.go
index d4c9c30..7f17b14 100644
--- a/internal/server/handlers/readcommand.go
+++ b/internal/server/handlers/readcommand.go
@@ -71,7 +71,7 @@ func (r *readCommand) Start(ctx context.Context, ltx lcontext.LContext,
if isPipe {
dlog.Server.Debug("Reading data from stdin pipe")
// Empty file path and globID "-" represents reading from the stdin pipe.
- r.read(ctx, ltx, "", "-", re)
+ r.read(ctx, ltx, "", nil, "-", re)
return
}
@@ -200,17 +200,18 @@ func (r *readCommand) readFileIfPermissions(ctx context.Context, ltx lcontext.LC
}()
globID := r.makeGlobID(path, glob)
- if !r.server.CanReadFile(path) {
+ target, ok := r.server.PrepareReadTarget(path)
+ if !ok {
dlog.Server.Error(r.server.LogContext(), "No permission to read file", path, globID)
r.sendServerMessage(dlog.Server.Warn(r.server.LogContext(),
"Unable to read file(s), check server logs"))
return
}
- r.read(ctx, ltx, path, globID, re)
+ r.read(ctx, ltx, path, &target, globID, re)
}
func (r *readCommand) read(ctx context.Context, ltx lcontext.LContext,
- path, globID string, re regex.Regex) {
+ path string, target *fs.ValidatedReadTarget, globID string, re regex.Regex) {
dlog.Server.Info(r.server.LogContext(), "Start reading", path, globID)
r.logRegexMode(re)
@@ -222,14 +223,24 @@ func (r *readCommand) read(ctx context.Context, ltx lcontext.LContext,
switch r.mode {
case omode.GrepClient, omode.CatClient:
- catFile := fs.NewCatFile(path, globID, serverMessages, r.server.MaxLineLength())
- reader = &catFile
+ if target != nil {
+ catFile := fs.NewValidatedCatFile(path, *target, globID, serverMessages, r.server.MaxLineLength())
+ reader = &catFile
+ } else {
+ catFile := fs.NewCatFile(path, globID, serverMessages, r.server.MaxLineLength())
+ reader = &catFile
+ }
limiter = r.server.CatLimiter()
case omode.TailClient:
fallthrough
default:
- tailFile := fs.NewTailFile(path, globID, serverMessages, r.server.MaxLineLength())
- reader = &tailFile
+ if target != nil {
+ tailFile := fs.NewValidatedTailFile(path, *target, globID, serverMessages, r.server.MaxLineLength())
+ reader = &tailFile
+ } else {
+ tailFile := fs.NewTailFile(path, globID, serverMessages, r.server.MaxLineLength())
+ reader = &tailFile
+ }
limiter = r.server.TailLimiter()
}