def Check(self): ok=True ips=self.IpAddress.splitlines() ok=self.CheckValid(ok, self.Hostname, xlt("Please enter Host Name")) if self.isNew: ok=self.CheckValid(ok, not self.node.hosts4.get(self.Hostname) and not self.node.hosts6.get(self.Hostname), xlt("Host record already exists")) ok=self.CheckValid(ok, len(ips)>0, xlt("Please enter IP Address")) for ip in ips: ip=ip.strip() ok = self.CheckValid(ok, checkIpAddress(ip), xlt("Please enter valid IP Address")) ok=self.CheckValid(ok, timeToFloat(self.ttl), xlt("Please enter valid TTL")) if self.ttl6: ok=self.CheckValid(ok, timeToFloat(self.ttl6), xlt("Please enter valid AAAA TTL")) return ok
def OnExecute(parentWin, node): candidates = [] for name in node.ptrs.keys(): try: address = DnsRevAddress(DnsAbsName(name, node.partialZonename)) target = node.ptrs[name][0].target if checkIpAddress(address) == 4: rdtype = rdatatype.A else: rdtype = rdatatype.AAAA rrset = node.GetConnection().Query(target, rdtype) if not rrset: candidates.append("%s %s" % (name, target)) except: candidates.append("%s <invalid>" % name) if candidates: dlg = wx.MultiChoiceDialog( parentWin, xlt("Select PTR records to clean"), xlt("%d dangling PTR records") % len(candidates), candidates) cleaned = [] if not dlg.ShowModal() == wx.ID_OK: return False for i in dlg.GetSelections(): name = candidates[i].split(' ')[0] cleaned.append(name) updater = node.Updater() updater.delete(DnsAbsName(name, node.partialZonename), rdatatype.PTR) msg = node.GetServer().Send(updater) if msg.rcode() == rcode.NOERROR: del node.ptrs[name] else: parentWin.SetStatus( xlt("DNS update failed: %s") % rcode.to_text(msg.rcode())) return False parentWin.SetStatus( xlt("%d dangling PTR records cleaned (%s)") % (len(cleaned), ", ".join(cleaned))) return True else: wx.MessageBox(xlt("No dangling PTR record."), xlt("DNS Cleanup")) return True
def Check(self): ok = True ips = self.IpAddress.splitlines() ok = self.CheckValid(ok, self.Hostname, xlt("Please enter Host Name")) if self.isNew: ok = self.CheckValid( ok, not self.node.hosts4.get(self.Hostname) and not self.node.hosts6.get(self.Hostname), xlt("Host record already exists")) ok = self.CheckValid(ok, len(ips) > 0, xlt("Please enter IP Address")) for ip in ips: ip = ip.strip() ok = self.CheckValid(ok, checkIpAddress(ip), xlt("Please enter valid IP Address")) ok = self.CheckValid(ok, timeToFloat(self.ttl), xlt("Please enter valid TTL")) if self.ttl6: ok = self.CheckValid(ok, timeToFloat(self.ttl6), xlt("Please enter valid AAAA TTL")) return ok
def OnExecute(parentWin, node): candidates=[] for name in node.ptrs.keys(): try: address=DnsRevAddress(DnsAbsName(name, node.partialZonename)) target=node.ptrs[name][0].target if checkIpAddress(address) == 4: rdtype=rdatatype.A else: rdtype=rdatatype.AAAA rrset=node.GetConnection().Query(target, rdtype) if not rrset: candidates.append("%s %s" % (name, target)) except: candidates.append("%s <invalid>" % name) if candidates: dlg=wx.MultiChoiceDialog(parentWin, xlt("Select PTR records to clean"), xlt("%d dangling PTR records") % len(candidates), candidates) cleaned=[] if not dlg.ShowModal() == wx.ID_OK: return False for i in dlg.GetSelections(): name=candidates[i].split(' ')[0] cleaned.append(name) updater=node.Updater() updater.delete(DnsAbsName(name, node.partialZonename), rdatatype.PTR) msg=node.GetServer().Send(updater) if msg.rcode() == rcode.NOERROR: del node.ptrs[name] else: parentWin.SetStatus(xlt("DNS update failed: %s") % rcode.to_text(msg.rcode())) return False parentWin.SetStatus(xlt("%d dangling PTR records cleaned (%s)") % (len(cleaned), ", ".join(cleaned))) return True else: wx.MessageBox(xlt("No dangling PTR record."), xlt("DNS Cleanup")) return True
def Save(self): ttl4=int(timeToFloat(self.TTL)) if self.ttl6: ttl6=int(timeToFloat(self.TTL6)) else: ttl6=ttl4 name=str(self.Hostname) updater=self.node.Updater() if self.node.hosts4.get(name): updater.delete(name, "A") if self.node.hosts4.get(name): updater.delete(name, "AAAA") h4=None h6=None addresses=self.IpAddress.splitlines() for address in addresses: address=address.strip() if not address: continue if checkIpAddress(address) == 4: if h4: h4.add(Rdata(h4, address), ttl4) else: h4=Rdataset(ttl4, rdataclass.IN, rdatatype.A, address) else: if h6: h6.add(Rdata(h6, address), ttl6) else: h6=Rdataset(ttl6, rdataclass.IN, rdatatype.AAAA, address) if h4: updater.add(name, h4) if h6: updater.add(name, h6) msg=self.node.GetServer().Send(updater) if msg.rcode() != rcode.NOERROR: self.SetStatus(xlt("DNS update failed: %s") % rcode.to_text(msg.rcode())) return False self.node.hosts4[name] = h4 self.node.hosts6[name] = h6 prevAddresses=self['IpAddress'].unchangedValue.splitlines() if self.CreatePtr: dnsName=DnsAbsName(name, self.node.zonename) for address in addresses: if address in prevAddresses: prevAddresses.remove(address) ptr, zone=self.node.GetServer().GetZoneName(DnsRevName(address)) if zone: if zone.endswith("in-addr.arpa"): ttl=ttl4 else: ttl=ttl6 updater=self.node.GetConnection().Updater(zone) updater.delete(ptr, 'PTR') updater.add(ptr, Rdataset(ttl, rdataclass.IN, rdatatype.PTR, dnsName)) _msg=self.node.GetServer().Send(updater) for address in prevAddresses: ptr, zone=self.node.GetServer().GetZoneName(DnsRevName(address)) if zone: updater=self.node.GetConnection().Updater(zone) updater.delete(ptr, 'PTR') _msg=self.node.GetServer().Send(updater) return True
def GetDataType(self, idx): ip=self.control.GetItemText(idx, 1) if checkIpAddress(ip) == 4: return rdatatype.A else: return rdatatype.AAAA
def Save(self): ttl4 = int(timeToFloat(self.TTL)) if self.ttl6: ttl6 = int(timeToFloat(self.TTL6)) else: ttl6 = ttl4 name = str(self.Hostname) updater = self.node.Updater() if self.node.hosts4.get(name): updater.delete(name, "A") if self.node.hosts4.get(name): updater.delete(name, "AAAA") h4 = None h6 = None addresses = self.IpAddress.splitlines() for address in addresses: address = address.strip() if not address: continue if checkIpAddress(address) == 4: if h4: h4.add(Rdata(h4, address), ttl4) else: h4 = Rdataset(ttl4, rdataclass.IN, rdatatype.A, address) else: if h6: h6.add(Rdata(h6, address), ttl6) else: h6 = Rdataset(ttl6, rdataclass.IN, rdatatype.AAAA, address) if h4: updater.add(name, h4) if h6: updater.add(name, h6) msg = self.node.GetServer().Send(updater) if msg.rcode() != rcode.NOERROR: self.SetStatus( xlt("DNS update failed: %s") % rcode.to_text(msg.rcode())) return False self.node.hosts4[name] = h4 self.node.hosts6[name] = h6 prevAddresses = self['IpAddress'].unchangedValue.splitlines() if self.CreatePtr: dnsName = DnsAbsName(name, self.node.zonename) for address in addresses: if address in prevAddresses: prevAddresses.remove(address) ptr, zone = self.node.GetServer().GetZoneName( DnsRevName(address)) if zone: if zone.endswith("in-addr.arpa"): ttl = ttl4 else: ttl = ttl6 updater = self.node.GetConnection().Updater(zone) updater.delete(ptr, 'PTR') updater.add( ptr, Rdataset(ttl, rdataclass.IN, rdatatype.PTR, dnsName)) _msg = self.node.GetServer().Send(updater) for address in prevAddresses: ptr, zone = self.node.GetServer().GetZoneName( DnsRevName(address)) if zone: updater = self.node.GetConnection().Updater(zone) updater.delete(ptr, 'PTR') _msg = self.node.GetServer().Send(updater) return True
def GetDataType(self, idx): ip = self.control.GetItemText(idx, 1) if checkIpAddress(ip) == 4: return rdatatype.A else: return rdatatype.AAAA