mirror of https://github.com/pkg/sftp.git
fix as per review
This commit is contained in:
parent
db2d41339c
commit
0b43101c5b
|
@ -469,7 +469,7 @@ func (fs *root) Realpath(p string) string {
|
|||
if fs.startDirectory == "" || fs.startDirectory == "/" {
|
||||
return cleanPath(p)
|
||||
}
|
||||
return cleanPathWithBase(p, fs.startDirectory)
|
||||
return cleanPathWithBase(fs.startDirectory, p)
|
||||
}
|
||||
|
||||
// In memory file-system-y thing that the Hanlders live on
|
||||
|
|
|
@ -86,13 +86,13 @@ type LstatFileLister interface {
|
|||
Lstat(*Request) (ListerAt, error)
|
||||
}
|
||||
|
||||
// RealpathFileLister is a FileLister that implements the Realpath method.
|
||||
// RealPathFileLister is a FileLister that implements the Realpath method.
|
||||
// We use "/" as start directory for relative paths, implementing this
|
||||
// interface you can customize the start directory.
|
||||
// You have to return an absolute POSIX path.
|
||||
type RealpathFileLister interface {
|
||||
type RealPathFileLister interface {
|
||||
FileLister
|
||||
Realpath(string) string
|
||||
RealPath(string) string
|
||||
}
|
||||
|
||||
// ListerAt does for file lists what io.ReaderAt does for files.
|
||||
|
|
|
@ -199,8 +199,8 @@ func (rs *RequestServer) packetWorker(
|
|||
rpkt = statusFromError(pkt.ID, rs.closeRequest(handle))
|
||||
case *sshFxpRealpathPacket:
|
||||
var realPath string
|
||||
if realPather, ok := rs.Handlers.FileList.(RealpathFileLister); ok {
|
||||
realPath = realPather.Realpath(pkt.getPath())
|
||||
if realPather, ok := rs.Handlers.FileList.(RealPathFileLister); ok {
|
||||
realPath = realPather.RealPath(pkt.getPath())
|
||||
} else {
|
||||
realPath = cleanPath(pkt.getPath())
|
||||
}
|
||||
|
@ -284,10 +284,10 @@ func cleanPacketPath(pkt *sshFxpRealpathPacket, realPath string) responsePacket
|
|||
|
||||
// Makes sure we have a clean POSIX (/) absolute path to work with
|
||||
func cleanPath(p string) string {
|
||||
return cleanPathWithBase(p, "/")
|
||||
return cleanPathWithBase("/", p)
|
||||
}
|
||||
|
||||
func cleanPathWithBase(p, base string) string {
|
||||
func cleanPathWithBase(base, p string) string {
|
||||
p = filepath.ToSlash(p)
|
||||
if !path.IsAbs(p) {
|
||||
return path.Join(base, p)
|
||||
|
|
|
@ -816,15 +816,15 @@ func TestRealPath(t *testing.T) {
|
|||
}
|
||||
|
||||
p := root.Realpath(".")
|
||||
require.Equal(t, root.startDirectory, p)
|
||||
assert.Equal(t, root.startDirectory, p)
|
||||
p = root.Realpath("/")
|
||||
require.Equal(t, "/", p)
|
||||
assert.Equal(t, "/", p)
|
||||
p = root.Realpath("..")
|
||||
require.Equal(t, "/", p)
|
||||
assert.Equal(t, "/", p)
|
||||
p = root.Realpath("../../..")
|
||||
require.Equal(t, "/", p)
|
||||
assert.Equal(t, "/", p)
|
||||
p = root.Realpath("relpath")
|
||||
require.Equal(t, path.Join(root.startDirectory, "relpath"), p)
|
||||
assert.Equal(t, path.Join(root.startDirectory, "relpath"), p)
|
||||
}
|
||||
|
||||
func TestCleanPath(t *testing.T) {
|
||||
|
|
Loading…
Reference in New Issue