[PATCH libXau] XauGet*AuthByAddr: add new variants which allow passing an explicit authorization file path.

Hans de Goede hdegoede at redhat.com
Thu Oct 23 02:26:54 PDT 2014


Hi,

On 10/20/2014 02:19 PM, Laércio de Sousa wrote:
> It will allow extending functions like Xlib's XOpenDislay() or XCB's xcb_connect()
> to allow passing an explicit authorization file path (they already allow passing
> an explicit display number). This can be useful in exceptional cases where
> XAUTHORITY environment variable is not set at the time a X11 client is launched.
> Currently, a X11 client that needs to connect to a display with a given
> authorization file needs to set XAUTHORITY itself (if not yet set) before connecting.
> 
> Signed-off-by: Laércio de Sousa <laerciosousa at sme-mogidascruzes.sp.gov.br>

Code looks good to me and is:

Acked-by: Hans de Goede <hdegoede at redhat.com>

I think this should get a second look by someone more familiar with the Xau code
though, so I'll leave merging this up to someone else.

Regards,

Hans

> ---
>  AuGetAddr.c                          | 38 ++++++++++++++++++++++++++++--
>  AuGetBest.c                          | 36 +++++++++++++++++++++++++++--
>  include/X11/Xauth.h                  | 45 ++++++++++++++++++++++++++++++++++++
>  man/Xau.man                          | 20 ++++++++++++++--
>  man/XauGetAuthByAddrWithFile.man     |  1 +
>  man/XauGetBestAuthByAddrWithFile.man |  1 +
>  6 files changed, 135 insertions(+), 6 deletions(-)
>  create mode 100644 man/XauGetAuthByAddrWithFile.man
>  create mode 100644 man/XauGetBestAuthByAddrWithFile.man
> 
> diff --git a/AuGetAddr.c b/AuGetAddr.c
> index 6f5fe16..3aeffa4 100644
> --- a/AuGetAddr.c
> +++ b/AuGetAddr.c
> @@ -33,7 +33,8 @@ in this Software without prior written authorization from The Open Group.
>  #define binaryEqual(a, b, len) (memcmp(a, b, len) == 0)
>  
>  Xauth *
> -XauGetAuthByAddr (
> +XauGetAuthByAddrWithFile (
> +_Xconst char*	auth_file,
>  #if NeedWidePrototypes
>  unsigned int	family,
>  unsigned int	address_length,
> @@ -59,7 +60,7 @@ _Xconst char*	name)
>      char    *auth_name;
>      Xauth   *entry;
>  
> -    auth_name = XauFileName ();
> +    auth_name = auth_file ? auth_file : XauFileName ();
>      if (!auth_name)
>  	return NULL;
>      if (access (auth_name, R_OK) != 0)		/* checks REAL id */
> @@ -100,3 +101,36 @@ _Xconst char*	name)
>      (void) fclose (auth_file);
>      return entry;
>  }
> +
> +Xauth *
> +XauGetAuthByAddr (
> +#if NeedWidePrototypes
> +unsigned int	family,
> +unsigned int	address_length,
> +#else
> +unsigned short	family,
> +unsigned short	address_length,
> +#endif
> +_Xconst char*	address,
> +#if NeedWidePrototypes
> +unsigned int	number_length,
> +#else
> +unsigned short	number_length,
> +#endif
> +_Xconst char*	number,
> +#if NeedWidePrototypes
> +unsigned int	name_length,
> +#else
> +unsigned short	name_length,
> +#endif
> +_Xconst char*	name)
> +{
> +    XauGetAuthByAddrWithFile (NULL,
> +                              family,
> +                              address_length,
> +                              address,
> +                              number_length,
> +                              number,
> +                              name_length,
> +                              name);
> +}
> diff --git a/AuGetBest.c b/AuGetBest.c
> index 5556559..73ee907 100644
> --- a/AuGetBest.c
> +++ b/AuGetBest.c
> @@ -41,7 +41,8 @@ in this Software without prior written authorization from The Open Group.
>  #define binaryEqual(a, b, len) (memcmp(a, b, len) == 0)
>  
>  Xauth *
> -XauGetBestAuthByAddr (
> +XauGetBestAuthByAddrWithFile (
> +    _Xconst char*	auth_file,
>  #if NeedWidePrototypes
>      unsigned int	family,
>      unsigned int	address_length,
> @@ -71,7 +72,7 @@ XauGetBestAuthByAddr (
>      unsigned short	fully_qual_address_length;
>  #endif
>  
> -    auth_name = XauFileName ();
> +    auth_name = auth_file ? auth_file : XauFileName ();
>      if (!auth_name)
>  	return NULL;
>      if (access (auth_name, R_OK) != 0)		/* checks REAL id */
> @@ -161,3 +162,34 @@ XauGetBestAuthByAddr (
>      (void) fclose (auth_file);
>      return best;
>  }
> +
> +Xauth *
> +XauGetBestAuthByAddr (
> +#if NeedWidePrototypes
> +    unsigned int	family,
> +    unsigned int	address_length,
> +#else
> +    unsigned short	family,
> +    unsigned short	address_length,
> +#endif
> +    _Xconst char*	address,
> +#if NeedWidePrototypes
> +    unsigned int	number_length,
> +#else
> +    unsigned short	number_length,
> +#endif
> +    _Xconst char*	number,
> +    int			types_length,
> +    char**		types,
> +    _Xconst int*	type_lengths)
> +{
> +    XauGetBestAuthByAddrWithFile (NULL,
> +                                  family,
> +                                  address_length,
> +                                  address,
> +                                  number_length,
> +                                  number,
> +                                  types_length,
> +                                  types,
> +                                  type_lengths);
> +}
> diff --git a/include/X11/Xauth.h b/include/X11/Xauth.h
> index a707bed..c5765ff 100644
> --- a/include/X11/Xauth.h
> +++ b/include/X11/Xauth.h
> @@ -112,6 +112,30 @@ unsigned short	/* name_length */,
>  _Xconst char*	/* name */
>  );
>  
> +Xauth *XauGetAuthByAddrWithFile(
> +_Xconst char*	/* auth_file */,
> +#if NeedWidePrototypes
> +unsigned int	/* family */,
> +unsigned int	/* address_length */,
> +#else
> +unsigned short	/* family */,
> +unsigned short	/* address_length */,
> +#endif
> +_Xconst char*	/* address */,
> +#if NeedWidePrototypes
> +unsigned int	/* number_length */,
> +#else
> +unsigned short	/* number_length */,
> +#endif
> +_Xconst char*	/* number */,
> +#if NeedWidePrototypes
> +unsigned int	/* name_length */,
> +#else
> +unsigned short	/* name_length */,
> +#endif
> +_Xconst char*	/* name */
> +);
> +
>  Xauth *XauGetBestAuthByAddr(
>  #if NeedWidePrototypes
>  unsigned int	/* family */,
> @@ -132,6 +156,27 @@ char**		/* type_names */,
>  _Xconst int*	/* type_lengths */
>  );
>  
> +Xauth *XauGetBestAuthByAddrWithFile(
> +_Xconst char*	/* auth_file */,
> +#if NeedWidePrototypes
> +unsigned int	/* family */,
> +unsigned int	/* address_length */,
> +#else
> +unsigned short	/* family */,
> +unsigned short	/* address_length */,
> +#endif
> +_Xconst char*	/* address */,
> +#if NeedWidePrototypes
> +unsigned int	/* number_length */,
> +#else
> +unsigned short	/* number_length */,
> +#endif
> +_Xconst char*	/* number */,
> +int		/* types_length */,
> +char**		/* type_names */,
> +_Xconst int*	/* type_lengths */
> +);
> +
>  void XauDisposeAuth(
>  Xauth*		/* auth */
>  );
> diff --git a/man/Xau.man b/man/Xau.man
> index d1b6603..e7060c7 100644
> --- a/man/Xau.man
> +++ b/man/Xau.man
> @@ -56,11 +56,23 @@ Xauth *XauGetAuthByAddr (unsigned short \fIfamily\fP\^, unsigned short
>  \fInumber_length\fP\^, const char *\fInumber\fP\^, unsigned short
>  \fIname_length\fP\^, const char *\fIname\fP\^);
>  .HP
> +Xauth *XauGetAuthByAddrWithFile (const char* \fIauth_file\fP\^,
> +unsigned short \fIfamily\fP\^, unsigned short \fIaddress_length\fP\^,
> +const char *\fIaddress\fP\^, unsigned short \fInumber_length\fP\^,
> +const char *\fInumber\fP\^, unsigned short \fIname_length\fP\^,
> +const char *\fIname\fP\^);
> +.HP
>  Xauth *XauGetBestAuthByAddr (unsigned short \fIfamily\fP\^, unsigned short
>  \fIaddress_length\fP\^, const char *\fIaddress\fP\^, unsigned short
>  \fInumber_length\fP\^, const char *\fInumber\fP\^, int \fItypes_length\fP\^,
>  char **\fItypes\fR\^, const int *\fItype_lengths\fR\^);
>  .HP
> +Xauth *XauGetBestAuthByAddrWithFile (const char* \fIauth_file\fP\^,
> +unsigned short \fIfamily\fP\^, unsigned short \fIaddress_length\fP\^,
> +const char *\fIaddress\fP\^, unsigned short \fInumber_length\fP\^,
> +const char *\fInumber\fP\^, int \fItypes_length\fP\^, char **\fItypes\fR\^,
> +const int *\fItype_lengths\fR\^);
> +.HP
>  int XauLockAuth (const char *\fIfile_name\fP\^, int \fIretries\fP\^, int
>  \fItimeout\fP\^, long \fIdead\fP\^);
>  .HP
> @@ -85,7 +97,9 @@ returns 1 on success, 0 on failure.
>  .PP
>  \fBXauGetAuthByAddr\fP searches for an entry which matches the given network
>  address/display number pair.  The entry is \fBnot\fP statically allocated
> -and should be freed by calling \fIXauDisposeAuth\fP.
> +and should be freed by calling \fIXauDisposeAuth\fP. It gets authorization
> +file path by calling \fIXauFileName\fP, but its corresponding function
> +\fBXauGetAuthByAddrWithFile\fP allows passing an explicit one.
>  .PP
>  \fBXauGetBestAuthByAddr\fP is similar to \fBXauGetAuthByAddr\fP, except
>  that a list of acceptable authentication methods is specified.  Xau will
> @@ -94,7 +108,9 @@ most secure authentication method).  The \fItypes\fP argument is an array of
>  strings, one string for each authentication method.  \fItypes_length\fP
>  specifies how many elements are in the \fItypes\fP array.
>  \fItypes_lengths\fP is an array of integers representing the length
> -of each string.
> +of each string. It gets authorization file path by calling \fIXauFileName\fP,
> +but its corresponding function \fBXauGetBestAuthByAddrWithFile\fP allows
> +passing an explicit one.
>  .PP
>  \fBXauLockAuth\fP does the work necessary to synchronously update an
>  authorization file.  First it makes two file names, one with ``-c'' appended
> diff --git a/man/XauGetAuthByAddrWithFile.man b/man/XauGetAuthByAddrWithFile.man
> new file mode 100644
> index 0000000..df111d6
> --- /dev/null
> +++ b/man/XauGetAuthByAddrWithFile.man
> @@ -0,0 +1 @@
> +.so man__libmansuffix__/Xau.__libmansuffix__
> diff --git a/man/XauGetBestAuthByAddrWithFile.man b/man/XauGetBestAuthByAddrWithFile.man
> new file mode 100644
> index 0000000..df111d6
> --- /dev/null
> +++ b/man/XauGetBestAuthByAddrWithFile.man
> @@ -0,0 +1 @@
> +.so man__libmansuffix__/Xau.__libmansuffix__
> 


More information about the xorg-devel mailing list