1

是否有任何 API 或文档有助于解析 X 服务器的授权文件?

xcb用来连接显示器。它接受xcb_auth_info_t授权信息的结构。但是,我找不到有关如何构建此结构的任何信息。似乎没有任何关于 X 服务器授权文件格式的文档。

我解决的解决方案:

事实证明,对于MIT-MAGIC-COOKIE-1X 类授权文件,Xauth结构(来自X11/Xauth.h)成员直接映射到xcb_auth_info_t成员。Xauth因此,只需使用 .从您的 X 授权文件中读取结构XauReadAuth。然后复制namename_lengthdatadata_length成员。

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

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

4

2 回答 2

3

xauth授权协议和文件在Xsecurity手册页中进行了简要讨论,在Xau库函数(XauWriteAuth等)中进行了更详细的讨论。该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;
于 2015-02-18T22:44:18.757 回答
2

经过一番搜索,就像您不必自己构建此结构一样。看看这个讨论:

给定 Xauthority 文件,调用 xcb_connect_to_display_with_auth_info() 的正确方法是什么

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()
于 2015-02-19T09:58:05.387 回答