72 lines
2.0 KiB
Diff
72 lines
2.0 KiB
Diff
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;
|
|
}
|