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