diff options
author | michen <none@none> | 2008-08-04 08:31:06 -0700 |
---|---|---|
committer | michen <none@none> | 2008-08-04 08:31:06 -0700 |
commit | 29836b1990ff03408750301a4ad20cfd233444b9 (patch) | |
tree | cad4bb13c53f1cbf598d1634dcdf83840525622d /usr/src/lib/libsldap | |
parent | 4bb0471c90a1b41593e55b18e3045fd3666c6841 (diff) | |
download | illumos-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.c | 2 | ||||
-rw-r--r-- | usr/src/lib/libsldap/common/ns_config.c | 2 | ||||
-rw-r--r-- | usr/src/lib/libsldap/common/ns_connect.c | 11 | ||||
-rwxr-xr-x | usr/src/lib/libsldap/common/ns_connmgmt.c | 1 | ||||
-rw-r--r-- | usr/src/lib/libsldap/common/ns_standalone.c | 25 |
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, |