]> git.sur5r.net Git - openldap/blobdiff - clients/tools/ldapdelete.c
ITS#2128, setvbuf is unreliable
[openldap] / clients / tools / ldapdelete.c
index 6abefbe2e1258590b4c3652697b5c66b39a90029..bc9d057dda9af71130307bbf8f2eb6b4a79d3aeb 100644 (file)
@@ -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;
                        }
                }
        }