$OpenBSD: patch-cvsyncd_access_c,v 1.2 2014/11/19 23:49:41 sthen Exp $
--- cvsyncd/access.c.orig	Mon Jul 18 07:33:02 2005
+++ cvsyncd/access.c	Mon Nov 17 23:35:16 2014
@@ -103,10 +103,12 @@ static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER
 bool
 access_init(size_t sz)
 {
+#if defined(NO_ARC4RANDOM)
 #if !defined(NO_INITSTATE)
 	static char acl_random_state[256];
 #endif /* !defined(NO_INITSTATE) */
 	struct timeval tv;
+#endif /* defined(NO_ARC4RANDOM) */
 
 	if ((acl = malloc(sz * sizeof(*acl))) == NULL) {
 		logmsg_err("ACL: %s", strerror(errno));
@@ -119,6 +121,7 @@ access_init(size_t sz)
 		return (false);
 	}
 
+#if defined(NO_ARC4RANDOM)
 	(void)gettimeofday(&tv, NULL);
 
 #if !defined(NO_INITSTATE)
@@ -127,6 +130,7 @@ access_init(size_t sz)
 #else /* !defined(NO_INITSTATE) */
 	srandom((unsigned long)tv.tv_usec);
 #endif /* !defined(NO_INITSTATE) */
+#endif /* defined(NO_ARC4RANDOM) */
 
 	acl_name[0] = '\0';
 	acl_size = sz;
@@ -193,6 +197,11 @@ access_authorize(int sock, struct config *cf)
 	}
 	sa->sa_error = CVSYNC_NO_ERROR;
 
+	sa->sa_socket = sock;
+	sa->sa_config = cf;
+
+	config_acquire(cf);
+
 	if (cvsync_isinterrupted()) {
 		sa->sa_status = ACL_DENY;
 		sa->sa_error = CVSYNC_ERROR_UNAVAIL;
@@ -205,7 +214,11 @@ access_authorize(int sock, struct config *cf)
 		sa->sa_error = CVSYNC_ERROR_UNAVAIL;
 		return (sa);
 	}
+#if !defined(NO_ARC4RANDOM)
+	_v.v32 = arc4random();
+#else /* !defined(NO_ARC4RANDOM) */
 	_v.v32 = (uint32_t)random();
+#endif /* !defined(NO_ARC4RANDOM) */
 	wn = snprintf(sa->sa_hostinfo, sizeof(sa->sa_hostinfo),
 		      "[%s] (%02x%02x%02x%02x)", sa->sa_addr,
 		      _v.v8[0], _v.v8[1], _v.v8[2], _v.v8[3]);
@@ -305,11 +318,6 @@ access_authorize(int sock, struct config *cf)
 		sa->sa_error = CVSYNC_ERROR_UNAVAIL;
 		return (sa);
 	}
-
-	sa->sa_socket = sock;
-	sa->sa_config = cf;
-
-	config_acquire(cf);
 
 	logmsg("%s Connected (status=%d)", sa->sa_hostinfo, sa->sa_status);
 	time(&sa->sa_tick);
