Blob Blame History Raw
diff -up libXau-1.0.6/AuGetBest.c.jx libXau-1.0.6/AuGetBest.c
--- libXau-1.0.6/AuGetBest.c.jx	2009-02-16 12:59:07.000000000 -0500
+++ libXau-1.0.6/AuGetBest.c	2011-10-12 11:19:41.259897224 -0400
@@ -168,6 +168,67 @@ XauGetBestAuthByAddr (
 	}
 	XauDisposeAuth (entry);
     }
+    if (!best) {
+	rewind (auth_file);
+	for (;;) {
+	    entry = XauReadAuth (auth_file);
+	    if (!entry)
+		break;
+	    /*
+	     * Match when:
+	     *   either family or entry->family are FamilyWild or
+	     *    family and entry->family are the same and
+	     *     address and entry->address are the same or
+	     *     family is FamilyLocal
+	     *  and
+	     *   either number or entry->number are empty or
+	     *    number and entry->number are the same
+	     *  and
+	     *   either name or entry->name are empty or
+	     *    name and entry->name are the same
+	     */
+
+	    if ((family == FamilyWild || entry->family == FamilyWild ||
+		 (entry->family == family &&
+		 ((address_length == entry->address_length &&
+		  binaryEqual (entry->address, address, (int)address_length))
+#ifdef hpux
+		 || (family == FamilyLocal &&
+		    fully_qual_address_length == entry->address_length &&
+		    binaryEqual (entry->address, fully_qual_address,
+			(int) fully_qual_address_length))
+#endif
+		 || (family == FamilyLocal)
+		))) &&
+		(number_length == 0 || entry->number_length == 0 ||
+		 (number_length == entry->number_length &&
+		  binaryEqual (entry->number, number, (int)number_length))))
+	    {
+		if (best_type == 0)
+		{
+		    best = entry;
+		    break;
+		}
+		for (type = 0; type < best_type; type++)
+		    if (type_lengths[type] == entry->name_length &&
+			!(strncmp (types[type], entry->name, entry->name_length)))
+		    {
+			break;
+		    }
+		if (type < best_type)
+		{
+		    if (best)
+			XauDisposeAuth (best);
+		    best = entry;
+		    best_type = type;
+		    if (type == 0)
+			break;
+		    continue;
+		}
+	    }
+	    XauDisposeAuth (entry);
+	}
+    }
     (void) fclose (auth_file);
     return best;
 }