dnssec-fix/main.py

46 lines
1.9 KiB
Python

import datetime
import logging
import MySQLdb as m
import dns.resolver
def read_config():
return (['example.com'],'localhost',3306,'test','testpass','pdns','wile')
def main():
(zones, host, port, username, password, database, myname) = read_config()
db = m.connect(host, username, password, database)
for zone in zones:
logging.debug(f"checking zone {zone}")
# try to resolve dnskey.{zone} on all nameservers
# dammit, my testserver is running on a weird port
r = dns.resolver.Resolver()
nsarr = ['127.0.0.1:10053']
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()
if __name__ == "__main__":
main()