- Timestamp:
- Feb 27, 2009, 4:38:26 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/packages/invirt-dns/invirt-dns
r2207 r2208 83 83 84 84 if cls == dns.IN: 85 host = name[:-len(domain)-1] 86 if not host and type != dns.PTR: # Request for the domain itself. 85 if name.endswith(".in-addr.arpa"): 86 if type in (dns.PTR, dns.ALL_RECORDS): 87 ip = '.'.join(reversed(name.split('.')[:-2])) 88 value = invirt.database.NIC.query.filter_by(ip=ip).first() 89 if value and value.hostname: 90 hostname = value.hostname 91 if '.' not in hostname: 92 hostname = hostname + "." + config.dns.domains[0] 93 record = dns.Record_PTR(hostname, ttl) 94 results.append(dns.RRHeader(name, dns.PTR, dns.IN, 95 ttl, record, auth=True)) 96 else: # IP address doesn't point to an active host 97 return defer.fail(failure.Failure(dns.AuthoritativeDomainError(name))) 98 elif type == dns.SOA: 99 results.append(dns.RRHeader(domain, dns.SOA, dns.IN, 100 ttl, self.soa, auth=True)) 101 # FIXME: Should only return success with no records if the name actually exists 102 elif name == domain or name == '.'+domain: 87 103 if type in (dns.A, dns.ALL_RECORDS): 88 104 record = dns.Record_A(config.dns.nameservers[0].ip, ttl) 89 results.append(dns.RRHeader(name, dns.A, dns.IN, 105 results.append(dns.RRHeader(name, dns.A, dns.IN, 90 106 ttl, record, auth=True)) 91 107 elif type == dns.NS: … … 96 112 results.append(dns.RRHeader(domain, dns.SOA, dns.IN, 97 113 ttl, self.soa, auth=True)) 98 else: # Request for a subdomain. 99 if name.endswith(".in-addr.arpa"): # Reverse resolution here 100 if type in (dns.PTR, dns.ALL_RECORDS): 101 ip = '.'.join(reversed(name.split('.')[:-2])) 102 value = invirt.database.NIC.query.filter_by(ip=ip).first() 103 if value and value.hostname: 104 hostname = value.hostname 105 if '.' not in hostname: 106 hostname = hostname + "." + config.dns.domains[0] 107 record = dns.Record_PTR(hostname, ttl) 108 results.append(dns.RRHeader(name, dns.PTR, dns.IN, 109 ttl, record, auth=True)) 110 else: # IP address doesn't point to an active host 111 return defer.fail(failure.Failure(dns.AuthoritativeDomainError(name))) 112 # FIXME: Should only return success with no records if the name actually exists 113 else: # Forward resolution here 114 value = invirt.database.NIC.query.filter_by(hostname=host).first() 114 else: 115 host = name[:-len(domain)-1] 116 value = invirt.database.NIC.query.filter_by(hostname=host).first() 117 if value: 118 ip = value.ip 119 else: 120 value = invirt.database.Machine.query().filter_by(name=host).first() 115 121 if value: 116 ip = value. ip122 ip = value.nics[0].ip 117 123 else: 118 value = invirt.database.Machine.query().filter_by(name=host).first()119 if value:120 ip = value.nics[0].ip121 else:122 return defer.fail(failure.Failure(dns.AuthoritativeDomainError(name)))123 124 if ip is None:125 124 return defer.fail(failure.Failure(dns.AuthoritativeDomainError(name))) 126 125 127 if type in (dns.A, dns.ALL_RECORDS): 128 record = dns.Record_A(ip, ttl) 129 results.append(dns.RRHeader(name, dns.A, dns.IN, 130 ttl, record, auth=True)) 131 elif type == dns.SOA: 132 results.append(dns.RRHeader(domain, dns.SOA, dns.IN, 133 ttl, self.soa, auth=True)) 126 if ip is None: 127 return defer.fail(failure.Failure(dns.AuthoritativeDomainError(name))) 128 129 if type in (dns.A, dns.ALL_RECORDS): 130 record = dns.Record_A(ip, ttl) 131 results.append(dns.RRHeader(name, dns.A, dns.IN, 132 ttl, record, auth=True)) 133 elif type == dns.SOA: 134 results.append(dns.RRHeader(domain, dns.SOA, dns.IN, 135 ttl, self.soa, auth=True)) 134 136 if len(results) == 0: 135 137 authority = []
Note: See TracChangeset
for help on using the changeset viewer.