Commit Graph

71 Commits

Author SHA1 Message Date
Cassondra Foesch c46216738b symlink loop testing 2020-09-29 17:39:30 +00:00
Cassondra Foesch 78524b582a more specification polishing, document specification points better 2020-09-25 16:13:10 +00:00
Cassondra Foesch 6f2abc6af1 O_CREAT|O_EXCL can go through a directory symlink, but cannot create a dangling symlink target 2020-09-25 14:01:02 +00:00
Cassondra Foesch 12db74fbb4 move endpoint symlink resolution to openfile rather than newfile 2020-09-25 13:34:03 +00:00
Cassondra Foesch 4e715d5625 rename vs PosixRename 2020-09-25 12:35:15 +00:00
Cassondra Foesch 8ae3feeb9f add NOTEs everywhere symlink target/linkpath vs sftp.Request.Filepath and sfftp.Request.Target come up 2020-09-24 15:20:10 +00:00
Cassondra Foesch 42f3825de9 corner-cases, better spec conformance 2020-09-24 15:03:10 +00:00
Cassondra Foesch f1495003d3 github not showing any diff of changes for move and change of file 2020-09-24 14:52:30 +00:00
Cassondra Foesch 48a22c540b since this code is exported, it should not be called 'example' anymore 2020-09-21 12:02:41 +00:00
Cassondra Foesch e7c9755368 split remove and rmdir 2020-09-17 15:53:23 +00:00
Cassondra Foesch 6d302dbb16 use openfile for Fileread as well 2020-09-17 15:32:57 +00:00
Cassondra Foesch 99283be930 extract newfile creation to normalize how files/dirs/symlinks are made 2020-09-17 15:31:22 +00:00
Cassondra Foesch ffc579dce4 test parent directory before making a symlink 2020-09-17 14:48:19 +00:00
Cassondra Foesch 5b7cbe6684 creating a file at a dangling symlink should make the target filename 2020-09-17 14:23:59 +00:00
Cassondra Foesch d4a89094dc dangling links ok, but overwriting is not 2020-09-17 14:05:55 +00:00
Cassondra Foesch 18c9a7a273 support for O_EXCL 2020-09-17 13:46:13 +00:00
Cassondra Foesch 72a9e15fa5 handle O_EXCL|O_CREATE 2020-09-17 12:58:38 +00:00
Cassondra Foesch f05f53fcbb handle when os.O_CREATE not set 2020-09-17 12:56:04 +00:00
Cassondra Foesch cd54350fbe ListerAt polishing 2020-09-17 12:14:59 +00:00
Cassondra Foesch 115b73076b refactor ListerAt functionality 2020-09-17 12:03:39 +00:00
Cassondra Foesch dc4f208617 fetch follows symlinks, lfetch does not 2020-09-17 11:47:19 +00:00
Cassondra Foesch 82f3e48fbd refactor memFile 2020-09-17 09:53:13 +00:00
Nicola Murino ba3e280524 request-server: add lstat support
Add LstatFileLister, an optional interface for FileLister, if this
interface is implemented Lstat requests will call it otherwirse they
will be handled in the same way as Stat, as before
2020-09-06 08:26:58 +02:00
Nicola Murino f70d440af3 memory handler: use POSIX paths 2020-09-02 19:26:46 +02:00
Nicola Murino 9284f1d6ac only check OpenFileWriter interface if Read flags is true
Improve memory handler and some test case
Improve nil check for Close and TransferError interfaces
2020-09-02 19:21:12 +02:00
Nicola Murino ea67d57ce5 request-server: implement Open method
add an optional interface to FileWriter to allow to open a file for both
writing and reading

Fixes #374
2020-08-30 10:40:22 +02:00
Nicola Murino a011842257 request server: add support for SSH_FXP_FSETSTAT
we need to add a case for this packet inside the packet worker otherwise
it will be handled in hasHandle case and it will become a "Put" request.

Client side if a Truncate request is called on the open file we should
send a FSETSTAT packet, the request is on the handle, and not a SETSTAT
packet that should be used for paths and not for handle.
2020-08-24 15:00:36 +02:00
Tobias Klauser 7d8a855595 Revert PR #370
This reverts commit 3cda2a1c6b / PR #370.

Reason for revert: this broke the Travis CI build, see
https://github.com/pkg/sftp/pull/370#issuecomment-678610816
2020-08-24 11:22:05 +02:00
Tobias Klauser 3cda2a1c6b Exclude test/example code in non-test builds
The fakeFileInfoSys and testOsSys funcs are only used in tests, so
rename the files they are defined in to request_*_test.go to exclude
them from non-test builds.

Also rename request-example.go to request_example_test.go to exclude it
as well, since it uses said funcs in example code.
2020-08-10 14:14:59 +02:00
John Eikenberry 5a3a7572f5
Revert "Bug: windows specific issue on request-server.go" 2019-11-02 21:04:45 +00:00
Daniel Fletcher 313f3c181d Bug: InMemoryHandler() mimics a linux file system. When build for
windows filepath.Dir(), more specifically the clean function preforms
incorrectly in our situation. As the filesystem is constant we can do a
simplified dir() function to resolve the issue.
2019-10-23 10:45:52 +01:00
Daniel Fletcher e9514f4967 Removed some unnecessary logging, and previous merge duplicated some code 2019-10-21 12:43:45 +01:00
Daniel Fletcher 4adf56b4e4 Merge branch 'master' of https://github.com/danfletcher1/sftp 2019-10-21 11:54:57 +01:00
Daniel Fletcher 67f906c100 When removing or renaming a folder, subfiles/folders of the path was not being updated 2019-10-21 11:52:48 +01:00
Daniel Fletcher b4e1be7c5d When removing or renaming a folder, subfiles/folders of the path was not being updated 2019-10-09 16:40:31 +01:00
John Eikenberry dcef9e0d4a
Merge pull request #304 from drakkan/lint
fix lint issues and update to be more idiomatic
2019-09-29 13:12:10 -07:00
Nicola Murino c5d967b3f6 notify errors to readerAt and writerAt
Add an optional interface that readerAt and writerAt can implement
to be notified about the error causing Serve() to exit with the
request still open.

Implement the TransferError interface in request-example.
This way we can run the request server example in debug mode, for example:

cd examples/request-server
go run -tags debug main.go

simulate a connection error killing an sftp client while uploading/downloading
and see the debug log that shows that the error is correctly notifyed

Fixes #306
2019-09-12 08:17:32 +02:00
Nicola Murino b4ea0fd6f6 fix lint issues
These lint issues remain:

- request-errors.go, aliases for new error types
- request-attrs.go, UidGid. Changing this will break compatibility
2019-08-30 17:04:37 +02:00
Tommie Gannert 2c24eaad1c Implement the hardlink@openssh.com extension.
Both client and server. This is documented in

  https://github.com/openssh/openssh-portable/blob/master/PROTOCOL

Draft 7 of SFTP added support for SSH_FXP_LINK which supports both
symlinks and hardlinks, but unfortunately OpenSSH doesn't support
that:

  https://tools.ietf.org/html/draft-ietf-secsh-filexfer-07#section-7.7

Adding support for this as an option would be a nice extension to
this.
2019-08-25 20:16:37 -07:00
John Eikenberry 05f7f0a92c add comment about purpose of context use in example/tests 2019-02-04 13:22:46 -08:00
John Eikenberry fdad088de8 small fixes suggested in code review
needless use of empty byte slice (left over from earlier work)
plus a couple tweaks to tests/asserts

thanks @puellanivis for the review
2019-02-04 13:21:47 -08:00
John Eikenberry c71cbb17d3 'open' directory on opendir packet
Just like with files, the call to the hander to create the Lister is
done when the OPENDIR packet is received. This eliminates the need for
the lock in the filelist() method and opens the path for eliminating
more locks.
2019-01-29 14:49:22 -08:00
John Eikenberry 0a96e0de8a initial test of opening 'file' on open packet
Testing feasibility of creating the reader/writer when first receiving
the Open packet instead of waiting for the Get/Put.

This work is meant to make the Request locks easier to manage and
ultimately reducing/eliminating them as much as possible.
2019-01-29 14:49:22 -08:00
John Eikenberry 91a21603c9 add WithContext() calls to each test handler
Want to catch issues with using Context objects in tests. Instigated by
a deadlock bug (#280) when calling WithContext(). This triggers that
bug.
2019-01-29 14:49:05 -08:00
John Eikenberry fe93131e0a fix example request filesystem's file renaming
also added a test for the issue

Fixes #264
2018-08-17 11:59:53 -07:00
John Eikenberry d2aa419835 fix punctuation 2018-05-11 14:26:11 -07:00
John Eikenberry 161bbaf9a8 a few code simplifications
ran gosimple over the code and made suggested adjustments
2018-02-15 11:17:19 -08:00
John Eikenberry 02e35135dc test errors now set in a more uniform manner
request_test and request-server_test set mocked/fake errors differently.
This makes them use the same basic API for simplicity.
2018-01-16 14:18:45 -08:00
John Eikenberry 1a8a095942 add hooks for returning errors from test handlers
for use in tests, when I want to test error handling
2018-01-07 18:29:18 -08:00
Dave Cheney f2782dd6fa Move Request.handle to *Request
Updates #192

Move handle() onto *Request, this has flow on effects to the interface
types declared in request-interface.go, the examples and the tests.

The decision to address #192 started with advice from gopl.io, but I
think has uncovered several bugs as many of the request methods operate
on copies of data stored in the RequestServer's cache. I think this is
unintentional, but may point to some correctness issues, see #193.
2017-08-13 17:22:00 +10:00