X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=clients%2Ftools%2Fldapdelete.c;h=bc9d057dda9af71130307bbf8f2eb6b4a79d3aeb;hb=10a194feb5f227369c11317c0ab9988231593784;hp=6abefbe2e1258590b4c3652697b5c66b39a90029;hpb=d912c2c711b2de7f9ca498aca25bea5627140614;p=openldap diff --git a/clients/tools/ldapdelete.c b/clients/tools/ldapdelete.c index 6abefbe2e1..bc9d057dda 100644 --- a/clients/tools/ldapdelete.c +++ b/clients/tools/ldapdelete.c @@ -196,6 +196,10 @@ main( int argc, char **argv ) } if ( strcasecmp( control, "manageDSAit" ) == 0 ) { + if( manageDSAit ) { + fprintf( stderr, "manageDSAit control previously specified"); + return EXIT_FAILURE; + } if( cvalue != NULL ) { fprintf( stderr, "manageDSAit: no control value expected" ); usage(prog); @@ -207,6 +211,10 @@ main( int argc, char **argv ) break; } else if ( strcasecmp( control, "noop" ) == 0 ) { + if( noop ) { + fprintf( stderr, "noop control previously specified"); + return EXIT_FAILURE; + } if( cvalue != NULL ) { fprintf( stderr, "noop: no control value expected" ); usage(prog); @@ -694,25 +702,38 @@ main( int argc, char **argv ) } } - if ( manageDSAit ) { - int err; - LDAPControl c; - LDAPControl *ctrls[2]; - ctrls[0] = &c; - ctrls[1] = NULL; + if ( manageDSAit || noop ) { + int err, i = 0; + LDAPControl c1, c2; + LDAPControl *ctrls[3]; - c.ldctl_oid = LDAP_CONTROL_MANAGEDSAIT; - c.ldctl_value.bv_val = NULL; - c.ldctl_value.bv_len = 0; - c.ldctl_iscritical = manageDSAit > 1; + if ( manageDSAit ) { + ctrls[i++] = &c1; + ctrls[i] = NULL; + c1.ldctl_oid = LDAP_CONTROL_MANAGEDSAIT; + c1.ldctl_value.bv_val = NULL; + c1.ldctl_value.bv_len = 0; + c1.ldctl_iscritical = manageDSAit > 1; + } + + if ( noop ) { + ctrls[i++] = &c2; + ctrls[i] = NULL; + c2.ldctl_oid = LDAP_CONTROL_NOOP; + c2.ldctl_value.bv_val = NULL; + c2.ldctl_value.bv_len = 0; + c2.ldctl_iscritical = noop > 1; + } + err = ldap_set_option( ld, LDAP_OPT_SERVER_CONTROLS, ctrls ); if( err != LDAP_OPT_SUCCESS ) { - fprintf( stderr, "Could not set ManageDSAit %scontrol\n", - c.ldctl_iscritical ? "critical " : "" ); - if( c.ldctl_iscritical ) { - exit( EXIT_FAILURE ); + fprintf( stderr, "Could not set %scontrols\n", + (c1.ldctl_iscritical || c2.ldctl_iscritical) + ? "critical " : "" ); + if ( c1.ldctl_iscritical && c2.ldctl_iscritical ) { + return EXIT_FAILURE; } } }