1
# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
2
# See LICENSE for details.
5
from twisted.names import dns
6
from twisted.persisted import styles
7
from twisted.python import failure
8
from twisted.internet import defer
10
from twisted.names import common
12
def searchFileFor(file, name):
18
lines = fp.readlines()
26
if name.lower() in [s.lower() for s in parts[1:]]:
32
class Resolver(common.ResolverBase, styles.Versioned):
33
"""A resolver that services hosts(5) format files."""
36
persistenceVersion = 1
38
def upgradeToVersion1(self):
40
self.typeToMethod = {}
41
for (k, v) in common.typeToMethod.items():
42
self.typeToMethod[k] = getattr(self, v)
45
def __init__(self, file='/etc/hosts', ttl = 60 * 60):
46
common.ResolverBase.__init__(self)
51
def lookupAddress(self, name, timeout = None):
52
res = searchFileFor(self.file, name)
54
return defer.succeed([
55
(dns.RRHeader(name, dns.A, dns.IN, self.ttl, dns.Record_A(res, self.ttl)),), (), ()
57
return defer.fail(failure.Failure(dns.DomainError(name)))
60
# When we put IPv6 support in, this'll need a real impl
61
lookupAllRecords = lookupAddress