[PATCH V2 xauth] Make matching algorithm mimic XauGet*AuthByAddr

Egbert Eich eich at freedesktop.org
Wed Aug 14 13:11:06 PDT 2013


Xlib (xcb) uses XauGetBestAuthByAddr() when looking for an
authorization. 'xauth [n]list $DISPLAY' used a slightly
stricter algorithm which doesn't find a possible authorization
for cases where either the family is set to FamilyWild or
address the address length is 0.

Signed-off-by: Egbert Eich <eich at freedesktop.org>
---
v2: Tried to make condition more readable as suggested 
    by walter harms <wharms at bfs.de>.

 process.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/process.c b/process.c
index a9466a7..7ae5f21 100644
--- a/process.c
+++ b/process.c
@@ -1064,11 +1064,15 @@ eq_auth(Xauth *a, Xauth *b)
 static int
 match_auth_dpy(register Xauth *a, register Xauth *b)
 {
-    return ((a->family == b->family &&
-	     a->address_length == b->address_length &&
-	     a->number_length == b->number_length &&
-	     memcmp(a->address, b->address, a->address_length) == 0 &&
-	     memcmp(a->number, b->number, a->number_length) == 0) ? 1 : 0);
+    if (a->family != FamilyWild && b->family != FamilyWild &&
+        (a->family != b->family || a->address_length != b->address_length ||
+         memcmp(a->address, b->address, a->address_length) != 0))
+        return 0;
+    if (a->number_length != 0 && b->number_length != 0 &&
+          (a->number_length != b->number_length ||
+           memcmp(a->number, b->number, a->number_length) != 0))
+        return 0;
+    return 1;
 }
 
 /* return non-zero iff display and authorization type are the same */
-- 
1.8.1.4



More information about the xorg-devel mailing list