]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-shell/result.c
Cleanup up LDAP_CLIENT_UPDATE code... including some bug fixing.
[openldap] / servers / slapd / back-shell / result.c
index 4d9f39c2f557b093fe63952e874ee4790c680604..ded78f03c489bca4238d1ea26f69a002c601051f 100644 (file)
@@ -1,10 +1,15 @@
 /* result.c - shell backend result reading function */
 /* $OpenLDAP$ */
+/*
+ * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
+ * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+ */
 
 #include "portable.h"
 
 #include <stdio.h>
 
+#include <ac/errno.h>
 #include <ac/string.h>
 #include <ac/socket.h>
 #include <ac/unistd.h>
@@ -18,7 +23,7 @@ read_and_send_results(
     Connection *conn,
     Operation  *op,
     FILE       *fp,
-    char       **attrs,
+    AttributeName *attrs,
     int                attrsonly
 )
 {
@@ -34,17 +39,35 @@ read_and_send_results(
        buf[0] = '\0';
        bsize = BUFSIZ;
        bp = buf;
-       while ( fgets( line, sizeof(line), fp ) != NULL ) {
+       while ( !feof(fp) ) {
+               errno = 0;
+               if ( fgets( line, sizeof(line), fp ) == NULL ) {
+                       if ( errno == EINTR ) continue;
+
+                       Debug( LDAP_DEBUG_ANY, "shell: fgets failed: %s (%d)\n",
+                               strerror(errno), errno, 0 ); 
+                       break;
+               }
+
                Debug( LDAP_DEBUG_SHELL, "shell search reading line (%s)\n",
                    line, 0, 0 );
+
+               /* ignore lines beginning with # (LDIFv1 comments) */
+               if ( *line == '#' ) {
+                       continue;
+               }
+
                /* ignore lines beginning with DEBUG: */
                if ( strncasecmp( line, "DEBUG:", 6 ) == 0 ) {
                        continue;
                }
+
                len = strlen( line );
                while ( bp + len - buf > bsize ) {
+                       size_t offset = bp - buf;
                        bsize += BUFSIZ;
                        buf = (char *) ch_realloc( buf, bsize );
+                       bp = &buf[offset];
                }
                strcpy( bp, line );
                bp += len;
@@ -59,8 +82,8 @@ read_and_send_results(
                                Debug( LDAP_DEBUG_ANY, "str2entry(%s) failed\n",
                                    buf, 0, 0 );
                        } else {
-                               send_search_entry( be, conn, op, e, attrs,
-                                   attrsonly, NULL );
+                               send_search_entry( be, conn, op, e,
+                                       attrs, attrsonly, NULL );
                                entry_free( e );
                        }
 
@@ -87,7 +110,7 @@ print_suffixes(
 {
        int     i;
 
-       for ( i = 0; be->be_suffix[i] != NULL; i++ ) {
-               fprintf( fp, "suffix: %s\n", be->be_suffix[i] );
+       for ( i = 0; be->be_suffix[i].bv_val != NULL; i++ ) {
+               fprintf( fp, "suffix: %s\n", be->be_suffix[i].bv_val );
        }
 }