- /*
- * Do a one level search at dn for subentry children.
- */
-
- if ((ber = ber_alloc_t(LBER_USE_DER)) == NULL) {
- return EXIT_FAILURE;
- }
- rc = ber_printf( ber, "b", 1 );
- if ( rc == -1 ) {
- ber_free( ber, 1 );
- fprintf( stderr, _("Subentries control encoding error!\n"));
- return EXIT_FAILURE;
- }
- if ( ber_flatten2( ber, &c.ldctl_value, 0 ) == -1 ) {
- return EXIT_FAILURE;
- }
- c.ldctl_oid = LDAP_CONTROL_SUBENTRIES;
- c.ldctl_iscritical = 1;
- ctrls[0] = &c;
- ctrls[1] = NULL;
-
- rc = ldap_search_ext_s( ld, dn, LDAP_SCOPE_ONELEVEL, NULL, attrs, 1,
- ctrls, NULL, NULL, -1, &res_se );
- if ( rc != LDAP_SUCCESS ) {
- tool_perror( "ldap_search", rc, NULL, NULL, NULL, NULL );
- return( rc );
- }
- ber_free( ber, 1 );
-
- entries = ldap_count_entries( ld, res_se );
-
- if ( entries > 0 ) {
- int i;
-
- for (e = ldap_first_entry( ld, res_se ), i = 0; e != NULL;
- e = ldap_next_entry( ld, e ), i++ )
- {
- char *dn = ldap_get_dn( ld, e );
-
- if( dn == NULL ) {
- ldap_get_option( ld, LDAP_OPT_RESULT_CODE, &rc );
- tool_perror( "ldap_prune", rc, NULL, NULL, NULL, NULL );
- ber_memfree( dn );
- return rc;
- }
-
- if ( verbose ) {
- printf( _("\tremoving %s\n"), dn );
- }
-
- rc = ldap_delete_ext_s( ld, dn, NULL, NULL );
- if ( rc == -1 ) {
- tool_perror( "ldap_delete", rc, NULL, NULL, NULL, NULL );
- ber_memfree( dn );
- return rc;
-
- }
-
- if ( verbose ) {
- printf( _("\t%s removed\n"), dn );
- }
-
- ber_memfree( dn );
- }