use epoch timestamp instead of current timestamp for unknown modification times

Signed-off-by: Nicola Murino <nicola.murino@gmail.com>
This commit is contained in:
Nicola Murino
2022-08-16 17:59:13 +02:00
parent ced4206c5f
commit 2b463d61e3
20 changed files with 59 additions and 60 deletions

View File

@@ -223,11 +223,11 @@ func (c *Connection) Filelist(request *sftp.Request) (sftp.ListerAt, error) {
if err != nil {
return nil, err
}
now := time.Now()
modTime := time.Unix(0, 0)
if request.Filepath != "/" || c.folderPrefix != "" {
files = util.PrependFileInfo(files, vfs.NewFileInfo("..", true, 0, now, false))
files = util.PrependFileInfo(files, vfs.NewFileInfo("..", true, 0, modTime, false))
}
files = util.PrependFileInfo(files, vfs.NewFileInfo(".", true, 0, now, false))
files = util.PrependFileInfo(files, vfs.NewFileInfo(".", true, 0, modTime, false))
return listerAt(files), nil
case "Stat":
if !c.User.HasPerm(dataprovider.PermListItems, path.Dir(request.Filepath)) {
@@ -260,7 +260,7 @@ func (c *Connection) Filelist(request *sftp.Request) (sftp.ListerAt, error) {
return nil, err
}
return listerAt([]os.FileInfo{vfs.NewFileInfo(s, false, 0, time.Now(), true)}), nil
return listerAt([]os.FileInfo{vfs.NewFileInfo(s, false, 0, time.Unix(0, 0), true)}), nil
default:
return nil, sftp.ErrSSHFxOpUnsupported
}

View File

@@ -67,7 +67,7 @@ func (p *prefixMiddleware) Lstat(request *sftp.Request) (sftp.ListerAt, error) {
return p.next.Lstat(request)
case pathIsPrefixParent:
return listerAt([]os.FileInfo{
vfs.NewFileInfo(request.Filepath, true, 0, time.Now(), false),
vfs.NewFileInfo(request.Filepath, true, 0, time.Unix(0, 0), false),
}), nil
default:
return nil, sftp.ErrSSHFxPermissionDenied
@@ -92,18 +92,18 @@ func (p *prefixMiddleware) Filelist(request *sftp.Request) (sftp.ListerAt, error
case pathIsPrefixParent:
switch request.Method {
case methodList:
now := time.Now()
modTime := time.Unix(0, 0)
fileName := p.nextListFolder(request.Filepath)
files := make([]os.FileInfo, 0, 3)
files = append(files, vfs.NewFileInfo(".", true, 0, now, false))
files = append(files, vfs.NewFileInfo(".", true, 0, modTime, false))
if request.Filepath != "/" {
files = append(files, vfs.NewFileInfo("..", true, 0, now, false))
files = append(files, vfs.NewFileInfo("..", true, 0, modTime, false))
}
files = append(files, vfs.NewFileInfo(fileName, true, 0, now, false))
files = append(files, vfs.NewFileInfo(fileName, true, 0, modTime, false))
return listerAt(files), nil
case methodStat:
return listerAt([]os.FileInfo{
vfs.NewFileInfo(request.Filepath, true, 0, time.Now(), false),
vfs.NewFileInfo(request.Filepath, true, 0, time.Unix(0, 0), false),
}), nil
default:
return nil, sftp.ErrSSHFxOpUnsupported

View File

@@ -16,7 +16,6 @@ package sftpd
import (
"testing"
"time"
"github.com/golang/mock/gomock"
"github.com/pkg/sftp"
@@ -209,7 +208,7 @@ func (Suite *PrefixMiddlewareSuite) TestFileList() {
Suite.Equal(".", directList[0].Name())
}
Suite.Equal(test.ExpectedPath, directList[test.ExpectedItems-1].Name())
Suite.InDelta(time.Now().Unix(), directList[test.ExpectedItems-1].ModTime().Unix(), 1)
Suite.Equal(int64(0), directList[test.ExpectedItems-1].ModTime().Unix())
Suite.True(directList[test.ExpectedItems-1].IsDir())
}
}
@@ -224,7 +223,7 @@ func (Suite *PrefixMiddlewareSuite) TestLstat() {
if directList, ok := ListerAt.(listerAt); ok {
Suite.Len(directList, 1)
Suite.Equal(`/`, directList[0].Name())
Suite.InDelta(time.Now().Unix(), directList[0].ModTime().Unix(), 1)
Suite.Equal(int64(0), directList[0].ModTime().Unix())
Suite.True(directList[0].IsDir())
}