From: Howard Chu Date: Fri, 10 Jun 2005 20:21:00 +0000 (+0000) Subject: Import ITS#3764 from HEAD X-Git-Tag: OPENLDAP_REL_ENG_2_2_27~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f5608df73ebe56ec0aa372dc0f61b5fa634c0ba6;p=thirdparty%2Fopenldap.git Import ITS#3764 from HEAD --- 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;