Repository: qpid-dispatch Updated Branches: refs/heads/master 4bd79a3d5 -> 63a56d605
DISPATCH-990: Reorder config steps to init policy Policy manager needs some setup before vhosts are processed. Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/10ad8cf3 Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/10ad8cf3 Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/10ad8cf3 Branch: refs/heads/master Commit: 10ad8cf370412ec424f92e1a3db0aee031f4afc4 Parents: 862b021 Author: Chuck Rolke <[email protected]> Authored: Thu May 10 10:17:21 2018 -0400 Committer: Chuck Rolke <[email protected]> Committed: Thu May 10 10:39:47 2018 -0400 ---------------------------------------------------------------------- python/qpid_dispatch_internal/management/config.py | 17 +++++++++++------ .../qpid_dispatch_internal/policy/policy_local.py | 5 +++++ .../policy/policy_manager.py | 8 ++++++++ src/policy.c | 2 ++ 4 files changed, 26 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/10ad8cf3/python/qpid_dispatch_internal/management/config.py ---------------------------------------------------------------------- diff --git a/python/qpid_dispatch_internal/management/config.py b/python/qpid_dispatch_internal/management/config.py index 303609e..aad6bd2 100644 --- a/python/qpid_dispatch_internal/management/config.py +++ b/python/qpid_dispatch_internal/management/config.py @@ -174,13 +174,21 @@ def configure_dispatch(dispatch, lib_handle, filename): from qpid_dispatch_internal.display_name.display_name import DisplayNameService displayname_service = DisplayNameService() qd.qd_dispatch_register_display_name_service(dispatch, displayname_service) - policyDir = config.by_type('policy')[0]['policyDir'] - policyDefaultVhost = config.by_type('policy')[0]['defaultVhost'] + + # Configure policy and policy manager before vhosts + policyDir = config.by_type('policy')[0]['policyDir'] + policyDefaultVhost = config.by_type('policy')[0]['defaultVhost'] + useHostnamePatterns = config.by_type('policy')[0]['useVhostNamePatterns'] + for a in config.by_type("policy"): + configure(a) + agent.policy.set_default_vhost(policyDefaultVhost) + agent.policy.set_use_hostname_patterns(useHostnamePatterns) + # Remaining configuration for t in "sslProfile", "authServicePlugin", "listener", "connector", \ "router.config.address", "router.config.linkRoute", "router.config.autoLink", \ "router.config.exchange", "router.config.binding", \ - "policy", "vhost": + "vhost": for a in config.by_type(t): configure(a) if t == "sslProfile": @@ -201,6 +209,3 @@ def configure_dispatch(dispatch, lib_handle, filename): pconfig = PolicyConfig(os.path.join(apath, i)) for a in pconfig.by_type("vhost"): agent.configure(a) - - # Set policy default application after all rulesets loaded - agent.policy.set_default_vhost(policyDefaultVhost) http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/10ad8cf3/python/qpid_dispatch_internal/policy/policy_local.py ---------------------------------------------------------------------- diff --git a/python/qpid_dispatch_internal/policy/policy_local.py b/python/qpid_dispatch_internal/policy/policy_local.py index b482b7f..bee0499 100644 --- a/python/qpid_dispatch_internal/policy/policy_local.py +++ b/python/qpid_dispatch_internal/policy/policy_local.py @@ -508,6 +508,11 @@ class PolicyLocal(object): # open.hostname is not found in the rulesetdb self._default_vhost = "" + # _use_hostname_patterns + # holds policy setting. + # When true policy ruleset definitions are propagated to C code + self.use_hostname_patterns = False + # # Service interfaces # http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/10ad8cf3/python/qpid_dispatch_internal/policy/policy_manager.py ---------------------------------------------------------------------- diff --git a/python/qpid_dispatch_internal/policy/policy_manager.py b/python/qpid_dispatch_internal/policy/policy_manager.py index 34deabb..0437fdd 100644 --- a/python/qpid_dispatch_internal/policy/policy_manager.py +++ b/python/qpid_dispatch_internal/policy/policy_manager.py @@ -43,6 +43,7 @@ class PolicyManager(object): self._agent = agent self._policy_local = PolicyLocal(self) self.log_adapter = LogAdapter("POLICY") + self._use_hostname_patterns = False def log(self, level, text): info = traceback.extract_stack(limit=2)[0] # Caller frame info @@ -70,6 +71,13 @@ class PolicyManager(object): def get_agent(self): return self._agent + def get_use_hostname_patterns(self): + return self._use_hostname_patterns + + def set_use_hostname_patterns(self, v): + self._use_hostname_patterns = v + self._policy_local.use_hostname_patterns = v + # # Management interface to create a ruleset # http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/10ad8cf3/src/policy.c ---------------------------------------------------------------------- diff --git a/src/policy.c b/src/policy.c index 7de111c..e982077 100644 --- a/src/policy.c +++ b/src/policy.c @@ -61,6 +61,7 @@ struct qd_policy_t { qd_dispatch_t *qd; qd_log_source_t *log_source; void *py_policy_manager; + sys_mutex_t *tree_lock; qd_parse_tree_t *hostname_tree; // configured settings int max_connection_limit; @@ -83,6 +84,7 @@ qd_policy_t *qd_policy(qd_dispatch_t *qd) policy->qd = qd; policy->log_source = qd_log_source("POLICY"); policy->max_connection_limit = 65535; + policy->tree_lock = sys_mutex(); policy->hostname_tree = qd_parse_tree_new(QD_PARSE_TREE_ADDRESS); qd_log(policy->log_source, QD_LOG_TRACE, "Policy Initialized"); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
