mirror of https://github.com/pkg/sftp.git
commit
ae8947fdf9
12
client.go
12
client.go
|
@ -655,14 +655,18 @@ func (c *Client) Join(elem ...string) string { return path.Join(elem...) }
|
||||||
// is not empty.
|
// is not empty.
|
||||||
func (c *Client) Remove(path string) error {
|
func (c *Client) Remove(path string) error {
|
||||||
err := c.removeFile(path)
|
err := c.removeFile(path)
|
||||||
if err, ok := err.(*StatusError); ok {
|
|
||||||
switch err.Code {
|
|
||||||
// some servers, *cough* osx *cough*, return EPERM, not ENODIR.
|
// some servers, *cough* osx *cough*, return EPERM, not ENODIR.
|
||||||
// serv-u returns ssh_FX_FILE_IS_A_DIRECTORY
|
// serv-u returns ssh_FX_FILE_IS_A_DIRECTORY
|
||||||
case sshFxPermissionDenied, sshFxFailure, sshFxFileIsADirectory:
|
// EPERM is converted to os.ErrPermission so it is not a StatusError
|
||||||
|
if err, ok := err.(*StatusError); ok {
|
||||||
|
switch err.Code {
|
||||||
|
case sshFxFailure, sshFxFileIsADirectory:
|
||||||
return c.RemoveDirectory(path)
|
return c.RemoveDirectory(path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if os.IsPermission(err) {
|
||||||
|
return c.RemoveDirectory(path)
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1363,6 +1367,8 @@ func normaliseError(err error) error {
|
||||||
return io.EOF
|
return io.EOF
|
||||||
case sshFxNoSuchFile:
|
case sshFxNoSuchFile:
|
||||||
return os.ErrNotExist
|
return os.ErrNotExist
|
||||||
|
case sshFxPermissionDenied:
|
||||||
|
return os.ErrPermission
|
||||||
case sshFxOk:
|
case sshFxOk:
|
||||||
return nil
|
return nil
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -453,16 +453,13 @@ func TestClientCreateFailed(t *testing.T) {
|
||||||
defer sftp.Close()
|
defer sftp.Close()
|
||||||
|
|
||||||
f, err := ioutil.TempFile("", "sftptest-createfailed")
|
f, err := ioutil.TempFile("", "sftptest-createfailed")
|
||||||
if err != nil {
|
require.NoError(t, err)
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
defer os.Remove(f.Name())
|
defer os.Remove(f.Name())
|
||||||
|
|
||||||
f2, err := sftp.Create(f.Name())
|
f2, err := sftp.Create(f.Name())
|
||||||
if err1, ok := err.(*StatusError); !ok || err1.Code != sshFxPermissionDenied {
|
require.True(t, os.IsPermission(err))
|
||||||
t.Fatalf("Create: want: %v, got %#v", sshFxPermissionDenied, err)
|
|
||||||
}
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
f2.Close()
|
f2.Close()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue