def pyvmdk_test_multi_open_close_file(filename, mode):
  print(
      "Testing multi open close of: {0:s} with access: {1:s}\t".format(
          filename, get_mode_string(mode)), end="")

  result = True
  try:
    vmdk_handle = pyvmdk.handle()

    vmdk_handle.open(filename, mode)
    vmdk_handle.close()
    vmdk_handle.open(filename, mode)
    vmdk_handle.close()

  except Exception as exception:
    error_string = str(exception)
    result = False

  if not result:
    print("(FAIL)")
  else:
    print("(PASS)")

  if error_string:
    print(error_string)
  return result
def pyvmdk_test_single_open_close_file_object_with_dereference(filename, mode):
    print(("Testing single open close of file-like object with dereference "
           "of: {0:s} with access: {1:s}\t").format(filename,
                                                    get_mode_string(mode)),
          end="")

    result = True
    try:
        file_object = open(filename, "rb")
        vmdk_handle = pyvmdk.handle()

        vmdk_handle.open_file_object(file_object, mode)
        del file_object
        vmdk_handle.close()

    except Exception as exception:
        error_string = str(exception)
        result = False

    if not result:
        print("(FAIL)")
    else:
        print("(PASS)")

    if error_string:
        print(error_string)
    return result
def pyvmdk_test_single_open_close_file_object_with_dereference(
    filename, mode):
  print(
      ("Testing single open close of file-like object with dereference "
       "of: {0:s} with access: {1:s}\t").format(
          filename, get_mode_string(mode)), end="")

  result = True
  try:
    file_object = open(filename, "rb")
    vmdk_handle = pyvmdk.handle()

    vmdk_handle.open_file_object(file_object, mode)
    del file_object
    vmdk_handle.close()

  except Exception as exception:
    error_string = str(exception)
    result = False

  if not result:
    print("(FAIL)")
  else:
    print("(PASS)")

  if error_string:
    print(error_string)
  return result
Exemple #4
0
  def test_read_buffer_file_object(self):
    """Tests the read_buffer function on a file-like object."""
    if not unittest.source:
      raise unittest.SkipTest("missing source")

    if not os.path.isfile(unittest.source):
      raise unittest.SkipTest("source not a regular file")

    with open(unittest.source, "rb") as file_object:
      vmdk_handle = pyvmdk.handle()

      vmdk_handle.open_file_object(file_object)

      extent_data_file_objects = []
      for extent_descriptor in vmdk_handle.extent_descriptors:
        extend_data_file_path = os.path.join(
          os.path.dirname(unittest.source), extent_descriptor.filename)
        extend_data_file_object = open(extend_data_file_path, "rb")
        extent_data_file_objects.append(extend_data_file_object)

      vmdk_handle.open_extent_data_files_as_file_objects(
          extent_data_file_objects)

      media_size = vmdk_handle.get_media_size()

      # Test normal read.
      data = vmdk_handle.read_buffer(size=4096)

      self.assertIsNotNone(data)
      self.assertEqual(len(data), min(media_size, 4096))

      vmdk_handle.close()

      for extend_data_file_object in extent_data_file_objects:
        extend_data_file_object.close()
Exemple #5
0
  def test_read_buffer_at_offset(self):
    """Tests the read_buffer_at_offset function."""
    if not unittest.source:
      return

    vmdk_handle = pyvmdk.handle()

    vmdk_handle.open(unittest.source)

    file_size = vmdk_handle.get_size()

    # Test normal read.
    data = vmdk_handle.read_buffer_at_offset(4096, 0)

    self.assertIsNotNone(data)
    self.assertEqual(len(data), min(file_size, 4096))

    # Test read beyond file size.
    if file_size > 16:
      data = vmdk_handle.read_buffer_at_offset(4096, file_size - 16)

      self.assertIsNotNone(data)
      self.assertEqual(len(data), 16)

    with self.assertRaises(ValueError):
      vmdk_handle.read_buffer_at_offset(-1, 0)

    with self.assertRaises(ValueError):
      vmdk_handle.read_buffer_at_offset(4096, -1)

    vmdk_handle.close()

    # Test the read without open.
    with self.assertRaises(IOError):
      vmdk_handle.read_buffer_at_offset(4096, 0)
Exemple #6
0
    def test_open_close(self):
        """Tests the open and close functions."""
        if not unittest.source:
            return

        vmdk_handle = pyvmdk.handle()

        # Test open and close.
        vmdk_handle.open(unittest.source)
        vmdk_handle.close()

        # Test open and close a second time to validate clean up on close.
        vmdk_handle.open(unittest.source)
        vmdk_handle.close()

        file_object = open(unittest.source, "rb")

        # Test open_file_object and close.
        vmdk_handle.open_file_object(file_object)
        vmdk_handle.close()

        # Test open_file_object and close a second time to validate clean up on close.
        vmdk_handle.open_file_object(file_object)
        vmdk_handle.close()

        # Test open_file_object and close and dereferencing file_object.
        vmdk_handle.open_file_object(file_object)
        del file_object
        vmdk_handle.close()
Exemple #7
0
  def test_open_close(self):
    """Tests the open and close functions."""
    if not unittest.source:
      return

    vmdk_handle = pyvmdk.handle()

    # Test open and close.
    vmdk_handle.open(unittest.source)
    vmdk_handle.close()

    # Test open and close a second time to validate clean up on close.
    vmdk_handle.open(unittest.source)
    vmdk_handle.close()

    file_object = open(unittest.source, "rb")

    # Test open_file_object and close.
    vmdk_handle.open_file_object(file_object)
    vmdk_handle.close()

    # Test open_file_object and close a second time to validate clean up on close.
    vmdk_handle.open_file_object(file_object)
    vmdk_handle.close()

    # Test open_file_object and close and dereferencing file_object.
    vmdk_handle.open_file_object(file_object)
    del file_object
    vmdk_handle.close()
    def test_open_file_object(self):
        """Tests the open_file_object function."""
        test_source = unittest.source
        if not test_source:
            raise unittest.SkipTest("missing source")

        if not os.path.isfile(test_source):
            raise unittest.SkipTest("source not a regular file")

        vmdk_handle = pyvmdk.handle()

        with open(test_source, "rb") as file_object:

            vmdk_handle.open_file_object(file_object)

            with self.assertRaises(IOError):
                vmdk_handle.open_file_object(file_object)

            vmdk_handle.close()

            with self.assertRaises(TypeError):
                vmdk_handle.open_file_object(None)

            with self.assertRaises(ValueError):
                vmdk_handle.open_file_object(file_object, mode="w")
    def test_open_close(self):
        """Tests the open and close functions."""
        test_source = unittest.source
        if not test_source:
            return

        vmdk_handle = pyvmdk.handle()

        # Test open and close.
        vmdk_handle.open(test_source)
        vmdk_handle.close()

        # Test open and close a second time to validate clean up on close.
        vmdk_handle.open(test_source)
        vmdk_handle.close()

        if os.path.isfile(test_source):
            with open(test_source, "rb") as file_object:

                # Test open_file_object and close.
                vmdk_handle.open_file_object(file_object)
                vmdk_handle.close()

                # Test open_file_object and close a second time to validate clean up on close.
                vmdk_handle.open_file_object(file_object)
                vmdk_handle.close()

                # Test open_file_object and close and dereferencing file_object.
                vmdk_handle.open_file_object(file_object)
                del file_object
                vmdk_handle.close()
    def test_seek_offset(self):
        """Tests the seek_offset function."""
        test_source = unittest.source
        if not test_source:
            raise unittest.SkipTest("missing source")

        vmdk_handle = pyvmdk.handle()

        vmdk_handle.open(test_source)
        vmdk_handle.open_extent_data_files()

        media_size = vmdk_handle.get_media_size()

        vmdk_handle.seek_offset(16, os.SEEK_SET)

        offset = vmdk_handle.get_offset()
        self.assertEqual(offset, 16)

        vmdk_handle.seek_offset(16, os.SEEK_CUR)

        offset = vmdk_handle.get_offset()
        self.assertEqual(offset, 32)

        vmdk_handle.seek_offset(-16, os.SEEK_CUR)

        offset = vmdk_handle.get_offset()
        self.assertEqual(offset, 16)

        if media_size > 16:
            vmdk_handle.seek_offset(-16, os.SEEK_END)

            offset = vmdk_handle.get_offset()
            self.assertEqual(offset, media_size - 16)

        vmdk_handle.seek_offset(16, os.SEEK_END)

        offset = vmdk_handle.get_offset()
        self.assertEqual(offset, media_size + 16)

        # TODO: change IOError into ValueError
        with self.assertRaises(IOError):
            vmdk_handle.seek_offset(-1, os.SEEK_SET)

        # TODO: change IOError into ValueError
        with self.assertRaises(IOError):
            vmdk_handle.seek_offset(-32 - media_size, os.SEEK_CUR)

        # TODO: change IOError into ValueError
        with self.assertRaises(IOError):
            vmdk_handle.seek_offset(-32 - media_size, os.SEEK_END)

        # TODO: change IOError into ValueError
        with self.assertRaises(IOError):
            vmdk_handle.seek_offset(0, -1)

        vmdk_handle.close()

        # Test the seek without open.
        with self.assertRaises(IOError):
            vmdk_handle.seek_offset(16, os.SEEK_SET)
Exemple #11
0
    def test_read_buffer_at_offset(self):
        """Tests the read_buffer_at_offset function."""
        if not unittest.source:
            return

        vmdk_handle = pyvmdk.handle()

        vmdk_handle.open(unittest.source)

        file_size = vmdk_handle.get_size()

        # Test normal read.
        data = vmdk_handle.read_buffer_at_offset(4096, 0)

        self.assertIsNotNone(data)
        self.assertEqual(len(data), min(file_size, 4096))

        # Test read beyond file size.
        if file_size > 16:
            data = vmdk_handle.read_buffer_at_offset(4096, file_size - 16)

            self.assertIsNotNone(data)
            self.assertEqual(len(data), 16)

        with self.assertRaises(ValueError):
            vmdk_handle.read_buffer_at_offset(-1, 0)

        with self.assertRaises(ValueError):
            vmdk_handle.read_buffer_at_offset(4096, -1)

        vmdk_handle.close()

        # Test the read without open.
        with self.assertRaises(IOError):
            vmdk_handle.read_buffer_at_offset(4096, 0)
def pyvmdk_test_multi_open_close_file(filename, mode):
    print("Testing multi open close of: {0:s} with access: {1:s}\t".format(
        filename, get_mode_string(mode)),
          end="")

    result = True
    try:
        vmdk_handle = pyvmdk.handle()

        vmdk_handle.open(filename, mode)
        vmdk_handle.close()
        vmdk_handle.open(filename, mode)
        vmdk_handle.close()

    except Exception as exception:
        error_string = str(exception)
        result = False

    if not result:
        print("(FAIL)")
    else:
        print("(PASS)")

    if error_string:
        print(error_string)
    return result
Exemple #13
0
def GetImgInfoObjectForVMDK(path):
    vmdk_handle = pyvmdk.handle()
    vmdk_handle.open(path)
    base_directory = os.path.dirname(path)
    #vmdk_handle.open_extent_data_files() Broken in current version #20170226
    OpenExtentDataFiles(vmdk_handle, base_directory)
    img_info = vmdk_Img_Info(vmdk_handle)
    return img_info
Exemple #14
0
def pyvmdk_test_read_file(filename):
  vmdk_handle = pyvmdk.handle()

  vmdk_handle.open(filename, "r")
  vmdk_handle.open_extent_data_files()
  result = pyvmdk_test_read(vmdk_handle)
  vmdk_handle.close()

  return result
Exemple #15
0
    def test_seek_offset(self):
        """Tests the seek_offset function."""
        if not unittest.source:
            return

        vmdk_handle = pyvmdk.handle()

        vmdk_handle.open(unittest.source)

        file_size = vmdk_handle.get_size()

        vmdk_handle.seek_offset(16, os.SEEK_SET)

        offset = vmdk_handle.get_offset()
        self.assertEqual(offset, 16)

        vmdk_handle.seek_offset(16, os.SEEK_CUR)

        offset = vmdk_handle.get_offset()
        self.assertEqual(offset, 32)

        vmdk_handle.seek_offset(-16, os.SEEK_CUR)

        offset = vmdk_handle.get_offset()
        self.assertEqual(offset, 16)

        vmdk_handle.seek_offset(-16, os.SEEK_END)

        offset = vmdk_handle.get_offset()
        self.assertEqual(offset, file_size - 16)

        vmdk_handle.seek_offset(16, os.SEEK_END)

        offset = vmdk_handle.get_offset()
        self.assertEqual(offset, file_size + 16)

        # TODO: change IOError into ValueError
        with self.assertRaises(IOError):
            vmdk_handle.seek_offset(-1, os.SEEK_SET)

        # TODO: change IOError into ValueError
        with self.assertRaises(IOError):
            vmdk_handle.seek_offset(-32 - file_size, os.SEEK_CUR)

        # TODO: change IOError into ValueError
        with self.assertRaises(IOError):
            vmdk_handle.seek_offset(-32 - file_size, os.SEEK_END)

        # TODO: change IOError into ValueError
        with self.assertRaises(IOError):
            vmdk_handle.seek_offset(0, -1)

        vmdk_handle.close()

        # Test the seek without open.
        with self.assertRaises(IOError):
            vmdk_handle.seek_offset(16, os.SEEK_SET)
Exemple #16
0
def pyvmdk_test_read_file(filename):
  vmdk_handle = pyvmdk.handle()

  vmdk_handle.open(filename, "r")
  vmdk_handle.open_extent_data_files()
  result = pyvmdk_test_read(vmdk_handle)
  vmdk_handle.close()

  return result
Exemple #17
0
  def test_close(self):
    """Tests the close function."""
    if not unittest.source:
      return

    vmdk_handle = pyvmdk.handle()

    with self.assertRaises(IOError):
      vmdk_handle.close()
Exemple #18
0
    def test_close(self):
        """Tests the close function."""
        if not unittest.source:
            return

        vmdk_handle = pyvmdk.handle()

        with self.assertRaises(IOError):
            vmdk_handle.close()
Exemple #19
0
  def test_seek_offset(self):
    """Tests the seek_offset function."""
    if not unittest.source:
      return

    vmdk_handle = pyvmdk.handle()

    vmdk_handle.open(unittest.source)

    file_size = vmdk_handle.get_size()

    vmdk_handle.seek_offset(16, os.SEEK_SET)

    offset = vmdk_handle.get_offset()
    self.assertEqual(offset, 16)

    vmdk_handle.seek_offset(16, os.SEEK_CUR)

    offset = vmdk_handle.get_offset()
    self.assertEqual(offset, 32)

    vmdk_handle.seek_offset(-16, os.SEEK_CUR)

    offset = vmdk_handle.get_offset()
    self.assertEqual(offset, 16)

    vmdk_handle.seek_offset(-16, os.SEEK_END)

    offset = vmdk_handle.get_offset()
    self.assertEqual(offset, file_size - 16)

    vmdk_handle.seek_offset(16, os.SEEK_END)

    offset = vmdk_handle.get_offset()
    self.assertEqual(offset, file_size + 16)

    # TODO: change IOError into ValueError
    with self.assertRaises(IOError):
      vmdk_handle.seek_offset(-1, os.SEEK_SET)

    # TODO: change IOError into ValueError
    with self.assertRaises(IOError):
      vmdk_handle.seek_offset(-32 - file_size, os.SEEK_CUR)

    # TODO: change IOError into ValueError
    with self.assertRaises(IOError):
      vmdk_handle.seek_offset(-32 - file_size, os.SEEK_END)

    # TODO: change IOError into ValueError
    with self.assertRaises(IOError):
      vmdk_handle.seek_offset(0, -1)

    vmdk_handle.close()

    # Test the seek without open.
    with self.assertRaises(IOError):
      vmdk_handle.seek_offset(16, os.SEEK_SET)
Exemple #20
0
  def test_close(self):
    """Tests the close function."""
    if not unittest.source:
      raise unittest.SkipTest("missing source")

    vmdk_handle = pyvmdk.handle()

    with self.assertRaises(IOError):
      vmdk_handle.close()
def pyvmdk_test_single_open_close_file(filename, mode):
  if not filename:
    filename_string = "None"
  else:
    filename_string = filename

  print(
      "Testing single open close of: {0:s} with access: {1:s}\t".format(
          filename_string, get_mode_string(mode)), end="")

  result = True
  try:
    vmdk_handle = pyvmdk.handle()

    vmdk_handle.open(filename, mode)
    vmdk_handle.close()

  except TypeError as exception:
    expected_message = (
        "{0:s}: unsupported string object type.").format(
            "pyvmdk_handle_open")

    if not filename and str(exception) == expected_message:
      pass

    else:
      error_string = str(exception)
      result = False

  except ValueError as exception:
    expected_message = (
        "{0:s}: unsupported mode: w.").format(
            "pyvmdk_handle_open")

    if mode != "w" or str(exception) != expected_message:
      error_string = str(exception)
      result = False

  except Exception as exception:
    error_string = str(exception)
    result = False

  if not result:
    print("(FAIL)")
  else:
    print("(PASS)")

  if error_string:
    print(error_string)
  return result
Exemple #22
0
  def test_get_offset(self):
    """Tests the get_offset function."""
    if not unittest.source:
      raise unittest.SkipTest("missing source")

    vmdk_handle = pyvmdk.handle()

    vmdk_handle.open(unittest.source)
    vmdk_handle.open_extent_data_files()

    offset = vmdk_handle.get_offset()
    self.assertIsNotNone(offset)

    vmdk_handle.close()
Exemple #23
0
  def test_get_parent_filename(self):
    """Tests the get_parent_filename function and parent_filename property."""
    if not unittest.source:
      raise unittest.SkipTest("missing source")

    vmdk_handle = pyvmdk.handle()

    vmdk_handle.open(unittest.source)

    _ = vmdk_handle.get_parent_filename()

    _ = vmdk_handle.parent_filename

    vmdk_handle.close()
Exemple #24
0
  def test_get_parent_content_identifier(self):
    """Tests the get_parent_content_identifier function and parent_content_identifier property."""
    if not unittest.source:
      raise unittest.SkipTest("missing source")

    vmdk_handle = pyvmdk.handle()

    vmdk_handle.open(unittest.source)

    parent_content_identifier = vmdk_handle.get_parent_content_identifier()
    self.assertIsNotNone(parent_content_identifier)

    self.assertIsNotNone(vmdk_handle.parent_content_identifier)

    vmdk_handle.close()
Exemple #25
0
  def test_get_number_of_extents(self):
    """Tests the get_number_of_extents function and number_of_extents property."""
    if not unittest.source:
      raise unittest.SkipTest("missing source")

    vmdk_handle = pyvmdk.handle()

    vmdk_handle.open(unittest.source)

    number_of_extents = vmdk_handle.get_number_of_extents()
    self.assertIsNotNone(number_of_extents)

    self.assertIsNotNone(vmdk_handle.number_of_extents)

    vmdk_handle.close()
Exemple #26
0
  def test_get_disk_type(self):
    """Tests the get_disk_type function and disk_type property."""
    if not unittest.source:
      raise unittest.SkipTest("missing source")

    vmdk_handle = pyvmdk.handle()

    vmdk_handle.open(unittest.source)

    disk_type = vmdk_handle.get_disk_type()
    self.assertIsNotNone(disk_type)

    self.assertIsNotNone(vmdk_handle.disk_type)

    vmdk_handle.close()
Exemple #27
0
  def test_get_media_size(self):
    """Tests the get_media_size function and media_size property."""
    if not unittest.source:
      raise unittest.SkipTest("missing source")

    vmdk_handle = pyvmdk.handle()

    vmdk_handle.open(unittest.source)

    media_size = vmdk_handle.get_media_size()
    self.assertIsNotNone(media_size)

    self.assertIsNotNone(vmdk_handle.media_size)

    vmdk_handle.close()
def pyvmdk_test_single_open_close_file(filename, mode):
    if not filename:
        filename_string = "None"
    else:
        filename_string = filename

    print("Testing single open close of: {0:s} with access: {1:s}\t".format(
        filename_string, get_mode_string(mode)),
          end="")

    result = True
    try:
        vmdk_handle = pyvmdk.handle()

        vmdk_handle.open(filename, mode)
        vmdk_handle.close()

    except TypeError as exception:
        expected_message = ("{0:s}: unsupported string object type."
                            ).format("pyvmdk_handle_open")

        if not filename and str(exception) == expected_message:
            pass

        else:
            error_string = str(exception)
            result = False

    except ValueError as exception:
        expected_message = (
            "{0:s}: unsupported mode: w.").format("pyvmdk_handle_open")

        if mode != "w" or str(exception) != expected_message:
            error_string = str(exception)
            result = False

    except Exception as exception:
        error_string = str(exception)
        result = False

    if not result:
        print("(FAIL)")
    else:
        print("(PASS)")

    if error_string:
        print(error_string)
    return result
Exemple #29
0
def pyvmdk_test_seek_file_no_open(filename):
  print("Testing seek of offset without open:\n")

  vmdk_handle = pyvmdk.handle()

  result = False
  try:
    vmdk_handle.seek(0, os.SEEK_SET)
  except Exception as exception:
    print(str(exception))
    result = True

  if not result:
    print("(FAIL)")
  else:
    print("(PASS)")
  return result
Exemple #30
0
def pyvmdk_test_seek_file_no_open(filename):
    print("Testing seek of offset without open:\n")

    vmdk_handle = pyvmdk.handle()

    result = False
    try:
        vmdk_handle.seek(0, os.SEEK_SET)
    except Exception as exception:
        print(str(exception))
        result = True

    if not result:
        print("(FAIL)")
    else:
        print("(PASS)")
    return result
def pyvmdk_test_single_open_close_file_object(filename, mode):
  print ("Testing single open close of file-like object of: {0:s} with access: "
         "{1:s}\t").format(filename, get_mode_string(mode))

  try:
    file_object = open(filename, mode)
    vmdk_handle = pyvmdk.handle()

    vmdk_handle.open_file_object(file_object, mode)
    vmdk_handle.close()

  except:
    print "(FAIL)"
    return False

  print "(PASS)"
  return True
def pyvmdk_test_multi_open_close_file(filename, mode):
  print "Testing multi open close of: {0:s} with access: {1:s}\t".format(
      filename, get_mode_string(mode))

  try:
    vmdk_handle = pyvmdk.handle()

    vmdk_handle.open(filename, mode)
    vmdk_handle.close()
    vmdk_handle.open(filename, mode)
    vmdk_handle.close()

  except:
    print "(FAIL)"
    return False

  print "(PASS)"
  return True
Exemple #33
0
    def test_open(self):
        """Tests the open function."""
        if not unittest.source:
            return

        vmdk_handle = pyvmdk.handle()

        vmdk_handle.open(unittest.source)

        with self.assertRaises(IOError):
            vmdk_handle.open(unittest.source)

        vmdk_handle.close()

        with self.assertRaises(TypeError):
            vmdk_handle.open(None)

        with self.assertRaises(ValueError):
            vmdk_handle.open(unittest.source, mode="w")
Exemple #34
0
  def test_open(self):
    """Tests the open function."""
    if not unittest.source:
      return

    vmdk_handle = pyvmdk.handle()

    vmdk_handle.open(unittest.source)

    with self.assertRaises(IOError):
      vmdk_handle.open(unittest.source)

    vmdk_handle.close()

    with self.assertRaises(TypeError):
      vmdk_handle.open(None)

    with self.assertRaises(ValueError):
      vmdk_handle.open(unittest.source, mode="w")
Exemple #35
0
def pyvmdk_test_seek_file_object(filename):
    file_object = open(filename, "rb")
    vmdk_handle = pyvmdk.handle()

    vmdk_handle.open_file_object(file_object, "r")

    base_directory = os.path.dirname(filename)

    extent_data_files = []
    for extent_descriptor in vmdk_handle.extent_descriptors:
        extent_data_filename = extent_descriptor.filename

        _, path_separator, filename = extent_data_filename.rpartition(u"/")
        if not path_separator:
            _, path_separator, filename = extent_data_filename.rpartition(
                u"\\")

        if not path_separator:
            filename = extent_data_filename

        extent_data_file_path = os.path.join(base_directory, filename)

        if not os.path.exists(extent_data_file_path):
            break

        extent_data_files.append(extent_data_file_path)

    if len(extent_data_files) != vmdk_handle.number_of_extents:
        print("Unable to locate all extent data files.\n")
        return False

    file_objects = []
    for extent_data_file_path in extent_data_files:
        file_object = open(extent_data_file_path, "rb")
        file_objects.append(file_object)

    vmdk_handle.open_extent_data_files_file_objects(file_objects)

    result = pyvmdk_test_seek(vmdk_handle)
    vmdk_handle.close()

    return result
Exemple #36
0
    def test_read_buffer_file_object(self):
        """Tests the read_buffer function on a file-like object."""
        if not unittest.source:
            return

        file_object = open(unittest.source, "rb")

        vmdk_handle = pyvmdk.handle()

        vmdk_handle.open_file_object(file_object)

        file_size = vmdk_handle.get_size()

        # Test normal read.
        data = vmdk_handle.read_buffer(size=4096)

        self.assertIsNotNone(data)
        self.assertEqual(len(data), min(file_size, 4096))

        vmdk_handle.close()
Exemple #37
0
  def test_read_buffer_file_object(self):
    """Tests the read_buffer function on a file-like object."""
    if not unittest.source:
      return

    file_object = open(unittest.source, "rb")

    vmdk_handle = pyvmdk.handle()

    vmdk_handle.open_file_object(file_object)

    file_size = vmdk_handle.get_size()

    # Test normal read.
    data = vmdk_handle.read_buffer(size=4096)

    self.assertIsNotNone(data)
    self.assertEqual(len(data), min(file_size, 4096))

    vmdk_handle.close()
    def test_open(self):
        """Tests the open function."""
        test_source = unittest.source
        if not test_source:
            raise unittest.SkipTest("missing source")

        vmdk_handle = pyvmdk.handle()

        vmdk_handle.open(test_source)

        with self.assertRaises(IOError):
            vmdk_handle.open(test_source)

        vmdk_handle.close()

        with self.assertRaises(TypeError):
            vmdk_handle.open(None)

        with self.assertRaises(ValueError):
            vmdk_handle.open(test_source, mode="w")
Exemple #39
0
def pyvmdk_test_seek_file_object(filename):
  file_object = open(filename, "rb")
  vmdk_handle = pyvmdk.handle()

  vmdk_handle.open_file_object(file_object, "r")

  base_directory = os.path.dirname(filename)

  extent_data_files = []
  for extent_descriptor in vmdk_handle.extent_descriptors:
    extent_data_filename = extent_descriptor.filename

    _, path_separator, filename = extent_data_filename.rpartition(u"/")
    if not path_separator:
      _, path_separator, filename = extent_data_filename.rpartition(u"\\")

    if not path_separator:
      filename = extent_data_filename

    extent_data_file_path = os.path.join(base_directory, filename)

    if not os.path.exists(extent_data_file_path):
      break

    extent_data_files.append(extent_data_file_path)

  if len(extent_data_files) != vmdk_handle.number_of_extents:
    print("Unable to locate all extent data files.\n")
    return False

  file_objects = []
  for extent_data_file_path in extent_data_files:
    file_object = open(extent_data_file_path, "rb")
    file_objects.append(file_object)

  vmdk_handle.open_extent_data_files_file_objects(file_objects)

  result = pyvmdk_test_seek(vmdk_handle)
  vmdk_handle.close()

  return result
Exemple #40
0
def pyvmdk_test_single_open_close_file_object(filename, mode):
    print(("Testing single open close of file-like object of: {0:s} "
           "with access: {1:s}\t").format(filename, get_mode_string(mode)))

    result = True
    try:
        file_object = open(filename, "rb")
        vmdk_handle = pyvmdk.handle()

        vmdk_handle.open_file_object(file_object, mode)
        vmdk_handle.close()

    except Exception as exception:
        print(str(exception))
        result = False

    if not result:
        print("(FAIL)")
    else:
        print("(PASS)")
    return result
def pyvmdk_test_single_open_close_file_object(filename, mode):
  print(("Testing single open close of file-like object of: {0:s} "
         "with access: {1:s}\t").format(filename, get_mode_string(mode)))

  result = True
  try:
    file_object = open(filename, "rb")
    vmdk_handle = pyvmdk.handle()

    vmdk_handle.open_file_object(file_object, mode)
    vmdk_handle.close()

  except Exception as exception:
    print(str(exception))
    result = False

  if not result:
    print("(FAIL)")
  else:
    print("(PASS)")
  return result
Exemple #42
0
def pyvmdk_test_read_file_no_open(filename):
  print("Testing read of offset without open:\t", end="")

  vmdk_handle = pyvmdk.handle()

  error_string = ""
  result = False
  try:
    vmdk_handle.read(size=4096)
  except Exception as exception:
    error_string = str(exception)
    result = True

  if not result:
    print("(FAIL)")
  else:
    print("(PASS)")

  if error_string:
    print(error_string)
  return result
Exemple #43
0
def pyvmdk_test_seek_file_no_open(filename):
  print("Testing seek of offset without open:\t", end="")

  vmdk_handle = pyvmdk.handle()

  error_string = ""
  result = False
  try:
    vmdk_handle.seek(0, os.SEEK_SET)
  except Exception as exception:
    error_string = str(exception)
    result = True

  if not result:
    print("(FAIL)")
  else:
    print("(PASS)")

  if error_string:
    print(error_string)
  return result
Exemple #44
0
def pyvmdk_test_seek_file_no_open(filename):
    print("Testing seek of offset without open:\t", end="")

    vmdk_handle = pyvmdk.handle()

    error_string = ""
    result = False
    try:
        vmdk_handle.seek(0, os.SEEK_SET)
    except Exception as exception:
        error_string = str(exception)
        result = True

    if not result:
        print("(FAIL)")
    else:
        print("(PASS)")

    if error_string:
        print(error_string)
    return result
Exemple #45
0
def pyvmdk_test_read_file_no_open(filename):
  print("Testing read of offset without open:\t", end="")

  vmdk_handle = pyvmdk.handle()

  error_string = ""
  result = False
  try:
    vmdk_handle.read(size=4096)
  except Exception as exception:
    error_string = str(exception)
    result = True

  if not result:
    print("(FAIL)")
  else:
    print("(PASS)")

  if error_string:
    print(error_string)
  return result
Exemple #46
0
def extractFile2(imageFile, filenames):

    vmdk_handle = pyvmdk.handle()
    vmdk_handle.open(imageFile)
    vmdk_handle.open_extent_data_files()
    img_info = vmdk_Img_Info(vmdk_handle)
    partitionTable = pytsk3.Volume_Info(img_info)
    for partition in partitionTable:
        print partition.addr, partition.desc, "%ss(%s)" % (
            partition.start, partition.start * 512), partition.len
        # try:
        if 'NTFS' in partition.desc:
            filesystemObject = pytsk3.FS_Info(img_info,
                                              offset=(partition.start * 512))
            # except:
            #         print "Partition has no supported file system"
            #         continue
            print "File System Type Dectected ", filesystemObject.info.ftype
            directoryObject = filesystemObject.open_dir(path=dirPath)
            print "Directory:", dirPath
        outputPath = 'ex_differ_file'

    for filename in filenames:
        if not os.path.exists(outputPath):
            os.makedirs(outputPath)
        if not os.path.isdir(str(filename)):
            try:
                ex_path = (
                    '%s/%s' %
                    (outputPath, os.path.basename(str(filename)))).replace(
                        '//', '/')

                extractFile = open(ex_path, 'w')

                fileobject = filesystemObject.open(str(filename))
                filedata = fileobject.read_random(0, fileobject.info.meta.size)
                extractFile.write(filedata)
                extractFile.close
            except IOError:
                print('cannot open', str(filename))
Exemple #47
0
    def test_open_file_object(self):
        """Tests the open_file_object function."""
        if not unittest.source:
            return

        file_object = open(unittest.source, "rb")

        vmdk_handle = pyvmdk.handle()

        vmdk_handle.open_file_object(file_object)

        with self.assertRaises(IOError):
            vmdk_handle.open_file_object(file_object)

        vmdk_handle.close()

        # TODO: change IOError into TypeError
        with self.assertRaises(IOError):
            vmdk_handle.open_file_object(None)

        with self.assertRaises(ValueError):
            vmdk_handle.open_file_object(file_object, mode="w")
Exemple #48
0
  def test_open_file_object(self):
    """Tests the open_file_object function."""
    if not unittest.source:
      return

    file_object = open(unittest.source, "rb")

    vmdk_handle = pyvmdk.handle()

    vmdk_handle.open_file_object(file_object)

    with self.assertRaises(IOError):
      vmdk_handle.open_file_object(file_object)

    vmdk_handle.close()

    # TODO: change IOError into TypeError
    with self.assertRaises(IOError):
      vmdk_handle.open_file_object(None)

    with self.assertRaises(ValueError):
      vmdk_handle.open_file_object(file_object, mode="w")
def pyvmdk_test_single_open_close_file(filename, mode):
  if not filename:
    filename_string = "None"
  else:
    filename_string = filename

  print "Testing single open close of: {0:s} with access: {1:s}\t".format(
      filename_string, get_mode_string(mode))

  try:
    vmdk_handle = pyvmdk.handle()

    vmdk_handle.open(filename, mode)
    vmdk_handle.close()

  except TypeError, exception:
    if (not filename and
        exception.message == "pyvmdk_handle_open: unsupported string object type."):
      pass

    else:
      print "(FAIL)"
      return False
Exemple #50
0
  def _OpenFileObject(self, path_spec):
    """Opens the file-like object defined by path specification.

    Args:
      path_spec: the path specification (instance of path.PathSpec).

    Returns:
      A file-like object.

    Raises:
      IOError: if the file-like object could not be opened.
      PathSpecError: if the path specification is incorrect.
    """
    if not path_spec.HasParent():
      raise errors.PathSpecError(
          u'Unsupported path specification without parent.')

    parent_path_spec = path_spec.parent

    parent_location = getattr(parent_path_spec, u'location', None)
    if not parent_location:
      raise errors.PathSpecError(
          u'Unsupported parent path specification without location.')

    # Note that we cannot use pyvmdk's open_extent_data_files function
    # since it does not handle the file system abstraction dfvfs provides.

    file_system = resolver.Resolver.OpenFileSystem(
        parent_path_spec, resolver_context=self._resolver_context)

    file_object = resolver.Resolver.OpenFileObject(
        parent_path_spec, resolver_context=self._resolver_context)
    vmdk_handle = pyvmdk.handle()
    vmdk_handle.open_file_object(file_object)

    parent_location_path_segments = file_system.SplitPath(parent_location)

    extent_data_files = []
    for extent_descriptor in vmdk_handle.extent_descriptors:
      extent_data_filename = extent_descriptor.filename

      _, path_separator, filename = extent_data_filename.rpartition(u'/')
      if not path_separator:
        _, path_separator, filename = extent_data_filename.rpartition(u'\\')

      if not path_separator:
        filename = extent_data_filename

      # The last parent location path segment contains the extent data filename.
      # Since we want to check if the next extent data file exists we remove
      # the previous one form the path segments list and add the new filename.
      # After that the path segments list can be used to create the location
      # string.
      parent_location_path_segments.pop()
      parent_location_path_segments.append(filename)
      extent_data_file_location = file_system.JoinPath(
          parent_location_path_segments)

      # Note that we don't want to set the keyword arguments when not used
      # because the path specification base class will check for unused
      # keyword arguments and raise.
      kwargs = path_spec_factory.Factory.GetProperties(parent_path_spec)

      kwargs[u'location'] = extent_data_file_location
      if parent_path_spec.parent is not None:
        kwargs[u'parent'] = parent_path_spec.parent

      extent_data_file_path_spec = path_spec_factory.Factory.NewPathSpec(
          parent_path_spec.type_indicator, **kwargs)

      if not file_system.FileEntryExistsByPathSpec(extent_data_file_path_spec):
        break

      extent_data_files.append(extent_data_file_path_spec)

    if len(extent_data_files) != vmdk_handle.number_of_extents:
      raise IOError(u'Unable to locate all extent data files.')

    file_objects = []
    for extent_data_file_path_spec in extent_data_files:
      file_object = resolver.Resolver.OpenFileObject(
          extent_data_file_path_spec, resolver_context=self._resolver_context)
      file_objects.append(file_object)

    # TODO: add parent image support.
    vmdk_handle.open_extent_data_files_file_objects(file_objects)

    return vmdk_handle
Exemple #51
0
  def test_signal_abort(self):
    """Tests the signal_abort function."""
    vmdk_handle = pyvmdk.handle()

    vmdk_handle.signal_abort()