]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/slapcat.c
ITS#4954 c_sasl_dn fix from HEAD
[openldap] / servers / slapd / slapcat.c
index 7daeaa645a185f0c25be1699e3cbad8cc2c07793..73732963fc72d78d5595fbc98378a276ed99f313 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2004 The OpenLDAP Foundation.
+ * Copyright 1998-2007 The OpenLDAP Foundation.
  * Portions Copyright 1998-2003 Kurt D. Zeilenga.
  * Portions Copyright 2003 IBM Corporation.
  * All rights reserved.
 #include <ac/string.h>
 
 #include "slapcommon.h"
+#include "ldif.h"
+
+static int gotsig;
+
+static RETSIGTYPE
+slapcat_sig( int sig )
+{
+       gotsig=1;
+}
 
 int
 slapcat( int argc, char **argv )
@@ -41,6 +50,15 @@ slapcat( int argc, char **argv )
 
        slap_tool_init( progname, SLAPCAT, argc, argv );
 
+#ifdef SIGPIPE
+       (void) SIGNAL( SIGPIPE, slapcat_sig );
+#endif
+#ifdef SIGHUP
+       (void) SIGNAL( SIGHUP, slapcat_sig );
+#endif
+       (void) SIGNAL( SIGINT, slapcat_sig );
+       (void) SIGNAL( SIGTERM, slapcat_sig );
+
        if( !be->be_entry_open ||
                !be->be_entry_close ||
                !be->be_entry_first ||
@@ -58,15 +76,19 @@ slapcat( int argc, char **argv )
                exit( EXIT_FAILURE );
        }
 
+       op.o_bd = be;
        for ( id = be->be_entry_first( be );
                id != NOID;
                id = be->be_entry_next( be ) )
        {
                char *data;
                int len;
-               Entry* e = be->be_entry_get( be, id );
-               op.o_bd = be;
+               Entry* e;
 
+               if ( gotsig )
+                       break;
+
+               e = be->be_entry_get( be, id );
                if ( e == NULL ) {
                        printf("# no data for entry id=%08lx\n\n", (long) id );
                        rc = EXIT_FAILURE;
@@ -87,20 +109,6 @@ slapcat( int argc, char **argv )
                        }
                }
 
-               if ( retrieve_ctxcsn == 0 ) {
-                       if ( is_entry_syncProviderSubentry( e ) ) {
-                               be_entry_release_r( &op, e );
-                               continue;
-                       }
-               }
-
-               if ( retrieve_synccookie == 0 ) {
-                       if ( is_entry_syncConsumerSubentry( e ) ) {
-                               be_entry_release_r( &op, e );
-                               continue;
-                       }
-               }
-
                if( verbose ) {
                        printf( "# id=%08lx\n", (long) id );
                }
@@ -115,8 +123,8 @@ slapcat( int argc, char **argv )
                        break;
                }
 
-               fputs( data, ldiffp );
-               fputs( "\n", ldiffp );
+               fputs( data, ldiffp->fp );
+               fputs( "\n", ldiffp->fp );
        }
 
        be->be_entry_close( be );