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: self._ValidateLabel(label) sanitized_labels.append(label) except ValueError: self.Log("Got invalid label: %s", label) response.labels = sanitized_labels self.state.client.startup_info.client_info = response
def testGetLabelsFromFleetspeak_NoLabels(self): conn = _MockConnReturningClient(_TEST_CLIENT_ID, [("service-1", "foo-3")]) with mock.patch.object(fleetspeak_connector, "CONN", conn): fleetspeak_connector.Init(conn) self.assertEmpty( fleetspeak_utils.GetLabelsFromFleetspeak(_TEST_CLIENT_ID))
def testGetLabelsFromFleetspeak_UnknownClient(self): conn = mock.MagicMock() conn.outgoing.ListClients.return_value = admin_pb2.ListClientsResponse() with mock.patch.object(fleetspeak_connector, "CONN", conn): fleetspeak_connector.Init(conn) self.assertEmpty( fleetspeak_utils.GetLabelsFromFleetspeak(_TEST_CLIENT_ID))
def testGetLabelsFromFleetspeak_UnknownClient(self): conn = mock.MagicMock() conn.outgoing.ListClients.return_value = admin_pb2.ListClientsResponse( ) with fleetspeak_test_lib.ConnectionOverrider(conn): self.assertEmpty( fleetspeak_utils.GetLabelsFromFleetspeak(_TEST_CLIENT_ID))
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 elif not response.labels: response.labels = [fleetspeak_connector.unknown_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
def testGetLabelsFromFleetspeak_NoPrefix(self): conn = _MockConnReturningClient(_TEST_CLIENT_ID, [ ("client", "foo-1"), ("client", "bar-2"), ("service-1", "foo-3"), ("service-1", "foo-4"), ("client", "foo-5"), ]) with test_lib.ConfigOverrider({ "Server.fleetspeak_label_map": ["foo-5:baz-5"], }): with fleetspeak_test_lib.ConnectionOverrider(conn): self.assertListEqual( fleetspeak_utils.GetLabelsFromFleetspeak(_TEST_CLIENT_ID), ["foo-1", "bar-2", "baz-5"])
def testGetLabelsFromFleetspeak_Prefix(self): conn = _MockConnReturningClient(_TEST_CLIENT_ID, [ ("client", "foo-1"), ("client", "bar-2"), ("service-1", "foo-3"), ("service-1", "foo-4"), ("client", "foo-5"), ]) with test_lib.ConfigOverrider({ "Server.fleetspeak_label_prefix": "foo", "Server.fleetspeak_label_map": ["foo-5: baz-5"], }): with mock.patch.object(fleetspeak_connector, "CONN", conn): fleetspeak_connector.Init(conn) self.assertListEqual( fleetspeak_utils.GetLabelsFromFleetspeak(_TEST_CLIENT_ID), ["foo-1", "baz-5"])
def testGetLabelsFromFleetspeak_NoLabels(self): conn = _MockConnReturningClient(_TEST_CLIENT_ID, [("service-1", "foo-3")]) with fleetspeak_test_lib.ConnectionOverrider(conn): self.assertEmpty( fleetspeak_utils.GetLabelsFromFleetspeak(_TEST_CLIENT_ID))