ipaccess 0.0.4 → 1.2.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 +15 -0
- checksums.yaml.gz.sig +1 -0
- data.tar.gz.sig +0 -0
- data/.gemtest +0 -0
- data/.rspec +1 -0
- data/.yardopts +12 -0
- data/ChangeLog +1495 -0
- data/{docs/LGPL-LICENSE → LGPL-LICENSE} +0 -0
- data/Manifest.txt +76 -0
- data/README.md +96 -0
- data/Rakefile +65 -42
- data/docs/COPYING +41 -45
- data/docs/FAQ +12 -0
- data/docs/HISTORY +17 -0
- data/docs/LEGAL +1 -1
- data/docs/LGPL +166 -0
- data/docs/TODO +150 -7
- data/docs/images/ipaccess.png +0 -0
- data/docs/images/ipaccess_ac_for_args.png +0 -0
- data/docs/images/ipaccess_ac_for_socket.png +0 -0
- data/docs/images/ipaccess_logo.png +0 -0
- data/docs/images/ipaccess_relations.png +0 -0
- data/docs/images/ipaccess_setup_origin.png +0 -0
- data/docs/images/ipaccess_setup_origin_tab.png +0 -0
- data/docs/images/ipaccess_view.png +0 -0
- data/docs/rdoc.css +22 -0
- data/examples/ftp.rb +62 -0
- data/examples/http.rb +81 -0
- data/examples/imap.rb +37 -0
- data/examples/pop.rb +31 -0
- data/examples/smtp.rb +26 -0
- data/examples/tcp_server.rb +32 -0
- data/examples/tcp_socket.rb +7 -3
- data/examples/telnet.rb +32 -0
- data/examples/text_message.rb +45 -0
- data/lib/ipaccess.rb +557 -7
- data/lib/ipaccess/arm_sockets.rb +7 -4
- data/lib/ipaccess/ghost_doc/ghost_doc.rb +23 -0
- data/lib/ipaccess/ghost_doc/ghost_doc_acl.rb +54 -0
- data/lib/ipaccess/ghost_doc/ghost_doc_net_ftp.rb +213 -0
- data/lib/ipaccess/ghost_doc/ghost_doc_net_http.rb +272 -0
- data/lib/ipaccess/ghost_doc/ghost_doc_net_smtp.rb +186 -0
- data/lib/ipaccess/ghost_doc/ghost_doc_net_telnet.rb +227 -0
- data/lib/ipaccess/ghost_doc/ghost_doc_p_blacklist.rb +36 -0
- data/lib/ipaccess/ghost_doc/ghost_doc_p_blacklist_e.rb +7 -0
- data/lib/ipaccess/ghost_doc/ghost_doc_p_unblacklist.rb +36 -0
- data/lib/ipaccess/ghost_doc/ghost_doc_p_unblacklist_e.rb +7 -0
- data/lib/ipaccess/ghost_doc/ghost_doc_p_unwhitelist.rb +36 -0
- data/lib/ipaccess/ghost_doc/ghost_doc_p_unwhitelist_e.rb +7 -0
- data/lib/ipaccess/ghost_doc/ghost_doc_p_whitelist.rb +36 -0
- data/lib/ipaccess/ghost_doc/ghost_doc_p_whitelist_e.rb +7 -0
- data/lib/ipaccess/ghost_doc/ghost_doc_patched_usage.rb +64 -0
- data/lib/ipaccess/ghost_doc/ghost_doc_sockets.rb +571 -0
- data/lib/ipaccess/ip_access_check.rb +508 -0
- data/lib/ipaccess/ip_access_errors.rb +186 -40
- data/lib/ipaccess/ip_access_list.rb +955 -1122
- data/lib/ipaccess/ip_access_set.rb +212 -0
- data/lib/ipaccess/net/ftp.rb +39 -0
- data/lib/ipaccess/net/http.rb +39 -0
- data/lib/ipaccess/net/https.rb +30 -0
- data/lib/ipaccess/net/imap.rb +39 -0
- data/lib/ipaccess/net/pop.rb +46 -0
- data/lib/ipaccess/net/smtp.rb +39 -0
- data/lib/ipaccess/net/telnet.rb +38 -0
- data/lib/ipaccess/patches/generic.rb +807 -0
- data/lib/ipaccess/patches/net_ftp.rb +165 -0
- data/lib/ipaccess/patches/net_http.rb +175 -0
- data/lib/ipaccess/patches/net_https.rb +29 -0
- data/lib/ipaccess/patches/net_imap.rb +117 -0
- data/lib/ipaccess/patches/net_pop.rb +171 -0
- data/lib/ipaccess/patches/net_smtp.rb +130 -0
- data/lib/ipaccess/patches/net_telnet.rb +103 -0
- data/lib/ipaccess/{netaddr_patch.rb → patches/netaddr.rb} +20 -11
- data/lib/ipaccess/patches/sockets.rb +586 -0
- data/lib/ipaccess/socket.rb +52 -1
- data/lib/ipaccess/sockets.rb +4 -30
- data/spec/ip_access_list_spec.rb +33 -21
- data/spec/spec.opts +2 -2
- metadata +289 -63
- metadata.gz.sig +0 -0
- data/docs/DOWNLOAD +0 -17
- data/docs/README +0 -95
- data/docs/WELCOME +0 -8
- data/lib/ipaccess/ghost_doc.rb +0 -206
- data/lib/ipaccess/ghost_doc_acl.rb +0 -31
- data/lib/ipaccess/ip_access.rb +0 -456
- data/lib/ipaccess/ip_access_patches.rb +0 -431
- data/spec/core_spec.rb +0 -5
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
#
|
|
3
|
+
# Author:: Paweł Wilk (mailto:pw@gnu.org)
|
|
4
|
+
# Copyright:: Copyright (c) 2009-2014 by Paweł Wilk
|
|
5
|
+
# License:: This program is licensed under the terms of {GNU Lesser General Public License}[link:docs/LGPL.html] or {Ruby License}[link:docs/COPYING.html].
|
|
6
|
+
#
|
|
7
|
+
# Modules contained in this file are meant for
|
|
8
|
+
# patching Ruby's Net::POP3 class in order to add
|
|
9
|
+
# IP access control to it. It is also used
|
|
10
|
+
# to create variant of Net::POP3 class
|
|
11
|
+
# with IP access control.
|
|
12
|
+
#
|
|
13
|
+
#--
|
|
14
|
+
#
|
|
15
|
+
# Copyright (C) 2009 by Paweł Wilk. All Rights Reserved.
|
|
16
|
+
#
|
|
17
|
+
# This program is free software; you can redistribute it and/or modify
|
|
18
|
+
# it under the terms of either: 1) the GNU Lesser General Public License
|
|
19
|
+
# as published by the Free Software Foundation; either version 3 of the
|
|
20
|
+
# License, or (at your option) any later version; or 2) Ruby's License.
|
|
21
|
+
#
|
|
22
|
+
# See the file COPYING for complete licensing information.
|
|
23
|
+
#
|
|
24
|
+
#++
|
|
25
|
+
#
|
|
26
|
+
|
|
27
|
+
require 'socket'
|
|
28
|
+
require 'net/pop'
|
|
29
|
+
require 'ipaccess/ip_access_errors'
|
|
30
|
+
require 'ipaccess/patches/generic'
|
|
31
|
+
require 'ipaccess/patches/sockets'
|
|
32
|
+
|
|
33
|
+
# :stopdoc:
|
|
34
|
+
|
|
35
|
+
module IPAccess::Patches::Net
|
|
36
|
+
|
|
37
|
+
###################################################################
|
|
38
|
+
# Net::POP3 class with IP access control.
|
|
39
|
+
# It uses output access lists.
|
|
40
|
+
|
|
41
|
+
module POP3
|
|
42
|
+
|
|
43
|
+
include IPAccess::Patches::ACL
|
|
44
|
+
|
|
45
|
+
def self.included(base)
|
|
46
|
+
|
|
47
|
+
marker = (base.name =~ /IPAccess/) ? base.superclass : base
|
|
48
|
+
return if marker.instance_variable_defined?(:@uses_ipaccess)
|
|
49
|
+
base.instance_variable_set(:@uses_ipaccess, true)
|
|
50
|
+
|
|
51
|
+
base.class_eval do
|
|
52
|
+
|
|
53
|
+
# CLASS METHODS
|
|
54
|
+
unless (base.name.nil? && base.class.name == "Class")
|
|
55
|
+
(class << self; self; end).class_eval do
|
|
56
|
+
|
|
57
|
+
# overwrite POP3.start()
|
|
58
|
+
define_method :__ipacall__start do |block, address, *args|
|
|
59
|
+
late_on_deny = nil
|
|
60
|
+
args.delete_if { |x| late_on_deny = x if (x.is_a?(Symbol) && x == :opened_on_deny) }
|
|
61
|
+
args.pop if args.last.nil?
|
|
62
|
+
late_acl = IPAccess.valid_acl?(args.last) ? args.pop : :global
|
|
63
|
+
port, account, password, isapop = *args
|
|
64
|
+
isapop = false if isapop.nil?
|
|
65
|
+
obj = new(address, port, isapop, late_acl, late_on_deny)
|
|
66
|
+
obj.start(account, password, &block)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# block passing wrapper for Ruby 1.8
|
|
70
|
+
def start(address, *args, &block)
|
|
71
|
+
__ipacall__start(block, address, *args)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# overwrite POP3.delete_all()
|
|
75
|
+
define_method :__ipacall__delete_all do |block, address, *args|
|
|
76
|
+
start(address, *args) { |pop|
|
|
77
|
+
pop.delete_all(&block)
|
|
78
|
+
}
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# block passing wrapper for Ruby 1.8
|
|
82
|
+
def delete_all(address, *args, &block)
|
|
83
|
+
__ipacall__delete_all(block, address, *args)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# overwrite POP3.auth_only()
|
|
87
|
+
define_method :auth_only do |address, *args|
|
|
88
|
+
port, account, password, isapop, late_acl = *args
|
|
89
|
+
new(address, port, isapop, late_acl).auth_only account, password
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# overwrite POP3.foreach()
|
|
93
|
+
define_method :__ipacall__foreach do |block, address, *args|
|
|
94
|
+
start(address, *args) { |pop|
|
|
95
|
+
pop.each_mail(&block)
|
|
96
|
+
}
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# block passing wrapper for Ruby 1.8
|
|
100
|
+
def foreach(address, *args, &block)
|
|
101
|
+
__ipacall__foreach(block, address, *args)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
end # class methods
|
|
107
|
+
|
|
108
|
+
orig_initialize = self.instance_method :initialize
|
|
109
|
+
orig_do_start = self.instance_method :do_start
|
|
110
|
+
orig_on_connect = self.instance_method :on_connect
|
|
111
|
+
|
|
112
|
+
# initialize on steroids.
|
|
113
|
+
define_method :initialize do |addr, *args|
|
|
114
|
+
@opened_on_deny = false
|
|
115
|
+
args.delete_if { |x| @opened_on_deny = true if (x.is_a?(Symbol) && x == :opened_on_deny) }
|
|
116
|
+
args.pop if args.last.nil?
|
|
117
|
+
self.acl = IPAccess.valid_acl?(args.last) ? args.pop : :global
|
|
118
|
+
obj = orig_initialize.bind(self).call(addr, *args)
|
|
119
|
+
self.acl_recheck
|
|
120
|
+
return obj
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# start on steroids.
|
|
124
|
+
define_method :do_start do |account, password|
|
|
125
|
+
prev_addr = @address
|
|
126
|
+
ipaddr = ::TCPSocket.getaddress(@address)
|
|
127
|
+
real_acl.output.check_ipstring(ipaddr, self)
|
|
128
|
+
@address = ipaddr
|
|
129
|
+
ret = orig_do_start.bind(self).call(account, password)
|
|
130
|
+
@address = prev_addr
|
|
131
|
+
self.acl_recheck
|
|
132
|
+
return ret
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# on_connect on steroids.
|
|
136
|
+
define_method :on_connect do
|
|
137
|
+
acl_recheck
|
|
138
|
+
orig_on_connect.bind(self).call
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# This method returns default access list indicator
|
|
142
|
+
# used by protected object; in this case it's +:output+.
|
|
143
|
+
define_method :default_list do
|
|
144
|
+
:output
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# this hook will be called each time @acl is reassigned
|
|
148
|
+
define_method :acl_recheck do
|
|
149
|
+
try_arm_and_check_socket @socket
|
|
150
|
+
nil
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# this hook terminates connection
|
|
154
|
+
define_method :terminate do
|
|
155
|
+
self.finish if started?
|
|
156
|
+
nil
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
end # base.class_eval
|
|
160
|
+
|
|
161
|
+
end # self.included
|
|
162
|
+
|
|
163
|
+
end # module POP3
|
|
164
|
+
|
|
165
|
+
# patching APOP works the same way as patching POP3
|
|
166
|
+
APOP = :POP3
|
|
167
|
+
|
|
168
|
+
end # module IPAccess::Patches
|
|
169
|
+
|
|
170
|
+
# :startdoc:
|
|
171
|
+
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
#
|
|
3
|
+
# Author:: Paweł Wilk (mailto:pw@gnu.org)
|
|
4
|
+
# Copyright:: Copyright (c) 2009-2014 by Paweł Wilk
|
|
5
|
+
# License:: This program is licensed under the terms of {GNU Lesser General Public License}[link:docs/LGPL.html] or {Ruby License}[link:docs/COPYING.html].
|
|
6
|
+
#
|
|
7
|
+
# Modules contained in this file are meant for
|
|
8
|
+
# patching Ruby's Net::SMTP class in order to add
|
|
9
|
+
# IP access control to it. It is also used
|
|
10
|
+
# to create variant of Net::SMTP class
|
|
11
|
+
# with IP access control.
|
|
12
|
+
#
|
|
13
|
+
#--
|
|
14
|
+
#
|
|
15
|
+
# Copyright (C) 2009 by Paweł Wilk. All Rights Reserved.
|
|
16
|
+
#
|
|
17
|
+
# This program is free software; you can redistribute it and/or modify
|
|
18
|
+
# it under the terms of either: 1) the GNU Lesser General Public License
|
|
19
|
+
# as published by the Free Software Foundation; either version 3 of the
|
|
20
|
+
# License, or (at your option) any later version; or 2) Ruby's License.
|
|
21
|
+
#
|
|
22
|
+
# See the file COPYING for complete licensing information.
|
|
23
|
+
#
|
|
24
|
+
#++
|
|
25
|
+
#
|
|
26
|
+
|
|
27
|
+
require 'socket'
|
|
28
|
+
require 'net/smtp'
|
|
29
|
+
require 'ipaccess/ip_access_errors'
|
|
30
|
+
require 'ipaccess/patches/generic'
|
|
31
|
+
require 'ipaccess/patches/sockets'
|
|
32
|
+
|
|
33
|
+
# :stopdoc:
|
|
34
|
+
|
|
35
|
+
module IPAccess::Patches::Net
|
|
36
|
+
|
|
37
|
+
###################################################################
|
|
38
|
+
# Net::SMTP class with IP access control.
|
|
39
|
+
# It uses output access lists.
|
|
40
|
+
|
|
41
|
+
module SMTP
|
|
42
|
+
|
|
43
|
+
include IPAccess::Patches::ACL
|
|
44
|
+
|
|
45
|
+
def self.included(base)
|
|
46
|
+
|
|
47
|
+
marker = (base.name =~ /IPAccess/) ? base.superclass : base
|
|
48
|
+
return if marker.instance_variable_defined?(:@uses_ipaccess)
|
|
49
|
+
base.instance_variable_set(:@uses_ipaccess, true)
|
|
50
|
+
|
|
51
|
+
base.class_eval do
|
|
52
|
+
|
|
53
|
+
# CLASS METHODS
|
|
54
|
+
unless (base.name.nil? && base.class.name == "Class")
|
|
55
|
+
(class << self; self; end).class_eval do
|
|
56
|
+
|
|
57
|
+
# overwrite SMTP.start()
|
|
58
|
+
define_method :__ipacall__start do |block, address, *args|
|
|
59
|
+
late_on_deny = nil
|
|
60
|
+
args.delete_if { |x| late_on_deny = x if (x.is_a?(Symbol) && x == :opened_on_deny) }
|
|
61
|
+
args.pop if args.last.nil?
|
|
62
|
+
late_acl = IPAccess.valid_acl?(args.last) ? args.smtp : :global
|
|
63
|
+
port, helo, user, secret, authtype = *args
|
|
64
|
+
obj = new(address, port, late_acl, late_on_deny)
|
|
65
|
+
obj.start(helo, user, secret, authtype, &block)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# block passing wrapper for Ruby 1.8
|
|
69
|
+
def start(address, *args, &block)
|
|
70
|
+
__ipacall__start(block, address, *args)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
end # class methods
|
|
76
|
+
|
|
77
|
+
orig_initialize = self.instance_method :initialize
|
|
78
|
+
orig_do_start = self.instance_method :do_start
|
|
79
|
+
|
|
80
|
+
# initialize on steroids.
|
|
81
|
+
define_method :initialize do |addr, *args|
|
|
82
|
+
@opened_on_deny = false
|
|
83
|
+
args.delete_if { |x| @opened_on_deny = true if (x.is_a?(Symbol) && x == :opened_on_deny) }
|
|
84
|
+
args.pop if args.last.nil?
|
|
85
|
+
self.acl = IPAccess.valid_acl?(args.last) ? args.pop : :global
|
|
86
|
+
obj = orig_initialize.bind(self).call(addr, *args)
|
|
87
|
+
self.acl_recheck
|
|
88
|
+
return obj
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# start on steroids.
|
|
92
|
+
define_method :do_start do |helo_domain, user, secret, authtype|
|
|
93
|
+
prev_addr = @address
|
|
94
|
+
ipaddr = ::TCPSocket.getaddress(@address)
|
|
95
|
+
real_acl.output.check_ipstring(ipaddr, self)
|
|
96
|
+
@address = ipaddr
|
|
97
|
+
ret = orig_do_start.bind(self).call(helo_domain, user, secret, authtype)
|
|
98
|
+
@address = prev_addr
|
|
99
|
+
self.acl_recheck
|
|
100
|
+
return ret
|
|
101
|
+
end
|
|
102
|
+
private :do_start
|
|
103
|
+
|
|
104
|
+
# This method returns default access list indicator
|
|
105
|
+
# used by protected object; in this case it's +:output+.
|
|
106
|
+
define_method :default_list do
|
|
107
|
+
:output
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# this hook will be called each time @acl is reassigned
|
|
111
|
+
define_method :acl_recheck do
|
|
112
|
+
try_arm_and_check_socket @socket
|
|
113
|
+
nil
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# this hook terminates connection
|
|
117
|
+
define_method :terminate do
|
|
118
|
+
self.finish if started?
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
end # base.class_eval
|
|
122
|
+
|
|
123
|
+
end # self.included
|
|
124
|
+
|
|
125
|
+
end # module SMTP
|
|
126
|
+
|
|
127
|
+
end # module IPAccess::Patches
|
|
128
|
+
|
|
129
|
+
# :startdoc:
|
|
130
|
+
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
#
|
|
3
|
+
# Author:: Paweł Wilk (mailto:pw@gnu.org)
|
|
4
|
+
# Copyright:: Copyright (c) 2009-2014 by Paweł Wilk
|
|
5
|
+
# License:: This program is licensed under the terms of {GNU Lesser General Public License}[link:docs/LGPL.html] or {Ruby License}[link:docs/COPYING.html].
|
|
6
|
+
#
|
|
7
|
+
# Modules contained in this file are meant for
|
|
8
|
+
# patching Ruby's Net::Telnet class in order to add
|
|
9
|
+
# IP access control to it. It is also used
|
|
10
|
+
# to create variant of Net::Telnet class
|
|
11
|
+
# with IP access control.
|
|
12
|
+
#
|
|
13
|
+
#--
|
|
14
|
+
#
|
|
15
|
+
# Copyright (C) 2009 by Paweł Wilk. All Rights Reserved.
|
|
16
|
+
#
|
|
17
|
+
# This program is free software; you can redistribute it and/or modify
|
|
18
|
+
# it under the terms of either: 1) the GNU Lesser General Public License
|
|
19
|
+
# as published by the Free Software Foundation; either version 3 of the
|
|
20
|
+
# License, or (at your option) any later version; or 2) Ruby's License.
|
|
21
|
+
#
|
|
22
|
+
# See the file COPYING for complete licensing information.
|
|
23
|
+
#
|
|
24
|
+
#++
|
|
25
|
+
#
|
|
26
|
+
|
|
27
|
+
require 'socket'
|
|
28
|
+
require 'net/telnet'
|
|
29
|
+
require 'ipaccess/ip_access_errors'
|
|
30
|
+
require 'ipaccess/patches/generic'
|
|
31
|
+
require 'ipaccess/patches/sockets'
|
|
32
|
+
|
|
33
|
+
# :stopdoc:
|
|
34
|
+
|
|
35
|
+
module IPAccess::Patches::Net
|
|
36
|
+
|
|
37
|
+
###################################################################
|
|
38
|
+
# Net::Telnet class with IP access control.
|
|
39
|
+
# It uses output access lists.
|
|
40
|
+
|
|
41
|
+
module Telnet
|
|
42
|
+
|
|
43
|
+
include IPAccess::Patches::ACL
|
|
44
|
+
|
|
45
|
+
def self.included(base)
|
|
46
|
+
|
|
47
|
+
marker = (base.name =~ /IPAccess/) ? base.superclass : base
|
|
48
|
+
return if marker.instance_variable_defined?(:@uses_ipaccess)
|
|
49
|
+
base.instance_variable_set(:@uses_ipaccess, true)
|
|
50
|
+
|
|
51
|
+
base.class_eval do
|
|
52
|
+
|
|
53
|
+
orig_initialize = self.instance_method :initialize
|
|
54
|
+
|
|
55
|
+
# initialize on steroids.
|
|
56
|
+
define_method :__ipacall__initialize do |block, *args|
|
|
57
|
+
@opened_on_deny = false
|
|
58
|
+
args.delete_if { |x| @opened_on_deny = true if (x.is_a?(Symbol) && x == :opened_on_deny) }
|
|
59
|
+
args.pop if args.last.nil?
|
|
60
|
+
options = args.first
|
|
61
|
+
options["ACL"] = args.pop if (IPAccess.valid_acl?(args.last) && options.is_a?(Hash))
|
|
62
|
+
options["Host"] = "localhost" unless options.has_key?("Host")
|
|
63
|
+
self.acl = IPAccess.valid_acl?(options["ACL"]) ? options["ACL"] : :global
|
|
64
|
+
options["Host"] = ::TCPSocket.getaddress(options["Host"])
|
|
65
|
+
self.acl.output.check_ipstring(options["Host"], :none)
|
|
66
|
+
args[0] = options
|
|
67
|
+
ret = orig_initialize.bind(self).call(*args, &block)
|
|
68
|
+
self.acl_recheck
|
|
69
|
+
return ret
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# This method returns default access list indicator
|
|
73
|
+
# used by protected object; in this case it's +:output+.
|
|
74
|
+
define_method :default_list do
|
|
75
|
+
:output
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# this hook terminates connection
|
|
79
|
+
define_method :terminate do
|
|
80
|
+
self.close unless self.closed?
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# this hook will be called each time @acl is reassigned
|
|
84
|
+
define_method :acl_recheck do
|
|
85
|
+
try_arm_and_check_socket @sock
|
|
86
|
+
nil
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# block passing wrapper for Ruby 1.8
|
|
90
|
+
def initialize(*args, &block)
|
|
91
|
+
__ipacall__initialize(block, *args)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
end # base.class_eval
|
|
95
|
+
|
|
96
|
+
end # self.included
|
|
97
|
+
|
|
98
|
+
end # module Telnet
|
|
99
|
+
|
|
100
|
+
end # module IPAccess::Patches
|
|
101
|
+
|
|
102
|
+
# :startdoc:
|
|
103
|
+
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
#
|
|
3
3
|
# Author:: Paweł Wilk (mailto:pw@gnu.org)
|
|
4
|
-
# Copyright:: Copyright (c) 2009 Paweł Wilk
|
|
5
|
-
# License:: This program is licensed under the terms of {GNU Lesser General Public License}[link:docs/LGPL
|
|
4
|
+
# Copyright:: Copyright (c) 2009-2014 by Paweł Wilk
|
|
5
|
+
# License:: This program is licensed under the terms of {GNU Lesser General Public License}[link:docs/LGPL.html] or {Ruby License}[link:docs/COPYING.html].
|
|
6
6
|
#
|
|
7
7
|
# This file extends NetAddr by adding methods
|
|
8
8
|
# that bring some comfort into IPv6 handling.
|
|
@@ -22,22 +22,25 @@
|
|
|
22
22
|
|
|
23
23
|
require 'netaddr'
|
|
24
24
|
|
|
25
|
-
#
|
|
26
|
-
|
|
25
|
+
# :stopdoc:
|
|
26
|
+
|
|
27
|
+
# This module contains a few new methods extending
|
|
28
|
+
# original NetAddr[http://netaddr.rubyforge.org/classes/NetAddr.html] module.
|
|
27
29
|
|
|
28
30
|
module NetAddr
|
|
29
31
|
|
|
30
|
-
#
|
|
31
|
-
|
|
32
|
+
# This class contains methods extending
|
|
33
|
+
# original CIDR[http://netaddr.rubyforge.org/classes/NetAddr/CIDR.html] class.
|
|
34
|
+
|
|
32
35
|
class CIDR
|
|
33
36
|
|
|
34
|
-
# Returns +true+ if
|
|
37
|
+
# Returns +true+ if an IP address is IPv4-mapped IPv6 address.
|
|
35
38
|
|
|
36
39
|
def ipv4_mapped?
|
|
37
40
|
return @version == 6 && (@ip >> 32) == 0xffff
|
|
38
41
|
end
|
|
39
42
|
|
|
40
|
-
# Returns +true+ if
|
|
43
|
+
# Returns +true+ if an IP address is IPv4-compatible IPv6 address.
|
|
41
44
|
|
|
42
45
|
def ipv4_compat?
|
|
43
46
|
return false if @version != 6
|
|
@@ -46,7 +49,7 @@ module NetAddr
|
|
|
46
49
|
return (a != 0 && a != 1)
|
|
47
50
|
end
|
|
48
51
|
|
|
49
|
-
# Returns +true+ if
|
|
52
|
+
# Returns +true+ if an IP address is IPv4-compatible or
|
|
50
53
|
# IPv4-mapped IPv6 address.
|
|
51
54
|
|
|
52
55
|
def ipv4_compliant?
|
|
@@ -74,6 +77,9 @@ module NetAddr
|
|
|
74
77
|
|
|
75
78
|
end # class CIDR
|
|
76
79
|
|
|
80
|
+
# This class contains methods extending
|
|
81
|
+
# original CIDRv4[http://netaddr.rubyforge.org/classes/NetAddr/CIDRv4.html] class.
|
|
82
|
+
|
|
77
83
|
class CIDRv4
|
|
78
84
|
|
|
79
85
|
# Returns a new NetAddr::CIDRv6 object built by converting
|
|
@@ -101,6 +107,9 @@ module NetAddr
|
|
|
101
107
|
|
|
102
108
|
end # class CIDRv4
|
|
103
109
|
|
|
110
|
+
# This class contains methods extending
|
|
111
|
+
# original CIDRv6[http://netaddr.rubyforge.org/classes/NetAddr/CIDRv6.html] class.
|
|
112
|
+
|
|
104
113
|
class CIDRv6
|
|
105
114
|
|
|
106
115
|
def ipv4
|
|
@@ -121,7 +130,7 @@ module NetAddr
|
|
|
121
130
|
|
|
122
131
|
end # class CIDRv4
|
|
123
132
|
|
|
124
|
-
# :startdoc:
|
|
125
|
-
|
|
126
133
|
end # module NetAddr
|
|
127
134
|
|
|
135
|
+
# :startdoc:
|
|
136
|
+
|