Skip to content

Commit

Permalink
Merge pull request pkg#216 from pkg/issue214/empty-file
Browse files Browse the repository at this point in the history
respect create flag in open packet
  • Loading branch information
eikenb authored Dec 24, 2017
2 parents a6c60b2 + 0e667a7 commit fb7a319
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 2 deletions.
7 changes: 6 additions & 1 deletion request-server.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,12 @@ func (rs *RequestServer) packetWorker(pktChan chan requestPacket) error {
case *sshFxpRealpathPacket:
rpkt = cleanPacketPath(pkt)
case isOpener:
handle := rs.nextRequest(requestFromPacket(pkt))
request := requestFromPacket(pkt)
handle := rs.nextRequest(request)
p, ok := pkt.(*sshFxpOpenPacket)
if ok && p.hasPflags(ssh_FXF_CREAT) {
request.call(rs.Handlers, pkt)
}
rpkt = sshFxpHandlePacket{pkt.id(), handle}
case *sshFxpFstatPacket:
handle := pkt.getHandle()
Expand Down
14 changes: 14 additions & 0 deletions request-server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,20 @@ func TestRequestWrite(t *testing.T) {
assert.Equal(t, f.content, []byte("hello"))
}

func TestRequestWriteEmpty(t *testing.T) {
p := clientRequestServerPair(t)
defer p.Close()
n, err := putTestFile(p.cli, "/foo", "")
assert.Nil(t, err)
assert.Equal(t, 0, n)
r := p.testHandler()
f, err := r.fetch("/foo")
if assert.Nil(t, err) {
assert.False(t, f.isdir)
assert.Equal(t, f.content, []byte(""))
}
}

// needs fail check
func TestRequestFilename(t *testing.T) {
p := clientRequestServerPair(t)
Expand Down
2 changes: 1 addition & 1 deletion request.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ func (r *Request) call(handlers Handlers, pkt requestPacket) responsePacket {
switch r.Method {
case "Get":
return fileget(handlers.FileGet, r, pd)
case "Put": // add "Append" to this to handle append only file writes
case "Put", "Open": // add "Append" to handle append only file writes
return fileput(handlers.FilePut, r, pd)
case "Setstat", "Rename", "Rmdir", "Mkdir", "Symlink", "Remove":
return filecmd(handlers.FileCmd, r, pd)
Expand Down

0 comments on commit fb7a319

Please sign in to comment.