Can a patch like this solve the problem? It is slightly tested. It
make sure to retry once if a search fail.
Index: nslcd/common.h
===================================================================
--- nslcd/common.h (revision 729)
+++ nslcd/common.h (working copy)
@@ -124,6 +124,10 @@
{ \
/* define common variables */ \
int32_t tmpint32; \
+ int tries = 2; \
+ int retval = -1; \
+ int count = 0; \
+ int headerprinted = 0; \
MYLDAP_SEARCH *search; \
MYLDAP_ENTRY *entry; \
int rc; \
@@ -131,9 +135,6 @@
readfn; \
/* log call */ \
logcall; \
- /* write the response header */ \
- WRITE_INT32(fp,NSLCD_VERSION); \
- WRITE_INT32(fp,action); \
/* prepare the search filter */ \
if (mkfilter) \
{ \
@@ -142,21 +143,37 @@
} \
/* build the list of attributes */ \
db##_init(); \
+ do { \
/* do the LDAP search */ \
- if
((search=myldap_search(session,db##_base,db##_scope,filter,db##_attrs))==NULL) \
- return -1; \
+ if
((search=myldap_search(session,db##_base,db##_scope,filter,db##_attrs))==NULL)
{ \
+ log_log(LOG_WARNING,"nslcd_" __STRING(db) "_" __STRING(fn) "(): search
failed, retrying?"); \
+ continue; \
+ } \
+ /* write the response header */ \
+ if (!headerprinted) { \
+ WRITE_INT32(fp,NSLCD_VERSION); \
+ WRITE_INT32(fp,action); \
+ headerprinted = 1; \
+ } \
/* go over results */ \
while ((entry=myldap_get_entry(search,&rc))!=NULL) \
{ \
+ count++ ; \
if (writefn) \
return -1; \
} \
+ if (0 == count) {\
+ log_log(LOG_WARNING,"nslcd_" __STRING(db) "_" __STRING(fn) "(): result
failed, retrying?"); \
+ continue; \
+ } \
/* write the final result code */ \
if (rc==LDAP_SUCCESS) \
{ \
WRITE_INT32(fp,NSLCD_RESULT_END); \
+ retval = 0; \
} \
- return 0; \
+ } while (0 < --tries); \
+ return retval; \
}
#endif /* not _SERVER_COMMON_H */
Happy hacking,
--
Petter Reinholdtsen
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]