TL; DR - есть ли библиотека, которая может преобразовать любой универсальный текстовый файл конфигурации в объект Python, а также взять этот объект Python и преобразовать его в универсальный текстовый файл конфигурации, причем все используют DTD / XSD в качестве шаблоновtool?
Грубый дизайн потока:
DTD ----------+
|
config file --+ -- DOM/SAX Parser --> Python object
|
Scheme -------+
DTD ----------+
|
Python object --> XSLT-like transformation --> named.conf
|
Scheme -------+
Я представляю какую-то библиотеку XSD / DTD, которая может анализировать и создавать текстовые файлы конфигурации, используя объект Python (tuple / list / set) в качестве хранилища данных.
Наличие объекта Python позволяет писать надлежащие, но сложные инструменты аудита безопасности для различных текстовых файлов конфигурации.
Некоторые текстовые файлы конфигурации:
- INI
- Python configParse
- ISC BIND named.conf
- ISC DHCP dhcpd.conf / dhclient.conf
- WebСервер: Apache2, NGINX, lighttpd
- Unix: хосты, fstab, grub, resolv.conf, NSD
- Брандмауэр: iptables, shorewall
- Веб-прокси: squid
- Почта MTU / MTA: Postfix/ Sendmail / Exim
Похоже, здесь сложный заказ, но моя незнакомость с XSLT и его вариантом - это то, к чему я пытаюсь обратиться.
Некоторый пример, который я приготовилXSD для named.conf:
<xs:attributeGroup name="zone" minOccurs=0 maxOccurs="unbounded">
<xs:choice>
<xs:attribute name="allow-notify" minOccurs="0" maxOccurs="1">
<xs:attribute name="allow-query" minOccurs="0" maxOccurs="1">
<xs:attribute name="allow-query-on" minOccurs="0" maxOccurs="1">
<xs:attribute name="allow-recursion" minOccurs="0" maxOccurs="1">
<xs:attribute name="allow-recursion-on" minOccurs="0" maxOccurs="1">
<xs:attribute name="allow-transfer" minOccurs="0" maxOccurs="1">
<xs:attribute name="allow-update" minOccurs="0" maxOccurs="1">
<xs:attribute name="allow-update-forwarding" minOccurs="0" maxOccurs="1">
<xs:attribute name="forwarders" minOccurs="0" maxOccurs="1">
<xs:attribute name="server-addresses" minOccurs="0" maxOccurs="1">
<xs:attribute name="server-names" minOccurs="0" maxOccurs="1">
<xs:attribute name="update-policy" minOccurs="0" maxOccurs="1">
</xs:choice>
</xs:attributeGroup name="zone">
<xs:attributeGroup name="clause_zone_or_view">
<xs:complexType name="zone_or_view">
<xs:choice> # I thought no standalone zone is permitted if 1 or more views
<xs:attribute name="zone" minOccurs="0" maxOccurs="unbounded">
<xs:attribute name="view" minOccurs="0" maxOccurs="unbounded">
</xs:choice>
<xs:complexType name="zone_or_view">
</xs:attributeGroup name="clause_zone_or_view">
<!-- BIND named.conf -->
<xs:complexType>
<xs:choice>
<xs:attribute name="clause_ACL" minOccurs="0" maxOccurs="unbounded">
<xs:attribute name="clause_options" minOccurs="1" maxOccurs="1">
<xs:attribute name="clause_statistics_channel" minOccurs="1" maxOccurs="1">
<xs:attribute name="clause_logging" minOccurs="1" maxOccurs="1">
<xs:attribute name="clause_masters" minOccurs="1" maxOccurs="unbounded">
<xs:attribute name="clause_view_or_zone" minOccurs="1" maxOccurs="1">
<xs:attribute name="clause_key" minOccurs="0" maxOccurs="unbounded">
<xs:attribute name="clause_controls" minOccurs="1" maxOccurs="1">
<xs:attribute name="clause_trusted_keys" minOccurs="0" maxOccurs="unbounded">
</xs:choice>
</xs:complexType>
Реальный вопрос в том, с чего начать Google и с каких ключевых слов?