feat: ask DNS, and get config from a .env file
This commit is contained in:
parent
f6d23e0f66
commit
c922186b84
4 changed files with 55 additions and 23 deletions
59
main.py
59
main.py
|
|
@ -1,10 +1,20 @@
|
|||
from decouple import config
|
||||
import datetime
|
||||
import logging
|
||||
import MySQLdb as m
|
||||
import dns.resolver
|
||||
|
||||
def read_config():
|
||||
return (['example.com'],'localhost',3306,'test','testpass','pdns','wile')
|
||||
zones_str = config('ZONES', default='example.com')
|
||||
zones = zones_str.split(',')
|
||||
dbhost = config('DB_HOST', 'localhost')
|
||||
dbport = int(config('DB_PORT', '3306'))
|
||||
dbdb = config('DB_DB', 'pdns')
|
||||
dbuser = config('DB_USER', 'test')
|
||||
dbpass = config('DB_PASS', 'testpass')
|
||||
master = config('DNS_MASTER', 'wile')
|
||||
print(f"{zones=} {dbhost=} {dbport=} {dbuser=} {dbpass=} {dbdb=} {master=}")
|
||||
return (zones,dbhost, dbport, dbuser, dbpass, dbdb, master)
|
||||
|
||||
|
||||
def main():
|
||||
|
|
@ -19,28 +29,31 @@ def main():
|
|||
expected = None
|
||||
for ns in nsarr:
|
||||
# r.nameservers = [ns]
|
||||
answer = r.resolve(qname=zone, rdtype='DNSKEY', tcp=False, search=ns)
|
||||
print(f"{answer=}")
|
||||
if not expected:
|
||||
expected = answer.rrset.to_text()
|
||||
print(f"set {expected=}")
|
||||
else:
|
||||
if answer.rrset.to_text() != expected:
|
||||
print(f"{answer.rrset.to_text()=} differs from {expected=}")
|
||||
# I'm very confident this is more complicated than it needs to be...
|
||||
db.query(f"""SELECT id,content FROM records WHERE type='SOA' AND name='{zone}'""")
|
||||
result = db.store_result()
|
||||
row = result.fetch_row()
|
||||
(id,content) = row[0]
|
||||
carr = content.split()
|
||||
newdatestr = datetime.datetime.today().strftime("%Y%m%d01")
|
||||
if newdatestr[:8] == carr[2][:8]:
|
||||
count = int(carr[2][8:])
|
||||
newcount = count + 1
|
||||
newdatestr = f"{newdatestr[:8]}{newcount:02d}"
|
||||
carr[2] = newdatestr
|
||||
db.query(f"""UPDATE records SET content = '{' '.join(carr)}' WHERE id={id}""")
|
||||
db.commit()
|
||||
try:
|
||||
answer = r.resolve(qname=zone, rdtype='DNSKEY', tcp=False, search=ns)
|
||||
print(f"{answer=}")
|
||||
if not expected:
|
||||
expected = answer.rrset.to_text()
|
||||
print(f"set {expected=}")
|
||||
else:
|
||||
if answer.rrset.to_text() != expected:
|
||||
print(f"{answer.rrset.to_text()=} differs from {expected=}")
|
||||
# I'm very confident this is more complicated than it needs to be...
|
||||
db.query(f"""SELECT id,content FROM records WHERE type='SOA' AND name='{zone}'""")
|
||||
result = db.store_result()
|
||||
row = result.fetch_row()
|
||||
(id,content) = row[0]
|
||||
carr = content.split()
|
||||
newdatestr = datetime.datetime.today().strftime("%Y%m%d01")
|
||||
if newdatestr[:8] == carr[2][:8]:
|
||||
count = int(carr[2][8:])
|
||||
newcount = count + 1
|
||||
newdatestr = f"{newdatestr[:8]}{newcount:02d}"
|
||||
carr[2] = newdatestr
|
||||
db.query(f"""UPDATE records SET content = '{' '.join(carr)}' WHERE id={id}""")
|
||||
db.commit()
|
||||
except:
|
||||
print(f"{zone} has no DNSKEY")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue