Browse Source

[trac565] Less duplicates in config_handler

Michal 'vorner' Vaner 14 years ago
parent
commit
60f301c235
1 changed files with 30 additions and 26 deletions
  1. 30 26
      src/bin/bind10/bind10.py.in

+ 30 - 26
src/bin/bind10/bind10.py.in

@@ -235,34 +235,38 @@ class BoB:
         if self.verbose:
             sys.stdout.write("[bind10] Handling new configuration: " +
                 str(new_config) + "\n")
-        if 'start_resolver' in new_config:
-            if new_config['start_resolver']:
-                if not self.started_resolver_family:
+        def start_stop(name, started, start, stop):
+            if not'start_' + name in new_config:
+                return
+            if new_config['start_' + name]:
+                if not started:
                     if self.uid is not None:
-                        sys.stderr.write("[bind10] Starting resolver as a user," +
-                            "not root. This might fail.\n")
-                    self.start_resolver(self.c_channel_env)
-                    self.started_resolver_family = True
+                        sys.stderr.write("[bind10] Starting " + name + " as " +
+                            "a user, not root. This might fail.\n")
+                    start()
             else:
-                self.stop_resolver()
-                self.started_resolver_family = False
-        if 'start_auth' in new_config:
-            if new_config['start_auth']:
-                if not self.started_auth_family:
-                    if self.uid is not None:
-                        sys.stderr.write("[bind10] Starting auth as a user," +
-                            "not root. This might fail.\n")
-                    self.start_auth(self.c_channel_env)
-                    self.start_xfrout(self.c_channel_env)
-                    self.start_xfrin(self.c_channel_env)
-                    self.start_zonemgr(self.c_channel_env)
-                    self.started_auth_family = True
-            else:
-                self.stop_zonemgr()
-                self.stop_xfrin()
-                self.stop_xfrout()
-                self.stop_auth()
-                self.started_auth_family = False
+                stop()
+        def resolver_on():
+            self.start_resolver(self.c_channel_env)
+            self.started_resolver_family = True
+        def resolver_off():
+            self.stop_resolver()
+            self.started_resolver_family = False
+        start_stop('resolver', self.started_resolver_family, resolver_on,
+            resolver_off)
+        def auth_on():
+            self.start_auth(self.c_channel_env)
+            self.start_xfrout(self.c_channel_env)
+            self.start_xfrin(self.c_channel_env)
+            self.start_zonemgr(self.c_channel_env)
+            self.started_auth_family = True
+        def auth_off():
+            self.stop_zonemgr()
+            self.stop_xfrin()
+            self.stop_xfrout()
+            self.stop_auth()
+            self.started_auth_family = False
+        start_stop('auth', self.started_auth_family, auth_on, auth_off)
 
         answer = isc.config.ccsession.create_answer(0)
         return answer