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]

Reply via email to