summaryrefslogtreecommitdiff
path: root/usr/src/lib/libsldap/common/ns_config.c
diff options
context:
space:
mode:
authormichen <none@none>2008-06-19 16:57:55 -0700
committermichen <none@none>2008-06-19 16:57:55 -0700
commitca190d8debe6672d99069a376a987adee0765d6c (patch)
treee38595974877df994e7953d9cf5190ae8c29b311 /usr/src/lib/libsldap/common/ns_config.c
parentf94f0840d8d73b4f9cd054b7edf6085b527aaf0e (diff)
downloadillumos-joyent-ca190d8debe6672d99069a376a987adee0765d6c.tar.gz
6716317 Standalone ldaplist fails on a native LDAP client system
Diffstat (limited to 'usr/src/lib/libsldap/common/ns_config.c')
-rw-r--r--usr/src/lib/libsldap/common/ns_config.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/usr/src/lib/libsldap/common/ns_config.c b/usr/src/lib/libsldap/common/ns_config.c
index e985bcd38b..b4d8d88fde 100644
--- a/usr/src/lib/libsldap/common/ns_config.c
+++ b/usr/src/lib/libsldap/common/ns_config.c
@@ -837,14 +837,19 @@ __s_api_destroy_config(ns_config_t *cfg)
*/
static ns_config_t *
-get_curr_config_unlocked(ns_config_t *cfg)
+get_curr_config_unlocked(ns_config_t *cfg, boolean_t global)
{
ns_config_t *ret;
ret = cfg;
if (cfg != NULL) {
(void) mutex_lock(&cfg->config_mutex);
- if (cfg->delete)
+ /*
+ * allow access to per connection management (non-global)
+ * config so operations on connection being closed can still
+ * be completed
+ */
+ if (cfg->delete && global == B_TRUE)
ret = NULL;
else
cfg->nUse++;
@@ -867,7 +872,7 @@ set_curr_config_global(ns_config_t *ptr)
(void) mutex_lock(&ns_parse_lock);
cur_cfg = current_config;
- cfg = get_curr_config_unlocked(cur_cfg);
+ cfg = get_curr_config_unlocked(cur_cfg, B_TRUE);
if (cfg != ptr) {
__s_api_destroy_config(cfg);
current_config = ptr;
@@ -899,7 +904,7 @@ set_curr_config(ns_config_t *ptr)
if (rc == 0 && cmg != NULL && cmg->config != NULL) {
(void) mutex_lock(&cmg->cfg_lock);
cur_cfg = cmg->config;
- cfg = get_curr_config_unlocked(cur_cfg);
+ cfg = get_curr_config_unlocked(cur_cfg, B_FALSE);
if (cfg != ptr) {
__s_api_destroy_config(cfg);
cmg->config = ptr;
@@ -989,7 +994,7 @@ __s_api_get_default_config_global(void)
(void) mutex_lock(&ns_parse_lock);
cur_cfg = current_config;
- cfg = get_curr_config_unlocked(cur_cfg);
+ cfg = get_curr_config_unlocked(cur_cfg, B_TRUE);
(void) mutex_unlock(&ns_parse_lock);
return (cfg);
@@ -1013,7 +1018,7 @@ __s_api_get_default_config(void)
if (rc == 0 && cmg != NULL && cmg->config != NULL) {
(void) mutex_lock(&cmg->cfg_lock);
cur_cfg = cmg->config;
- cfg = get_curr_config_unlocked(cur_cfg);
+ cfg = get_curr_config_unlocked(cur_cfg, B_FALSE);
(void) mutex_unlock(&cmg->cfg_lock);
return (cfg);
}