]> git.sur5r.net Git - openldap/blobdiff - tests/progs/slapd-addel.c
tavl_delete: copy balance factor
[openldap] / tests / progs / slapd-addel.c
index c96cdccd3528ba2db1f464dff1fba86f36ea58ea..082a7aa3d530e4ab770ca9d34304971ba74aeef4 100644 (file)
@@ -41,12 +41,20 @@ get_add_entry( char *filename, LDAPMod ***mods );
 
 static void
 do_addel( char *uri, char *host, int port, char *manager, char *passwd,
-       char *dn, LDAPMod **attrs, int maxloop, int maxretries );
+       char *dn, LDAPMod **attrs, int maxloop, int maxretries, int delay );
 
 static void
 usage( char *name )
 {
-       fprintf( stderr, "usage: %s [-h <host>] -p port -D <managerDN> -w <passwd> -f <addfile> [-l <loops>]\n",
+        fprintf( stderr,
+               "usage: %s "
+               "-H <uri> | ([-h <host>] -p <port>) "
+               "-D <manager> "
+               "-w <passwd> "
+               "-f <addfile> "
+               "[-l <loops>] "
+               "[-r <maxretries>] "
+               "[-t <delay>]\n",
                        name );
        exit( EXIT_FAILURE );
 }
@@ -64,9 +72,10 @@ main( int argc, char **argv )
        char            *entry = NULL;
        int             loops = LOOPS;
        int             retries = RETRIES;
+       int             delay = 0;
        LDAPMod         **attrs = NULL;
 
-       while ( (i = getopt( argc, argv, "H:h:p:D:w:f:l:r:" )) != EOF ) {
+       while ( (i = getopt( argc, argv, "H:h:p:D:w:f:l:r:t:" )) != EOF ) {
                switch( i ) {
                case 'H':               /* the server's URI */
                        uri = strdup( optarg );
@@ -96,10 +105,14 @@ main( int argc, char **argv )
                        loops = atoi( optarg );
                        break;
 
-               case 'r':
+               case 'r':               /* number of retries */
                        retries = atoi( optarg );
                        break;
 
+               case 't':               /* delay in seconds */
+                       delay = atoi( optarg );
+                       break;
+
                default:
                        usage( argv[0] );
                        break;
@@ -128,7 +141,7 @@ main( int argc, char **argv )
        }
 
        do_addel( uri, host, port, manager, passwd, entry, attrs,
-                       loops, retries );
+                       loops, retries, delay );
 
        exit( EXIT_SUCCESS );
 }
@@ -258,7 +271,8 @@ do_addel(
        char *entry,
        LDAPMod **attrs,
        int maxloop,
-       int maxretries
+       int maxretries,
+       int delay
 )
 {
        LDAP    *ld = NULL;
@@ -291,9 +305,19 @@ retry:;
        rc = ldap_bind_s( ld, manager, passwd, LDAP_AUTH_SIMPLE );
        if ( rc != LDAP_SUCCESS ) {
                ldap_perror( ld, "ldap_bind" );
-               if ( rc == LDAP_BUSY && do_retry > 0 ) {
-                       do_retry--;
-                       goto retry;
+               switch ( rc ) {
+               case LDAP_BUSY:
+               case LDAP_UNAVAILABLE:
+                       if ( do_retry > 0 ) {
+                               do_retry--;
+                               if ( delay != 0 ) {
+                                   sleep( delay );
+                               }
+                               goto retry;
+                       }
+               /* fallthru */
+               default:
+                       break;
                }
                exit( EXIT_FAILURE );
        }