[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