]> git.sur5r.net Git - openldap/blobdiff - tests/progs/slapd-addel.c
Merge remote branch 'origin/mdb.master'
[openldap] / tests / progs / slapd-addel.c
index 5c437634fff20128f029995d3878b538bf29effb..9445282e910e322763a75ddf6026651e07263679 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1999-2006 The OpenLDAP Foundation.
+ * Copyright 1999-2012 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 
 #include <stdio.h>
 
-#include <ac/stdlib.h>
+#include "ac/stdlib.h"
 
-#include <ac/ctype.h>
-#include <ac/param.h>
-#include <ac/socket.h>
-#include <ac/string.h>
-#include <ac/unistd.h>
-#include <ac/wait.h>
+#include "ac/ctype.h"
+#include "ac/param.h"
+#include "ac/socket.h"
+#include "ac/string.h"
+#include "ac/unistd.h"
+#include "ac/wait.h"
 
-#include <ldap.h>
-#include <lutil.h>
+#include "ldap.h"
+#include "lutil.h"
 
 #include "slapd-common.h"
 
@@ -44,7 +44,7 @@ get_add_entry( char *filename, LDAPMod ***mods );
 static void
 do_addel( char *uri, char *manager, struct berval *passwd,
        char *dn, LDAPMod **attrs, int maxloop, int maxretries, int delay,
-       int friendly );
+       int friendly, int chaserefs );
 
 static void
 usage( char *name )
@@ -55,11 +55,13 @@ usage( char *name )
                "-D <manager> "
                "-w <passwd> "
                "-f <addfile> "
+               "[-i <ignore>] "
                "[-l <loops>] "
                "[-L <outerloops>] "
                "[-r <maxretries>] "
                "[-t <delay>] "
-               "[-F]\n",
+               "[-F] "
+               "[-C]\n",
                        name );
        exit( EXIT_FAILURE );
 }
@@ -80,12 +82,18 @@ main( int argc, char **argv )
        int             retries = RETRIES;
        int             delay = 0;
        int             friendly = 0;
+       int             chaserefs = 0;
        LDAPMod         **attrs = NULL;
 
-       tester_init( "slapd-modify" );
+       tester_init( "slapd-addel", TESTER_ADDEL );
+
+       while ( ( i = getopt( argc, argv, "CD:Ff:H: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:f:l:L:r:t:" )) != EOF ) {
-               switch( i ) {
                case 'F':
                        friendly++;
                        break;
@@ -98,6 +106,10 @@ main( int argc, char **argv )
                        host = strdup( optarg );
                        break;
 
+               case 'i':
+                       /* ignored (!) by now */
+                       break;
+
                case 'p':               /* the servers port */
                        if ( lutil_atoi( &port, optarg ) != 0 ) {
                                usage( argv[0] );
@@ -111,6 +123,7 @@ main( int argc, char **argv )
                case 'w':               /* the server managers password */
                        passwd.bv_val = strdup( optarg );
                        passwd.bv_len = strlen( optarg );
+                       memset( optarg, '*', passwd.bv_len );
                        break;
 
                case 'f':               /* file with entry search request */
@@ -172,7 +185,7 @@ main( int argc, char **argv )
 
        for ( i = 0; i < outerloops; i++ ) {
                do_addel( uri, manager, &passwd, entry, attrs,
-                               loops, retries, delay, friendly );
+                               loops, retries, delay, friendly, chaserefs );
        }
 
        exit( EXIT_SUCCESS );
@@ -202,19 +215,19 @@ addmodifyop( LDAPMod ***pmodsp, int modop, char *attr, char *value, int vlen )
     if ( pmods == NULL || pmods[ i ] == NULL ) {
                if (( pmods = (LDAPMod **)realloc( pmods, (i + 2) *
                        sizeof( LDAPMod * ))) == NULL ) {
-                       tester_perror( "realloc" );
+                       tester_perror( "realloc", NULL );
                        exit( EXIT_FAILURE );
                }
                *pmodsp = pmods;
                pmods[ i + 1 ] = NULL;
                if (( pmods[ i ] = (LDAPMod *)calloc( 1, sizeof( LDAPMod )))
                        == NULL ) {
-                       tester_perror( "calloc" );
+                       tester_perror( "calloc", NULL );
                        exit( EXIT_FAILURE );
                }
                pmods[ i ]->mod_op = modop;
                if (( pmods[ i ]->mod_type = strdup( attr )) == NULL ) {
-               tester_perror( "strdup" );
+               tester_perror( "strdup", NULL );
                exit( EXIT_FAILURE );
                }
     }
@@ -229,20 +242,20 @@ addmodifyop( LDAPMod ***pmodsp, int modop, char *attr, char *value, int vlen )
                if (( pmods[ i ]->mod_bvalues =
                        (struct berval **)ber_memrealloc( pmods[ i ]->mod_bvalues,
                        (j + 2) * sizeof( struct berval * ))) == NULL ) {
-                       tester_perror( "ber_memrealloc" );
+                       tester_perror( "ber_memrealloc", NULL );
                        exit( EXIT_FAILURE );
                }
                pmods[ i ]->mod_bvalues[ j + 1 ] = NULL;
                if (( bvp = (struct berval *)ber_memalloc( sizeof( struct berval )))
                        == NULL ) {
-                       tester_perror( "ber_memalloc" );
+                       tester_perror( "ber_memalloc", NULL );
                        exit( EXIT_FAILURE );
                }
                pmods[ i ]->mod_bvalues[ j ] = bvp;
 
            bvp->bv_len = vlen;
            if (( bvp->bv_val = (char *)malloc( vlen + 1 )) == NULL ) {
-                       tester_perror( "malloc" );
+                       tester_perror( "malloc", NULL );
                        exit( EXIT_FAILURE );
            }
            AC_MEMCPY( bvp->bv_val, value, vlen );
@@ -265,7 +278,10 @@ get_add_entry( char *filename, LDAPMod ***mods )
 
                        if (( nl = strchr( line, '\r' )) || ( nl = strchr( line, '\n' )))
                                *nl = '\0';
-                       entry = strdup( line );
+                       nl = line;
+                       if ( !strncasecmp( nl, "dn: ", 4 ))
+                               nl += 4;
+                       entry = strdup( nl );
 
                }
 
@@ -303,23 +319,24 @@ do_addel(
        int maxloop,
        int maxretries,
        int delay,
-       int friendly
-)
+       int friendly,
+       int chaserefs )
 {
        LDAP    *ld = NULL;
        int     i = 0, do_retry = maxretries;
-       pid_t   pid = getpid();
        int     rc = LDAP_SUCCESS;
        int     version = LDAP_VERSION3;
 
 retry:;
        ldap_initialize( &ld, uri );
        if ( ld == NULL ) {
-               tester_perror( "ldap_initialize" );
+               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 );
 
        if ( do_retry == maxretries ) {
                fprintf( stderr, "PID=%ld - Add/Delete(%d): entry=\"%s\".\n",
@@ -328,7 +345,7 @@ retry:;
 
        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" );
+               tester_ldap_error( ld, "ldap_sasl_bind_s", NULL );
                switch ( rc ) {
                case LDAP_BUSY:
                case LDAP_UNAVAILABLE:
@@ -351,7 +368,7 @@ retry:;
                /* add the entry */
                rc = ldap_add_ext_s( ld, entry, attrs, NULL, NULL );
                if ( rc != LDAP_SUCCESS ) {
-                       tester_ldap_error( ld, "ldap_add_ext_s" );
+                       tester_ldap_error( ld, "ldap_add_ext_s", NULL );
                        switch ( rc ) {
                        case LDAP_ALREADY_EXISTS:
                                /* NOTE: this likely means
@@ -384,7 +401,7 @@ retry:;
                /* now delete the entry again */
                rc = ldap_delete_ext_s( ld, entry, NULL, NULL );
                if ( rc != LDAP_SUCCESS ) {
-                       tester_ldap_error( ld, "ldap_delete_ext_s" );
+                       tester_ldap_error( ld, "ldap_delete_ext_s", NULL );
                        switch ( rc ) {
                        case LDAP_NO_SUCH_OBJECT:
                                /* NOTE: this likely means
@@ -410,7 +427,7 @@ retry:;
        }
 
 done:;
-       fprintf( stderr, " PID=%ld - Add/Delete done (%d).\n", (long) pid, rc );
+       fprintf( stderr, "  PID=%ld - Add/Delete done (%d).\n", (long) pid, rc );
 
        ldap_unbind_ext( ld, NULL, NULL );
 }