[PATCH] Seed random generator for SMBD in main()

Robin McCorkell rmccorkell at karoshi.org.uk
Fri Jun 5 05:29:39 MDT 2015


Remove srandom() from DFS shuffling, only seed once during process init.
Improves performance and gives better shuffling, also provides
protection against missing libc functions

See source3/nmbd/nmbd.c:857 for the original line

---
 source3/smbd/msdfs.c  | 4 +---
 source3/smbd/server.c | 2 ++
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/source3/smbd/msdfs.c b/source3/smbd/msdfs.c
index a39efce..3a27293 100644
--- a/source3/smbd/msdfs.c
+++ b/source3/smbd/msdfs.c
@@ -434,10 +434,8 @@ static void shuffle_strlist(char **list, int count)
 	int i, r;
 	char *tmp;
 
-	srandom(time(NULL));
-
 	for (i = count; i > 1; i--) {
-		r = random() % i;
+		r = sys_random() % i;
 
 		tmp = list[i-1];
 		list[i-1] = list[r];
diff --git a/source3/smbd/server.c b/source3/smbd/server.c
index 9746d84..93cb91e 100644
--- a/source3/smbd/server.c
+++ b/source3/smbd/server.c
@@ -1154,6 +1154,8 @@ extern void build_options(bool screen);
 
 	TimeInit();
 
+	sys_srandom(time(NULL) ^ getpid());
+
 #ifdef HAVE_SET_AUTH_PARAMETERS
 	set_auth_parameters(argc,argv);
 #endif
-- 
1.9.1



More information about the samba-technical mailing list