Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Step:15-SP2
nss_ldap
0003-nss_ldap-getent-retry.dif
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0003-nss_ldap-getent-retry.dif of Package nss_ldap
bnc#662752, PADL#215 Index: nss_ldap-265/ldap-nss.c =================================================================== --- nss_ldap-265.orig/ldap-nss.c +++ nss_ldap-265/ldap-nss.c @@ -2033,6 +2033,7 @@ _nss_ldap_ent_context_init_locked (ent_c ctx->ec_msgid = -1; ctx->ec_sd = NULL; ctx->ec_eof = 0; + ctx->ec_ldaprc = 0; LS_INIT (ctx->ec_state); @@ -2067,6 +2068,7 @@ do_context_release (ent_context_t * ctx, ctx->ec_sd = NULL; ctx->ec_eof = 0; + ctx->ec_ldaprc = 0; LS_INIT (ctx->ec_state); @@ -2491,6 +2493,7 @@ do_result (ent_context_t * ctx, int all) syslog (LOG_ERR, "nss_ldap: could not get LDAP result - %s", ldap_err2string (rc)); do_close(); + ctx->ec_ldaprc = rc; stat = NSS_UNAVAIL; break; case LDAP_RES_SEARCH_ENTRY: @@ -3395,6 +3398,9 @@ _nss_ldap_getent_ex (ldap_args_t * args, const char **user_attrs, parser_t parser) { NSS_STATUS stat = NSS_SUCCESS; + int retry; + + retry = (__session.ls_state == LS_CONNECTED_TO_DSA ) ? 1 : 0; debug ("==> _nss_ldap_getent_ex"); @@ -3437,6 +3443,18 @@ next: stat = do_parse (*ctx, result, buffer, buflen, errnop, parser); + if (stat == NSS_UNAVAIL && retry && + ( ((*ctx)->ec_ldaprc == LDAP_UNAVAILABLE) || + ((*ctx)->ec_ldaprc == LDAP_SERVER_DOWN) ) + ) + { + retry = 0; + (*ctx)->ec_msgid = -1; + syslog (LOG_ERR, "nss_ldap: Server might have closed connection. Retrying."); + goto next; + } + + retry = 0; #ifdef HAVE_LDAP_SEARCH_EXT if (stat == NSS_NOTFOUND) { Index: nss_ldap-265/ldap-nss.h =================================================================== --- nss_ldap-265.orig/ldap-nss.h +++ nss_ldap-265/ldap-nss.h @@ -570,6 +570,7 @@ struct ent_context { ldap_state_t ec_state; /* eg. for services */ int ec_msgid; /* message ID */ + int ec_ldaprc; /* LDAP error code */ LDAPMessage *ec_res; /* result chain */ ldap_service_search_descriptor_t *ec_sd; /* current sd */ struct berval *ec_cookie; /* cookie for paged searches */
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor