Example #1
0
    def testLs_ContainsFiles(self):
        data_store.REL_DB.WriteClientMetadata(
            client_id=FileSystemTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)

        dir_nodes = [
            # name, content
            ('file1', b'foo'),
            ('file2', b'foo\nbar'),
        ]

        with temp.AutoTempDirPath(remove_non_empty=True) as temp_dirpath:
            for filename, file_content in dir_nodes:
                filepath = os.path.join(temp_dirpath, filename)
                with io.open(filepath, 'wb') as filedesc:
                    filedesc.write(file_content)

            fs_obj = fs.FileSystem(self._get_fake_api_client(),
                                   jobs_pb2.PathSpec.OS)

            stat_entries = fs_obj.ls(temp_dirpath)
            stat_entries = sorted(stat_entries, key=lambda _: _.pathspec.path)
            self.assertLen(stat_entries, 2)

            self.assertEqual(stat_entries[0].pathspec.path,
                             os.path.join(temp_dirpath, 'file1'))
            self.assertEqual(stat_entries[0].st_size, 3)

            self.assertEqual(stat_entries[1].pathspec.path,
                             os.path.join(temp_dirpath, 'file2'))
            self.assertEqual(stat_entries[1].st_size, 7)
Example #2
0
    def testWget_FileDoesNotExist(self):
        data_store.REL_DB.WriteClientMetadata(
            client_id=FileSystemTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
        fs_obj = fs.FileSystem(self._get_fake_api_client(),
                               jobs_pb2.PathSpec.OS)

        with flagsaver.flagsaver(grr_admin_ui_url=self.endpoint):
            with self.assertRaises(Exception):
                fs_obj.wget('/non/existing/file')
Example #3
0
    def testLs_EmptyDirectory(self):
        data_store.REL_DB.WriteClientMetadata(
            client_id=FileSystemTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)

        with temp.AutoTempDirPath(remove_non_empty=True) as temp_dirpath:
            fs_obj = fs.FileSystem(self._get_fake_api_client(),
                                   jobs_pb2.PathSpec.OS)

            stat_entries = fs_obj.ls(temp_dirpath)
            self.assertEmpty(stat_entries)
Example #4
0
    def testWget_IsDirectory(self):
        data_store.REL_DB.WriteClientMetadata(
            client_id=FileSystemTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
        fs_obj = fs.FileSystem(self._get_fake_api_client(),
                               jobs_pb2.PathSpec.OS)

        with flagsaver.flagsaver(grr_admin_ui_url=self.endpoint):
            with temp.AutoTempDirPath() as temp_dir:

                with self.assertRaises(Exception):
                    fs_obj.wget(temp_dir)
Example #5
0
    def testWget_NoAdminURLSpecified(self):
        data_store.REL_DB.WriteClientMetadata(
            client_id=FileSystemTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
        fs_obj = fs.FileSystem(self._get_fake_api_client(),
                               jobs_pb2.PathSpec.OS)

        with flagsaver.flagsaver(grr_admin_ui_url=''):
            with temp.AutoTempFilePath() as temp_file:

                with self.assertRaises(ValueError):
                    fs_obj.wget(temp_file)
Example #6
0
    def testOpen_WithoutApproval(self):
        data_store.REL_DB.WriteClientMetadata(
            client_id=FileSystemTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)

        fs_obj = fs.FileSystem(self._get_fake_api_client(),
                               jobs_pb2.PathSpec.OS)

        with self.assertRaises(errors.ApprovalMissingError) as context:
            fs_obj.open('/foo/bar')

        self.assertEqual(context.exception.client_id,
                         FileSystemTest.FAKE_CLIENT_ID)
Example #7
0
    def testWget_LinkWorksWithOfflineClient(self):
        data_store.REL_DB.WriteClientMetadata(
            client_id=FileSystemTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
        fs_obj = fs.FileSystem(self._get_fake_api_client(),
                               jobs_pb2.PathSpec.OS)

        content = b'foo bar'
        with flagsaver.flagsaver(grr_admin_ui_url=self.endpoint):
            with temp.AutoTempFilePath() as temp_file:
                with io.open(temp_file, 'wb') as filedesc:
                    filedesc.write(content)

                link = fs_obj.wget(temp_file)

            self.assertEqual(requests.get(link).content, content)
Example #8
0
    def testOpen_SeekOutOfBuffer(self):
        data_store.REL_DB.WriteClientMetadata(
            client_id=FileSystemTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)

        size = 1024 * 512
        with temp.AutoTempFilePath() as temp_filepath:
            with io.open(temp_filepath, 'wb') as filedesc:
                filedesc.write(b'a' * size)
                filedesc.write(b'b' * size)

            fs_obj = fs.FileSystem(self._get_fake_api_client(),
                                   jobs_pb2.PathSpec.OS)

            with fs_obj.open(temp_filepath) as filedesc:
                self.assertEqual(filedesc.seek(size - 1), size - 1)
                self.assertEqual(filedesc.read(2), b'ab')
Example #9
0
    def testOpen_SeekWithinOneBuffer(self):
        data_store.REL_DB.WriteClientMetadata(
            client_id=FileSystemTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)

        content = b'foo bar'
        with temp.AutoTempFilePath() as temp_filepath:
            with io.open(temp_filepath, 'wb') as filedesc:
                filedesc.write(content)

            fs_obj = fs.FileSystem(self._get_fake_api_client(),
                                   jobs_pb2.PathSpec.OS)

            with fs_obj.open(temp_filepath) as filedesc:
                filedesc.read(1)
                self.assertEqual(filedesc.seek(4), 4)
                self.assertEqual(filedesc.read(), b'bar')
Example #10
0
    def testGlob_SingleFile(self):
        data_store.REL_DB.WriteClientMetadata(
            client_id=FileSystemTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)

        with temp.AutoTempDirPath(remove_non_empty=True) as temp_dirpath:
            os.mkdir(os.path.join(temp_dirpath, 'dir'))
            os.mkdir(os.path.join(temp_dirpath, 'dir1'))
            os.mkdir(os.path.join(temp_dirpath, 'dir2'))

            fs_obj = fs.FileSystem(self._get_fake_api_client(),
                                   jobs_pb2.PathSpec.OS)

            stat_entries = fs_obj.glob(os.path.join(temp_dirpath, 'dir'))
            self.assertLen(stat_entries, 1)
            self.assertEqual(stat_entries[0].pathspec.path,
                             os.path.join(temp_dirpath, 'dir'))
Example #11
0
    def testOpen_ReadLargeFile(self):
        data_store.REL_DB.WriteClientMetadata(
            client_id=FileSystemTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)

        filename = 'foo'
        size = 1024 * 1024
        with temp.AutoTempDirPath(remove_non_empty=True) as temp_dirpath:
            with io.open(os.path.join(temp_dirpath, filename),
                         'wb') as filedesc:
                filedesc.write(b'a' * size)

            fs_obj = fs.FileSystem(self._get_fake_api_client(),
                                   jobs_pb2.PathSpec.OS)

            with fs_obj.open(os.path.join(temp_dirpath, filename)) as filedesc:
                self.assertEqual(len(filedesc.read()), size)
Example #12
0
    def testFgrep_NoMatches(self):
        data_store.REL_DB.WriteClientMetadata(
            client_id=FileSystemTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)

        filename = 'foo'
        with temp.AutoTempDirPath(remove_non_empty=True) as temp_dirpath:
            with io.open(os.path.join(temp_dirpath, filename),
                         'wb') as filedesc:
                filedesc.write(b'foo bar')

            fs_obj = fs.FileSystem(self._get_fake_api_client(),
                                   jobs_pb2.PathSpec.OS)

            matches = fs_obj.fgrep(os.path.join(temp_dirpath, filename),
                                   b'Foo')

            self.assertLen(matches, 0)
Example #13
0
    def testGrep_BinaryPattern(self):
        data_store.REL_DB.WriteClientMetadata(
            client_id=FileSystemTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)

        filename = 'foo'
        with temp.AutoTempDirPath(remove_non_empty=True) as temp_dirpath:
            with io.open(os.path.join(temp_dirpath, filename),
                         'wb') as filedesc:
                filedesc.write(b'foo \xffOO\nFoo \xffoo')

            fs_obj = fs.FileSystem(self._get_fake_api_client(),
                                   jobs_pb2.PathSpec.OS)

            matches = fs_obj.grep(os.path.join(temp_dirpath, filename),
                                  b'\xffoo')

            self.assertLen(matches, 2)
            self.assertEqual(matches[0].data, b'\xffOO')
            self.assertEqual(matches[0].offset, 4)
            self.assertEqual(matches[1].data, b'\xffoo')
            self.assertEqual(matches[1].offset, 12)
Example #14
0
    def testLs_Recursive(self):
        data_store.REL_DB.WriteClientMetadata(
            client_id=FileSystemTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)

        dir_nodes = [
            'file0',
            os.path.join('dir1', 'file1'),
            os.path.join('dir2', 'file2'),
            os.path.join('dir2', 'file3'),
        ]

        with temp.AutoTempDirPath(remove_non_empty=True) as temp_dirpath:
            os.mkdir(os.path.join(temp_dirpath, 'dir1'))
            os.mkdir(os.path.join(temp_dirpath, 'dir2'))
            for path in dir_nodes:
                with io.open(os.path.join(temp_dirpath, path),
                             'wb') as filedesc:
                    filedesc.write(b'foo')

            fs_obj = fs.FileSystem(self._get_fake_api_client(),
                                   jobs_pb2.PathSpec.OS)

            stat_entries = fs_obj.ls(temp_dirpath, max_depth=5)
            stat_entries = sorted(stat_entries, key=lambda _: _.pathspec.path)

            self.assertLen(stat_entries, 6)
            self.assertEqual(stat_entries[0].pathspec.path,
                             os.path.join(temp_dirpath, 'dir1'))
            self.assertEqual(stat_entries[1].pathspec.path,
                             os.path.join(temp_dirpath, 'dir1', 'file1'))
            self.assertEqual(stat_entries[2].pathspec.path,
                             os.path.join(temp_dirpath, 'dir2'))
            self.assertEqual(stat_entries[3].pathspec.path,
                             os.path.join(temp_dirpath, 'dir2', 'file2'))
            self.assertEqual(stat_entries[4].pathspec.path,
                             os.path.join(temp_dirpath, 'dir2', 'file3'))
            self.assertEqual(stat_entries[5].pathspec.path,
                             os.path.join(temp_dirpath, 'file0'))
Example #15
0
    def testLs_MaxDepth(self):
        data_store.REL_DB.WriteClientMetadata(
            client_id=FileSystemTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)

        dir_components = ['dir1', 'dir2', 'dir3', 'dir4', 'dir5']

        with temp.AutoTempDirPath(remove_non_empty=True) as temp_dirpath:
            os.makedirs(os.path.join(temp_dirpath, *dir_components))

            fs_obj = fs.FileSystem(self._get_fake_api_client(),
                                   jobs_pb2.PathSpec.OS)

            stat_entries = fs_obj.ls(temp_dirpath, max_depth=3)
            stat_entries = sorted(stat_entries, key=lambda _: _.pathspec.path)

            self.assertLen(stat_entries, 3)
            self.assertEqual(stat_entries[0].pathspec.path,
                             os.path.join(temp_dirpath, 'dir1'))
            self.assertEqual(stat_entries[1].pathspec.path,
                             os.path.join(temp_dirpath, 'dir1', 'dir2'))
            self.assertEqual(
                stat_entries[2].pathspec.path,
                os.path.join(temp_dirpath, 'dir1', 'dir2', 'dir3'))
Example #16
0
 def registry(self) -> fs.FileSystem:
     return fs.FileSystem(self._client, jobs_pb2.PathSpec.REGISTRY)
Example #17
0
 def ntfs(self) -> fs.FileSystem:
     return fs.FileSystem(self._client, jobs_pb2.PathSpec.NTFS)
Example #18
0
 def tsk(self) -> fs.FileSystem:
     return fs.FileSystem(self._client, jobs_pb2.PathSpec.TSK)
Example #19
0
 def os(self) -> fs.FileSystem:
     return fs.FileSystem(self._client, jobs_pb2.PathSpec.OS)