You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by as...@apache.org on 2017/01/04 19:45:07 UTC
qpid-proton git commit: PROTON-1380: Avoid freeing strings we pass to
cyrus before cyrus finishes using them.
Repository: qpid-proton
Updated Branches:
refs/heads/master 4abf23afa -> 440131e0e
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/master
Commit: 440131e0efabc14df338125b6df0b0e88527614e
Parents: 4abf23a
Author: Andrew Stitcher <as...@apache.org>
Authored: Wed Jan 4 14:11:27 2017 -0500
Committer: Andrew Stitcher <as...@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-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org