Exemplo n.º 1
0
  def _Open(self, path_spec, mode='rb'):
    """Opens the file system defined by path specification.

    Args:
      path_spec (PathSpec): path specification.
      mode (Optional[str]): file access mode. The default is 'rb' which
          represents read-only binary.

    Raises:
      AccessError: if the access to open the file was denied.
      IOError: if the file system could not be opened.
      PathSpecError: if the path specification is incorrect.
      ValueError: if the path specification is invalid.
    """
    if not path_spec.HasParent():
      raise errors.PathSpecError(
          'Unsupported path specification without parent.')

    file_object = resolver.Resolver.OpenFileObject(
        path_spec.parent, resolver_context=self._resolver_context)

    cpio_archive_file = cpio.CPIOArchiveFile()
    try:
      cpio_archive_file.Open(file_object)
    except:
      file_object.close()
      raise

    self._file_object = file_object
    self._cpio_archive_file = cpio_archive_file
Exemplo n.º 2
0
    def testReadFileEntryOnPortableASCII(self):
        """Tests the _ReadFileEntry function on portable ASCII format."""
        test_file = cpio.CPIOArchiveFile()
        test_file.file_format = 'odc'

        test_file_path = self._GetTestFilePath(['syslog.odc.cpio'])
        with open(test_file_path, 'rb') as file_object:
            file_io_object = file_object_io.FileObjectIO(
                None, file_object=file_object)
            file_io_object.open()

            file_entry = test_file._ReadFileEntry(file_io_object, 0)
            self.assertEqual(file_entry.data_size, 1247)

            file_io_object.close()
Exemplo n.º 3
0
    def testReadFileEntryOnPortableASCII(self):
        """Tests the _ReadFileEntry function on portable ASCII format."""
        test_file = cpio.CPIOArchiveFile()
        test_file.file_format = 'odc'

        test_path = self._GetTestFilePath(['syslog.odc.cpio'])
        self._SkipIfPathNotExists(test_path)

        test_os_path_spec = path_spec_factory.Factory.NewPathSpec(
            definitions.TYPE_INDICATOR_OS, location=test_path)
        file_object = resolver.Resolver.OpenFileObject(
            test_os_path_spec, resolver_context=self._resolver_context)

        file_entry = test_file._ReadFileEntry(file_object, 0)
        self.assertEqual(file_entry.data_size, 1247)
Exemplo n.º 4
0
    def testReadFileEntryOnBinary(self):
        """Tests the _ReadFileEntry function on binary format."""
        test_file = cpio.CPIOArchiveFile()
        test_file.file_format = 'bin-little-endian'

        test_file_path = self._GetTestFilePath(['syslog.bin.cpio'])
        with open(test_file_path, 'rb') as file_object:
            file_io_object = file_object_io.FileObjectIO(
                None, file_object=file_object)
            file_io_object.open()

            file_entry = test_file._ReadFileEntry(file_io_object, 0)
            self.assertEqual(file_entry.data_size, 1247)

            file_io_object.close()
Exemplo n.º 5
0
    def testOpenAndCloseOnPortableASCII(self):
        """Tests the Open and Close functions on portable ASCII format."""
        test_file = cpio.CPIOArchiveFile()

        test_file_path = self._GetTestFilePath(['syslog.odc.cpio'])
        with open(test_file_path, 'rb') as file_object:
            file_io_object = file_object_io.FileObjectIO(
                None, file_object=file_object)
            file_io_object.open()

            test_file.Open(file_io_object)

            self.assertEqual(test_file.file_format, 'odc')

            test_file.Close()
            file_io_object.close()
Exemplo n.º 6
0
    def testOpenAndCloseOnBinary(self):
        """Tests the Open and Close functions on binary format."""
        test_file = cpio.CPIOArchiveFile()

        test_file_path = self._GetTestFilePath(['syslog.bin.cpio'])
        with open(test_file_path, 'rb') as file_object:
            file_io_object = file_object_io.FileObjectIO(
                None, file_object=file_object)
            file_io_object.open()

            test_file.Open(file_io_object)

            self.assertEqual(test_file.file_format, 'bin-little-endian')

            test_file.Close()
            file_io_object.close()
Exemplo n.º 7
0
    def testReadFileEntriesOnBinary(self):
        """Tests the _ReadFileEntries function on binary format."""
        test_file = cpio.CPIOArchiveFile()
        test_file.file_format = 'bin-little-endian'

        test_path = self._GetTestFilePath(['syslog.bin.cpio'])
        self._SkipIfPathNotExists(test_path)

        test_os_path_spec = path_spec_factory.Factory.NewPathSpec(
            definitions.TYPE_INDICATOR_OS, location=test_path)
        file_object = resolver.Resolver.OpenFileObject(
            test_os_path_spec, resolver_context=self._resolver_context)

        test_file._file_size = file_object.get_size()
        test_file._ReadFileEntries(file_object)
        self.assertEqual(len(test_file._file_entries), 1)
Exemplo n.º 8
0
    def testOpenAndCloseOnPortableASCII(self):
        """Tests the Open and Close functions on portable ASCII format."""
        test_file = cpio.CPIOArchiveFile()

        test_path = self._GetTestFilePath(['syslog.odc.cpio'])
        self._SkipIfPathNotExists(test_path)

        test_os_path_spec = path_spec_factory.Factory.NewPathSpec(
            definitions.TYPE_INDICATOR_OS, location=test_path)
        file_object = resolver.Resolver.OpenFileObject(
            test_os_path_spec, resolver_context=self._resolver_context)

        test_file.Open(file_object)

        self.assertEqual(test_file.file_format, 'odc')

        test_file.Close()
Exemplo n.º 9
0
    def testReadFileEntryOnNewASCIIWithCRC(self):
        """Tests the _ReadFileEntry function on new ASCII with CRC format."""
        test_file = cpio.CPIOArchiveFile()
        test_file.file_format = 'crc'

        test_file_path = self._GetTestFilePath(['syslog.crc.cpio'])
        self._SkipIfPathNotExists(test_file_path)

        with open(test_file_path, 'rb') as file_object:
            file_io_object = file_object_io.FileObjectIO(
                None, file_object=file_object)
            file_io_object.open()

            file_entry = test_file._ReadFileEntry(file_io_object, 0)
            self.assertEqual(file_entry.data_size, 1247)

            file_io_object.close()
Exemplo n.º 10
0
    def testReadFileEntriesOnBinary(self):
        """Tests the _ReadFileEntries function on binary format."""
        test_file = cpio.CPIOArchiveFile()
        test_file.file_format = 'bin-little-endian'

        test_file_path = self._GetTestFilePath(['syslog.bin.cpio'])
        self._SkipIfPathNotExists(test_file_path)

        with open(test_file_path, 'rb') as file_object:
            file_io_object = file_object_io.FileObjectIO(
                None, file_object=file_object)
            file_io_object.open()

            test_file._file_size = file_io_object.get_size()
            test_file._ReadFileEntries(file_io_object)
            self.assertEqual(len(test_file._file_entries), 1)

            file_io_object.close()
Exemplo n.º 11
0
    def testOpenAndCloseOnNewASCIIWithCRC(self):
        """Tests the Open and Close functions on new ASCII with CRC format."""
        test_file = cpio.CPIOArchiveFile()

        test_file_path = self._GetTestFilePath(['syslog.crc.cpio'])
        self._SkipIfPathNotExists(test_file_path)

        with open(test_file_path, 'rb') as file_object:
            file_io_object = file_object_io.FileObjectIO(
                None, file_object=file_object)
            file_io_object.open()

            test_file.Open(file_io_object)

            self.assertEqual(test_file.file_format, 'crc')

            test_file.Close()
            file_io_object.close()
Exemplo n.º 12
0
    def testGetFileEntryByPathOnBinary(self):
        """Tests the GetFileEntryByPath function on binary format."""
        test_file = cpio.CPIOArchiveFile()

        test_file_path = self._GetTestFilePath(['syslog.bin.cpio'])
        with open(test_file_path, 'rb') as file_object:
            file_io_object = file_object_io.FileObjectIO(
                None, file_object=file_object)
            file_io_object.open()

            test_file.Open(file_io_object)

            file_entry = test_file.GetFileEntryByPath('syslog')
            self.assertIsNotNone(file_entry)

            file_entry = test_file.GetFileEntryByPath('bogus')
            self.assertIsNone(file_entry)

            test_file.Close()
            file_io_object.close()
Exemplo n.º 13
0
    def testFileEntryExistsByPathOnBinary(self):
        """Tests the FileEntryExistsByPath function on binary format."""
        test_file = cpio.CPIOArchiveFile()

        test_file_path = self._GetTestFilePath(['syslog.bin.cpio'])
        with open(test_file_path, 'rb') as file_object:
            file_io_object = file_object_io.FileObjectIO(
                None, file_object=file_object)
            file_io_object.open()

            test_file.Open(file_io_object)

            result = test_file.FileEntryExistsByPath('syslog')
            self.assertTrue(result)

            result = test_file.FileEntryExistsByPath('bogus')
            self.assertFalse(result)

            test_file.Close()
            file_io_object.close()
Exemplo n.º 14
0
    def testGetFileEntriesOnBinary(self):
        """Tests the GetFileEntries function on binary format."""
        test_file = cpio.CPIOArchiveFile()

        test_file_path = self._GetTestFilePath(['syslog.bin.cpio'])
        with open(test_file_path, 'rb') as file_object:
            file_io_object = file_object_io.FileObjectIO(
                None, file_object=file_object)
            file_io_object.open()

            test_file.Open(file_io_object)

            file_entries = list(test_file.GetFileEntries())
            self.assertEqual(len(file_entries), 1)

            test_file.Close()

            file_entries = list(test_file.GetFileEntries())
            self.assertEqual(len(file_entries), 0)

            file_io_object.close()
Exemplo n.º 15
0
    def testGetFileEntryByPathOnBinary(self):
        """Tests the GetFileEntryByPath function on binary format."""
        test_file = cpio.CPIOArchiveFile()

        test_path = self._GetTestFilePath(['syslog.bin.cpio'])
        self._SkipIfPathNotExists(test_path)

        test_os_path_spec = path_spec_factory.Factory.NewPathSpec(
            definitions.TYPE_INDICATOR_OS, location=test_path)
        file_object = resolver.Resolver.OpenFileObject(
            test_os_path_spec, resolver_context=self._resolver_context)

        test_file.Open(file_object)

        file_entry = test_file.GetFileEntryByPath('syslog')
        self.assertIsNotNone(file_entry)

        file_entry = test_file.GetFileEntryByPath('bogus')
        self.assertIsNone(file_entry)

        test_file.Close()