Repository: qpid-proton
Updated Branches:
  refs/heads/go1 4afe30d87 -> 793e21010


PROTON-1380: Avoid freeing strings we pass to cyrus before cyrus finishes using 
them.


Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/440131e0
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/440131e0
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/440131e0

Branch: refs/heads/go1
Commit: 440131e0efabc14df338125b6df0b0e88527614e
Parents: 4abf23a
Author: Andrew Stitcher <astitc...@apache.org>
Authored: Wed Jan 4 14:11:27 2017 -0500
Committer: Andrew Stitcher <astitc...@apache.org>
Committed: Wed Jan 4 14:11:27 2017 -0500

----------------------------------------------------------------------
 proton-c/src/sasl/cyrus_sasl.c | 25 +++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/440131e0/proton-c/src/sasl/cyrus_sasl.c
----------------------------------------------------------------------
diff --git a/proton-c/src/sasl/cyrus_sasl.c b/proton-c/src/sasl/cyrus_sasl.c
index 0d81489..ef1db9d 100644
--- a/proton-c/src/sasl/cyrus_sasl.c
+++ b/proton-c/src/sasl/cyrus_sasl.c
@@ -108,8 +108,9 @@ static const sasl_callback_t pni_user_callbacks[] = {
 
 // Machinery to initialise the cyrus library only once even in a multithreaded 
environment
 // Relies on pthreads.
+static const char * const default_config_name = "proton-server";
 static char *pni_cyrus_config_dir = NULL;
-static const char *pni_cyrus_config_name = "proton-server";
+static char *pni_cyrus_config_name = NULL;
 static pthread_mutex_t pni_cyrus_mutex = PTHREAD_MUTEX_INITIALIZER;
 static bool pni_cyrus_client_started = false;
 static bool pni_cyrus_server_started = false;
@@ -119,6 +120,8 @@ static void pni_cyrus_finish(void) {
   pthread_mutex_lock(&pni_cyrus_mutex);
   if (pni_cyrus_client_started) sasl_client_done();
   if (pni_cyrus_server_started) sasl_server_done();
+  free(pni_cyrus_config_dir);
+  free(pni_cyrus_config_name);
   pthread_mutex_unlock(&pni_cyrus_mutex);
 }
 
@@ -145,7 +148,7 @@ static void pni_cyrus_server_once(void) {
     result = sasl_set_path(SASL_PATH_TYPE_CONFIG, pni_cyrus_config_dir);
   }
   if (result==SASL_OK) {
-    result = sasl_server_init(NULL, pni_cyrus_config_name);
+    result = sasl_server_init(NULL, pni_cyrus_config_name ? 
pni_cyrus_config_name : default_config_name);
   }
   pni_cyrus_server_started = true;
   pni_cyrus_server_init_rc = result;
@@ -166,8 +169,10 @@ bool pni_init_client(pn_transport_t* transport) {
   int result;
   sasl_conn_t *cyrus_conn = NULL;
   do {
-    if (sasl->config_dir) {
-      pni_cyrus_config_dir = sasl->config_dir;
+    // If pni_cyrus_config_dir already set then we already called 
pni_cyrus_client_start or pni_cyrus_server_start
+    // and the directory is already fixed - don't change
+    if (sasl->config_dir && !pni_cyrus_config_dir) {
+      pni_cyrus_config_dir = pn_strdup(sasl->config_dir);
     }
 
     pni_cyrus_client_start();
@@ -304,12 +309,16 @@ bool pni_init_server(pn_transport_t* transport)
   int result;
   sasl_conn_t *cyrus_conn = NULL;
   do {
-    if (sasl->config_dir) {
-      pni_cyrus_config_dir = sasl->config_dir;
+    // If pni_cyrus_config_dir already set then we already called 
pni_cyrus_client_start or pni_cyrus_server_start
+    // and the directory is already fixed - don't change
+    if (sasl->config_dir && !pni_cyrus_config_dir) {
+      pni_cyrus_config_dir = pn_strdup(sasl->config_dir);
     }
 
-    if (sasl->config_name) {
-      pni_cyrus_config_name = sasl->config_name;
+    // If pni_cyrus_config_name already set then we already called 
pni_cyrus_server_start
+    // and the name is already fixed - don't change
+    if (sasl->config_name && !pni_cyrus_config_name) {
+      pni_cyrus_config_name = pn_strdup(sasl->config_name);
     }
 
     pni_cyrus_server_start();


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to