[PATCH xauth] Make matching algorithm mimic XauGet*AuthByAddr

Egbert Eich eich at freedesktop.org
Wed Aug 7 07:57:19 PDT 2013


On Tue, Jul 30, 2013 at 11:01:40AM +0200, Egbert Eich wrote:
> 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.
> 

Does anyone care to look at this?
It will change the behavior of xauth to match what Xlib and xcb 
are doing. Still the behavior of xauth will change potentially
breaking some home-brew scripts.

Cheers,
	Egbert.

> Signed-off-by: Egbert Eich <eich at freedesktop.org>
> ---
>  process.c | 12 +++++++-----
>  1 file changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/process.c b/process.c
> index 0f719ce..b248799 100644
> --- a/process.c
> +++ b/process.c
> @@ -1064,11 +1064,13 @@ 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);
> +    return (((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)) &&
> +	    (a->number_length == 0 || b->number_length == 0 ||
> +	     (a->number_length == b->number_length &&
> +	      memcmp(a->number, b->number, a->number_length) == 0))) ? 1 : 0);
>  }
>  
>  /* return non-zero iff display and authorization type are the same */
> -- 
> 1.8.1.4


More information about the xorg-devel mailing list