[PATCH libXau] XauGet*AuthByAddr: add new variants which allow passing an explicit authorization file path.
LaƩrcio de Sousa
laerciosousa at sme-mogidascruzes.sp.gov.br
Mon Oct 20 05:19:37 PDT 2014
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>
---
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__
--
1.8.4.5
More information about the xorg-devel
mailing list