]> git.sur5r.net Git - openldap/blobdiff - tests/progs/slapd-tester.c
ITS#6003, #5916 fix ldap_back_entry_get_rw, no deref here
[openldap] / tests / progs / slapd-tester.c
index 43b8e0e1edde386f7df368ddec60f6388710c25a..5534228c6b736b9352305c6da5c29db874cdc9f4 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1999-2007 The OpenLDAP Foundation.
+ * Copyright 1999-2009 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -140,7 +140,7 @@ main( int argc, char **argv )
        int             sextra_args = 0;
        char            scmd[MAXPATHLEN];
        /* static so that its address can be used in initializer below. */
-       static char     sloops[] = "18446744073709551615UL";
+       static char     sloops[LDAP_PVT_INTTYPE_CHARS(unsigned long)];
        /* read */
        char            *rfile = NULL;
        char            *rreqs[MAXREQS];
@@ -150,14 +150,14 @@ main( int argc, char **argv )
        int             ranum;
        int             rextra_args = 0;
        char            rcmd[MAXPATHLEN];
-       static char     rloops[] = "18446744073709551615UL";
+       static char     rloops[LDAP_PVT_INTTYPE_CHARS(unsigned long)];
        /* addel */
        char            *afiles[MAXREQS];
        int             anum = 0;
        char            *aargs[MAXARGS];
        int             aanum;
        char            acmd[MAXPATHLEN];
-       static char     aloops[] = "18446744073709551615UL";
+       static char     aloops[LDAP_PVT_INTTYPE_CHARS(unsigned long)];
        /* modrdn */
        char            *nfile = NULL;
        char            *nreqs[MAXREQS];
@@ -165,7 +165,7 @@ main( int argc, char **argv )
        char            *nargs[MAXARGS];
        int             nanum;
        char            ncmd[MAXPATHLEN];
-       static char     nloops[] = "18446744073709551615UL";
+       static char     nloops[LDAP_PVT_INTTYPE_CHARS(unsigned long)];
        /* modify */
        char            *mfile = NULL;
        char            *mreqs[MAXREQS];
@@ -174,7 +174,7 @@ main( int argc, char **argv )
        char            *margs[MAXARGS];
        int             manum;
        char            mcmd[MAXPATHLEN];
-       static char     mloops[] = "18446744073709551615UL";
+       static char     mloops[LDAP_PVT_INTTYPE_CHARS(unsigned long)];
        /* bind */
        char            *bfile = NULL;
        char            *breqs[MAXREQS];
@@ -184,7 +184,7 @@ main( int argc, char **argv )
        char            *bargs[MAXARGS];
        int             banum;
        char            bcmd[MAXPATHLEN];
-       static char     bloops[] = "18446744073709551615UL";
+       static char     bloops[LDAP_PVT_INTTYPE_CHARS(unsigned long)];
        char            **bargs_extra = NULL;
 
        char            *friendlyOpt = NULL;
@@ -415,29 +415,64 @@ main( int argc, char **argv )
                passwd = pw.bv_val;
        }
 
+       if ( !sfile && !rfile && !nfile && !mfile && !bfile && !anum ) {
+               fprintf( stderr, "no data files found.\n" );
+               exit( EXIT_FAILURE );
+       }
+
        /* look for search requests */
        if ( sfile ) {
                snum = get_search_filters( sfile, sreqs, sattrs, sbase, slud );
+               if ( snum < 0 ) {
+                       fprintf( stderr,
+                               "unable to parse file \"%s\" line %d\n",
+                               sfile, -2*(snum + 1));
+                       exit( EXIT_FAILURE );
+               }
        }
 
        /* look for read requests */
        if ( rfile ) {
                rnum = get_read_entries( rfile, rreqs, rflts );
+               if ( rnum < 0 ) {
+                       fprintf( stderr,
+                               "unable to parse file \"%s\" line %d\n",
+                               rfile, -2*(rnum + 1) );
+                       exit( EXIT_FAILURE );
+               }
        }
 
        /* look for modrdn requests */
        if ( nfile ) {
                nnum = get_read_entries( nfile, nreqs, NULL );
+               if ( nnum < 0 ) {
+                       fprintf( stderr,
+                               "unable to parse file \"%s\" line %d\n",
+                               nfile, -2*(nnum + 1) );
+                       exit( EXIT_FAILURE );
+               }
        }
 
        /* look for modify requests */
        if ( mfile ) {
                mnum = get_search_filters( mfile, mreqs, NULL, mdn, NULL );
+               if ( mnum < 0 ) {
+                       fprintf( stderr,
+                               "unable to parse file \"%s\" line %d\n",
+                               mfile, -2*(mnum + 1) );
+                       exit( EXIT_FAILURE );
+               }
        }
 
        /* look for bind requests */
        if ( bfile ) {
                bnum = get_search_filters( bfile, bcreds, battrs, breqs, NULL );
+               if ( bnum < 0 ) {
+                       fprintf( stderr,
+                               "unable to parse file \"%s\" line %d\n",
+                               bfile, -2*(bnum + 1) );
+                       exit( EXIT_FAILURE );
+               }
        }
 
        /* setup friendly option */
@@ -861,12 +896,13 @@ main( int argc, char **argv )
                                bargs[banum - 3] = manager ? manager : "";
                                bargs[banum - 1] = passwd ? passwd : "";
 
-                               bargs[banum - 2] = "-b";
-                               bargs[banum - 1] = breqs[jj];
-                               bargs[banum + 0] = "-f";
-                               bargs[banum + 1] = bcreds[jj];
-                               bargs[banum + 2] = "-a";
-                               bargs[banum + 3] = battrs[jj];
+                               bargs[banum + 0] = "-b";
+                               bargs[banum + 1] = breqs[jj];
+                               bargs[banum + 2] = "-f";
+                               bargs[banum + 3] = bcreds[jj];
+                               bargs[banum + 4] = "-a";
+                               bargs[banum + 5] = battrs[jj];
+                               bargs[banum + 6] = NULL;
 
                        } else {
                                bargs[banum - 3] = breqs[jj];
@@ -919,11 +955,14 @@ get_search_filters( char *filename, char *filters[], char *attrs[], char *bases[
                                got_URL = 1;
                                bases[filter] = NULL;
                                if ( ldap_url_parse( line, &lud ) != LDAP_URL_SUCCESS ) {
-                                       return 1;
+                                       filter = -filter - 1;
+                                       break;
                                }
 
                                if ( lud->lud_dn == NULL || lud->lud_exts != NULL ) {
-                                       return 1;
+                                       filter = -filter - 1;
+                                       ldap_free_urldesc( lud );
+                                       break;
                                }
 
                                luds[filter] = lud;
@@ -957,7 +996,7 @@ get_search_filters( char *filename, char *filters[], char *attrs[], char *bases[
                fclose( fp );
        }
 
-       return( filter );
+       return filter;
 }
 
 
@@ -979,13 +1018,13 @@ get_read_entries( char *filename, char *entries[], char *filters[] )
                                LDAPURLDesc     *lud;
 
                                if ( ldap_url_parse( &line[1], &lud ) != LDAP_URL_SUCCESS ) {
-                                       entry = -1;
+                                       entry = -entry - 1;
                                        break;
                                }
 
                                if ( lud->lud_dn == NULL || lud->lud_dn[ 0 ] == '\0' ) {
                                        ldap_free_urldesc( lud );
-                                       entry = -1;
+                                       entry = -entry - 1;
                                        break;
                                }
 
@@ -1039,6 +1078,13 @@ fork_child( char *prog, char **args )
 #endif
                execvp( prog, args );
                tester_perror( "execvp", NULL );
+               { int i;
+                       for (i=0; args[i]; i++);
+                       fprintf(stderr,"%d args\n", i);
+                       for (i=0; args[i]; i++)
+                               fprintf(stderr,"%d %s\n", i, args[i]);
+               }
+
                exit( EXIT_FAILURE );
                break;