]> git.sur5r.net Git - openldap/blobdiff - tests/progs/slapd-addel.c
Fix lib specs
[openldap] / tests / progs / slapd-addel.c
index e99fbf00fe9bf1a3d49e70be3abda5112c9b97f5..618057d629c50c685b5f0db34a434ef89151a50b 100644 (file)
@@ -1,17 +1,22 @@
+/* $OpenLDAP$ */
+/*
+ * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
+ * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+ */
 #include "portable.h"
 
 #include <stdio.h>
 
-#include <ac/string.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 <sys/param.h>
-
-#include "lber.h"
-#include "ldap.h"
+#include <ldap.h>
 
 #define LOOPS  100
 
@@ -19,7 +24,7 @@ static char *
 get_add_entry( char *filename, LDAPMod ***mods );
 
 static void
-do_addel( char *host, int port, char *manager, char *passwd,
+do_addel( char *uri, char *host, int port, char *manager, char *passwd,
        char *dn, LDAPMod **attrs, int maxloop );
 
 static void
@@ -27,14 +32,15 @@ usage( char *name )
 {
        fprintf( stderr, "usage: %s [-h <host>] -p port -D <managerDN> -w <passwd> -f <addfile> [-l <loops>]\n",
                        name );
-       exit( 1 );
+       exit( EXIT_FAILURE );
 }
 
 int
 main( int argc, char **argv )
 {
-       int             i, j;
+       int             i;
        char        *host = "localhost";
+       char            *uri = NULL;
        int                     port = -1;
        char            *manager = NULL;
        char            *passwd = NULL;
@@ -43,8 +49,11 @@ main( int argc, char **argv )
        int                     loops = LOOPS;
        LDAPMod     **attrs = NULL;
 
-       while ( (i = getopt( argc, argv, "h:p:D:w:f:l:" )) != EOF ) {
+       while ( (i = getopt( argc, argv, "H:h:p:D:w:f:l:" )) != EOF ) {
                switch( i ) {
+                       case 'H':               /* the server's URI */
+                               uri = strdup( optarg );
+                       break;
                        case 'h':               /* the servers host */
                                host = strdup( optarg );
                        break;
@@ -75,7 +84,7 @@ main( int argc, char **argv )
                }
        }
 
-       if (( filename == NULL ) || ( port == -1 ) ||
+       if (( filename == NULL ) || ( port == -1 && uri == NULL ) ||
                                ( manager == NULL ) || ( passwd == NULL ))
                usage( argv[0] );
 
@@ -84,7 +93,7 @@ main( int argc, char **argv )
 
                fprintf( stderr, "%s: invalid entry DN in file \"%s\".\n",
                                argv[0], filename );
-               exit( 1 );
+               exit( EXIT_FAILURE );
 
        }
 
@@ -92,20 +101,16 @@ main( int argc, char **argv )
 
                fprintf( stderr, "%s: invalid attrs in file \"%s\".\n",
                                argv[0], filename );
-               exit( 1 );
+               exit( EXIT_FAILURE );
 
        }
 
-       do_addel( host, port, manager, passwd, entry, attrs, loops );
+       do_addel( uri, host, port, manager, passwd, entry, attrs, loops );
 
-       exit( 0 );
+       exit( EXIT_SUCCESS );
 }
 
 
-#define safe_realloc( ptr, size )   ( ptr == NULL ? malloc( size ) : \
-                               realloc( ptr, size ))
-
-
 static void
 addmodifyop( LDAPMod ***pmodsp, int modop, char *attr, char *value, int vlen )
 {
@@ -127,22 +132,22 @@ addmodifyop( LDAPMod ***pmodsp, int modop, char *attr, char *value, int vlen )
     }
 
     if ( pmods == NULL || pmods[ i ] == NULL ) {
-               if (( pmods = (LDAPMod **)safe_realloc( pmods, (i + 2) *
+               if (( pmods = (LDAPMod **)realloc( pmods, (i + 2) *
                        sizeof( LDAPMod * ))) == NULL ) {
-                       perror( "safe_realloc" );
-                       exit( 1 );
+                       perror( "realloc" );
+                       exit( EXIT_FAILURE );
                }
                *pmodsp = pmods;
                pmods[ i + 1 ] = NULL;
                if (( pmods[ i ] = (LDAPMod *)calloc( 1, sizeof( LDAPMod )))
                        == NULL ) {
                        perror( "calloc" );
-                       exit( 1 );
+                       exit( EXIT_FAILURE );
                }
                pmods[ i ]->mod_op = modop;
                if (( pmods[ i ]->mod_type = strdup( attr )) == NULL ) {
                perror( "strdup" );
-               exit( 1 );
+               exit( EXIT_FAILURE );
                }
     }
 
@@ -154,25 +159,25 @@ addmodifyop( LDAPMod ***pmodsp, int modop, char *attr, char *value, int vlen )
                }
                }
                if (( pmods[ i ]->mod_bvalues =
-                       (struct berval **)safe_realloc( pmods[ i ]->mod_bvalues,
+                       (struct berval **)ber_memrealloc( pmods[ i ]->mod_bvalues,
                        (j + 2) * sizeof( struct berval * ))) == NULL ) {
-                       perror( "safe_realloc" );
-                       exit( 1 );
+                       perror( "ber_realloc" );
+                       exit( EXIT_FAILURE );
                }
                pmods[ i ]->mod_bvalues[ j + 1 ] = NULL;
-               if (( bvp = (struct berval *)malloc( sizeof( struct berval )))
+               if (( bvp = (struct berval *)ber_memalloc( sizeof( struct berval )))
                        == NULL ) {
                        perror( "malloc" );
-                       exit( 1 );
+                       exit( EXIT_FAILURE );
                }
                pmods[ i ]->mod_bvalues[ j ] = bvp;
 
            bvp->bv_len = vlen;
            if (( bvp->bv_val = (char *)malloc( vlen + 1 )) == NULL ) {
                        perror( "malloc" );
-                       exit( 1 );
+                       exit( EXIT_FAILURE );
            }
-           SAFEMEMCPY( bvp->bv_val, value, vlen );
+           AC_MEMCPY( bvp->bv_val, value, vlen );
            bvp->bv_val[ vlen ] = '\0';
     }
 }
@@ -184,7 +189,7 @@ get_add_entry( char *filename, LDAPMod ***mods )
        FILE    *fp;
        char    *entry = NULL;
 
-       if ( fp = fopen( filename, "r" )) {
+       if ( (fp = fopen( filename, "r" )) != NULL ) {
                char  line[BUFSIZ];
 
                if ( fgets( line, BUFSIZ, fp )) {
@@ -207,7 +212,8 @@ get_add_entry( char *filename, LDAPMod ***mods )
                        if ( !( value = strchr( line, ':' ))) break;
 
                        *value++ = '\0'; 
-                       while ( *value && isspace( *value )) value++;
+                       while ( *value && isspace( (unsigned char) *value ))
+                               value++;
 
                        addmodifyop( mods, LDAP_MOD_ADD, line, value, strlen( value ));
 
@@ -221,6 +227,7 @@ get_add_entry( char *filename, LDAPMod ***mods )
 
 static void
 do_addel(
+       char *uri,
        char *host,
        int port,
        char *manager,
@@ -230,24 +237,35 @@ do_addel(
        int maxloop
 )
 {
-       LDAP    *ld;
+       LDAP    *ld = NULL;
        int     i;
        pid_t   pid = getpid();
 
-       if (( ld = ldap_init( host, port )) == NULL ) {
+       if ( uri ) {
+               ldap_initialize( &ld, uri );
+       } else {
+               ld = ldap_init( host, port );
+       }
+       if ( ld == NULL ) {
                perror( "ldap_init" );
-               exit( 1 );
+               exit( EXIT_FAILURE );
+       }
+
+       {
+               int version = LDAP_VERSION3;
+               (void) ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION,
+                       &version ); 
        }
 
        if ( ldap_bind_s( ld, manager, passwd, LDAP_AUTH_SIMPLE )
                                != LDAP_SUCCESS ) {
                ldap_perror( ld, "ldap_bind" );
-                exit( 1 );
+                exit( EXIT_FAILURE );
        }
 
 
        fprintf( stderr, "PID=%ld - Add/Delete(%d): entry=\"%s\".\n",
-                                       pid, maxloop, entry );
+                                       (long) pid, maxloop, entry );
 
        for ( i = 0; i < maxloop; i++ ) {
 
@@ -272,7 +290,7 @@ do_addel(
 
        }
 
-       fprintf( stderr, " PID=%ld - Add/Delete done.\n", pid );
+       fprintf( stderr, " PID=%ld - Add/Delete done.\n", (long) pid );
 
        ldap_unbind( ld );
 }