Парсинг файла авторизации X-сервера

Существуют ли какие-либо API или документация для облегчения анализа файла авторизации для X-сервера?

Я использую xcb для подключения к дисплею. Он принимает структуру xcb_auth_info_t для информации об авторизации. Однако я не могу найти никакой информации о том, как построить эту структуру. Похоже, что нет никакой документации по формату файлов авторизации X-сервера.

Решение, с которым я согласился:

Оказывается, для авторитетных файлов MIT-MAGIC-COOKIE-1 типа X элементы структуры Xauth (из X11/Xauth.h) напрямую сопоставляются с элементами xcb_auth_info_t. Итак, просто прочитайте структуру Xauth из вашего авторитетного файла X, используя XauReadAuth. Затем скопируйте элементы 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 (и его зависимости).


person Azmisov    schedule 18.02.2015    source источник
comment
Вот первая страница, которую я нашел после поиска в гугле xcb_auth_info_t: /а>   -  person CodeClown42    schedule 18.02.2015
comment
Спасибо Златовласка. Я пытаюсь найти информацию о файле авторизации X-сервера. Когда вы запускаете X, один вариант — -auth authorization_file, но я не могу найти много информации о том, как форматируется этот файл.   -  person Azmisov    schedule 19.02.2015


Ответы (2)


После некоторых поисков кажется, что вам не нужно строить эту структуру самостоятельно. Посмотрите на это обсуждение:

Как правильно вызвать xcb_connect_to_display_with_auth_info() с файлом Xauthority

Файл Xauthory указан в переменной окружения XAUTHORITY. Этот файл генерируется программой, которая запускает X-сервер (xdm, startx или xauth, например, согласно документу в man xauth)

Классическое соединение с файлом авторизации, указанным через переменную XAUTHORITY, работает следующим образом:

  • 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()
person cedlemo    schedule 19.02.2015
comment
Седемо большое спасибо. Мне нужно получить информацию об авторизации из произвольного файла, а не из файла Xauthority по умолчанию. Тем не менее, ссылки, которые вы предоставили, были чрезвычайно полезны и привели меня к решению. Я обновил вопрос тем, на чем остановился. - person Azmisov; 20.02.2015

Протоколы и файлы авторизации кратко обсуждаются на страницах руководства 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;
person steeldriver    schedule 18.02.2015