Exemplo n.º 1
0
 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
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
  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
Exemplo n.º 5
0
  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
Exemplo n.º 6
0
 def GetDataType(self, idx):
   ip=self.control.GetItemText(idx, 1)
   if checkIpAddress(ip) == 4:
     return rdatatype.A
   else:
     return rdatatype.AAAA
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
 def GetDataType(self, idx):
     ip = self.control.GetItemText(idx, 1)
     if checkIpAddress(ip) == 4:
         return rdatatype.A
     else:
         return rdatatype.AAAA