def list(self): ncp = NamedConfParser(); ncp.from_file(); zones = ncp.find_zones(); rzones = []; for zone in zones: z = tutuzone.Zone(zone); z.load(); rzones.append({'name': zone, 'records': z.count_records()}); return {'zones':rzones};
def _count_records(zonename): namedconf = tutuconfig.get('namedconf', 'dnsbind'); ncp = NamedConfParser(); ncp.from_file(namedconf); zonefile = ncp.find_zone_file(zonename); z = dns.zone.from_file(zonefile); recordcount = 0; for node in z.nodes: for rds in z.nodes[node].rdatasets: recordcount += len(rds.items); return recordcount;
def delete(self): if self.posted(): zname = self.request.POST['zonename']; namedconf = tutuconfig.get('namedconf', 'dnsbind'); ncp = NamedConfParser(); ncp.from_file(namedconf); zonefile = ncp.find_zone_file(zname); os.remove(zonefile); ncp.delete_zone(zname); ncp.to_file(namedconf); return HTTPFound('/dns/zones'); # vim: set ts=2:
def delete(self): session = self.request.session; try: rzone = session['rzone']; except NameError: return HTTPFound('/dns/zones'); try: oname = session['rname']; rtype = session['rtype']; odata = session['rdata']; rclass = session['rclass']; except NameError: return HTTPFound('/dns/zone/{}'.format(rzone)); namedconf = tutuconfig.get('namedconf', 'dnsbind'); ncp = NamedConfParser(); ncp.from_file(namedconf); zonefile = ncp.find_zone_file(rzone); z = zone.from_file(zonefile); dset = z.get_rdataset(oname, rtype); newdset = dns.rdataset.Rdataset(rdc.from_text(rclass), rdt.from_text(rtype)); newdset.ttl = 300; if rtype == 'SOA': newdset.add(rdata); else: for rd in dset: if odata == rd.to_text(): pass else: newdset.add(rd); z.replace_rdataset(oname, newdset); tutuzone.save_zone(z, zonefile); return HTTPFound('/dns/zone/{}'.format(rzone)); # vim: set ts=2:
def create(self): if self.posted(): zname = self.request.POST['name']; mname = self.request.POST['mname']; rname = self.request.POST['rname']; refresh = self.request.POST['refresh']; retry = self.request.POST['retry']; expire = self.request.POST['expire']; minimum = self.request.POST['minimum']; nstarget = self.request.POST['ns']; if zname[-1:] == '.': zname = zname[:-1]; z = tutuzone.Zone(zname); soa = tuturecord.Record('SOA'); soa.serial = 0; soa.mname = mname; soa.rname = rname; soa.refresh = refresh; soa.retry = retry; soa.expire = expire; soa.minimum = minimum; z.add_record('@', soa); ns = tuturecord.Record('NS'); ns.target = nstarget; z.add_record('@', ns); z.save(); namedconf = tutuconfig.get('namedconf', 'dnsbind'); ncp = NamedConfParser(); ncp.from_file(namedconf); ncp.add_zone(zname, z.get_filename()); ncp.to_file(namedconf); return HTTPFound('/dns/zone/{}'.format(zname)); import copy helpers = copy.copy(tuturecord.helpers); helpers['name'] = {'type': 'text', 'label': 'Zone Name', 'help':'FQDN of the zone'}; helpers['ns'] = {'type': 'text', 'label': 'First NS record', 'help':'FQDN of the first NameServer of the zone'}; zone = { 'name': '', 'mname': '', 'rname': '', 'refresh': 604800, 'retry': 86400, 'expire': 2419200, 'minimum': 86400, 'ns': '' }; keys = ['name', 'mname', 'rname', 'refresh', 'retry', 'expire', 'minimum', 'ns']; return {'zone': zone, 'keys': keys, 'helpers': helpers};