diff -ur globus_ldapmodules-0.14.orig/search.c globus_ldapmodules-0.14/search.c --- globus_ldapmodules-0.14.orig/search.c 2004-10-28 16:07:43.000000000 +0200 +++ globus_ldapmodules-0.14/search.c 2004-10-28 16:08:17.000000000 +0200 @@ -195,7 +195,7 @@ int ttl, create_new, inx, sfxm, fdn, cntrl; FILE *fptr; char *dn, *data, *obj, *path, *sfx, *ttlstr, *tempdata, *data1=NULL; - int cur_inx, errno; + int cur_inx, cur_len, errno; char *authcid, *ubuf = NULL; int search_timed_out; @@ -469,14 +469,15 @@ } cur_inx = 0; - tempdata = ldif_getdataent(data1,&cur_inx); + cur_len = -1; + tempdata = ldif_getdataent(data1,&cur_inx, &cur_len); while(tempdata) /*decomposing data and creating linked list structure for data*/ { dn = ldif_get_attribute(tempdata, "dn:", NULL); if(!dn) { if(tempdata) free(tempdata); - tempdata = ldif_getdataent(data1,&cur_inx); + tempdata = ldif_getdataent(data1,&cur_inx, &cur_len); continue; } @@ -500,7 +501,7 @@ if (dn) free(dn); if(tempdata) free(tempdata); - tempdata = ldif_getdataent(data1,&cur_inx); + tempdata = ldif_getdataent(data1,&cur_inx, &cur_len); } if(data1) free(data1); @@ -876,7 +877,7 @@ return res; } char * -ldif_getdataent(char *data, int *cur_inx) +ldif_getdataent(char *data, int *cur_inx, int *cur_len) { char *res = NULL; static ActiveObj *current; @@ -886,7 +887,12 @@ if (!data) return NULL; - if ((size = strlen(data)) <= 0) + size = *cur_len; + if (*cur_len < 0) { + size = strlen(data); + *cur_len = size; + } + if (size <= 0) return NULL; if(*cur_inx >= size) @@ -905,10 +911,8 @@ Debug (LDAP_DEBUG_ANY, "memory allocation error\n", 0, 0, 0); return NULL; } - for(no=0; no 0 && res[tmp_inx] == '\n') diff -ur globus_ldapmodules-0.14.orig/slapd_ldif.h globus_ldapmodules-0.14/slapd_ldif.h --- globus_ldapmodules-0.14.orig/slapd_ldif.h 2003-07-03 03:05:32.000000000 +0200 +++ globus_ldapmodules-0.14/slapd_ldif.h 2004-10-28 16:09:14.000000000 +0200 @@ -57,7 +57,7 @@ extern char *ldif_getstrent(FILE *); extern char *ldif_getdatastr(FILE *); -extern char *ldif_getdataent(char *, int *); +extern char *ldif_getdataent(char *, int *, int *); extern char *ldif_get_attribute(char *, char *, int *); extern char *ldif_strip_comments(char *); extern char *ldif_canonicalize_dn(char *);