File U_Use-arc4random-when-available-to-produce-the-auth-co.patch of Package libICE.6607

From 80f62c54fbd50a3bbdf9c37258525098c9117830 Mon Sep 17 00:00:00 2001
From: Matthieu Herrb <matthieu.herrb@laas.fr>
Date: Thu, 29 Aug 2013 22:18:14 +0200
Subject: [PATCH] Use arc4random when available to produce the auth cookie.

arc4random() and associated functions can be found in libbsd on
GNU/Linux systems.

Signed-off-by: Matthieu Herrb <matthieu.herrb@laas.fr>
Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
---
 configure.ac  |  3 ++-
 src/iceauth.c | 11 ++++++++++-
 2 files changed, 12 insertions(+), 2 deletions(-)

Index: libICE-1.0.8/configure.ac
===================================================================
--- libICE-1.0.8.orig/configure.ac
+++ libICE-1.0.8/configure.ac
@@ -38,7 +38,8 @@ XTRANS_CONNECTION_FLAGS
 AC_DEFINE(ICE_t, 1, [Xtrans transport type])
 
 # Checks for library functions.
-AC_CHECK_FUNCS([asprintf])
+AC_CHECK_LIB([bsd], [arc4random_buf])
+AC_CHECK_FUNCS([asprintf arc4random_buf])
 
 # Allow checking code with lint, sparse, etc.
 XORG_WITH_LINT
Index: libICE-1.0.8/src/iceauth.c
===================================================================
--- libICE-1.0.8.orig/src/iceauth.c
+++ libICE-1.0.8/src/iceauth.c
@@ -36,6 +36,10 @@ Author: Ralph Mor, X Consortium
 #include <time.h>
 #define Time_t time_t
 
+#ifdef HAVE_LIBBSD
+#include <bsd/stdlib.h>	/* for arc4random_buf() */
+#endif
+
 static int was_called_state;
 
 /*
@@ -50,14 +54,19 @@ IceGenerateMagicCookie (
 )
 {
     char    *auth;
+#ifndef HAVE_ARC4RANDOM_BUF
     long    ldata[2];
     int	    seed;
     int	    value;
     int	    i;
+#endif
 
     if ((auth = (char *) malloc (len + 1)) == NULL)
 	return (NULL);
 
+#ifdef HAVE_ARC4RANDOM_BUF
+    arc4random_buf(auth, len);
+#else
 #ifdef ITIMER_REAL
     {
 	struct timeval  now;
@@ -81,8 +90,8 @@ IceGenerateMagicCookie (
 	value = rand ();
 	auth[i] = value & 0xff;
     }
+#endif
     auth[len] = '\0';
-
     return (auth);
 }
 
openSUSE Build Service is sponsored by