From 4c1712e40171e2861359878ea885e14936298acf Mon Sep 17 00:00:00 2001
From: unknown <monty@mashka.mysql.fi>
Date: Tue, 6 Aug 2002 03:21:12 +0300
Subject: [PATCH] Changed initialization of RND() to be less predictable. Use
 MYSQL_CONFIG_NAME instead of "my" as the configuration file name.

Docs/manual.texi:
  Changelog
include/mysql_version.h.in:
  Use MYSQL_CONFIG_NAME instead of "my" as the configuration file name.
---
 Docs/manual.texi           |  2 ++
 include/mysql_version.h.in |  1 +
 sql/mysqld.cc              | 14 +++++++++++---
 3 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/Docs/manual.texi b/Docs/manual.texi
index bc571c4bcb6..a9eef29f11a 100644
--- a/Docs/manual.texi
+++ b/Docs/manual.texi
@@ -46928,6 +46928,8 @@ not yet 100% confident in this code.
 @appendixsubsec Changes in release 3.23.52
 @itemize @bullet
 @item
+Changed initialisation of @code{RND()} to make it less predicatable.
+@item
 Fixed problem with @code{GROUP BY} on result with expression that created a
 @code{BLOB} field.
 @item
diff --git a/include/mysql_version.h.in b/include/mysql_version.h.in
index 44fd00f806a..989b1a95494 100644
--- a/include/mysql_version.h.in
+++ b/include/mysql_version.h.in
@@ -13,6 +13,7 @@
 #define MYSQL_VERSION_ID		@MYSQL_VERSION_ID@
 #define MYSQL_PORT			@MYSQL_TCP_PORT@
 #define MYSQL_UNIX_ADDR			"@MYSQL_UNIX_ADDR@"
+#define MYSQL_CONFIG_NAME		"my"
 
 /* mysqld compile time options */
 #ifndef MYSQL_CHARSET
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 251dda77d34..d73ec9fc0d6 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -1690,7 +1690,7 @@ int main(int argc, char **argv)
     exit( 1 );
   }
 #endif
-  load_defaults("my",load_default_groups,&argc,&argv);
+  load_defaults(MYSQL_CONFIG_NAME,load_default_groups,&argc,&argv);
   defaults_argv=argv;
   mysql_tmpdir=getenv("TMPDIR");	/* Use this if possible */
 #if defined( __WIN__) || defined(OS2)
@@ -2250,7 +2250,15 @@ static void create_new_thread(THD *thd)
   for (uint i=0; i < 8 ; i++)			// Generate password teststring
     thd->scramble[i]= (char) (rnd(&sql_rand)*94+33);
   thd->scramble[8]=0;
-  thd->rand=sql_rand;
+  /* 
+     We need good random number initialization for new thread
+     Just coping global one will not work 
+  */
+  {
+    ulong tmp=(ulong) (rnd(&sql_rand) * 3000000);
+    randominit(&(thd->rand), tmp + (ulong) start_time,
+	       tmp + (ulong) thread_id);
+  }
   thd->real_id=pthread_self();			// Keep purify happy
 
   /* Start a new thread to handle connection */
@@ -3386,7 +3394,7 @@ Starts the MySQL server\n");
   --skip-innodb		       Don't use Innodb (will save memory)\n\
 ");
 #endif /* HAVE_INNOBASE_DB */
-  print_defaults("my",load_default_groups);
+  print_defaults(MYSQL_CONFIG_NAME,load_default_groups);
   puts("");
 
 #include "sslopt-usage.h"