From 1555fff4ab458d7d4053f1ea6b74c3e14a65ad63 Mon Sep 17 00:00:00 2001 From: Egbert Eich Date: Wed, 14 Aug 2013 22:11:06 +0200 Subject: Make matching algorithm mimic XauGet*AuthByAddr 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 --- process.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'process.c') diff --git a/process.c b/process.c index 2f13f64..750f6d5 100644 --- a/process.c +++ b/process.c @@ -1066,11 +1066,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 */ -- cgit v1.2.1