summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Basti <mbasti@redhat.com>2015-11-04 16:09:21 +0100
committerMartin Basti <mbasti@redhat.com>2015-11-25 14:13:26 +0100
commit800c7023241fd6182da300cf120870072e6ca602 (patch)
treeb51a6ff287dbfb5b5065e181532166fa5b450025
parent0f52eddd1d2781ccc1941c191e9ab6e3ccf6919d (diff)
downloadfreeipa-800c7023241fd6182da300cf120870072e6ca602.tar.gz
freeipa-800c7023241fd6182da300cf120870072e6ca602.tar.xz
freeipa-800c7023241fd6182da300cf120870072e6ca602.zip
Use absolute domain in detection of A/AAAA records
Python dns resolver append configured domain to queries which may lead to false positive answer. Exmaple: resolving "ipa.example.com" may return records for "ipa.example.com.example.com" if domain is configured as "example.com" https://fedorahosted.org/freeipa/ticket/5421 Reviewed-By: Petr Spacek <pspacek@redhat.com>
-rw-r--r--ipalib/plugins/dns.py6
-rw-r--r--ipapython/ipautil.py5
2 files changed, 5 insertions, 6 deletions
diff --git a/ipalib/plugins/dns.py b/ipalib/plugins/dns.py
index 36e37ed5b..830a70fa5 100644
--- a/ipalib/plugins/dns.py
+++ b/ipalib/plugins/dns.py
@@ -4189,16 +4189,12 @@ class dns_resolve(Command):
takes_args = (
Str('hostname',
- label=_('Hostname'),
+ label=_('Hostname (FQDN)'),
),
)
def execute(self, *args, **options):
query=args[0]
- if query.find(api.env.domain) == -1 and query.find('.') == -1:
- query = '%s.%s.' % (query, api.env.domain)
- if query[-1] != '.':
- query = query + '.'
if not is_host_resolvable(query):
raise errors.NotFound(
diff --git a/ipapython/ipautil.py b/ipapython/ipautil.py
index a5545688d..4551ea5c4 100644
--- a/ipapython/ipautil.py
+++ b/ipapython/ipautil.py
@@ -49,6 +49,7 @@ from ipapython import ipavalidate
from ipapython import config
from ipaplatform.paths import paths
from ipapython.dn import DN
+from ipapython.dnsutil import DNSName
SHARE_DIR = paths.USR_SHARE_IPA_DIR
PLUGINS_SHARE_DIR = paths.IPA_PLUGINS
@@ -911,9 +912,11 @@ def bind_port_responder(port, socket_type=socket.SOCK_STREAM, socket_timeout=Non
raise last_socket_error # pylint: disable=E0702
def is_host_resolvable(fqdn):
+ if not isinstance(fqdn, DNSName):
+ fqdn = DNSName(fqdn)
for rdtype in (rdatatype.A, rdatatype.AAAA):
try:
- resolver.query(fqdn, rdtype)
+ resolver.query(fqdn.make_absolute(), rdtype)
except DNSException:
continue
else: