--- xdm/genauth.c~	Wed Jan 24 22:04:37 1996
+++ xdm/genauth.c	Fri Sep 11 12:01:50 1998
@@ -205,11 +205,28 @@
     {
     	int	    seed;
     	int	    value;
-    	int	    i;
-    
+    	int	    i=0;
+	static int  fd=-1;
+	static int  first_time=1;
+
+	if (first_time) 
+	{
+		fd=open("/dev/urandom", O_RDONLY); 
+		if (fd!=-1) RegisterCloseOnFork (fd);
+		first_time=0;
+	}
+
+	if (fd!=-1) i=read(fd, auth, len);
+	if (i==-1) i=0;
+	if (i==len) return;
+
+	/* GenerateAuthData isn't expected to fail, and has no method for
+	   returning an error. Instead, we have to do our best to produce 
+	   a key so we fall back to the old, unsafe, method */
+
     	seed = (ldata[0]) + (ldata[1] << 16);
     	xdm_srand (seed);
-    	for (i = 0; i < len; i++)
+    	while (i++<len)
     	{
 	    value = xdm_rand ();
 	    auth[i] = (value & 0xff00) >> 8;

