projects
/
invirt/packages/invirt-dns.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Include TXT records in ANY queries
[invirt/packages/invirt-dns.git]
/
invirt-dns
diff --git
a/invirt-dns
b/invirt-dns
index
272fd6c
..
b540ff7
100755
(executable)
--- a/
invirt-dns
+++ b/
invirt-dns
@@
-11,6
+11,7
@@
from twisted.python import failure
from invirt.common import InvirtConfigError
from invirt.config import structs as config
import invirt.database
from invirt.common import InvirtConfigError
from invirt.config import structs as config
import invirt.database
+from invirt.database import NIC
import psycopg2
import sqlalchemy
import time
import psycopg2
import sqlalchemy
import time
@@
-94,10
+95,12
@@
class DatabaseAuthority(common.ResolverBase):
if name.endswith(".in-addr.arpa"):
if type in (dns.PTR, dns.ALL_RECORDS):
ip = '.'.join(reversed(name.split('.')[:-2]))
if name.endswith(".in-addr.arpa"):
if type in (dns.PTR, dns.ALL_RECORDS):
ip = '.'.join(reversed(name.split('.')[:-2]))
- value = invirt.database.NIC.query.filter_by(ip=ip).first()
+ value = invirt.database.NIC.query.filter((NIC.ip == ip) | (NIC.other_ip == ip)).first()
if value and value.hostname:
hostname = value.hostname
if '.' not in hostname:
if value and value.hostname:
hostname = value.hostname
if '.' not in hostname:
+ if ip == value.other_ip:
+ hostname = hostname + ".other"
hostname = hostname + "." + config.dns.domains[0]
record = dns.Record_PTR(hostname, ttl)
results.append(dns.RRHeader(name, dns.PTR, dns.IN,
hostname = hostname + "." + config.dns.domains[0]
record = dns.Record_PTR(hostname, ttl)
results.append(dns.RRHeader(name, dns.PTR, dns.IN,
@@
-109,7
+112,7
@@
class DatabaseAuthority(common.ResolverBase):
ttl, self.soa, auth=True))
# FIXME: Should only return success with no records if the name actually exists
ttl, self.soa, auth=True))
# FIXME: Should only return success with no records if the name actually exists
- elif name == domain or name == '.'+domain:
+ elif name == domain or name == '.'+domain or name == 'other.'+domain:
if type in (dns.A, dns.ALL_RECORDS):
record = dns.Record_A(config.dns.nameservers[0].ip, ttl)
results.append(dns.RRHeader(name, dns.A, dns.IN,
if type in (dns.A, dns.ALL_RECORDS):
record = dns.Record_A(config.dns.nameservers[0].ip, ttl)
results.append(dns.RRHeader(name, dns.A, dns.IN,
@@
-124,13
+127,25
@@
class DatabaseAuthority(common.ResolverBase):
else:
host = name[:-len(domain)-1]
else:
host = name[:-len(domain)-1]
+ other = False
+ if host.endswith(".other"):
+ host = host[:-len(".other")]
+ other = True
value = invirt.database.NIC.query.filter_by(hostname=host).first()
if value:
value = invirt.database.NIC.query.filter_by(hostname=host).first()
if value:
- ip = value.ip
+ if other:
+ ip = value.other_ip
+ action = value.other_action
+ else:
+ ip = value.ip
else:
value = invirt.database.Machine.query.filter_by(name=host).first()
if value:
else:
value = invirt.database.Machine.query.filter_by(name=host).first()
if value:
- ip = value.nics[0].ip
+ if other:
+ ip = value.nics[0].other_ip
+ action = value.nics[0].other_action
+ else:
+ ip = value.nics[0].ip
else:
return defer.fail(failure.Failure(dns.AuthoritativeDomainError(name)))
if ip is None:
else:
return defer.fail(failure.Failure(dns.AuthoritativeDomainError(name)))
if ip is None:
@@
-139,7
+154,11
@@
class DatabaseAuthority(common.ResolverBase):
record = dns.Record_A(ip, ttl)
results.append(dns.RRHeader(name, dns.A, dns.IN,
ttl, record, auth=True))
record = dns.Record_A(ip, ttl)
results.append(dns.RRHeader(name, dns.A, dns.IN,
ttl, record, auth=True))
- elif type == dns.SOA:
+ if other and type in (dns.TXT, dns.ALL_RECORDS):
+ record = dns.Record_TXT(action if action else '', ttl=ttl)
+ results.append(dns.RRHeader(name, dns.TXT, dns.IN,
+ ttl, record, auth=True))
+ if type == dns.SOA:
results.append(dns.RRHeader(domain, dns.SOA, dns.IN,
ttl, self.soa, auth=True))
results.append(dns.RRHeader(domain, dns.SOA, dns.IN,
ttl, self.soa, auth=True))