From 5dc7b848dffaa0cd3cd3ca55080af90bdda2fec0 Mon Sep 17 00:00:00 2001
From: Simon Zolin <s.zolin@adguard.com>
Date: Mon, 2 Mar 2020 18:51:48 +0300
Subject: [PATCH] * blocked-services: remove unknown service names

---
 home/blocked_services.go |  6 ++++++
 home/clients.go          |  9 ++++++++-
 home/config.go           | 10 ++++++++++
 3 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/home/blocked_services.go b/home/blocked_services.go
index cede4d4d..5c14499d 100644
--- a/home/blocked_services.go
+++ b/home/blocked_services.go
@@ -135,6 +135,12 @@ func initServices() {
 	}
 }
 
+// Return TRUE if a blocked service name is known
+func blockedSvcKnown(s string) bool {
+	_, ok := serviceRules[s]
+	return ok
+}
+
 // ApplyBlockedServices - set blocked services settings for this DNS request
 func ApplyBlockedServices(setts *dnsfilter.RequestFilteringSettings, list []string) {
 	setts.ServicesRules = []dnsfilter.ServiceEntry{}
diff --git a/home/clients.go b/home/clients.go
index 0de73af7..1c2b795b 100644
--- a/home/clients.go
+++ b/home/clients.go
@@ -140,11 +140,18 @@ func (clients *clientsContainer) addFromConfig(objects []clientObject) {
 			SafeBrowsingEnabled: cy.SafeBrowsingEnabled,
 
 			UseOwnBlockedServices: !cy.UseGlobalBlockedServices,
-			BlockedServices:       cy.BlockedServices,
 
 			Upstreams: cy.Upstreams,
 		}
 
+		for _, s := range cy.BlockedServices {
+			if !blockedSvcKnown(s) {
+				log.Debug("Clients: skipping unknown blocked-service '%s'", s)
+				continue
+			}
+			cli.BlockedServices = append(cli.BlockedServices, s)
+		}
+
 		for _, t := range cy.Tags {
 			if !clients.tagKnown(t) {
 				log.Debug("Clients: skipping unknown tag '%s'", t)
diff --git a/home/config.go b/home/config.go
index dfcc6842..fb28a8ba 100644
--- a/home/config.go
+++ b/home/config.go
@@ -233,6 +233,16 @@ func parseConfig() error {
 		return err
 	}
 
+	bsvcs := []string{}
+	for _, s := range config.DNS.BlockedServices {
+		if !blockedSvcKnown(s) {
+			log.Debug("skipping unknown blocked-service '%s'", s)
+			continue
+		}
+		bsvcs = append(bsvcs, s)
+	}
+	config.DNS.BlockedServices = bsvcs
+
 	if !checkFiltersUpdateIntervalHours(config.DNS.FiltersUpdateIntervalHours) {
 		config.DNS.FiltersUpdateIntervalHours = 24
 	}