解析 X 服务器授权文件
Parsing X server authorization file
是否有任何 API 或文档来帮助解析 X 服务器的授权文件?
我正在使用 xcb
连接到显示器。它接受一个 xcb_auth_info_t
结构作为授权信息。但是,我找不到有关如何构建此结构的任何信息。似乎没有任何关于 X 服务器授权文件格式的文档。
我解决的解决方案:
事实证明,对于 MIT-MAGIC-COOKIE-1
类型 X 规范文件,Xauth
结构(来自 X11/Xauth.h
)成员直接映射到 xcb_auth_info_t
成员。因此,只需使用 XauReadAuth
从您的 X 授权文件中读取一个 Xauth
结构。然后复制 name
、name_length
、data
和 data_length
成员。
如果你想要更便携的方式来解析X权限文件,可以参考xcb
的源码。它非常混乱,但是根据您自己的目的调整他们的源代码应该不会太困难。有关如何打开显示套接字的详细信息,请参阅 xcb_util.c
。获得套接字后,您可以使用 xcb_auth.c
中的方法创建 xcb_auth_info_t
结构(请参阅方法 _xcb_get_auth_info
、get_auth_ptr
和 compute_auth
)。
我只需要通过 unix 套接字 (AF_UNIX
) 进行连接,因此我移植的代码相当少。我主要只是使用 compute_auth
方法(及其依赖项)。
授权协议和文件在 xauth
和 Xsecurity
手册页中进行了简要讨论,在 Xau
库函数(XauWriteAuth
ETC。)。 xcb_auth_info_t
结构似乎在 /usr/include/xcb/xcb.h
文件中定义如下:
/**
* @brief Container for authorization information.
*
* A container for authorization information to be sent to the X server.
*/
typedef struct xcb_auth_info_t {
int namelen; /**< Length of the string name (as returned by strlen). */
char *name; /**< String containing the authentication protocol name, such as "MIT-MAGIC-COOKIE-1" or "XDM-AUTHORIZATION-1". */
int datalen; /**< Length of the data member. */
char *data; /**< Data interpreted in a protocol-specific manner. */
} xcb_auth_info_t;
经过一些搜索,好像您不必自己构建此结构。看看这个讨论:
What's the right way to call xcb_connect_to_display_with_auth_info() given a Xauthority file
Xauthory 文件在 XAUTHORITY 环境变量中指定。该文件由启动 X 服务器的程序生成(例如,根据 man xauth)
中的文档,xdm、startx 或 xauth 本身
与通过 XAUTHORITY 变量指定的 auth 文件的经典连接是这样工作的:
- xcb_connect 调用 xcb_connect_with_auth_info() 并将身份验证信息设置为 NULL
- xcb_connect_with_auth_info() 调用 _xcb_get_auth_info() 以便从默认的 xauthority 文件中获取授权信息。
如果你真的想看看这个函数是如何获取授权信息的:
git clone git://anongit.freedesktop.org/xcb/libxcb
- 查看文件./libxcb/src/xcb_util.c第478行到结尾
- 查看文件 ./libxcb/src/xcb_auth.c 第 312 到 379 行 _xcb_get_auth_info()
是否有任何 API 或文档来帮助解析 X 服务器的授权文件?
我正在使用 xcb
连接到显示器。它接受一个 xcb_auth_info_t
结构作为授权信息。但是,我找不到有关如何构建此结构的任何信息。似乎没有任何关于 X 服务器授权文件格式的文档。
我解决的解决方案:
事实证明,对于 MIT-MAGIC-COOKIE-1
类型 X 规范文件,Xauth
结构(来自 X11/Xauth.h
)成员直接映射到 xcb_auth_info_t
成员。因此,只需使用 XauReadAuth
从您的 X 授权文件中读取一个 Xauth
结构。然后复制 name
、name_length
、data
和 data_length
成员。
如果你想要更便携的方式来解析X权限文件,可以参考xcb
的源码。它非常混乱,但是根据您自己的目的调整他们的源代码应该不会太困难。有关如何打开显示套接字的详细信息,请参阅 xcb_util.c
。获得套接字后,您可以使用 xcb_auth.c
中的方法创建 xcb_auth_info_t
结构(请参阅方法 _xcb_get_auth_info
、get_auth_ptr
和 compute_auth
)。
我只需要通过 unix 套接字 (AF_UNIX
) 进行连接,因此我移植的代码相当少。我主要只是使用 compute_auth
方法(及其依赖项)。
授权协议和文件在 xauth
和 Xsecurity
手册页中进行了简要讨论,在 Xau
库函数(XauWriteAuth
ETC。)。 xcb_auth_info_t
结构似乎在 /usr/include/xcb/xcb.h
文件中定义如下:
/**
* @brief Container for authorization information.
*
* A container for authorization information to be sent to the X server.
*/
typedef struct xcb_auth_info_t {
int namelen; /**< Length of the string name (as returned by strlen). */
char *name; /**< String containing the authentication protocol name, such as "MIT-MAGIC-COOKIE-1" or "XDM-AUTHORIZATION-1". */
int datalen; /**< Length of the data member. */
char *data; /**< Data interpreted in a protocol-specific manner. */
} xcb_auth_info_t;
经过一些搜索,好像您不必自己构建此结构。看看这个讨论:
What's the right way to call xcb_connect_to_display_with_auth_info() given a Xauthority file
Xauthory 文件在 XAUTHORITY 环境变量中指定。该文件由启动 X 服务器的程序生成(例如,根据 man xauth)
中的文档,xdm、startx 或 xauth 本身与通过 XAUTHORITY 变量指定的 auth 文件的经典连接是这样工作的:
- xcb_connect 调用 xcb_connect_with_auth_info() 并将身份验证信息设置为 NULL
- xcb_connect_with_auth_info() 调用 _xcb_get_auth_info() 以便从默认的 xauthority 文件中获取授权信息。
如果你真的想看看这个函数是如何获取授权信息的:
git clone git://anongit.freedesktop.org/xcb/libxcb
- 查看文件./libxcb/src/xcb_util.c第478行到结尾
- 查看文件 ./libxcb/src/xcb_auth.c 第 312 到 379 行 _xcb_get_auth_info()