mirror of https://github.com/fail2ban/fail2ban
Merge branch '0.10' into 0.11
commit
759f7274f8
|
@ -42,6 +42,32 @@ def asip(ip):
|
||||||
return ip
|
return ip
|
||||||
return IPAddr(ip)
|
return IPAddr(ip)
|
||||||
|
|
||||||
|
def getfqdn(name=''):
|
||||||
|
"""Get fully-qualified hostname of given host, thereby resolve of an external
|
||||||
|
IPs and name will be preferred before the local domain (or a loopback), see gh-2438
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
name = name or socket.gethostname()
|
||||||
|
names = (
|
||||||
|
ai[3] for ai in socket.getaddrinfo(
|
||||||
|
name, None, 0, socket.SOCK_DGRAM, 0, socket.AI_CANONNAME
|
||||||
|
) if ai[3]
|
||||||
|
)
|
||||||
|
if names:
|
||||||
|
# first try to find a fqdn starting with the host name like www.domain.tld for www:
|
||||||
|
pref = name+'.'
|
||||||
|
first = None
|
||||||
|
for ai in names:
|
||||||
|
if ai.startswith(pref):
|
||||||
|
return ai
|
||||||
|
if not first: first = ai
|
||||||
|
# not found - simply use first known fqdn:
|
||||||
|
return first
|
||||||
|
except socket.error:
|
||||||
|
pass
|
||||||
|
# fallback to python's own getfqdn routine:
|
||||||
|
return socket.getfqdn(name)
|
||||||
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# Utils class for DNS handling.
|
# Utils class for DNS handling.
|
||||||
|
@ -132,7 +158,7 @@ class DNSUtils:
|
||||||
if name is None:
|
if name is None:
|
||||||
name = ''
|
name = ''
|
||||||
for hostname in (
|
for hostname in (
|
||||||
(socket.getfqdn, socket.gethostname) if fqdn else (socket.gethostname, socket.getfqdn)
|
(getfqdn, socket.gethostname) if fqdn else (socket.gethostname, getfqdn)
|
||||||
):
|
):
|
||||||
try:
|
try:
|
||||||
name = hostname()
|
name = hostname()
|
||||||
|
|
|
@ -40,7 +40,7 @@ from ..server.jail import Jail
|
||||||
from ..server.filterpoll import FilterPoll
|
from ..server.filterpoll import FilterPoll
|
||||||
from ..server.filter import FailTicket, Filter, FileFilter, FileContainer
|
from ..server.filter import FailTicket, Filter, FileFilter, FileContainer
|
||||||
from ..server.failmanager import FailManagerEmpty
|
from ..server.failmanager import FailManagerEmpty
|
||||||
from ..server.ipdns import DNSUtils, IPAddr
|
from ..server.ipdns import getfqdn, DNSUtils, IPAddr
|
||||||
from ..server.mytime import MyTime
|
from ..server.mytime import MyTime
|
||||||
from ..server.utils import Utils, uni_decode
|
from ..server.utils import Utils, uni_decode
|
||||||
from .utils import setUpMyTime, tearDownMyTime, mtimesleep, with_tmpdir, LogCaptureTestCase, \
|
from .utils import setUpMyTime, tearDownMyTime, mtimesleep, with_tmpdir, LogCaptureTestCase, \
|
||||||
|
@ -2028,6 +2028,20 @@ class DNSUtilsNetworkTests(unittest.TestCase):
|
||||||
ip1 = IPAddr('93.184.216.34'); ip2 = IPAddr('93.184.216.34'); self.assertEqual(id(ip1), id(ip2))
|
ip1 = IPAddr('93.184.216.34'); ip2 = IPAddr('93.184.216.34'); self.assertEqual(id(ip1), id(ip2))
|
||||||
ip1 = IPAddr('2606:2800:220:1:248:1893:25c8:1946'); ip2 = IPAddr('2606:2800:220:1:248:1893:25c8:1946'); self.assertEqual(id(ip1), id(ip2))
|
ip1 = IPAddr('2606:2800:220:1:248:1893:25c8:1946'); ip2 = IPAddr('2606:2800:220:1:248:1893:25c8:1946'); self.assertEqual(id(ip1), id(ip2))
|
||||||
|
|
||||||
|
def testFQDN(self):
|
||||||
|
sname = DNSUtils.getHostname(fqdn=False)
|
||||||
|
lname = DNSUtils.getHostname(fqdn=True)
|
||||||
|
# FQDN is not localhost if short hostname is not localhost too (or vice versa):
|
||||||
|
self.assertEqual(lname != 'localhost',
|
||||||
|
sname != 'localhost')
|
||||||
|
# FQDN from short name should be long name:
|
||||||
|
self.assertEqual(getfqdn(sname), lname)
|
||||||
|
# FQDN from FQDN is the same:
|
||||||
|
self.assertEqual(getfqdn(lname), lname)
|
||||||
|
# coverage (targeting all branches): FQDN from loopback and DNS blackhole is always the same:
|
||||||
|
self.assertIn(getfqdn('localhost.'), ('localhost', 'localhost.'))
|
||||||
|
self.assertIn(getfqdn('as112.arpa.'), ('as112.arpa.', 'as112.arpa'))
|
||||||
|
|
||||||
|
|
||||||
class JailTests(unittest.TestCase):
|
class JailTests(unittest.TestCase):
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue