dnsruby 1.55 → 1.56.0
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.
- checksums.yaml +4 -4
- data/README.md +96 -0
- data/Rakefile +30 -29
- data/demo/axfr.rb +93 -93
- data/demo/check_soa.rb +99 -99
- data/demo/check_zone.rb +59 -59
- data/demo/digdlv.rb +43 -43
- data/demo/digroot.rb +34 -34
- data/demo/example_recurse.rb +14 -14
- data/demo/mresolv.rb +30 -30
- data/demo/mx.rb +31 -31
- data/demo/rubydig.rb +37 -37
- data/demo/to_resolve.txt +3088 -3088
- data/demo/trace_dns.rb +46 -46
- data/lib/dnsruby.rb +161 -526
- data/lib/dnsruby/DNS.rb +305 -0
- data/lib/{Dnsruby/Cache.rb → dnsruby/cache.rb} +152 -152
- data/lib/{Dnsruby → dnsruby}/code_mapper.rb +48 -52
- data/lib/dnsruby/code_mappers.rb +295 -0
- data/lib/{Dnsruby/Config.rb → dnsruby/config.rb} +454 -454
- data/lib/{Dnsruby → dnsruby}/dnssec.rb +91 -91
- data/lib/{Dnsruby/Hosts.rb → dnsruby/hosts.rb} +125 -125
- data/lib/{Dnsruby → dnsruby}/ipv4.rb +26 -26
- data/lib/{Dnsruby → dnsruby}/ipv6.rb +42 -42
- data/lib/{Dnsruby → dnsruby}/key_cache.rb +29 -29
- data/lib/dnsruby/message/decoder.rb +164 -0
- data/lib/dnsruby/message/encoder.rb +75 -0
- data/lib/dnsruby/message/header.rb +249 -0
- data/lib/dnsruby/message/message.rb +629 -0
- data/lib/dnsruby/message/question.rb +86 -0
- data/lib/dnsruby/message/section.rb +96 -0
- data/lib/{Dnsruby → dnsruby}/name.rb +141 -141
- data/lib/dnsruby/packet_sender.rb +661 -0
- data/lib/{Dnsruby/Recursor.rb → dnsruby/recursor.rb} +235 -233
- data/lib/dnsruby/resolv.rb +113 -0
- data/lib/dnsruby/resolver.rb +1192 -0
- data/lib/dnsruby/resource/A.rb +56 -0
- data/lib/dnsruby/resource/AAAA.rb +54 -0
- data/lib/{Dnsruby → dnsruby}/resource/AFSDB.rb +68 -68
- data/lib/{Dnsruby → dnsruby}/resource/CERT.rb +105 -105
- data/lib/{Dnsruby → dnsruby}/resource/DHCID.rb +54 -54
- data/lib/dnsruby/resource/DLV.rb +27 -0
- data/lib/{Dnsruby → dnsruby}/resource/DNSKEY.rb +372 -372
- data/lib/{Dnsruby → dnsruby}/resource/DS.rb +255 -255
- data/lib/{Dnsruby → dnsruby}/resource/HINFO.rb +71 -71
- data/lib/{Dnsruby → dnsruby}/resource/HIP.rb +29 -29
- data/lib/{Dnsruby → dnsruby}/resource/IN.rb +30 -30
- data/lib/{Dnsruby → dnsruby}/resource/IPSECKEY.rb +31 -31
- data/lib/{Dnsruby → dnsruby}/resource/ISDN.rb +62 -62
- data/lib/{Dnsruby → dnsruby}/resource/KX.rb +65 -65
- data/lib/{Dnsruby → dnsruby}/resource/LOC.rb +263 -263
- data/lib/{Dnsruby → dnsruby}/resource/MINFO.rb +69 -69
- data/lib/{Dnsruby → dnsruby}/resource/MX.rb +65 -65
- data/lib/{Dnsruby → dnsruby}/resource/NAPTR.rb +98 -98
- data/lib/{Dnsruby → dnsruby}/resource/NSAP.rb +171 -171
- data/lib/dnsruby/resource/NSEC.rb +275 -0
- data/lib/dnsruby/resource/NSEC3.rb +332 -0
- data/lib/dnsruby/resource/NSEC3PARAM.rb +135 -0
- data/lib/dnsruby/resource/OPT.rb +272 -0
- data/lib/{Dnsruby → dnsruby}/resource/PX.rb +70 -70
- data/lib/{Dnsruby → dnsruby}/resource/RP.rb +75 -75
- data/lib/dnsruby/resource/RR.rb +421 -0
- data/lib/dnsruby/resource/RRSIG.rb +275 -0
- data/lib/dnsruby/resource/RRSet.rb +190 -0
- data/lib/{Dnsruby → dnsruby}/resource/RT.rb +67 -67
- data/lib/{Dnsruby → dnsruby}/resource/SOA.rb +94 -94
- data/lib/dnsruby/resource/SPF.rb +29 -0
- data/lib/dnsruby/resource/SRV.rb +112 -0
- data/lib/{Dnsruby → dnsruby}/resource/SSHFP.rb +14 -14
- data/lib/dnsruby/resource/TKEY.rb +163 -0
- data/lib/dnsruby/resource/TSIG.rb +593 -0
- data/lib/{Dnsruby → dnsruby}/resource/TXT.rb +191 -191
- data/lib/dnsruby/resource/X25.rb +55 -0
- data/lib/{Dnsruby → dnsruby}/resource/domain_name.rb +25 -25
- data/lib/{Dnsruby → dnsruby}/resource/generic.rb +80 -80
- data/lib/dnsruby/resource/resource.rb +25 -0
- data/lib/{Dnsruby → dnsruby}/select_thread.rb +148 -148
- data/lib/{Dnsruby/SingleResolver.rb → dnsruby/single_resolver.rb} +60 -60
- data/lib/{Dnsruby → dnsruby}/single_verifier.rb +344 -344
- data/lib/dnsruby/the_log.rb +44 -0
- data/lib/dnsruby/update.rb +278 -0
- data/lib/dnsruby/validator_thread.rb +124 -0
- data/lib/dnsruby/version.rb +3 -0
- data/lib/{Dnsruby → dnsruby}/zone_reader.rb +93 -93
- data/lib/{Dnsruby → dnsruby}/zone_transfer.rb +377 -377
- data/test/spec_helper.rb +16 -0
- data/test/tc_axfr.rb +31 -34
- data/test/tc_cache.rb +32 -32
- data/test/tc_dlv.rb +28 -28
- data/test/tc_dns.rb +73 -76
- data/test/tc_dnskey.rb +31 -32
- data/test/tc_dnsruby.rb +50 -44
- data/test/tc_ds.rb +36 -36
- data/test/tc_escapedchars.rb +252 -255
- data/test/tc_hash.rb +17 -21
- data/test/tc_header.rb +48 -57
- data/test/tc_hip.rb +19 -22
- data/test/tc_ipseckey.rb +18 -21
- data/test/tc_keith.rb +300 -0
- data/test/tc_message.rb +87 -0
- data/test/tc_misc.rb +83 -87
- data/test/tc_name.rb +81 -84
- data/test/tc_naptr.rb +18 -21
- data/test/tc_nsec.rb +55 -55
- data/test/tc_nsec3.rb +23 -24
- data/test/tc_nsec3param.rb +20 -21
- data/test/tc_packet.rb +90 -93
- data/test/tc_packet_unique_push.rb +48 -51
- data/test/tc_question.rb +30 -33
- data/test/tc_queue.rb +16 -17
- data/test/tc_recur.rb +16 -17
- data/test/tc_res_config.rb +38 -41
- data/test/tc_res_env.rb +29 -32
- data/test/tc_res_file.rb +26 -29
- data/test/tc_res_opt.rb +62 -65
- data/test/tc_resolver.rb +287 -242
- data/test/tc_rr-opt.rb +70 -63
- data/test/tc_rr-txt.rb +68 -71
- data/test/tc_rr-unknown.rb +45 -48
- data/test/tc_rr.rb +76 -70
- data/test/tc_rrset.rb +21 -22
- data/test/tc_rrsig.rb +19 -20
- data/test/tc_single_resolver.rb +294 -297
- data/test/tc_soak.rb +199 -202
- data/test/tc_soak_base.rb +29 -34
- data/test/tc_sshfp.rb +20 -23
- data/test/tc_tcp.rb +32 -35
- data/test/tc_tkey.rb +41 -44
- data/test/tc_tsig.rb +81 -84
- data/test/tc_update.rb +108 -111
- data/test/tc_validator.rb +29 -29
- data/test/tc_verifier.rb +81 -82
- data/test/ts_dnsruby.rb +16 -15
- data/test/ts_offline.rb +62 -63
- data/test/ts_online.rb +115 -115
- metadata +155 -90
- data/README +0 -59
- data/lib/Dnsruby/DNS.rb +0 -305
- data/lib/Dnsruby/PacketSender.rb +0 -656
- data/lib/Dnsruby/Resolver.rb +0 -1189
- data/lib/Dnsruby/TheLog.rb +0 -44
- data/lib/Dnsruby/message.rb +0 -1230
- data/lib/Dnsruby/resource/A.rb +0 -56
- data/lib/Dnsruby/resource/AAAA.rb +0 -54
- data/lib/Dnsruby/resource/DLV.rb +0 -27
- data/lib/Dnsruby/resource/NSEC.rb +0 -298
- data/lib/Dnsruby/resource/NSEC3.rb +0 -340
- data/lib/Dnsruby/resource/NSEC3PARAM.rb +0 -135
- data/lib/Dnsruby/resource/OPT.rb +0 -213
- data/lib/Dnsruby/resource/RRSIG.rb +0 -275
- data/lib/Dnsruby/resource/SPF.rb +0 -29
- data/lib/Dnsruby/resource/SRV.rb +0 -112
- data/lib/Dnsruby/resource/TKEY.rb +0 -163
- data/lib/Dnsruby/resource/TSIG.rb +0 -593
- data/lib/Dnsruby/resource/X25.rb +0 -55
- data/lib/Dnsruby/resource/resource.rb +0 -678
- data/lib/Dnsruby/update.rb +0 -278
- data/lib/Dnsruby/validator_thread.rb +0 -124
|
@@ -0,0 +1,56 @@
|
|
|
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 for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
# ++
|
|
16
|
+
module Dnsruby
|
|
17
|
+
class RR
|
|
18
|
+
module IN
|
|
19
|
+
# Class for DNS Address (A) resource records.
|
|
20
|
+
#
|
|
21
|
+
# RFC 1035 Section 3.4.1
|
|
22
|
+
class A < RR
|
|
23
|
+
ClassHash[[TypeValue = Types::A, ClassValue = ClassValue]] = self #:nodoc: all
|
|
24
|
+
|
|
25
|
+
# The RR's (Resolv::IPv4) address field
|
|
26
|
+
attr_accessor :address
|
|
27
|
+
|
|
28
|
+
def from_data(data) #:nodoc: all
|
|
29
|
+
@address = IPv4.create(data)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Create the RR from a hash
|
|
33
|
+
def from_hash(hash)
|
|
34
|
+
@address = IPv4.create(hash[:address])
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Create the RR from a standard string
|
|
38
|
+
def from_string(input)
|
|
39
|
+
@address = IPv4.create(input)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def rdata_to_string
|
|
43
|
+
return @address.to_s
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def encode_rdata(msg, canonical=false) #:nodoc: all
|
|
47
|
+
msg.put_bytes(@address.address)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def self.decode_rdata(msg) #:nodoc: all
|
|
51
|
+
return self.new(IPv4.new(msg.get_bytes(4)))
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
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 for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
# ++
|
|
16
|
+
module Dnsruby
|
|
17
|
+
class RR
|
|
18
|
+
module IN
|
|
19
|
+
# Class for DNS IPv6 Address (AAAA) resource records.
|
|
20
|
+
#
|
|
21
|
+
# RFC 1886 Section 2, RFC 1884 Sections 2.2 & 2.4.4
|
|
22
|
+
class AAAA < RR
|
|
23
|
+
ClassHash[[TypeValue = Types::AAAA, ClassValue = ClassValue]] = self #:nodoc: all
|
|
24
|
+
|
|
25
|
+
# The RR's (Resolv::IPv6) address field
|
|
26
|
+
attr_accessor :address
|
|
27
|
+
|
|
28
|
+
def from_data(data) #:nodoc: all
|
|
29
|
+
@address = IPv6.create(data)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def from_hash(hash) #:nodoc: all
|
|
33
|
+
@address = IPv6.create(hash[:address])
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def from_string(input) #:nodoc: all
|
|
37
|
+
@address = IPv6.create(input)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def rdata_to_string #:nodoc: all
|
|
41
|
+
return @address.to_s
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def encode_rdata(msg, canonical=false) #:nodoc: all
|
|
45
|
+
msg.put_bytes(@address.address)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def self.decode_rdata(msg) #:nodoc: all
|
|
49
|
+
return self.new(IPv6.new(msg.get_bytes(16)))
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -1,68 +1,68 @@
|
|
|
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 for the specific language governing permissions and
|
|
14
|
-
#limitations under the License.
|
|
15
|
-
|
|
16
|
-
module Dnsruby
|
|
17
|
-
class RR
|
|
18
|
-
module IN
|
|
19
|
-
#Class for DNS AFS Data Base (AFSDB) resource records.
|
|
20
|
-
#
|
|
21
|
-
#RFC 1183 Section 1
|
|
22
|
-
class AFSDB < RR
|
|
23
|
-
ClassHash[[TypeValue = Types::AFSDB, ClassValue = ClassValue]] = self #:nodoc: all
|
|
24
|
-
|
|
25
|
-
#The RR's subtype field. See RFC 1183.
|
|
26
|
-
attr_accessor :subtype
|
|
27
|
-
|
|
28
|
-
#The RR's hostname field. See RFC 1183.
|
|
29
|
-
attr_accessor :hostname
|
|
30
|
-
|
|
31
|
-
def from_hash(hash) #:nodoc: all
|
|
32
|
-
@subtype = hash[:subtype]
|
|
33
|
-
@hostname = Name.create(hash[:hostname])
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def from_data(data) #:nodoc: all
|
|
37
|
-
@subtype, @hostname = data
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def from_string(input) #:nodoc: all
|
|
41
|
-
if (input!=nil && (input =~ /^(\d+)\s+(\S+)$/o))
|
|
42
|
-
@subtype = $1;
|
|
43
|
-
@hostname = Name.create($2)
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def rdata_to_string #:nodoc: all
|
|
48
|
-
if defined?@subtype
|
|
49
|
-
return "#{@subtype} #{@hostname.to_s(true)}"
|
|
50
|
-
else
|
|
51
|
-
return '';
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def encode_rdata(msg, canonical=false) #:nodoc: all
|
|
56
|
-
msg.put_pack("n", @subtype.to_i)
|
|
57
|
-
msg.put_name(@hostname, canonical)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def self.decode_rdata(msg) #:nodoc: all
|
|
61
|
-
subtype, = msg.get_unpack("n")
|
|
62
|
-
hostname = msg.get_name
|
|
63
|
-
return self.new([subtype, hostname])
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
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 for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
# ++
|
|
16
|
+
module Dnsruby
|
|
17
|
+
class RR
|
|
18
|
+
module IN
|
|
19
|
+
# Class for DNS AFS Data Base (AFSDB) resource records.
|
|
20
|
+
#
|
|
21
|
+
# RFC 1183 Section 1
|
|
22
|
+
class AFSDB < RR
|
|
23
|
+
ClassHash[[TypeValue = Types::AFSDB, ClassValue = ClassValue]] = self #:nodoc: all
|
|
24
|
+
|
|
25
|
+
# The RR's subtype field. See RFC 1183.
|
|
26
|
+
attr_accessor :subtype
|
|
27
|
+
|
|
28
|
+
# The RR's hostname field. See RFC 1183.
|
|
29
|
+
attr_accessor :hostname
|
|
30
|
+
|
|
31
|
+
def from_hash(hash) #:nodoc: all
|
|
32
|
+
@subtype = hash[:subtype]
|
|
33
|
+
@hostname = Name.create(hash[:hostname])
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def from_data(data) #:nodoc: all
|
|
37
|
+
@subtype, @hostname = data
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def from_string(input) #:nodoc: all
|
|
41
|
+
if (input!=nil && (input =~ /^(\d+)\s+(\S+)$/o))
|
|
42
|
+
@subtype = $1;
|
|
43
|
+
@hostname = Name.create($2)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def rdata_to_string #:nodoc: all
|
|
48
|
+
if defined?@subtype
|
|
49
|
+
return "#{@subtype} #{@hostname.to_s(true)}"
|
|
50
|
+
else
|
|
51
|
+
return '';
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def encode_rdata(msg, canonical=false) #:nodoc: all
|
|
56
|
+
msg.put_pack("n", @subtype.to_i)
|
|
57
|
+
msg.put_name(@hostname, canonical)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def self.decode_rdata(msg) #:nodoc: all
|
|
61
|
+
subtype, = msg.get_unpack("n")
|
|
62
|
+
hostname = msg.get_name
|
|
63
|
+
return self.new([subtype, hostname])
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -1,105 +1,105 @@
|
|
|
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 for the specific language governing permissions and
|
|
14
|
-
#limitations under the License.
|
|
15
|
-
|
|
16
|
-
module Dnsruby
|
|
17
|
-
class RR
|
|
18
|
-
#Class for DNS Certificate (CERT) resource records. (see RFC 2538)
|
|
19
|
-
#
|
|
20
|
-
#RFC 2782
|
|
21
|
-
class CERT < RR
|
|
22
|
-
ClassValue = nil #:nodoc: all
|
|
23
|
-
TypeValue = Types::CERT #:nodoc: all
|
|
24
|
-
|
|
25
|
-
#Returns the format code for the certificate
|
|
26
|
-
attr_accessor :certtype
|
|
27
|
-
#Returns the key tag for the public key in the certificate
|
|
28
|
-
attr_accessor :keytag
|
|
29
|
-
#Returns the algorithm used by the certificate
|
|
30
|
-
attr_accessor :alg
|
|
31
|
-
#Returns the data comprising the certificate itself (in raw binary form)
|
|
32
|
-
attr_accessor :cert
|
|
33
|
-
|
|
34
|
-
class CertificateTypes < CodeMapper
|
|
35
|
-
PKIX = 1 # PKIX (X.509v3)
|
|
36
|
-
SPKI = 2 # Simple Public Key Infrastructure
|
|
37
|
-
PGP = 3 # Pretty Good Privacy
|
|
38
|
-
IPKIX = 4 # URL of an X.509 data object
|
|
39
|
-
ISPKI = 5 # URL of an SPKI certificate
|
|
40
|
-
IPGP = 6 # Fingerprint and URL of an OpenPGP packet
|
|
41
|
-
ACPKIX = 7 # Attribute Certificate
|
|
42
|
-
IACPKIX = 8 # URL of an Attribute Certificate
|
|
43
|
-
URI = 253 # Certificate format defined by URI
|
|
44
|
-
OID = 254 # Certificate format defined by OID
|
|
45
|
-
|
|
46
|
-
update()
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def from_data(data) #:nodoc: all
|
|
50
|
-
@certtype = CertificateTypes::new(data[0])
|
|
51
|
-
@keytag = data[1]
|
|
52
|
-
@alg = Dnsruby::Algorithms.new(data[2])
|
|
53
|
-
@cert= data[3]
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def from_hash(hash) #:nodoc: all
|
|
57
|
-
@certtype = CertificateTypes::new(hash[:certtype])
|
|
58
|
-
@keytag = hash[:keytag]
|
|
59
|
-
@alg = Dnsruby::Algorithms.new(hash[:alg])
|
|
60
|
-
@cert= hash[:cert]
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def from_string(input) #:nodoc: all
|
|
64
|
-
if (input != "")
|
|
65
|
-
names = input.split(" ")
|
|
66
|
-
begin
|
|
67
|
-
@certtype = CertificateTypes::new(names[0])
|
|
68
|
-
rescue ArgumentError
|
|
69
|
-
@certtype = CertificateTypes::new(names[0].to_i)
|
|
70
|
-
end
|
|
71
|
-
@keytag = names[1].to_i
|
|
72
|
-
begin
|
|
73
|
-
@alg = Dnsruby::Algorithms.new(names[2])
|
|
74
|
-
rescue ArgumentError
|
|
75
|
-
@alg = Dnsruby::Algorithms.new(names[2].to_i)
|
|
76
|
-
end
|
|
77
|
-
buf = ""
|
|
78
|
-
(names.length - 3).times {|index|
|
|
79
|
-
buf += names[index + 3]
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
buf.gsub!(/\n/, "")
|
|
84
|
-
buf.gsub!(/ /, "")
|
|
85
|
-
@cert = buf.unpack("m*").first
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def rdata_to_string #:nodoc: all
|
|
90
|
-
return "#{@certtype.string} #{@keytag} #{@alg.string} #{[@cert.to_s].pack("m*").gsub("\n", "")}"
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
def encode_rdata(msg, canonical=false) #:nodoc: all
|
|
94
|
-
msg.put_pack('nnc', @certtype.code, @keytag, @alg.code)
|
|
95
|
-
msg.put_bytes(@cert)
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
def self.decode_rdata(msg) #:nodoc: all
|
|
99
|
-
certtype, keytag, alg = msg.get_unpack('nnc')
|
|
100
|
-
cert = msg.get_bytes
|
|
101
|
-
return self.new([certtype, keytag, alg, cert])
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
end
|
|
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 for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
# ++
|
|
16
|
+
module Dnsruby
|
|
17
|
+
class RR
|
|
18
|
+
# Class for DNS Certificate (CERT) resource records. (see RFC 2538)
|
|
19
|
+
#
|
|
20
|
+
# RFC 2782
|
|
21
|
+
class CERT < RR
|
|
22
|
+
ClassValue = nil #:nodoc: all
|
|
23
|
+
TypeValue = Types::CERT #:nodoc: all
|
|
24
|
+
|
|
25
|
+
# Returns the format code for the certificate
|
|
26
|
+
attr_accessor :certtype
|
|
27
|
+
# Returns the key tag for the public key in the certificate
|
|
28
|
+
attr_accessor :keytag
|
|
29
|
+
# Returns the algorithm used by the certificate
|
|
30
|
+
attr_accessor :alg
|
|
31
|
+
# Returns the data comprising the certificate itself (in raw binary form)
|
|
32
|
+
attr_accessor :cert
|
|
33
|
+
|
|
34
|
+
class CertificateTypes < CodeMapper
|
|
35
|
+
PKIX = 1 # PKIX (X.509v3)
|
|
36
|
+
SPKI = 2 # Simple Public Key Infrastructure
|
|
37
|
+
PGP = 3 # Pretty Good Privacy
|
|
38
|
+
IPKIX = 4 # URL of an X.509 data object
|
|
39
|
+
ISPKI = 5 # URL of an SPKI certificate
|
|
40
|
+
IPGP = 6 # Fingerprint and URL of an OpenPGP packet
|
|
41
|
+
ACPKIX = 7 # Attribute Certificate
|
|
42
|
+
IACPKIX = 8 # URL of an Attribute Certificate
|
|
43
|
+
URI = 253 # Certificate format defined by URI
|
|
44
|
+
OID = 254 # Certificate format defined by OID
|
|
45
|
+
|
|
46
|
+
update()
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def from_data(data) #:nodoc: all
|
|
50
|
+
@certtype = CertificateTypes::new(data[0])
|
|
51
|
+
@keytag = data[1]
|
|
52
|
+
@alg = Dnsruby::Algorithms.new(data[2])
|
|
53
|
+
@cert= data[3]
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def from_hash(hash) #:nodoc: all
|
|
57
|
+
@certtype = CertificateTypes::new(hash[:certtype])
|
|
58
|
+
@keytag = hash[:keytag]
|
|
59
|
+
@alg = Dnsruby::Algorithms.new(hash[:alg])
|
|
60
|
+
@cert= hash[:cert]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def from_string(input) #:nodoc: all
|
|
64
|
+
if (input != "")
|
|
65
|
+
names = input.split(" ")
|
|
66
|
+
begin
|
|
67
|
+
@certtype = CertificateTypes::new(names[0])
|
|
68
|
+
rescue ArgumentError
|
|
69
|
+
@certtype = CertificateTypes::new(names[0].to_i)
|
|
70
|
+
end
|
|
71
|
+
@keytag = names[1].to_i
|
|
72
|
+
begin
|
|
73
|
+
@alg = Dnsruby::Algorithms.new(names[2])
|
|
74
|
+
rescue ArgumentError
|
|
75
|
+
@alg = Dnsruby::Algorithms.new(names[2].to_i)
|
|
76
|
+
end
|
|
77
|
+
buf = ""
|
|
78
|
+
(names.length - 3).times {|index|
|
|
79
|
+
buf += names[index + 3]
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
buf.gsub!(/\n/, "")
|
|
84
|
+
buf.gsub!(/ /, "")
|
|
85
|
+
@cert = buf.unpack("m*").first
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def rdata_to_string #:nodoc: all
|
|
90
|
+
return "#{@certtype.string} #{@keytag} #{@alg.string} #{[@cert.to_s].pack("m*").gsub("\n", "")}"
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def encode_rdata(msg, canonical=false) #:nodoc: all
|
|
94
|
+
msg.put_pack('nnc', @certtype.code, @keytag, @alg.code)
|
|
95
|
+
msg.put_bytes(@cert)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def self.decode_rdata(msg) #:nodoc: all
|
|
99
|
+
certtype, keytag, alg = msg.get_unpack('nnc')
|
|
100
|
+
cert = msg.get_bytes
|
|
101
|
+
return self.new([certtype, keytag, alg, cert])
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|