Beispiel #1
0
 def editName(self, fromName, toName):
     data = {}
     if fromName == toName:
         data["error"] = u"Name entry is the same as existing name"
         data["success"] = False
         return data
     db = DBHandler(app.config["DBFILE"])
     c = db.getCursor()
     if db.exists("zones", "name", toName):
         data["error"] = u"Duplicate name entry in db"
         data["success"] = False
         return data
     if not db.exists("zones", "name", fromName):
         data["error"] = u"No old name entry in db"
         data["success"] = False
         return data
     try:
         c.execute(
             """
             UPDATE zones
             SET old_value = name, name = ?,
             updated = 1, update_type = 'MODIFIED NAME'
             WHERE name LIKE ?
             """, [toName, fromName])
         db.commit()
         data["success"] = True
         data["message"] = u"Entry %s updated from %s" % (toName, fromName)
     except Exception, e:
         errormsg = u"Unsuccessful database update transaction:" + str(e)
         log.exception(errormsg, self.__class__.__name__)
         data["success"] = False
         data["error"] = errormsg
Beispiel #2
0
 def editHost(self, name, host):
     data = {}
     db = DBHandler(app.config["DBFILE"])
     c = db.getCursor()
     dbdata = list(
         c.execute(
             """
         SELECT host FROM zones
         WHERE name LIKE ?
         """, [name]))
     if len(dbdata) == 0:
         data["error"] = u"Zone doesn't exist"
         data["success"] = False
         return data
     else:
         zone = dbdata[0]
     if zone[0] == host:
         data["error"] = u"Host entry is the same as existing name"
         data["success"] = False
         return data
     try:
         c.execute(
             """
             UPDATE zones
             SET host = ?, updated = 1, update_type = 'MODIFIED HOST'
             WHERE name LIKE ?
             """, [host, name])
         db.commit()
         data["success"] = True
         data["message"] = u"Entry %s updated from %s" % (host, zone[0])
     except Exception, e:
         errormsg = u"Unsuccessful database update transaction:" + str(e)
         log.exception(errormsg, self.__class__.__name__)
         data["success"] = False
         data["error"] = errormsg
Beispiel #3
0
 def delete(self, name):
     data = {}
     db = DBHandler(app.config["DBFILE"])
     c = db.getCursor()
     zone = list(
         c.execute(
             """
         SELECT name FROM zones
         WHERE name LIKE ?
         """, [name]))
     if len(zone) > 0 and zone[0][0] == name:
         try:
             c.execute(
                 """
                 UPDATE zones
                 SET updated = 1, update_type = 'DELETE'
                 WHERE name LIKE ?
                 """, [name])
             db.commit()
             data["success"] = True
             data["message"] = u"Entry %s deleted" % (name)
         except Exception, e:
             errormsg = u"Unsuccessful database delete transaction:" + str(
                 e)
             log.exception(errormsg, self.__class__.__name__)
             data["success"] = False
             data["error"] = errormsg
 def editHost(self, name, host):
     data = {}
     db = DBHandler(app.config["DBFILE"])
     c = db.getCursor()
     dbdata = list(c.execute("""
         SELECT host FROM zones
         WHERE name LIKE ?
         """,[name]))
     if len(dbdata) == 0:
         data["error"] = u"Zone doesn't exist"
         data["success"] = False
         return data
     else:
         zone = dbdata[0]
     if zone[0] == host:
         data["error"] = u"Host entry is the same as existing name"
         data["success"] = False
         return data
     try:
         c.execute("""
             UPDATE zones
             SET host = ?, updated = 1, update_type = 'MODIFIED HOST'
             WHERE name LIKE ?
             """,[host,name])
         db.commit()
         data["success"] = True
         data["message"] = u"Entry %s updated from %s"%(host, zone[0])
     except Exception, e:
         errormsg = u"Unsuccessful database update transaction:" + str(e)
         log.exception(errormsg, self.__class__.__name__)
         data["success"] = False
         data["error"] = errormsg
 def editName(self, fromName, toName):
     data = {}
     if fromName == toName:
         data["error"] = u"Name entry is the same as existing name"
         data["success"] = False
         return data
     db = DBHandler(app.config["DBFILE"])
     c = db.getCursor()
     if db.exists("zones", "name", toName):
         data["error"] = u"Duplicate name entry in db"
         data["success"] = False
         return data
     if not db.exists("zones", "name", fromName):
         data["error"] = u"No old name entry in db"
         data["success"] = False
         return data
     try:
         c.execute("""
             UPDATE zones
             SET old_value = name, name = ?,
             updated = 1, update_type = 'MODIFIED NAME'
             WHERE name LIKE ?
             """,[toName, fromName])
         db.commit()
         data["success"] = True
         data["message"] = u"Entry %s updated from %s"%(toName, fromName)
     except Exception, e:
         errormsg = u"Unsuccessful database update transaction:" + str(e)
         log.exception(errormsg, self.__class__.__name__)
         data["success"] = False
         data["error"] = errormsg
 def add(self, name, host):
     data = {}
     # Check if name exists
     db = DBHandler(app.config["DBFILE"])
     c = db.getCursor()
     if db.exists("zones", "name", name):
         data["error"] = u"Duplicate name entry in db"
         data["success"] = False
     else:
         try:
             c.execute("""
                 INSERT INTO zones(name,host,updated,update_type)
                 VALUES(?,?,1,'CREATE')
                        """,[name,host])
             db.commit()
             data["success"] = True
             data["message"] = u"Entry %s inserted"%(name)
         except Exception, e:
             errormsg = u"Unsuccessful database insert transaction:" + str(e)
             log.exception(errormsg, self.__class__.__name__)
             data["success"] = False
             data["error"] = errormsg
 def delete(self, name):
     data = {}
     db = DBHandler(app.config["DBFILE"])
     c = db.getCursor()
     zone = list(c.execute("""
         SELECT name FROM zones
         WHERE name LIKE ?
         """,[name]))
     if len(zone) > 0 and zone[0][0] == name:
         try:
             c.execute("""
                 UPDATE zones
                 SET updated = 1, update_type = 'DELETE'
                 WHERE name LIKE ?
                 """,[name])
             db.commit()
             data["success"] = True
             data["message"] = u"Entry %s deleted"%(name)
         except Exception, e:
             errormsg = u"Unsuccessful database delete transaction:" + str(e)
             log.exception(errormsg, self.__class__.__name__)
             data["success"] = False
             data["error"] = errormsg
Beispiel #8
0
 def add(self, name, host):
     data = {}
     # Check if name exists
     db = DBHandler(app.config["DBFILE"])
     c = db.getCursor()
     if db.exists("zones", "name", name):
         data["error"] = u"Duplicate name entry in db"
         data["success"] = False
     else:
         try:
             c.execute(
                 """
                 INSERT INTO zones(name,host,updated,update_type)
                 VALUES(?,?,1,'CREATE')
                        """, [name, host])
             db.commit()
             data["success"] = True
             data["message"] = u"Entry %s inserted" % (name)
         except Exception, e:
             errormsg = u"Unsuccessful database insert transaction:" + str(
                 e)
             log.exception(errormsg, self.__class__.__name__)
             data["success"] = False
             data["error"] = errormsg
class DNSFileHandler:
    
    def __init__(self):
        self.zonefile = None
        self.tempfile = None
        self.serial = [";Serial", "; Serial"]
        
    def __del__(self):
        if self.zonefile is not None:
            self.zonefile.close()
        if self.tempfile is not None:
            self.tempfile.close()
        
    def readZonefile(self):
        self.zonefile = open(app.config["ZONEFILE"],"r")
        self.lines = self.zonefile.readlines()
        return self.lines
        
    def createTempFile(self):
        self.tempfile = open(app.config["TEMPZONEFILE"],"w")
        
    def moveZoneFile(self):
        os.rename(app.config["TEMPZONEFILE"], app.config["ZONEFILE"] )
        
    def getAllEntries(self, lines):
        # return all entries found in the zone file
        data = []
        printLines = False
        for line in lines:
            if line.find(app.config["ZONES_END_POINT"]) >= 0:
                printLines = False
            if printLines:
                zsplit = line.split()
                if len(zsplit) == 4:
                    data.append(ZoneEntry(zsplit[0],zsplit[3]))
            if line.find(app.config["ZONES_START_POINT"]) >= 0:
                printLines = True
        return data
    
    def reloadBind(self):
        if call(app.config["BIND_RELOAD_CMD"], shell=True) != 0:
            errormsg = u"Couldn't reload BIND."
            log.exception(errormsg, self.__class__.__name__)
        
    def zonefileJob(self):
        self.db = DBHandler(app.config["DBFILE"])
        self.c = self.db.getCursor()
        results = list(self.c.execute("""
            SELECT name, host, update_type, old_value FROM zones
            WHERE updated = 1
            """,[]))
        if len(results) > 0:
            self.updateZonefile(self.convertResults(results))
    
    def updateZonefile(self, zones):
        self.readZonefile()
        self.createTempFile()
        for zone in zones:
            self.templines = []
            if zone.updateType == "CREATE":
                self.addZone(zone)
            elif "MODIFIED" in zone.updateType:
                self.updateZone(zone)
            elif zone.updateType == "DELETE":
                self.deleteZone(zone)
            app.logger.info(zone.updateType+" zone: "+str(zone.name))
            for item in ["CREATE", "MODIFIED", "DELETE"]:
                if item in zone.updateType:
                    self.lines = list(self.templines)
        self.updateSerial()
        for line in self.lines:
            self.tempfile.write(line)
        self.tempfile.close()
        self.moveZoneFile()
        self.reloadBind()
                
    def addZone(self, zone):
        added = False
        for i, line in enumerate(self.lines):
            if app.config["ZONES_END_POINT"] in line:
                # Check if ip address or hostname
                try:
                    socket.inet_aton(zone.host)
                    newline = "%s\tIN\tA\t%s\n"%(zone.name,zone.host)
                except:
                    if not zone.host[:-1] == ".":
                        zone.host = zone.host + "."
                    newline = "%s\tIN\tCNAME\t%s\n"%(
                        zone.name,zone.host)
                self.templines.insert(i, newline)
                added = True
            if added:
                self.templines.insert(i+1, line)
            else:
                self.templines.insert(i, line)
        if added:
            try:
                self.c.execute("""
                    UPDATE zones
                    SET updated = 0, update_type = NULL
                    WHERE name LIKE ?
                    """,[zone.name])
                self.db.commit()
            except Exception, e:
                errormsg = u"Unsuccessful database update transaction:" + str(e)
                log.exception(errormsg, self.__class__.__name__)