Пример #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
Пример #2
0
 def Check(self):
   ok=True
   if not self.rds:
     ok=self.CheckValid(ok, self.Recordname, xlt(("Enter %s") % self.RecordNameStatic))
     if self.rdtype == rdatatype.CNAME:
       foundSame=self.node.cnames.get(self.Recordname)
       foundOther=self.node.hosts4.get(self.Recordname)
       if not foundOther:
         foundOther=self.node.hosts6.get(self.Recordname)
       if not foundOther:
         foundOther=self.node.ptrs.get(self.Recordname)
       if not foundOther:
         # SIG, NXT and KEY allowed
         foundOther=self.node.others.get(self.Recordname)
           
       ok=self.CheckValid(ok, not foundOther, xlt("CNAME collides with existing record"))
     else:
       foundSame=self.node.others.get(self.Recordname, {}).get(self.rdtype)
       # SIG, NXT and KEY: CNAME allowed
       foundCname=self.node.cnames.get(self.Recordname)
       ok=self.CheckValid(ok, not foundCname, xlt("Record collides with existing CNAME record"))
     ok=self.CheckValid(ok, not foundSame, xlt("Record of same type and name already exists"))
       
   ok=self.CheckValid(ok, timeToFloat(self.TTL), xlt("Please enter valid TTL value"))
   return ok
Пример #3
0
    def Check(self):
        ok = True
        if not self.rds:
            ok = self.CheckValid(ok, self.Recordname,
                                 xlt(("Enter %s") % self.RecordNameStatic))
            if self.rdtype == rdatatype.CNAME:
                foundSame = self.node.cnames.get(self.Recordname)
                foundOther = self.node.hosts4.get(self.Recordname)
                if not foundOther:
                    foundOther = self.node.hosts6.get(self.Recordname)
                if not foundOther:
                    foundOther = self.node.ptrs.get(self.Recordname)
                if not foundOther:
                    # SIG, NXT and KEY allowed
                    foundOther = self.node.others.get(self.Recordname)

                ok = self.CheckValid(
                    ok, not foundOther,
                    xlt("CNAME collides with existing record"))
            else:
                foundSame = self.node.others.get(self.Recordname,
                                                 {}).get(self.rdtype)
                # SIG, NXT and KEY: CNAME allowed
                foundCname = self.node.cnames.get(self.Recordname)
                ok = self.CheckValid(
                    ok, not foundCname,
                    xlt("Record collides with existing CNAME record"))
            ok = self.CheckValid(
                ok, not foundSame,
                xlt("Record of same type and name already exists"))

        ok = self.CheckValid(ok, timeToFloat(self.TTL),
                             xlt("Please enter valid TTL value"))
        return ok
Пример #4
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
Пример #5
0
 def valFmt(val, unit):
     if not unit:
         return val
     ul = unit.lower()
     if ul == "8kb":
         return floatToSize(int(val) * 8192)
     val = "%s %s" % (val, unit)
     if ul in ['kb', 'mb', 'gb']:
         return floatToSize(sizeToFloat(val[:-1] + "iB"))
     elif ul in ['ms', 's', 'h', 'min']:
         return floatToTime(timeToFloat(val))
     else:
         return val
Пример #6
0
 def valFmt(val, unit):
   if not unit:
     return val
   ul=unit.lower()
   if ul == "8kb":
     return floatToSize(int(val)*8192)
   val="%s %s" % (val, unit)
   if ul in ['kb', 'mb', 'gb']:
     return floatToSize(sizeToFloat(val[:-1] + "iB"))
   elif ul in ['ms', 's', 'h', 'min']:
     return floatToTime(timeToFloat(val))
   else:
     return val
Пример #7
0
 def Save(self):
   ttl=int(timeToFloat(self.TTL))
   rds=None
   for value in self.Value.splitlines():
     value=value.strip()
     if not value:
       continue
     if self.dataclass == list:
       value=removeSmartQuote(value)
       data=shlexSplit(value, ' ')
     else:
       data=self.dataclass(value)
     if not rds:
       rds=Rdataset(ttl, rdataclass.IN, self.rdtype, data)
     else:
       rds.add(Rdata(rds, data), ttl)
   return self._save(rds)
Пример #8
0
 def Save(self):
     ttl = int(timeToFloat(self.TTL))
     rds = None
     for value in self.Value.splitlines():
         value = value.strip()
         if not value:
             continue
         if self.dataclass == list:
             value = removeSmartQuote(value)
             data = shlexSplit(value, ' ')
         else:
             data = self.dataclass(value)
         if not rds:
             rds = Rdataset(ttl, rdataclass.IN, self.rdtype, data)
         else:
             rds.add(Rdata(rds, data), ttl)
     return self._save(rds)
Пример #9
0
  def Save(self):
    self.grid.SaveEditControlValue()
    ttl=int(timeToFloat(self.TTL))
    rds=None
    
    for row in range(self.grid.GetNumberRows()-1):
      vals=[]
      for col in range(self.grid.GetNumberCols()):
        val=self.grid.GetCellValue(row, col).strip()
        coltype=type(self.slotvals[col])
        if coltype == Name:
          vals.append(DnsName(val))
        elif coltype == list:
          vals.append(val.split(' '))
        else:
          vals.append(coltype(val))
        
      if not rds:
        rds=Rdataset(ttl, rdataclass.IN, self.rdtype, *tuple(vals))
      else:
        rds.add(Rdata(rds, *tuple(vals)), ttl)

    return self._save(rds)
Пример #10
0
    def Save(self):
        self.grid.SaveEditControlValue()
        ttl = int(timeToFloat(self.TTL))
        rds = None

        for row in range(self.grid.GetNumberRows() - 1):
            vals = []
            for col in range(self.grid.GetNumberCols()):
                val = self.grid.GetCellValue(row, col).strip()
                coltype = type(self.slotvals[col])
                if coltype == Name:
                    vals.append(DnsName(val))
                elif coltype == list:
                    vals.append(val.split(' '))
                else:
                    vals.append(coltype(val))

            if not rds:
                rds = Rdataset(ttl, rdataclass.IN, self.rdtype, *tuple(vals))
            else:
                rds.add(Rdata(rds, *tuple(vals)), ttl)

        return self._save(rds)
Пример #11
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
Пример #12
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