summaryrefslogtreecommitdiffstats
path: root/source/x/x11/patch/xdm/xdm.arc4random.diff
blob: 06948e63ecff4ce7e40a58e1117a0e5e355de1fc (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
diff -aurN xdm-1.1.11/xdm/genauth.c xdm-20220911_468b760/xdm/genauth.c
--- xdm-1.1.11/xdm/genauth.c	2011-09-25 09:35:47.000000000 +0200
+++ xdm-20220911_468b760/xdm/genauth.c	2022-10-08 06:24:57.000000000 +0200
@@ -40,6 +40,22 @@
 
 #include <errno.h>
 
+#ifdef HAVE_ARC4RANDOM
+# ifdef __linux__
+#  if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
+#   if __GLIBC_PREREQ(2, 36)
+#    include <stdlib.h>
+#   else
+#    include <bsd/stdlib.h>
+#   endif
+#  else
+#   include <bsd/stdlib.h>
+#  endif
+# else
+#  include <stdlib.h>
+# endif
+#endif
+
 #include <time.h>
 #define Time_t time_t
 
@@ -372,7 +388,7 @@
 	  randomDevice, errno);
     }
 #  endif
-    /*  Try some pseudo-random number genrator daemon next */
+    /*  Try some pseudo-random number generator daemon next */
     if (prngdSocket != NULL || prngdPort != 0) {
 	    if (get_prngd_bytes((char *)tmpkey, sizeof(tmpkey), prngdPort,
 		    prngdSocket) == 0) {
@@ -408,15 +424,20 @@
     static int	    xdmcpAuthInited;
     long	    ldata[2];
 
-# ifdef ITIMER_REAL
+# ifndef HAVE_ARC4RANDOM
+#  ifdef ITIMER_REAL
     struct timeval  now;
 
     X_GETTIMEOFDAY (&now);
     ldata[0] = now.tv_usec;
     ldata[1] = now.tv_sec;
-# else
+#  else
     ldata[0] = time ((long *) 0);
     ldata[1] = getpid ();
+#  endif
+# else
+    ldata[0] = arc4random();
+    ldata[1] = arc4random();
 # endif
 
     longtochars (ldata[0], data+0);
@@ -462,7 +483,7 @@
 	LogError("Cannot open randomDevice \"%s\", errno = %d\n",
 		 randomDevice, errno);
 #  endif /* DEV_RANDOM */
-    /*  Try some pseudo-random number genrator daemon next */
+    /*  Try some pseudo-random number generator daemon next */
     if (prngdSocket != NULL || prngdPort != 0) {
 	    if (get_prngd_bytes(auth, len, prngdPort, prngdSocket) == 0) {
 		    return 1;