Uploaded image for project: 'MINA SSHD'
  1. MINA SSHD
  2. SSHD-100

[sftp] open(2) w/ O_CREAT|O_TRUNC works, but O_CREAT alone fails

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • 0.6.0
    • None

    Description

      Hi folks,

      I've mounted an sftp directory using sshfs like so:

      1. sshfs -d -p 9022 bpowers@$SERVER_NAME:/bpowers /home/bpowers/Desktop/wintest

      The following sequences of commands shows the problem:
      root@bpowers-laptop:/home/bpowers/Desktop/wintest/test# rm -f bar
      root@bpowers-laptop:/home/bpowers/Desktop/wintest/test# touch bar
      touch: cannot touch `bar': No such file or directory
      root@bpowers-laptop:/home/bpowers/Desktop/wintest/test# echo "foo" > bar
      root@bpowers-laptop:/home/bpowers/Desktop/wintest/test# cat bar
      foo
      root@bpowers-laptop:/home/bpowers/Desktop/wintest/test# rm bar
      root@bpowers-laptop:/home/bpowers/Desktop/wintest/test# touch bar
      touch: cannot touch `bar': No such file or directory
      ...

      I've reduced it to a simple test case. Running the attached program gives me the following:
      root@bpowers-laptop:/home/bpowers/Desktop/wintest/test# /home/bpowers/creat_test
      /home/bpowers/Desktop/wintest/test/abc2: No such file or directory
      /home/bpowers/Desktop/wintest/test/abc3: worked.

      The difference is in the flags passed to open(2), and the consequence of this is that I cannot use cp or rsync to create any files over sftp (although they will update existing files).

      see attachment for the source of creat_test, which can be compiled with:
      $ gcc -o creat_test test.c
      and
      $ man 2 open
      for a description of the flags.

      Debugging output from sshfs shows the following:

      unique: 39, opcode: LOOKUP (1), nodeid: 1, insize: 45
      LOOKUP /test
      getattr /test
           NODEID: 2
           unique: 39, success, outsize: 144
      unique: 40, opcode: LOOKUP (1), nodeid: 2, insize: 45
      LOOKUP /test/abc2
      getattr /test/abc2
           unique: 40, error: -2 (No such file or directory), outsize: 16
      unique: 41, opcode: CREATE (35), nodeid: 2, insize: 61
      create flags: 0x8041 /test/abc2 0100644 umask=0022
           unique: 41, error: -2 (No such file or directory), outsize: 16

      unique: 42, opcode: LOOKUP (1), nodeid: 2, insize: 45
      LOOKUP /test/abc3
      getattr /test/abc3
           unique: 42, error: -2 (No such file or directory), outsize: 16
      unique: 43, opcode: CREATE (35), nodeid: 2, insize: 61
      create flags: 0x8241 /test/abc3 0100644 umask=0022
           create[25271456] flags: 0x8241 /test/abc3
      fgetattr[25271456] /test/abc3
           NODEID: 4
           unique: 43, success, outsize: 160
      unique: 44, opcode: FLUSH (25), nodeid: 4, insize: 64
      flush[25271456]
           unique: 44, success, outsize: 16
      unique: 45, opcode: RELEASE (18), nodeid: 4, insize: 64
      release[25271456] flags: 0x8001
           unique: 45, success, outsize: 16

      Attachments

        1. test.c
          0.6 kB
          Bobby Powers
        2. 0001-SSHD-100-create-files-when-SSH_FXF_CREAT-is-passed-t.patch
          4 kB
          Bobby Powers

        Activity

          People

            gnodet Guillaume Nodet
            bpowers Bobby Powers
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: