Alterator D-Bus bridge (deprecated): различия между версиями
Savin (обсуждение | вклад) (Новая страница: «==== Правила написания xml файла описывающего модуль alterator'а для сервиса dbus_acc.==== При устано…») |
Мария (обсуждение | вклад) мНет описания правки |
||
(не показано 7 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
==== Правила написания xml файла описывающего модуль alterator'а для сервиса | [[Категория:Руководства]] | ||
{| style="border:1px solid #AAA; background:#F9F9F9; width:200px; margin: 0 0 1em 1em; padding:.2em; text-align:center; float: right;" class=noprint | |||
|- | |||
|[[Image:48px-Mail-mark-junk_red.svg.png]] | |||
|- | |||
| '''Эта статья об устаревшей реализации.'''<br /><small style="line-height:1.1em;">Документация на новую реализацию на странице [[Alterator_на_D-Bus|Alterator на D-Bus]]</small> | |||
|} | |||
<includeonly>[[Category:Устаревшая реализация|{{PAGENAME}}]]</includeonly> | |||
[https://packages.altlinux.org/ru/p10/srpms/alterator-dbus/ Первая реализация] службы, которая выставляет интерфейсы модулей [[Alterator#Alterator|Альтератора]] на шине D-Bus. Реализовано в виде программного моста, перенаправляющего запросы с шины D-Bus на шину woo-bus. Данная технология не получила развитие в силу того, что задать строгое API для некоторых модулей оказалось достаточно проблематичным. Новое руководство доступно на странице [[Alterator_на_D-Bus|Alterator на D-Bus]]. | |||
__TOC__ | |||
== Правила написания xml файла описывающего модуль alterator'а для сервиса alterator-dbus. == | |||
При установке пакета с модулем alterator'а xml файл помещается в /usr/share/dbus-1/interfaces/. | При установке пакета с модулем alterator'а xml файл помещается в /usr/share/dbus-1/interfaces/. | ||
Пример названия xml файла: 'ru.basealt.alterator.update-kernel.xml'. Последняя | Пример названия xml файла: 'ru.basealt.alterator.update-kernel.xml'. Последняя | ||
часть это название модуля alterator'a - 'update-kernel'. | часть, это название модуля alterator'a - 'update-kernel'. | ||
Методы, которые предоставляет backend модуля alterator'а описываются в тегах | Методы, которые предоставляет backend модуля alterator'а описываются в тегах | ||
Строка 32: | Строка 46: | ||
Тип аргумента "as" используется в следующих случаях: | Тип аргумента "as" используется в следующих случаях: | ||
1)Возврат из backend'а значений для элементов checklist и т.п. (write_enum_item $var $var). | 1) Возврат из backend'а значений для элементов checklist и т.п. (write_enum_item $var $var). В этом случае возвращается две последовательности (два массива) переменных, одна с именем name, другая c именем value. Для каждой из них создаётся аргумент с типом "as".<br> | ||
2)write_enum - аргументы создаются для каждого ключа и каждой метки. | 2) write_enum - аргументы создаются для каждого ключа и каждой метки.<br> | ||
3)write_table_item <параметр1> <значение1> <параметр2> <значение2> ... - | 3) write_table_item <параметр1> <значение1> <параметр2> <значение2> ... - аргументы создаются для каждого параметра. Имя аргумента = имя параметра.<br> | ||
<syntaxhighlight lang="xml"> | Пример: | ||
<syntaxhighlight lang="xml"> | |||
<arg name="параметр1" type="as" direction="out" /> | |||
<arg name="параметр2" type="as" direction="out" /> | |||
</syntaxhighlight> | <arg name="параметр3" type="as" direction="out" /> | ||
</syntaxhighlight> | |||
4) Выделенные элементы для checklistbox. Они передаются из/в backend списком представленным строкой с разделителем ';', например "a;b;c;d". К имени такого аргумента добавляется префикс checklist#.<br> | |||
Пример: | |||
<syntaxhighlight lang="xml"> | <syntaxhighlight lang="xml"> | ||
<method name="read__apt_inst_modules"> | <method name="read__apt_inst_modules"> | ||
Строка 64: | Строка 73: | ||
Тип аргумента "b" используется для отправки и получения значения переменной | Тип аргумента "b" используется для отправки и получения значения переменной | ||
типа boolean (write_bool_param). | типа boolean (write_bool_param). | ||
== Разграничение прав доступа к методам модуля alterator'а == | |||
По умолчанию, для выполнения методов с action'ом write пользователь должен быть в группе wheel. Для методов с другими action'ми это не требуется. | |||
Пример ''ru.basealt.alterator.policy'': | |||
<syntaxhighlight lang="xml"> | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE policyconfig PUBLIC | |||
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" | |||
"http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd"> | |||
<policyconfig> | |||
<action id="ru.basealt.alterator.write"> | |||
<description gettext-domain="some">Authorization</description> | |||
<message gettext-domain="some">Authentication is needed to perform this action.</message> | |||
<defaults> | |||
<allow_any>auth_admin</allow_any> | |||
<allow_inactive>auth_admin</allow_inactive> | |||
<allow_active>auth_admin</allow_active> | |||
</defaults> | |||
</action> | |||
<action id="ru.basealt.alterator.read"> | |||
<description gettext-domain="some">Authorization</description> | |||
<message gettext-domain="some">Authentication is needed to perform this action.</message> | |||
<defaults> | |||
<allow_any>auth_admin</allow_any> | |||
<allow_inactive>auth_admin</allow_inactive> | |||
<allow_active>auth_admin</allow_active> | |||
</defaults> | |||
</action> | |||
</policyconfig> | |||
</syntaxhighlight> | |||
Пример ''ru.basealt.alterator.rules'': | |||
<syntaxhighlight lang="js"> | |||
polkit.addRule(function(action, subject) { | |||
/* Allow administrators to read parental controls (for any account) without | |||
* needing an additional polkit authorisation dialogue. */ | |||
if (action.id == "ru.basealt.alterator.read") { | |||
return "yes"; | |||
} | |||
else if (action.id == "ru.basealt.alterator.write" && subject.isInGroup("wheel")) { | |||
/*return "yes";*/ | |||
return polkit.Result.AUTH_SELF; | |||
} | |||
return polkit.Result.NOT_HANDLED; | |||
}); | |||
</syntaxhighlight> | |||
При необходимости для конкретного модуля и для конкретного метода можно определить отдельное правило. action id формируется следующим образом: ''ru.basealt.alterator.<имя модуля>.<имя метода>'' для метода, ''ru.basealt.alterator.<имя модуля>.<write|read|list>'' для action'на. | |||
Пример ''ru.basealt.alterator.update_kernel.policy'': | |||
<syntaxhighlight lang="xml"> | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE policyconfig PUBLIC | |||
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" | |||
"http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd"> | |||
<policyconfig> | |||
<action id="ru.basealt.alterator.update_kernel.write__apt_update"> | |||
<description gettext-domain="some">Authorization</description> | |||
<message gettext-domain="some">Authentication is needed to perform this action.</message> | |||
<defaults> | |||
<allow_any>auth_admin</allow_any> | |||
<allow_inactive>auth_admin</allow_inactive> | |||
<allow_active>auth_admin</allow_active> | |||
</defaults> | |||
</action> | |||
</policyconfig> | |||
</syntaxhighlight> | |||
Пример ''ru.basealt.alterator.update_kernel.rules'': | |||
<syntaxhighlight lang="js"> | |||
polkit.addRule(function(action, subject) { | |||
/* Allow administrators to read parental controls (for any account) without | |||
* needing an additional polkit authorisation dialogue. */ | |||
if (action.id == "ru.basealt.alterator.update_kernel.write__apt_update" && subject.isInGroup("wheel")) { | |||
return "yes"; | |||
} | |||
return polkit.Result.NOT_HANDLED; | |||
}); | |||
</syntaxhighlight> |
Текущая версия от 18:26, 1 июля 2024
Первая реализация службы, которая выставляет интерфейсы модулей Альтератора на шине D-Bus. Реализовано в виде программного моста, перенаправляющего запросы с шины D-Bus на шину woo-bus. Данная технология не получила развитие в силу того, что задать строгое API для некоторых модулей оказалось достаточно проблематичным. Новое руководство доступно на странице Alterator на D-Bus.
Правила написания xml файла описывающего модуль alterator'а для сервиса alterator-dbus.
При установке пакета с модулем alterator'а xml файл помещается в /usr/share/dbus-1/interfaces/.
Пример названия xml файла: 'ru.basealt.alterator.update-kernel.xml'. Последняя часть, это название модуля alterator'a - 'update-kernel'.
Методы, которые предоставляет backend модуля alterator'а описываются в тегах method.
Пример:
<method name="list__installed_modules">
<arg name="instkernel" type="s" direction="in" />
<arg name="name" type="as" direction="out" />
<arg name="label" type="as" direction="out" />
</method>
Имя метода состоит из двух частей, которые разделены двойным подчёркиванием. Первая часть это префикс, он означает action - значение, которое передаётся backend'у в переменной in_action. Вторая часть это само имя, то которое передаётся backend'у в переменной in__objects.
Аргументы метода описываются в тегах 'arg' и могут иметь один из трёх типов: "s" - строка, "as" - массив строк, "b" - логический тип (boolean). Атрибут name - это имя аргумента, то что используется в backend'е. Атрибут direction может принимать значение "in" для аргументов отправляемых в backend и "out" для аргументов возвращаемых из backend'а.
Тип аргумента "as" используется в следующих случаях:
1) Возврат из backend'а значений для элементов checklist и т.п. (write_enum_item $var $var). В этом случае возвращается две последовательности (два массива) переменных, одна с именем name, другая c именем value. Для каждой из них создаётся аргумент с типом "as".
2) write_enum - аргументы создаются для каждого ключа и каждой метки.
3) write_table_item <параметр1> <значение1> <параметр2> <значение2> ... - аргументы создаются для каждого параметра. Имя аргумента = имя параметра.
Пример:
<arg name="параметр1" type="as" direction="out" />
<arg name="параметр2" type="as" direction="out" />
<arg name="параметр3" type="as" direction="out" />
4) Выделенные элементы для checklistbox. Они передаются из/в backend списком представленным строкой с разделителем ';', например "a;b;c;d". К имени такого аргумента добавляется префикс checklist#.
Пример:
<method name="read__apt_inst_modules">
<arg name="flavour" type="s" direction="in" />
<arg name="checklist#instmodlist" type="as" direction="out" />
</method>
Тип аргумента "s" используется для отправки и получения строки (write_string_param).
Тип аргумента "b" используется для отправки и получения значения переменной типа boolean (write_bool_param).
Разграничение прав доступа к методам модуля alterator'а
По умолчанию, для выполнения методов с action'ом write пользователь должен быть в группе wheel. Для методов с другими action'ми это не требуется.
Пример ru.basealt.alterator.policy:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
"http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
<policyconfig>
<action id="ru.basealt.alterator.write">
<description gettext-domain="some">Authorization</description>
<message gettext-domain="some">Authentication is needed to perform this action.</message>
<defaults>
<allow_any>auth_admin</allow_any>
<allow_inactive>auth_admin</allow_inactive>
<allow_active>auth_admin</allow_active>
</defaults>
</action>
<action id="ru.basealt.alterator.read">
<description gettext-domain="some">Authorization</description>
<message gettext-domain="some">Authentication is needed to perform this action.</message>
<defaults>
<allow_any>auth_admin</allow_any>
<allow_inactive>auth_admin</allow_inactive>
<allow_active>auth_admin</allow_active>
</defaults>
</action>
</policyconfig>
Пример ru.basealt.alterator.rules:
polkit.addRule(function(action, subject) {
/* Allow administrators to read parental controls (for any account) without
* needing an additional polkit authorisation dialogue. */
if (action.id == "ru.basealt.alterator.read") {
return "yes";
}
else if (action.id == "ru.basealt.alterator.write" && subject.isInGroup("wheel")) {
/*return "yes";*/
return polkit.Result.AUTH_SELF;
}
return polkit.Result.NOT_HANDLED;
});
При необходимости для конкретного модуля и для конкретного метода можно определить отдельное правило. action id формируется следующим образом: ru.basealt.alterator.<имя модуля>.<имя метода> для метода, ru.basealt.alterator.<имя модуля>.<write|read|list> для action'на.
Пример ru.basealt.alterator.update_kernel.policy:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
"http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
<policyconfig>
<action id="ru.basealt.alterator.update_kernel.write__apt_update">
<description gettext-domain="some">Authorization</description>
<message gettext-domain="some">Authentication is needed to perform this action.</message>
<defaults>
<allow_any>auth_admin</allow_any>
<allow_inactive>auth_admin</allow_inactive>
<allow_active>auth_admin</allow_active>
</defaults>
</action>
</policyconfig>
Пример ru.basealt.alterator.update_kernel.rules:
polkit.addRule(function(action, subject) {
/* Allow administrators to read parental controls (for any account) without
* needing an additional polkit authorisation dialogue. */
if (action.id == "ru.basealt.alterator.update_kernel.write__apt_update" && subject.isInGroup("wheel")) {
return "yes";
}
return polkit.Result.NOT_HANDLED;
});