]> git.sur5r.net Git - openldap/commitdiff
initialize random seed; use high-order bits for better randomness
authorPierangelo Masarati <ando@openldap.org>
Fri, 25 Aug 2006 15:15:13 +0000 (15:15 +0000)
committerPierangelo Masarati <ando@openldap.org>
Fri, 25 Aug 2006 15:15:13 +0000 (15:15 +0000)
tests/progs/slapd-bind.c
tests/progs/slapd-read.c
tests/progs/slapd-search.c

index 4a5f09d541880dc3532d944019884a8b56e15910..11db20b1b50cc4606455222b3a44f1d38d410004 100644 (file)
@@ -288,7 +288,7 @@ do_base( char *uri, char *dn, struct berval *pass, char *base, char *filter, cha
        int version = LDAP_VERSION3;
        char *nullstr = "";
 
-       srand(pid);
+       srand( pid );
 
        ldap_initialize( &ld, uri );
        if ( ld == NULL ) {
@@ -397,16 +397,19 @@ novals:;
 
        /* Ok, got list of DNs, now start binding to each */
        for ( i = 0; i < maxloop; i++ ) {
-               int j, k;
-               struct berval cred = { 0, NULL };
+               int             j;
+               struct berval   cred = { 0, NULL };
 
-               for ( j = 0, k = 0; k < ndns; k++) {
-                       j = rand() % ndns;
-               }
+
+#if 0  /* use high-order bits for better randomness (Numerical Recipes in "C") */
+               j = rand() % ndns;
+#endif
+               j = ((double)ndns)*rand()/(RAND_MAX + 1.0);
 
                if ( creds && !BER_BVISEMPTY( &creds[j] ) ) {
                        cred = creds[j];
                }
+
                if ( do_bind( uri, dns[j], &cred, 1, force, chaserefs, noinit, &ld )
                        && !force )
                {
index 0de1b109f642f0cf7ec12479a0026663da9de0bf..0bc00d20a9d37e76a32e137a5f125561cc2a0e73 100644 (file)
@@ -215,6 +215,8 @@ do_random( char *uri, char *manager, struct berval *passwd,
        char    **values = NULL;
        LDAPMessage *res = NULL, *e = NULL;
 
+       srand( pid );
+
        attrs[ 0 ] = LDAP_NO_ATTRS;
        attrs[ 1 ] = NULL;
 
@@ -275,7 +277,12 @@ do_random( char *uri, char *manager, struct berval *passwd,
                }
 
                for ( i = 0; i < innerloop; i++ ) {
-                       do_read( uri, manager, passwd, values[ rand() % nvalues ], &ld,
+#if 0  /* use high-order bits for better randomness (Numerical Recipes in "C") */
+                       int     r = rand() % nvalues;
+#endif
+                       int     r = ((double)nvalues)*rand()/(RAND_MAX + 1.0);
+
+                       do_read( uri, manager, passwd, values[ r ], &ld,
                                noattrs, 1, maxretries, delay, force,
                                chaserefs );
                }
index 1b7795cca771821a302a97ae683f7882eafc92b3..5709c7be48ca59264c23aaa0e47c8e4a30827287 100644 (file)
@@ -223,6 +223,8 @@ do_random( char *uri, char *manager, struct berval *passwd,
        char    **values = NULL;
        LDAPMessage *res = NULL, *e = NULL;
 
+       srand( pid );
+
        attrs[ 0 ] = attr;
        attrs[ 1 ] = NULL;
 
@@ -294,8 +296,12 @@ do_random( char *uri, char *manager, struct berval *passwd,
 
                for ( i = 0; i < innerloop; i++ ) {
                        char    buf[ BUFSIZ ];
+#if 0  /* use high-order bits for better randomness (Numerical Recipes in "C") */
+                       int     r = rand() % nvalues;
+#endif
+                       int     r = ((double)nvalues)*rand()/(RAND_MAX + 1.0);
 
-                       snprintf( buf, sizeof( buf ), "(%s=%s)", attr, values[ rand() % nvalues ] );
+                       snprintf( buf, sizeof( buf ), "(%s=%s)", attr, values[ r ] );
 
                        do_search( uri, manager, passwd, sbase, buf, &ld, noattrs,
                                        1, maxretries, delay, force, chaserefs );