mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-03-07 14:18:15 +08:00
add "retry" switch (currently needed to stress-test back-meta); defaults to old behavior
This commit is contained in:
parent
7496ebeb35
commit
c66a92f935
@ -34,13 +34,14 @@
|
||||
#include <ldap.h>
|
||||
|
||||
#define LOOPS 100
|
||||
#define RETRIES 0
|
||||
|
||||
static char *
|
||||
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 );
|
||||
char *dn, LDAPMod **attrs, int maxloop, int maxretries );
|
||||
|
||||
static void
|
||||
usage( char *name )
|
||||
@ -54,48 +55,54 @@ int
|
||||
main( int argc, char **argv )
|
||||
{
|
||||
int i;
|
||||
char *host = "localhost";
|
||||
char *host = "localhost";
|
||||
char *uri = NULL;
|
||||
int port = -1;
|
||||
int port = -1;
|
||||
char *manager = NULL;
|
||||
char *passwd = NULL;
|
||||
char *filename = NULL;
|
||||
char *entry = NULL;
|
||||
int loops = LOOPS;
|
||||
LDAPMod **attrs = NULL;
|
||||
int loops = LOOPS;
|
||||
int retries = RETRIES;
|
||||
LDAPMod **attrs = NULL;
|
||||
|
||||
while ( (i = getopt( argc, argv, "H:h:p:D:w:f:l:" )) != EOF ) {
|
||||
while ( (i = getopt( argc, argv, "H:h:p:D:w:f:l:r:" )) != EOF ) {
|
||||
switch( i ) {
|
||||
case 'H': /* the server's URI */
|
||||
uri = strdup( optarg );
|
||||
break;
|
||||
case 'h': /* the servers host */
|
||||
host = strdup( optarg );
|
||||
case 'H': /* the server's URI */
|
||||
uri = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'p': /* the servers port */
|
||||
port = atoi( optarg );
|
||||
break;
|
||||
|
||||
case 'D': /* the servers manager */
|
||||
manager = strdup( optarg );
|
||||
case 'h': /* the servers host */
|
||||
host = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'w': /* the server managers password */
|
||||
passwd = strdup( optarg );
|
||||
case 'p': /* the servers port */
|
||||
port = atoi( optarg );
|
||||
break;
|
||||
|
||||
case 'f': /* file with entry search request */
|
||||
filename = strdup( optarg );
|
||||
break;
|
||||
case 'D': /* the servers manager */
|
||||
manager = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'l': /* the number of loops */
|
||||
loops = atoi( optarg );
|
||||
break;
|
||||
case 'w': /* the server managers password */
|
||||
passwd = strdup( optarg );
|
||||
break;
|
||||
|
||||
default:
|
||||
usage( argv[0] );
|
||||
break;
|
||||
case 'f': /* file with entry search request */
|
||||
filename = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'l': /* the number of loops */
|
||||
loops = atoi( optarg );
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
retries = atoi( optarg );
|
||||
break;
|
||||
|
||||
default:
|
||||
usage( argv[0] );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -120,7 +127,8 @@ main( int argc, char **argv )
|
||||
|
||||
}
|
||||
|
||||
do_addel( uri, host, port, manager, passwd, entry, attrs, loops );
|
||||
do_addel( uri, host, port, manager, passwd, entry, attrs,
|
||||
loops, retries );
|
||||
|
||||
exit( EXIT_SUCCESS );
|
||||
}
|
||||
@ -249,14 +257,16 @@ do_addel(
|
||||
char *passwd,
|
||||
char *entry,
|
||||
LDAPMod **attrs,
|
||||
int maxloop
|
||||
int maxloop,
|
||||
int maxretries
|
||||
)
|
||||
{
|
||||
LDAP *ld = NULL;
|
||||
int i;
|
||||
int i = 0, do_retry = maxretries;
|
||||
pid_t pid = getpid();
|
||||
int rc = LDAP_SUCCESS;
|
||||
|
||||
retry:;
|
||||
if ( uri ) {
|
||||
ldap_initialize( &ld, uri );
|
||||
} else {
|
||||
@ -273,22 +283,31 @@ do_addel(
|
||||
&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 - Add/Delete(%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 - Add/Delete(%d): entry=\"%s\".\n",
|
||||
(long) pid, maxloop, entry );
|
||||
|
||||
for ( i = 0; i < maxloop; i++ ) {
|
||||
for ( ; i < maxloop; i++ ) {
|
||||
|
||||
/* add the entry */
|
||||
rc = ldap_add_s( ld, entry, attrs );
|
||||
if ( rc != LDAP_SUCCESS ) {
|
||||
ldap_perror( ld, "ldap_add" );
|
||||
if ( rc == LDAP_BUSY && do_retry > 0 ) {
|
||||
do_retry--;
|
||||
goto retry;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
@ -303,10 +322,12 @@ do_addel(
|
||||
rc = ldap_delete_s( ld, entry );
|
||||
if ( rc != LDAP_SUCCESS ) {
|
||||
ldap_perror( ld, "ldap_delete" );
|
||||
if ( rc == LDAP_BUSY && do_retry > 0 ) {
|
||||
do_retry--;
|
||||
goto retry;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fprintf( stderr, " PID=%ld - Add/Delete done (%d).\n", (long) pid, rc );
|
||||
|
@ -30,10 +30,12 @@
|
||||
#include <ldap.h>
|
||||
|
||||
#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 );
|
||||
break;
|
||||
case 'h': /* the servers host */
|
||||
host = strdup( optarg );
|
||||
case 'H': /* the server uri */
|
||||
uri = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'p': /* the servers port */
|
||||
port = atoi( optarg );
|
||||
break;
|
||||
case 'D': /* the servers manager */
|
||||
manager = strdup( optarg );
|
||||
case 'h': /* the servers host */
|
||||
host = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'w': /* the server managers password */
|
||||
passwd = strdup( optarg );
|
||||
break;
|
||||
case 'e': /* entry to modify */
|
||||
entry = strdup( optarg );
|
||||
break;
|
||||
case 'a':
|
||||
ava = strdup( optarg );
|
||||
break;
|
||||
case 'l': /* the number of loops */
|
||||
loops = atoi( optarg );
|
||||
case 'p': /* the servers port */
|
||||
port = atoi( optarg );
|
||||
break;
|
||||
|
||||
default:
|
||||
usage( argv[0] );
|
||||
case 'D': /* the servers manager */
|
||||
manager = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'w': /* the server managers password */
|
||||
passwd = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'e': /* entry to modify */
|
||||
entry = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'a':
|
||||
ava = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'l': /* the number of loops */
|
||||
loops = atoi( optarg );
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
retries = atoi( optarg );
|
||||
break;
|
||||
|
||||
default:
|
||||
usage( argv[0] );
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -118,17 +130,19 @@ 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;
|
||||
|
||||
@ -144,7 +158,7 @@ do_modify( char *uri, char *host, int port, char *manager,
|
||||
mods[0] = &mod;
|
||||
mods[1] = NULL;
|
||||
|
||||
|
||||
retry:;
|
||||
if ( uri ) {
|
||||
ldap_initialize( &ld, uri );
|
||||
} else {
|
||||
@ -161,26 +175,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 );
|
||||
}
|
||||
|
||||
|
||||
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 );
|
||||
}
|
||||
|
||||
for ( i = 0; 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;
|
||||
}
|
||||
|
@ -34,9 +34,11 @@
|
||||
#include <ldap.h>
|
||||
|
||||
#define LOOPS 100
|
||||
#define RETRIES 0
|
||||
|
||||
static void
|
||||
do_modrdn( char *uri, char *host, int port, char *manager, char *passwd, char *entry, int maxloop );
|
||||
do_modrdn( char *uri, char *host, int port, char *manager, char *passwd,
|
||||
char *entry, int maxloop, int maxretries );
|
||||
|
||||
static void
|
||||
usage( char *name )
|
||||
@ -51,43 +53,51 @@ 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;
|
||||
int loops = LOOPS;
|
||||
int loops = LOOPS;
|
||||
int retries = RETRIES;
|
||||
|
||||
while ( (i = getopt( argc, argv, "H:h:p:D:w:e:l:" )) != EOF ) {
|
||||
while ( (i = getopt( argc, argv, "H:h:p:D:w:e:l:r:" )) != EOF ) {
|
||||
switch( i ) {
|
||||
case 'H': /* the server uri */
|
||||
uri = strdup( optarg );
|
||||
break;
|
||||
case 'h': /* the servers host */
|
||||
host = strdup( optarg );
|
||||
case 'H': /* the server uri */
|
||||
uri = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'p': /* the servers port */
|
||||
port = atoi( optarg );
|
||||
break;
|
||||
case 'D': /* the servers manager */
|
||||
manager = strdup( optarg );
|
||||
case 'h': /* the servers host */
|
||||
host = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'w': /* the server managers password */
|
||||
passwd = strdup( optarg );
|
||||
case 'p': /* the servers port */
|
||||
port = atoi( optarg );
|
||||
break;
|
||||
case 'e': /* entry to rename */
|
||||
entry = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'l': /* the number of loops */
|
||||
loops = atoi( optarg );
|
||||
break;
|
||||
case 'D': /* the servers manager */
|
||||
manager = strdup( optarg );
|
||||
break;
|
||||
|
||||
default:
|
||||
usage( argv[0] );
|
||||
break;
|
||||
case 'w': /* the server managers password */
|
||||
passwd = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'e': /* entry to rename */
|
||||
entry = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'l': /* the number of loops */
|
||||
loops = atoi( optarg );
|
||||
break;
|
||||
|
||||
case 'r': /* the number of retries */
|
||||
retries = atoi( optarg );
|
||||
break;
|
||||
|
||||
default:
|
||||
usage( argv[0] );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -102,17 +112,17 @@ main( int argc, char **argv )
|
||||
|
||||
}
|
||||
|
||||
do_modrdn( uri, host, port, manager, passwd, entry, loops );
|
||||
do_modrdn( uri, host, port, manager, passwd, entry, loops, retries );
|
||||
exit( EXIT_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
do_modrdn( char *uri, char *host, int port, char *manager,
|
||||
char *passwd, char *entry, int maxloop )
|
||||
char *passwd, char *entry, int maxloop, int maxretries )
|
||||
{
|
||||
LDAP *ld = NULL;
|
||||
int i;
|
||||
int i = 0, do_retry = maxretries;
|
||||
pid_t pid;
|
||||
char *DNs[2];
|
||||
char *rdns[2];
|
||||
@ -141,7 +151,8 @@ do_modrdn( char *uri, char *host, int port, char *manager,
|
||||
rdns[0] = strdup( DNs[1] );
|
||||
DNs[1][i] = ',';
|
||||
}
|
||||
|
||||
|
||||
retry:;
|
||||
if ( uri ) {
|
||||
ldap_initialize( &ld, uri );
|
||||
} else {
|
||||
@ -158,25 +169,39 @@ do_modrdn( 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 - Modrdn(%d): entry=\"%s\".\n",
|
||||
(long) pid, maxloop, entry );
|
||||
}
|
||||
|
||||
|
||||
fprintf( stderr, "PID=%ld - Modrdn(%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 );
|
||||
}
|
||||
|
||||
for ( i = 0; i < maxloop; i++ ) {
|
||||
if (( rc = ldap_modrdn2_s( ld, DNs[0], rdns[0], 0 ))
|
||||
!= LDAP_SUCCESS ) {
|
||||
rc = ldap_modrdn2_s( ld, DNs[0], rdns[0], 0 );
|
||||
if ( rc != LDAP_SUCCESS ) {
|
||||
ldap_perror( ld, "ldap_modrdn" );
|
||||
if ( rc == LDAP_BUSY && do_retry > 0 ) {
|
||||
do_retry--;
|
||||
goto retry;
|
||||
}
|
||||
if ( rc != LDAP_NO_SUCH_OBJECT ) break;
|
||||
continue;
|
||||
}
|
||||
if (( rc = ldap_modrdn2_s( ld, DNs[1], rdns[1], 1 ))
|
||||
!= LDAP_SUCCESS ) {
|
||||
rc = ldap_modrdn2_s( ld, DNs[1], rdns[1], 1 );
|
||||
if ( rc != LDAP_SUCCESS ) {
|
||||
ldap_perror( ld, "ldap_modrdn" );
|
||||
if ( rc == LDAP_BUSY && do_retry > 0 ) {
|
||||
do_retry--;
|
||||
goto retry;
|
||||
}
|
||||
if ( rc != LDAP_NO_SUCH_OBJECT ) break;
|
||||
continue;
|
||||
}
|
||||
|
@ -34,9 +34,11 @@
|
||||
#include <ldap.h>
|
||||
|
||||
#define LOOPS 100
|
||||
#define RETRIES 0
|
||||
|
||||
static void
|
||||
do_read( char *uri, char *host, int port, char *entry, int maxloop );
|
||||
do_read( char *uri, char *host, int port, char *entry, int maxloop,
|
||||
int maxretries );
|
||||
|
||||
static void
|
||||
usage( char *name )
|
||||
@ -51,35 +53,41 @@ main( int argc, char **argv )
|
||||
{
|
||||
int i;
|
||||
char *uri = NULL;
|
||||
char *host = "localhost";
|
||||
int port = -1;
|
||||
char *host = "localhost";
|
||||
int port = -1;
|
||||
char *entry = NULL;
|
||||
int loops = LOOPS;
|
||||
int loops = LOOPS;
|
||||
int retries = RETRIES;
|
||||
|
||||
while ( (i = getopt( argc, argv, "H:h:p:e:l:" )) != EOF ) {
|
||||
while ( (i = getopt( argc, argv, "H:h:p:e:l:r:" )) != EOF ) {
|
||||
switch( i ) {
|
||||
case 'H': /* the server uri */
|
||||
uri = strdup( optarg );
|
||||
break;
|
||||
case 'h': /* the servers host */
|
||||
host = strdup( optarg );
|
||||
case 'H': /* the server uri */
|
||||
uri = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'p': /* the servers port */
|
||||
port = atoi( optarg );
|
||||
break;
|
||||
case 'h': /* the servers host */
|
||||
host = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'e': /* file with entry search request */
|
||||
entry = strdup( optarg );
|
||||
break;
|
||||
case 'p': /* the servers port */
|
||||
port = atoi( optarg );
|
||||
break;
|
||||
|
||||
case 'l': /* the number of loops */
|
||||
loops = atoi( optarg );
|
||||
break;
|
||||
case 'e': /* DN to search for */
|
||||
entry = strdup( optarg );
|
||||
break;
|
||||
|
||||
default:
|
||||
usage( argv[0] );
|
||||
break;
|
||||
case 'l': /* the number of loops */
|
||||
loops = atoi( optarg );
|
||||
break;
|
||||
|
||||
case 'r': /* the number of retries */
|
||||
retries = atoi( optarg );
|
||||
break;
|
||||
|
||||
default:
|
||||
usage( argv[0] );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -87,27 +95,27 @@ main( int argc, char **argv )
|
||||
usage( argv[0] );
|
||||
|
||||
if ( *entry == '\0' ) {
|
||||
|
||||
fprintf( stderr, "%s: invalid EMPTY entry DN.\n",
|
||||
argv[0] );
|
||||
exit( EXIT_FAILURE );
|
||||
|
||||
}
|
||||
|
||||
do_read( uri, host, port, entry, ( 20 * loops ));
|
||||
do_read( uri, host, port, entry, ( 20 * loops ), retries );
|
||||
exit( EXIT_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
do_read( char *uri, char *host, int port, char *entry, int maxloop )
|
||||
do_read( char *uri, char *host, int port, char *entry, int maxloop,
|
||||
int maxretries )
|
||||
{
|
||||
LDAP *ld = NULL;
|
||||
int i;
|
||||
int i = 0, do_retry = maxretries;
|
||||
char *attrs[] = { "1.1", NULL };
|
||||
pid_t pid = getpid();
|
||||
int rc = LDAP_SUCCESS;
|
||||
|
||||
|
||||
retry:;
|
||||
if ( uri ) {
|
||||
ldap_initialize( &ld, uri );
|
||||
} else {
|
||||
@ -124,22 +132,32 @@ do_read( char *uri, char *host, int port, char *entry, int maxloop )
|
||||
&version );
|
||||
}
|
||||
|
||||
if ( ldap_bind_s( ld, NULL, NULL, LDAP_AUTH_SIMPLE ) != LDAP_SUCCESS ) {
|
||||
ldap_perror( ld, "ldap_bind" );
|
||||
exit( EXIT_FAILURE );
|
||||
if ( do_retry == maxretries ) {
|
||||
fprintf( stderr, "PID=%ld - Read(%d): entry=\"%s\".\n",
|
||||
(long) pid, maxloop, entry );
|
||||
}
|
||||
|
||||
rc = ldap_bind_s( ld, NULL, NULL, 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 - Read(%d): entry=\"%s\".\n",
|
||||
(long) pid, maxloop, entry );
|
||||
|
||||
for ( i = 0; i < maxloop; i++ ) {
|
||||
for ( ; i < maxloop; i++ ) {
|
||||
LDAPMessage *res;
|
||||
|
||||
rc = ldap_search_s( ld, entry, LDAP_SCOPE_BASE,
|
||||
NULL, attrs, 1, &res );
|
||||
if ( rc != LDAP_SUCCESS ) {
|
||||
ldap_perror( ld, "ldap_read" );
|
||||
if ( rc == LDAP_BUSY && do_retry > 0 ) {
|
||||
do_retry--;
|
||||
goto retry;
|
||||
}
|
||||
if ( rc != LDAP_NO_SUCH_OBJECT ) break;
|
||||
continue;
|
||||
|
||||
@ -153,4 +171,3 @@ do_read( char *uri, char *host, int port, char *entry, int maxloop )
|
||||
ldap_unbind( ld );
|
||||
}
|
||||
|
||||
|
||||
|
@ -34,9 +34,11 @@
|
||||
#include <ldap.h>
|
||||
|
||||
#define LOOPS 100
|
||||
#define RETRIES 0
|
||||
|
||||
static void
|
||||
do_search( char *uri, char *host, int port, char *manager, char *passwd, char *sbase, char *filter, int maxloop );
|
||||
do_search( char *uri, char *host, int port, char *manager, char *passwd,
|
||||
char *sbase, char *filter, int maxloop, int maxretries );
|
||||
|
||||
static void
|
||||
usage( char *name )
|
||||
@ -51,50 +53,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 *sbase = NULL;
|
||||
char *sbase = NULL;
|
||||
char *filter = NULL;
|
||||
int loops = LOOPS;
|
||||
int loops = LOOPS;
|
||||
int retries = RETRIES;
|
||||
|
||||
while ( (i = getopt( argc, argv, "b:D:f:H:h:l:p:w:" )) != EOF ) {
|
||||
while ( (i = getopt( argc, argv, "b:D:f:H:h:l:p:w:r:" )) != EOF ) {
|
||||
switch( i ) {
|
||||
case 'H': /* the server uri */
|
||||
uri = strdup( optarg );
|
||||
break;
|
||||
case 'h': /* the servers host */
|
||||
host = strdup( optarg );
|
||||
case 'H': /* the server uri */
|
||||
uri = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'p': /* the servers port */
|
||||
port = atoi( optarg );
|
||||
break;
|
||||
|
||||
case 'D': /* the servers manager */
|
||||
manager = strdup( optarg );
|
||||
case 'h': /* the servers host */
|
||||
host = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'w': /* the server managers password */
|
||||
passwd = strdup( optarg );
|
||||
case 'p': /* the servers port */
|
||||
port = atoi( optarg );
|
||||
break;
|
||||
|
||||
case 'b': /* file with search base */
|
||||
sbase = strdup( optarg );
|
||||
case 'D': /* the servers manager */
|
||||
manager = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'f': /* the search request */
|
||||
filter = strdup( optarg );
|
||||
break;
|
||||
case 'w': /* the server managers password */
|
||||
passwd = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'l': /* number of loops */
|
||||
loops = atoi( optarg );
|
||||
break;
|
||||
case 'b': /* file with search base */
|
||||
sbase = strdup( optarg );
|
||||
break;
|
||||
|
||||
default:
|
||||
usage( argv[0] );
|
||||
break;
|
||||
case 'f': /* the search request */
|
||||
filter = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'l': /* number of loops */
|
||||
loops = atoi( optarg );
|
||||
break;
|
||||
|
||||
case 'r': /* number of retries */
|
||||
retries = atoi( optarg );
|
||||
break;
|
||||
|
||||
default:
|
||||
usage( argv[0] );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -109,20 +117,23 @@ main( int argc, char **argv )
|
||||
|
||||
}
|
||||
|
||||
do_search( uri, host, port, manager, passwd, sbase, filter, ( 10 * loops ));
|
||||
do_search( uri, host, port, manager, passwd, sbase, filter,
|
||||
( 10 * loops ), retries );
|
||||
exit( EXIT_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
do_search( char *uri, char *host, int port, char *manager, char *passwd, char *sbase, char *filter, int maxloop )
|
||||
do_search( char *uri, char *host, int port, char *manager, char *passwd,
|
||||
char *sbase, char *filter, int maxloop, int maxretries )
|
||||
{
|
||||
LDAP *ld = NULL;
|
||||
int i;
|
||||
int i = 0, do_retry = maxretries;
|
||||
char *attrs[] = { "cn", "sn", NULL };
|
||||
pid_t pid = getpid();
|
||||
int rc = LDAP_SUCCESS;
|
||||
|
||||
retry:;
|
||||
if ( uri ) {
|
||||
ldap_initialize( &ld, uri );
|
||||
} else {
|
||||
@ -139,14 +150,20 @@ do_search( char *uri, char *host, int port, char *manager, char *passwd, char *s
|
||||
&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 - Search(%d): base=\"%s\", filter=\"%s\".\n",
|
||||
(long) pid, maxloop, sbase, filter );
|
||||
}
|
||||
|
||||
|
||||
fprintf( stderr, "PID=%ld - Search(%d): base=\"%s\", filter=\"%s\".\n",
|
||||
(long) pid, maxloop, sbase, filter );
|
||||
rc = ldap_bind_s( ld, manager, passwd, LDAP_AUTH_SIMPLE );
|
||||
if ( rc != LDAP_SUCCESS ) {
|
||||
if ( rc == LDAP_BUSY && do_retry == 1 ) {
|
||||
do_retry = 0;
|
||||
goto retry;
|
||||
}
|
||||
ldap_perror( ld, "ldap_bind" );
|
||||
exit( EXIT_FAILURE );
|
||||
}
|
||||
|
||||
for ( i = 0; i < maxloop; i++ ) {
|
||||
LDAPMessage *res;
|
||||
@ -155,6 +172,10 @@ do_search( char *uri, char *host, int port, char *manager, char *passwd, char *s
|
||||
filter, attrs, 0, &res );
|
||||
if ( rc != LDAP_SUCCESS ) {
|
||||
ldap_perror( ld, "ldap_search" );
|
||||
if ( rc == LDAP_BUSY && do_retry == 1 ) {
|
||||
do_retry = 0;
|
||||
goto retry;
|
||||
}
|
||||
if ( rc != LDAP_NO_SUCH_OBJECT ) break;
|
||||
continue;
|
||||
|
||||
|
@ -43,6 +43,7 @@
|
||||
#define MAXARGS 100
|
||||
#define MAXREQS 5000
|
||||
#define LOOPS "100"
|
||||
#define RETRIES "0"
|
||||
|
||||
#define TSEARCHFILE "do_search.0"
|
||||
#define TREADFILE "do_read.0"
|
||||
@ -86,6 +87,7 @@ main( int argc, char **argv )
|
||||
char *dirname = NULL;
|
||||
char *progdir = NULL;
|
||||
char *loops = LOOPS;
|
||||
char *retries = RETRIES;
|
||||
DIR *datadir;
|
||||
struct dirent *file;
|
||||
char *sfile = NULL;
|
||||
@ -120,47 +122,51 @@ main( int argc, char **argv )
|
||||
char *moddn[MAXREQS];
|
||||
int modnum = 0;
|
||||
|
||||
while ( (i = getopt( argc, argv, "H:h:p:D:w:b:d:j:l:P:" )) != EOF ) {
|
||||
while ( (i = getopt( argc, argv, "D:d:H:h:j:l:P:p:r:w:" )) != EOF ) {
|
||||
switch( i ) {
|
||||
case 'H': /* slapd uri */
|
||||
uri = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'h': /* slapd host */
|
||||
host = strdup( optarg );
|
||||
case 'D': /* slapd manager */
|
||||
manager = ArgDup( optarg );
|
||||
break;
|
||||
|
||||
case 'p': /* the servers port number */
|
||||
port = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'D': /* slapd manager */
|
||||
manager = ArgDup( optarg );
|
||||
case 'd': /* data directory */
|
||||
dirname = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'w': /* the managers passwd */
|
||||
passwd = ArgDup( optarg );
|
||||
break;
|
||||
|
||||
case 'd': /* data directory */
|
||||
dirname = strdup( optarg );
|
||||
case 'H': /* slapd uri */
|
||||
uri = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'P': /* prog directory */
|
||||
progdir = strdup( optarg );
|
||||
case 'h': /* slapd host */
|
||||
host = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'j': /* the number of parallel clients */
|
||||
maxkids = atoi( optarg );
|
||||
break;
|
||||
case 'j': /* the number of parallel clients */
|
||||
maxkids = atoi( optarg );
|
||||
break;
|
||||
|
||||
case 'l': /* the number of loops per client */
|
||||
loops = strdup( optarg );
|
||||
break;
|
||||
case 'l': /* the number of loops per client */
|
||||
loops = strdup( optarg );
|
||||
break;
|
||||
|
||||
default:
|
||||
usage( argv[0] );
|
||||
break;
|
||||
case 'P': /* prog directory */
|
||||
progdir = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'p': /* the servers port number */
|
||||
port = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
retries = strdup( optarg );
|
||||
break;
|
||||
|
||||
case 'w': /* the managers passwd */
|
||||
passwd = ArgDup( optarg );
|
||||
break;
|
||||
|
||||
default:
|
||||
usage( argv[0] );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -246,6 +252,8 @@ main( int argc, char **argv )
|
||||
sargs[sanum++] = passwd;
|
||||
sargs[sanum++] = "-l";
|
||||
sargs[sanum++] = loops;
|
||||
sargs[sanum++] = "-r";
|
||||
sargs[sanum++] = retries;
|
||||
sargs[sanum++] = "-b";
|
||||
sargs[sanum++] = NULL; /* will hold the search base */
|
||||
sargs[sanum++] = "-f";
|
||||
@ -271,6 +279,8 @@ main( int argc, char **argv )
|
||||
}
|
||||
rargs[ranum++] = "-l";
|
||||
rargs[ranum++] = loops;
|
||||
rargs[ranum++] = "-r";
|
||||
rargs[ranum++] = retries;
|
||||
rargs[ranum++] = "-e";
|
||||
rargs[ranum++] = NULL; /* will hold the read entry */
|
||||
rargs[ranum++] = NULL;
|
||||
@ -298,6 +308,8 @@ main( int argc, char **argv )
|
||||
margs[manum++] = passwd;
|
||||
margs[manum++] = "-l";
|
||||
margs[manum++] = loops;
|
||||
margs[manum++] = "-r";
|
||||
margs[manum++] = retries;
|
||||
margs[manum++] = "-e";
|
||||
margs[manum++] = NULL; /* will hold the modrdn entry */
|
||||
margs[manum++] = NULL;
|
||||
@ -325,6 +337,8 @@ main( int argc, char **argv )
|
||||
modargs[modanum++] = passwd;
|
||||
modargs[modanum++] = "-l";
|
||||
modargs[modanum++] = loops;
|
||||
modargs[modanum++] = "-r";
|
||||
modargs[modanum++] = retries;
|
||||
modargs[modanum++] = "-e";
|
||||
modargs[modanum++] = NULL; /* will hold the modify entry */
|
||||
modargs[modanum++] = "-a";;
|
||||
@ -354,6 +368,8 @@ main( int argc, char **argv )
|
||||
aargs[aanum++] = passwd;
|
||||
aargs[aanum++] = "-l";
|
||||
aargs[aanum++] = loops;
|
||||
aargs[aanum++] = "-r";
|
||||
aargs[aanum++] = retries;
|
||||
aargs[aanum++] = "-f";
|
||||
aargs[aanum++] = NULL; /* will hold the add data file */
|
||||
aargs[aanum++] = NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user