]> git.sur5r.net Git - openldap/blobdiff - tests/progs/slapd-modify.c
ITS#8798 Unify slapd-* tools setup
[openldap] / tests / progs / slapd-modify.c
index eec14e565f3b1f69b338dc38bc8b92476aca0d0f..7525f281a11c7534d1ed23eb5a6c1344675af305 100644 (file)
 #include "slapd-common.h"
 
 #define LOOPS  100
-#define RETRIES 0
 
 static void
-do_modify( char *uri, char *manager, struct berval *passwd,
-               char *entry, char *attr, char *value, int maxloop,
-               int maxretries, int delay, int friendly, int chaserefs );
+do_modify( struct tester_conn_args *config, char *entry,
+               char *attr, char *value, int friendly );
 
 
 static void
-usage( char *name )
+usage( char *name, int opt )
 {
-        fprintf( stderr,
-               "usage: %s "
-               "-H <uri> | ([-h <host>] -p <port>) "
-               "-D <manager> "
-               "-w <passwd> "
+       if ( opt ) {
+               fprintf( stderr, "%s: unable to handle option \'%c\'\n\n",
+                       name, opt );
+       }
+
+       fprintf( stderr, "usage: %s " TESTER_COMMON_HELP
+               "-a <attr:val> "
                "-e <entry> "
-               "[-i <ignore>] "
-               "[-l <loops>] "
-               "[-L <outerloops>] "
-               "[-r <maxretries>] "
-               "[-t <delay>] "
-               "[-F] "
-               "[-C]\n",
-                       name );
+               "[-F]\n",
+               name );
        exit( EXIT_FAILURE );
 }
 
@@ -64,62 +58,25 @@ int
 main( int argc, char **argv )
 {
        int             i;
-       char            *uri = NULL;
-       char            *host = "localhost";
-       int             port = -1;
-       char            *manager = NULL;
-       struct berval   passwd = { 0, NULL };
        char            *entry = NULL;
        char            *ava = NULL;
        char            *value = NULL;
-       int             loops = LOOPS;
-       int             outerloops = 1;
-       int             retries = RETRIES;
-       int             delay = 0;
        int             friendly = 0;
-       int             chaserefs = 0;
+       struct tester_conn_args *config;
 
-       tester_init( "slapd-modify", TESTER_MODIFY );
+       config = tester_init( "slapd-modify", TESTER_MODIFY );
 
-       while ( ( i = getopt( argc, argv, "a:CD:e:FH:h:i:L:l:p:r:t:w:" ) ) != EOF )
+       while ( ( i = getopt( argc, argv, TESTER_COMMON_OPTS "a:e:F" ) ) != EOF )
        {
                switch ( i ) {
-               case 'C':
-                       chaserefs++;
-                       break;
-
                case 'F':
                        friendly++;
                        break;
 
-               case 'H':               /* the server uri */
-                       uri = strdup( optarg );
-                       break;
-
-               case 'h':               /* the servers host */
-                       host = strdup( optarg );
-                       break;
-
                case 'i':
                        /* ignored (!) by now */
                        break;
 
-               case 'p':               /* the servers port */
-                       if ( lutil_atoi( &port, optarg ) != 0 ) {
-                               usage( argv[0] );
-                       }
-                       break;
-
-               case 'D':               /* the servers manager */
-                       manager = strdup( optarg );
-                       break;
-
-               case 'w':               /* the server managers password */
-                       passwd.bv_val = strdup( optarg );
-                       passwd.bv_len = strlen( optarg );
-                       memset( optarg, '*', passwd.bv_len );
-                       break;
-
                case 'e':               /* entry to modify */
                        entry = strdup( optarg );
                        break;
@@ -128,38 +85,17 @@ main( int argc, char **argv )
                        ava = strdup( optarg );
                        break;
 
-               case 'l':               /* the number of loops */
-                       if ( lutil_atoi( &loops, optarg ) != 0 ) {
-                               usage( argv[0] );
-                       }
-                       break;
-
-               case 'L':               /* the number of outerloops */
-                       if ( lutil_atoi( &outerloops, optarg ) != 0 ) {
-                               usage( argv[0] );
-                       }
-                       break;
-
-               case 'r':               /* number of retries */
-                       if ( lutil_atoi( &retries, optarg ) != 0 ) {
-                               usage( argv[0] );
-                       }
-                       break;
-
-               case 't':               /* delay in seconds */
-                       if ( lutil_atoi( &delay, optarg ) != 0 ) {
-                               usage( argv[0] );
-                       }
-                       break;
-
                default:
-                       usage( argv[0] );
+                       if ( tester_config_opt( config, i, optarg ) == LDAP_SUCCESS ) {
+                               break;
+                       }
+                       usage( argv[0], i );
                        break;
                }
        }
 
-       if (( entry == NULL ) || ( ava == NULL ) || ( port == -1 && uri == NULL ))
-               usage( argv[0] );
+       if (( entry == NULL ) || ( ava == NULL ))
+               usage( argv[0], 0 );
 
        if ( *entry == '\0' ) {
 
@@ -183,11 +119,10 @@ main( int argc, char **argv )
        while ( *value && isspace( (unsigned char) *value ))
                value++;
 
-       uri = tester_uri( uri, host, port );
+       tester_config_finish( config );
 
-       for ( i = 0; i < outerloops; i++ ) {
-               do_modify( uri, manager, &passwd, entry, ava, value,
-                               loops, retries, delay, friendly, chaserefs );
+       for ( i = 0; i < config->outerloops; i++ ) {
+               do_modify( config, entry, ava, value, friendly );
        }
 
        exit( EXIT_SUCCESS );
@@ -195,18 +130,16 @@ main( int argc, char **argv )
 
 
 static void
-do_modify( char *uri, char *manager,
-       struct berval *passwd, char *entry, char* attr, char* value,
-       int maxloop, int maxretries, int delay, int friendly, int chaserefs )
+do_modify( struct tester_conn_args *config,
+       char *entry, char* attr, char* value, int friendly )
 {
        LDAP    *ld = NULL;
-       int     i = 0, do_retry = maxretries;
+       int     i = 0, do_retry = config->retries;
        int     rc = LDAP_SUCCESS;
 
        struct ldapmod mod;
        struct ldapmod *mods[2];
        char *values[2];
-       int version = LDAP_VERSION3;
 
        values[0] = value;
        values[1] = NULL;
@@ -217,42 +150,14 @@ do_modify( char *uri, char *manager,
        mods[1] = NULL;
 
 retry:;
-       ldap_initialize( &ld, uri );
-       if ( ld == NULL ) {
-               tester_perror( "ldap_initialize", NULL );
-               exit( EXIT_FAILURE );
-       }
-
-       (void) ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version ); 
-       (void) ldap_set_option( ld, LDAP_OPT_REFERRALS,
-               chaserefs ? LDAP_OPT_ON : LDAP_OPT_OFF );
+       tester_init_ld( &ld, config, 0 );
 
-       if ( do_retry == maxretries ) {
+       if ( do_retry == config->retries ) {
                fprintf( stderr, "PID=%ld - Modify(%d): entry=\"%s\".\n",
-                       (long) pid, maxloop, entry );
-       }
-
-       rc = ldap_sasl_bind_s( ld, manager, LDAP_SASL_SIMPLE, passwd, NULL, NULL, NULL );
-       if ( rc != LDAP_SUCCESS ) {
-               tester_ldap_error( ld, "ldap_sasl_bind_s", NULL );
-               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 );
+                       (long) pid, config->loops, entry );
        }
 
-       for ( ; i < maxloop; i++ ) {
+       for ( ; i < config->loops; i++ ) {
                mod.mod_op = LDAP_MOD_ADD;
                rc = ldap_modify_ext_s( ld, entry, mods, NULL, NULL );
                if ( rc != LDAP_SUCCESS ) {