Example #1
0
    def testRecurseKey(self):
        """Tests the RecurseKey function."""
        # Ensure with a depth of 1 we only return the root key.
        result = list(interface.RecurseKey(self._top_level_dict, depth=1))
        self.assertEqual(len(result), 1)

        # Trying again with depth limit of 2 this time.
        result = list(interface.RecurseKey(self._top_level_dict, depth=2))
        self.assertEqual(len(result), 3)

        # A depth of two should gives us root plus the two devices. Let's check.
        my_keys = []
        for unused_root, key, unused_value in result:
            my_keys.append(key)
        expected = {'DeviceCache', '44-00-00-00-00-04', '44-00-00-00-00-02'}
        self.assertTrue(expected == set(my_keys))
Example #2
0
    def _GetKeysDefaultEmpty(self, top_level, keys, depth=1):
        """Retrieves plist keys, defaulting to empty values.

    Args:
      top_level (plistlib._InternalDict): top level plist object.
      keys (set[str]): names of keys that should be returned.
      depth (int): depth within the plist, where 1 is top level.

    Returns:
      dict[str, str]: values of the requested keys.
    """
        keys = set(keys)
        match = {}

        if depth == 1:
            for key in keys:
                value = top_level.get(key, None)
                if value is not None:
                    match[key] = value
        else:
            for _, parsed_key, parsed_value in plist_interface.RecurseKey(
                    top_level, depth=depth):
                if parsed_key in keys:
                    match[parsed_key] = parsed_value
                    if set(match.keys()) == keys:
                        return match
        return match
Example #3
0
    def _GetKeysDefaultEmpty(self, top_level, keys, depth=1):
        """Return keys nested in a plist dict, defaulting to an empty value.

    The method GetKeys fails if the supplied key does not exist within the
    plist object. This alternate method behaves the same way as GetKeys
    except that instead of raising an error if the key doesn't exist it will
    assign an empty string value ('') to the field.

    Args:
      top_level (plistlib._InternalDict): top level plist object.
      keys (set[str]): names of keys that should be returned.
      depth (int): depth within the plist, where 1 is top level.

    Returns:
      dict[str,str]: values of the requested keys.
    """
        keys = set(keys)
        match = {}

        if depth == 1:
            for key in keys:
                value = top_level.get(key, None)
                if value is not None:
                    match[key] = value
        else:
            for _, parsed_key, parsed_value in plist_interface.RecurseKey(
                    top_level, depth=depth):
                if parsed_key in keys:
                    match[parsed_key] = parsed_value
                    if set(match.keys()) == keys:
                        return match
        return match
Example #4
0
    def _GetKeysDefaultEmpty(self, top_level, keys, depth=1):
        """Return keys nested in a plist dict, defaulting to an empty value.

    The method GetKeys fails if the supplied key does not exist within the
    plist object. This alternate method behaves the same way as GetKeys
    except that instead of raising an error if the key doesn't exist it will
    assign an empty string value ('') to the field.

    Args:
      top_level: Plist in dictionary form.
      keys: A list of keys that should be returned.
      depth: Defines how many levels deep to check for a match.

    Returns:
      A dictionary with just the keys requested.
    """
        keys = set(keys)
        match = {}

        if depth == 1:
            for key in keys:
                value = top_level.get(key, None)
                if value is not None:
                    match[key] = value
        else:
            for _, parsed_key, parsed_value in plist_interface.RecurseKey(
                    top_level, depth=depth):
                if parsed_key in keys:
                    match[parsed_key] = parsed_value
                    if set(match.keys()) == keys:
                        return match
        return match
Example #5
0
    def GetEntries(self, parser_mediator, top_level=None, **unused_kwargs):
        """Simple method to exact date values from a Plist.

    Args:
      parser_mediator: A parser mediator object (instance of ParserMediator).
      top_level: Plist in dictionary form.
    """
        for root, key, value in interface.RecurseKey(top_level):
            if isinstance(value, datetime.datetime):
                event_object = plist_event.PlistEvent(root, key, value)
                parser_mediator.ProduceEvent(event_object)
Example #6
0
    def GetEntries(self, top_level, **unused_kwargs):
        """Simple method to exact date values from a Plist.

    Args:
      top_level: Plist in dictionary form.

    Yields:
      An EventObject from Plists values that are date objects.
    """
        for root, key, value in interface.RecurseKey(top_level):
            if isinstance(value, datetime.datetime):
                yield plist_event.PlistEvent(root, key, value)
Example #7
0
    def GetEntries(self, parser_mediator, top_level=None, **unused_kwargs):
        """Simple method to exact date values from a Plist.

    Args:
      parser_mediator (ParserMediator): mediates interactions between parsers
          and other components, such as storage and dfvfs.
      top_level: Plist in dictionary form.
    """
        for root, key, value in interface.RecurseKey(top_level):
            if isinstance(value, datetime.datetime):
                event_object = plist_event.PlistEvent(root, key, value)
                parser_mediator.ProduceEvent(event_object)
Example #8
0
    def GetEntries(self, parser_context, top_level=None, **unused_kwargs):
        """Simple method to exact date values from a Plist.

    Args:
      parser_context: A parser context object (instance of ParserContext).
      top_level: Plist in dictionary form.
    """
        for root, key, value in interface.RecurseKey(top_level):
            if isinstance(value, datetime.datetime):
                event_object = plist_event.PlistEvent(root, key, value)
                parser_context.ProduceEvent(event_object,
                                            plugin_name=self.NAME)
Example #9
0
    def GetEntries(self, parser_mediator, top_level=None, **unused_kwargs):
        """Simple method to exact date values from a Plist.

    Args:
      parser_mediator (ParserMediator): mediates interactions between parsers
          and other components, such as storage and dfvfs.
      top_level (dict[str, object]): plist top-level key.
    """
        for root, key, datetime_value in interface.RecurseKey(top_level):
            if not isinstance(datetime_value, datetime.datetime):
                continue

            event_data = plist_event.PlistTimeEventData()
            event_data.key = key
            event_data.root = root

            event = time_events.PythonDatetimeEvent(
                datetime_value, definitions.TIME_DESCRIPTION_WRITTEN)
            parser_mediator.ProduceEventWithEventData(event, event_data)