double-bag-ftps 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NGY4OTNkYzcyNmI3NWFlMzdlOGFiM2JjZjI4NDhiOTM4ZjcwOWU1MA==
5
+ data.tar.gz: !binary |-
6
+ ZDI0YzlmNTMwMmU1YTM3ZmNlNjNmNDI2NDFkZGQxMjZmM2ZmODRlNQ==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ YzhjZGUyMmJiNjg3OWFhYWE5ZjNiNWMwNDYyMjE0N2U5OTQwNDBjNzZiNjY0
10
+ M2U3MGU1NDU2YTE5MzcwZjZlMmNlNWFiYWMyZWViMmNiZjAxZjA2YjE2Y2Vl
11
+ ODRjYjZiOTJmMmU0ODNlMjRlOWRlMzUzNzFiOWM2ZDg2YTUwOGE=
12
+ data.tar.gz: !binary |-
13
+ ZTNiOGRhNWNiYzM5NTZkNzM5YjZkNzYyOTA1NjI1OGEyYWM1OWYyYzEyODEz
14
+ ZjdiNTUzYzMxY2NiOGQ2ZDI0MzIwNDQwNThkMmFlZmYyN2Y0MmNjNTkzNWY1
15
+ ZGM0ZTJjMWJmZDcxMThhOThmMTgxZTM1ZjI0NWUxNTVlY2E1NDE=
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ *~
@@ -0,0 +1,9 @@
1
+ ## 0.1.1
2
+
3
+ Features:
4
+
5
+ - Ruby 2.0-p0 compatibility
6
+
7
+ Bugfixes:
8
+
9
+ - Active mode data transfers properly establish a connection
@@ -3,7 +3,8 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "double-bag-ftps"
6
- s.version = "0.1.0"
6
+ s.version = "0.1.1"
7
+ s.license = "MIT"
7
8
  s.author = "Bryan Nix"
8
9
  s.homepage = "https://github.com/bnix/double-bag-ftps"
9
10
  s.summary = "Provides a child class of Net::FTP to support implicit and explicit FTPS."
@@ -121,10 +121,9 @@ class DoubleBagFTPS < Net::FTP
121
121
  if resp[0] != ?1
122
122
  raise FTPReplyError, resp
123
123
  end
124
-
125
- temp_ssl_sock = ssl_socket(sock)
126
- conn = temp_ssl_sock.accept
127
- temp_ssl_sock.close
124
+ conn = sock.accept
125
+ conn = ssl_socket(conn)
126
+ sock.close
128
127
  end
129
128
  return conn
130
129
  end
@@ -150,15 +149,43 @@ class DoubleBagFTPS < Net::FTP
150
149
  unless @ssl_context.verify_mode == OpenSSL::SSL::VERIFY_NONE
151
150
  sock.post_connection_check(@hostname)
152
151
  end
152
+ decorate_socket sock
153
153
  return sock
154
154
  end
155
155
  private :ssl_socket
156
156
 
157
+ # Ruby 2.0's Ftp class closes sockets by first doing a shutdown,
158
+ # setting the read timeout, and doing a read. OpenSSL doesn't
159
+ # have those methods, so fake it.
160
+ #
161
+ # Ftp calls #close in an ensure block, so the socket will still get
162
+ # closed.
163
+
164
+ def decorate_socket(sock)
165
+
166
+ def sock.shutdown(how)
167
+ @shutdown = true
168
+ end
169
+
170
+ def sock.read_timeout=(seconds)
171
+ end
172
+
173
+ # Skip read after shutdown. Prevents 2.0 from hanging in
174
+ # Ftp#close
175
+
176
+ def sock.read(*args)
177
+ return if @shutdown
178
+ super(*args)
179
+ end
180
+
181
+ end
182
+ private :decorate_socket
183
+
157
184
  def DoubleBagFTPS.create_ssl_context(params = {})
158
185
  raise 'SSL extension not installed' unless defined?(OpenSSL)
159
186
  context = OpenSSL::SSL::SSLContext.new
160
187
  context.set_params(params)
161
188
  return context
162
189
  end
163
-
190
+
164
191
  end
@@ -6,23 +6,35 @@ shared_examples_for "DoubleBagFTPS" do
6
6
  end
7
7
 
8
8
  it "logs in with a user name and password" do
9
- @ftp.connect(HOST)
9
+ @ftp.connect(HOST)
10
10
  lambda {@ftp.login(USR, PASSWD)}.should_not raise_error
11
11
  end
12
12
 
13
13
  it "can open a secure data channel" do
14
- @ftp.connect(HOST)
14
+ @ftp.connect(HOST)
15
15
  @ftp.login(USR, PASSWD)
16
16
  @ftp.send(:transfercmd, 'nlst').should be_an_instance_of OpenSSL::SSL::SSLSocket
17
17
  end
18
18
 
19
+ it "can retrieve a file" do
20
+ Dir.mktmpdir do |temp_dir|
21
+ @ftp.connect HOST
22
+ @ftp.login USR, PASSWD
23
+ filename = @ftp.nlst.first
24
+ filename.should_not be_nil
25
+ local_path = File.join(temp_dir, filename)
26
+ @ftp.get(filename, local_path)
27
+ File.exists?(local_path).should be_true
28
+ end
29
+ end
30
+
19
31
  it "prevents setting the FTPS mode while connected" do
20
32
  @ftp.connect(HOST)
21
- lambda {@ftp.ftps_mode = 'dummy value'}.should raise_error
33
+ lambda {@ftp.ftps_mode = DoubleBagFTPS::IMPLICIT}.should raise_error RuntimeError
22
34
  end
23
35
 
24
36
  it "prevents setting the FTPS mode to an unrecognized value" do
25
- lambda {@ftp.ftps_mode = 'dummy value'}.should raise_error
37
+ lambda {@ftp.ftps_mode = 'dummy value'}.should raise_error ArgumentError
26
38
  end
27
39
 
28
40
  end
@@ -51,14 +63,14 @@ describe DoubleBagFTPS do
51
63
 
52
64
  context "explicit" do
53
65
  before(:each) do
54
- @ftp = DoubleBagFTPS.new
55
- @ftp.ftps_mode = DoubleBagFTPS::EXPLICIT
66
+ @ftp = DoubleBagFTPS.new
67
+ @ftp.ftps_mode = DoubleBagFTPS::EXPLICIT
56
68
  @ftp.passive = true
57
- @ftp.ssl_context = DoubleBagFTPS.create_ssl_context(:verify_mode => OpenSSL::SSL::VERIFY_NONE)
69
+ @ftp.ssl_context = DoubleBagFTPS.create_ssl_context(:verify_mode => OpenSSL::SSL::VERIFY_NONE)
58
70
  end
59
71
 
60
72
  after(:each) do
61
- @ftp.close unless @ftp.welcome.nil?
73
+ @ftp.close unless @ftp.welcome.nil?
62
74
  end
63
75
 
64
76
  it "does not use an SSLSocket when first connected" do
@@ -69,4 +81,4 @@ describe DoubleBagFTPS do
69
81
 
70
82
  it_should_behave_like "DoubleBagFTPS"
71
83
  end
72
- end
84
+ end
@@ -1,6 +1,8 @@
1
1
  $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
2
  require 'double_bag_ftps'
3
3
 
4
+ require 'tmpdir'
5
+
4
6
  HOST = 'ftp.secureftp-test.com'
5
7
  USR = 'test'
6
- PASSWD = 'test'
8
+ PASSWD = 'test'
metadata CHANGED
@@ -1,38 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: double-bag-ftps
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
5
- prerelease:
4
+ version: 0.1.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Bryan Nix
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2011-10-03 00:00:00.000000000Z
11
+ date: 2013-05-06 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
- requirement: &75184820 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
- version_requirements: *75184820
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
25
27
  - !ruby/object:Gem::Dependency
26
28
  name: rspec
27
- requirement: &75184600 !ruby/object:Gem::Requirement
28
- none: false
29
+ requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
31
  - - ! '>='
31
32
  - !ruby/object:Gem::Version
32
33
  version: '0'
33
34
  type: :development
34
35
  prerelease: false
35
- version_requirements: *75184600
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
36
41
  description:
37
42
  email:
38
43
  executables: []
@@ -40,6 +45,7 @@ extensions: []
40
45
  extra_rdoc_files: []
41
46
  files:
42
47
  - .gitignore
48
+ - CHANGELOG.md
43
49
  - LICENSE
44
50
  - README.md
45
51
  - Rakefile
@@ -48,27 +54,29 @@ files:
48
54
  - spec/double_bag_ftps_spec.rb
49
55
  - spec/spec_helper.rb
50
56
  homepage: https://github.com/bnix/double-bag-ftps
51
- licenses: []
57
+ licenses:
58
+ - MIT
59
+ metadata: {}
52
60
  post_install_message:
53
61
  rdoc_options: []
54
62
  require_paths:
55
63
  - lib
56
64
  required_ruby_version: !ruby/object:Gem::Requirement
57
- none: false
58
65
  requirements:
59
66
  - - ! '>='
60
67
  - !ruby/object:Gem::Version
61
68
  version: '0'
62
69
  required_rubygems_version: !ruby/object:Gem::Requirement
63
- none: false
64
70
  requirements:
65
71
  - - ! '>='
66
72
  - !ruby/object:Gem::Version
67
73
  version: '0'
68
74
  requirements: []
69
75
  rubyforge_project:
70
- rubygems_version: 1.8.10
76
+ rubygems_version: 2.0.3
71
77
  signing_key:
72
- specification_version: 3
78
+ specification_version: 4
73
79
  summary: Provides a child class of Net::FTP to support implicit and explicit FTPS.
74
- test_files: []
80
+ test_files:
81
+ - spec/double_bag_ftps_spec.rb
82
+ - spec/spec_helper.rb