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
Add TXT records in .other pseudo-domain to reveal the other_action value
[invirt/packages/invirt-dns.git]
/
invirt-dns
diff --git
a/invirt-dns
b/invirt-dns
index
272fd6c
..
2b920bd
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:
@@
-142,6
+157,10
@@
class DatabaseAuthority(common.ResolverBase):
elif type == dns.SOA:
results.append(dns.RRHeader(domain, dns.SOA, dns.IN,
ttl, self.soa, auth=True))
elif type == dns.SOA:
results.append(dns.RRHeader(domain, dns.SOA, dns.IN,
ttl, self.soa, auth=True))
+ elif other and type == dns.TXT:
+ record = dns.Record_TXT(action if action else '', ttl=ttl)
+ results.append(dns.RRHeader(name, dns.TXT, dns.IN,
+ ttl, record, auth=True))
if len(results) == 0:
authority = []
if len(results) == 0:
authority = []