ChangeLog 52 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487
  1. 2016-09-29 Bob Halley <halley@dnspython.org>
  2. * IDNA 2008 support is now available if the "idna" module has been
  3. installed and IDNA 2008 is requested. The default IDNA behavior
  4. is still IDNA 2003. The new IDNA codec mechanism is currently
  5. only useful for direct calls to dns.name.from_text() or
  6. dns.name.from_unicode(), but in future releases it will be
  7. deployed throughout dnspython, e.g. so that you can read a
  8. masterfile with an IDNA 2008 codec in force.
  9. * By default, dns.name.to_unicode() is not strict about which
  10. version of IDNA the input complies with. Strictness can be
  11. requested by using one of the strict IDNA codecs.
  12. * Add AVC RR support.
  13. * Some problems with newlines in various output modes have been
  14. addressed.
  15. * dns.name.to_text() now returns text and not bytes on Python 3.x
  16. * More miscellaneous fixes for the Python 2/3 codeline merge.
  17. 2016-05-27 Bob Halley <halley@dnspython.org>
  18. * (Version 1.14.0 released)
  19. * Add CSYNC RR support
  20. * Fix bug in LOC which destroyed N/S and E/W distinctions within
  21. a degree of the equator or prime merdian respectively.
  22. * Misc. fixes to deal with fallout from the Python 2 & 3 merge.
  23. [issue #156], [issue #157], [issue #158], [issue #159],
  24. [issue #160].
  25. * Running with python optimization on caused issues when
  26. stripped docstrings were referenced. [issue #154]
  27. * dns.zone.from_text() erroneously required the zone to be provided.
  28. [issue #153]
  29. 2016-05-13 Bob Halley <halley@dnspython.org>
  30. * dns/message.py (make_query): Setting any value which implies
  31. EDNS will turn on EDNS if 'use_edns' has not been specified.
  32. 2016-05-12 Bob Halley <halley@dnspython.org>
  33. * TSIG signature algorithm setting was broken by the Python 2
  34. and Python 3 code line merge. Fixed.
  35. 2016-05-10 Bob Halley <halley@dnspython.org>
  36. * (Version 1.13.0 released)
  37. 2016-05-10 Bob Halley <halley@dnspython.org>
  38. * Dropped support for Python 2.4 and 2.5.
  39. * Zone origin can be specified as a string.
  40. * Support string representation for all DNSExceptions.
  41. * Use setuptools not distutils
  42. * A number of Unicode name bug fixes.
  43. * Added support for CAA, CDS, CDNSKEY, EUI48, EUI64, and URI RR
  44. types.
  45. * Names now support the pickle protocol.
  46. * NameDicts now keep the max-depth value correct, and update
  47. properly.
  48. * resolv.conf processing rejects lines with too few tokens.
  49. * Ports can be specified per-nameserver in the stub resolver.
  50. 2016-05-03 Arthur Gautier
  51. * Single source support for python 2.6+ and 3.3+
  52. 2014-09-04 Bob Halley <halley@dnspython.org>
  53. * Comparing two rdata is now always done by comparing the binary
  54. data of the DNSSEC digestable forms. This corrects a number of
  55. errors where dnspython's rdata comparison order was not the
  56. DNSSEC order.
  57. * Add CAA implementation. Thanks to Brian Wellington for the
  58. patch.
  59. 2014-09-01 Bob Halley <halley@dnspython.org>
  60. * (Version 1.12.0 released)
  61. 2014-08-31 Bob Halley <halley@dnspython.org>
  62. * The test system can now run the tests without requiring dnspython
  63. to be installed.
  64. 2014-07-24 Bob Halley <halley@dnspython.org>
  65. * The 64-bit version of Python on Windows has sys.maxint set to
  66. 2^31-1, yet passes 2^63-1 as the "unspecified bound" value in
  67. slices. This is a bug in Python as the documentation says the
  68. unspecified bound value should be sys.maxint. We now cope with
  69. this. Thanks to Matthäus Wander for reporting the problem.
  70. 2014-06-21 Bob Halley <halley@dnspython.org>
  71. * When reading from a masterfile, if the first content line
  72. started with leading whitespace, we raised an ugly exception
  73. instead of doing the right thing, namely using the zone origin as
  74. the name. [#73] Thanks to Tassatux for reporting the issue.
  75. * Added dns.zone.to_text() convenience method. Thanks to Brandon
  76. Whaley <redkrieg@gmail.com> for the patch.
  77. * The /etc/resolv.conf setting "options rotate" is now understood
  78. by the resolver. If present, the resolver will shuffle the
  79. nameserver list each time dns.resolver.query() is called. Thanks
  80. to underrun for the patch. Note that you don't want to add
  81. "options rotate" to your /etc/resolv.conf if your system's
  82. resolver library does not understand it. In this case, just set
  83. resolver.rotate = True by hand.
  84. 2014-06-19 Bob Halley <halley@dnspython.org>
  85. * Escaping of Unicode has been corrected. Previously we escaped
  86. and then converted to Unicode, but the right thing to do is
  87. convert to Unicode, then escape. Also, characters > 0x7f should
  88. NOT be escaped in Unicode mode. Thanks to Martin Basti for the
  89. patch.
  90. * dns.rdtypes.ANY.DNSKEY now has helpers functions to convert
  91. between the numeric form of the flags and a set of human-friendly
  92. strings. Thanks to Petr Spacek for the patch.
  93. * RRSIGs did not respect relativization settings in to_text().
  94. Thanks to Brian Smith for reporting the bug and submitting a
  95. (slightly different) patch.
  96. 2014-06-18 Bob Halley <halley@dnspython.org>
  97. * dns/rdtypes/IN/APL.py: The APL from_wire() method did not accept an
  98. rdata length of 0 as valid. Thanks to salzmdan for reporting the
  99. problem.
  100. 2014-05-31 Bob Halley <halley@dnspython.org>
  101. * dns/ipv6.py: Add is_mapped()
  102. * dns/reversename.py: Lookup IPv6 mapped IPv4 addresses in the v4
  103. reverse namespace. Thanks to Devin Bayer. Yes, I finally fixed
  104. this one :)
  105. 2014-04-11 Bob Halley <halley@dnspython.org>
  106. * dns/zone.py: Do not put back an unescaped token. This was
  107. causing escape processing for domain names to break. Thanks to
  108. connormclaud for reporting the problem.
  109. 2014-04-04 Bob Halley <halley@dnspython.org>
  110. * dns/message.py: Making a response didn't work correctly if the
  111. query was signed with TSIG and we knew the key. Thanks to Jeffrey
  112. Stiles for reporting the problem.
  113. 2013-12-11 Bob Halley <halley@dnspython.org>
  114. * dns/query.py: Fix problems with the IXFR state machine which caused
  115. long diffs to fail. Thanks to James Raftery for the fix and the
  116. repeated prodding to get it applied :)
  117. 2013-09-02 Bob Halley <halley@dnspython.org>
  118. * (Version 1.11.1 released)
  119. 2013-09-01 Bob Halley <halley@dnspython.org>
  120. * dns/tsigkeyring.py (to_text): we want keyname.to_text(), not
  121. dns.name.to_text(keyname). Thangs to wangwang for the fix.
  122. 2013-08-26 Bob Halley <halley@dnspython.org>
  123. * dns/tsig.py (sign): multi-message TSIGs were broken for
  124. algorithms other than HMAC-MD5 because we weren't passing the
  125. right digest module to the HMAC code. Thanks to salzmdan for
  126. reporting the bug.
  127. 2013-08-09 Bob Halley <halley@dnspython.org>
  128. * dns/dnssec.py (_find_candidate_keys): we tried to extract the
  129. key from the wrong variable name. Thanks to Andrei Fokau for the
  130. fix.
  131. 2013-07-08 Bob Halley <halley@dnspython.org>
  132. * dns/resolver.py: we want 'self.retry_servfail' not just
  133. retry_servfail. Reported by many, thanks! Thanks to
  134. Jeffrey C. Ollie for the fix.
  135. 2013-07-08 Bob Halley <halley@dnspython.org>
  136. * tests/grange.py: fix tests to use older-style print formatting
  137. for backwards compatibility with python 2.4. Thanks to
  138. Jeffrey C. Ollie for the fix.
  139. 2013-07-01 Bob Halley <halley@dnspython.org>
  140. * (Version 1.11.0 released)
  141. 2013-04-28 Bob Halley <halley@dnspython.org>
  142. * dns/name.py (Name.to_wire): Do not add items with offsets >= 2^14
  143. to the compression table. Thanks to Casey Deccio for discovering
  144. this bug.
  145. 2013-04-26 Bob Halley <halley@dnspython.org>
  146. * dns/ipv6.py (inet_ntoa): We now comply with RFC 5952 section
  147. 5.2.2, by *not* using the :: syntax to shorten just one 16-bit
  148. field. Thanks to David Waitzman for reporting the bug and
  149. suggesting the fix.
  150. 2013-03-31 Bob Halley <halley@dnspython.org>
  151. * lock caches in case they are shared
  152. * raise YXDOMAIN if we see one
  153. * do not print empty rdatasets
  154. * Add contributed $GENERATE support (thanks uberj)
  155. * Remove DNSKEY keytag uniqueness assumption (RFC 4034, section 8)
  156. (thanks James Dempsey)
  157. 2012-09-25 Sean Leach
  158. * added set_flags() method to dns.resolver.Resolver
  159. 2012-09-25 Pieter Lexis
  160. * added support for TLSA RR
  161. 2012-08-28 Bob Halley <halley@dnspython.org>
  162. * dns/rdtypes/ANY/NSEC3.py (NSEC3.from_text): The NSEC3 from_text()
  163. method could erroneously emit empty bitmap windows (i.e. windows
  164. with a count of 0 bytes); such bitmaps are illegal.
  165. 2012-04-08 Bob Halley <halley@dnspython.org>
  166. * (Version 1.10.0 released)
  167. 2012-04-08 Bob Halley <halley@dnspython.org>
  168. * dns/message.py (make_query): All EDNS values may now be
  169. specified when calling make_query()
  170. * dns/query.py: Specifying source_port had no effect if source was
  171. not specified. We now use the appropriate wildcard source in
  172. that case.
  173. * dns/resolver.py (Resolver.query): source_port may now be
  174. specified.
  175. * dns/resolver.py (Resolver.query): Switch to TCP when a UDP
  176. response is truncated. Handle nameservers that serve on UDP
  177. but not TCP.
  178. 2012-04-07 Bob Halley <halley@dnspython.org>
  179. * dns/zone.py (from_xfr): dns.zone.from_xfr() now takes a
  180. 'check_origin' parameter which defaults to True. If set to
  181. False, then dnspython will not make origin checks on the zone.
  182. Thanks to Carlos Perez for the report.
  183. * dns/rdtypes/ANY/SSHFP.py (SSHFP.from_text): Allow whitespace in
  184. the text string. Thanks to Jan Andres for the report and the
  185. patch.
  186. * dns/message.py (from_wire): dns.message.from_wire() now takes
  187. an 'ignore_trailing' parameter which defaults to False. If set
  188. to True, then trailing junk will be ignored instead of causing
  189. TrailingJunk to be raised. Thanks to Shane Huntley for
  190. contributing the patch.
  191. 2011-08-22 Bob Halley <halley@dnspython.org>
  192. * dns/resolver.py: Added LRUCache. In this cache implementation,
  193. the cache size is limited to a user-specified number of nodes, and
  194. when adding a new node to a full cache the least-recently used
  195. node is removed.
  196. 2011-07-13 Bob Halley <halley@dnspython.org>
  197. * dns/resolver.py: dns.resolver.override_system_resolver()
  198. overrides the socket module's versions of getaddrinfo(),
  199. getnameinfo(), getfqdn(), gethostbyname(), gethostbyname_ex() and
  200. gethostbyaddr() with an implementation which uses a dnspython stub
  201. resolver instead of the system's stub resolver. This can be
  202. useful in testing situations where you want to control the
  203. resolution behavior of python code without having to change the
  204. system's resolver settings (e.g. /etc/resolv.conf).
  205. dns.resolver.restore_system_resolver() undoes the change.
  206. 2011-07-08 Bob Halley <halley@dnspython.org>
  207. * dns/ipv4.py: dnspython now provides its own, stricter, versions
  208. of IPv4 inet_ntoa() and inet_aton() instead of using the OS's
  209. versions.
  210. * dns/ipv6.py: inet_aton() now bounds checks embedded IPv4 addresses
  211. more strictly. Also, now only dns.exception.SyntaxError can be
  212. raised on bad input.
  213. 2011-04-05 Bob Halley <halley@dnspython.org>
  214. * Old DNSSEC types (KEY, NXT, and SIG) have been removed.
  215. * Bounds checking of slices in rdata wire processing is now more
  216. strict, and bounds errors (e.g. we got less data than was
  217. expected) now raise dns.exception.FormError rather than
  218. IndexError.
  219. 2011-03-28 Bob Halley <halley@dnspython.org>
  220. * (Version 1.9.4 released)
  221. 2011-03-24 Bob Halley <halley@dnspython.org>
  222. * dns/rdata.py (Rdata._wire_cmp): We need to specify no
  223. compression and an origin to _wire_cmp() in case names in the
  224. rdata are relative names.
  225. * dns/rdtypes/ANY/SIG.py (SIG._cmp): Add missing 'import struct'.
  226. Thanks to Arfrever Frehtes Taifersar Arahesis for reporting the
  227. problem.
  228. 2011-03-24 Bob Halley <halley@dnspython.org>
  229. * (Version 1.9.3 released)
  230. 2011-03-22 Bob Halley <halley@dnspython.org>
  231. * dns/resolver.py: a boolean parameter, 'raise_on_no_answer', has
  232. been added to the query() methods. In no-error, no-data
  233. situations, this parameter determines whether NoAnswer should be
  234. raised or not. If True, NoAnswer is raised. If False, then an
  235. Answer() object with a None rrset will be returned.
  236. * dns/resolver.py: Answer() objects now have a canonical_name field.
  237. 2011-01-11 Bob Halley <halley@dnspython.org>
  238. * Dnspython was erroneously doing case-insensitive comparisons
  239. of the names in NSEC and RRSIG RRs. Thanks to Casey Deccio for
  240. reporting this bug.
  241. 2010-12-17 Bob Halley <halley@dnspython.org>
  242. * dns/message.py (_WireReader._get_section): use "is" and not "=="
  243. when testing what section an RR is in. Thanks to James Raftery
  244. for reporting this bug.
  245. 2010-12-10 Bob Halley <halley@dnspython.org>
  246. * dns/resolver.py (Resolver.query): disallow metaqueries.
  247. * dns/rdata.py (Rdata.__hash__): Added a __hash__ method for rdata.
  248. 2010-11-23 Bob Halley <halley@dnspython.org>
  249. * (Version 1.9.2 released)
  250. 2010-11-23 Bob Halley <halley@dnspython.org>
  251. * dns/dnssec.py (_need_pycrypto): DSA and RSA are modules, not
  252. functions, and I didn't notice because the test suite masked
  253. the bug! *sigh*
  254. 2010-11-22 Bob Halley <halley@dnspython.org>
  255. * (Version 1.9.1 released)
  256. 2010-11-22 Bob Halley <halley@dnspython.org>
  257. * dns/dnssec.py: the "from" style import used to get DSA from
  258. PyCrypto trashed a DSA constant. Now a normal import is used
  259. to avoid namespace contamination.
  260. 2010-11-20 Bob Halley <halley@dnspython.org>
  261. * (Version 1.9.0 released)
  262. 2010-11-07 Bob Halley <halley@dnspython.org>
  263. * dns/dnssec.py: Added validate() to do basic DNSSEC validation
  264. (requires PyCrypto). Thanks to Brian Wellington for the patch.
  265. * dns/hash.py: Hash compatibility handling is now its own module.
  266. 2010-10-31 Bob Halley <halley@dnspython.org>
  267. * dns/resolver.py (zone_for_name): A query name resulting in a
  268. CNAME or DNAME response to a node which had an SOA was incorrectly
  269. treated as a zone origin. In these cases, we should just look
  270. higher. Thanks to Gert Berger for reporting this problem.
  271. * Added zonediff.py to examples. This program compares two zones
  272. and shows the differences either in diff-like plain text, or
  273. HTML. Thanks to Dennis Kaarsemaker for contributing this
  274. useful program.
  275. 2010-10-27 Bob Halley <halley@dnspython.org>
  276. * Incorporate a patch to use poll() instead of select() by
  277. default on platforms which support it. Thanks to
  278. Peter Schüller and Spotify for the contribution.
  279. 2010-10-17 Bob Halley <halley@dnspython.org>
  280. * Python prior to 2.5.2 doesn't compute the correct values for
  281. HMAC-SHA384 and HMAC-SHA512. We now detect attempts to use
  282. them and raise NotImplemented if the Python version is too old.
  283. Thanks to Kevin Chen for reporting the problem.
  284. * Various routines that took the string forms of rdata types and
  285. classes did not permit the strings to be Unicode strings.
  286. Thanks to Ryan Workman for reporting the issue.
  287. * dns/tsig.py: Added symbolic constants for the algorithm strings.
  288. E.g. you can now say dns.tsig.HMAC_MD5 instead of
  289. "HMAC-MD5.SIG-ALG.REG.INT". Thanks to Cillian Sharkey for
  290. suggesting this improvement.
  291. * dns/tsig.py (get_algorithm): fix hashlib compatibility; thanks to
  292. Kevin Chen for the patch.
  293. * dns/dnssec.py: Added key_id() and make_ds().
  294. * dns/message.py: message.py needs to import dns.edns since it uses
  295. it.
  296. 2010-05-04 Bob Halley <halley@dnspython.org>
  297. * dns/rrset.py (RRset.__init__): "covers" was not passed to the
  298. superclass __init__(). Thanks to Shanmuga Rajan for reporting
  299. the problem.
  300. 2010-03-10 Bob Halley <halley@dnspython.org>
  301. * The TSIG algorithm value was passed to use_tsig() incorrectly
  302. in some cases. Thanks to 'ducciovigolo' for reporting the problem.
  303. 2010-01-26 Bob Halley <halley@dnspython.org>
  304. * (Version 1.8.0 released)
  305. 2010-01-13 Bob Halley <halley@dnspython.org>
  306. * dns/dnssec.py: Added RSASHA256 and RSASHA512 codepoints; added
  307. other missing codepoints to _algorithm_by_text.
  308. 2010-01-12 Bob Halley <halley@dnspython.org>
  309. * Escapes in masterfiles now work correctly. Previously they were
  310. only working correctly when the text involved was part of a domain
  311. name.
  312. * dns/tokenizer.py: The tokenizer's get() method now returns Token
  313. objects, not (type, text) tuples.
  314. 2009-11-13 Bob Halley <halley@dnspython.org>
  315. * Support has been added for hmac-sha1, hmac-sha224, hmac-sha256,
  316. hmac-sha384 and hmac-sha512. Thanks to Kevin Chen for a
  317. thoughtful, high quality patch.
  318. * dns/update.py (Update::present): A zero TTL was not added if
  319. present() was called with a single rdata, causing _add() to be
  320. unhappy. Thanks to Eugene Kim for reporting the problem and
  321. submitting a patch.
  322. * dns/entropy.py: Use os.urandom() if present. Don't seed until
  323. someone wants randomness.
  324. 2009-09-16 Bob Halley <halley@dnspython.org>
  325. * dns/entropy.py: The entropy module needs locking in order to be
  326. used safely in a multithreaded environment. Thanks to Beda Kosata
  327. for reporting the problem.
  328. 2009-07-27 Bob Halley <halley@dnspython.org>
  329. * dns/query.py (xfr): The socket was not set to nonblocking mode.
  330. Thanks to Erik Romijn for reporting this problem.
  331. 2009-07-23 Bob Halley <halley@dnspython.org>
  332. * dns/rdtypes/IN/SRV.py (SRV._cmp): SRV records were compared
  333. incorrectly due to a cut-and-paste error. Thanks to Tommie
  334. Gannert for reporting this bug.
  335. * dns/e164.py (query): The resolver parameter was not used.
  336. Thanks to Matías Bellone for reporting this bug.
  337. 2009-06-23 Bob Halley <halley@dnspython.org>
  338. * dns/entropy.py (EntropyPool.__init__): open /dev/random unbuffered;
  339. there's no need to consume more randomness than we need. Thanks
  340. to Brian Wellington for the patch.
  341. 2009-06-19 Bob Halley <halley@dnspython.org>
  342. * (Version 1.7.1 released)
  343. 2009-06-19 Bob Halley <halley@dnspython.org>
  344. * DLV.py was omitted from the kit
  345. * Negative prerequisites were not handled correctly in _get_section().
  346. 2009-06-19 Bob Halley <halley@dnspython.org>
  347. * (Version 1.7.0 released)
  348. 2009-06-19 Bob Halley <halley@dnspython.org>
  349. * On Windows, the resolver set the domain incorrectly. Thanks
  350. to Brandon Carpenter for reporting this bug.
  351. * Added a to_digestable() method to rdata classes; it returns the
  352. digestable form (i.e. DNSSEC canonical form) of the rdata. For
  353. most rdata types this is the same uncompressed wire form. For
  354. certain older DNS RR types, however, domain names in the rdata
  355. are downcased.
  356. * Added support for the HIP RR type.
  357. 2009-06-18 Bob Halley <halley@dnspython.org>
  358. * Added support for the DLV RR type.
  359. * Added various DNSSEC related constants (e.g. algorithm identifiers,
  360. flag values).
  361. * dns/tsig.py: Added support for BADTRUNC result code.
  362. * dns/query.py (udp): When checking that addresses are the same,
  363. use the binary form of the address in the comparison. This
  364. ensures that we don't treat addresses as different if they have
  365. equivalent but differing textual representations. E.g. "1:00::1"
  366. and "1::1" represent the same address but are not textually equal.
  367. Thanks to Kim Davies for reporting this bug.
  368. * The resolver's query() method now has an optional 'source' parameter,
  369. allowing the source IP address to be specified. Thanks to
  370. Alexander Lind for suggesting the change and sending a patch.
  371. * Added NSEC3 and NSEC3PARAM support.
  372. 2009-06-17 Bob Halley <halley@dnspython.org>
  373. * Fixed NSEC.to_text(), which was only printing the last window.
  374. Thanks to Brian Wellington for finding the problem and fixing it.
  375. 2009-03-30 Bob Halley <halley@dnspython.org>
  376. * dns/query.py (xfr): Allow UDP IXFRs. Use "one_rr_per_rrset" mode when
  377. doing IXFR.
  378. 2009-03-30 Bob Halley <halley@dnspython.org>
  379. * Add "one_rr_per_rrset" mode switch to methods which parse
  380. messages from wire format (e.g. dns.message.from_wire(),
  381. dns.query.udp(), dns.query.tcp()). If set, each RR read is
  382. placed in its own RRset (instead of being coalesced).
  383. 2009-03-30 Bob Halley <halley@dnspython.org>
  384. * Added EDNS option support.
  385. 2008-10-16 Bob Halley <halley@dnspython.org>
  386. * dns/rdtypes/ANY/DS.py: The from_text() parser for DS RRs did not
  387. allow multiple Base64 chunks. Thanks to Rakesh Banka for
  388. finding this bug and submitting a patch.
  389. 2008-10-08 Bob Halley <halley@dnspython.org>
  390. * Add entropy module.
  391. * When validating TSIGs, we need to use the absolute name.
  392. 2008-06-03 Bob Halley <halley@dnspython.org>
  393. * dns/message.py (Message.set_rcode): The mask used preserved the
  394. extended rcode, instead of everything else in ednsflags.
  395. * dns/message.py (Message.use_edns): ednsflags was not kept
  396. coherent with the specified edns version.
  397. 2008-02-06 Bob Halley <halley@dnspython.org>
  398. * dns/ipv6.py (inet_aton): We could raise an exception other than
  399. dns.exception.SyntaxError in some cases.
  400. * dns/tsig.py: Raise an exception when the peer has set a non-zero
  401. TSIG error.
  402. 2007-11-25 Bob Halley <halley@dnspython.org>
  403. * (Version 1.6.0 released)
  404. 2007-11-25 Bob Halley <halley@dnspython.org>
  405. * dns/query.py (_wait_for): if select() raises an exception due to
  406. EINTR, we should just select() again.
  407. 2007-06-13 Bob Halley <halley@dnspython.org>
  408. * dns/inet.py: Added is_multicast().
  409. * dns/query.py (udp): If the queried address is a multicast address, then
  410. don't check that the address of the response is the same as the address
  411. queried.
  412. 2007-05-24 Bob Halley <halley@dnspython.org>
  413. * dns/rdtypes/IN/NAPTR.py: NAPTR comparisons didn't compare the
  414. preference field due to a typo.
  415. 2007-02-07 Bob Halley <halley@dnspython.org>
  416. * dns/resolver.py: Integrate code submitted by Paul Marks to
  417. determine whether a Windows NIC is enabled. The way dnspython
  418. used to do this does not work on Windows Vista.
  419. 2006-12-10 Bob Halley <halley@dnspython.org>
  420. * (Version 1.5.0 released)
  421. 2006-11-03 Bob Halley <halley@dnspython.org>
  422. * dns/rdtypes/IN/DHCID.py: Added support for the DHCID RR type.
  423. 2006-11-02 Bob Halley <halley@dnspython.org>
  424. * dns/query.py (udp): Messages from unexpected sources can now be
  425. ignored by setting ignore_unexpected to True.
  426. 2006-10-31 Bob Halley <halley@dnspython.org>
  427. * dns/query.py (udp): When raising UnexpectedSource, add more
  428. detail about what went wrong to the exception.
  429. 2006-09-22 Bob Halley <halley@dnspython.org>
  430. * dns/message.py (Message.use_edns): add reasonable defaults for
  431. the ednsflags, payload, and request_payload parameters.
  432. * dns/message.py (Message.want_dnssec): add a convenience method for
  433. enabling/disabling the "DNSSEC desired" flag in requests.
  434. * dns/message.py (make_query): add "use_edns" and "want_dnssec"
  435. parameters.
  436. 2006-08-17 Bob Halley <halley@dnspython.org>
  437. * dns/resolver.py (Resolver.read_resolv_conf): If /etc/resolv.conf
  438. doesn't exist, just use the default resolver configuration (i.e.
  439. the same thing we would have used if resolv.conf had existed and
  440. been empty).
  441. 2006-07-26 Bob Halley <halley@dnspython.org>
  442. * dns/resolver.py (Resolver._config_win32_fromkey): fix
  443. cut-and-paste error where we passed the wrong variable to
  444. self._config_win32_search(). Thanks to David Arnold for finding
  445. the bug and submitting a patch.
  446. 2006-07-20 Bob Halley <halley@dnspython.org>
  447. * dns/resolver.py (Answer): Add more support for the sequence
  448. protocol, forwarding requests to the answer object's rrset.
  449. E.g. "for a in answer" is equivalent to "for a in answer.rrset",
  450. "answer[i]" is equivalent to "answer.rrset[i]", and
  451. "answer[i:j]" is equivalent to "answer.rrset[i:j]".
  452. 2006-07-19 Bob Halley <halley@dnspython.org>
  453. * dns/query.py (xfr): Add IXFR support.
  454. 2006-06-22 Bob Halley <halley@dnspython.org>
  455. * dns/rdtypes/IN/IPSECKEY.py: Added support for the IPSECKEY RR type.
  456. 2006-06-21 Bob Halley <halley@dnspython.org>
  457. * dns/rdtypes/ANY/SPF.py: Added support for the SPF RR type.
  458. 2006-06-02 Bob Halley <halley@dnspython.org>
  459. * (Version 1.4.0 released)
  460. 2006-04-25 Bob Halley <halley@dnspython.org>
  461. * dns/rrset.py (RRset.to_rdataset): Added a convenience method
  462. to convert an rrset into an rdataset.
  463. 2006-03-27 Bob Halley <halley@dnspython.org>
  464. * Added dns.e164.query(). This function can be used to look for
  465. NAPTR RRs for a specified number in several domains, e.g.:
  466. dns.e164.query('16505551212',
  467. ['e164.dnspython.org.', 'e164.arpa.'])
  468. 2006-03-26 Bob Halley <halley@dnspython.org>
  469. * dns/resolver.py (Resolver.query): The resolver deleted from
  470. a list while iterating it, which makes the iterator unhappy.
  471. 2006-03-17 Bob Halley <halley@dnspython.org>
  472. * dns/resolver.py (Resolver.query): The resolver needlessly
  473. delayed responses for successful queries.
  474. 2006-01-18 Bob Halley <halley@dnspython.org>
  475. * dns/rdata.py: added a validate() method to the rdata class. If
  476. you change an rdata by assigning to its fields, it is a good
  477. idea to call validate() when you are done making changes.
  478. For example, if 'r' is an MX record and then you execute:
  479. r.preference = 100000 # invalid, because > 65535
  480. r.validate()
  481. The validation will fail and an exception will be raised.
  482. 2006-01-11 Bob Halley <halley@dnspython.org>
  483. * dns/ttl.py: TTLs are now bounds checked to be within the closed
  484. interval [0, 2^31 - 1].
  485. * The BIND 8 TTL syntax is now accepted in the SOA refresh, retry,
  486. expire, and minimum fields, and in the original_ttl field of
  487. SIG and RRSIG records.
  488. 2006-01-04 Bob Halley <halley@dnspython.org>
  489. * dns/resolver.py: The windows registry irritatingly changes the
  490. list element delimiter in between ' ' and ',' (and vice-versa)
  491. in various versions of windows. We now cope by always looking
  492. for either one (' ' first).
  493. 2005-12-27 Bob Halley <halley@dnspython.org>
  494. * dns/e164.py: Added routines to convert between E.164 numbers and
  495. their ENUM domain name equivalents.
  496. * dns/reversename.py: Added routines to convert between IPv4 and
  497. IPv6 addresses and their DNS reverse-map equivalents.
  498. 2005-12-18 Bob Halley <halley@dnspython.org>
  499. * dns/rdtypes/ANY/LOC.py (_tuple_to_float): The sign was lost when
  500. converting a tuple into a float, which broke conversions of
  501. south latitudes and west longitudes.
  502. 2005-11-17 Bob Halley <halley@dnspython.org>
  503. * dns/zone.py: The 'origin' parameter to from_text() and from_file()
  504. is now optional. If not specified, dnspython will use the
  505. first $ORIGIN in the text as the zone's origin.
  506. * dns/zone.py: Sanity checks of the zone's origin node can now
  507. be disabled.
  508. 2005-11-12 Bob Halley <halley@dnspython.org>
  509. * dns/name.py: Preliminary Unicode support has been added for
  510. domain names. Running dns.name.from_text() on a Unicode string
  511. will now encode each label using the IDN ACE encoding. The
  512. to_unicode() method may be used to convert a dns.name.Name with
  513. IDN ACE labels back into a Unicode string. This functionality
  514. requires Python 2.3 or greater.
  515. 2005-10-31 Bob Halley <halley@dnspython.org>
  516. * (Version 1.3.5 released)
  517. 2005-10-12 Bob Halley <halley@dnspython.org>
  518. * dns/zone.py: Zone.iterate_rdatasets() and Zone.iterate_rdatas()
  519. did not have a default rdtype of dns.rdatatype.ANY as their
  520. docstrings said they did. They do now.
  521. 2005-10-06 Bob Halley <halley@dnspython.org>
  522. * dns/name.py: Added the parent() method, which returns the
  523. parent of a name.
  524. 2005-10-01 Bob Halley <halley@dnspython.org>
  525. * dns/resolver.py: Added zone_for_name() helper, which returns
  526. the name of the zone which contains the specified name.
  527. * dns/resolver.py: Added get_default_resolver(), which returns
  528. the default resolver, initializing it if necessary.
  529. 2005-09-29 Bob Halley <halley@dnspython.org>
  530. * dns/resolver.py (Resolver._compute_timeout): If time goes
  531. backwards a little bit, ignore it.
  532. 2005-07-31 Bob Halley <halley@dnspython.org>
  533. * (Version 1.3.4 released)
  534. 2005-07-31 Bob Halley <halley@dnspython.org>
  535. * dns/message.py (make_response): Trying to respond to a response
  536. threw a NameError while trying to throw a FormErr since it used
  537. the wrong name for the FormErr exception.
  538. * dns/query.py (_connect): We needed to ignore EALREADY too.
  539. * dns/query.py: Optional "source" and "source_port" parameters
  540. have been added to udp(), tcp(), and xfr(). Thanks to Ralf
  541. Weber for suggesting the change and providing a patch.
  542. 2005-06-05 Bob Halley <halley@dnspython.org>
  543. * dns/query.py: The requirement that the "where" parameter be
  544. an IPv4 or IPv6 address is now documented.
  545. 2005-06-04 Bob Halley <halley@dnspython.org>
  546. * dns/resolver.py: The resolver now does exponential backoff
  547. each time it runs through all of the nameservers.
  548. * dns/resolver.py: rcodes which indicate a nameserver is likely
  549. to be a "permanent failure" for a query cause the nameserver
  550. to be removed from the mix for that query.
  551. 2005-01-30 Bob Halley <halley@dnspython.org>
  552. * (Version 1.3.3 released)
  553. 2004-10-25 Bob Halley <halley@dnspython.org>
  554. * dns/rdtypes/ANY/TXT.py (TXT.from_text): The masterfile parser
  555. incorrectly rejected TXT records where a value was not quoted.
  556. 2004-10-11 Bob Halley <halley@dnspython.org>
  557. * dns/message.py: Added make_response(), which creates a skeletal
  558. response for the specified query. Added opcode() and set_opcode()
  559. convenience methods to the Message class. Added the request_payload
  560. attribute to the Message class.
  561. 2004-10-10 Bob Halley <halley@dnspython.org>
  562. * dns/zone.py (from_xfr): dns.zone.from_xfr() in relativization
  563. mode incorrectly set zone.origin to the empty name.
  564. 2004-09-02 Bob Halley <halley@dnspython.org>
  565. * dns/name.py (Name.to_wire): The 'file' parameter to
  566. Name.to_wire() is now optional; if omitted, the wire form will
  567. be returned as the value of the function.
  568. 2004-08-14 Bob Halley <halley@dnspython.org>
  569. * dns/message.py (Message.find_rrset): find_rrset() now uses an
  570. index, vastly improving the from_wire() performance of large
  571. messages such as zone transfers.
  572. 2004-08-07 Bob Halley <halley@dnspython.org>
  573. * (Version 1.3.2 released)
  574. 2004-08-04 Bob Halley <halley@dnspython.org>
  575. * dns/query.py: sending queries to a nameserver via IPv6 now
  576. works.
  577. * dns/inet.py (af_for_address): Add af_for_address(), which looks
  578. at a textual-form address and attempts to determine which address
  579. family it is.
  580. * dns/query.py: the default for the 'af' parameter of the udp(),
  581. tcp(), and xfr() functions has been changed from AF_INET to None,
  582. which causes dns.inet.af_for_address() to be used to determine the
  583. address family. If dns.inet.af_for_address() can't figure it out,
  584. we fall back to AF_INET and hope for the best.
  585. 2004-07-31 Bob Halley <halley@dnspython.org>
  586. * dns/rdtypes/ANY/NSEC.py (NSEC.from_text): The NSEC text format
  587. does not allow specifying types by number, so we shouldn't either.
  588. * dns/renderer.py: the renderer module didn't import random,
  589. causing an exception to be raised if a query id wasn't provided
  590. when a Renderer was created.
  591. * dns/resolver.py (Resolver.query): the resolver wasn't catching
  592. dns.exception.Timeout, so a timeout erroneously caused the whole
  593. resolution to fail instead of just going on to the next server.
  594. 2004-06-16 Bob Halley <halley@dnspython.org>
  595. * dns/rdtypes/ANY/LOC.py (LOC.from_text): LOC milliseconds values
  596. were converted incorrectly if the length of the milliseconds
  597. string was less than 3.
  598. 2004-06-06 Bob Halley <halley@dnspython.org>
  599. * (Version 1.3.1 released)
  600. 2004-05-22 Bob Halley <halley@dnspython.org>
  601. * dns/update.py (Update.delete): We erroneously specified a
  602. "deleting" value of dns.rdatatype.NONE instead of
  603. dns.rdataclass.NONE when the thing being deleted was either an
  604. Rdataset instance or an Rdata instance.
  605. * dns/rdtypes/ANY/SSHFP.py: Added support for the proposed SSHFP
  606. RR type.
  607. 2004-05-14 Bob Halley <halley@dnspython.org>
  608. * dns/rdata.py (from_text): The masterfile reader did not
  609. accept the unknown RR syntax when used with a known RR type.
  610. 2004-05-08 Bob Halley <halley@dnspython.org>
  611. * dns/name.py (from_text): dns.name.from_text() did not raise
  612. an exception if a backslash escape ended prematurely.
  613. 2004-04-09 Bob Halley <halley@dnspython.org>
  614. * dns/zone.py (_MasterReader._rr_line): The masterfile reader
  615. erroneously treated lines starting with leading whitespace but
  616. not having any RR definition as an error. It now treats
  617. them like a blank line (which is not an error).
  618. 2004-04-01 Bob Halley <halley@dnspython.org>
  619. * (Version 1.3.0 released)
  620. 2004-03-19 Bob Halley <halley@dnspython.org>
  621. * Added support for new DNSSEC types RRSIG, NSEC, and DNSKEY.
  622. 2004-01-16 Bob Halley <halley@dnspython.org>
  623. * dns/query.py (_connect): Windows returns EWOULDBLOCK instead
  624. of EINPROGRESS when trying to connect a nonblocking socket.
  625. 2003-11-13 Bob Halley <halley@dnspython.org>
  626. * dns/rdtypes/ANY/LOC.py (LOC.to_wire): We encoded and decoded LOC
  627. incorrectly, since we were interpreting the values of altitude,
  628. size, hprec, and vprec in meters instead of centimeters.
  629. * dns/rdtypes/IN/WKS.py (WKS.from_wire): The WKS protocol value is
  630. encoded with just one octet, not two!
  631. 2003-11-09 Bob Halley <halley@dnspython.org>
  632. * dns/resolver.py (Cache.maybe_clean): The cleaner deleted items
  633. from the dictionary while iterating it, causing a RuntimeError
  634. to be raised. Thanks to Mark R. Levinson for the bug report,
  635. regression test, and fix.
  636. 2003-11-07 Bob Halley <halley@dnspython.org>
  637. * (Version 1.2.0 released)
  638. 2003-11-03 Bob Halley <halley@dnspython.org>
  639. * dns/zone.py (_MasterReader.read): The saved_state now includes
  640. the default TTL.
  641. 2003-11-01 Bob Halley <halley@dnspython.org>
  642. * dns/tokenizer.py (Tokenizer.get): The tokenizer didn't
  643. handle escaped delimiters.
  644. 2003-10-27 Bob Halley <halley@dnspython.org>
  645. * dns/resolver.py (Resolver.read_resolv_conf): If no nameservers
  646. are configured in /etc/resolv.conf, the default nameserver
  647. list should be ['127.0.0.1'].
  648. 2003-09-08 Bob Halley <halley@dnspython.org>
  649. * dns/resolver.py (Resolver._config_win32_fromkey): We didn't
  650. catch WindowsError, which can happen if a key is not defined
  651. in the registry.
  652. 2003-09-06 Bob Halley <halley@dnspython.org>
  653. * (Version 1.2.0b1 released)
  654. 2003-09-05 Bob Halley <halley@dnspython.org>
  655. * dns/query.py: Timeout support has been overhauled to provide
  656. timeouts under Python 2.2 as well as 2.3, and to provide more
  657. accurate expiration.
  658. 2003-08-30 Bob Halley <halley@dnspython.org>
  659. * dns/zone.py: dns.exception.SyntaxError is raised for unknown
  660. master file directives.
  661. 2003-08-28 Bob Halley <halley@dnspython.org>
  662. * dns/zone.py: $INCLUDE processing is now enabled/disabled using
  663. the allow_include parameter. The default is to process $INCLUDE
  664. for from_file(), and to disallow $INCLUDE for from_text(). The
  665. master reader now calls zone.check_origin_node() by default after
  666. the zone has been read. find_rdataset() called get_node() instead
  667. of find_node(), which result in an incorrect exception. The
  668. relativization state of a zone is now remembered and applied
  669. consistently when looking up names. from_xfr() now supports
  670. relativization like the _MasterReader.
  671. 2003-08-22 Bob Halley <halley@dnspython.org>
  672. * dns/zone.py: The _MasterReader now understands $INCLUDE.
  673. 2003-08-12 Bob Halley <halley@dnspython.org>
  674. * dns/zone.py: The _MasterReader now specifies the file and line
  675. number when a syntax error occurs. The BIND 8 TTL format is now
  676. understood when loading a zone, though it will never be emitted.
  677. The from_file() function didn't pass the zone_factory parameter
  678. to from_text().
  679. 2003-08-10 Bob Halley <halley@dnspython.org>
  680. * (Version 1.1.0 released)
  681. 2003-08-07 Bob Halley <halley@dnspython.org>
  682. * dns/update.py (Update._add): A typo meant that _add would
  683. fail if the thing being added was an Rdata object (as
  684. opposed to an Rdataset or the textual form of an Rdata).
  685. 2003-08-05 Bob Halley <halley@dnspython.org>
  686. * dns/set.py: the simple Set class has been moved to its
  687. own module, and augmented to support more set operations.
  688. 2003-08-04 Bob Halley <halley@dnspython.org>
  689. * Node and all rdata types have been "slotted". This speeds
  690. things up a little and reduces memory usage noticeably.
  691. 2003-08-02 Bob Halley <halley@dnspython.org>
  692. * (Version 1.1.0c1 released)
  693. 2003-08-02 Bob Halley <halley@dnspython.org>
  694. * dns/rdataset.py: SimpleSets now support more set options.
  695. * dns/message.py: Added the get_rrset() method. from_file() now
  696. allows Unicode filenames and turns on universal newline support if
  697. it opens the file itself.
  698. * dns/node.py: Added the delete_rdataset() and replace_rdataset()
  699. methods.
  700. * dns/zone.py: Added the delete_node(), delete_rdataset(), and
  701. replace_rdataset() methods. from_file() now allows Unicode
  702. filenames and turns on universal newline support if it opens the
  703. file itself. Added a to_file() method.
  704. 2003-08-01 Bob Halley <halley@dnspython.org>
  705. * dns/opcode.py: Opcode from/to text converters now understand
  706. numeric opcodes. The to_text() method will return a numeric opcode
  707. string if it doesn't know a text name for the opcode.
  708. * dns/message.py: Added set_rcode(). Fixed code where ednsflags
  709. wasn't treated as a long.
  710. * dns/rcode.py: ednsflags wasn't treated as a long. Rcode from/to
  711. text converters now understand numeric rcodes. The to_text()
  712. method will return a numeric rcode string if it doesn't know
  713. a text name for the rcode.
  714. * examples/reverse.py: Added a new example program that builds a
  715. reverse (address-to-name) mapping table from the name-to-address
  716. mapping specified by A RRs in zone files.
  717. * dns/node.py: Added get_rdataset() method.
  718. * dns/zone.py: Added get_rdataset() and get_rrset() methods. Added
  719. iterate_rdatas().
  720. 2003-07-31 Bob Halley <halley@dnspython.org>
  721. * dns/zone.py: Added the iterate_rdatasets() method which returns
  722. a generator which yields (name, rdataset) tuples for all the
  723. rdatasets in the zone matching the specified rdatatype.
  724. 2003-07-30 Bob Halley <halley@dnspython.org>
  725. * (Version 1.1.0b2 released)
  726. 2003-07-30 Bob Halley <halley@dnspython.org>
  727. * dns/zone.py: Added find_rrset() and find_rdataset() convenience
  728. methods. They let you retrieve rdata with the specified name
  729. and type in one call.
  730. * dns/node.py: Nodes no longer have names; owner names are
  731. associated with nodes in the Zone object's nodes dictionary.
  732. * dns/zone.py: Zone objects now implement more of the standard
  733. mapping interface. __iter__ has been changed to iterate the keys
  734. rather than values to match the standard mapping interface's
  735. behavior.
  736. 2003-07-20 Bob Halley <halley@dnspython.org>
  737. * dns/ipv6.py (inet_ntoa): Handle embedded IPv4 addresses.
  738. 2003-07-19 Bob Halley <halley@dnspython.org>
  739. * (Version 1.1.0b1 released)
  740. 2003-07-18 Bob Halley <halley@dnspython.org>
  741. * dns/tsig.py: The TSIG validation of TCP streams where not
  742. every message is signed now works correctly.
  743. * dns/zone.py: Zones can now be compared for equality and
  744. inequality. If the other object in the comparison is also
  745. a zone, then "the right thing" happens; i.e. the zones are
  746. equal iff.: they have the same rdclass, origin, and nodes.
  747. 2003-07-17 Bob Halley <halley@dnspython.org>
  748. * dns/message.py (Message.use_tsig): The method now allows for
  749. greater control over the various fields in the generated signature
  750. (e.g. fudge).
  751. (_WireReader._get_section): UnknownTSIGKey is now raised if an
  752. unknown key is encountered, or if a signed message has no keyring.
  753. 2003-07-16 Bob Halley <halley@dnspython.org>
  754. * dns/tokenizer.py (Tokenizer._get_char): get_char and unget_char
  755. have been renamed to _get_char and _unget_char since they are not
  756. useful to clients of the tokenizer.
  757. 2003-07-15 Bob Halley <halley@dnspython.org>
  758. * dns/zone.py (_MasterReader._rr_line): owner names were being
  759. unconditionally relativized; it makes much more sense for them
  760. to be relativized according to the relativization setting of
  761. the reader.
  762. 2003-07-12 Bob Halley <halley@dnspython.org>
  763. * dns/resolver.py (Resolver.read_resolv_conf): The resolv.conf
  764. parser did not allow blank / whitespace-only lines, nor did it
  765. allow comments. Both are now supported.
  766. 2003-07-11 Bob Halley <halley@dnspython.org>
  767. * dns/name.py (Name.to_digestable): to_digestable() now
  768. requires an origin to be specified if the name is relative.
  769. It will raise NeedAbsoluteNameOrOrigin if the name is
  770. relative and there is either no origin or the origin is
  771. itself relative.
  772. (Name.split): returned the wrong answer if depth was 0 or depth
  773. was the length of the name. split() now does bounds checking
  774. on depth, and raises ValueError if depth < 0 or depth > the length
  775. of the name.
  776. 2003-07-10 Bob Halley <halley@dnspython.org>
  777. * dns/ipv6.py (inet_ntoa): The routine now minimizes its output
  778. strings. E.g. the IPv6 address
  779. "0000:0000:0000:0000:0000:0000:0000:0001" is minimized to "::1".
  780. We do not, however, make any effort to display embedded IPv4
  781. addresses in the dot-quad notation.
  782. 2003-07-09 Bob Halley <halley@dnspython.org>
  783. * dns/inet.py: We now supply our own AF_INET and AF_INET6
  784. constants since AF_INET6 may not always be available. If the
  785. socket module has AF_INET6, we will use it. If not, we will
  786. use our own value for the constant.
  787. * dns/query.py: the functions now take an optional af argument
  788. specifying the address family to use when creating the socket.
  789. * dns/rdatatype.py (is_metatype): a typo caused the function
  790. return true only for type OPT.
  791. * dns/message.py: message section list elements are now RRsets
  792. instead of Nodes. This API change makes processing messages
  793. easier for many applications.
  794. 2003-07-07 Bob Halley <halley@dnspython.org>
  795. * dns/rrset.py: added. An RRset is a named rdataset.
  796. * dns/rdataset.py (Rdataset.__eq__): rdatasets may now be compared
  797. for equality and inequality with other objects. Rdataset instance
  798. variables are now slotted.
  799. * dns/message.py: The wire format and text format readers are now
  800. classes. Variables related to reader state have been moved out
  801. of the message class.
  802. 2003-07-06 Bob Halley <halley@dnspython.org>
  803. * dns/name.py (from_text): '@' was not interpreted as the empty
  804. name.
  805. * dns/zone.py: the master file reader derelativized names in rdata
  806. relative to the zone's origin, not relative to the current origin.
  807. The reader now deals with relativization in two steps. The rdata
  808. is read and derelativized using the current origin. The rdata's
  809. relativity is then chosen using the zone origin and the relativize
  810. boolean. Here's an example.
  811. $ORIGIN foo.example.
  812. $TTL 300
  813. bar MX 0 blaz
  814. If the zone origin is example., and relativization is on, then
  815. This fragment will become:
  816. bar.foo.example. 300 IN MX 0 blaz.foo.example.
  817. after the first step (derelativization to current origin), and
  818. bar.foo 300 IN MX 0 blaz.foo
  819. after the second step (relativization to zone origin).
  820. * dns/namedict.py: added.
  821. * dns/zone.py: The master file reader has been made into its
  822. own class. Reader-related instance variables have been moved
  823. form the zone class into the reader class.
  824. * dns/zone.py: Add node_factory class attribute. An application
  825. can now subclass Zone and Node and have a zone whose nodes are of
  826. the subclassed Node type. The from_text(), from_file(), and
  827. from_xfr() algorithms now take an optional zone_factory argument.
  828. This allows the algorithms to be used to create zones whose class
  829. is a subclass of Zone.
  830. 2003-07-04 Bob Halley <halley@dnspython.org>
  831. * dns/renderer.py: added new wire format rendering module and
  832. converted message.py to use it. Applications which want
  833. fine-grained control over the conversion to wire format may call
  834. the renderer directly, instead of having it called on their behalf
  835. by the message code.
  836. 2003-07-02 Bob Halley <halley@dnspython.org>
  837. * dns/name.py (_validate_labels): The NameTooLong test was
  838. incorrect.
  839. * dns/message.py (Message.to_wire): dns.exception.TooBig is
  840. now raised if the wire encoding exceeds the specified
  841. maximum size.
  842. 2003-07-01 Bob Halley <halley@dnspython.org>
  843. * dns/message.py: EDNS encoding was broken. from_text()
  844. didn't parse rcodes, flags, or eflags correctly. Comparing
  845. messages with other types of objects didn't work.
  846. 2003-06-30 Bob Halley <halley@dnspython.org>
  847. * (Version 1.0.0 released)
  848. 2003-06-30 Bob Halley <halley@dnspython.org>
  849. * dns/rdata.py: Rdatas now implement rich comparisons instead of
  850. __cmp__.
  851. * dns/name.py: Names now implement rich comparisons instead of
  852. __cmp__.
  853. * dns/inet.py (inet_ntop): Always use our code, since the code
  854. in the socket module doesn't support AF_INET6 conversions if
  855. IPv6 sockets are not available on the system.
  856. * dns/resolver.py (Answer.__init__): A dangling CNAME chain was
  857. not raising NoAnswer.
  858. * Added a simple resolver Cache class.
  859. * Added an expiration attribute to answer instances.
  860. 2003-06-24 Bob Halley <halley@dnspython.org>
  861. * (Version 1.0.0b3 released)
  862. 2003-06-24 Bob Halley <halley@dnspython.org>
  863. * Renamed module "DNS" to "dns" to avoid conflicting with
  864. PyDNS.
  865. 2003-06-23 Bob Halley <halley@dnspython.org>
  866. * The from_text() relativization controls now work the same way as
  867. the to_text() controls.
  868. * DNS/rdata.py: The parsing of generic rdata was broken.
  869. 2003-06-21 Bob Halley <halley@dnspython.org>
  870. * (Version 1.0.0b2 released)
  871. 2003-06-21 Bob Halley <halley@dnspython.org>
  872. * The Python 2.2 socket.inet_aton() doesn't seem to like
  873. '255.255.255.255'. We work around this.
  874. * Fixed bugs in rdata to_wire() and from_wire() routines of a few
  875. types. These bugs were discovered by running the tests/zone.py
  876. Torture1 test.
  877. * Added implementation of type APL.
  878. 2003-06-20 Bob Halley <halley@dnspython.org>
  879. * DNS/rdtypes/IN/AAAA.py: Use our own versions of inet_ntop and
  880. inet_pton if the socket module doesn't provide them for us.
  881. * The resolver now does a better job handling exceptions. In
  882. particular, it no longer eats all exceptions; rather it handles
  883. those exceptions it understands, and leaves the rest uncaught.
  884. * Exceptions have been pulled into their own module. Almost all
  885. exceptions raised by the code are now subclasses of
  886. DNS.exception.DNSException. All form errors are subclasses of
  887. DNS.exception.FormError (which is itself a subclass of
  888. DNS.exception.DNSException).
  889. 2003-06-19 Bob Halley <halley@dnspython.org>
  890. * Added implementations of types DS, NXT, SIG, and WKS.
  891. * __cmp__ for type A and AAAA could produce incorrect results.
  892. 2003-06-18 Bob Halley <halley@dnspython.org>
  893. * Started test suites for zone.py and tokenizer.py.
  894. * Added implementation of type KEY.
  895. * DNS/rdata.py(_base64ify): \n could be emitted erroneously.
  896. * DNS/rdtypes/ANY/SOA.py (SOA.from_text): The SOA RNAME field could
  897. be set to the value of MNAME in common cases.
  898. * DNS/rdtypes/ANY/X25.py: __init__ was broken.
  899. * DNS/zone.py (from_text): $TTL handling erroneously caused the
  900. next line to be eaten.
  901. * DNS/tokenizer.py (Tokenizer.get): parsing was broken for empty
  902. quoted strings. Quoted strings didn't handle \ddd escapes. Such
  903. escapes are appear not to comply with RFC 1035, but BIND allows
  904. them and they seem useful, so we allow them too.
  905. * DNS/rdtypes/ANY/ISDN.py (ISDN.from_text): parsing was
  906. broken for ISDN RRs without subaddresses.
  907. * DNS/zone.py (from_file): from_file() didn't work because
  908. some required parameters were not passed to from_text().
  909. 2003-06-17 Bob Halley <halley@dnspython.org>
  910. * (Version 1.0.0b1 released)
  911. 2003-06-17 Bob Halley <halley@dnspython.org>
  912. * Added implementation of type PX.
  913. 2003-06-16 Bob Halley <halley@dnspython.org>
  914. * Added implementation of types CERT, GPOS, LOC, NSAP, NSAP-PTR.
  915. * DNS/rdatatype.py (_by_value): A cut-and-paste error had broken
  916. NSAP and NSAP-PTR.
  917. 2003-06-12 Bob Halley <halley@dnspython.org>
  918. * Created a tests directory and started adding tests.
  919. * Added "and its documentation" to the permission grant in the
  920. license.
  921. 2003-06-12 Bob Halley <halley@dnspython.org>
  922. * DNS/name.py (Name.is_wild): is_wild() erroneously raised IndexError
  923. if the name was empty.
  924. 2003-06-10 Bob Halley <halley@dnspython.org>
  925. * Added implementations of types AFSDB, X25, and ISDN.
  926. * The documentation associated with the various rdata types has been
  927. improved. In particular, instance variables are now described.
  928. 2003-06-09 Bob Halley <halley@dnspython.org>
  929. * Added implementations of types HINFO, RP, and RT.
  930. * DNS/message.py (make_query): Document that make_query() sets
  931. flags to DNS.flags.RD, and chooses a random query id.
  932. 2003-06-05 Bob Halley <halley@dnspython.org>
  933. * (Version 1.0.0a2 released)
  934. 2003-06-05 Bob Halley <halley@dnspython.org>
  935. * DNS/node.py: removed __getitem__ and __setitem__, since
  936. they are not used by the codebase and were not useful in
  937. general either.
  938. * DNS/message.py (from_file): from_file() now allows a
  939. filename to be specified instead of a file object.
  940. * DNS/rdataset.py: The is_compatible() method of the
  941. DNS.rdataset.Rdataset class was deleted.
  942. 2003-06-04 Bob Halley <halley@dnspython.org>
  943. * DNS/name.py (class Name): Names are now immutable.
  944. * DNS/name.py: the is_comparable() method has been removed, since
  945. names are always comparable.
  946. * DNS/resolver.py (Resolver.query): A query could run for up
  947. to the lifetime + the timeout. This has been corrected and the
  948. query will now only run up to the lifetime.
  949. 2003-06-03 Bob Halley <halley@dnspython.org>
  950. * DNS/resolver.py: removed the 'new' function since it is not the
  951. style of the library to have such a function. Call
  952. DNS.resolver.Resolver() to make a new resolver.
  953. 2003-06-03 Bob Halley <halley@dnspython.org>
  954. * DNS/resolver.py (Resolver._config_win32_fromkey): The DhcpServer
  955. list is space separated, not comma separated.
  956. 2003-06-03 Bob Halley <halley@dnspython.org>
  957. * DNS/update.py: Added an update module to make generating updates
  958. easier.
  959. 2003-06-03 Bob Halley <halley@dnspython.org>
  960. * Commas were missing in some of the __all__ entries in various
  961. __init__.py files.
  962. 2003-05-30 Bob Halley <halley@dnspython.org>
  963. * (Version 1.0.0a1 released)