diff options
Diffstat (limited to 'project2/proj2_s4498062/dns/server.py')
-rw-r--r-- | project2/proj2_s4498062/dns/server.py | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/project2/proj2_s4498062/dns/server.py b/project2/proj2_s4498062/dns/server.py index f830651..10cad8b 100644 --- a/project2/proj2_s4498062/dns/server.py +++ b/project2/proj2_s4498062/dns/server.py @@ -12,7 +12,8 @@ from dns.classes import Class from dns.types import Type from dns.message import Header, Message from dns.resolver import Resolver -from dns.resource import ResourceRecord, ARecordData, CNAMERecordData +from dns.resource import \ + ResourceRecord, ARecordData, NSRecordData, CNAMERecordData class RequestHandler(Thread): @@ -112,12 +113,21 @@ class Server(object): ttl, class_ = 3600000, Class.IN for match in re.finditer(rgx.ZONE_LINE_DOMAIN, zone, re.MULTILINE): match = match.groups() - name = match[0] - ttl = int(match[1] or match[4] or ttl) + name = match[0][:-1] + ttl = int(match[1] or match[4] or ttl * 1000) / 1000 class_ = Class.from_string( match[2] or match[3] or Class.to_string(class_)) type_ = Type.from_string(match[5]) data = match[6] - record = ResourceRecord(name, type_, class_, ttl, data) + if type_ == Type.A: + cls = ARecordData + elif type_ == Type.NS: + cls = NSRecordData + elif type_ == Type.CNAME: + cls = CNAMERecordData + else: + continue + + record = ResourceRecord(name, type_, class_, ttl, cls(data)) self.zone.append(record) |