[Twisted-Python] Patch to support DNS updates
Tommi Virtanen
tv at twistedmatrix.com
Mon Feb 28 03:32:46 EST 2005
Jeff Silver wrote:
> --- names/authority.py 2004-02-07 17:57:11.000000000 +0000
> +++ names/authority.py.new 2005-02-25 09:34:02.725600288 +0000
> @@ -161,6 +161,78 @@
> add.extend(res[1][2])
> return ans, auth, add
>
> + def _trySaveToOriginalFile(self):
> + '''Called after an update.'''
> + soa_rec = self.soa[1]
> + new_serial = int(time.strftime('%Y%m%d%H%M')) - 200000000000
> + if new_serial <= soa_rec.serial:
> + new_serial = soa_rec.serial + 1
> + old_serial = soa_rec.serial
> + soa_rec.serial = new_serial
> + if hasattr(self, 'filename'):
> + tmp_filename = self.filename + '.new'
> + save_filename = '%s.%d' % (self.filename, old_serial)
> + self.saveFile(tmp_filename)
> + os.rename(self.filename, save_filename)
> + os.rename(tmp_filename, self.filename)
While I am not going to comment on the rest of the patch (the feature
does sound nice, altough lack of authentication makes using it pretty
pointless IMHO), this is just unacceptable.
If an exception is raised, the app crashes, or the machine loses power
between those two renames, your original zone file has been renamed
and your DNS server won't start.
Do something like
>>> f=open('foo', 'w')
>>> f.write('foo')
>>> f.close()
>>> import os
>>> os.link('foo', 'foo.old')
>>> f=open('bar', 'w')
>>> f.write('bar')
>>> os.fsync(f)
>>> f.close()
>>> os.rename('bar', 'foo')
>>>
Also, nice y2.043k trap there, I don't think many have been able to
write ones targeting that exact date.
More information about the Twisted-Python
mailing list