Prechádzať zdrojové kódy

- added a random number init. in main.c (tries to seed the prng with a random
value, uses /dev/random if present). TODO: try to use egd if no /dev/random.

Andrei Pelinescu-Onciul 23 rokov pred
rodič
commit
7d31b91133
2 zmenil súbory, kde vykonal 26 pridanie a 3 odobranie
  1. 23 0
      main.c
  2. 3 3
      test/stateless.cfg

+ 23 - 0
main.c

@@ -881,6 +881,8 @@ int main(int argc, char** argv)
 	int ret;
 	struct passwd *pw_entry;
 	struct group  *gr_entry;
+	unsigned int seed;
+	int rfd;
 
 	/*init*/
 	port_no_str_len=0;
@@ -1079,6 +1081,27 @@ int main(int argc, char** argv)
 		goto error;
 	}
 
+	/* seed the prng */
+	/* try to use /dev/random if possible */
+	seed=0;
+	if ((rfd=open("/dev/random", O_RDONLY))!=-1){
+try_again:
+		if (read(rfd, (void*)&seed, sizeof(seed))==-1){
+			if (errno==EINTR) goto try_again; /* interrupted by signal */
+			LOG(L_WARN, "WARNING: could not read from /dev/random (%d)\n",
+						errno);
+		}
+		DBG("read %u from /dev/random\n", seed);
+			close(rfd);
+	}else{
+		LOG(L_WARN, "WARNING: could not open /dev/random (%d)\n", errno);
+	}
+	seed+=getpid()+time(0);
+	DBG("seeding PRNG with %u\n", seed);
+	srand(seed);
+	DBG("test random number %u\n", rand());
+	
+	
 	/* init hash fucntion */
 	if (init_hash()<0) {
 		LOG(L_ERR, "ERROR: init_hash failed\n");

+ 3 - 3
test/stateless.cfg

@@ -6,12 +6,12 @@
 
 
 debug=9          # debug level (cmd line: -dddddddddd)
-fork=yes          # (cmd. line: -D)
-log_stderror=yes # (cmd line: -E)
+#fork=yes          # (cmd. line: -D)
+#log_stderror=yes # (cmd line: -E)
 #log_stderror=no	# (cmd line: -E)
 
 
-children=2
+#children=2
 check_via=no     # (cmd. line: -v)
 dns=off           # (cmd. line: -r)
 rev_dns=off      # (cmd. line: -R)