Ticket #2902: blargh.3.diff

File blargh.3.diff, 6.4 KB (added by Michael Hudson-Doyle, 13 years ago)
  • twisted/conch/test/test_filetransfer.py

     
    44
    55
    66import os
     7import re
    78import struct
    89import sys
    910
     
    569570        conn.serviceStopped()
    570571
    571572        self.assertSFTPConnectionLost()
     573
     574
     575
     576class TestConstants(unittest.TestCase):
     577    """
     578    Tests for the constants used by the SFTP protocol implementation.
     579
     580    @ivar filexferSpecExcerpts: Excerpts from the
     581        draft-ietf-secsh-filexfer-02.txt (draft) specification of the SFTP
     582        protocol.  There are more recent drafts of the specification, but this
     583        one describes version 3, which is what conch (and OpenSSH) implements.
     584    """
     585
     586
     587    filexferSpecExcerpts = [
     588        """
     589           The following values are defined for packet types.
     590
     591                #define SSH_FXP_INIT                1
     592                #define SSH_FXP_VERSION             2
     593                #define SSH_FXP_OPEN                3
     594                #define SSH_FXP_CLOSE               4
     595                #define SSH_FXP_READ                5
     596                #define SSH_FXP_WRITE               6
     597                #define SSH_FXP_LSTAT               7
     598                #define SSH_FXP_FSTAT               8
     599                #define SSH_FXP_SETSTAT             9
     600                #define SSH_FXP_FSETSTAT           10
     601                #define SSH_FXP_OPENDIR            11
     602                #define SSH_FXP_READDIR            12
     603                #define SSH_FXP_REMOVE             13
     604                #define SSH_FXP_MKDIR              14
     605                #define SSH_FXP_RMDIR              15
     606                #define SSH_FXP_REALPATH           16
     607                #define SSH_FXP_STAT               17
     608                #define SSH_FXP_RENAME             18
     609                #define SSH_FXP_READLINK           19
     610                #define SSH_FXP_SYMLINK            20
     611                #define SSH_FXP_STATUS            101
     612                #define SSH_FXP_HANDLE            102
     613                #define SSH_FXP_DATA              103
     614                #define SSH_FXP_NAME              104
     615                #define SSH_FXP_ATTRS             105
     616                #define SSH_FXP_EXTENDED          200
     617                #define SSH_FXP_EXTENDED_REPLY    201
     618
     619           Additional packet types should only be defined if the protocol
     620           version number (see Section ``Protocol Initialization'') is
     621           incremented, and their use MUST be negotiated using the version
     622           number.  However, the SSH_FXP_EXTENDED and SSH_FXP_EXTENDED_REPLY
     623           packets can be used to implement vendor-specific extensions.  See
     624           Section ``Vendor-Specific-Extensions'' for more details.
     625        """,
     626        """
     627            The flags bits are defined to have the following values:
     628
     629                #define SSH_FILEXFER_ATTR_SIZE          0x00000001
     630                #define SSH_FILEXFER_ATTR_UIDGID        0x00000002
     631                #define SSH_FILEXFER_ATTR_PERMISSIONS   0x00000004
     632                #define SSH_FILEXFER_ATTR_ACMODTIME     0x00000008
     633                #define SSH_FILEXFER_ATTR_EXTENDED      0x80000000
     634
     635        """,
     636        """
     637            The `pflags' field is a bitmask.  The following bits have been
     638           defined.
     639
     640                #define SSH_FXF_READ            0x00000001
     641                #define SSH_FXF_WRITE           0x00000002
     642                #define SSH_FXF_APPEND          0x00000004
     643                #define SSH_FXF_CREAT           0x00000008
     644                #define SSH_FXF_TRUNC           0x00000010
     645                #define SSH_FXF_EXCL            0x00000020
     646        """,
     647        """
     648            Currently, the following values are defined (other values may be
     649           defined by future versions of this protocol):
     650
     651                #define SSH_FX_OK                            0
     652                #define SSH_FX_EOF                           1
     653                #define SSH_FX_NO_SUCH_FILE                  2
     654                #define SSH_FX_PERMISSION_DENIED             3
     655                #define SSH_FX_FAILURE                       4
     656                #define SSH_FX_BAD_MESSAGE                   5
     657                #define SSH_FX_NO_CONNECTION                 6
     658                #define SSH_FX_CONNECTION_LOST               7
     659                #define SSH_FX_OP_UNSUPPORTED                8
     660        """]
     661
     662
     663    def test_constantsAgainstSpec(self):
     664        """
     665        The constants used by the SFTP protocol implementation match those
     666        found by searching through the spec.
     667        """
     668        constants = {}
     669        for excerpt in self.filexferSpecExcerpts:
     670            for line in excerpt.splitlines():
     671                m = re.match('^\s*#define SSH_([A-Z_]+)\s+([0-9x]*)\s*$', line)
     672                if m:
     673                    constants[m.group(1)] = int(m.group(2), 0)
     674        self.assert_(len(constants) > 0)
     675        for k, v in constants.items():
     676            self.assertEqual(v, getattr(filetransfer, k))
  • twisted/conch/ssh/filetransfer.py

     
    866866FXP_EXTENDED_REPLY  = 201
    867867
    868868FILEXFER_ATTR_SIZE        = 0x00000001
    869 FILEXFER_ATTR_OWNERGROUP  = 0x00000002
     869FILEXFER_ATTR_UIDGID      = 0x00000002
     870FILEXFER_ATTR_OWNERGROUP  = FILEXFER_ATTR_UIDGID
    870871FILEXFER_ATTR_PERMISSIONS = 0x00000004
    871 FILEXFER_ATTR_ACMODTIME   = 0x00000009
     872FILEXFER_ATTR_ACMODTIME   = 0x00000008
    872873FILEXFER_ATTR_EXTENDED    = 0x80000000L
    873874
    874875FILEXFER_TYPE_REGULAR        = 1
     
    895896FX_CONNECTION_LOST             = 7
    896897FX_OP_UNSUPPORTED              = 8
    897898FX_FILE_ALREADY_EXISTS         = 11
    898 # https://datatracker.ietf.org/idtracker/draft-ietf-secsh-filexfer/ defines
    899 # more useful error codes, but so far OpenSSH doesn't implement them.  We use
    900 # them internally for clarity, but for now define them all as FX_FAILURE to be
     899# http://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/ defines more
     900# useful error codes, but so far OpenSSH doesn't implement them.  We use them
     901# internally for clarity, but for now define them all as FX_FAILURE to be
    901902# compatible with existing software.
    902903FX_NOT_A_DIRECTORY             = FX_FAILURE
    903904FX_FILE_IS_A_DIRECTORY         = FX_FAILURE