Compare commits
3 Commits
d39078a78d
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3b70a47502 | ||
|
|
5674bf339c | ||
|
|
37f946305d |
27
daemon.py
27
daemon.py
@@ -109,13 +109,15 @@ def handleQuery(s, address, dmsg):
|
||||
|
||||
log.info(f'{address[0]} |\tNOTIFY for {name}')
|
||||
|
||||
_thread.start_new_thread(updateNsData, (name,))
|
||||
|
||||
response = dmsg.reply() # type: dns.message.Message
|
||||
response.header.aa = 1
|
||||
sendResponse(s, address, response)
|
||||
log.debug(f'{address[0]} |\tSent response')
|
||||
|
||||
|
||||
# FIXME: see: data/dnsconfig.js require_glob
|
||||
#_thread.start_new_thread(updateNsData, (name,))
|
||||
updateNsData(name)
|
||||
|
||||
return True
|
||||
|
||||
def makeResponseWithRCode(socket, address, dmsg, rcode):
|
||||
@@ -156,14 +158,17 @@ def updateNsData(zone):
|
||||
|
||||
log.info(f'{adaptedZone} |\tUpdating NS-Data')
|
||||
|
||||
dumpFile = f"{adaptedZone}.dump.js"
|
||||
# FIXME: see: data/dnsconfig.js require_glob
|
||||
#dumpFile = f"{adaptedZone}.dump.js"
|
||||
dumpFile = "dump.js"
|
||||
|
||||
if dumpZoneData(zone, dumpFile) != 0:
|
||||
raise Exception("Dumping data failed!")
|
||||
zone = adaptedZone
|
||||
|
||||
hasToDelete = True
|
||||
|
||||
adaptFileForRequire(zone, dumpFile)
|
||||
adaptFileForRequire(zone, HOSTS_PATH, dumpFile)
|
||||
if dnscontrolPush(zone) != 0:
|
||||
raise Exception("Pushing data failed!")
|
||||
|
||||
@@ -173,7 +178,7 @@ def updateNsData(zone):
|
||||
log.warning(f'{adaptedZone} |\tUpdating NS-Data failed!')
|
||||
|
||||
if(hasToDelete):
|
||||
deleteFile(dumpFile)
|
||||
deleteFile(os.path.join(HOSTS_PATH, dumpFile))
|
||||
|
||||
def adaptZoneName(zone):
|
||||
if config['zone']['public-suffix'] != "" and zone.endswith(config['zone']['public-suffix']):
|
||||
@@ -190,17 +195,19 @@ def deleteFile(file):
|
||||
os.remove(file)
|
||||
|
||||
ignoreLinesRexp = r"^\s*(var|D\(|DnsProvider\(|DefaultTTL\()"
|
||||
def adaptFileForRequire(zone, dumpFile):
|
||||
def adaptFileForRequire(zone, path, dumpFile):
|
||||
log.debug(f"{zone} |\tRewriting file '{dumpFile}'..")
|
||||
|
||||
with open(dumpFile, 'r') as fin:
|
||||
with open(f"{dumpFile}.tmp", 'w+') as fout:
|
||||
dumpFilePath = os.path.join(path, dumpFile)
|
||||
|
||||
with open(dumpFilePath, 'r') as fin:
|
||||
with open(f"{dumpFilePath}.tmp", 'w+') as fout:
|
||||
fout.write(f'D_EXTEND("{zone}",\n')
|
||||
|
||||
for line in fin:
|
||||
if not re.match(ignoreLinesRexp, line):
|
||||
fout.write(line)
|
||||
os.replace(f"{dumpFile}.tmp", dumpFile)
|
||||
os.replace(f"{dumpFilePath}.tmp", dumpFilePath)
|
||||
|
||||
def dnscontrolPush(zone):
|
||||
log.debug(f'{zone} |\tPushing..')
|
||||
|
||||
@@ -20,4 +20,8 @@ D('example.com', REG_NONE, DnsProvider(cloudflare));
|
||||
|
||||
// Include
|
||||
// (Do not touch unless you know what you are doing!)
|
||||
require_glob("/app/hosts/");
|
||||
|
||||
// FIXME: As require_glob does not work, we have to find another way to allow multiple files being loaded into dnscontrol
|
||||
// Maybe load 1 seperate file which can be expanded (being careful about thread-safety)
|
||||
//require_glob("/app/hosts/");
|
||||
require("/app/hosts/dump.js");
|
||||
|
||||
Reference in New Issue
Block a user