From f5608df73ebe56ec0aa372dc0f61b5fa634c0ba6 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Fri, 10 Jun 2005 20:21:00 +0000 Subject: [PATCH] Import ITS#3764 from HEAD --- CHANGES | 1 + servers/slapd/slapcat.c | 25 +++++++++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 92fc963e44..8eda784aed 100644 --- a/CHANGES +++ b/CHANGES @@ -11,6 +11,7 @@ OpenLDAP 2.2.27 Engineering Fixed ACL dn=* clause Fixed ACL val default style parsing crasher (ITS#3700) Disabled slapd broken undocumented configuration directive + Fixed slapcat unclean exits (ITS#3764) Fixed libldap sasl connection assert (ITS#3278) Build Environment Improved thread set stack size support (ITS#3691) diff --git a/servers/slapd/slapcat.c b/servers/slapd/slapcat.c index 38602835c7..f8b89c9306 100644 --- a/servers/slapd/slapcat.c +++ b/servers/slapd/slapcat.c @@ -31,6 +31,14 @@ #include "slapcommon.h" +static int gotsig; + +static RETSIGTYPE +slapcat_sig( int sig ) +{ + gotsig=1; +} + int slapcat( int argc, char **argv ) { @@ -41,6 +49,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 +75,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; -- 2.47.2