Beispiel #1
0
    def testRegexForStringifiedValueMatchMatchesLabelsInList(self):
        labels_list = rdf_aff4.AFF4ObjectLabelsList()

        labels_list.AddLabel(rdf_aff4.AFF4ObjectLabel(name="ein", owner="GRR"))
        labels_list.AddLabel(
            rdf_aff4.AFF4ObjectLabel(name="zwei", owner="test"))
        labels_list.AddLabel(rdf_aff4.AFF4ObjectLabel(name="drei",
                                                      owner="GRR"))
        labels_list.AddLabel(
            rdf_aff4.AFF4ObjectLabel(name="vier", owner="test"))

        self.assertTrue(
            re.match(
                rdf_aff4.AFF4ObjectLabelsList.RegexForStringifiedValueMatch(
                    "ein"), str(labels_list)))
        self.assertTrue(
            re.match(
                rdf_aff4.AFF4ObjectLabelsList.RegexForStringifiedValueMatch(
                    "zwei"), str(labels_list)))
        self.assertTrue(
            re.match(
                rdf_aff4.AFF4ObjectLabelsList.RegexForStringifiedValueMatch(
                    "drei"), str(labels_list)))
        self.assertTrue(
            re.match(
                rdf_aff4.AFF4ObjectLabelsList.RegexForStringifiedValueMatch(
                    "vier"), str(labels_list)))
Beispiel #2
0
    def testStringifiedRepresentationIsSorted(self):
        labels_list = rdf_aff4.AFF4ObjectLabelsList()

        labels_list.AddLabel(rdf_aff4.AFF4ObjectLabel(name="foo", owner="GRR"))
        labels_list.AddLabel(rdf_aff4.AFF4ObjectLabel(name="bar",
                                                      owner="test"))

        self.assertEqual(utils.SmartStr(labels_list), "bar,foo")
Beispiel #3
0
    def testStringifiedValueIsLabelsNamesWithoutOwners(self):
        labels_list = rdf_aff4.AFF4ObjectLabelsList()

        labels_list.AddLabel(rdf_aff4.AFF4ObjectLabel(name="bar", owner="GRR"))
        labels_list.AddLabel(rdf_aff4.AFF4ObjectLabel(name="foo",
                                                      owner="test"))

        self.assertEqual(utils.SmartStr(labels_list), "bar,foo")
Beispiel #4
0
    def testAddLabelAddsLabelWithSameNameButDifferentOwner(self):
        labels_list = rdf_aff4.AFF4ObjectLabelsList()

        labels_list.AddLabel(rdf_aff4.AFF4ObjectLabel(name="foo",
                                                      owner="test"))
        self.assertEqual(len(labels_list.labels), 1)

        labels_list.AddLabel(rdf_aff4.AFF4ObjectLabel(name="foo", owner="GRR"))
        self.assertEqual(len(labels_list.labels), 2)
Beispiel #5
0
    def testStringifiedValueDoesNotHaveDuplicates(self):
        labels_list = rdf_aff4.AFF4ObjectLabelsList()

        labels_list.AddLabel(rdf_aff4.AFF4ObjectLabel(name="foo", owner="GRR"))
        labels_list.AddLabel(rdf_aff4.AFF4ObjectLabel(name="bar", owner="GRR"))
        labels_list.AddLabel(rdf_aff4.AFF4ObjectLabel(name="foo",
                                                      owner="test"))

        self.assertEqual(utils.SmartStr(labels_list), "bar,foo")
Beispiel #6
0
    def testAddLabelDoesNotAddLabelWithSameNameAndOwner(self):
        labels_list = rdf_aff4.AFF4ObjectLabelsList()

        labels_list.AddLabel(rdf_aff4.AFF4ObjectLabel(name="foo",
                                                      owner="test"))
        self.assertEqual(len(labels_list.labels), 1)

        labels_list.AddLabel(rdf_aff4.AFF4ObjectLabel(name="foo",
                                                      owner="test"))
        self.assertEqual(len(labels_list.labels), 1)
Beispiel #7
0
    def GenerateSample(self, number=0):
        label1 = rdf_aff4.AFF4ObjectLabel(
            name="foo_%d" % number,
            owner="test",
            timestamp=rdfvalue.RDFDatetime.FromSecondsSinceEpoch(42))

        label2 = rdf_aff4.AFF4ObjectLabel(
            name="bar_%d" % number,
            owner="test",
            timestamp=rdfvalue.RDFDatetime.FromSecondsSinceEpoch(42))

        return rdf_aff4.AFF4ObjectLabelsList(labels=[label1, label2])
Beispiel #8
0
    def testGetSortedLabelSet(self):
        labels_list = rdf_aff4.AFF4ObjectLabelsList()

        labels_list.AddLabel(rdf_aff4.AFF4ObjectLabel(name="foo",
                                                      owner="test"))
        labels_list.AddLabel(
            rdf_aff4.AFF4ObjectLabel(name="foo2", owner="test2"))
        labels_list.AddLabel(
            rdf_aff4.AFF4ObjectLabel(name="foo3", owner="test2"))

        self.assertItemsEqual(labels_list.GetLabelNames(),
                              ["foo", "foo2", "foo3"])
        self.assertItemsEqual(labels_list.GetLabelNames(owner="test2"),
                              ["foo2", "foo3"])
        self.assertEqual(labels_list.GetLabelNames(owner="test4"), [])
Beispiel #9
0
  def ClientInfo(self, responses):
    """Obtain some information about the GRR client running."""
    if not responses.success:
      self.Log("Could not get ClientInfo.")
      return
    response = responses.First()

    if fleetspeak_utils.IsFleetspeakEnabledClient(
        self.client_id, token=self.token):
      label = fleetspeak_utils.GetLabelFromFleetspeak(self.client_id)
      # A FS enabled GRR shouldn't provide a label, but if it does prefer
      # it to an unrecognized FS label.
      #
      # TODO(user): Remove condition once we are confident in FS labeling.
      if label != fleetspeak_connector.unknown_label or not response.labels:
        response.labels = [label]

    sanitized_labels = []
    for label in response.labels:
      try:
        rdf_aff4.AFF4ObjectLabel(name=label)
        sanitized_labels.append(label)
      except type_info.TypeValueError:
        self.Log("Got invalid label: %s", label)

    response.labels = sanitized_labels

    if data_store.AFF4Enabled():
      # AFF4 client.
      with self._OpenClient(mode="rw") as client:
        client.Set(client.Schema.CLIENT_INFO(response))
        client.AddLabels(response.labels, owner="GRR")

    # rdf_objects.ClientSnapshot.
    self.state.client.startup_info.client_info = response
Beispiel #10
0
    def ClientInfo(self, responses):
        """Obtain some information about the GRR client running."""
        if not responses.success:
            self.Log("Could not get ClientInfo.")
            return

        response = responses.First()

        if fleetspeak_utils.IsFleetspeakEnabledClient(self.client_id):
            label = fleetspeak_utils.GetLabelFromFleetspeak(self.client_id)
            # A FS enabled GRR shouldn't provide a label, but if it does prefer
            # it to an unrecognized FS label.
            #
            # TODO(user): Remove condition once we are confident in FS labeling.
            if label != fleetspeak_connector.unknown_label or not response.labels:
                response.labels = [label]

        sanitized_labels = []
        for label in response.labels:
            try:
                rdf_aff4.AFF4ObjectLabel(name=label)
                sanitized_labels.append(label)
            except type_info.TypeValueError:
                self.Log("Got invalid label: %s", label)

        response.labels = sanitized_labels

        self.state.client.startup_info.client_info = response
Beispiel #11
0
  def ClientInfo(self, responses):
    """Obtain some information about the GRR client running."""
    if not responses.success:
      self.Log("Could not get ClientInfo.")
      return

    response = responses.First()

    if fleetspeak_utils.IsFleetspeakEnabledClient(self.client_id):
      # Fetch labels for the client from Fleetspeak. If Fleetspeak doesn't
      # have any labels for the GRR client, fall back to labels reported by
      # the client.
      fleetspeak_labels = fleetspeak_utils.GetLabelsFromFleetspeak(
          self.client_id)
      if fleetspeak_labels:
        response.labels = fleetspeak_labels
      else:
        FLEETSPEAK_UNLABELED_CLIENTS.Increment()
        logging.warning("Failed to get labels for Fleetspeak client %s.",
                        self.client_id)

    sanitized_labels = []
    for label in response.labels:
      try:
        rdf_aff4.AFF4ObjectLabel(name=label)
        sanitized_labels.append(label)
      except type_info.TypeValueError:
        self.Log("Got invalid label: %s", label)

    response.labels = sanitized_labels

    self.state.client.startup_info.client_info = response
Beispiel #12
0
    def testRegexForStringifiedValueDoesNotMatchLabelsNotInList(self):
        labels_list = rdf_aff4.AFF4ObjectLabelsList()

        labels_list.AddLabel(rdf_aff4.AFF4ObjectLabel(name="ein", owner="GRR"))
        labels_list.AddLabel(
            rdf_aff4.AFF4ObjectLabel(name="zwei", owner="test"))
        self.assertNotRegexpMatches(
            str(labels_list),
            rdf_aff4.AFF4ObjectLabelsList.RegexForStringifiedValueMatch("e"))
        self.assertNotRegexpMatches(
            str(labels_list),
            rdf_aff4.AFF4ObjectLabelsList.RegexForStringifiedValueMatch("in"))
        self.assertNotRegexpMatches(
            str(labels_list),
            rdf_aff4.AFF4ObjectLabelsList.RegexForStringifiedValueMatch(
                "a.zwer"))
        self.assertNotRegexpMatches(
            str(labels_list),
            rdf_aff4.AFF4ObjectLabelsList.RegexForStringifiedValueMatch(
                "ein."))
Beispiel #13
0
 def GenerateSample(self, number=0):
     return rdf_aff4.AFF4ObjectLabel(
         name="label%d" % number,
         owner="test",
         timestamp=rdfvalue.RDFDatetime.FromSecondsSinceEpoch(42))
Beispiel #14
0
 def testAlphanumericCharactersAreAllowed(self):
     rdf_aff4.AFF4ObjectLabel(name="label42", owner="test")
Beispiel #15
0
 def testColonIsAllowed(self):
     rdf_aff4.AFF4ObjectLabel(name="label.42:1", owner="test")
Beispiel #16
0
 def testDotIsAllowed(self):
     rdf_aff4.AFF4ObjectLabel(name="label.42", owner="test")
Beispiel #17
0
 def testForwardSlashIsAllowed(self):
     rdf_aff4.AFF4ObjectLabel(name="b/label.42:1", owner="test")