mirror of
				https://github.com/osmarks/ngircd.git
				synced 2025-10-31 22:13:00 +00:00 
			
		
		
		
	Add support for arc4random
If arc4random is present it will be used over the srand/rand interface. This fixes some warnings in OpenBSD-current.
This commit is contained in:
		| @@ -187,8 +187,9 @@ AC_CHECK_FUNCS([ \ | ||||
|  | ||||
| # Optional functions | ||||
| AC_CHECK_FUNCS_ONCE([ \ | ||||
| 	gai_strerror getaddrinfo getnameinfo inet_aton sigaction sigprocmask \ | ||||
| 	snprintf vsnprintf strdup strndup strlcpy strlcat strtok_r waitpid]) | ||||
| 	arc4random gai_strerror getaddrinfo getnameinfo inet_aton sigaction \ | ||||
| 	sigprocmask snprintf vsnprintf strdup strndup strlcpy strlcat strtok_r \ | ||||
| 	waitpid]) | ||||
|  | ||||
| # -- Configuration options -- | ||||
|  | ||||
|   | ||||
| @@ -533,7 +533,11 @@ Conf_UnsetServer( CONN_ID Idx ) | ||||
| 				/* "Short" connection, enforce "ConnectRetry" | ||||
| 				 * but randomize it a little bit: 15 seconds. */ | ||||
| 				Conf_Server[i].lasttry = | ||||
| #ifdef HAVE_ARC4RANDOM | ||||
| 					t + (arc4random() % 15); | ||||
| #else | ||||
| 					t + rand() / (RAND_MAX / 15); | ||||
| #endif | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|   | ||||
| @@ -242,7 +242,11 @@ IRC_NICK( CLIENT *Client, REQUEST *Req ) | ||||
|  | ||||
| #ifndef STRICT_RFC | ||||
| 			if (Conf_AuthPing) { | ||||
| #ifdef HAVE_ARC4RANDOM | ||||
| 				Conn_SetAuthPing(Client_Conn(Client), arc4random()); | ||||
| #else | ||||
| 				Conn_SetAuthPing(Client_Conn(Client), rand()); | ||||
| #endif | ||||
| 				IRC_WriteStrClient(Client, "PING :%ld", | ||||
| 					Conn_GetAuthPing(Client_Conn(Client))); | ||||
| 				LogDebug("Connection %d: sent AUTH PING %ld ...", | ||||
|   | ||||
| @@ -613,6 +613,13 @@ NGIRCd_getNobodyID(uid_t *uid, gid_t *gid ) | ||||
| #endif | ||||
|  | ||||
|  | ||||
| #ifdef HAVE_ARC4RANDOM | ||||
| static void | ||||
| Random_Init(void) | ||||
| { | ||||
|  | ||||
| } | ||||
| #else | ||||
| static bool | ||||
| Random_Init_Kern(const char *file) | ||||
| { | ||||
| @@ -642,6 +649,7 @@ Random_Init(void) | ||||
| 		return; | ||||
| 	srand(rand() ^ (unsigned)getpid() ^ (unsigned)time(NULL)); | ||||
| } | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /** | ||||
|   | ||||
| @@ -50,7 +50,9 @@ GLOBAL pid_t | ||||
| Proc_Fork(PROC_STAT *proc, int *pipefds, void (*cbfunc)(int, short), int timeout) | ||||
| { | ||||
| 	pid_t pid; | ||||
| #ifndef HAVE_ARC4RANDOM | ||||
| 	unsigned int seed; | ||||
| #endif | ||||
|  | ||||
| 	assert(proc != NULL); | ||||
| 	assert(pipefds != NULL); | ||||
| @@ -62,7 +64,9 @@ Proc_Fork(PROC_STAT *proc, int *pipefds, void (*cbfunc)(int, short), int timeout | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| #ifndef HAVE_ARC4RANDOM | ||||
| 	seed = (unsigned int)rand(); | ||||
| #endif | ||||
| 	pid = fork(); | ||||
| 	switch (pid) { | ||||
| 	case -1: | ||||
| @@ -73,7 +77,9 @@ Proc_Fork(PROC_STAT *proc, int *pipefds, void (*cbfunc)(int, short), int timeout | ||||
| 		return -1; | ||||
| 	case 0: | ||||
| 		/* New child process: */ | ||||
| #ifndef HAVE_ARC4RANDOM | ||||
| 		srand(seed ^ (unsigned int)time(NULL) ^ getpid()); | ||||
| #endif | ||||
| 		Signals_Exit(); | ||||
| 		signal(SIGTERM, Proc_GenericSignalHandler); | ||||
| 		signal(SIGALRM, Proc_GenericSignalHandler); | ||||
|   | ||||
| @@ -144,11 +144,16 @@ ngt_RandomStr(char *String, const size_t len) | ||||
| 	assert(String != NULL); | ||||
|  | ||||
| 	gettimeofday(&t, NULL); | ||||
| #ifndef HAVE_ARC4RANDOM | ||||
| 	srand((unsigned)(t.tv_usec * t.tv_sec)); | ||||
|  | ||||
| 	for (i = 0; i < len; ++i) { | ||||
| 		String[i] = chars[rand() % (sizeof(chars) - 1)]; | ||||
| 	} | ||||
| #else | ||||
| 	for (i = 0; i < len; ++i) | ||||
| 		String[i] = chars[arc4random() % (sizeof(chars) - 1)]; | ||||
| #endif | ||||
| 	String[len] = '\0'; | ||||
|  | ||||
| 	return String; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Federico G. Schwindt
					Federico G. Schwindt