X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=tests%2Fprogs%2Fslapd-modify.c;h=37e45ec19e339ff26a0639697877782caa0f8f60;hb=6d6a4b7ddae7c38bfb231161a12410b925f60646;hp=847785947ab07194e16ebe1344a11a9244657b50;hpb=dc0eacd40b625258355eea866d62188e5aa7ce3b;p=openldap diff --git a/tests/progs/slapd-modify.c b/tests/progs/slapd-modify.c index 847785947a..37e45ec19e 100644 --- a/tests/progs/slapd-modify.c +++ b/tests/progs/slapd-modify.c @@ -30,10 +30,12 @@ #include #define LOOPS 100 +#define RETRIES 0 static void -do_modify( char *uri, char *host, int port, char *manager, char *passwd, char *entry, - char *attr, char *value, int maxloop ); +do_modify( char *uri, char *host, int port, char *manager, char *passwd, + char *entry, char *attr, char *value, int maxloop, + int maxretries ); static void @@ -49,46 +51,56 @@ main( int argc, char **argv ) { int i; char *uri = NULL; - char *host = "localhost"; - int port = -1; + char *host = "localhost"; + int port = -1; char *manager = NULL; char *passwd = NULL; char *entry = NULL; char *ava = NULL; char *value = NULL; - int loops = LOOPS; + int loops = LOOPS; + int retries = RETRIES; - while ( (i = getopt( argc, argv, "H:h:p:D:w:e:a:l:" )) != EOF ) { + while ( (i = getopt( argc, argv, "H:h:p:D:w:e:a:l:r:" )) != EOF ) { switch( i ) { - case 'H': /* the server uri */ - uri = strdup( optarg ); + case 'H': /* the server uri */ + uri = strdup( optarg ); break; - case 'h': /* the servers host */ - host = strdup( optarg ); + + case 'h': /* the servers host */ + host = strdup( optarg ); break; - case 'p': /* the servers port */ - port = atoi( optarg ); + case 'p': /* the servers port */ + port = atoi( optarg ); break; - case 'D': /* the servers manager */ - manager = strdup( optarg ); + + case 'D': /* the servers manager */ + manager = strdup( optarg ); break; - case 'w': /* the server managers password */ - passwd = strdup( optarg ); + case 'w': /* the server managers password */ + passwd = strdup( optarg ); break; - case 'e': /* entry to modify */ - entry = strdup( optarg ); + + case 'e': /* entry to modify */ + entry = strdup( optarg ); break; - case 'a': - ava = strdup( optarg ); + + case 'a': + ava = strdup( optarg ); break; - case 'l': /* the number of loops */ - loops = atoi( optarg ); + + case 'l': /* the number of loops */ + loops = atoi( optarg ); + break; + + case 'r': + retries = atoi( optarg ); break; - default: - usage( argv[0] ); + default: + usage( argv[0] ); break; } } @@ -118,33 +130,37 @@ main( int argc, char **argv ) while ( *value && isspace( (unsigned char) *value )) value++; - do_modify( uri, host, port, manager, passwd, entry, ava, value, loops ); + do_modify( uri, host, port, manager, passwd, entry, ava, value, + loops, retries ); exit( EXIT_SUCCESS ); } static void do_modify( char *uri, char *host, int port, char *manager, - char *passwd, char *entry, char* attr, char* value, int maxloop ) + char *passwd, char *entry, char* attr, char* value, + int maxloop, int maxretries ) { LDAP *ld = NULL; - int i; + int i = 0, do_retry = maxretries; pid_t pid; int rc = LDAP_SUCCESS; struct ldapmod mod; struct ldapmod *mods[2]; - char *values[2] = { value, NULL }; + char *values[2]; pid = getpid(); + values[0] = value; + values[1] = NULL; mod.mod_op = LDAP_MOD_ADD; mod.mod_type = attr; mod.mod_values = values; mods[0] = &mod; mods[1] = NULL; - +retry:; if ( uri ) { ldap_initialize( &ld, uri ); } else { @@ -161,26 +177,42 @@ do_modify( char *uri, char *host, int port, char *manager, &version ); } - if ( ldap_bind_s( ld, manager, passwd, LDAP_AUTH_SIMPLE ) != LDAP_SUCCESS ) { - ldap_perror( ld, "ldap_bind" ); - exit( EXIT_FAILURE ); + if ( do_retry == maxretries ) { + fprintf( stderr, "PID=%ld - Modify(%d): entry=\"%s\".\n", + (long) pid, maxloop, entry ); } + 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; + } + exit( EXIT_FAILURE ); + } - fprintf( stderr, "PID=%ld - Modify(%d): entry=\"%s\".\n", - (long) pid, maxloop, entry ); - - for ( i = 0; i < maxloop; i++ ) { + for ( ; i < maxloop; i++ ) { mod.mod_op = LDAP_MOD_ADD; - if (( rc = ldap_modify_s( ld, entry, mods )) != LDAP_SUCCESS ) { + rc = ldap_modify_s( ld, entry, mods ); + if ( rc != LDAP_SUCCESS ) { ldap_perror( ld, "ldap_modify" ); + if ( rc == LDAP_BUSY && do_retry > 0 ) { + do_retry--; + goto retry; + } if ( rc != LDAP_NO_SUCH_OBJECT ) break; continue; } mod.mod_op = LDAP_MOD_DELETE; - if (( rc = ldap_modify_s( ld, entry, mods )) != LDAP_SUCCESS ) { + rc = ldap_modify_s( ld, entry, mods ); + if ( rc != LDAP_SUCCESS ) { ldap_perror( ld, "ldap_modify" ); + if ( rc == LDAP_BUSY && do_retry > 0 ) { + do_retry--; + goto retry; + } if ( rc != LDAP_NO_SUCH_OBJECT ) break; continue; }