]> git.sur5r.net Git - openldap/commitdiff
don't chase referrals (essentially, because it may cause an endless loop in libldap...
authorPierangelo Masarati <ando@openldap.org>
Sat, 25 Mar 2006 08:10:31 +0000 (08:10 +0000)
committerPierangelo Masarati <ando@openldap.org>
Sat, 25 Mar 2006 08:10:31 +0000 (08:10 +0000)
tests/progs/slapd-addel.c
tests/progs/slapd-bind.c
tests/progs/slapd-modify.c
tests/progs/slapd-modrdn.c
tests/progs/slapd-read.c
tests/progs/slapd-search.c
tests/progs/slapd-tester.c

index 5c437634fff20128f029995d3878b538bf29effb..a699c324bec7babf59fda5b29e598a603279cac3 100644 (file)
@@ -320,6 +320,7 @@ retry:;
        }
 
        (void) ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version );
+       (void) ldap_set_option( ld, LDAP_OPT_REFERRALS, LDAP_OPT_OFF );
 
        if ( do_retry == maxretries ) {
                fprintf( stderr, "PID=%ld - Add/Delete(%d): entry=\"%s\".\n",
index c538e4ff7aa9423a9162653dad546e6aad30e064..b24a84944f4f77353f864c499b612e262c5a4e31 100644 (file)
@@ -197,6 +197,8 @@ do_bind( char *uri, char *dn, struct berval *pass, int maxloop, int force, int n
 
                        (void) ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION,
                                &version ); 
+                       (void) ldap_set_option( ld, LDAP_OPT_REFERRALS,
+                               LDAP_OPT_OFF );
                }
 
                rc = ldap_sasl_bind_s( ld, dn, LDAP_SASL_SIMPLE, pass, NULL, NULL, NULL );
index 4be8a5d97d40848880d5b9c1b6e91e5ae33c2314..4063c52b6958806c704bcbebbf71f438b4595782 100644 (file)
@@ -194,6 +194,7 @@ do_modify( char *uri, char *manager,
        struct ldapmod mod;
        struct ldapmod *mods[2];
        char *values[2];
+       int version = LDAP_VERSION3;
 
        pid = getpid();
        
@@ -212,11 +213,8 @@ retry:;
                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, LDAP_OPT_OFF );
 
        if ( do_retry == maxretries ) {
                fprintf( stderr, "PID=%ld - Modify(%d): entry=\"%s\".\n",
index b28ae2848439f48b6def20a6936ca5f53c37cf92..3b8d27563c70099f3c4e84161161017dc742c248 100644 (file)
@@ -205,6 +205,7 @@ retry:;
        }
 
        (void) ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version ); 
+       (void) ldap_set_option( ld, LDAP_OPT_REFERRALS, LDAP_OPT_OFF );
 
        if ( do_retry == maxretries ) {
                fprintf( stderr, "PID=%ld - Modrdn(%d): entry=\"%s\".\n",
index 78173dc60b97463a35a998a4348b169b6b8cfa89..1febf0e54638d0b995aa341cdb97c582202d883f 100644 (file)
@@ -168,6 +168,7 @@ retry:;
        }
 
        (void) ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version ); 
+       (void) ldap_set_option( ld, LDAP_OPT_REFERRALS, LDAP_OPT_OFF );
 
        if ( do_retry == maxretries ) {
                fprintf( stderr, "PID=%ld - Read(%d): entry=\"%s\".\n",
index 4cbe5453078a9d0cafb52b0f17cedb9221777f6b..3d330ac204e4474343cbaaa8668c7bb97809c7f4 100644 (file)
@@ -212,6 +212,7 @@ do_random( char *uri, char *manager, struct berval *passwd,
        }
 
        (void) ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version ); 
+       (void) ldap_set_option( ld, LDAP_OPT_REFERRALS, LDAP_OPT_OFF );
 
        if ( do_retry == maxretries ) {
                fprintf( stderr, "PID=%ld - Search(%d): base=\"%s\", filter=\"%s\" attr=\"%s\".\n",
@@ -258,6 +259,10 @@ do_random( char *uri, char *manager, struct berval *passwd,
 
                ldap_msgfree( res );
 
+               if ( do_retry == maxretries ) {
+                       fprintf( stderr, "PID=%ld - got %d values.\n", (long) pid, nvalues );
+               }
+
                for ( i = 0; i < innerloop; i++ ) {
                        char    buf[ BUFSIZ ];
 
@@ -297,6 +302,7 @@ retry:;
                }
 
                (void) ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version ); 
+               (void) ldap_set_option( ld, LDAP_OPT_REFERRALS, LDAP_OPT_OFF );
 
                if ( do_retry == maxretries ) {
                        fprintf( stderr, "PID=%ld - Search(%d): base=\"%s\", filter=\"%s\".\n",
index e9a3d2832af2e21bfaf4fe2f1afbb470d953b168..9358e93403933379ceb9b5f4bf643a68f31b6b34 100644 (file)
@@ -58,7 +58,7 @@
 #define TBINDFILE              "do_bind.0"
 
 static char *get_file_name( char *dirname, char *filename );
-static int  get_search_filters( char *filename, char *filters[], char *bases[] );
+static int  get_search_filters( char *filename, char *filters[], char *attrs[], char *bases[] );
 static int  get_read_entries( char *filename, char *entries[] );
 static void fork_child( char *prog, char **args );
 static void    wait4kids( int nkidval );
@@ -115,6 +115,7 @@ main( int argc, char **argv )
        /* search */
        char            *sfile = NULL;
        char            *sreqs[MAXREQS];
+       char            *sattrs[MAXREQS];
        char            *sbase[MAXREQS];
        int             snum = 0;
        char            *sargs[MAXARGS];
@@ -276,7 +277,7 @@ main( int argc, char **argv )
 
        /* look for search requests */
        if ( sfile ) {
-               snum = get_search_filters( sfile, sreqs, sbase );
+               snum = get_search_filters( sfile, sreqs, sattrs, sbase );
        }
 
        /* look for read requests */
@@ -291,12 +292,12 @@ main( int argc, char **argv )
 
        /* look for modify requests */
        if ( modfile ) {
-               modnum = get_search_filters( modfile, modreqs, moddn );
+               modnum = get_search_filters( modfile, modreqs, NULL, moddn );
        }
 
        /* look for bind requests */
        if ( bfile ) {
-               bnum = get_search_filters( bfile, bcreds, breqs );
+               bnum = get_search_filters( bfile, bcreds, NULL, breqs );
        }
 
        /* setup friendly option */
@@ -359,7 +360,11 @@ main( int argc, char **argv )
        sargs[sanum++] = NULL;          /* will hold the search base */
        sargs[sanum++] = "-f";
        sargs[sanum++] = NULL;          /* will hold the search request */
+
        sargs[sanum++] = NULL;
+       sargs[sanum] = NULL;            /* might hold the "attr" request */
+
+       sargs[sanum + 1] = NULL;
 
        /*
         * generate the read clients
@@ -544,6 +549,13 @@ main( int argc, char **argv )
 
                        sargs[sanum - 2] = sreqs[j];
                        sargs[sanum - 4] = sbase[j];
+                       if ( sattrs[j] != NULL ) {
+                               sargs[sanum - 1] = "-a";
+                               sargs[sanum] = sattrs[j];
+
+                       } else {
+                               sargs[sanum - 1] = NULL;
+                       }
                        fork_child( scmd, sargs );
 
                }
@@ -603,7 +615,7 @@ get_file_name( char *dirname, char *filename )
 
 
 static int
-get_search_filters( char *filename, char *filters[], char *bases[] )
+get_search_filters( char *filename, char *filters[], char *attrs[], char *bases[] )
 {
        FILE    *fp;
        int     filter = 0;
@@ -621,7 +633,23 @@ get_search_filters( char *filename, char *filters[], char *bases[] )
                        if (( nl = strchr( line, '\r' )) || ( nl = strchr( line, '\n' )))
                                *nl = '\0';
 
-                       filters[filter++] = ArgDup( line );
+                       filters[filter] = ArgDup( line );
+                       if ( attrs ) {
+                               if ( filters[filter][0] == '+') {
+                                       char    *sep = strchr( filters[filter], ':' );
+
+                                       if ( sep != NULL ) {
+                                               attrs[ filter ] = &filters[ filter ][ 1 ];
+                                               sep[ 0 ] = '\0';
+                                               /* NOTE: don't free this! */
+                                               filters[ filter ] = &sep[ 1 ];
+                                       }
+
+                               } else {
+                                       attrs[ filter] = NULL;
+                               }
+                       }
+                       filter++;
 
                }
                fclose( fp );