X-Git-Url: https://git.siccegge.de//index.cgi?p=tools.git;a=blobdiff_plain;f=tls%2Faddrecord;h=27328794705cb2c4045d4d94f6a21ade1df66030;hp=fa4c840bfd73f0c3762bd8d20a642304e0c3f0a4;hb=HEAD;hpb=76db1f37cc1815129a14e0205518f9cff133d7be diff --git a/tls/addrecord b/tls/addrecord index fa4c840..2732879 100644 --- a/tls/addrecord +++ b/tls/addrecord @@ -73,25 +73,32 @@ class Addrecord: def _update_records(self, sort, records): to_remove = [ i.split()[0] for i in records ] - with open('%s/%s.m4' % (sort, self._host), 'r') as oldzone: - fcntl.flock(oldzone, fcntl.LOCK_EX) - lines = oldzone.readlines() - lines = [ line for line in lines if line == '\n' or line.split()[0] not in to_remove ] - - lines.append('\n') - lines.append("; Last updated %s by %s\n" % (datetime.datetime.utcnow().isoformat(), - self._host)) - lines = lines + records - - with open('%s/%s.m4.new' % (sort, self._host), 'w') as newzone: - newtext = ''.join(lines) - newtext = re.sub(r'\n[\n]+', '\n\n', newtext) - newtext = re.sub(r'\n;.*\n\n;', '\n;', newtext) - newzone.write(newtext) - - os.rename('%s/%s.m4.new' % (sort, self._host), - '%s/%s.m4' % (sort, self._host)) - fcntl.flock(oldzone, fcntl.LOCK_UN) + with open('%s/%s.m4.lock' % (sort, self._host), 'w') as lockfd: + fcntl.flock(lockfd, fcntl.LOCK_EX) + with open('%s/%s.m4' % (sort, self._host), 'r') as oldzone: + lines = oldzone.readlines() + lines = [ line for line in lines + if line == '\n' or line.split()[0] not in to_remove ] + + lines.append('\n') + lines.append("; Last updated %s by %s\n" + % (datetime.datetime.utcnow().isoformat(), + self._host)) + lines = lines + records + + with open('%s/%s.m4.new' % (sort, self._host), 'w') as newzone: + newtext = ''.join(lines) + newtext = re.sub(r'\n[\n]+', '\n\n', newtext) + newtext = re.sub(r'\n;.*\n\n;', '\n;', newtext) + newzone.write(newtext) + + os.rename('%s/%s.m4.new' % (sort, self._host), + '%s/%s.m4' % (sort, self._host)) + + # forced-command is make -C ... + # rebuilds the actual zone file + subprocess.call(["ssh", "opendnssec@localhost"]) + fcntl.flock(lockfd, fcntl.LOCK_UN) def main():