X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=tests%2Fprogs%2Fslapd-modrdn.c;h=d2646e4c2460f1ccf520edc058ae314d19a0ea9a;hb=cb5bdb9597dbd4bbd736bf68455ab74326551ff3;hp=1522b864f330c13271ae9c1dcc422a9e1e63bd94;hpb=e730640c02a4d6efe02cad65849fe915ae08d190;p=openldap diff --git a/tests/progs/slapd-modrdn.c b/tests/progs/slapd-modrdn.c index 1522b864f3..d2646e4c24 100644 --- a/tests/progs/slapd-modrdn.c +++ b/tests/progs/slapd-modrdn.c @@ -1,7 +1,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1999-2005 The OpenLDAP Foundation. + * Copyright 1999-2007 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -30,16 +30,18 @@ #include #include -#define LDAP_DEPRECATED 1 #include +#include + +#include "slapd-common.h" #define LOOPS 100 #define RETRIES 0 static void -do_modrdn( char *uri, char *host, int port, char *manager, char *passwd, +do_modrdn( char *uri, char *manager, struct berval *passwd, char *entry, int maxloop, int maxretries, int delay, - int friendly ); + int friendly, int chaserefs ); static void usage( char *name ) @@ -50,9 +52,13 @@ usage( char *name ) "-D " "-w " "-e " + "[-i ] " "[-l ] " + "[-L ] " "[-r ] " - "[-t ]\n", + "[-t ] " + "[-F] " + "[-C]\n", name ); exit( EXIT_FAILURE ); } @@ -65,15 +71,24 @@ main( int argc, char **argv ) char *host = "localhost"; int port = -1; char *manager = NULL; - char *passwd = NULL; + struct berval passwd = { 0, NULL }; char *entry = NULL; int loops = LOOPS; + int outerloops = 1; int retries = RETRIES; int delay = 0; int friendly = 0; + int chaserefs = 0; + + tester_init( "slapd-modrdn", TESTER_MODRDN ); + + while ( ( i = getopt( argc, argv, "CD:e:FH:h:i:L:l:p:r:t:w:" ) ) != EOF ) + { + switch ( i ) { + case 'C': + chaserefs++; + break; - while ( (i = getopt( argc, argv, "FH:h:p:D:w:e:l:r:t:" )) != EOF ) { - switch( i ) { case 'F': friendly++; break; @@ -86,8 +101,14 @@ main( int argc, char **argv ) host = strdup( optarg ); break; + case 'i': + /* ignored (!) by now */ + break; + case 'p': /* the servers port */ - port = atoi( optarg ); + if ( lutil_atoi( &port, optarg ) != 0 ) { + usage( argv[0] ); + } break; case 'D': /* the servers manager */ @@ -95,7 +116,9 @@ main( int argc, char **argv ) break; case 'w': /* the server managers password */ - passwd = strdup( optarg ); + passwd.bv_val = strdup( optarg ); + passwd.bv_len = strlen( optarg ); + memset( optarg, '*', passwd.bv_len ); break; case 'e': /* entry to rename */ @@ -103,15 +126,27 @@ main( int argc, char **argv ) break; case 'l': /* the number of loops */ - loops = atoi( optarg ); + 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': /* the number of retries */ - retries = atoi( optarg ); + if ( lutil_atoi( &retries, optarg ) != 0 ) { + usage( argv[0] ); + } break; case 't': /* delay in seconds */ - delay = atoi( optarg ); + if ( lutil_atoi( &delay, optarg ) != 0 ) { + usage( argv[0] ); + } break; default: @@ -131,73 +166,67 @@ main( int argc, char **argv ) } - do_modrdn( uri, host, port, manager, passwd, entry, - loops, retries, delay, friendly ); + uri = tester_uri( uri, host, port ); + + for ( i = 0; i < outerloops; i++ ) { + do_modrdn( uri, manager, &passwd, entry, + loops, retries, delay, friendly, chaserefs ); + } + exit( EXIT_SUCCESS ); } static void -do_modrdn( char *uri, char *host, int port, char *manager, - char *passwd, char *entry, int maxloop, int maxretries, int delay, - int friendly ) +do_modrdn( char *uri, char *manager, + struct berval *passwd, char *entry, int maxloop, int maxretries, + int delay, int friendly, int chaserefs ) { LDAP *ld = NULL; int i = 0, do_retry = maxretries; - pid_t pid; - char *DNs[2]; - char *rdns[2]; - int rc = LDAP_SUCCESS; - + char *DNs[2]; + char *rdns[2]; + int rc = LDAP_SUCCESS; + char *p1, *p2; + int version = LDAP_VERSION3; - pid = getpid(); DNs[0] = entry; DNs[1] = strdup( entry ); /* reverse the RDN, make new DN */ - { - char *p1, *p2; - - p1 = strchr( entry, '=' ) + 1; - p2 = strchr( p1, ',' ); + p1 = strchr( entry, '=' ) + 1; + p2 = strchr( p1, ',' ); - *p2 = '\0'; - rdns[1] = strdup( entry ); - *p2-- = ','; + *p2 = '\0'; + rdns[1] = strdup( entry ); + *p2-- = ','; - for (i = p1 - entry;p2 >= p1;) - DNs[1][i++] = *p2--; - - DNs[1][i] = '\0'; - rdns[0] = strdup( DNs[1] ); - DNs[1][i] = ','; - } + for (i = p1 - entry;p2 >= p1;) + DNs[1][i++] = *p2--; + + DNs[1][i] = '\0'; + rdns[0] = strdup( DNs[1] ); + DNs[1][i] = ','; retry:; - if ( uri ) { - ldap_initialize( &ld, uri ); - } else { - ld = ldap_init( host, port ); - } + ldap_initialize( &ld, uri ); if ( ld == NULL ) { - perror( "ldap_init" ); + tester_perror( "ldap_initialize", NULL ); exit( EXIT_FAILURE ); } - { - int version = LDAP_VERSION3; - (void) ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, - &version ); - } + (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 ); if ( do_retry == maxretries ) { fprintf( stderr, "PID=%ld - Modrdn(%d): entry=\"%s\".\n", (long) pid, maxloop, entry ); } - rc = ldap_bind_s( ld, manager, passwd, LDAP_AUTH_SIMPLE ); + rc = ldap_sasl_bind_s( ld, manager, LDAP_SASL_SIMPLE, passwd, NULL, NULL, NULL ); if ( rc != LDAP_SUCCESS ) { - ldap_perror( ld, "ldap_bind" ); + tester_ldap_error( ld, "ldap_sasl_bind_s", NULL ); switch ( rc ) { case LDAP_BUSY: case LDAP_UNAVAILABLE: @@ -216,9 +245,9 @@ retry:; } for ( ; i < maxloop; i++ ) { - rc = ldap_modrdn2_s( ld, DNs[0], rdns[0], 0 ); + rc = ldap_rename_s( ld, DNs[0], rdns[0], NULL, 0, NULL, NULL ); if ( rc != LDAP_SUCCESS ) { - ldap_perror( ld, "ldap_modrdn" ); + tester_ldap_error( ld, "ldap_rename_s", NULL ); switch ( rc ) { case LDAP_NO_SUCH_OBJECT: /* NOTE: this likely means @@ -241,9 +270,9 @@ retry:; goto done; } } - rc = ldap_modrdn2_s( ld, DNs[1], rdns[1], 1 ); + rc = ldap_rename_s( ld, DNs[1], rdns[1], NULL, 1, NULL, NULL ); if ( rc != LDAP_SUCCESS ) { - ldap_perror( ld, "ldap_modrdn" ); + tester_ldap_error( ld, "ldap_rename_s", NULL ); switch ( rc ) { case LDAP_NO_SUCH_OBJECT: /* NOTE: this likely means @@ -271,7 +300,7 @@ retry:; done:; fprintf( stderr, " PID=%ld - Modrdn done (%d).\n", (long) pid, rc ); - ldap_unbind( ld ); + ldap_unbind_ext( ld, NULL, NULL ); }