mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Port ipapython.dnssec.odsmgr to xml.etree
The module ipapython.dnssec.odsmgr is the only module in ipalib, ipaclient, ipapython and ipaplatform that uses lxml.etree. https://fedorahosted.org/freeipa/ticket/6469 Signed-off-by: Christian Heimes <cheimes@redhat.com> Reviewed-By: Martin Basti <mbasti@redhat.com>
This commit is contained in:
parent
8346e1b067
commit
64af88fee4
@ -248,6 +248,7 @@ Requires: %{name}-server-common = %{version}-%{release}
|
|||||||
Requires: %{name}-common = %{version}-%{release}
|
Requires: %{name}-common = %{version}-%{release}
|
||||||
Requires: python2-ipaclient = %{version}-%{release}
|
Requires: python2-ipaclient = %{version}-%{release}
|
||||||
Requires: python-ldap >= 2.4.15
|
Requires: python-ldap >= 2.4.15
|
||||||
|
Requires: python-lxml
|
||||||
Requires: python-gssapi >= 1.1.2
|
Requires: python-gssapi >= 1.1.2
|
||||||
Requires: python-sssdconfig
|
Requires: python-sssdconfig
|
||||||
Requires: python-pyasn1
|
Requires: python-pyasn1
|
||||||
@ -509,7 +510,6 @@ Requires: keyutils
|
|||||||
Requires: pyOpenSSL
|
Requires: pyOpenSSL
|
||||||
Requires: python-nss >= 0.16
|
Requires: python-nss >= 0.16
|
||||||
Requires: python-cryptography >= 0.9
|
Requires: python-cryptography >= 0.9
|
||||||
Requires: python-lxml
|
|
||||||
Requires: python-netaddr
|
Requires: python-netaddr
|
||||||
Requires: python-libipa_hbac
|
Requires: python-libipa_hbac
|
||||||
Requires: python-qrcode-core >= 5.0.0
|
Requires: python-qrcode-core >= 5.0.0
|
||||||
@ -559,7 +559,6 @@ Requires: keyutils
|
|||||||
Requires: python3-pyOpenSSL
|
Requires: python3-pyOpenSSL
|
||||||
Requires: python3-nss >= 0.16
|
Requires: python3-nss >= 0.16
|
||||||
Requires: python3-cryptography
|
Requires: python3-cryptography
|
||||||
Requires: python3-lxml
|
|
||||||
Requires: python3-netaddr
|
Requires: python3-netaddr
|
||||||
Requires: python3-libipa_hbac
|
Requires: python3-libipa_hbac
|
||||||
Requires: python3-qrcode-core >= 5.0.0
|
Requires: python3-qrcode-core >= 5.0.0
|
||||||
|
@ -3,8 +3,11 @@
|
|||||||
# Copyright (C) 2014 FreeIPA Contributors see COPYING for license
|
# Copyright (C) 2014 FreeIPA Contributors see COPYING for license
|
||||||
#
|
#
|
||||||
|
|
||||||
from lxml import etree
|
|
||||||
import dns.name
|
import dns.name
|
||||||
|
try:
|
||||||
|
from xml.etree import cElementTree as etree
|
||||||
|
except ImportError:
|
||||||
|
from xml.etree import ElementTree as etree
|
||||||
|
|
||||||
from ipapython import ipa_log_manager, ipautil
|
from ipapython import ipa_log_manager, ipautil
|
||||||
|
|
||||||
@ -59,13 +62,15 @@ class ODSZoneListReader(ZoneListReader):
|
|||||||
"""One-shot parser for ODS zonelist.xml."""
|
"""One-shot parser for ODS zonelist.xml."""
|
||||||
def __init__(self, zonelist_text):
|
def __init__(self, zonelist_text):
|
||||||
super(ODSZoneListReader, self).__init__()
|
super(ODSZoneListReader, self).__init__()
|
||||||
xml = etree.fromstring(zonelist_text)
|
root = etree.fromstring(zonelist_text)
|
||||||
self._parse_zonelist(xml)
|
self._parse_zonelist(root)
|
||||||
|
|
||||||
def _parse_zonelist(self, xml):
|
def _parse_zonelist(self, root):
|
||||||
"""iterate over Zone elements with attribute 'name' and
|
"""iterate over Zone elements with attribute 'name' and
|
||||||
add IPA zones to self.zones"""
|
add IPA zones to self.zones"""
|
||||||
for zone_xml in xml.xpath('/ZoneList/Zone[@name]'):
|
if not root.tag == 'ZoneList':
|
||||||
|
raise ValueError(root.tag)
|
||||||
|
for zone_xml in root.findall('./Zone[@name]'):
|
||||||
name, zid = self._parse_ipa_zone(zone_xml)
|
name, zid = self._parse_ipa_zone(zone_xml)
|
||||||
self._add_zone(name, zid)
|
self._add_zone(name, zid)
|
||||||
|
|
||||||
@ -79,16 +84,19 @@ class ODSZoneListReader(ZoneListReader):
|
|||||||
tuple (zone name, ID)
|
tuple (zone name, ID)
|
||||||
"""
|
"""
|
||||||
name = zone_xml.get('name')
|
name = zone_xml.get('name')
|
||||||
in_adapters = zone_xml.xpath(
|
zids = []
|
||||||
'Adapters/Input/Adapter[@type="File" '
|
for in_adapter in zone_xml.findall(
|
||||||
'and starts-with(text(), "%s")]' % ENTRYUUID_PREFIX)
|
'./Adapters/Input/Adapter[@type="File"]'):
|
||||||
assert len(in_adapters) == 1, 'only IPA zones are supported: %s' \
|
path = in_adapter.text
|
||||||
% etree.tostring(zone_xml)
|
if path.startswith(ENTRYUUID_PREFIX):
|
||||||
|
# strip prefix from path
|
||||||
|
zids.append(path[ENTRYUUID_PREFIX_LEN:])
|
||||||
|
|
||||||
path = in_adapters[0].text
|
if len(zids) != 1:
|
||||||
# strip prefix from path
|
raise ValueError('only IPA zones are supported: {}'.format(
|
||||||
zid = path[ENTRYUUID_PREFIX_LEN:]
|
etree.tostring(zone_xml)))
|
||||||
return (name, zid)
|
|
||||||
|
return name, zids[0]
|
||||||
|
|
||||||
|
|
||||||
class LDAPZoneListReader(ZoneListReader):
|
class LDAPZoneListReader(ZoneListReader):
|
||||||
|
41
ipatests/test_ipapython/test_dnssec.py
Normal file
41
ipatests/test_ipapython/test_dnssec.py
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2016 FreeIPA Contributors see COPYING for license
|
||||||
|
#
|
||||||
|
"""
|
||||||
|
Test the `ipapython/dnssec` package.
|
||||||
|
"""
|
||||||
|
import dns.name
|
||||||
|
|
||||||
|
from ipapython.dnssec.odsmgr import ODSZoneListReader
|
||||||
|
|
||||||
|
|
||||||
|
ZONELIST_XML = """<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ZoneList>
|
||||||
|
<Zone name="ipa.example">
|
||||||
|
<Policy>default</Policy>
|
||||||
|
<Adapters>
|
||||||
|
<Input>
|
||||||
|
<Adapter type="File">/var/lib/ipa/dns/zone/entryUUID/12345</Adapter>
|
||||||
|
</Input>
|
||||||
|
<Output>
|
||||||
|
<Adapter type="File">/var/lib/ipa/dns/zone/entryUUID/12345</Adapter>
|
||||||
|
</Output>
|
||||||
|
</Adapters>
|
||||||
|
</Zone>
|
||||||
|
</ZoneList>
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def test_ods_zonelist_reader():
|
||||||
|
uuid = '12345'
|
||||||
|
name = dns.name.from_text('ipa.example.')
|
||||||
|
|
||||||
|
reader = ODSZoneListReader("<ZoneList/>")
|
||||||
|
assert reader.mapping == {}
|
||||||
|
assert reader.names == set()
|
||||||
|
assert reader.uuids == set()
|
||||||
|
|
||||||
|
reader = ODSZoneListReader(ZONELIST_XML)
|
||||||
|
assert reader.mapping == {uuid: name}
|
||||||
|
assert reader.names == {name}
|
||||||
|
assert reader.uuids == {uuid}
|
Loading…
Reference in New Issue
Block a user