解析 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 结构。然后复制 namename_lengthdatadata_length 成员。

如果你想要更便携的方式来解析X权限文件,可以参考xcb的源码。它非常混乱,但是根据您自己的目的调整他们的源代码应该不会太困难。有关如何打开显示套接字的详细信息,请参阅 xcb_util.c。获得套接字后,您可以使用 xcb_auth.c 中的方法创建 xcb_auth_info_t 结构(请参阅方法 _xcb_get_auth_infoget_auth_ptrcompute_auth)。

我只需要通过 unix 套接字 (AF_UNIX) 进行连接,因此我移植的代码相当少。我主要只是使用 compute_auth 方法(及其依赖项)。

授权协议和文件在 xauthXsecurity 手册页中进行了简要讨论,在 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()