X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=clients%2Ftools%2Fldapdelete.c;h=2e7d42f82b6ddf4709942b6229fec25b78e6db2a;hb=9bc2cd3987b0bf5b86c2b9be417d7119f2e9d623;hp=101803a8b97ad0f3b6826ba786336618a11405a5;hpb=c57f4401189035baabccfaeafe63e79db27c43b8;p=openldap diff --git a/clients/tools/ldapdelete.c b/clients/tools/ldapdelete.c index 101803a8b9..2e7d42f82b 100644 --- a/clients/tools/ldapdelete.c +++ b/clients/tools/ldapdelete.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1998-2005 The OpenLDAP Foundation. + * Copyright 1998-2006 The OpenLDAP Foundation. * Portions Copyright 1998-2003 Kurt D. Zeilenga. * All rights reserved. * @@ -39,6 +39,7 @@ #include #include #include +#include #include #include "lutil.h" @@ -139,7 +140,7 @@ main( int argc, char **argv ) fp = NULL; - tool_init(); + tool_init( TOOL_DELETE ); prog = lutil_progname( "ldapdelete", argc, argv ); tool_args( argc, argv ); @@ -169,13 +170,11 @@ main( int argc, char **argv ) tool_bind( ld ); - if ( assertion || authzid || manageDSAit || noop ) { - tool_server_controls( ld, NULL, 0 ); - } + tool_server_controls( ld, NULL, 0 ); retval = rc = 0; - if ( fp == NULL ) { + if ( fp == NULL ) { for ( ; optind < argc; ++optind ) { rc = dodelete( ld, argv[ optind ] ); @@ -214,10 +213,10 @@ static int dodelete( if ( verbose ) { printf( _("%sdeleting entry \"%s\"\n"), - (not ? "!" : ""), dn ); + (dont ? "!" : ""), dn ); } - if ( not ) { + if ( dont ) { return LDAP_SUCCESS; } @@ -233,10 +232,25 @@ static int dodelete( return rc; } - rc = ldap_result( ld, LDAP_RES_ANY, LDAP_MSG_ALL, NULL, &res ); - if ( rc < 0 ) { - ldap_perror( ld, "ldapdelete: ldap_result" ); - return rc; + for ( ; ; ) { + struct timeval tv; + + if ( tool_check_abandon( ld, id ) ) { + return LDAP_CANCELLED; + } + + tv.tv_sec = 0; + tv.tv_usec = 100000; + + rc = ldap_result( ld, LDAP_RES_ANY, LDAP_MSG_ALL, &tv, &res ); + if ( rc < 0 ) { + tool_perror( "ldap_result", rc, NULL, NULL, NULL, NULL ); + return rc; + } + + if ( rc != 0 ) { + break; + } } rc = ldap_parse_result( ld, res, &code, &matcheddn, &text, &refs, NULL, 1 ); @@ -247,10 +261,13 @@ static int dodelete( return rc; } - if( verbose || code != LDAP_SUCCESS || - (matcheddn && *matcheddn) || (text && *text) || (refs && *refs) ) + if( code != LDAP_SUCCESS ) { + tool_perror( "ldap_delete", code, NULL, matcheddn, text, refs ); + } else if ( verbose && + ((matcheddn && *matcheddn) || (text && *text) || (refs && *refs) )) { - printf( _("Delete Result: %s (%d)\n"), ldap_err2string( code ), code ); + printf( _("Delete Result: %s (%d)\n"), + ldap_err2string( code ), code ); if( text && *text ) { printf( _("Additional info: %s\n"), text ); @@ -299,7 +316,7 @@ static int deletechildren( rc = ldap_search_ext_s( ld, dn, LDAP_SCOPE_ONELEVEL, NULL, attrs, 1, NULL, NULL, NULL, -1, &res ); if ( rc != LDAP_SUCCESS ) { - ldap_perror( ld, "ldap_search" ); + tool_perror( "ldap_search", rc, NULL, NULL, NULL, NULL ); return( rc ); } @@ -314,15 +331,15 @@ static int deletechildren( char *dn = ldap_get_dn( ld, e ); if( dn == NULL ) { - ldap_perror( ld, "ldap_prune" ); ldap_get_option( ld, LDAP_OPT_ERROR_NUMBER, &rc ); + tool_perror( "ldap_prune", rc, NULL, NULL, NULL, NULL ); ber_memfree( dn ); return rc; } rc = deletechildren( ld, dn ); if ( rc == -1 ) { - ldap_perror( ld, "ldap_prune" ); + tool_perror( "ldap_prune", rc, NULL, NULL, NULL, NULL ); ber_memfree( dn ); return rc; } @@ -331,9 +348,9 @@ static int deletechildren( printf( _("\tremoving %s\n"), dn ); } - rc = ldap_delete_s( ld, dn ); + rc = ldap_delete_ext_s( ld, dn, NULL, NULL ); if ( rc == -1 ) { - ldap_perror( ld, "ldap_delete" ); + tool_perror( "ldap_delete", rc, NULL, NULL, NULL, NULL ); ber_memfree( dn ); return rc; @@ -373,7 +390,7 @@ static int deletechildren( rc = ldap_search_ext_s( ld, dn, LDAP_SCOPE_ONELEVEL, NULL, attrs, 1, ctrls, NULL, NULL, -1, &res_se ); if ( rc != LDAP_SUCCESS ) { - ldap_perror( ld, "ldap_search" ); + tool_perror( "ldap_search", rc, NULL, NULL, NULL, NULL ); return( rc ); } ber_free( ber, 1 ); @@ -389,8 +406,8 @@ static int deletechildren( char *dn = ldap_get_dn( ld, e ); if( dn == NULL ) { - ldap_perror( ld, "ldap_prune" ); ldap_get_option( ld, LDAP_OPT_ERROR_NUMBER, &rc ); + tool_perror( "ldap_prune", rc, NULL, NULL, NULL, NULL ); ber_memfree( dn ); return rc; } @@ -399,9 +416,9 @@ static int deletechildren( printf( _("\tremoving %s\n"), dn ); } - rc = ldap_delete_s( ld, dn ); + rc = ldap_delete_ext_s( ld, dn, NULL, NULL ); if ( rc == -1 ) { - ldap_perror( ld, "ldap_delete" ); + tool_perror( "ldap_delete", rc, NULL, NULL, NULL, NULL ); ber_memfree( dn ); return rc;