summaryrefslogtreecommitdiff
path: root/usr/src/lib/libsldap
diff options
context:
space:
mode:
authormichen <none@none>2008-08-04 08:31:06 -0700
committermichen <none@none>2008-08-04 08:31:06 -0700
commit29836b1990ff03408750301a4ad20cfd233444b9 (patch)
treecad4bb13c53f1cbf598d1634dcdf83840525622d /usr/src/lib/libsldap
parent4bb0471c90a1b41593e55b18e3045fd3666c6841 (diff)
downloadillumos-gate-29836b1990ff03408750301a4ad20cfd233444b9.tar.gz
6699250 nscd core dumps in NIS do_getent
6716362 standalone ldaplist appears to hang when all servers are down 6728407 LDAP Core file got generated on NAS Appliance while trying to enable LDAP services 6731903 peruser nscd not functional when using libumem debugging
Diffstat (limited to 'usr/src/lib/libsldap')
-rw-r--r--usr/src/lib/libsldap/common/ns_common.c2
-rw-r--r--usr/src/lib/libsldap/common/ns_config.c2
-rw-r--r--usr/src/lib/libsldap/common/ns_connect.c11
-rwxr-xr-xusr/src/lib/libsldap/common/ns_connmgmt.c1
-rw-r--r--usr/src/lib/libsldap/common/ns_standalone.c25
5 files changed, 34 insertions, 7 deletions
diff --git a/usr/src/lib/libsldap/common/ns_common.c b/usr/src/lib/libsldap/common/ns_common.c
index 268393e50d..199691295a 100644
--- a/usr/src/lib/libsldap/common/ns_common.c
+++ b/usr/src/lib/libsldap/common/ns_common.c
@@ -2286,7 +2286,7 @@ __s_api_removeServer(const char *server)
(void) __ns_ldap_freeError(&error);
}
- return (-1);
+ return (NS_CACHE_NOSERVER);
}
return (0);
diff --git a/usr/src/lib/libsldap/common/ns_config.c b/usr/src/lib/libsldap/common/ns_config.c
index b4d8d88fde..2046a46bad 100644
--- a/usr/src/lib/libsldap/common/ns_config.c
+++ b/usr/src/lib/libsldap/common/ns_config.c
@@ -58,7 +58,7 @@
#include "ns_cache_door.h"
#include "ns_connmgmt.h"
-#pragma fini(__s_api_free_sessionPool, __s_api_shutdown_conn_mgmt, \
+#pragma fini(__s_api_shutdown_conn_mgmt, \
_free_config, __ns_ldap_doorfd_close)
static mutex_t ns_parse_lock = DEFAULTMUTEX;
diff --git a/usr/src/lib/libsldap/common/ns_connect.c b/usr/src/lib/libsldap/common/ns_connect.c
index e935a186b5..67cdee702f 100644
--- a/usr/src/lib/libsldap/common/ns_connect.c
+++ b/usr/src/lib/libsldap/common/ns_connect.c
@@ -176,11 +176,18 @@ __s_api_requestServer(const char *request, const char *server,
* from the local libsldap's list
*/
if (__s_api_isStandalone()) {
- if (__s_api_findRootDSE(ireq,
+ if ((ret_code = __s_api_findRootDSE(ireq,
server,
addrType,
ret,
- error) != NS_LDAP_SUCCESS) {
+ error)) != NS_LDAP_SUCCESS) {
+ /*
+ * get first server from local list only once
+ * to prevent looping
+ */
+ if (strcmp(ireq, NS_CACHE_NEW) != 0)
+ return (ret_code);
+
syslog(LOG_WARNING,
"libsldap (\"standalone\" mode): "
"can not find any available server. "
diff --git a/usr/src/lib/libsldap/common/ns_connmgmt.c b/usr/src/lib/libsldap/common/ns_connmgmt.c
index d0e1ca0332..1bacf7fdd8 100755
--- a/usr/src/lib/libsldap/common/ns_connmgmt.c
+++ b/usr/src/lib/libsldap/common/ns_connmgmt.c
@@ -777,6 +777,7 @@ release_conn_mgmt(ns_conn_mgmt_t *cmg, boolean_t unlock_cmg)
if (unlock_cmg == B_TRUE)
(void) mutex_unlock(&cmg->lock);
free_conn_mgmt(cmg);
+ __s_api_free_sessionPool();
return (NULL);
} else {
syslog(LOG_WARNING,
diff --git a/usr/src/lib/libsldap/common/ns_standalone.c b/usr/src/lib/libsldap/common/ns_standalone.c
index 74f6ded348..439686dab0 100644
--- a/usr/src/lib/libsldap/common/ns_standalone.c
+++ b/usr/src/lib/libsldap/common/ns_standalone.c
@@ -1112,6 +1112,7 @@ __ns_ldap_getConnectionInfoFromDUA(const ns_dir_server_t *server,
Connection *session = NULL;
char errmsg[MAXERROR];
char buffer[NSS_BUFLEN_HOSTS];
+ ns_conn_user_t *cu = NULL;
if (errorp == NULL) {
__s_api_destroy_config(config_struct);
@@ -1194,6 +1195,11 @@ __ns_ldap_getConnectionInfoFromDUA(const ns_dir_server_t *server,
__s_api_setInitMode();
+ cu = __s_api_conn_user_init(NS_CONN_USER_SEARCH, NULL, B_FALSE);
+ if (cu == NULL) {
+ return (NS_LDAP_INTERNAL);
+ }
+
if ((ret_code = __s_api_getConnection(serverAddr,
NS_LDAP_NEW_CONN,
cred ? cred : &default_cred,
@@ -1202,7 +1208,8 @@ __ns_ldap_getConnectionInfoFromDUA(const ns_dir_server_t *server,
errorp,
0,
0,
- NULL)) != NS_LDAP_SUCCESS) {
+ cu)) != NS_LDAP_SUCCESS) {
+ __s_api_conn_user_free(cu);
__s_api_unsetInitMode();
return (ret_code);
}
@@ -1225,6 +1232,7 @@ __ns_ldap_getConnectionInfoFromDUA(const ns_dir_server_t *server,
ret_code,
strdup(errmsg),
NS_LDAP_MEMORY);
+ __s_api_conn_user_free(cu);
DropConnection(sessionId, NS_LDAP_NEW_CONN);
return (ret_code);
}
@@ -1249,6 +1257,7 @@ __ns_ldap_getConnectionInfoFromDUA(const ns_dir_server_t *server,
ret_code,
strdup(errmsg),
NS_LDAP_MEMORY);
+ __s_api_conn_user_free(cu);
DropConnection(sessionId, NS_LDAP_NEW_CONN);
return (ret_code);
}
@@ -1265,6 +1274,7 @@ __ns_ldap_getConnectionInfoFromDUA(const ns_dir_server_t *server,
free(duaProfile);
}
+ __s_api_conn_user_free(cu);
DropConnection(sessionId, NS_LDAP_NEW_CONN);
return (NS_LDAP_SUCCESS);
@@ -1302,6 +1312,7 @@ __ns_ldap_getRootDSE(const char *server_addr,
void **paramVal = NULL;
ns_cred_t anon;
+ ns_conn_user_t *cu = NULL;
if (errorp == NULL) {
return (NS_LDAP_INVALID_PARAM);
@@ -1319,6 +1330,11 @@ __ns_ldap_getRootDSE(const char *server_addr,
__s_api_setInitMode();
+ cu = __s_api_conn_user_init(NS_CONN_USER_SEARCH, NULL, B_FALSE);
+ if (cu == NULL) {
+ return (NS_LDAP_INTERNAL);
+ }
+
/*
* All the credentials will be taken from the current
* libsldap configuration.
@@ -1331,7 +1347,7 @@ __ns_ldap_getRootDSE(const char *server_addr,
errorp,
0,
0,
- NULL)) != NS_LDAP_SUCCESS) {
+ cu)) != NS_LDAP_SUCCESS) {
/* Fallback to anonymous mode is disabled. Stop. */
if (anon_fallback == 0) {
syslog(LOG_WARNING,
@@ -1377,9 +1393,10 @@ __ns_ldap_getRootDSE(const char *server_addr,
errorp,
0,
0,
- NULL);
+ cu);
if (ret_code != NS_LDAP_SUCCESS) {
+ __s_api_conn_user_free(cu);
__s_api_unsetInitMode();
return (ret_code);
}
@@ -1435,8 +1452,10 @@ __ns_ldap_getRootDSE(const char *server_addr,
resultMsg = NULL;
}
+ __s_api_conn_user_free(cu);
return (NS_LDAP_OP_FAILED);
}
+ __s_api_conn_user_free(cu);
ret_code = convert_to_door_line(session->ld,
resultMsg,