Разбор на файл за оторизация на 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: xcb.freedesktop.org/manual/structxcb__auth__info__t.html   -  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
Благодаря много cedlemo. Трябва да получа информацията за оторизация от произволен файл, а не от файла 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