faildns 0.0.1
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/bin/failnamed +203 -0
- data/bin/failresolve +37 -0
- data/lib/faildns.rb +20 -0
- data/lib/faildns/class.rb +96 -0
- data/lib/faildns/client.rb +114 -0
- data/lib/faildns/common.rb +52 -0
- data/lib/faildns/domainname.rb +223 -0
- data/lib/faildns/header.rb +254 -0
- data/lib/faildns/header/opcode.rb +95 -0
- data/lib/faildns/header/status.rb +123 -0
- data/lib/faildns/header/type.rb +72 -0
- data/lib/faildns/ip.rb +57 -0
- data/lib/faildns/message.rb +100 -0
- data/lib/faildns/qclass.rb +51 -0
- data/lib/faildns/qtype.rb +60 -0
- data/lib/faildns/question.rb +101 -0
- data/lib/faildns/resourcerecord.rb +140 -0
- data/lib/faildns/resourcerecord/IN.rb +29 -0
- data/lib/faildns/resourcerecord/IN/A.rb +75 -0
- data/lib/faildns/resourcerecord/IN/AAAA.rb +77 -0
- data/lib/faildns/resourcerecord/IN/CNAME.rb +70 -0
- data/lib/faildns/resourcerecord/IN/HINFO.rb +79 -0
- data/lib/faildns/resourcerecord/IN/MX.rb +75 -0
- data/lib/faildns/resourcerecord/IN/NS.rb +77 -0
- data/lib/faildns/resourcerecord/IN/NULL.rb +66 -0
- data/lib/faildns/resourcerecord/IN/PTR.rb +69 -0
- data/lib/faildns/resourcerecord/IN/SOA.rb +128 -0
- data/lib/faildns/resourcerecord/IN/TXT.rb +63 -0
- data/lib/faildns/resourcerecord/data.rb +41 -0
- data/lib/faildns/server.rb +71 -0
- data/lib/faildns/server/dispatcher.rb +181 -0
- data/lib/faildns/server/dispatcher/connectiondispatcher.rb +93 -0
- data/lib/faildns/server/dispatcher/event.rb +47 -0
- data/lib/faildns/server/dispatcher/eventdispatcher.rb +73 -0
- data/lib/faildns/server/dispatcher/socket.rb +93 -0
- data/lib/faildns/type.rb +186 -0
- metadata +100 -0
@@ -0,0 +1,77 @@
|
|
1
|
+
#--
|
2
|
+
# Copyleft meh. [http://meh.doesntexist.org | meh@paranoici.org]
|
3
|
+
#
|
4
|
+
# This file is part of faildns.
|
5
|
+
#
|
6
|
+
# faildns is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU Affero General Public License as published
|
8
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# faildns is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU Affero General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General Public License
|
17
|
+
# along with faildns. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#++
|
19
|
+
|
20
|
+
require 'faildns/resourcerecord/data'
|
21
|
+
require 'faildns/ip'
|
22
|
+
|
23
|
+
module DNS
|
24
|
+
|
25
|
+
class ResourceRecord
|
26
|
+
|
27
|
+
module IN
|
28
|
+
|
29
|
+
#--
|
30
|
+
# +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
31
|
+
# | ADDRESS |
|
32
|
+
# +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
33
|
+
#
|
34
|
+
# where:
|
35
|
+
#
|
36
|
+
# ADDRESS A 128 bit Internet address.
|
37
|
+
#
|
38
|
+
# Hosts that have multiple Internet addresses will have multiple AAAA
|
39
|
+
# records.
|
40
|
+
#
|
41
|
+
# AAAA records cause no additional section processing. The RDATA section of
|
42
|
+
# an AAAA line in a master file is an Internet address expressed as a name in
|
43
|
+
# the IP6.ARPA domain by a sequence of nibbles separated by dots with the suffix
|
44
|
+
# ".IP6.ARPA". The sequence of nibbles is encoded in reverse order, i.e., the
|
45
|
+
# low-order nibble is encoded first, followed by the next low-order
|
46
|
+
# nibble and so on. Each nibble is represented by a hexadecimal digit.
|
47
|
+
#++
|
48
|
+
|
49
|
+
class AAAA < Data
|
50
|
+
def self._parse (string, original)
|
51
|
+
AAAA.new(IP.parse(string))
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.length
|
55
|
+
16
|
56
|
+
end
|
57
|
+
|
58
|
+
attr_reader :ip
|
59
|
+
|
60
|
+
def initialize (what)
|
61
|
+
@ip = IP.new(what)
|
62
|
+
end
|
63
|
+
|
64
|
+
def pack
|
65
|
+
@ip.pack
|
66
|
+
end
|
67
|
+
|
68
|
+
def to_s
|
69
|
+
@ip.to_s
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
#--
|
2
|
+
# Copyleft meh. [http://meh.doesntexist.org | meh@paranoici.org]
|
3
|
+
#
|
4
|
+
# This file is part of faildns.
|
5
|
+
#
|
6
|
+
# faildns is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU Affero General Public License as published
|
8
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# faildns is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU Affero General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General Public License
|
17
|
+
# along with faildns. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#++
|
19
|
+
|
20
|
+
require 'faildns/resourcerecord/data'
|
21
|
+
|
22
|
+
require 'faildns/domainname'
|
23
|
+
|
24
|
+
module DNS
|
25
|
+
|
26
|
+
class ResourceRecord
|
27
|
+
|
28
|
+
module IN
|
29
|
+
|
30
|
+
#--
|
31
|
+
# +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
32
|
+
# / CNAME /
|
33
|
+
# / /
|
34
|
+
# +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
35
|
+
#
|
36
|
+
# where:
|
37
|
+
#
|
38
|
+
# CNAME A <domain-name> which specifies the canonical or primary
|
39
|
+
# name for the owner. The owner name is an alias.
|
40
|
+
#
|
41
|
+
# CNAME RRs cause no additional section processing, but name servers may
|
42
|
+
# choose to restart the query at the canonical name in certain cases. See
|
43
|
+
# the description of name server logic in [RFC-1034] for details.
|
44
|
+
#++
|
45
|
+
|
46
|
+
class CNAME < Data
|
47
|
+
def self._parse (string, original)
|
48
|
+
CNAME.new(DomainName.parse(string.clone, original))
|
49
|
+
end
|
50
|
+
|
51
|
+
attr_reader :domain
|
52
|
+
|
53
|
+
def initialize (domain)
|
54
|
+
@domain = domain
|
55
|
+
end
|
56
|
+
|
57
|
+
def pack
|
58
|
+
@domain.pack
|
59
|
+
end
|
60
|
+
|
61
|
+
def to_s
|
62
|
+
@domain.to_s
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
#--
|
2
|
+
# Copyleft meh. [http://meh.doesntexist.org | meh@paranoici.org]
|
3
|
+
#
|
4
|
+
# This file is part of faildns.
|
5
|
+
#
|
6
|
+
# faildns is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU Affero General Public License as published
|
8
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# faildns is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU Affero General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General Public License
|
17
|
+
# along with faildns. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#++
|
19
|
+
|
20
|
+
require 'faildns/resourcerecord/data'
|
21
|
+
|
22
|
+
module DNS
|
23
|
+
|
24
|
+
class ResourceRecord
|
25
|
+
|
26
|
+
module IN
|
27
|
+
|
28
|
+
#--
|
29
|
+
# +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
30
|
+
# / CPU /
|
31
|
+
# +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
32
|
+
# / OS /
|
33
|
+
# +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
34
|
+
#
|
35
|
+
# where:
|
36
|
+
#
|
37
|
+
# CPU A <character-string> which specifies the CPU type.
|
38
|
+
#
|
39
|
+
# OS A <character-string> which specifies the operating
|
40
|
+
# system type.
|
41
|
+
#
|
42
|
+
# Standard values for CPU and OS can be found in [RFC-1010].
|
43
|
+
#
|
44
|
+
# HINFO records are used to acquire general information about a host. The
|
45
|
+
# main use is for protocols such as FTP that can use special procedures
|
46
|
+
# when talking between machines or operating systems of the same type.
|
47
|
+
#++
|
48
|
+
|
49
|
+
class HINFO < Data
|
50
|
+
def self._parse (string, original)
|
51
|
+
string = string.clone
|
52
|
+
|
53
|
+
cpu = string[1, (tmp = string.unpack('C'))]; string[0, tmp + 1] = ''
|
54
|
+
os = string[1, string.unpack('C')]
|
55
|
+
|
56
|
+
HINFO.new(cpu, os)
|
57
|
+
end
|
58
|
+
|
59
|
+
attr_reader :cpu, :os
|
60
|
+
|
61
|
+
def initialize (cpu, os)
|
62
|
+
@cpu = cpu
|
63
|
+
@os = os
|
64
|
+
end
|
65
|
+
|
66
|
+
def pack
|
67
|
+
[@cpu.length].unpack('C') + @cpu + [@os.length].unpack('C') + @os
|
68
|
+
end
|
69
|
+
|
70
|
+
def to_s
|
71
|
+
"#{@os} on #{@cpu}"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
#--
|
2
|
+
# Copyleft meh. [http://meh.doesntexist.org | meh@paranoici.org]
|
3
|
+
#
|
4
|
+
# This file is part of faildns.
|
5
|
+
#
|
6
|
+
# faildns is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU Affero General Public License as published
|
8
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# faildns is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU Affero General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General Public License
|
17
|
+
# along with faildns. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#++
|
19
|
+
|
20
|
+
require 'faildns/resourcerecord/data'
|
21
|
+
|
22
|
+
module DNS
|
23
|
+
|
24
|
+
class ResourceRecord
|
25
|
+
|
26
|
+
module IN
|
27
|
+
|
28
|
+
#--
|
29
|
+
# +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
30
|
+
# | PREFERENCE |
|
31
|
+
# +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
32
|
+
# / EXCHANGE /
|
33
|
+
# / /
|
34
|
+
# +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
35
|
+
#
|
36
|
+
# where:
|
37
|
+
#
|
38
|
+
# PREFERENCE A 16 bit integer which specifies the preference given to
|
39
|
+
# this RR among others at the same owner. Lower values
|
40
|
+
# are preferred.
|
41
|
+
#
|
42
|
+
# EXCHANGE A <domain-name> which specifies a host willing to act as
|
43
|
+
# a mail exchange for the owner name.
|
44
|
+
#
|
45
|
+
# MX records cause type A additional section processing for the host
|
46
|
+
# specified by EXCHANGE. The use of MX RRs is explained in detail in
|
47
|
+
# [RFC-974].
|
48
|
+
#++
|
49
|
+
|
50
|
+
class MX < Data
|
51
|
+
def self._parse (string, original)
|
52
|
+
MX.new(string.unpack('n'), DomainName.parse(string[2, 255], original))
|
53
|
+
end
|
54
|
+
|
55
|
+
attr_reader :preference, :exchange
|
56
|
+
|
57
|
+
def initialize (preference, exchange)
|
58
|
+
@preference = preference
|
59
|
+
@exchange = exchange
|
60
|
+
end
|
61
|
+
|
62
|
+
def pack
|
63
|
+
[@preference].pack('n') + @exchange.pack
|
64
|
+
end
|
65
|
+
|
66
|
+
def to_s
|
67
|
+
"#{@preference}) #{@exchange}"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
#--
|
2
|
+
# Copyleft meh. [http://meh.doesntexist.org | meh@paranoici.org]
|
3
|
+
#
|
4
|
+
# This file is part of faildns.
|
5
|
+
#
|
6
|
+
# faildns is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU Affero General Public License as published
|
8
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# faildns is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU Affero General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General Public License
|
17
|
+
# along with faildns. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#++
|
19
|
+
|
20
|
+
require 'faildns/resourcerecord/data'
|
21
|
+
|
22
|
+
require 'faildns/domainname'
|
23
|
+
|
24
|
+
module DNS
|
25
|
+
|
26
|
+
class ResourceRecord
|
27
|
+
|
28
|
+
module IN
|
29
|
+
|
30
|
+
#--
|
31
|
+
# +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
32
|
+
# / NSDNAME /
|
33
|
+
# / /
|
34
|
+
# +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
35
|
+
#
|
36
|
+
# where:
|
37
|
+
#
|
38
|
+
# NSDNAME A <domain-name> which specifies a host which should be
|
39
|
+
# authoritative for the specified class and domain.
|
40
|
+
#
|
41
|
+
# NS records cause both the usual additional section processing to locate
|
42
|
+
# a type A record, and, when used in a referral, a special search of the
|
43
|
+
# zone in which they reside for glue information.
|
44
|
+
#
|
45
|
+
# The NS RR states that the named host should be expected to have a zone
|
46
|
+
# starting at owner name of the specified class. Note that the class may
|
47
|
+
# not indicate the protocol family which should be used to communicate
|
48
|
+
# with the host, although it is typically a strong hint. For example,
|
49
|
+
# hosts which are name servers for either Internet (IN) or Hesiod (HS)
|
50
|
+
# class information are normally queried using IN class protocols.
|
51
|
+
#++
|
52
|
+
|
53
|
+
class NS < Data
|
54
|
+
def self._parse (string, original)
|
55
|
+
NS.new(DomainName.parse(string.clone, original))
|
56
|
+
end
|
57
|
+
|
58
|
+
attr_reader :domain
|
59
|
+
|
60
|
+
def initialize (domain)
|
61
|
+
@domain = domain
|
62
|
+
end
|
63
|
+
|
64
|
+
def pack
|
65
|
+
@domain.pack
|
66
|
+
end
|
67
|
+
|
68
|
+
def to_s
|
69
|
+
@domain.to_s
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
#--
|
2
|
+
# Copyleft meh. [http://meh.doesntexist.org | meh@paranoici.org]
|
3
|
+
#
|
4
|
+
# This file is part of faildns.
|
5
|
+
#
|
6
|
+
# faildns is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU Affero General Public License as published
|
8
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# faildns is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU Affero General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General Public License
|
17
|
+
# along with faildns. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#++
|
19
|
+
|
20
|
+
require 'faildns/resourcerecord/data'
|
21
|
+
|
22
|
+
module DNS
|
23
|
+
|
24
|
+
class ResourceRecord
|
25
|
+
|
26
|
+
module IN
|
27
|
+
|
28
|
+
#--
|
29
|
+
# +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
30
|
+
# / <anything> /
|
31
|
+
# / /
|
32
|
+
# +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
33
|
+
#
|
34
|
+
# Anything at all may be in the RDATA field so long as it is 65535 octets
|
35
|
+
# or less.
|
36
|
+
#
|
37
|
+
# NULL records cause no additional section processing. NULL RRs are not
|
38
|
+
# allowed in master files. NULLs are used as placeholders in some
|
39
|
+
# experimental extensions of the DNS.
|
40
|
+
#++
|
41
|
+
|
42
|
+
class NULL < Data
|
43
|
+
def self._parse (string, original)
|
44
|
+
NULL.new(string)
|
45
|
+
end
|
46
|
+
|
47
|
+
attr_reader :raw
|
48
|
+
|
49
|
+
def initialize (raw)
|
50
|
+
@raw = raw
|
51
|
+
end
|
52
|
+
|
53
|
+
def pack
|
54
|
+
@raw
|
55
|
+
end
|
56
|
+
|
57
|
+
def to_s
|
58
|
+
@raw
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|