You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ch...@apache.org on 2018/05/16 20:14:03 UTC
[05/12] qpid-dispatch git commit: DISPATCH-990: Add/remove policy
hostname tree entries
DISPATCH-990: Add/remove policy hostname tree entries
Tie hostname lookup tree to life cycle of policy rulesets.
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/f90c2a80
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/f90c2a80
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/f90c2a80
Branch: refs/heads/master
Commit: f90c2a805d663fb2ea15a0fec7c70c16ce0aa1aa
Parents: e1ae8d3
Author: Chuck Rolke <cr...@redhat.com>
Authored: Fri May 11 09:22:24 2018 -0400
Committer: Chuck Rolke <cr...@redhat.com>
Committed: Fri May 11 09:22:24 2018 -0400
----------------------------------------------------------------------
python/qpid_dispatch_internal/dispatch.py | 4 ++++
python/qpid_dispatch_internal/policy/policy_local.py | 10 ++++++++++
src/dispatch.c | 15 +++++++++++++++
src/policy.c | 14 ++++++++------
src/policy.h | 6 +++---
5 files changed, 40 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f90c2a80/python/qpid_dispatch_internal/dispatch.py
----------------------------------------------------------------------
diff --git a/python/qpid_dispatch_internal/dispatch.py b/python/qpid_dispatch_internal/dispatch.py
index 4c9123b..609396e 100644
--- a/python/qpid_dispatch_internal/dispatch.py
+++ b/python/qpid_dispatch_internal/dispatch.py
@@ -78,6 +78,10 @@ class QdDll(ctypes.PyDLL):
self._prototype(self.qd_dispatch_policy_c_counts_alloc, c_long, [], check=False)
self._prototype(self.qd_dispatch_policy_c_counts_free, None, [c_long], check=False)
self._prototype(self.qd_dispatch_policy_c_counts_refresh, None, [c_long, py_object])
+ self._prototype(self.qd_dispatch_policy_host_pattern_add, None, [self.qd_dispatch_p, c_char_p])
+ self._prototype(self.qd_dispatch_policy_host_pattern_remove, None, [self.qd_dispatch_p, c_char_p])
+ self._prototype(self.qd_dispatch_policy_host_pattern_lookup, c_char_p, [self.qd_dispatch_p, c_char_p])
+
self._prototype(self.qd_dispatch_register_display_name_service, None, [self.qd_dispatch_p, py_object])
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f90c2a80/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 bee0499..cd62072 100644
--- a/python/qpid_dispatch_internal/policy/policy_local.py
+++ b/python/qpid_dispatch_internal/policy/policy_local.py
@@ -539,6 +539,13 @@ class PolicyLocal(object):
self.statsdb[name].update_ruleset(candidate)
self._manager.log_info("Updated policy rules for vhost %s" % name)
# TODO: ruleset lock
+ if self.use_hostname_patterns:
+ agent = self._manager.get_agent()
+ if name in self.rulesetdb:
+ # an update. remove existing hostname pattern
+ agent.qd.qd_dispatch_policy_host_pattern_remove(agent.dispatch, name)
+ # add new pattern
+ agent.qd.qd_dispatch_policy_host_pattern_add(agent.dispatch, name)
self.rulesetdb[name] = {}
self.rulesetdb[name].update(candidate)
@@ -550,6 +557,9 @@ class PolicyLocal(object):
if name not in self.rulesetdb:
raise PolicyError("Policy '%s' does not exist" % name)
# TODO: ruleset lock
+ if self.use_hostname_patterns:
+ agent = self._manager.get_agent()
+ agent.qd.qd_dispatch_policy_host_pattern_remove(agent.dispatch, name)
del self.rulesetdb[name]
#
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f90c2a80/src/dispatch.c
----------------------------------------------------------------------
diff --git a/src/dispatch.c b/src/dispatch.c
index 99469f0..6f82471 100644
--- a/src/dispatch.c
+++ b/src/dispatch.c
@@ -270,6 +270,21 @@ void qd_dispatch_policy_c_counts_refresh(long ccounts, qd_entity_t *entity)
qd_policy_c_counts_refresh(ccounts, entity);
}
+void qd_dispatch_policy_host_pattern_add(qd_dispatch_t *qd, char *hostPattern)
+{
+ qd_policy_host_pattern_add(qd->policy, hostPattern);
+}
+
+void qd_dispatch_policy_host_pattern_remove(qd_dispatch_t *qd, char *hostPattern)
+{
+ qd_policy_host_pattern_remove(qd->policy, hostPattern);
+}
+
+char * qd_dispatch_policy_host_pattern_lookup(qd_dispatch_t *qd, char *hostPattern)
+{
+ return qd_policy_host_pattern_lookup(qd->policy, hostPattern);
+}
+
qd_error_t qd_dispatch_prepare(qd_dispatch_t *qd)
{
qd->server = qd_server(qd, qd->thread_count, qd->router_id, qd->sasl_config_path, qd->sasl_config_name);
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f90c2a80/src/policy.c
----------------------------------------------------------------------
diff --git a/src/policy.c b/src/policy.c
index c545f46..77523ce 100644
--- a/src/policy.c
+++ b/src/policy.c
@@ -834,10 +834,10 @@ bool qd_policy_approve_link_name(const char *username,
// Add a hostname to the lookup parse_tree
-void qd_policy_host_pattern_add(qd_policy_t *policy, const char *hostPattern)
+void qd_policy_host_pattern_add(qd_policy_t *policy, char *hostPattern)
{
sys_mutex_lock(policy->tree_lock);
- void *oldp = qd_parse_tree_add_pattern_str(policy->hostname_tree, hostPattern, (void*)hostPattern);
+ void *oldp = qd_parse_tree_add_pattern_str(policy->hostname_tree, hostPattern, hostPattern);
sys_mutex_unlock(policy->tree_lock);
if (oldp) {
qd_log(policy->log_source, QD_LOG_INFO, "vhost hostname pattern '%s' replaced existing pattern", hostPattern);
@@ -846,7 +846,7 @@ void qd_policy_host_pattern_add(qd_policy_t *policy, const char *hostPattern)
// Remove a hostname from the lookup parse_tree
-void qd_policy_host_pattern_remove(qd_policy_t *policy, const char *hostPattern)
+void qd_policy_host_pattern_remove(qd_policy_t *policy, char *hostPattern)
{
sys_mutex_lock(policy->tree_lock);
void *oldp = qd_parse_tree_remove_pattern_str(policy->hostname_tree, hostPattern);
@@ -858,14 +858,16 @@ void qd_policy_host_pattern_remove(qd_policy_t *policy, const char *hostPattern)
// Look up a hostname in the lookup parse_tree
-const char *qd_policy_host_pattern_lookup(qd_policy_t *policy, const char *hostPattern)
+char * qd_policy_host_pattern_lookup(qd_policy_t *policy, char *hostPattern)
{
void *payload = 0;
sys_mutex_lock(policy->tree_lock);
bool matched = qd_parse_tree_retrieve_match_str(policy->hostname_tree, hostPattern, &payload);
sys_mutex_unlock(policy->tree_lock);
- if (!matched) payload = 0;
+ if (!matched) {
+ payload = 0;
+ }
qd_log(policy->log_source, QD_LOG_TRACE, "vhost hostname pattern '%s' lookup returned '%s'",
hostPattern, (payload ? (char *)payload : "null"));
- return (const char *)payload;
+ return payload;
}
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f90c2a80/src/policy.h
----------------------------------------------------------------------
diff --git a/src/policy.h b/src/policy.h
index 66f7ac1..57a64fe 100644
--- a/src/policy.h
+++ b/src/policy.h
@@ -182,18 +182,18 @@ bool qd_policy_approve_link_name(const char *username,
* @param[in] policy qd_policy_t
* @param[in] hostPattern the hostname pattern with possible parse_tree wildcards
*/
-void qd_policy_host_pattern_add(qd_policy_t *policy, const char *hostPattern);
+void qd_policy_host_pattern_add(qd_policy_t *policy, char *hostPattern);
/** Remove a hostname from the lookup parse_tree
* @param[in] policy qd_policy_t
* @param[in] hostPattern the hostname pattern with possible parse_tree wildcards
*/
-void qd_policy_host_pattern_remove(qd_policy_t *policy, const char *hostPattern);
+void qd_policy_host_pattern_remove(qd_policy_t *policy, char *hostPattern);
/** Look up a hostname in the lookup parse_tree
* @param[in] policy qd_policy_t
* @param[in] hostname a concrete vhost name
* @return the name of the ruleset whose hostname pattern matched this actual hostname
*/
-const char *qd_policy_host_pattern_lookup(qd_policy_t *policy, const char *hostPattern);
+char * qd_policy_host_pattern_lookup(qd_policy_t *policy, char *hostPattern);
#endif
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org