Diff for /tests/progs/slapd-addel.c between versions 1.27 and 1.27.2.8

version 1.27, 2004/09/04 16:31:43 version 1.27.2.8, 2006/01/03 22:16:28
Line 1 Line 1
 /* $OpenLDAP: pkg/ldap/tests/progs/slapd-addel.c,v 1.26 2004/01/01 18:15:41 kurt Exp $ */  /* $OpenLDAP: pkg/ldap/tests/progs/slapd-addel.c,v 1.27.2.7 2005/11/26 23:54:52 kurt Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.  /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *   *
  * Copyright 1999-2004 The OpenLDAP Foundation.   * Copyright 1999-2006 The OpenLDAP Foundation.
  * All rights reserved.   * All rights reserved.
  *   *
  * Redistribution and use in source and binary forms, with or without   * Redistribution and use in source and binary forms, with or without
Line 32 Line 32
   
 #define LDAP_DEPRECATED 1  #define LDAP_DEPRECATED 1
 #include <ldap.h>  #include <ldap.h>
   #include <lutil.h>
   
 #define LOOPS   100  #define LOOPS   100
   #define RETRIES 0
   
 static char *  static char *
 get_add_entry( char *filename, LDAPMod ***mods );  get_add_entry( char *filename, LDAPMod ***mods );
   
 static void  static void
 do_addel( char *uri, 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 );          char *dn, LDAPMod **attrs, int maxloop, int maxretries, int delay,
           int friendly );
   
 static void  static void
 usage( char *name )  usage( char *name )
 {  {
         fprintf( stderr, "usage: %s [-h <host>] -p port -D <managerDN> -w <passwd> -f <addfile> [-l <loops>]\n",          fprintf( stderr,
                   "usage: %s "
                   "-H <uri> | ([-h <host>] -p <port>) "
                   "-D <manager> "
                   "-w <passwd> "
                   "-f <addfile> "
                   "[-l <loops>] "
                   "[-r <maxretries>] "
                   "[-t <delay>] "
                   "[-F]\n",
                         name );                          name );
         exit( EXIT_FAILURE );          exit( EXIT_FAILURE );
 }  }
Line 54  int Line 66  int
 main( int argc, char **argv )  main( int argc, char **argv )
 {  {
         int             i;          int             i;
         char        *host = "localhost";          char            *host = "localhost";
         char            *uri = NULL;          char            *uri = NULL;
         int                     port = -1;          int             port = -1;
         char            *manager = NULL;          char            *manager = NULL;
         char            *passwd = NULL;          char            *passwd = NULL;
         char            *filename = NULL;          char            *filename = NULL;
         char            *entry = NULL;          char            *entry = NULL;
         int                     loops = LOOPS;          int             loops = LOOPS;
         LDAPMod     **attrs = NULL;          int             retries = RETRIES;
           int             delay = 0;
           int             friendly = 0;
           LDAPMod         **attrs = NULL;
   
         while ( (i = getopt( argc, argv, "H:h:p:D:w:f:l:" )) != EOF ) {          while ( (i = getopt( argc, argv, "FH:h:p:D:w:f:l:r:t:" )) != EOF ) {
                 switch( i ) {                  switch( i ) {
                         case 'H':               /* the server's URI */                  case 'F':
                                 uri = strdup( optarg );                          friendly++;
                         break;                          break;
                         case 'h':               /* the servers host */                          
                                 host = strdup( optarg );                  case 'H':               /* the server's URI */
                           uri = strdup( optarg );
                         break;                          break;
   
                         case 'p':               /* the servers port */                  case 'h':               /* the servers host */
                                 port = atoi( optarg );                          host = strdup( optarg );
                                 break;                          break;
   
                         case 'D':               /* the servers manager */                  case 'p':               /* the servers port */
                                 manager = strdup( optarg );                          if ( lutil_atoi( &port, optarg ) != 0 ) {
                                   usage( argv[0] );
                           }
                         break;                          break;
   
                         case 'w':               /* the server managers password */                  case 'D':               /* the servers manager */
                                 passwd = strdup( optarg );                          manager = strdup( optarg );
                         break;                          break;
   
                         case 'f':               /* file with entry search request */                  case 'w':               /* the server managers password */
                                 filename = strdup( optarg );                          passwd = strdup( optarg );
                                 break;                          break;
   
                         case 'l':               /* the number of loops */                  case 'f':               /* file with entry search request */
                                 loops = atoi( optarg );                          filename = strdup( optarg );
                                 break;                          break;
   
                         default:                  case 'l':               /* the number of loops */
                           if ( lutil_atoi( &loops, optarg ) != 0 ) {
                                 usage( argv[0] );                                  usage( argv[0] );
                                 break;                          }
                           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] );
                           break;
                 }                  }
         }          }
   
Line 120  main( int argc, char **argv ) Line 156  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, delay, friendly );
   
         exit( EXIT_SUCCESS );          exit( EXIT_SUCCESS );
 }  }
Line 249  do_addel( Line 286  do_addel(
         char *passwd,          char *passwd,
         char *entry,          char *entry,
         LDAPMod **attrs,          LDAPMod **attrs,
         int maxloop          int maxloop,
           int maxretries,
           int delay,
           int friendly
 )  )
 {  {
         LDAP    *ld = NULL;          LDAP    *ld = NULL;
         int     i;          int     i = 0, do_retry = maxretries;
         pid_t   pid = getpid();          pid_t   pid = getpid();
         int     rc = LDAP_SUCCESS;          int     rc = LDAP_SUCCESS;
   
   retry:;
         if ( uri ) {          if ( uri ) {
                 ldap_initialize( &ld, uri );                  ldap_initialize( &ld, uri );
         } else {          } else {
Line 273  do_addel( Line 314  do_addel(
                         &version );                           &version ); 
         }          }
   
         if ( ldap_bind_s( ld, manager, passwd, LDAP_AUTH_SIMPLE )          if ( do_retry == maxretries ) {
                                 != LDAP_SUCCESS ) {                  fprintf( stderr, "PID=%ld - Add/Delete(%d): entry=\"%s\".\n",
                 ldap_perror( ld, "ldap_bind" );                          (long) pid, maxloop, entry );
                  exit( EXIT_FAILURE );  
         }          }
   
           rc = ldap_bind_s( ld, manager, passwd, LDAP_AUTH_SIMPLE );
           if ( rc != LDAP_SUCCESS ) {
                   ldap_perror( ld, "ldap_bind" );
                   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 );
           }
   
         fprintf( stderr, "PID=%ld - Add/Delete(%d): entry=\"%s\".\n",          for ( ; i < maxloop; i++ ) {
                                         (long) pid, maxloop, entry );  
   
         for ( i = 0; i < maxloop; i++ ) {  
   
                 /* add the entry */                  /* add the entry */
                 rc = ldap_add_s( ld, entry, attrs );                  rc = ldap_add_s( ld, entry, attrs );
                 if ( rc != LDAP_SUCCESS ) {                  if ( rc != LDAP_SUCCESS ) {
                         ldap_perror( ld, "ldap_add" );                          ldap_perror( ld, "ldap_add" );
                         break;                          switch ( rc ) {
                           case LDAP_ALREADY_EXISTS:
                                   /* NOTE: this likely means
                                    * the delete failed
                                    * during the previous round... */
                                   if ( !friendly ) {
                                           goto done;
                                   }
                                   break;
   
                           case LDAP_BUSY:
                           case LDAP_UNAVAILABLE:
                                   if ( do_retry > 0 ) {
                                           do_retry--;
                                           goto retry;
                                   }
                                   /* fall thru */
   
                           default:
                                   goto done;
                           }
                 }                  }
   
 #if 0  #if 0
Line 303  do_addel( Line 378  do_addel(
                 rc = ldap_delete_s( ld, entry );                  rc = ldap_delete_s( ld, entry );
                 if ( rc != LDAP_SUCCESS ) {                  if ( rc != LDAP_SUCCESS ) {
                         ldap_perror( ld, "ldap_delete" );                          ldap_perror( ld, "ldap_delete" );
                         break;                          switch ( rc ) {
                           case LDAP_NO_SUCH_OBJECT:
                                   /* NOTE: this likely means
                                    * the add failed
                                    * during the previous round... */
                                   if ( !friendly ) {
                                           goto done;
                                   }
                                   break;
   
                 }                          case LDAP_BUSY:
                           case LDAP_UNAVAILABLE:
                                   if ( do_retry > 0 ) {
                                           do_retry--;
                                           goto retry;
                                   }
                                   /* fall thru */
   
                           default:
                                   goto done;
                           }
                   }
         }          }
   
   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( ld );          ldap_unbind( ld );

Removed from v.1.27  
changed lines
  Added in v.1.27.2.8


______________
© Copyright 1998-2020, OpenLDAP Foundation, info@OpenLDAP.org