pysftpserver.tests.utils.sftpstring

Here are the examples of the python api pysftpserver.tests.utils.sftpstring taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.

40 Examples 7

Example 1

Project: pysftpserver Source File: test_hook.py
    def test_realpath(self):
        filename = b'services'
        flags = SSH2_FXF_CREAT | SSH2_FXF_WRITE
        perm = 0o100600
        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPEN,
            sftpstring(filename),
            sftpint(flags),
            sftpint(SSH2_FILEXFER_ATTR_PERMISSIONS),
            sftpint(perm),
        )
        self.server.process()
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(SSH2_FXP_REALPATH,
                                          sftpstring(filename))
        self.server.process()
        self.assertEqual(self.hook.get_result('realpath'), filename)
        os.unlink(filename)

Example 2

Project: pysftpserver Source File: test_hook.py
    def test_stat(self):
        filename = b'services'
        with open('/etc/services') as f:
            with open(filename, 'a') as f_bis:
                f_bis.write(f.read())
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(SSH2_FXP_STAT, sftpstring(filename))
        self.server.process()
        self.assertEqual(self.hook.get_result('stat'), filename)
        os.unlink(filename)

Example 3

Project: pysftpserver Source File: test_hook.py
    def test_lstat(self):
        linkname = b'link'
        os.symlink('foo', linkname)
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(SSH2_FXP_LSTAT, sftpstring(linkname))
        self.server.process()
        self.assertEqual(self.hook.get_result('lstat'), linkname)
        os.unlink(linkname)

Example 4

Project: pysftpserver Source File: test_hook.py
    def test_fstat(self):
        filename = b'services'
        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPEN,
            sftpstring(filename),
            sftpint(SSH2_FXF_CREAT),
            sftpint(0)
        )
        self.server.process()
        handle = get_sftphandle(self.server.output_queue)
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(SSH2_FXP_FSTAT, sftpstring(handle))
        self.server.process()
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(SSH2_FXP_CLOSE, sftpstring(handle))
        self.server.process()
        self.assertEqual(self.hook.get_result('fstat'), filename)
        os.unlink(filename)

Example 5

Project: pysftpserver Source File: test_hook.py
    def test_opendir(self):
        dirname = b'foo'
        os.mkdir(dirname)
        self.server.input_queue = sftpcmd(SSH2_FXP_OPENDIR,
                                          sftpstring(dirname))
        self.server.process()
        self.assertEqual(self.hook.get_result('opendir'), dirname)
        handle = get_sftphandle(self.server.output_queue)
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(SSH2_FXP_CLOSE, sftpstring(handle))
        self.server.process()
        rmtree(dirname)

Example 6

Project: pysftpserver Source File: test_hook.py
    def test_readdir(self):
        dirname = b'foo'
        os.mkdir(dirname)
        self.server.input_queue = sftpcmd(SSH2_FXP_OPENDIR,
                                          sftpstring(dirname))
        self.server.process()
        handle = get_sftphandle(self.server.output_queue)
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(SSH2_FXP_READDIR, sftpstring(handle))
        self.server.process()
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(SSH2_FXP_CLOSE, sftpstring(handle))
        self.server.process()
        self.assertEqual(self.hook.get_result('readdir'), dirname)
        os.rmdir(dirname)

Example 7

Project: pysftpserver Source File: test_hook.py
    def test_close(self):
        filename = b'services'
        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPEN,
            sftpstring(filename),
            sftpint(SSH2_FXF_CREAT | SSH2_FXF_WRITE),
            sftpint(0),
        )
        self.server.process()
        handle = get_sftphandle(self.server.output_queue)
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(SSH2_FXP_CLOSE, sftpstring(handle))
        self.server.process()
        self.assertEqual(self.hook.get_result('close'), filename)
        os.unlink(filename)

Example 8

Project: pysftpserver Source File: test_hook.py
    def test_mkdir(self):
        dirname = b'foo'
        # sftpint(0) means no attrs
        self.server.input_queue = sftpcmd(
            SSH2_FXP_MKDIR, sftpstring(dirname), sftpint(0))
        self.server.process()
        self.server.output_queue = b''
        self.assertEqual(self.hook.get_result('mkdir', 'filename'), dirname)
        self.assertEqual(pickle.loads(self.hook.get_result('mkdir', 'attrs')),
                         dict())
        os.rmdir(dirname)

Example 9

Project: pysftpserver Source File: test_hook.py
    def test_rmdir(self):
        dirname = b'foo'
        # sftpint(0) means no attrs
        self.server.input_queue = sftpcmd(
            SSH2_FXP_MKDIR, sftpstring(dirname), sftpint(0))
        self.server.process()
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(SSH2_FXP_RMDIR, sftpstring(dirname))
        self.server.process()
        self.assertEqual(self.hook.get_result('rmdir'), dirname)

Example 10

Project: pysftpserver Source File: test_hook.py
    def test_symlink(self):
        linkpath = b'ugly'
        targetpath = b'ugliest'
        self.server.input_queue = sftpcmd(
            SSH2_FXP_SYMLINK, sftpstring(linkpath), sftpstring(targetpath),
            sftpint(0))
        self.server.process()
        self.assertEqual(self.hook.get_result('symlink', 'linkpath'), linkpath)
        self.assertEqual(self.hook.get_result('symlink', 'targetpath'),
                         targetpath)

Example 11

Project: pysftpserver Source File: test_hook.py
    def test_readlink(self):
        linkpath = b'ugly'
        targetpath = b'ugliest'
        os.symlink(linkpath, targetpath)
        self.server.input_queue = sftpcmd(
            SSH2_FXP_READLINK, sftpstring(targetpath), sftpint(0))
        self.server.process()
        self.assertEqual(self.hook.get_result('readlink'), targetpath)

Example 12

Project: pysftpserver Source File: test_server_chroot.py
    def test_mkdir(self):
        self.server.input_queue = sftpcmd(
            SSH2_FXP_MKDIR, sftpstring(b'foo'), sftpint(0))
        self.server.process()

        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_MKDIR, sftpstring(b'foo'), sftpint(0))
        self.assertRaises(SFTPException, self.server.process)

        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_RMDIR, sftpstring(b'foo')
        )
        self.server.process()

        self.assertRaises(OSError, os.rmdir, 'foo')

Example 13

Project: pysftpserver Source File: test_server_chroot.py
    def test_mkdir_forbidden(self):
        self.server.input_queue = sftpcmd(
            SSH2_FXP_MKDIR, sftpstring(b'../foo'), sftpint(0))
        self.assertRaises(SFTPForbidden, self.server.process)

        self.server.input_queue = sftpcmd(
            SSH2_FXP_MKDIR, sftpstring(b'/foo'), sftpint(0))
        self.assertRaises(SFTPForbidden, self.server.process)

Example 14

Project: pysftpserver Source File: test_server_chroot.py
    def test_stat(self):
        with open("/etc/services") as f:
            with open("services", 'a') as f_bis:
                f_bis.write(f.read())

        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_STAT,
            sftpstring(b'services')
        )
        self.server.process()
        stat = get_sftpstat(self.server.output_queue)
        self.assertEqual(stat['size'], os.path.getsize("/etc/services"))
        self.assertEqual(stat['uid'], os.getuid())

        os.unlink('services')

Example 15

Project: pysftpserver Source File: test_server_chroot.py
    def test_lstat(self):
        os.symlink("foo", "link")

        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_LSTAT,
            sftpstring(b'link')
        )
        self.server.process()
        stat = get_sftpstat(self.server.output_queue)
        self.assertEqual(stat['size'], len("foo"))
        self.assertEqual(stat['uid'], os.getuid())

        os.unlink('link')

Example 16

Project: pysftpserver Source File: test_server_chroot.py
    def test_open_forbidden(self):
        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPEN, sftpstring(
                b'/etc/services'), sftpint(SSH2_FXF_CREAT), sftpint(0)
        )
        self.assertRaises(SFTPForbidden, self.server.process)

        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPEN, sftpstring(
                b'../../foo'), sftpint(SSH2_FXF_CREAT), sftpint(0)
        )
        self.assertRaises(SFTPForbidden, self.server.process)

Example 17

Project: pysftpserver Source File: test_server_chroot.py
    def test_remove_notfound(self):
        self.server.input_queue = sftpcmd(
            SSH2_FXP_REMOVE,
            sftpstring(b'services'),
            sftpint(0)
        )
        self.assertRaises(SFTPNotFound, self.server.process)

Example 18

Project: pysftpserver Source File: test_server_chroot.py
    def test_remove_forbidden(self):
        self.server.input_queue = sftpcmd(
            SSH2_FXP_REMOVE,
            sftpstring(b'/etc/services'),
            sftpint(0)
        )
        self.assertRaises(SFTPForbidden, self.server.process)

Example 19

Project: pysftpserver Source File: test_server_chroot.py
    def test_rename_forbidden(self):
        self.server.input_queue = sftpcmd(
            SSH2_FXP_RENAME,
            sftpstring(b'services'),
            sftpstring(b'/etc/other_services'),
        )
        self.assertRaises(SFTPForbidden, self.server.process)

        self.server.input_queue = sftpcmd(
            SSH2_FXP_RENAME,
            sftpstring(b'/etc/services'),
            sftpstring(b'/etc/other_services'),
        )
        self.assertRaises(SFTPForbidden, self.server.process)

Example 20

Project: pysftpserver Source File: test_server_chroot.py
    def test_readlink(self):
        os.symlink("infound", "foo")

        self.server.input_queue = sftpcmd(
            SSH2_FXP_READLINK, sftpstring(b'foo'), sftpint(0))
        self.server.process()
        link = get_sftpname(self.server.output_queue)
        self.assertEqual(link, b"infound")

Example 21

Project: pysftpserver Source File: test_hook.py
    def test_setstat(self):
        filename = b'services'
        attrs = {
            b'size': 10**2,
            b'perm': 0o100600,
            b'atime': 1415626110,
            b'mtime': 1415626120,
        }
        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPEN,
            sftpstring(filename),
            sftpint(SSH2_FXF_CREAT | SSH2_FXF_WRITE),
            sftpint(0)
        )
        self.server.process()
        handle = get_sftphandle(self.server.output_queue)
        self.server.output_queue = b''
        etc_services = open('/etc/services', 'rb').read()
        self.server.input_queue = sftpcmd(
            SSH2_FXP_WRITE,
            sftpstring(handle),
            sftpint64(0),
            sftpstring(etc_services)
        )
        self.server.process()
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_SETSTAT,
            sftpstring(filename),
            sftpint(
                SSH2_FILEXFER_ATTR_SIZE |
                SSH2_FILEXFER_ATTR_PERMISSIONS |
                SSH2_FILEXFER_ATTR_ACMODTIME
            ),
            sftpint64(attrs[b'size']),
            sftpint(attrs[b'perm']),
            sftpint(attrs[b'atime']),
            sftpint(attrs[b'mtime']),
        )
        self.server.process()
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(SSH2_FXP_CLOSE, sftpstring(handle))
        self.server.process()
        self.assertEqual(self.hook.get_result('setstat', 'filename'), filename)
        self.assertEqual(
            pickle.loads(self.hook.get_result('setstat', 'attrs')), attrs)
        os.unlink(filename)

Example 22

Project: pysftpserver Source File: test_hook.py
    def test_fsetstat(self):
        filename = b'services'
        attrs = {
            b'size': 10**2,
            b'perm': 0o100600,
            b'atime': 1415626110,
            b'mtime': 1415626120,
        }
        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPEN,
            sftpstring(filename),
            sftpint(SSH2_FXF_CREAT | SSH2_FXF_WRITE),
            sftpint(0)
        )
        self.server.process()
        handle = get_sftphandle(self.server.output_queue)
        self.server.output_queue = b''
        etc_services = open('/etc/services', 'rb').read()
        self.server.input_queue = sftpcmd(
            SSH2_FXP_WRITE,
            sftpstring(handle),
            sftpint64(0),
            sftpstring(etc_services)
        )
        self.server.process()
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_FSETSTAT,
            sftpstring(handle),
            sftpint(
                SSH2_FILEXFER_ATTR_SIZE |
                SSH2_FILEXFER_ATTR_PERMISSIONS |
                SSH2_FILEXFER_ATTR_ACMODTIME
            ),
            sftpint64(attrs[b'size']),
            sftpint(attrs[b'perm']),
            sftpint(attrs[b'atime']),
            sftpint(attrs[b'mtime']),
        )
        self.server.process()
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(SSH2_FXP_CLOSE, sftpstring(handle))
        self.server.process()
        self.assertEqual(self.hook.get_result('fsetstat', 'filename'),
                         filename)
        self.assertEqual(
            pickle.loads(self.hook.get_result('fsetstat', 'attrs')), attrs)
        os.unlink(filename)

Example 23

Project: pysftpserver Source File: test_hook.py
    def test_open(self):
        filename = b'services'
        flags = SSH2_FXF_CREAT | SSH2_FXF_WRITE
        perm = 0o100600
        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPEN,
            sftpstring(filename),
            sftpint(flags),
            sftpint(SSH2_FILEXFER_ATTR_PERMISSIONS),
            sftpint(perm),
        )
        self.server.process()
        self.assertEqual(self.hook.get_result('open', 'filename'), filename)
        self.assertEqual(self.hook.get_result('open', 'flags'), flags)
        self.assertEqual(pickle.loads(self.hook.get_result('open', 'attrs')),
                         {b'perm': perm})
        handle = get_sftphandle(self.server.output_queue)
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(SSH2_FXP_CLOSE, sftpstring(handle))
        self.server.process()
        os.unlink(filename)

Example 24

Project: pysftpserver Source File: test_hook.py
    def test_read(self):
        filename = b'services'
        read_offset = 2
        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPEN,
            sftpstring(filename),
            sftpint(SSH2_FXF_CREAT | SSH2_FXF_WRITE | SSH2_FXF_READ),
            sftpint(SSH2_FILEXFER_ATTR_PERMISSIONS),
            sftpint(0o644),
        )
        self.server.process()
        handle = get_sftphandle(self.server.output_queue)
        self.server.output_queue = b''
        chunk = open('/etc/services', 'rb').read()
        size = (os.lstat('/etc/services').st_size)
        self.server.input_queue = sftpcmd(
            SSH2_FXP_WRITE,
            sftpstring(handle),
            sftpint64(0),
            sftpstring(chunk),
        )
        self.server.process()
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_READ,
            sftpstring(handle),
            sftpint64(read_offset),
            sftpint(size),
        )
        self.server.process()
        self.assertEqual(self.hook.get_result('read', 'filename'), filename)
        self.assertEqual(self.hook.get_result('read', 'offset'), read_offset)
        self.assertEqual(self.hook.get_result('read', 'size'), size)
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(SSH2_FXP_CLOSE, sftpstring(handle))
        self.server.process()
        os.unlink(filename)

Example 25

Project: pysftpserver Source File: test_hook.py
    def test_write(self):
        filename = b'services'
        write_offset = 5
        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPEN,
            sftpstring(filename),
            sftpint(SSH2_FXF_CREAT | SSH2_FXF_WRITE | SSH2_FXF_READ),
            sftpint(SSH2_FILEXFER_ATTR_PERMISSIONS),
            sftpint(0o644),
        )
        self.server.process()
        handle = get_sftphandle(self.server.output_queue)
        self.server.output_queue = b''
        chunk = open('/etc/services', 'rb').read()
        self.server.input_queue = sftpcmd(
            SSH2_FXP_WRITE,
            sftpstring(handle),
            sftpint64(write_offset),
            sftpstring(chunk),
        )
        self.server.process()
        self.assertEqual(self.hook.get_result('write', 'filename'), filename)
        self.assertEqual(self.hook.get_result('write', 'offset'), write_offset)
        self.assertEqual(self.hook.get_result('write', 'chunk'), chunk)
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(SSH2_FXP_CLOSE, sftpstring(handle))
        self.server.process()
        os.unlink(filename)

Example 26

Project: pysftpserver Source File: test_hook.py
    def test_rm(self):
        filename = b'services'
        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPEN,
            sftpstring(filename),
            sftpint(SSH2_FXF_CREAT | SSH2_FXF_WRITE),
            sftpint(SSH2_FILEXFER_ATTR_PERMISSIONS),
            sftpint(0o644)
        )
        self.server.process()
        handle = get_sftphandle(self.server.output_queue)
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(SSH2_FXP_CLOSE, sftpstring(handle))
        self.server.process()
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_REMOVE,
            sftpstring(filename),
            sftpint(0)
        )
        self.server.process()
        self.assertEqual(self.hook.get_result('rm'), filename)

Example 27

Project: pysftpserver Source File: test_hook.py
    def test_rename(self):
        oldpath = b'services'
        newpath = b'other_services'
        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPEN,
            sftpstring(oldpath),
            sftpint(SSH2_FXF_CREAT | SSH2_FXF_WRITE),
            sftpint(SSH2_FILEXFER_ATTR_PERMISSIONS),
            sftpint(0o644)
        )
        self.server.process()
        handle = get_sftphandle(self.server.output_queue)
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(SSH2_FXP_CLOSE, sftpstring(handle))
        self.server.process()
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_RENAME,
            sftpstring(oldpath),
            sftpstring(newpath),
        )
        self.server.process()
        self.assertEqual(self.hook.get_result('rename', 'oldpath'), oldpath)
        self.assertEqual(self.hook.get_result('rename', 'newpath'), newpath)
        os.unlink(newpath)

Example 28

Project: pysftpserver Source File: test_server_chroot.py
    def test_open_already_existing(self):
        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPEN,
            sftpstring(b'services'),
            sftpint(SSH2_FXF_CREAT),
            sftpint(0)
        )
        self.server.process()
        handle = get_sftphandle(self.server.output_queue)

        # reset output queue
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_CLOSE,
            sftpstring(handle)
        )
        self.server.process()

        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPEN,
            sftpstring(b'services'),
            sftpint(SSH2_FXF_CREAT | SSH2_FXF_EXCL),
            sftpint(0)
        )
        self.assertRaises(SFTPException, self.server.process)

        os.unlink('services')

Example 29

Project: pysftpserver Source File: test_server_chroot.py
    def test_fstat(self):
        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPEN,
            sftpstring(b'services'),
            sftpint(SSH2_FXF_CREAT),
            sftpint(0)
        )
        self.server.process()
        handle = get_sftphandle(self.server.output_queue)

        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_FSTAT,
            sftpstring(handle)
        )
        self.server.process()
        stat = get_sftpstat(self.server.output_queue)
        self.assertEqual(stat['size'], 0)
        self.assertEqual(stat['uid'], os.getuid())

        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_CLOSE,
            sftpstring(handle)
        )
        self.server.process()

        os.unlink('services')

Example 30

Project: pysftpserver Source File: test_server_chroot.py
    def test_setstat(self):
        atime = 1415626110
        mtime = 1415626120
        size = 10**2

        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPEN,
            sftpstring(b'services'),
            sftpint(SSH2_FXF_CREAT | SSH2_FXF_WRITE),
            sftpint(0)
        )
        self.server.process()
        handle = get_sftphandle(self.server.output_queue)

        # reset output queue
        self.server.output_queue = b''
        etc_services = open('/etc/services', 'rb').read()
        self.server.input_queue = sftpcmd(
            SSH2_FXP_WRITE,
            sftpstring(handle),
            sftpint64(0),
            sftpstring(etc_services)
        )
        self.server.process()

        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_SETSTAT,
            sftpstring(b'services'),
            sftpint(
                SSH2_FILEXFER_ATTR_SIZE |
                SSH2_FILEXFER_ATTR_PERMISSIONS |
                SSH2_FILEXFER_ATTR_ACMODTIME
            ),
            sftpint64(size),  # 1000 bytes
            sftpint(33152),  # 0o100600
            sftpint(atime),
            sftpint(mtime)
        )
        self.server.process()

        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_CLOSE,
            sftpstring(handle)
        )
        self.server.process()

        self.assertEqual(
            0o600,
            stat_lib.S_IMODE(os.lstat('services').st_mode)
        )

        self.assertEqual(
            atime,
            os.lstat('services').st_atime
        )

        self.assertEqual(
            mtime,
            os.lstat('services').st_mtime
        )

        self.assertEqual(
            size,
            os.lstat('services').st_size
        )

        os.unlink('services')

Example 31

Project: pysftpserver Source File: test_server_chroot.py
    def test_fsetstat(self):
        atime = 1415626110
        mtime = 1415626120
        size = 10**2

        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPEN,
            sftpstring(b'services'),
            sftpint(SSH2_FXF_CREAT | SSH2_FXF_WRITE),
            sftpint(0)
        )
        self.server.process()
        handle = get_sftphandle(self.server.output_queue)

        # reset output queue
        self.server.output_queue = b''
        etc_services = open('/etc/services', 'rb').read()
        self.server.input_queue = sftpcmd(
            SSH2_FXP_WRITE,
            sftpstring(handle),
            sftpint64(0),
            sftpstring(etc_services)
        )
        self.server.process()

        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_FSETSTAT,
            sftpstring(handle),
            sftpint(
                SSH2_FILEXFER_ATTR_SIZE |
                SSH2_FILEXFER_ATTR_PERMISSIONS |
                SSH2_FILEXFER_ATTR_ACMODTIME
            ),
            sftpint64(size),  # 1000 bytes
            sftpint(33152),  # 0o100600
            sftpint(atime),
            sftpint(mtime)
        )
        self.server.process()

        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_CLOSE,
            sftpstring(handle)
        )
        self.server.process()

        self.assertEqual(
            0o600,
            stat_lib.S_IMODE(os.lstat('services').st_mode)
        )

        self.assertEqual(
            atime,
            os.lstat('services').st_atime
        )

        self.assertEqual(
            mtime,
            os.lstat('services').st_mtime
        )

        self.assertEqual(
            size,
            os.lstat('services').st_size
        )

        os.unlink('services')

Example 32

Project: pysftpserver Source File: test_server_chroot.py
    def test_read_subdir(self):
        f = {b'.', b'..', b'bar'}  # files inside foo
        os.mkdir("foo")
        foobar_path = os.path.join("foo", "bar")
        with open(foobar_path, 'a') as stream:
            print("foobar", file=stream)
        # bar_size = os.lstat(foobar_path).st_size

        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPENDIR,
            sftpstring(b'foo')
        )
        self.server.process()
        handle = get_sftphandle(self.server.output_queue)

        l = set()
        while (True):
            # reset output queue
            self.server.output_queue = b''
            self.server.input_queue = sftpcmd(
                SSH2_FXP_READDIR,
                sftpstring(handle),
            )
            try:
                self.server.process()
                filename = get_sftpname(self.server.output_queue)
                l.add(filename)
            except:
                break
        self.assertEqual(l, f)

        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_CLOSE,
            sftpstring(handle),
        )
        self.server.process()

        rmtree("foo")

Example 33

Project: pysftpserver Source File: test_server_chroot.py
    def test_remove(self):
        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPEN,
            sftpstring(b'services'),
            sftpint(SSH2_FXF_CREAT | SSH2_FXF_WRITE),
            sftpint(SSH2_FILEXFER_ATTR_PERMISSIONS),
            sftpint(0o644)
        )
        self.server.process()
        handle = get_sftphandle(self.server.output_queue)

        # reset output queue
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_CLOSE,
            sftpstring(handle)
        )
        self.server.process()

        self.server.input_queue = sftpcmd(
            SSH2_FXP_REMOVE,
            sftpstring(b'services'),
            sftpint(0)
        )
        self.server.process()

Example 34

Project: pysftpserver Source File: test_server_chroot.py
    def test_rename(self):
        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPEN,
            sftpstring(b'services'),
            sftpint(SSH2_FXF_CREAT | SSH2_FXF_WRITE),
            sftpint(SSH2_FILEXFER_ATTR_PERMISSIONS),
            sftpint(0o644)
        )
        self.server.process()
        handle = get_sftphandle(self.server.output_queue)

        # reset output queue
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_CLOSE,
            sftpstring(handle),
        )
        self.server.process()

        self.server.input_queue = sftpcmd(
            SSH2_FXP_RENAME,
            sftpstring(b'services'),
            sftpstring(b'other_services'),
        )
        self.server.process()
        self.assertIn('other_services', os.listdir('.'))

Example 35

Project: pysftpserver Source File: test_server_chroot.py
    def test_mkdir_notfound(self):
        self.server.input_queue = sftpcmd(
            SSH2_FXP_MKDIR, sftpstring(b'bad/ugly'), sftpint(0))
        self.assertRaises(SFTPNotFound, self.server.process)

Example 36

Project: pysftpserver Source File: test_server_chroot.py
    def test_readdir(self):
        f = {b'.', b'..', b'foo', b'bar'}
        os.mkdir("foo")
        os.close(os.open("bar", os.O_CREAT))

        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPENDIR,
            sftpstring(b'.')
        )
        self.server.process()

        handle = get_sftphandle(self.server.output_queue)

        l = set()
        while (True):
            # reset output queue
            self.server.output_queue = b''
            self.server.input_queue = sftpcmd(
                SSH2_FXP_READDIR,
                sftpstring(handle),
            )
            try:
                self.server.process()
                filename = get_sftpname(self.server.output_queue)
                l.add(filename)
            except:
                break
        self.assertEqual(l, f)

        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_CLOSE,
            sftpstring(handle),
        )
        self.server.process()

        os.unlink("bar")
        os.rmdir("foo")

Example 37

Project: pysftpserver Source File: test_server_chroot.py
    def test_symlink(self):
        self.server.input_queue = sftpcmd(
            SSH2_FXP_SYMLINK, sftpstring(b'bad/ugly'),
            sftpstring(b'bad/ugliest'), sftpint(0))
        self.assertRaises(SFTPNotFound, self.server.process)

        self.server.input_queue = sftpcmd(
            SSH2_FXP_SYMLINK, sftpstring(b'/bad/ugly'),
            sftpstring(b'bad/ugliest'), sftpint(0))
        self.assertRaises(SFTPForbidden, self.server.process)

        self.server.input_queue = sftpcmd(
            SSH2_FXP_SYMLINK, sftpstring(b'bad/ugly'),
            sftpstring(b'/bad/ugliest'), sftpint(0))
        self.assertRaises(SFTPForbidden, self.server.process)

        self.server.input_queue = sftpcmd(
            SSH2_FXP_SYMLINK, sftpstring(b'ugly'),
            sftpstring(b'ugliest'), sftpint(0))
        self.server.process()
        self.assertIn('ugly', os.listdir('.'))

Example 38

Project: pysftpserver Source File: test_server_chroot.py
    def test_readdir_broken_symlink(self):
        os.symlink("infound", "foo")

        self.server.input_queue = sftpcmd(
            SSH2_FXP_READLINK, sftpstring(b'foo'), sftpint(0))
        self.server.process()
        link = get_sftpname(self.server.output_queue)
        self.assertEqual(link, b"infound")
        self.server.output_queue = b''

        f = {b'.', b'..', b'foo'}
        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPENDIR,
            sftpstring(b'.')
        )
        self.server.process()

        handle = get_sftphandle(self.server.output_queue)

        l = set()
        while (True):
            # reset output queue
            self.server.output_queue = b''
            self.server.input_queue = sftpcmd(
                SSH2_FXP_READDIR,
                sftpstring(handle),
            )
            try:
                self.server.process()
                filename = get_sftpname(self.server.output_queue)
                l.add(filename)
            except:
                break
        self.assertEqual(l, f)

        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_CLOSE,
            sftpstring(handle),
        )
        self.server.process()

Example 39

Project: pysftpserver Source File: test_server_chroot.py
    def test_rmdir_notfound(self):
        self.server.input_queue = sftpcmd(
            SSH2_FXP_RMDIR, sftpstring(b'bad/ugly'), sftpint(0))
        self.assertRaises(SFTPNotFound, self.server.process)

Example 40

Project: pysftpserver Source File: test_server_chroot.py
    def test_copy_services(self):
        self.server.input_queue = sftpcmd(
            SSH2_FXP_OPEN,
            sftpstring(b'services'),
            sftpint(SSH2_FXF_CREAT | SSH2_FXF_WRITE | SSH2_FXF_READ),
            sftpint(SSH2_FILEXFER_ATTR_PERMISSIONS),
            sftpint(0o644)
        )
        self.server.process()
        handle = get_sftphandle(self.server.output_queue)

        # reset output queue
        self.server.output_queue = b''
        etc_services = open('/etc/services', 'rb').read()
        etc_services_size = \
            os.lstat('/etc/services').st_size  # size of the whole file
        self.server.input_queue = sftpcmd(
            SSH2_FXP_WRITE,
            sftpstring(handle),
            sftpint64(0),
            sftpstring(etc_services)
        )
        self.server.process()

        # reset output queue
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_READ,
            sftpstring(handle),
            sftpint64(0),
            sftpint(
                etc_services_size
            )
        )
        self.server.process()
        data = get_sftpdata(self.server.output_queue)

        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_READ,
            sftpstring(handle),
            sftpint64(etc_services_size),
            sftpint(1)  # wait for the EOF
        )
        # EOF status is raised as an exception
        self.assertRaises(SFTPException, self.server.process)

        # reset output queue
        self.server.output_queue = b''
        self.server.input_queue = sftpcmd(
            SSH2_FXP_CLOSE,
            sftpstring(handle)
        )
        self.server.process()

        self.assertEqual(
            etc_services,
            open('services', 'rb').read()
        )
        self.assertEqual(
            etc_services,
            data
        )
        self.assertEqual(
            0o644,
            stat_lib.S_IMODE(os.lstat('services').st_mode)
        )
        self.assertEqual(
            etc_services_size,
            os.lstat('services').st_size
        )

        os.unlink('services')