ipaccess 0.0.4 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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,212 @@
|
|
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
|
+
# This file contains IPAccess::Set class, which uses
|
8
|
+
# IPAccess::List::Check objects to implement IP input/output
|
9
|
+
# access control.
|
10
|
+
#
|
11
|
+
#--
|
12
|
+
#
|
13
|
+
# Copyright (C) 2009 by Paweł Wilk. All Rights Reserved.
|
14
|
+
#
|
15
|
+
# This program is free software; you can redistribute it and/or modify
|
16
|
+
# it under the terms of either: 1) the GNU Lesser General Public License
|
17
|
+
# as published by the Free Software Foundation; either version 3 of the
|
18
|
+
# License, or (at your option) any later version; or 2) Ruby's License.
|
19
|
+
#
|
20
|
+
# See the file COPYING for complete licensing information.
|
21
|
+
#
|
22
|
+
#++
|
23
|
+
|
24
|
+
require 'socket'
|
25
|
+
require 'ipaccess'
|
26
|
+
require 'ipaccess/ip_access_list'
|
27
|
+
require 'ipaccess/ip_access_check'
|
28
|
+
require 'ipaccess/ip_access_errors'
|
29
|
+
|
30
|
+
module IPAccess
|
31
|
+
|
32
|
+
# This class maintains an access set.
|
33
|
+
#
|
34
|
+
# Objects of IPAccess::Set class, called <b>access sets</b>,
|
35
|
+
# contain two access lists which are available
|
36
|
+
# as accessible attributes: +input+ and +output+.
|
37
|
+
#
|
38
|
+
# ==== Usage examples
|
39
|
+
#
|
40
|
+
# access = IPAccess::Set.new 'myset' # create an access set
|
41
|
+
# access.input.block :private # input list: block private subnets
|
42
|
+
# access.input.permit '192.168.1.1' # input list: but permit 192.168.1.1
|
43
|
+
# access.input.check '192.168.1.1' # should pass
|
44
|
+
# access.input.check '192.168.1.2' # should raise an exception
|
45
|
+
#
|
46
|
+
# In the example above checking access is covered
|
47
|
+
# by the check_in method. It is generic, easy to use
|
48
|
+
# routine, but if you are fan of performance
|
49
|
+
# you may want to use dedicated methods designed
|
50
|
+
# to handle single IP stored in socket, file descriptor,
|
51
|
+
# NetAddr::CIDR object, sockaddr structure or IP string.
|
52
|
+
#
|
53
|
+
# require 'uri'
|
54
|
+
# require 'net/http'
|
55
|
+
#
|
56
|
+
# access = IPAccess::Set.new 'outgoing http' # create access set
|
57
|
+
# access.output.block :all # output list: block all
|
58
|
+
#
|
59
|
+
# url = URI('http://randomseed.pl/') # parse URL
|
60
|
+
# res = Net::HTTP.new(url.host, url.port) # create HTTP resource
|
61
|
+
# req = Net::HTTP::Get.new(url.path) # create HTTP request
|
62
|
+
#
|
63
|
+
# res.start do # start HTTP session
|
64
|
+
# access.check_out(res) # check access for socket extracted from HTTP object
|
65
|
+
# response = res.request(req) # read response
|
66
|
+
# end
|
67
|
+
#
|
68
|
+
# In the example above, which is probably more real
|
69
|
+
# than previous, we're using check_out method for testing
|
70
|
+
# Net::HTTP response object. The method is clever enough to
|
71
|
+
# extract IP socket from such object.
|
72
|
+
#
|
73
|
+
# Although the problem still exists because
|
74
|
+
# access for incoming connection is validated
|
75
|
+
# after the HTTP session has already started. We cannot
|
76
|
+
# be 100% sure whether any data has been sent or not.
|
77
|
+
# The cause of that problem is lack of controlled
|
78
|
+
# low-level connect operation that we can issue in
|
79
|
+
# that particular case.
|
80
|
+
#
|
81
|
+
# To fix issues like that you may want to
|
82
|
+
# globally enable IP access control for original
|
83
|
+
# Ruby's socket classes or use special versions
|
84
|
+
# of them shipped with this library. To patch original
|
85
|
+
# sockets or single objects use IPAccess.arm class method. To
|
86
|
+
# use extended version of network classes use
|
87
|
+
# <tt>IPAccess::</tt> prefix.
|
88
|
+
|
89
|
+
class Set
|
90
|
+
|
91
|
+
# Access list for incoming IP traffic. See IPAccess::List::Check class
|
92
|
+
# for more information on how to manage it.
|
93
|
+
|
94
|
+
attr_reader :input
|
95
|
+
|
96
|
+
alias_method :in, :input
|
97
|
+
alias_method :incoming, :input
|
98
|
+
|
99
|
+
# Access list for outgoing IP traffic. See IPAccess::List::Check class
|
100
|
+
# for more information on how to manage it.
|
101
|
+
|
102
|
+
attr_reader :output
|
103
|
+
|
104
|
+
alias_method :out, :output
|
105
|
+
alias_method :outgoing, :output
|
106
|
+
|
107
|
+
# Descriptive name of this object. Used in error reporting.
|
108
|
+
|
109
|
+
attr_accessor :name
|
110
|
+
|
111
|
+
# This method creates new IPAccess::Set object. It optionally takes
|
112
|
+
# two IPAccess::List::Check objects (initial data for access lists)
|
113
|
+
# and descriptive name of an access set used in error reporting.
|
114
|
+
# If there is only one argument it's assumed that it contains
|
115
|
+
# descriptive name of an access set.
|
116
|
+
|
117
|
+
def initialize(input=nil, output=nil, name=nil)
|
118
|
+
@name = nil
|
119
|
+
@name, input = input, nil if (output.nil? && name.nil?)
|
120
|
+
@input = IPAccess::List::Check.new(input)
|
121
|
+
@output = IPAccess::List::Check.new(output)
|
122
|
+
@input.exception = IPAccessDenied::Input
|
123
|
+
@output.exception = IPAccessDenied::Output
|
124
|
+
return self
|
125
|
+
end
|
126
|
+
|
127
|
+
# This method returns +true+ if all access lists are empty.
|
128
|
+
# Otherwise returns +false+.
|
129
|
+
|
130
|
+
def empty?
|
131
|
+
@input.empty? && @output.empty?
|
132
|
+
end
|
133
|
+
|
134
|
+
# This method removes all rules from both input and
|
135
|
+
# output access list.
|
136
|
+
|
137
|
+
def clear!
|
138
|
+
@input.clear!
|
139
|
+
@output.clear!
|
140
|
+
end
|
141
|
+
|
142
|
+
# This method returns true if access set works
|
143
|
+
# in bidirectional mode.
|
144
|
+
|
145
|
+
def bidirectional?
|
146
|
+
return (@output.object_id == @input.object_id)
|
147
|
+
end
|
148
|
+
|
149
|
+
# This method switches set to bidirectional
|
150
|
+
# mode if the given argument is not +false+
|
151
|
+
# and is not +nil+. When access set
|
152
|
+
# operates in this mode there is no difference
|
153
|
+
# between incoming and outgoing acceess list.
|
154
|
+
# In bidirectional mode each access check
|
155
|
+
# is performed against one list, which contains
|
156
|
+
# both input and output rules. Still the only
|
157
|
+
# way to add or delete rules is to straight
|
158
|
+
# call +input+ or +output+. The difference is
|
159
|
+
# that these lists are linked together
|
160
|
+
# in bidirectional mode.
|
161
|
+
#
|
162
|
+
# Be aware that switching mode will alter
|
163
|
+
# your access lists. When switching to
|
164
|
+
# bidirectional it will combine input and
|
165
|
+
# output rules and put it into one list.
|
166
|
+
# When switching back from bidirectional
|
167
|
+
# to normal mode input and output lists
|
168
|
+
# will have the same rules inside.
|
169
|
+
#
|
170
|
+
# It may be good idea to prune access lists before
|
171
|
+
# switching mode or to switch mode before adding
|
172
|
+
# any rules to avoid unexpected results. You may
|
173
|
+
# of course change mode anyway if you really know
|
174
|
+
# what you are doing.
|
175
|
+
|
176
|
+
def bidirectional=(enable)
|
177
|
+
enable = enable ? true : false
|
178
|
+
if enable != bidirectional?
|
179
|
+
if enable
|
180
|
+
@input.add @output
|
181
|
+
@output.clear!
|
182
|
+
@output = @input
|
183
|
+
else
|
184
|
+
@output = IPAccess::List::Check.new @input
|
185
|
+
end
|
186
|
+
end
|
187
|
+
return nil
|
188
|
+
end
|
189
|
+
|
190
|
+
# This method shows an access set in a human readable form.
|
191
|
+
|
192
|
+
def show(reasons=false)
|
193
|
+
r = ""
|
194
|
+
unless @input.empty?
|
195
|
+
r = ".=========================================.\n" +
|
196
|
+
". Rules for incoming traffic:\n\n" +
|
197
|
+
@input.show(reasons)
|
198
|
+
r += "\n" if @output.empty?
|
199
|
+
end
|
200
|
+
unless @output.empty?
|
201
|
+
r += "\n" unless @input.empty?
|
202
|
+
r += ".=========================================.\n" +
|
203
|
+
". Rules for outgoing traffic:\n\n" +
|
204
|
+
@output.show(reasons) + "\n"
|
205
|
+
end
|
206
|
+
return r
|
207
|
+
end
|
208
|
+
|
209
|
+
end # class Set
|
210
|
+
|
211
|
+
end # module IPAccess
|
212
|
+
|
@@ -0,0 +1,39 @@
|
|
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
|
+
# Classes contained in this file are subclasses
|
8
|
+
# of Ruby FTP handling classes equipped
|
9
|
+
# with IP access control.
|
10
|
+
#
|
11
|
+
#--
|
12
|
+
#
|
13
|
+
# Copyright (C) 2009 by Paweł Wilk. All Rights Reserved.
|
14
|
+
#
|
15
|
+
# This program is free software; you can redistribute it and/or modify
|
16
|
+
# it under the terms of either: 1) the GNU Lesser General Public License
|
17
|
+
# as published by the Free Software Foundation; either version 3 of the
|
18
|
+
# License, or (at your option) any later version; or 2) Ruby's License.
|
19
|
+
#
|
20
|
+
# See the file COPYING for complete licensing information.
|
21
|
+
#
|
22
|
+
#
|
23
|
+
# See ipaccess/ghost_doc/ghost_doc.rb for documentation of this classes.
|
24
|
+
#
|
25
|
+
#++
|
26
|
+
|
27
|
+
require 'net/ftp'
|
28
|
+
require 'ipaccess/ip_access_set'
|
29
|
+
require 'ipaccess/patches/net_ftp'
|
30
|
+
|
31
|
+
|
32
|
+
module IPAccess::Net
|
33
|
+
|
34
|
+
class FTP < ::Net::FTP
|
35
|
+
include IPAccess::Patches::Net::FTP
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
@@ -0,0 +1,39 @@
|
|
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
|
+
# Classes contained in this file are subclasses
|
8
|
+
# of Ruby HTTP handling classes equipped
|
9
|
+
# with IP access control.
|
10
|
+
#
|
11
|
+
#--
|
12
|
+
#
|
13
|
+
# Copyright (C) 2009 by Paweł Wilk. All Rights Reserved.
|
14
|
+
#
|
15
|
+
# This program is free software; you can redistribute it and/or modify
|
16
|
+
# it under the terms of either: 1) the GNU Lesser General Public License
|
17
|
+
# as published by the Free Software Foundation; either version 3 of the
|
18
|
+
# License, or (at your option) any later version; or 2) Ruby's License.
|
19
|
+
#
|
20
|
+
# See the file COPYING for complete licensing information.
|
21
|
+
#
|
22
|
+
#
|
23
|
+
# See ipaccess/ghost_doc/ghost_doc.rb for documentation of this classes.
|
24
|
+
#
|
25
|
+
#++
|
26
|
+
|
27
|
+
require 'net/http'
|
28
|
+
require 'ipaccess/ip_access_set'
|
29
|
+
require 'ipaccess/patches/net_http'
|
30
|
+
|
31
|
+
|
32
|
+
module IPAccess::Net
|
33
|
+
|
34
|
+
class HTTP < ::Net::HTTP
|
35
|
+
include IPAccess::Patches::Net::HTTP
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
@@ -0,0 +1,30 @@
|
|
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
|
+
# Classes contained in this file are subclasses
|
8
|
+
# of Ruby HTTPS handling classes equipped
|
9
|
+
# with IP access control.
|
10
|
+
#
|
11
|
+
#--
|
12
|
+
#
|
13
|
+
# Copyright (C) 2009 by Paweł Wilk. All Rights Reserved.
|
14
|
+
#
|
15
|
+
# This program is free software; you can redistribute it and/or modify
|
16
|
+
# it under the terms of either: 1) the GNU Lesser General Public License
|
17
|
+
# as published by the Free Software Foundation; either version 3 of the
|
18
|
+
# License, or (at your option) any later version; or 2) Ruby's License.
|
19
|
+
#
|
20
|
+
# See the file COPYING for complete licensing information.
|
21
|
+
#
|
22
|
+
#
|
23
|
+
# See ipaccess/ghost_doc/ghost_doc.rb for documentation of this classes.
|
24
|
+
#
|
25
|
+
#++
|
26
|
+
|
27
|
+
require 'net/https'
|
28
|
+
require 'ipaccess/ip_access_set'
|
29
|
+
require 'ipaccess/patches/net_https'
|
30
|
+
|
@@ -0,0 +1,39 @@
|
|
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
|
+
# Classes contained in this file are subclasses
|
8
|
+
# of Ruby's IMAP handling classes equipped
|
9
|
+
# with IP access control.
|
10
|
+
#
|
11
|
+
#--
|
12
|
+
#
|
13
|
+
# Copyright (C) 2009 by Paweł Wilk. All Rights Reserved.
|
14
|
+
#
|
15
|
+
# This program is free software; you can redistribute it and/or modify
|
16
|
+
# it under the terms of either: 1) the GNU Lesser General Public License
|
17
|
+
# as published by the Free Software Foundation; either version 3 of the
|
18
|
+
# License, or (at your option) any later version; or 2) Ruby's License.
|
19
|
+
#
|
20
|
+
# See the file COPYING for complete licensing information.
|
21
|
+
#
|
22
|
+
#
|
23
|
+
# See ipaccess/ghost_doc/ghost_doc.rb for documentation of this classes.
|
24
|
+
#
|
25
|
+
#++
|
26
|
+
|
27
|
+
require 'net/imap'
|
28
|
+
require 'ipaccess/ip_access_set'
|
29
|
+
require 'ipaccess/patches/net_imap'
|
30
|
+
|
31
|
+
|
32
|
+
module IPAccess::Net
|
33
|
+
|
34
|
+
class IMAP < ::Net::IMAP
|
35
|
+
include IPAccess::Patches::Net::IMAP
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
@@ -0,0 +1,46 @@
|
|
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
|
+
# Classes contained in this file are subclasses
|
8
|
+
# of Ruby's POP3 handling classes equipped
|
9
|
+
# with IP access control.
|
10
|
+
#
|
11
|
+
#--
|
12
|
+
#
|
13
|
+
# Copyright (C) 2009 by Paweł Wilk. All Rights Reserved.
|
14
|
+
#
|
15
|
+
# This program is free software; you can redistribute it and/or modify
|
16
|
+
# it under the terms of either: 1) the GNU Lesser General Public License
|
17
|
+
# as published by the Free Software Foundation; either version 3 of the
|
18
|
+
# License, or (at your option) any later version; or 2) Ruby's License.
|
19
|
+
#
|
20
|
+
# See the file COPYING for complete licensing information.
|
21
|
+
#
|
22
|
+
#
|
23
|
+
# See ipaccess/ghost_doc/ghost_doc.rb for documentation of this classes.
|
24
|
+
#
|
25
|
+
#++
|
26
|
+
|
27
|
+
require 'net/pop'
|
28
|
+
require 'ipaccess/ip_access_set'
|
29
|
+
require 'ipaccess/patches/net_pop'
|
30
|
+
|
31
|
+
|
32
|
+
module IPAccess::Net
|
33
|
+
|
34
|
+
class POP3 < ::Net::POP3
|
35
|
+
include IPAccess::Patches::Net::POP3
|
36
|
+
end
|
37
|
+
|
38
|
+
class APOP < IPAccess::Net::POP3
|
39
|
+
# Always returns true.
|
40
|
+
def apop?
|
41
|
+
true
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
@@ -0,0 +1,39 @@
|
|
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
|
+
# Classes contained in this file are subclasses
|
8
|
+
# of Ruby's SMTP handling classes equipped
|
9
|
+
# with IP access control.
|
10
|
+
#
|
11
|
+
#--
|
12
|
+
#
|
13
|
+
# Copyright (C) 2009 by Paweł Wilk. All Rights Reserved.
|
14
|
+
#
|
15
|
+
# This program is free software; you can redistribute it and/or modify
|
16
|
+
# it under the terms of either: 1) the GNU Lesser General Public License
|
17
|
+
# as published by the Free Software Foundation; either version 3 of the
|
18
|
+
# License, or (at your option) any later version; or 2) Ruby's License.
|
19
|
+
#
|
20
|
+
# See the file COPYING for complete licensing information.
|
21
|
+
#
|
22
|
+
#
|
23
|
+
# See ipaccess/ghost_doc/ghost_doc.rb for documentation of this classes.
|
24
|
+
#
|
25
|
+
#++
|
26
|
+
|
27
|
+
require 'net/smtp'
|
28
|
+
require 'ipaccess/ip_access_set'
|
29
|
+
require 'ipaccess/patches/net_smtp'
|
30
|
+
|
31
|
+
|
32
|
+
module IPAccess::Net
|
33
|
+
|
34
|
+
class SMTP < ::Net::SMTP
|
35
|
+
include IPAccess::Patches::Net::SMTP
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|