Ability to specify the type of TSIG key (passed along in ns update). Still not handling errors if update fails.
This commit is contained in:
parent
4213e662be
commit
dc25ce9b5c
|
@ -8,3 +8,4 @@ class FormAddRecord(forms.Form):
|
||||||
rr_name = forms.CharField(max_length=256)
|
rr_name = forms.CharField(max_length=256)
|
||||||
rr_type = forms.ChoiceField(choices=(("A", "A"), ("MX", "MX"), ("CNAME", "CNAME"), ("AAAA", "AAAA")))
|
rr_type = forms.ChoiceField(choices=(("A", "A"), ("MX", "MX"), ("CNAME", "CNAME"), ("AAAA", "AAAA")))
|
||||||
rr_data = forms.CharField(max_length=256)
|
rr_data = forms.CharField(max_length=256)
|
||||||
|
tsig_key = forms.ModelChoiceField(queryset=Key.objects.all(), empty_label=None)
|
||||||
|
|
|
@ -3,6 +3,8 @@ from django.db import models
|
||||||
import dns.query
|
import dns.query
|
||||||
import dns.zone
|
import dns.zone
|
||||||
|
|
||||||
|
TSIG_ALGORITHMS = (('hmac-md5', 'MD5'),('hmac-sha1', 'SHA1'),('hmac-224', 'SHA224'),('hmac-sha256', 'SHA256'),('hmac-sha384', 'SHA384'),('hmac-sha512', 'SHA512'))
|
||||||
|
|
||||||
class BindServer(models.Model):
|
class BindServer(models.Model):
|
||||||
hostname = models.CharField(max_length=100)
|
hostname = models.CharField(max_length=100)
|
||||||
|
|
||||||
|
@ -11,7 +13,8 @@ class BindServer(models.Model):
|
||||||
|
|
||||||
class Key(models.Model):
|
class Key(models.Model):
|
||||||
name = models.CharField(max_length=50)
|
name = models.CharField(max_length=50)
|
||||||
data = models.CharField(max_length=24)
|
data = models.CharField(max_length=150)
|
||||||
|
algorithm = models.CharField(max_length=12, choices=TSIG_ALGORITHMS)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# bcommon views
|
# bcommon views
|
||||||
|
|
||||||
from bcommon.models import BindServer
|
from bcommon.models import BindServer, Key
|
||||||
from django.template import Context
|
from django.template import Context
|
||||||
from django.shortcuts import render_to_response, redirect
|
from django.shortcuts import render_to_response, redirect
|
||||||
from bcommon.helpers import list_server_zones
|
from bcommon.helpers import list_server_zones
|
||||||
|
@ -9,7 +9,9 @@ from bcommon.forms import FormAddRecord
|
||||||
from django.template import RequestContext
|
from django.template import RequestContext
|
||||||
|
|
||||||
import dns.query
|
import dns.query
|
||||||
import dns.zone
|
import dns.update
|
||||||
|
import dns.tsigkeyring
|
||||||
|
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
def home_index(request):
|
def home_index(request):
|
||||||
|
@ -34,7 +36,7 @@ def view_server_zones(request, dns_hostname):
|
||||||
'dns_hostname' : dns_hostname },
|
'dns_hostname' : dns_hostname },
|
||||||
context_instance=RequestContext(request))
|
context_instance=RequestContext(request))
|
||||||
|
|
||||||
def list_zone(request, dns_hostname, zone_name):
|
def list_zone_records(request, dns_hostname, zone_name):
|
||||||
# Need to move most of this logic into a helper method.
|
# Need to move most of this logic into a helper method.
|
||||||
try:
|
try:
|
||||||
zone = dns.zone.from_xfr(dns.query.xfr(dns_hostname, zone_name))
|
zone = dns.zone.from_xfr(dns.query.xfr(dns_hostname, zone_name))
|
||||||
|
@ -73,3 +75,21 @@ def add_record(request, dns_hostname, zone_name):
|
||||||
{ 'form' : form },
|
{ 'form' : form },
|
||||||
context_instance=RequestContext(request))
|
context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
def add_record_result(request):
|
||||||
|
if request.method == "GET":
|
||||||
|
# Return home. You shouldn't be accessing the result
|
||||||
|
# via a GET.
|
||||||
|
return redirect('/')
|
||||||
|
|
||||||
|
# We got a POST to add the result.
|
||||||
|
form = FormAddRecord(request.POST)
|
||||||
|
if form.is_valid():
|
||||||
|
cd = form.cleaned_data
|
||||||
|
key_name = Key.objects.get(name=(cd['tsig_key'])).name
|
||||||
|
key_data = Key.objects.get(name=(cd['tsig_key'])).data
|
||||||
|
key_algorithm = Key.objects.get(name=(cd['tsig_key'])).algorithm
|
||||||
|
keyring = dns.tsigkeyring.from_text({ key_name : key_data })
|
||||||
|
dns_update = dns.update.Update(cd['rr_domain'], keyring = keyring, keyalgorithm=key_algorithm)
|
||||||
|
dns_update.replace(str(cd['rr_name']), 10, str(cd['rr_type']), str(cd['rr_data']))
|
||||||
|
response = dns.query.tcp(dns_update, cd['dns_hostname'])
|
||||||
|
print "dns update response: %s" % response
|
||||||
|
|
Loading…
Reference in New Issue