dnsruby 1.26 → 1.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/DNSSEC +19 -0
- data/EVENTMACHINE +1 -64
- data/EXAMPLES +124 -0
- data/README +2 -6
- data/demo/axfr.rb +2 -2
- data/demo/check_soa.rb +1 -1
- data/demo/check_zone.rb +2 -2
- data/demo/digdlv.rb +65 -0
- data/demo/digitar.rb +62 -0
- data/demo/mresolv.rb +1 -1
- data/demo/mx.rb +1 -1
- data/demo/rubydig.rb +8 -1
- data/demo/trace_dns.rb +28 -14
- data/html/created.rid +1 -0
- data/{doc → html}/fr_class_index.html +118 -172
- data/{doc → html}/fr_file_index.html +81 -130
- data/html/fr_method_index.html +371 -0
- data/{doc → html}/index.html +23 -23
- data/lib/Dnsruby/Cache.rb +129 -22
- data/lib/Dnsruby/Config.rb +72 -11
- data/lib/Dnsruby/DNS.rb +3 -0
- data/lib/Dnsruby/PacketSender.rb +565 -0
- data/lib/Dnsruby/Recursor.rb +337 -156
- data/lib/Dnsruby/Resolver.rb +508 -447
- data/lib/Dnsruby/SingleResolver.rb +151 -629
- data/lib/Dnsruby/code_mapper.rb +4 -2
- data/lib/Dnsruby/dnssec.rb +212 -518
- data/lib/Dnsruby/event_machine_interface.rb +266 -265
- data/lib/Dnsruby/iana_ports.rb +5206 -5196
- data/lib/Dnsruby/key_cache.rb +85 -0
- data/lib/Dnsruby/message.rb +207 -72
- data/lib/Dnsruby/name.rb +42 -4
- data/lib/Dnsruby/resource/CERT.rb +1 -1
- data/lib/Dnsruby/resource/DNSKEY.rb +66 -25
- data/lib/Dnsruby/resource/DS.rb +7 -2
- data/lib/Dnsruby/resource/NAPTR.rb +2 -2
- data/lib/Dnsruby/resource/NSEC.rb +31 -2
- data/lib/Dnsruby/resource/NSEC3.rb +86 -8
- data/lib/Dnsruby/resource/OPT.rb +9 -6
- data/lib/Dnsruby/resource/PX.rb +1 -1
- data/lib/Dnsruby/resource/RT.rb +1 -1
- data/lib/Dnsruby/resource/SRV.rb +3 -3
- data/lib/Dnsruby/resource/resource.rb +30 -36
- data/lib/Dnsruby/select_thread.rb +160 -23
- data/lib/Dnsruby/single_verifier.rb +1289 -0
- data/lib/Dnsruby/validator_thread.rb +108 -0
- data/lib/Dnsruby/zone_transfer.rb +5 -2
- data/lib/dnsruby.rb +33 -18
- data/test/tc_cache.rb +88 -0
- data/test/tc_dlv.rb +55 -0
- data/test/tc_dns.rb +3 -1
- data/test/tc_dnskey.rb +21 -5
- data/test/tc_ds.rb +1 -7
- data/test/tc_itar.rb +76 -0
- data/test/tc_name.rb +21 -0
- data/test/tc_nsec.rb +169 -0
- data/test/tc_nsec3.rb +18 -1
- data/test/tc_packet.rb +97 -6
- data/test/tc_queue.rb +7 -5
- data/test/tc_recur.rb +6 -1
- data/test/tc_res_config.rb +1 -3
- data/test/tc_res_opt.rb +1 -5
- data/test/tc_resolver.rb +27 -8
- data/test/tc_rr-opt.rb +1 -0
- data/test/tc_rr.rb +6 -0
- data/test/tc_rrset.rb +60 -0
- data/test/tc_single_resolver.rb +55 -2
- data/test/tc_tsig.rb +29 -13
- data/test/tc_update.rb +6 -0
- data/test/tc_validator.rb +56 -0
- data/test/{tc_dnssec.rb → tc_verifier.rb} +106 -92
- data/test/ts_online.rb +19 -16
- metadata +27 -1053
- data/doc/classes/Cache.html +0 -179
- data/doc/classes/Cache.src/M000212.html +0 -19
- data/doc/classes/Cache.src/M000213.html +0 -18
- data/doc/classes/Cache.src/M000214.html +0 -23
- data/doc/classes/ConfigTable.html +0 -500
- data/doc/classes/ConfigTable.src/M000019.html +0 -25
- data/doc/classes/ConfigTable.src/M000020.html +0 -18
- data/doc/classes/ConfigTable.src/M000021.html +0 -18
- data/doc/classes/ConfigTable.src/M000022.html +0 -18
- data/doc/classes/ConfigTable.src/M000023.html +0 -18
- data/doc/classes/ConfigTable.src/M000024.html +0 -18
- data/doc/classes/ConfigTable.src/M000025.html +0 -18
- data/doc/classes/ConfigTable.src/M000026.html +0 -18
- data/doc/classes/ConfigTable.src/M000027.html +0 -18
- data/doc/classes/ConfigTable.src/M000028.html +0 -19
- data/doc/classes/ConfigTable.src/M000029.html +0 -21
- data/doc/classes/ConfigTable.src/M000030.html +0 -20
- data/doc/classes/ConfigTable.src/M000031.html +0 -18
- data/doc/classes/ConfigTable.src/M000032.html +0 -25
- data/doc/classes/ConfigTable.src/M000033.html +0 -23
- data/doc/classes/ConfigTable.src/M000034.html +0 -20
- data/doc/classes/ConfigTable.src/M000035.html +0 -20
- data/doc/classes/ConfigTable.src/M000036.html +0 -23
- data/doc/classes/ConfigTable.src/M000037.html +0 -19
- data/doc/classes/ConfigTable.src/M000038.html +0 -18
- data/doc/classes/ConfigTable.src/M000039.html +0 -18
- data/doc/classes/ConfigTable/BoolItem.html +0 -154
- data/doc/classes/ConfigTable/BoolItem.src/M000040.html +0 -18
- data/doc/classes/ConfigTable/BoolItem.src/M000041.html +0 -18
- data/doc/classes/ConfigTable/ExecItem.html +0 -201
- data/doc/classes/ConfigTable/ExecItem.src/M000059.html +0 -20
- data/doc/classes/ConfigTable/ExecItem.src/M000060.html +0 -18
- data/doc/classes/ConfigTable/ExecItem.src/M000061.html +0 -18
- data/doc/classes/ConfigTable/ExecItem.src/M000062.html +0 -18
- data/doc/classes/ConfigTable/ExecItem.src/M000063.html +0 -22
- data/doc/classes/ConfigTable/Item.html +0 -250
- data/doc/classes/ConfigTable/Item.src/M000066.html +0 -22
- data/doc/classes/ConfigTable/Item.src/M000067.html +0 -18
- data/doc/classes/ConfigTable/Item.src/M000068.html +0 -18
- data/doc/classes/ConfigTable/Item.src/M000069.html +0 -18
- data/doc/classes/ConfigTable/Item.src/M000070.html +0 -18
- data/doc/classes/ConfigTable/Item.src/M000071.html +0 -18
- data/doc/classes/ConfigTable/MetaConfigEnvironment.html +0 -325
- data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000046.html +0 -19
- data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000047.html +0 -18
- data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000048.html +0 -18
- data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000049.html +0 -18
- data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000050.html +0 -18
- data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000051.html +0 -18
- data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000052.html +0 -18
- data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000053.html +0 -18
- data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000054.html +0 -18
- data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000055.html +0 -18
- data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000056.html +0 -18
- data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000057.html +0 -19
- data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000058.html +0 -19
- data/doc/classes/ConfigTable/PackageSelectionItem.html +0 -169
- data/doc/classes/ConfigTable/PackageSelectionItem.src/M000044.html +0 -19
- data/doc/classes/ConfigTable/PackageSelectionItem.src/M000045.html +0 -18
- data/doc/classes/ConfigTable/PathItem.html +0 -139
- data/doc/classes/ConfigTable/PathItem.src/M000043.html +0 -18
- data/doc/classes/ConfigTable/ProgramItem.html +0 -139
- data/doc/classes/ConfigTable/ProgramItem.src/M000042.html +0 -18
- data/doc/classes/ConfigTable/SelectItem.html +0 -156
- data/doc/classes/ConfigTable/SelectItem.src/M000064.html +0 -19
- data/doc/classes/ConfigTable/SelectItem.src/M000065.html +0 -18
- data/doc/classes/DnskeyTest.html +0 -180
- data/doc/classes/DnskeyTest.src/M000016.html +0 -26
- data/doc/classes/DnskeyTest.src/M000017.html +0 -24
- data/doc/classes/DnskeyTest.src/M000018.html +0 -33
- data/doc/classes/Dnsruby.html +0 -504
- data/doc/classes/Dnsruby.src/M000351.html +0 -18
- data/doc/classes/Dnsruby/Algorithms.html +0 -173
- data/doc/classes/Dnsruby/Classes.html +0 -197
- data/doc/classes/Dnsruby/Classes.src/M000573.html +0 -23
- data/doc/classes/Dnsruby/Classes.src/M000574.html +0 -19
- data/doc/classes/Dnsruby/CodeMapper.html +0 -375
- data/doc/classes/Dnsruby/CodeMapper.src/M000550.html +0 -18
- data/doc/classes/Dnsruby/CodeMapper.src/M000551.html +0 -33
- data/doc/classes/Dnsruby/CodeMapper.src/M000552.html +0 -21
- data/doc/classes/Dnsruby/CodeMapper.src/M000553.html +0 -19
- data/doc/classes/Dnsruby/CodeMapper.src/M000554.html +0 -19
- data/doc/classes/Dnsruby/CodeMapper.src/M000555.html +0 -18
- data/doc/classes/Dnsruby/CodeMapper.src/M000556.html +0 -22
- data/doc/classes/Dnsruby/CodeMapper.src/M000557.html +0 -22
- data/doc/classes/Dnsruby/CodeMapper.src/M000558.html +0 -22
- data/doc/classes/Dnsruby/CodeMapper.src/M000559.html +0 -31
- data/doc/classes/Dnsruby/CodeMapper.src/M000560.html +0 -19
- data/doc/classes/Dnsruby/Config.html +0 -413
- data/doc/classes/Dnsruby/Config.src/M000505.html +0 -18
- data/doc/classes/Dnsruby/Config.src/M000506.html +0 -19
- data/doc/classes/Dnsruby/Config.src/M000507.html +0 -19
- data/doc/classes/Dnsruby/Config.src/M000508.html +0 -25
- data/doc/classes/Dnsruby/Config.src/M000509.html +0 -21
- data/doc/classes/Dnsruby/Config.src/M000510.html +0 -38
- data/doc/classes/Dnsruby/Config.src/M000511.html +0 -26
- data/doc/classes/Dnsruby/Config.src/M000512.html +0 -22
- data/doc/classes/Dnsruby/Config.src/M000513.html +0 -27
- data/doc/classes/Dnsruby/Config.src/M000514.html +0 -22
- data/doc/classes/Dnsruby/Config.src/M000515.html +0 -21
- data/doc/classes/Dnsruby/DNS.html +0 -571
- data/doc/classes/Dnsruby/DNS.src/M000645.html +0 -24
- data/doc/classes/Dnsruby/DNS.src/M000646.html +0 -18
- data/doc/classes/Dnsruby/DNS.src/M000647.html +0 -18
- data/doc/classes/Dnsruby/DNS.src/M000648.html +0 -20
- data/doc/classes/Dnsruby/DNS.src/M000649.html +0 -19
- data/doc/classes/Dnsruby/DNS.src/M000650.html +0 -20
- data/doc/classes/Dnsruby/DNS.src/M000651.html +0 -18
- data/doc/classes/Dnsruby/DNS.src/M000652.html +0 -19
- data/doc/classes/Dnsruby/DNS.src/M000653.html +0 -20
- data/doc/classes/Dnsruby/DNS.src/M000654.html +0 -30
- data/doc/classes/Dnsruby/DNS.src/M000655.html +0 -19
- data/doc/classes/Dnsruby/DNS.src/M000656.html +0 -20
- data/doc/classes/Dnsruby/DNS.src/M000657.html +0 -31
- data/doc/classes/Dnsruby/DecodeError.html +0 -120
- data/doc/classes/Dnsruby/Dnssec.html +0 -536
- data/doc/classes/Dnsruby/Dnssec.src/M000615.html +0 -21
- data/doc/classes/Dnsruby/Dnssec.src/M000616.html +0 -18
- data/doc/classes/Dnsruby/Dnssec.src/M000617.html +0 -18
- data/doc/classes/Dnsruby/Dnssec.src/M000618.html +0 -19
- data/doc/classes/Dnsruby/Dnssec.src/M000619.html +0 -18
- data/doc/classes/Dnsruby/Dnssec.src/M000620.html +0 -18
- data/doc/classes/Dnsruby/Dnssec.src/M000621.html +0 -18
- data/doc/classes/Dnsruby/Dnssec.src/M000622.html +0 -18
- data/doc/classes/Dnsruby/Dnssec.src/M000623.html +0 -19
- data/doc/classes/Dnsruby/Dnssec.src/M000624.html +0 -18
- data/doc/classes/Dnsruby/Dnssec.src/M000625.html +0 -20
- data/doc/classes/Dnsruby/Dnssec.src/M000626.html +0 -46
- data/doc/classes/Dnsruby/Dnssec.src/M000627.html +0 -23
- data/doc/classes/Dnsruby/Dnssec.src/M000628.html +0 -22
- data/doc/classes/Dnsruby/Dnssec.src/M000629.html +0 -19
- data/doc/classes/Dnsruby/Dnssec.src/M000630.html +0 -116
- data/doc/classes/Dnsruby/Dnssec.src/M000631.html +0 -33
- data/doc/classes/Dnsruby/Dnssec.src/M000632.html +0 -28
- data/doc/classes/Dnsruby/Dnssec.src/M000633.html +0 -92
- data/doc/classes/Dnsruby/Dnssec/ValidationPolicy.html +0 -167
- data/doc/classes/Dnsruby/EncodeError.html +0 -120
- data/doc/classes/Dnsruby/FormErr.html +0 -119
- data/doc/classes/Dnsruby/Header.html +0 -531
- data/doc/classes/Dnsruby/Header.src/M000595.html +0 -18
- data/doc/classes/Dnsruby/Header.src/M000596.html +0 -35
- data/doc/classes/Dnsruby/Header.src/M000597.html +0 -18
- data/doc/classes/Dnsruby/Header.src/M000598.html +0 -18
- data/doc/classes/Dnsruby/Header.src/M000599.html +0 -21
- data/doc/classes/Dnsruby/Header.src/M000600.html +0 -20
- data/doc/classes/Dnsruby/Header.src/M000601.html +0 -32
- data/doc/classes/Dnsruby/Header.src/M000602.html +0 -27
- data/doc/classes/Dnsruby/Header.src/M000603.html +0 -26
- data/doc/classes/Dnsruby/Header.src/M000604.html +0 -18
- data/doc/classes/Dnsruby/Header.src/M000605.html +0 -47
- data/doc/classes/Dnsruby/Header.src/M000606.html +0 -28
- data/doc/classes/Dnsruby/Header.src/M000607.html +0 -30
- data/doc/classes/Dnsruby/Hosts.html +0 -316
- data/doc/classes/Dnsruby/Hosts.src/M000561.html +0 -20
- data/doc/classes/Dnsruby/Hosts.src/M000562.html +0 -19
- data/doc/classes/Dnsruby/Hosts.src/M000563.html +0 -20
- data/doc/classes/Dnsruby/Hosts.src/M000564.html +0 -21
- data/doc/classes/Dnsruby/Hosts.src/M000565.html +0 -19
- data/doc/classes/Dnsruby/Hosts.src/M000566.html +0 -20
- data/doc/classes/Dnsruby/Hosts.src/M000567.html +0 -21
- data/doc/classes/Dnsruby/IPv4.html +0 -233
- data/doc/classes/Dnsruby/IPv4.src/M000568.html +0 -32
- data/doc/classes/Dnsruby/IPv4.src/M000569.html +0 -19
- data/doc/classes/Dnsruby/IPv4.src/M000570.html +0 -18
- data/doc/classes/Dnsruby/IPv4.src/M000571.html +0 -18
- data/doc/classes/Dnsruby/IPv4.src/M000572.html +0 -18
- data/doc/classes/Dnsruby/IPv6.html +0 -281
- data/doc/classes/Dnsruby/IPv6.src/M000608.html +0 -60
- data/doc/classes/Dnsruby/IPv6.src/M000609.html +0 -22
- data/doc/classes/Dnsruby/IPv6.src/M000610.html +0 -20
- data/doc/classes/Dnsruby/IPv6.src/M000611.html +0 -18
- data/doc/classes/Dnsruby/Message.html +0 -861
- data/doc/classes/Dnsruby/Message.src/M000473.html +0 -39
- data/doc/classes/Dnsruby/Message.src/M000474.html +0 -26
- data/doc/classes/Dnsruby/Message.src/M000475.html +0 -23
- data/doc/classes/Dnsruby/Message.src/M000476.html +0 -22
- data/doc/classes/Dnsruby/Message.src/M000477.html +0 -22
- data/doc/classes/Dnsruby/Message.src/M000478.html +0 -20
- data/doc/classes/Dnsruby/Message.src/M000479.html +0 -20
- data/doc/classes/Dnsruby/Message.src/M000480.html +0 -20
- data/doc/classes/Dnsruby/Message.src/M000481.html +0 -20
- data/doc/classes/Dnsruby/Message.src/M000482.html +0 -18
- data/doc/classes/Dnsruby/Message.src/M000483.html +0 -20
- data/doc/classes/Dnsruby/Message.src/M000484.html +0 -23
- data/doc/classes/Dnsruby/Message.src/M000485.html +0 -30
- data/doc/classes/Dnsruby/Message.src/M000486.html +0 -20
- data/doc/classes/Dnsruby/Message.src/M000487.html +0 -18
- data/doc/classes/Dnsruby/Message.src/M000488.html +0 -23
- data/doc/classes/Dnsruby/Message.src/M000489.html +0 -24
- data/doc/classes/Dnsruby/Message.src/M000490.html +0 -73
- data/doc/classes/Dnsruby/Message.src/M000491.html +0 -35
- data/doc/classes/Dnsruby/Message.src/M000492.html +0 -46
- data/doc/classes/Dnsruby/Message/Section.html +0 -160
- data/doc/classes/Dnsruby/Message/Section.src/M000498.html +0 -29
- data/doc/classes/Dnsruby/Message/Section.src/M000499.html +0 -30
- data/doc/classes/Dnsruby/MetaTypes.html +0 -136
- data/doc/classes/Dnsruby/Modes.html +0 -171
- data/doc/classes/Dnsruby/NXDomain.html +0 -119
- data/doc/classes/Dnsruby/Name.html +0 -330
- data/doc/classes/Dnsruby/Name.src/M000458.html +0 -35
- data/doc/classes/Dnsruby/Name.src/M000459.html +0 -20
- data/doc/classes/Dnsruby/Name.src/M000460.html +0 -18
- data/doc/classes/Dnsruby/Name.src/M000461.html +0 -21
- data/doc/classes/Dnsruby/Name.src/M000462.html +0 -22
- data/doc/classes/Dnsruby/Name.src/M000463.html +0 -18
- data/doc/classes/Dnsruby/Name/Label.html +0 -300
- data/doc/classes/Dnsruby/Name/Label.src/M000464.html +0 -21
- data/doc/classes/Dnsruby/Name/Label.src/M000465.html +0 -18
- data/doc/classes/Dnsruby/Name/Label.src/M000466.html +0 -22
- data/doc/classes/Dnsruby/Name/Label.src/M000467.html +0 -18
- data/doc/classes/Dnsruby/Name/Label.src/M000468.html +0 -18
- data/doc/classes/Dnsruby/Name/Label.src/M000469.html +0 -18
- data/doc/classes/Dnsruby/Name/Label.src/M000470.html +0 -18
- data/doc/classes/Dnsruby/Name/Label.src/M000471.html +0 -18
- data/doc/classes/Dnsruby/Name/Label.src/M000472.html +0 -18
- data/doc/classes/Dnsruby/NotImp.html +0 -119
- data/doc/classes/Dnsruby/OpCode.html +0 -146
- data/doc/classes/Dnsruby/OtherResolvError.html +0 -119
- data/doc/classes/Dnsruby/QTypes.html +0 -146
- data/doc/classes/Dnsruby/Question.html +0 -306
- data/doc/classes/Dnsruby/Question.src/M000590.html +0 -47
- data/doc/classes/Dnsruby/Question.src/M000591.html +0 -18
- data/doc/classes/Dnsruby/Question.src/M000592.html +0 -18
- data/doc/classes/Dnsruby/Question.src/M000593.html +0 -32
- data/doc/classes/Dnsruby/Question.src/M000594.html +0 -18
- data/doc/classes/Dnsruby/RCode.html +0 -211
- data/doc/classes/Dnsruby/RR.html +0 -653
- data/doc/classes/Dnsruby/RR.src/M000352.html +0 -18
- data/doc/classes/Dnsruby/RR.src/M000353.html +0 -22
- data/doc/classes/Dnsruby/RR.src/M000354.html +0 -18
- data/doc/classes/Dnsruby/RR.src/M000355.html +0 -26
- data/doc/classes/Dnsruby/RR.src/M000356.html +0 -26
- data/doc/classes/Dnsruby/RR.src/M000357.html +0 -18
- data/doc/classes/Dnsruby/RR.src/M000358.html +0 -36
- data/doc/classes/Dnsruby/RR.src/M000359.html +0 -100
- data/doc/classes/Dnsruby/RR.src/M000360.html +0 -18
- data/doc/classes/Dnsruby/RR.src/M000361.html +0 -18
- data/doc/classes/Dnsruby/RR.src/M000362.html +0 -22
- data/doc/classes/Dnsruby/RR.src/M000363.html +0 -33
- data/doc/classes/Dnsruby/RR.src/M000364.html +0 -24
- data/doc/classes/Dnsruby/RR/ANY.html +0 -133
- data/doc/classes/Dnsruby/RR/CERT.html +0 -180
- data/doc/classes/Dnsruby/RR/CERT/CertificateTypes.html +0 -169
- data/doc/classes/Dnsruby/RR/CNAME.html +0 -151
- data/doc/classes/Dnsruby/RR/DLV.html +0 -134
- data/doc/classes/Dnsruby/RR/DNAME.html +0 -150
- data/doc/classes/Dnsruby/RR/DNSKEY.html +0 -422
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000397.html +0 -20
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000398.html +0 -21
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000399.html +0 -28
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000400.html +0 -22
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000401.html +0 -18
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000402.html +0 -22
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000403.html +0 -18
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000404.html +0 -26
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000405.html +0 -38
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000406.html +0 -58
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000407.html +0 -21
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000408.html +0 -24
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000409.html +0 -39
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000410.html +0 -24
- data/doc/classes/Dnsruby/RR/DS.html +0 -329
- data/doc/classes/Dnsruby/RR/DS.src/M000390.html +0 -19
- data/doc/classes/Dnsruby/RR/DS.src/M000391.html +0 -28
- data/doc/classes/Dnsruby/RR/DS.src/M000392.html +0 -28
- data/doc/classes/Dnsruby/RR/DS.src/M000393.html +0 -38
- data/doc/classes/Dnsruby/RR/DS.src/M000394.html +0 -29
- data/doc/classes/Dnsruby/RR/DS.src/M000395.html +0 -53
- data/doc/classes/Dnsruby/RR/DS.src/M000396.html +0 -40
- data/doc/classes/Dnsruby/RR/DS/DigestTypes.html +0 -111
- data/doc/classes/Dnsruby/RR/DomainName.html +0 -175
- data/doc/classes/Dnsruby/RR/DomainName.src/M000436.html +0 -18
- data/doc/classes/Dnsruby/RR/Generic.html +0 -133
- data/doc/classes/Dnsruby/RR/HINFO.html +0 -155
- data/doc/classes/Dnsruby/RR/IN.html +0 -155
- data/doc/classes/Dnsruby/RR/IN/A.html +0 -200
- data/doc/classes/Dnsruby/RR/IN/A.src/M000368.html +0 -18
- data/doc/classes/Dnsruby/RR/IN/A.src/M000369.html +0 -18
- data/doc/classes/Dnsruby/RR/IN/A.src/M000370.html +0 -18
- data/doc/classes/Dnsruby/RR/IN/AAAA.html +0 -139
- data/doc/classes/Dnsruby/RR/IN/AFSDB.html +0 -145
- data/doc/classes/Dnsruby/RR/IN/PX.html +0 -143
- data/doc/classes/Dnsruby/RR/IN/SRV.html +0 -238
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000365.html +0 -29
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000366.html +0 -26
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000367.html +0 -22
- data/doc/classes/Dnsruby/RR/IN/WKS.html +0 -166
- data/doc/classes/Dnsruby/RR/IN/WKS.src/M000371.html +0 -20
- data/doc/classes/Dnsruby/RR/ISDN.html +0 -155
- data/doc/classes/Dnsruby/RR/LOC.html +0 -395
- data/doc/classes/Dnsruby/RR/LOC.src/M000376.html +0 -32
- data/doc/classes/Dnsruby/RR/LOC.src/M000377.html +0 -23
- data/doc/classes/Dnsruby/RR/LOC.src/M000378.html +0 -25
- data/doc/classes/Dnsruby/RR/LOC.src/M000379.html +0 -21
- data/doc/classes/Dnsruby/RR/LOC.src/M000380.html +0 -20
- data/doc/classes/Dnsruby/RR/LOC.src/M000381.html +0 -23
- data/doc/classes/Dnsruby/RR/MB.html +0 -150
- data/doc/classes/Dnsruby/RR/MG.html +0 -150
- data/doc/classes/Dnsruby/RR/MINFO.html +0 -156
- data/doc/classes/Dnsruby/RR/MR.html +0 -150
- data/doc/classes/Dnsruby/RR/MX.html +0 -155
- data/doc/classes/Dnsruby/RR/NAPTR.html +0 -190
- data/doc/classes/Dnsruby/RR/NS.html +0 -151
- data/doc/classes/Dnsruby/RR/NSAP.html +0 -293
- data/doc/classes/Dnsruby/RR/NSAP.src/M000446.html +0 -19
- data/doc/classes/Dnsruby/RR/NSAP.src/M000447.html +0 -19
- data/doc/classes/Dnsruby/RR/NSAP.src/M000448.html +0 -22
- data/doc/classes/Dnsruby/RR/NSAP.src/M000449.html +0 -31
- data/doc/classes/Dnsruby/RR/NSEC.html +0 -301
- data/doc/classes/Dnsruby/RR/NSEC.src/M000382.html +0 -19
- data/doc/classes/Dnsruby/RR/NSEC.src/M000383.html +0 -18
- data/doc/classes/Dnsruby/RR/NSEC.src/M000384.html +0 -34
- data/doc/classes/Dnsruby/RR/NSEC.src/M000385.html +0 -18
- data/doc/classes/Dnsruby/RR/NSEC.src/M000386.html +0 -75
- data/doc/classes/Dnsruby/RR/NSEC.src/M000387.html +0 -18
- data/doc/classes/Dnsruby/RR/NSEC.src/M000388.html +0 -92
- data/doc/classes/Dnsruby/RR/NSEC.src/M000389.html +0 -23
- data/doc/classes/Dnsruby/RR/NSEC3.html +0 -366
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000438.html +0 -28
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000439.html +0 -18
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000440.html +0 -18
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000441.html +0 -22
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000442.html +0 -18
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000443.html +0 -21
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000444.html +0 -21
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000445.html +0 -29
- data/doc/classes/Dnsruby/RR/NSEC3PARAM.html +0 -279
- data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000430.html +0 -28
- data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000431.html +0 -18
- data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000432.html +0 -22
- data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000433.html +0 -21
- data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000434.html +0 -25
- data/doc/classes/Dnsruby/RR/PTR.html +0 -132
- data/doc/classes/Dnsruby/RR/RP.html +0 -183
- data/doc/classes/Dnsruby/RR/RP.src/M000435.html +0 -19
- data/doc/classes/Dnsruby/RR/RRSIG.html +0 -372
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000450.html +0 -26
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000451.html +0 -28
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000452.html +0 -23
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000453.html +0 -23
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000454.html +0 -46
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000455.html +0 -50
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000456.html +0 -18
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000457.html +0 -27
- data/doc/classes/Dnsruby/RR/RT.html +0 -155
- data/doc/classes/Dnsruby/RR/SOA.html +0 -233
- data/doc/classes/Dnsruby/RR/SOA.src/M000419.html +0 -24
- data/doc/classes/Dnsruby/RR/SOA.src/M000420.html +0 -27
- data/doc/classes/Dnsruby/RR/SPF.html +0 -138
- data/doc/classes/Dnsruby/RR/TKEY.html +0 -313
- data/doc/classes/Dnsruby/RR/TKEY.src/M000372.html +0 -19
- data/doc/classes/Dnsruby/RR/TKEY.src/M000373.html +0 -29
- data/doc/classes/Dnsruby/RR/TKEY.src/M000374.html +0 -21
- data/doc/classes/Dnsruby/RR/TKEY.src/M000375.html +0 -29
- data/doc/classes/Dnsruby/RR/TSIG.html +0 -524
- data/doc/classes/Dnsruby/RR/TSIG.src/M000421.html +0 -24
- data/doc/classes/Dnsruby/RR/TSIG.src/M000422.html +0 -32
- data/doc/classes/Dnsruby/RR/TSIG.src/M000423.html +0 -54
- data/doc/classes/Dnsruby/RR/TSIG.src/M000424.html +0 -121
- data/doc/classes/Dnsruby/RR/TSIG.src/M000425.html +0 -33
- data/doc/classes/Dnsruby/RR/TSIG.src/M000426.html +0 -25
- data/doc/classes/Dnsruby/RR/TSIG.src/M000427.html +0 -36
- data/doc/classes/Dnsruby/RR/TSIG.src/M000428.html +0 -22
- data/doc/classes/Dnsruby/RR/TSIG.src/M000429.html +0 -29
- data/doc/classes/Dnsruby/RR/TXT.html +0 -233
- data/doc/classes/Dnsruby/RR/TXT.src/M000414.html +0 -18
- data/doc/classes/Dnsruby/RR/TXT.src/M000415.html +0 -18
- data/doc/classes/Dnsruby/RR/TXT.src/M000416.html +0 -20
- data/doc/classes/Dnsruby/RR/TXT.src/M000417.html +0 -27
- data/doc/classes/Dnsruby/RR/TXT.src/M000418.html +0 -25
- data/doc/classes/Dnsruby/RR/X25.html +0 -203
- data/doc/classes/Dnsruby/RR/X25.src/M000411.html +0 -18
- data/doc/classes/Dnsruby/RR/X25.src/M000412.html +0 -18
- data/doc/classes/Dnsruby/RR/X25.src/M000413.html +0 -22
- data/doc/classes/Dnsruby/RRSet.html +0 -400
- data/doc/classes/Dnsruby/RRSet.src/M000575.html +0 -23
- data/doc/classes/Dnsruby/RRSet.src/M000576.html +0 -18
- data/doc/classes/Dnsruby/RRSet.src/M000577.html +0 -18
- data/doc/classes/Dnsruby/RRSet.src/M000578.html +0 -47
- data/doc/classes/Dnsruby/RRSet.src/M000579.html +0 -32
- data/doc/classes/Dnsruby/RRSet.src/M000580.html +0 -18
- data/doc/classes/Dnsruby/RRSet.src/M000581.html +0 -20
- data/doc/classes/Dnsruby/RRSet.src/M000582.html +0 -18
- data/doc/classes/Dnsruby/RRSet.src/M000583.html +0 -18
- data/doc/classes/Dnsruby/RRSet.src/M000584.html +0 -18
- data/doc/classes/Dnsruby/RRSet.src/M000585.html +0 -18
- data/doc/classes/Dnsruby/RRSet.src/M000586.html +0 -22
- data/doc/classes/Dnsruby/RRSet.src/M000587.html +0 -18
- data/doc/classes/Dnsruby/RRSet.src/M000588.html +0 -22
- data/doc/classes/Dnsruby/RRSet.src/M000589.html +0 -18
- data/doc/classes/Dnsruby/Recursor.html +0 -744
- data/doc/classes/Dnsruby/Recursor.src/M000639.html +0 -19
- data/doc/classes/Dnsruby/Recursor.src/M000640.html +0 -97
- data/doc/classes/Dnsruby/Recursor.src/M000641.html +0 -20
- data/doc/classes/Dnsruby/Recursor.src/M000642.html +0 -18
- data/doc/classes/Dnsruby/Recursor.src/M000643.html +0 -31
- data/doc/classes/Dnsruby/Recursor.src/M000644.html +0 -231
- data/doc/classes/Dnsruby/Refused.html +0 -119
- data/doc/classes/Dnsruby/Resolv.html +0 -401
- data/doc/classes/Dnsruby/Resolv.src/M000516.html +0 -18
- data/doc/classes/Dnsruby/Resolv.src/M000517.html +0 -18
- data/doc/classes/Dnsruby/Resolv.src/M000518.html +0 -18
- data/doc/classes/Dnsruby/Resolv.src/M000519.html +0 -18
- data/doc/classes/Dnsruby/Resolv.src/M000520.html +0 -18
- data/doc/classes/Dnsruby/Resolv.src/M000521.html +0 -18
- data/doc/classes/Dnsruby/Resolv.src/M000522.html +0 -18
- data/doc/classes/Dnsruby/Resolv.src/M000523.html +0 -19
- data/doc/classes/Dnsruby/Resolv.src/M000524.html +0 -20
- data/doc/classes/Dnsruby/Resolv.src/M000525.html +0 -29
- data/doc/classes/Dnsruby/Resolv.src/M000526.html +0 -19
- data/doc/classes/Dnsruby/Resolv.src/M000527.html +0 -20
- data/doc/classes/Dnsruby/Resolv.src/M000528.html +0 -25
- data/doc/classes/Dnsruby/ResolvError.html +0 -117
- data/doc/classes/Dnsruby/ResolvTimeout.html +0 -117
- data/doc/classes/Dnsruby/Resolver.html +0 -1114
- data/doc/classes/Dnsruby/Resolver.src/M000658.html +0 -24
- data/doc/classes/Dnsruby/Resolver.src/M000659.html +0 -27
- data/doc/classes/Dnsruby/Resolver.src/M000660.html +0 -28
- data/doc/classes/Dnsruby/Resolver.src/M000661.html +0 -18
- data/doc/classes/Dnsruby/Resolver.src/M000662.html +0 -51
- data/doc/classes/Dnsruby/Resolver.src/M000663.html +0 -25
- data/doc/classes/Dnsruby/Resolver.src/M000664.html +0 -22
- data/doc/classes/Dnsruby/Resolver.src/M000665.html +0 -18
- data/doc/classes/Dnsruby/Resolver.src/M000666.html +0 -20
- data/doc/classes/Dnsruby/Resolver.src/M000667.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000668.html +0 -21
- data/doc/classes/Dnsruby/Resolver.src/M000669.html +0 -21
- data/doc/classes/Dnsruby/Resolver.src/M000670.html +0 -27
- data/doc/classes/Dnsruby/Resolver.src/M000671.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000672.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000673.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000674.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000675.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000676.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000677.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000678.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000679.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000680.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000681.html +0 -26
- data/doc/classes/Dnsruby/Resolver.src/M000682.html +0 -18
- data/doc/classes/Dnsruby/Resolver.src/M000683.html +0 -23
- data/doc/classes/Dnsruby/Resolver.src/M000684.html +0 -18
- data/doc/classes/Dnsruby/ServFail.html +0 -119
- data/doc/classes/Dnsruby/SingleResolver.html +0 -801
- data/doc/classes/Dnsruby/SingleResolver.src/M000529.html +0 -18
- data/doc/classes/Dnsruby/SingleResolver.src/M000530.html +0 -24
- data/doc/classes/Dnsruby/SingleResolver.src/M000531.html +0 -36
- data/doc/classes/Dnsruby/SingleResolver.src/M000532.html +0 -18
- data/doc/classes/Dnsruby/SingleResolver.src/M000533.html +0 -19
- data/doc/classes/Dnsruby/SingleResolver.src/M000534.html +0 -58
- data/doc/classes/Dnsruby/SingleResolver.src/M000535.html +0 -19
- data/doc/classes/Dnsruby/SingleResolver.src/M000536.html +0 -19
- data/doc/classes/Dnsruby/SingleResolver.src/M000537.html +0 -25
- data/doc/classes/Dnsruby/SingleResolver.src/M000538.html +0 -57
- data/doc/classes/Dnsruby/SingleResolver.src/M000539.html +0 -21
- data/doc/classes/Dnsruby/SingleResolver.src/M000540.html +0 -19
- data/doc/classes/Dnsruby/SingleResolver.src/M000541.html +0 -26
- data/doc/classes/Dnsruby/SingleResolver.src/M000542.html +0 -26
- data/doc/classes/Dnsruby/SingleResolver.src/M000543.html +0 -36
- data/doc/classes/Dnsruby/SingleResolver.src/M000544.html +0 -21
- data/doc/classes/Dnsruby/SingleResolver.src/M000545.html +0 -31
- data/doc/classes/Dnsruby/SingleResolver.src/M000546.html +0 -47
- data/doc/classes/Dnsruby/SingleResolver.src/M000547.html +0 -35
- data/doc/classes/Dnsruby/SingleResolver.src/M000548.html +0 -24
- data/doc/classes/Dnsruby/SingleResolver.src/M000549.html +0 -21
- data/doc/classes/Dnsruby/TheLog.html +0 -188
- data/doc/classes/Dnsruby/TheLog.src/M000612.html +0 -18
- data/doc/classes/Dnsruby/TheLog.src/M000613.html +0 -18
- data/doc/classes/Dnsruby/TheLog.src/M000614.html +0 -18
- data/doc/classes/Dnsruby/Types.html +0 -441
- data/doc/classes/Dnsruby/Update.html +0 -368
- data/doc/classes/Dnsruby/Update.src/M000634.html +0 -32
- data/doc/classes/Dnsruby/Update.src/M000635.html +0 -36
- data/doc/classes/Dnsruby/Update.src/M000636.html +0 -32
- data/doc/classes/Dnsruby/Update.src/M000637.html +0 -41
- data/doc/classes/Dnsruby/Update.src/M000638.html +0 -34
- data/doc/classes/Dnsruby/VerifyError.html +0 -119
- data/doc/classes/Dnsruby/ZoneTransfer.html +0 -300
- data/doc/classes/Dnsruby/ZoneTransfer.src/M000500.html +0 -18
- data/doc/classes/Dnsruby/ZoneTransfer.src/M000501.html +0 -24
- data/doc/classes/Dnsruby/ZoneTransfer.src/M000502.html +0 -35
- data/doc/classes/Dnsruby/ZoneTransfer/Delta.html +0 -200
- data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000503.html +0 -19
- data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000504.html +0 -19
- data/doc/classes/DnssecTest.html +0 -242
- data/doc/classes/DnssecTest.src/M000235.html +0 -58
- data/doc/classes/DnssecTest.src/M000236.html +0 -28
- data/doc/classes/DnssecTest.src/M000237.html +0 -28
- data/doc/classes/DnssecTest.src/M000238.html +0 -28
- data/doc/classes/DnssecTest.src/M000239.html +0 -33
- data/doc/classes/DnssecTest.src/M000240.html +0 -24
- data/doc/classes/DnssecTest.src/M000241.html +0 -47
- data/doc/classes/DnssecTest.src/M000242.html +0 -30
- data/doc/classes/DsTest.html +0 -252
- data/doc/classes/DsTest.src/M000190.html +0 -25
- data/doc/classes/DsTest.src/M000191.html +0 -24
- data/doc/classes/DsTest.src/M000192.html +0 -26
- data/doc/classes/DsTest.src/M000193.html +0 -23
- data/doc/classes/DsTest.src/M000194.html +0 -31
- data/doc/classes/DsTest.src/M000195.html +0 -25
- data/doc/classes/Enumerable.html +0 -118
- data/doc/classes/Errno.html +0 -111
- data/doc/classes/Errno/ENOTEMPTY.html +0 -111
- data/doc/classes/EventMachineTestDeferrable.html +0 -212
- data/doc/classes/EventMachineTestDeferrable.src/M000100.html +0 -20
- data/doc/classes/EventMachineTestDeferrable.src/M000101.html +0 -19
- data/doc/classes/EventMachineTestDeferrable.src/M000102.html +0 -28
- data/doc/classes/EventMachineTestDeferrable.src/M000103.html +0 -29
- data/doc/classes/EventMachineTestDeferrable.src/M000104.html +0 -33
- data/doc/classes/EventMachineTestDeferrable.src/M000105.html +0 -32
- data/doc/classes/EventMachineTestResolver.html +0 -324
- data/doc/classes/EventMachineTestResolver.src/M000177.html +0 -21
- data/doc/classes/EventMachineTestResolver.src/M000178.html +0 -19
- data/doc/classes/EventMachineTestResolver.src/M000179.html +0 -20
- data/doc/classes/EventMachineTestResolver.src/M000180.html +0 -20
- data/doc/classes/EventMachineTestResolver.src/M000181.html +0 -24
- data/doc/classes/EventMachineTestResolver.src/M000182.html +0 -25
- data/doc/classes/EventMachineTestResolver.src/M000183.html +0 -31
- data/doc/classes/EventMachineTestResolver.src/M000184.html +0 -24
- data/doc/classes/EventMachineTestResolver.src/M000185.html +0 -39
- data/doc/classes/EventMachineTestResolver.src/M000186.html +0 -36
- data/doc/classes/EventMachineTestResolver.src/M000187.html +0 -32
- data/doc/classes/EventMachineTestResolver.src/M000188.html +0 -30
- data/doc/classes/EventMachineTestResolver.src/M000189.html +0 -22
- data/doc/classes/EventMachineTestSingleResolver.html +0 -227
- data/doc/classes/EventMachineTestSingleResolver.src/M000092.html +0 -21
- data/doc/classes/EventMachineTestSingleResolver.src/M000093.html +0 -19
- data/doc/classes/EventMachineTestSingleResolver.src/M000094.html +0 -31
- data/doc/classes/EventMachineTestSingleResolver.src/M000095.html +0 -33
- data/doc/classes/EventMachineTestSingleResolver.src/M000096.html +0 -33
- data/doc/classes/EventMachineTestSingleResolver.src/M000097.html +0 -32
- data/doc/classes/EventMachineTestSingleResolver.src/M000098.html +0 -23
- data/doc/classes/File.html +0 -166
- data/doc/classes/File.src/M000336.html +0 -20
- data/doc/classes/File.src/M000337.html +0 -20
- data/doc/classes/File.src/M000338.html +0 -18
- data/doc/classes/FileOperations.html +0 -375
- data/doc/classes/FileOperations.src/M000685.html +0 -31
- data/doc/classes/FileOperations.src/M000686.html +0 -20
- data/doc/classes/FileOperations.src/M000687.html +0 -20
- data/doc/classes/FileOperations.src/M000688.html +0 -24
- data/doc/classes/FileOperations.src/M000689.html +0 -34
- data/doc/classes/FileOperations.src/M000690.html +0 -27
- data/doc/classes/FileOperations.src/M000691.html +0 -21
- data/doc/classes/FileOperations.src/M000692.html +0 -19
- data/doc/classes/FileOperations.src/M000693.html +0 -40
- data/doc/classes/FileOperations.src/M000694.html +0 -19
- data/doc/classes/FileOperations.src/M000695.html +0 -20
- data/doc/classes/FileOperations.src/M000696.html +0 -18
- data/doc/classes/FileOperations.src/M000697.html +0 -18
- data/doc/classes/FileOperations.src/M000698.html +0 -18
- data/doc/classes/FileOperations.src/M000699.html +0 -20
- data/doc/classes/FileOperations.src/M000700.html +0 -20
- data/doc/classes/HookScriptAPI.html +0 -308
- data/doc/classes/HookScriptAPI.src/M000339.html +0 -18
- data/doc/classes/HookScriptAPI.src/M000341.html +0 -18
- data/doc/classes/HookScriptAPI.src/M000342.html +0 -18
- data/doc/classes/HookScriptAPI.src/M000343.html +0 -18
- data/doc/classes/HookScriptAPI.src/M000344.html +0 -18
- data/doc/classes/HookScriptAPI.src/M000345.html +0 -18
- data/doc/classes/HookScriptAPI.src/M000346.html +0 -18
- data/doc/classes/HookScriptAPI.src/M000347.html +0 -18
- data/doc/classes/HookScriptAPI.src/M000348.html +0 -20
- data/doc/classes/HookScriptAPI.src/M000349.html +0 -20
- data/doc/classes/HookScriptAPI.src/M000350.html +0 -20
- data/doc/classes/Installer.html +0 -1148
- data/doc/classes/Installer.src/M000243.html +0 -21
- data/doc/classes/Installer.src/M000244.html +0 -18
- data/doc/classes/Installer.src/M000245.html +0 -17
- data/doc/classes/Installer.src/M000246.html +0 -18
- data/doc/classes/Installer.src/M000247.html +0 -18
- data/doc/classes/Installer.src/M000248.html +0 -18
- data/doc/classes/Installer.src/M000249.html +0 -18
- data/doc/classes/Installer.src/M000250.html +0 -18
- data/doc/classes/Installer.src/M000251.html +0 -23
- data/doc/classes/Installer.src/M000252.html +0 -18
- data/doc/classes/Installer.src/M000255.html +0 -18
- data/doc/classes/Installer.src/M000259.html +0 -18
- data/doc/classes/Installer.src/M000260.html +0 -18
- data/doc/classes/Installer.src/M000261.html +0 -20
- data/doc/classes/Installer.src/M000263.html +0 -18
- data/doc/classes/Installer.src/M000267.html +0 -36
- data/doc/classes/Installer.src/M000268.html +0 -25
- data/doc/classes/Installer.src/M000269.html +0 -24
- data/doc/classes/Installer.src/M000270.html +0 -19
- data/doc/classes/Installer.src/M000271.html +0 -18
- data/doc/classes/Installer.src/M000272.html +0 -18
- data/doc/classes/Installer.src/M000273.html +0 -21
- data/doc/classes/Installer.src/M000274.html +0 -18
- data/doc/classes/Installer.src/M000275.html +0 -20
- data/doc/classes/Installer.src/M000276.html +0 -18
- data/doc/classes/Installer.src/M000277.html +0 -21
- data/doc/classes/Installer.src/M000278.html +0 -18
- data/doc/classes/Installer.src/M000279.html +0 -22
- data/doc/classes/Installer.src/M000280.html +0 -18
- data/doc/classes/Installer.src/M000281.html +0 -23
- data/doc/classes/Installer.src/M000282.html +0 -18
- data/doc/classes/Installer.src/M000283.html +0 -20
- data/doc/classes/Installer.src/M000284.html +0 -19
- data/doc/classes/Installer.src/M000285.html +0 -19
- data/doc/classes/Installer.src/M000286.html +0 -20
- data/doc/classes/Installer.src/M000287.html +0 -30
- data/doc/classes/Installer.src/M000288.html +0 -20
- data/doc/classes/Installer.src/M000294.html +0 -19
- data/doc/classes/Installer.src/M000295.html +0 -20
- data/doc/classes/Installer.src/M000298.html +0 -19
- data/doc/classes/Installer.src/M000302.html +0 -26
- data/doc/classes/Installer.src/M000303.html +0 -25
- data/doc/classes/Installer.src/M000304.html +0 -29
- data/doc/classes/Installer.src/M000305.html +0 -26
- data/doc/classes/Installer/Shebang.html +0 -202
- data/doc/classes/Installer/Shebang.src/M000306.html +0 -23
- data/doc/classes/Installer/Shebang.src/M000307.html +0 -19
- data/doc/classes/Installer/Shebang.src/M000308.html +0 -19
- data/doc/classes/Installer/Shebang.src/M000309.html +0 -18
- data/doc/classes/Nsec3ParamTest.html +0 -172
- data/doc/classes/Nsec3ParamTest.src/M000233.html +0 -26
- data/doc/classes/Nsec3ParamTest.src/M000234.html +0 -24
- data/doc/classes/Nsec3Test.html +0 -202
- data/doc/classes/Nsec3Test.src/M000207.html +0 -27
- data/doc/classes/Nsec3Test.src/M000208.html +0 -24
- data/doc/classes/Nsec3Test.src/M000209.html +0 -39
- data/doc/classes/Nsec3Test.src/M000210.html +0 -23
- data/doc/classes/NsecTest.html +0 -187
- data/doc/classes/NsecTest.src/M000333.html +0 -23
- data/doc/classes/NsecTest.src/M000334.html +0 -24
- data/doc/classes/NsecTest.src/M000335.html +0 -23
- data/doc/classes/RrsetTest.html +0 -137
- data/doc/classes/RrsetTest.src/M000310.html +0 -68
- data/doc/classes/RrsigTest.html +0 -150
- data/doc/classes/RrsigTest.src/M000099.html +0 -35
- data/doc/classes/SetupError.html +0 -111
- data/doc/classes/TestAResolverFile.html +0 -152
- data/doc/classes/TestAResolverFile.src/M000205.html +0 -18
- data/doc/classes/TestAResolverFile.src/M000206.html +0 -33
- data/doc/classes/TestAxfr.html +0 -137
- data/doc/classes/TestAxfr.src/M000106.html +0 -23
- data/doc/classes/TestDNS.html +0 -257
- data/doc/classes/TestDNS.src/M000196.html +0 -18
- data/doc/classes/TestDNS.src/M000197.html +0 -18
- data/doc/classes/TestDNS.src/M000198.html +0 -53
- data/doc/classes/TestDNS.src/M000199.html +0 -19
- data/doc/classes/TestDNS.src/M000200.html +0 -18
- data/doc/classes/TestDNS.src/M000201.html +0 -32
- data/doc/classes/TestDNS.src/M000202.html +0 -74
- data/doc/classes/TestDNS.src/M000203.html +0 -41
- data/doc/classes/TestDNS.src/M000204.html +0 -67
- data/doc/classes/TestDnsruby.html +0 -137
- data/doc/classes/TestDnsruby.src/M000211.html +0 -36
- data/doc/classes/TestEscapedChars.html +0 -152
- data/doc/classes/TestEscapedChars.src/M000014.html +0 -243
- data/doc/classes/TestEscapedChars.src/M000015.html +0 -248
- data/doc/classes/TestEventMachineSoak.html +0 -227
- data/doc/classes/TestEventMachineSoak.src/M000319.html +0 -19
- data/doc/classes/TestEventMachineSoak.src/M000320.html +0 -18
- data/doc/classes/TestEventMachineSoak.src/M000321.html +0 -18
- data/doc/classes/TestEventMachineSoak.src/M000322.html +0 -33
- data/doc/classes/TestEventMachineSoak.src/M000323.html +0 -34
- data/doc/classes/TestEventMachineSoak.src/M000324.html +0 -33
- data/doc/classes/TestEventMachineSoak.src/M000325.html +0 -33
- data/doc/classes/TestHeader.html +0 -137
- data/doc/classes/TestHeader.src/M000091.html +0 -98
- data/doc/classes/TestMisc.html +0 -167
- data/doc/classes/TestMisc.src/M000011.html +0 -28
- data/doc/classes/TestMisc.src/M000012.html +0 -50
- data/doc/classes/TestMisc.src/M000013.html +0 -84
- data/doc/classes/TestName.html +0 -182
- data/doc/classes/TestName.src/M000218.html +0 -24
- data/doc/classes/TestName.src/M000219.html +0 -23
- data/doc/classes/TestName.src/M000220.html +0 -21
- data/doc/classes/TestName.src/M000221.html +0 -21
- data/doc/classes/TestPacket.html +0 -182
- data/doc/classes/TestPacket.src/M000229.html +0 -154
- data/doc/classes/TestPacket.src/M000230.html +0 -25
- data/doc/classes/TestPacket.src/M000231.html +0 -23
- data/doc/classes/TestPacket.src/M000232.html +0 -32
- data/doc/classes/TestPacketUniquePush.html +0 -140
- data/doc/classes/TestPacketUniquePush.src/M000318.html +0 -81
- data/doc/classes/TestQuestion.html +0 -137
- data/doc/classes/TestQuestion.src/M000090.html +0 -45
- data/doc/classes/TestQueue.html +0 -137
- data/doc/classes/TestQueue.src/M000089.html +0 -27
- data/doc/classes/TestRR.html +0 -137
- data/doc/classes/TestRR.src/M000217.html +0 -256
- data/doc/classes/TestRecur.html +0 -137
- data/doc/classes/TestRecur.src/M000176.html +0 -20
- data/doc/classes/TestResOpt.html +0 -227
- data/doc/classes/TestResOpt.src/M000311.html +0 -37
- data/doc/classes/TestResOpt.src/M000312.html +0 -19
- data/doc/classes/TestResOpt.src/M000313.html +0 -30
- data/doc/classes/TestResOpt.src/M000314.html +0 -37
- data/doc/classes/TestResOpt.src/M000315.html +0 -45
- data/doc/classes/TestResOpt.src/M000316.html +0 -36
- data/doc/classes/TestResOpt.src/M000317.html +0 -60
- data/doc/classes/TestResolver.html +0 -357
- data/doc/classes/TestResolver.src/M000077.html +0 -18
- data/doc/classes/TestResolver.src/M000078.html +0 -20
- data/doc/classes/TestResolver.src/M000079.html +0 -20
- data/doc/classes/TestResolver.src/M000080.html +0 -24
- data/doc/classes/TestResolver.src/M000081.html +0 -25
- data/doc/classes/TestResolver.src/M000082.html +0 -31
- data/doc/classes/TestResolver.src/M000083.html +0 -24
- data/doc/classes/TestResolver.src/M000084.html +0 -42
- data/doc/classes/TestResolver.src/M000085.html +0 -38
- data/doc/classes/TestResolver.src/M000086.html +0 -34
- data/doc/classes/TestResolver.src/M000087.html +0 -30
- data/doc/classes/TestResolver.src/M000088.html +0 -41
- data/doc/classes/TestResolverConfig.html +0 -205
- data/doc/classes/TestResolverConfig.src/M000225.html +0 -18
- data/doc/classes/TestResolverConfig.src/M000226.html +0 -37
- data/doc/classes/TestResolverConfig.src/M000227.html +0 -23
- data/doc/classes/TestResolverConfig.src/M000228.html +0 -22
- data/doc/classes/TestResolverEnv.html +0 -141
- data/doc/classes/TestResolverEnv.src/M000332.html +0 -44
- data/doc/classes/TestRrOpt.html +0 -182
- data/doc/classes/TestRrOpt.src/M000007.html +0 -33
- data/doc/classes/TestRrOpt.src/M000008.html +0 -46
- data/doc/classes/TestRrOpt.src/M000009.html +0 -23
- data/doc/classes/TestRrOpt.src/M000010.html +0 -34
- data/doc/classes/TestRrTest.html +0 -155
- data/doc/classes/TestRrTest.src/M000224.html +0 -77
- data/doc/classes/TestRrUnknown.html +0 -167
- data/doc/classes/TestRrUnknown.src/M000074.html +0 -41
- data/doc/classes/TestRrUnknown.src/M000075.html +0 -39
- data/doc/classes/TestRrUnknown.src/M000076.html +0 -42
- data/doc/classes/TestSingleResolver.html +0 -293
- data/doc/classes/TestSingleResolver.src/M000149.html +0 -18
- data/doc/classes/TestSingleResolver.src/M000150.html +0 -19
- data/doc/classes/TestSingleResolver.src/M000151.html +0 -28
- data/doc/classes/TestSingleResolver.src/M000152.html +0 -30
- data/doc/classes/TestSingleResolver.src/M000153.html +0 -55
- data/doc/classes/TestSingleResolver.src/M000154.html +0 -26
- data/doc/classes/TestSingleResolver.src/M000155.html +0 -23
- data/doc/classes/TestSingleResolver.src/M000156.html +0 -27
- data/doc/classes/TestSingleResolver.src/M000157.html +0 -39
- data/doc/classes/TestSingleResolverSoak.html +0 -223
- data/doc/classes/TestSingleResolverSoak.src/M000326.html +0 -18
- data/doc/classes/TestSingleResolverSoak.src/M000327.html +0 -18
- data/doc/classes/TestSingleResolverSoak.src/M000328.html +0 -57
- data/doc/classes/TestSingleResolverSoak.src/M000329.html +0 -64
- data/doc/classes/TestSingleResolverSoak.src/M000330.html +0 -25
- data/doc/classes/TestSingleResolverSoak.src/M000331.html +0 -63
- data/doc/classes/TestSoakBase.html +0 -172
- data/doc/classes/TestSoakBase.src/M000072.html +0 -68
- data/doc/classes/TestSoakBase.src/M000073.html +0 -66
- data/doc/classes/TestTKey.html +0 -152
- data/doc/classes/TestTKey.src/M000215.html +0 -18
- data/doc/classes/TestTKey.src/M000216.html +0 -65
- data/doc/classes/TestTSig.html +0 -309
- data/doc/classes/TestTSig.src/M000138.html +0 -18
- data/doc/classes/TestTSig.src/M000139.html +0 -20
- data/doc/classes/TestTSig.src/M000140.html +0 -26
- data/doc/classes/TestTSig.src/M000141.html +0 -69
- data/doc/classes/TestTSig.src/M000142.html +0 -21
- data/doc/classes/TestTSig.src/M000143.html +0 -60
- data/doc/classes/TestTSig.src/M000144.html +0 -33
- data/doc/classes/TestTSig.src/M000145.html +0 -20
- data/doc/classes/TestTSig.src/M000146.html +0 -24
- data/doc/classes/TestTSig.src/M000147.html +0 -54
- data/doc/classes/TestTSig.src/M000148.html +0 -23
- data/doc/classes/TestTcp.html +0 -152
- data/doc/classes/TestTcp.src/M000222.html +0 -21
- data/doc/classes/TestTcp.src/M000223.html +0 -23
- data/doc/classes/TestUpdate.html +0 -152
- data/doc/classes/TestUpdate.src/M000174.html +0 -20
- data/doc/classes/TestUpdate.src/M000175.html +0 -203
- data/doc/classes/ToplevelInstaller.html +0 -621
- data/doc/classes/ToplevelInstaller.src/M000107.html +0 -23
- data/doc/classes/ToplevelInstaller.src/M000108.html +0 -18
- data/doc/classes/ToplevelInstaller.src/M000109.html +0 -25
- data/doc/classes/ToplevelInstaller.src/M000110.html +0 -21
- data/doc/classes/ToplevelInstaller.src/M000111.html +0 -18
- data/doc/classes/ToplevelInstaller.src/M000112.html +0 -18
- data/doc/classes/ToplevelInstaller.src/M000113.html +0 -38
- data/doc/classes/ToplevelInstaller.src/M000114.html +0 -18
- data/doc/classes/ToplevelInstaller.src/M000115.html +0 -18
- data/doc/classes/ToplevelInstaller.src/M000116.html +0 -18
- data/doc/classes/ToplevelInstaller.src/M000117.html +0 -18
- data/doc/classes/ToplevelInstaller.src/M000118.html +0 -18
- data/doc/classes/ToplevelInstaller.src/M000119.html +0 -40
- data/doc/classes/ToplevelInstaller.src/M000120.html +0 -18
- data/doc/classes/ToplevelInstaller.src/M000121.html +0 -18
- data/doc/classes/ToplevelInstaller.src/M000122.html +0 -21
- data/doc/classes/ToplevelInstaller.src/M000128.html +0 -40
- data/doc/classes/ToplevelInstaller.src/M000129.html +0 -31
- data/doc/classes/ToplevelInstaller.src/M000130.html +0 -52
- data/doc/classes/ToplevelInstaller.src/M000131.html +0 -19
- data/doc/classes/ToplevelInstaller.src/M000132.html +0 -18
- data/doc/classes/ToplevelInstaller.src/M000133.html +0 -18
- data/doc/classes/ToplevelInstaller.src/M000134.html +0 -18
- data/doc/classes/ToplevelInstaller.src/M000135.html +0 -20
- data/doc/classes/ToplevelInstaller.src/M000136.html +0 -18
- data/doc/classes/ToplevelInstaller.src/M000137.html +0 -18
- data/doc/classes/ToplevelInstallerMulti.html +0 -398
- data/doc/classes/ToplevelInstallerMulti.src/M000158.html +0 -21
- data/doc/classes/ToplevelInstallerMulti.src/M000159.html +0 -21
- data/doc/classes/ToplevelInstallerMulti.src/M000160.html +0 -23
- data/doc/classes/ToplevelInstallerMulti.src/M000161.html +0 -29
- data/doc/classes/ToplevelInstallerMulti.src/M000162.html +0 -22
- data/doc/classes/ToplevelInstallerMulti.src/M000163.html +0 -21
- data/doc/classes/ToplevelInstallerMulti.src/M000164.html +0 -21
- data/doc/classes/ToplevelInstallerMulti.src/M000165.html +0 -20
- data/doc/classes/ToplevelInstallerMulti.src/M000166.html +0 -20
- data/doc/classes/ToplevelInstallerMulti.src/M000167.html +0 -20
- data/doc/classes/ToplevelInstallerMulti.src/M000168.html +0 -21
- data/doc/classes/ToplevelInstallerMulti.src/M000169.html +0 -21
- data/doc/classes/ToplevelInstallerMulti.src/M000170.html +0 -25
- data/doc/classes/ToplevelInstallerMulti.src/M000171.html +0 -18
- data/doc/classes/ToplevelInstallerMulti.src/M000172.html +0 -18
- data/doc/classes/ToplevelInstallerMulti.src/M000173.html +0 -18
- data/doc/created.rid +0 -1
- data/doc/files/demo/axfr_rb.html +0 -158
- data/doc/files/demo/check_soa_rb.html +0 -138
- data/doc/files/demo/check_zone_rb.html +0 -231
- data/doc/files/demo/check_zone_rb.src/M000001.html +0 -81
- data/doc/files/demo/check_zone_rb.src/M000002.html +0 -30
- data/doc/files/demo/check_zone_rb.src/M000003.html +0 -23
- data/doc/files/demo/check_zone_rb.src/M000004.html +0 -23
- data/doc/files/demo/check_zone_rb.src/M000005.html +0 -23
- data/doc/files/demo/example_recurse_rb.html +0 -115
- data/doc/files/demo/mresolv_rb.html +0 -130
- data/doc/files/demo/mx_rb.html +0 -108
- data/doc/files/demo/rubydig_rb.html +0 -128
- data/doc/files/demo/trace_dns_rb.html +0 -108
- data/doc/files/lib/Dnsruby/Cache_rb.html +0 -109
- data/doc/files/lib/Dnsruby/Config_rb.html +0 -101
- data/doc/files/lib/Dnsruby/DNS_rb.html +0 -110
- data/doc/files/lib/Dnsruby/Hosts_rb.html +0 -108
- data/doc/files/lib/Dnsruby/Recursor_rb.html +0 -101
- data/doc/files/lib/Dnsruby/Resolver_rb.html +0 -110
- data/doc/files/lib/Dnsruby/SingleResolver_rb.html +0 -109
- data/doc/files/lib/Dnsruby/TheLog_rb.html +0 -110
- data/doc/files/lib/Dnsruby/code_mapper_rb.html +0 -101
- data/doc/files/lib/Dnsruby/dnssec_rb.html +0 -107
- data/doc/files/lib/Dnsruby/event_machine_interface_rb.html +0 -108
- data/doc/files/lib/Dnsruby/iana_ports_rb.html +0 -127
- data/doc/files/lib/Dnsruby/ipv4_rb.html +0 -101
- data/doc/files/lib/Dnsruby/ipv6_rb.html +0 -101
- data/doc/files/lib/Dnsruby/message_rb.html +0 -109
- data/doc/files/lib/Dnsruby/name_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/AAAA_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/AFSDB_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/A_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/CERT_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/DLV_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/DNSKEY_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/DS_rb.html +0 -108
- data/doc/files/lib/Dnsruby/resource/HINFO_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/IN_rb.html +0 -112
- data/doc/files/lib/Dnsruby/resource/ISDN_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/LOC_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/MINFO_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/MX_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/NAPTR_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/NSAP_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/NSEC3PARAM_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/NSEC3_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/NSEC_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/OPT_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/PX_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/RP_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/RRSIG_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/RT_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/SOA_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/SPF_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/SRV_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/TKEY_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/TSIG_rb.html +0 -114
- data/doc/files/lib/Dnsruby/resource/TXT_rb.html +0 -108
- data/doc/files/lib/Dnsruby/resource/X25_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/domain_name_rb.html +0 -101
- data/doc/files/lib/Dnsruby/resource/generic_rb.html +0 -132
- data/doc/files/lib/Dnsruby/resource/resource_rb.html +0 -110
- data/doc/files/lib/Dnsruby/select_thread_rb.html +0 -111
- data/doc/files/lib/Dnsruby/update_rb.html +0 -101
- data/doc/files/lib/Dnsruby/zone_transfer_rb.html +0 -101
- data/doc/files/lib/dnsruby_rb.html +0 -118
- data/doc/files/setup_rb.html +0 -148
- data/doc/files/setup_rb.src/M000006.html +0 -18
- data/doc/files/test/tc_axfr_rb.html +0 -110
- data/doc/files/test/tc_dns_rb.html +0 -117
- data/doc/files/test/tc_dnskey_rb.html +0 -109
- data/doc/files/test/tc_dnsruby_rb.html +0 -117
- data/doc/files/test/tc_dnssec_rb.html +0 -109
- data/doc/files/test/tc_ds_rb.html +0 -110
- data/doc/files/test/tc_escapedchars_rb.html +0 -117
- data/doc/files/test/tc_event_machine_deferrable_rb.html +0 -111
- data/doc/files/test/tc_event_machine_res_rb.html +0 -111
- data/doc/files/test/tc_event_machine_single_res_rb.html +0 -111
- data/doc/files/test/tc_event_machine_soak_rb.html +0 -113
- data/doc/files/test/tc_header_rb.html +0 -117
- data/doc/files/test/tc_misc_rb.html +0 -110
- data/doc/files/test/tc_name_rb.html +0 -117
- data/doc/files/test/tc_nsec3_rb.html +0 -109
- data/doc/files/test/tc_nsec3param_rb.html +0 -109
- data/doc/files/test/tc_nsec_rb.html +0 -109
- data/doc/files/test/tc_packet_rb.html +0 -117
- data/doc/files/test/tc_packet_unique_push_rb.html +0 -117
- data/doc/files/test/tc_question_rb.html +0 -117
- data/doc/files/test/tc_queue_rb.html +0 -109
- data/doc/files/test/tc_recur_rb.html +0 -109
- data/doc/files/test/tc_res_config_rb.html +0 -110
- data/doc/files/test/tc_res_env_rb.html +0 -117
- data/doc/files/test/tc_res_file_rb.html +0 -110
- data/doc/files/test/tc_res_opt_rb.html +0 -117
- data/doc/files/test/tc_resolver_rb.html +0 -117
- data/doc/files/test/tc_rr-opt_rb.html +0 -118
- data/doc/files/test/tc_rr-txt_rb.html +0 -117
- data/doc/files/test/tc_rr-unknown_rb.html +0 -110
- data/doc/files/test/tc_rr_rb.html +0 -117
- data/doc/files/test/tc_rrset_rb.html +0 -109
- data/doc/files/test/tc_rrsig_rb.html +0 -109
- data/doc/files/test/tc_single_resolver_rb.html +0 -117
- data/doc/files/test/tc_soak_base_rb.html +0 -110
- data/doc/files/test/tc_soak_rb.html +0 -121
- data/doc/files/test/tc_tcp_rb.html +0 -110
- data/doc/files/test/tc_tkey_rb.html +0 -111
- data/doc/files/test/tc_tsig_rb.html +0 -111
- data/doc/files/test/tc_update_rb.html +0 -117
- data/doc/files/test/ts_dnsruby_rb.html +0 -109
- data/doc/files/test/ts_offline_rb.html +0 -133
- data/doc/files/test/ts_online_rb.html +0 -128
- data/doc/fr_method_index.html +0 -726
data/lib/Dnsruby/code_mapper.rb
CHANGED
|
@@ -23,7 +23,7 @@ module Dnsruby
|
|
|
23
23
|
# Example :
|
|
24
24
|
# Types::AAAA or Types.AAAA
|
|
25
25
|
# rcode.string or rcode.code
|
|
26
|
-
class CodeMapper
|
|
26
|
+
class CodeMapper # :nodoc: all
|
|
27
27
|
include Comparable
|
|
28
28
|
|
|
29
29
|
@@strings = {}
|
|
@@ -87,6 +87,7 @@ module Dnsruby
|
|
|
87
87
|
|
|
88
88
|
def initialize(arg) #:nodoc: all
|
|
89
89
|
if (arg.kind_of?String)
|
|
90
|
+
arg.gsub!("_", "-")
|
|
90
91
|
if (@@stringsdown[self.class][arg.downcase] != nil)
|
|
91
92
|
set_string(arg)
|
|
92
93
|
else
|
|
@@ -159,7 +160,8 @@ module Dnsruby
|
|
|
159
160
|
end
|
|
160
161
|
return false
|
|
161
162
|
end
|
|
162
|
-
|
|
163
|
+
alias eql? == # :nodoc:
|
|
164
|
+
|
|
163
165
|
# Return a regular expression which matches any codes or strings from the CodeMapper.
|
|
164
166
|
def self.regexp
|
|
165
167
|
# Longest ones go first, so the regex engine will match AAAA before A, etc.
|
data/lib/Dnsruby/dnssec.rb
CHANGED
|
@@ -1,159 +1,56 @@
|
|
|
1
|
-
|
|
2
|
-
#
|
|
1
|
+
#--
|
|
2
|
+
#Copyright 2007 Nominet UK
|
|
3
|
+
#
|
|
4
|
+
#Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
#you may not use this file except in compliance with the License.
|
|
6
|
+
#You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
#Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
#distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
#See the License f181or the specific language governing permissions and
|
|
14
|
+
#limitations under the License.
|
|
15
|
+
#++
|
|
16
|
+
require 'digest/sha2'
|
|
17
|
+
require 'net/ftp'
|
|
18
|
+
require 'Dnsruby/key_cache'
|
|
19
|
+
require 'Dnsruby/single_verifier'
|
|
20
|
+
module Dnsruby
|
|
21
|
+
|
|
3
22
|
# RFC4033, section 7
|
|
4
|
-
# There is one more step that a security-aware stub resolver can take
|
|
23
|
+
# "There is one more step that a security-aware stub resolver can take
|
|
5
24
|
# if, for whatever reason, it is not able to establish a useful trust
|
|
6
25
|
# relationship with the recursive name servers that it uses: it can
|
|
7
26
|
# perform its own signature validation by setting the Checking Disabled
|
|
8
27
|
# (CD) bit in its query messages. A validating stub resolver is thus
|
|
9
28
|
# able to treat the DNSSEC signatures as trust relationships between
|
|
10
|
-
# the zone administrators and the stub resolver itself.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
# # Create the trusted key that we know for a parent zone of the zone
|
|
29
|
-
# # we are interested in. This is assumed to be a Secure Entry Point
|
|
30
|
-
# # (the SEP flag of the key will be set by default)
|
|
31
|
-
# trusted_key = Dnsruby::RR.create({:name => "uk-dnssec.nic.uk.",
|
|
32
|
-
# :type => Dnsruby::Types.DNSKEY,
|
|
33
|
-
# :key=> "AQPJO6LjrCHhzSF9PIVV7YoQ8iE31FXvghx+14E+jsv4uWJR9jLrxMYm sFOGAKWhiis832ISbPTYtF8sxbNVEotgf9eePruAFPIg6ZixG4yMO9XG LXmcKTQ/cVudqkU00V7M0cUzsYrhc4gPH/NKfQJBC5dbBkbIXJkksPLv Fe8lReKYqocYP6Bng1eBTtkA+N+6mSXzCwSApbNysFnm6yfQwtKlr75p m+pd0/Um+uBkR4nJQGYNt0mPuw4QVBu1TfF5mQYIFoDYASLiDQpvNRN3 US0U5DEG9mARulKSSw448urHvOBwT9Gx5qF2NE4H9ySjOdftjpj62kjb Lmc8/v+z"
|
|
34
|
-
# })
|
|
35
|
-
# ret = Dnsruby::DnssecVerifier.add_trusted_key(trusted_key)
|
|
36
|
-
#
|
|
37
|
-
# # Now use the trusted key to obtain the other keys for the zone
|
|
38
|
-
# r = res.query("uk-dnssec.nic.uk", Dnsruby::Types.ANY)
|
|
39
|
-
# if (!Dnsruby::DnssecVerifier.verify(r))
|
|
40
|
-
# # handle verification failure
|
|
41
|
-
# end
|
|
42
|
-
#
|
|
43
|
-
# r = res.query("www.uk-dnssec.nic.uk", Dnsruby::Types.ANY)
|
|
44
|
-
# if (!Dnsruby::DnssecVerifier.verify(r))
|
|
45
|
-
# # handle verification failure
|
|
46
|
-
# end
|
|
47
|
-
#
|
|
48
|
-
# # Follow the chain of trust
|
|
49
|
-
# r = res.query("bigzone.uk-dnssec.nic.uk", Dnsruby::Types.DS)
|
|
50
|
-
# if (!Dnsruby::DnssecVerifier.verify(r))
|
|
51
|
-
# # handle verification failure
|
|
52
|
-
# end
|
|
53
|
-
#
|
|
54
|
-
# r = res.query("bigzone.uk-dnssec.nic.uk", Dnsruby::Types.ANY)
|
|
55
|
-
# if (!Dnsruby::DnssecVerifier.verify(r))
|
|
56
|
-
# # handle verification failure
|
|
57
|
-
# end
|
|
58
|
-
#
|
|
59
|
-
# # Now query records in the zone we are interested in.
|
|
60
|
-
# # Dnsruby stores all the keys so we can now verify any record signed by
|
|
61
|
-
# # any key in the trusted key store.
|
|
62
|
-
# r = res.query("aaa.bigzone.uk-dnssec.nic.uk", Dnsruby::Types.ANY)
|
|
63
|
-
# if (!Dnsruby::DnssecVerifier.verify(r))
|
|
64
|
-
# # handle verification failure
|
|
65
|
-
# end
|
|
66
|
-
#
|
|
67
|
-
# # Verify an rrset
|
|
68
|
-
# rrset = r.answer.rrset('NSEC')
|
|
69
|
-
# if (!Dnsruby::DnssecVerifier.verify(rrset))
|
|
70
|
-
# # handle verification failure
|
|
71
|
-
# end
|
|
72
|
-
|
|
29
|
+
# the zone administrators and the stub resolver itself. "
|
|
30
|
+
#
|
|
31
|
+
# Dnsruby is configured to validate responses by default. However, it is not
|
|
32
|
+
# configured with any trusted keys by default. Applications may use the
|
|
33
|
+
# verify() method to perform verification with of RRSets of Messages with
|
|
34
|
+
# given keys. Alternatively, trusted keys may be added to this class (either
|
|
35
|
+
# directly, or by loading the IANA TAR or the DLV ISC ZSK). Validation will then
|
|
36
|
+
# be performed from these keys (or the DLV registry, if configured). Negative
|
|
37
|
+
# and positive responses are validation.
|
|
38
|
+
#
|
|
39
|
+
# Messages are tagged with the current security_level (Message::SecurityLevel).
|
|
40
|
+
# UNCHECKED means Dnsruby has not attempted to validate the response.
|
|
41
|
+
# BOGUS means the response has been checked, and is bogus.
|
|
42
|
+
# INSECURE means the response has been validated to be insecure (e.g. in an unsigned zone)
|
|
43
|
+
# SECURE means that the response has been verfied to be correct.
|
|
44
|
+
#
|
|
45
|
+
# Several validators are provided, with each maintaining its own cache of trusted keys.
|
|
46
|
+
# If validators are added or removed, the caches of the other validators are not affected.
|
|
73
47
|
class Dnssec
|
|
74
48
|
# A class to cache trusted keys
|
|
75
|
-
class KeyCache #:nodoc: all
|
|
76
|
-
# Cache includes expiration time for keys
|
|
77
|
-
# Cache removes expired records
|
|
78
|
-
def initialize(keys = nil)
|
|
79
|
-
# Store key tag against [expiry, key]
|
|
80
|
-
@keys = {}
|
|
81
|
-
add(keys)
|
|
82
|
-
end
|
|
83
|
-
def add_key_with_expiration(k, expiration)
|
|
84
|
-
priv_add_key(k, expiration)
|
|
85
|
-
end
|
|
86
|
-
def add(k)
|
|
87
|
-
if (k == nil)
|
|
88
|
-
return false
|
|
89
|
-
elsif (k.instance_of?RRSet)
|
|
90
|
-
add_rrset(k)
|
|
91
|
-
elsif (k.kind_of?KeyCache)
|
|
92
|
-
kaes = k.keys_and_expirations
|
|
93
|
-
kaes.keys.each { |keykey|
|
|
94
|
-
# priv_add_key(keykey, kaes[keykey])
|
|
95
|
-
priv_add_key(keykey[1], keykey[0])
|
|
96
|
-
}
|
|
97
|
-
else
|
|
98
|
-
raise ArgumentError.new("Expected an RRSet or KeyCache! Got #{k.class}")
|
|
99
|
-
end
|
|
100
|
-
return true
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
def add_rrset(k)
|
|
104
|
-
# Get expiration from the RRSIG
|
|
105
|
-
# There can be several RRSIGs here, one for each key which has signed the RRSet
|
|
106
|
-
# We want to choose the one with the most secure signing algorithm, key length,
|
|
107
|
-
# and the longest expiration time - not easy!
|
|
108
|
-
# for now, we simply accept all signed keys
|
|
109
|
-
k.sigs.each { |sig|
|
|
110
|
-
if (sig.type_covered = Types.DNSKEY)
|
|
111
|
-
if (sig.inception <= Time.now.to_i)
|
|
112
|
-
# Check sig.expiration, sig.algorithm
|
|
113
|
-
if (sig.expiration > Time.now.to_i)
|
|
114
|
-
# add the keys to the store
|
|
115
|
-
k.rrs.each {|rr| priv_add_key(rr, sig.expiration)}
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
}
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
def priv_add_key(k, exp)
|
|
123
|
-
# Check that the key does not already exist with a longer expiration!
|
|
124
|
-
if (@keys[k] == nil)
|
|
125
|
-
@keys[k.key_tag] = [exp,k]
|
|
126
|
-
elsif ((@keys[k])[0] < exp)
|
|
127
|
-
@keys[k.key_tag] = [exp,k]
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
def each
|
|
132
|
-
# Only offer currently-valid keys here
|
|
133
|
-
remove_expired_keys
|
|
134
|
-
@keys.values.each {|v| yield v[1]}
|
|
135
|
-
end
|
|
136
|
-
def keys
|
|
137
|
-
# Only offer currently-valid keys here
|
|
138
|
-
remove_expired_keys
|
|
139
|
-
ks = []
|
|
140
|
-
@keys.values.each {|a| ks.push(a[1])}
|
|
141
|
-
return ks
|
|
142
|
-
# return @keys.keys
|
|
143
|
-
end
|
|
144
|
-
def keys_and_expirations
|
|
145
|
-
remove_expired_keys
|
|
146
|
-
return keys()
|
|
147
|
-
end
|
|
148
|
-
def remove_expired_keys
|
|
149
|
-
@keys.delete_if {|k,v|
|
|
150
|
-
v[0] < Time.now.to_i
|
|
151
|
-
}
|
|
152
|
-
end
|
|
153
|
-
end
|
|
154
49
|
|
|
155
50
|
|
|
156
51
|
class ValidationPolicy
|
|
52
|
+
# @TODO@ Could do this by getting client to add verifiers in the order they
|
|
53
|
+
# want them to be used. Could then dispense with all this logic
|
|
157
54
|
# Note that any DLV registries which have been configured will only be tried
|
|
158
55
|
# after both the root and any local trust anchors (RFC 5074 section 5)
|
|
159
56
|
|
|
@@ -177,98 +74,108 @@ module Dnsruby
|
|
|
177
74
|
def Dnssec.validation_policy
|
|
178
75
|
@@validation_policy
|
|
179
76
|
end
|
|
180
|
-
|
|
181
|
-
# The DNSKEY RRs for the signed root (when it exists)
|
|
182
|
-
@@root_anchors = KeyCache.new
|
|
183
|
-
# @TODO@ Add methods for interacting with root anchors
|
|
184
|
-
|
|
185
|
-
# The set of trust anchors.
|
|
186
|
-
# If the root is unsigned, then these must be initialised with at least
|
|
187
|
-
# one trusted key by the client application, if verification is to be performed.
|
|
188
|
-
@@trust_anchors = KeyCache.new
|
|
189
|
-
|
|
190
|
-
@@dlv_registries = []
|
|
191
77
|
|
|
78
|
+
@@root_verifier = SingleVerifier.new(SingleVerifier::VerifierType::ROOT)
|
|
79
|
+
|
|
80
|
+
@@dlv_verifier = SingleVerifier.new(SingleVerifier::VerifierType::DLV)
|
|
81
|
+
|
|
82
|
+
# @TODO@ Could add a new one of these for each anchor.
|
|
83
|
+
@@anchor_verifier = SingleVerifier.new(SingleVerifier::VerifierType::ANCHOR)
|
|
84
|
+
# Should we be loading IANA Trust Anchor Repository? - no need - imported by ISC DLV
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
# Add a trusted Key Signing Key for the ISC DLV registry.
|
|
88
|
+
def Dnssec.add_dlv_key(dlv_key)
|
|
89
|
+
@@dlv_verifier.add_dlv_key(dlv_key)
|
|
90
|
+
end
|
|
91
|
+
# Add a new trust anchor
|
|
192
92
|
def Dnssec.add_trust_anchor(t)
|
|
193
|
-
|
|
93
|
+
# @TODO@ Create a new verifier?
|
|
94
|
+
@@anchor_verifier.add_trust_anchor(t)
|
|
194
95
|
end
|
|
195
|
-
# Add the
|
|
96
|
+
# Add the trusted key with the given expiration time
|
|
196
97
|
def self.add_trust_anchor_with_expiration(k, expiration)
|
|
197
|
-
|
|
198
|
-
@@
|
|
98
|
+
# Create a new verifier?
|
|
99
|
+
@@anchor_verifier.add_trust_anchor_with_expiration(k, expiration)
|
|
199
100
|
end
|
|
200
|
-
|
|
101
|
+
# Remove the trusted key
|
|
201
102
|
def Dnssec.remove_trust_anchor(t)
|
|
202
|
-
@@
|
|
103
|
+
@@anchor_verifier.remove_trust_anchor(t)
|
|
203
104
|
end
|
|
204
105
|
# Wipes the cache of trusted keys
|
|
205
106
|
def self.clear_trust_anchors
|
|
206
|
-
@@
|
|
107
|
+
@@anchor_verifier.clear_trust_anchors
|
|
207
108
|
end
|
|
208
109
|
|
|
209
110
|
def self.trust_anchors
|
|
210
|
-
return @@trust_anchors
|
|
111
|
+
return @@anchor_verifier.trust_anchors
|
|
211
112
|
end
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
# The set of keys which are trusted.
|
|
215
|
-
@@trusted_keys = KeyCache.new
|
|
216
|
-
|
|
217
|
-
# The set of keys which have been indicated by a DS RRSet which has been
|
|
218
|
-
# signed by a trusted key. Although we have not yet located these keys, we
|
|
219
|
-
# have the details (tag and digest) which can identify the keys when we
|
|
220
|
-
# see them. At that point, they will be added to our trusted keys.
|
|
221
|
-
# @TODO@ Should add TTL to this!
|
|
222
|
-
# @TODO@ Should we just use the (TBD) general cache for these?
|
|
223
|
-
@@to_be_trusted_keys = []
|
|
224
|
-
|
|
225
|
-
# Check that the RRSet and RRSIG record are compatible
|
|
226
|
-
def self.check_rr_data(rrset, sigrec)#:nodoc: all
|
|
227
|
-
#Each RR MUST have the same owner name as the RRSIG RR;
|
|
228
|
-
if (rrset.name.to_s != sigrec.name.to_s)
|
|
229
|
-
raise VerifyError.new("RRSET should have same owner name as RRSIG for verification (rrsert=#{rrset.name}, sigrec=#{sigrec.name}")
|
|
230
|
-
end
|
|
231
113
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
114
|
+
def self.clear_trusted_keys
|
|
115
|
+
[@@anchor_verifier, @@root_verifier, @@dlv_verifier].each {|v|
|
|
116
|
+
v.clear_trusted_keys
|
|
117
|
+
}
|
|
118
|
+
end
|
|
119
|
+
# Load the IANA TAR.
|
|
120
|
+
# THIS METHOD IS NOT SECURE!!!
|
|
121
|
+
def self.load_itar
|
|
122
|
+
# @TODO@ THIS IS VERY INSECURE!! WRITE THIS PROPERLY!!
|
|
123
|
+
# Should really check the signatures here to make sure the keys are good!
|
|
124
|
+
Net::FTP::open("ftp.iana.org") { |ftp|
|
|
125
|
+
ftp.login("anonymous")
|
|
126
|
+
ftp.passive = true
|
|
127
|
+
ftp.chdir("/itar")
|
|
128
|
+
lastname=nil
|
|
129
|
+
ftp.gettextfile("anchors.mf") {|line|
|
|
130
|
+
next if (line.strip.length == 0)
|
|
131
|
+
first = line[0]
|
|
132
|
+
if (first.class == String)
|
|
133
|
+
first = first.getbyte(0) # Ruby 1.9
|
|
134
|
+
end
|
|
135
|
+
# print "Reading ITAR : #{line}, first : #{first}\n"
|
|
136
|
+
next if (first==59) # ";")
|
|
137
|
+
if (line.strip=~(/^DS /) || line.strip=~(/^DNSKEY /))
|
|
138
|
+
line = lastname.to_s + ((lastname.absolute?)?".":"") + " " + line
|
|
139
|
+
end
|
|
140
|
+
ds = RR.create(line)
|
|
141
|
+
if ((ds.type == Types.DS) || (ds.type == Types.DNSKEY))
|
|
142
|
+
# assert(ds.name.absolute?)
|
|
143
|
+
Dnssec.add_trust_anchor(ds)
|
|
144
|
+
end
|
|
145
|
+
lastname = ds.name
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
end
|
|
236
149
|
|
|
237
|
-
#Each RR in the RRset MUST have the RR type listed in the
|
|
238
|
-
#RRSIG RR's Type Covered field;
|
|
239
|
-
if (rrset.type != sigrec.type_covered)
|
|
240
|
-
raise VerifyError.new("RRSET should have same type as RRSIG for verification")
|
|
241
|
-
end
|
|
242
150
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
if ((sigrec.expiration < now) || (sigrec.inception > now))
|
|
252
|
-
raise VerifyError.new("Signature record not in validity period")
|
|
253
|
-
end
|
|
151
|
+
@@do_validation_with_recursor = true # Many nameservers don't handle DNSSEC correctly yet
|
|
152
|
+
@@default_resolver = nil
|
|
153
|
+
# This method defines the choice of Resolver or Recursor, when the validator
|
|
154
|
+
# is checking responses.
|
|
155
|
+
# If set to true, then a Recursor will be used to query for the DNSSEC records.
|
|
156
|
+
# Otherwise, the default system resolver will be used.
|
|
157
|
+
def self.do_validation_with_recursor(on)
|
|
158
|
+
@@do_validation_with_recursor = on
|
|
254
159
|
end
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
# k can be a KeyCache, or an RRSet of DNSKEYs.
|
|
258
|
-
def self.add_trusted_key(k)
|
|
259
|
-
@@trusted_keys.add(k)
|
|
160
|
+
def self.do_validation_with_recursor?
|
|
161
|
+
return @@do_validation_with_recursor
|
|
260
162
|
end
|
|
261
|
-
|
|
262
|
-
#
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
163
|
+
# This method overrides the system default resolver configuration for validation
|
|
164
|
+
# If default_resolver is set, then it will be used to follow the chain of trust.
|
|
165
|
+
# If it is not, then the default system resolver will be used (unless do_validation_with_recursor
|
|
166
|
+
# is set.
|
|
167
|
+
def self.default_resolver=(res)
|
|
168
|
+
@@default_resolver = res
|
|
266
169
|
end
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
return @@trusted_keys.keys
|
|
170
|
+
def self.default_resolver
|
|
171
|
+
return @@default_resolver
|
|
270
172
|
end
|
|
271
173
|
|
|
174
|
+
# Returns true for secure/insecure, false otherwise
|
|
175
|
+
# This method will set the security_level on msg to the appropriate value.
|
|
176
|
+
# Could be : secure, insecure, bogus or indeterminate
|
|
177
|
+
# If an error is encountered during verification, then the thrown exception
|
|
178
|
+
# will define the error.
|
|
272
179
|
def self.validate(msg)
|
|
273
180
|
query = Message.new()
|
|
274
181
|
query.header.cd=true
|
|
@@ -276,340 +183,127 @@ module Dnsruby
|
|
|
276
183
|
end
|
|
277
184
|
|
|
278
185
|
def self.validate_with_query(query, msg)
|
|
186
|
+
if (!msg)
|
|
187
|
+
return false
|
|
188
|
+
end
|
|
189
|
+
# First, just check there is something to validate!
|
|
190
|
+
found_sigs = false
|
|
191
|
+
msg.each_resource {|rr|
|
|
192
|
+
if (rr.type == Types.RRSIG)
|
|
193
|
+
found_sigs = true
|
|
194
|
+
end
|
|
195
|
+
}
|
|
196
|
+
if (found_sigs)
|
|
197
|
+
begin
|
|
198
|
+
if (verify(msg))
|
|
199
|
+
msg.security_level = Message::SecurityLevel.SECURE
|
|
200
|
+
return true
|
|
201
|
+
end
|
|
202
|
+
rescue VerifyError
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
279
206
|
# SHOULD ALWAYS VERIFY DNSSEC-SIGNED RESPONSES?
|
|
280
207
|
# Yes - if a trust anchor is configured. Otherwise, act on CD bit (in query)
|
|
208
|
+
TheLog.debug("Checking whether to validate, query.cd = #{query.header.cd}")
|
|
281
209
|
if (((@@validation_policy > ValidationPolicy::ALWAYS_ROOT_ONLY) && (self.trust_anchors().length > 0)) ||
|
|
282
210
|
# Check query here, and validate if CD is true
|
|
283
211
|
(query.header.cd == true))
|
|
212
|
+
TheLog.debug("Starting validation")
|
|
213
|
+
|
|
284
214
|
# Validate!
|
|
285
|
-
#
|
|
286
|
-
|
|
215
|
+
# Need to think about trapping/storing exceptions and security_levels here
|
|
216
|
+
last_error = ""
|
|
217
|
+
last_level = Message::SecurityLevel.BOGUS
|
|
218
|
+
last_error_level = Message::SecurityLevel.BOGUS
|
|
287
219
|
if (@@validation_policy == ValidationPolicy::ALWAYS_LOCAL_ANCHORS_ONLY)
|
|
288
|
-
|
|
220
|
+
last_level, last_error, last_error_level = try_validation(last_level, last_error, last_error_level,
|
|
221
|
+
Proc.new{|m, q| validate_with_anchors(m, q)}, msg, query)
|
|
289
222
|
elsif (@@validation_policy == ValidationPolicy::ALWAYS_ROOT_ONLY)
|
|
290
|
-
|
|
223
|
+
last_level, last_error, last_error_level = try_validation(last_level, last_error, last_error_level,
|
|
224
|
+
Proc.new{|m, q| validate_with_root(m, q)}, msg, query)
|
|
291
225
|
elsif (@@validation_policy == ValidationPolicy::LOCAL_ANCHORS_THEN_ROOT)
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
226
|
+
last_level, last_error, last_error_level = try_validation(last_level, last_error, last_error_level,
|
|
227
|
+
Proc.new{|m, q| validate_with_anchors(m, q)}, msg, query)
|
|
228
|
+
if (last_level != Message::SecurityLevel.SECURE)
|
|
229
|
+
last_level, last_error, last_error_level = try_validation(last_level, last_error, last_error_level,
|
|
230
|
+
Proc.new{|m, q| validate_with_root(m, q)}, msg, query)
|
|
295
231
|
end
|
|
296
232
|
elsif (@@validation_policy == ValidationPolicy::ROOT_THEN_LOCAL_ANCHORS)
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
233
|
+
last_level, last_error, last_error_level = try_validation(last_level, last_error, last_error_level,
|
|
234
|
+
Proc.new{|m, q| validate_with_root(m, q)}, msg, query)
|
|
235
|
+
if (last_level != Message::SecurityLevel.SECURE)
|
|
236
|
+
last_level, last_error, last_error_level = try_validation(last_level, last_error, last_error_level,
|
|
237
|
+
Proc.new{|m, q| validate_with_anchors(m, q)}, msg, query)
|
|
300
238
|
end
|
|
301
239
|
end
|
|
302
|
-
if (
|
|
303
|
-
|
|
240
|
+
if (last_level != Message::SecurityLevel.SECURE)
|
|
241
|
+
last_level, last_error, last_error_level = try_validation(last_level, last_error, last_error_level,
|
|
242
|
+
Proc.new{|m, q| validate_with_dlv(m, q)}, msg, query)
|
|
304
243
|
end
|
|
305
|
-
|
|
244
|
+
# Set the message security level!
|
|
245
|
+
msg.security_level = last_level
|
|
246
|
+
raise VerifyError.new(last_error) if (last_level < 0)
|
|
247
|
+
return (msg.security_level.code > Message::SecurityLevel::UNCHECKED)
|
|
306
248
|
end
|
|
307
|
-
|
|
308
|
-
end
|
|
309
|
-
|
|
310
|
-
# @TODO@ Need to be able to verify RRSet with a provided set of keys ONLY
|
|
311
|
-
# None of these keys should be added to the cache
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
# @TODO@ It sounds like we need to maintain several sets of trusted keys :
|
|
315
|
-
# : one for signed root, one for local anchors, and one from dlv
|
|
316
|
-
# Might it be simpler to write a GenericValidator, and then create three
|
|
317
|
-
# instances - one with root anchors, one with trust anchors, and one for dlv?
|
|
318
|
-
# @TODO@ Each validator should have its own cache!
|
|
319
|
-
def self.validate_with_anchors(msg)
|
|
320
|
-
# @TODO@ What do we do here?
|
|
321
|
-
# See if it is a child of any of our trust anchors.
|
|
322
|
-
# If it is, then see if we have a trusted key for it
|
|
323
|
-
# If we don't, then see if we can get to it from the closest
|
|
324
|
-
# trust anchor
|
|
249
|
+
msg.security_level = Message::SecurityLevel.UNCHECKED
|
|
325
250
|
return true
|
|
326
251
|
end
|
|
327
252
|
|
|
328
|
-
def self.
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
253
|
+
def self.try_validation(last_level, last_error, last_error_level, proc, msg, query) # :nodoc:
|
|
254
|
+
begin
|
|
255
|
+
proc.call(msg, query)
|
|
256
|
+
last_level = Message::SecurityLevel.new([msg.security_level.code, last_level].max)
|
|
257
|
+
rescue VerifyError => e
|
|
258
|
+
if (last_error_level < last_level)
|
|
259
|
+
last_error = e.to_s
|
|
260
|
+
last_error_level = last_level
|
|
261
|
+
end
|
|
262
|
+
end
|
|
263
|
+
return last_level, last_error, last_error_level
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
def self.validate_with_anchors(msg, query)
|
|
267
|
+
return @@anchor_verifier.validate(msg, query)
|
|
334
268
|
end
|
|
335
269
|
|
|
336
|
-
def self.
|
|
337
|
-
|
|
338
|
-
return true
|
|
270
|
+
def self.validate_with_root(msg, query)
|
|
271
|
+
return @@root_verifier.validate(msg, query)
|
|
339
272
|
end
|
|
340
273
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
def self.check_ds(key, ds_rrset)#:nodoc: all
|
|
344
|
-
expiration = 0
|
|
345
|
-
found = false
|
|
346
|
-
ds_rrset.sigs.each { |sig|
|
|
347
|
-
if (sig.type_covered = Types.DS)
|
|
348
|
-
if (sig.inception <= Time.now.to_i)
|
|
349
|
-
# Check sig.expiration, sig.algorithm
|
|
350
|
-
if (sig.expiration > expiration)
|
|
351
|
-
expiration = sig.expiration
|
|
352
|
-
end
|
|
353
|
-
end
|
|
354
|
-
end
|
|
355
|
-
}
|
|
356
|
-
if (expiration > 0)
|
|
357
|
-
ds_rrset.each { |ds|
|
|
358
|
-
if (ds.class == RR::IN::DS)
|
|
359
|
-
if (ds.check_key(key))
|
|
360
|
-
@@trusted_keys.add_key_with_expiration(key, expiration)
|
|
361
|
-
found = true
|
|
362
|
-
end
|
|
363
|
-
end
|
|
364
|
-
}
|
|
365
|
-
end
|
|
366
|
-
return found
|
|
274
|
+
def self.validate_with_dlv(msg, query)
|
|
275
|
+
return @@dlv_verifier.validate(msg, query)
|
|
367
276
|
end
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
#
|
|
378
|
-
# msg can be a Dnsruby::Message or Dnsruby::RRSet.
|
|
379
|
-
# keys may be nil, or a KeyCache or an RRSet of Dnsruby::RR::DNSKEY
|
|
380
|
-
#
|
|
381
|
-
# Returns true if the message verifies OK, and false otherwise.
|
|
382
|
-
def self.verify(msg) # , keys = nil)
|
|
383
|
-
if (msg.kind_of?RRSet)
|
|
384
|
-
return verify_rrset(msg) # , keys)
|
|
385
|
-
end
|
|
386
|
-
# Use the set of trusted keys to check any RRSets we can, ideally
|
|
387
|
-
# those of other DNSKEY RRSets first. Then, see if we can use any of the
|
|
388
|
-
# new total set of keys to check the rest of the rrsets.
|
|
389
|
-
# Return true if we can verify the whole message.
|
|
390
|
-
|
|
391
|
-
msg.each_section do |section|
|
|
392
|
-
ds_rrset = section.rrset(Types.DS)
|
|
393
|
-
if (ds_rrset && ds_rrset.num_sigs > 0)
|
|
394
|
-
if (verify_rrset(ds_rrset))
|
|
395
|
-
# Need to handle DS RRSets (with RRSIGs) not just DS records.
|
|
396
|
-
# ds_rrset.rrs.each do |ds|
|
|
397
|
-
# Work out which key this refers to, and add it to the trusted key store
|
|
398
|
-
found = false
|
|
399
|
-
msg.each_section do |section|
|
|
400
|
-
section.rrset('DNSKEY').rrs.each do |rr|
|
|
401
|
-
if (check_ds(rr, ds_rrset))
|
|
402
|
-
found = true
|
|
403
|
-
end
|
|
404
|
-
end
|
|
405
|
-
end
|
|
406
|
-
(get_keys_to_check()).each {|key|
|
|
407
|
-
if (check_ds(key, ds_rrset))
|
|
408
|
-
found = true
|
|
409
|
-
end
|
|
410
|
-
}
|
|
411
|
-
# If we couldn't find the trusted key, then we should store the
|
|
412
|
-
# key tag and digest in a @@to_be_trusted_keys.
|
|
413
|
-
# Each time we see a new key (which has been signed) then we should
|
|
414
|
-
# check if it is sitting on the to_be_trusted_keys store.
|
|
415
|
-
# If it is, then we should add it to the trusted_keys and remove the
|
|
416
|
-
# DS from the to_be_trusted store
|
|
417
|
-
if (!found)
|
|
418
|
-
@@to_be_trusted_keys.push(ds_rrset)
|
|
419
|
-
end
|
|
420
|
-
# end
|
|
421
|
-
else
|
|
422
|
-
end
|
|
423
|
-
end
|
|
424
|
-
|
|
425
|
-
key_rrset = section.rrset(Types.DNSKEY)
|
|
426
|
-
if (key_rrset && key_rrset.num_sigs > 0)
|
|
427
|
-
if (verify_rrset(key_rrset))
|
|
428
|
-
# key_rrset.rrs.each do |rr|
|
|
429
|
-
@@trusted_keys.add(key_rrset) # rr)
|
|
430
|
-
end
|
|
431
|
-
check_to_be_trusted(key_rrset)
|
|
432
|
-
end
|
|
433
|
-
end
|
|
434
|
-
|
|
435
|
-
msg.section_rrsets.each do |section, rrsets|
|
|
436
|
-
rrsets.each do |rrset|
|
|
437
|
-
# If delegation NS or glue AAAA/A, then don't expect RRSIG.
|
|
438
|
-
# Otherwise, expect RRSIG and fail verification if RRSIG is not present
|
|
439
|
-
|
|
440
|
-
# Check for delegation
|
|
441
|
-
dsrrset = msg.rrset('DS')
|
|
442
|
-
nsrrset = msg.authority.rrset('NS')
|
|
443
|
-
if ((msg.answer.size == 0) && (!dsrrset) && nsrrset) # && (nsrrset.length > 0))# (isDelegation)
|
|
444
|
-
# Now check NSEC(3) records for absence of DS and SOA
|
|
445
|
-
nsec = msg.authority.rrset('NSEC')
|
|
446
|
-
if (nsec.length == 0)
|
|
447
|
-
nsec = msg.authority.rrset('NSEC3')
|
|
448
|
-
end
|
|
449
|
-
if (nsec.rrs.length > 0)
|
|
450
|
-
if (!(nsec.rrs[0].types.include?'DS') || !(nsec.rrset.rrs[0].types.include?'SOA'))
|
|
451
|
-
next
|
|
452
|
-
end
|
|
453
|
-
end
|
|
454
|
-
end
|
|
455
|
-
|
|
456
|
-
# check for glue
|
|
457
|
-
# if the ownername (in the addtional section) of the glue address is the same or longer as the ownername of the NS record, it is glue
|
|
458
|
-
if (msg.additional.size > 0)
|
|
459
|
-
arec = msg.additional.rrset('A')
|
|
460
|
-
if (arec.rrs.length == 0)
|
|
461
|
-
arec = msg.additional.rrset('AAAA')
|
|
462
|
-
end
|
|
463
|
-
nsname = msg.rrset('NS').rrs()[0].name
|
|
464
|
-
if (arec.rrs().length > 0)
|
|
465
|
-
aname = arec.rrs()[0].name
|
|
466
|
-
if (nsname.subdomain_of?aname)
|
|
467
|
-
next
|
|
468
|
-
end
|
|
469
|
-
end
|
|
470
|
-
end
|
|
471
|
-
# If records are in additional, and no RRSIG, that's Ok - just don't use them!
|
|
472
|
-
if ((section == "additional") && (rrset.sigs.length == 0))
|
|
473
|
-
next
|
|
474
|
-
end
|
|
475
|
-
# else verify RRSet
|
|
476
|
-
if (!verify_rrset(rrset))
|
|
477
|
-
return false
|
|
478
|
-
end
|
|
277
|
+
|
|
278
|
+
def self.verify(msg)
|
|
279
|
+
begin
|
|
280
|
+
return true if @@anchor_verifier.verify(msg)
|
|
281
|
+
rescue VerifyError
|
|
282
|
+
begin
|
|
283
|
+
return true if @@root_verifier.verify(msg)
|
|
284
|
+
rescue VerifyError
|
|
285
|
+
return true if @@dlv_verifier.verify(msg) # Will carry error to client
|
|
479
286
|
end
|
|
480
287
|
end
|
|
481
|
-
return true
|
|
482
288
|
end
|
|
483
|
-
|
|
484
|
-
def self.
|
|
485
|
-
|
|
486
|
-
key_rrset.rrs.each do |key|
|
|
487
|
-
@@to_be_trusted_keys.each do |tbtk|
|
|
488
|
-
# @TODO@ Check that the RRSet is still valid!!
|
|
489
|
-
# Should we get it out of the main cache?
|
|
490
|
-
# if (check_ds(key, tbtk))
|
|
491
|
-
tbtk.rrs.each {|ds|
|
|
492
|
-
if (ds.check_key(key))
|
|
493
|
-
@@trusted_keys.add_key_with_expiration(key, tbtk.sigs()[0].expiration)
|
|
494
|
-
@@to_be_trusted_keys.delete(tbtk)
|
|
495
|
-
end
|
|
496
|
-
}
|
|
497
|
-
end
|
|
498
|
-
# end
|
|
499
|
-
end
|
|
500
|
-
|
|
289
|
+
|
|
290
|
+
def self.anchor_verifier
|
|
291
|
+
return @@anchor_verifier
|
|
501
292
|
end
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
keys_to_check = []
|
|
505
|
-
if (@@validation_policy == ValidationPolicy::ALWAYS_ROOT_ONLY)
|
|
506
|
-
keys_to_check = @@trusted_keys.keys
|
|
507
|
-
elsif (@@validation_policy == ValidationPolicy::ALWAYS_LOCAL_ANCHORS_ONLY)
|
|
508
|
-
keys_to_check = @@trust_anchors.keys
|
|
509
|
-
elsif (@@validation_policy == ValidationPolicy::LOCAL_ANCHORS_THEN_ROOT)
|
|
510
|
-
keys_to_check = @@trust_anchors.keys + @@trusted_keys.keys
|
|
511
|
-
elsif (@@validation_policy == ValidationPolicy::ROOT_THEN_LOCAL_ANCHORS)
|
|
512
|
-
keys_to_check = @@trusted_keys.keys + @@trust_anchors.keys
|
|
513
|
-
end
|
|
514
|
-
return keys_to_check
|
|
293
|
+
def self.dlv_verifier
|
|
294
|
+
return @@dlv_verifier
|
|
515
295
|
end
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
def self.get_matching_key(keys, sigrecs)#:nodoc: all
|
|
519
|
-
if ((keys == nil) || (sigrecs == nil))
|
|
520
|
-
return nil, nil
|
|
521
|
-
end
|
|
522
|
-
keys.each {|key|
|
|
523
|
-
sigrecs.each {|sig|
|
|
524
|
-
if ((key.key_tag == sig.key_tag) && (key.algorithm == sig.algorithm))
|
|
525
|
-
return key, sig
|
|
526
|
-
end
|
|
527
|
-
}
|
|
528
|
-
}
|
|
529
|
-
return nil, nil
|
|
296
|
+
def self.root_verifier
|
|
297
|
+
return @@root_verifier
|
|
530
298
|
end
|
|
531
|
-
|
|
532
|
-
# Verify the signature of an rrset encoded with the specified KeyCache
|
|
533
|
-
# or RRSet. If no signature is included, false is returned.
|
|
534
|
-
#
|
|
535
|
-
# Returns true if the RRSet verified, false otherwise.
|
|
536
|
-
def self.verify_rrset(rrset, keys = nil)
|
|
537
|
-
# @TODO@ Finer-grained reporting than "false".
|
|
538
|
-
sigrecs = rrset.sigs
|
|
539
|
-
# return false if (rrset.num_sigs == 0)
|
|
540
|
-
if (rrset.num_sigs == 0)
|
|
541
|
-
raise VerifyError.new("No signatures in the RRSet")
|
|
542
|
-
end
|
|
543
|
-
sigrecs.each do |sigrec|
|
|
544
|
-
check_rr_data(rrset, sigrec)
|
|
545
|
-
end
|
|
546
299
|
|
|
547
|
-
keyrec = nil
|
|
548
|
-
sigrec = nil
|
|
549
|
-
if keys.nil?
|
|
550
|
-
if (rrset.rrs()[0].type == Types.DNSKEY)
|
|
551
|
-
check_to_be_trusted(rrset)
|
|
552
|
-
end
|
|
553
|
-
keyrec, sigrec = get_matching_key(get_keys_to_check, sigrecs)
|
|
554
|
-
else
|
|
555
|
-
keyrec, sigrec = get_matching_key(keys, sigrecs)
|
|
556
|
-
end
|
|
557
|
-
|
|
558
|
-
# return false if !keyrec
|
|
559
|
-
if (!keyrec)
|
|
560
|
-
raise VerifyError.new("Signing key not found")
|
|
561
|
-
end
|
|
562
|
-
|
|
563
|
-
# RFC 4034
|
|
564
|
-
#3.1.8.1. Signature Calculation
|
|
565
|
-
|
|
566
|
-
if (keyrec.sep_key? && !keyrec.zone_key?)
|
|
567
|
-
Dnsruby.log.error("DNSKEY with with SEP flag set and Zone Key flag not set was used to verify RRSIG over RRSET - this is not allowed by RFC4034 section 2.1.1")
|
|
568
|
-
# return false
|
|
569
|
-
raise VerifyError.new("DNSKEY with SEP flag set and Zone Key flag not set")
|
|
570
|
-
end
|
|
571
|
-
|
|
572
|
-
#Any DNS names in the RDATA field of each RR MUST be in
|
|
573
|
-
#canonical form; and
|
|
574
|
-
#The RRset MUST be sorted in canonical order.
|
|
575
|
-
rrset = rrset.sort_canonical
|
|
576
300
|
|
|
577
|
-
sig_data = sigrec.sig_data
|
|
578
301
|
|
|
579
|
-
#RR(i) = owner | type | class | TTL | RDATA length | RDATA
|
|
580
|
-
rrset.each do |rec|
|
|
581
|
-
old_ttl = rec.ttl
|
|
582
|
-
rec.ttl = sigrec.original_ttl
|
|
583
|
-
data = MessageEncoder.new { |msg|
|
|
584
|
-
msg.put_rr(rec, true)
|
|
585
|
-
}.to_s # @TODO@ worry about wildcards here?
|
|
586
|
-
rec.ttl = old_ttl
|
|
587
|
-
if (RUBY_VERSION >= "1.9")
|
|
588
|
-
data.force_encoding("ASCII-8BIT")
|
|
589
|
-
end
|
|
590
|
-
sig_data += data
|
|
591
|
-
end
|
|
592
|
-
|
|
593
|
-
# Now calculate the signature
|
|
594
|
-
verified = false
|
|
595
|
-
if (sigrec.algorithm == Algorithms.RSASHA1)
|
|
596
|
-
verified = keyrec.public_key.verify(OpenSSL::Digest::SHA1.new, sigrec.signature, sig_data)
|
|
597
|
-
elsif (sigrec.algorithm == Algorithms.RSASHA256)
|
|
598
|
-
verified = keyrec.public_key.verify(OpenSSL::Digest::SHA256.new, sigrec.signature, sig_data)
|
|
599
|
-
else
|
|
600
|
-
raise RuntimeError.new("Algorithm #{sigrec.algorithm.code} unsupported by Dnsruby")
|
|
601
|
-
end
|
|
602
|
-
|
|
603
|
-
if (!verified)
|
|
604
|
-
raise VerifyError.new("Signature failed to cryptographically verify")
|
|
605
|
-
end
|
|
606
|
-
# Sort out the TTLs - set it to the minimum valid ttl
|
|
607
|
-
expiration_diff = (sigrec.expiration.to_i - Time.now.to_i).abs
|
|
608
|
-
rrset.ttl = ([rrset.ttl, sigrec.ttl, sigrec.original_ttl,
|
|
609
|
-
expiration_diff].sort)[0]
|
|
610
302
|
|
|
611
|
-
|
|
303
|
+
def self.verify_rrset(rrset, keys = nil)
|
|
304
|
+
return ((@@anchor_verifier.verify_rrset(rrset, keys) ||
|
|
305
|
+
@@root_verifier.verify_rrset(rrset, keys) ||
|
|
306
|
+
@@dlv_verifier.verify_rrset(rrset, keys)))
|
|
612
307
|
end
|
|
613
|
-
|
|
614
|
-
end
|
|
308
|
+
end
|
|
615
309
|
end
|