ftpd 2.0.1 → 2.0.2

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.
Files changed (141) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +6 -0
  3. data/Gemfile +2 -15
  4. data/Gemfile.lock +12 -51
  5. data/README.md +12 -0
  6. data/VERSION +1 -1
  7. data/bin/ftpdrb +17 -12
  8. data/examples/write_only.rb +61 -0
  9. data/ftpd.gemspec +59 -261
  10. data/lib/ftpd/session.rb +51 -51
  11. metadata +11 -153
  12. data/.travis.yml +0 -6
  13. data/features/example/eplf.feature +0 -14
  14. data/features/example/example.feature +0 -18
  15. data/features/example/read_only.feature +0 -63
  16. data/features/example/step_definitions/example_server.rb +0 -13
  17. data/features/ftp_server/abort.feature +0 -13
  18. data/features/ftp_server/allo.feature +0 -33
  19. data/features/ftp_server/append.feature +0 -94
  20. data/features/ftp_server/cdup.feature +0 -36
  21. data/features/ftp_server/command_errors.feature +0 -13
  22. data/features/ftp_server/concurrent_sessions.feature +0 -14
  23. data/features/ftp_server/delay_after_failed_login.feature +0 -23
  24. data/features/ftp_server/delete.feature +0 -60
  25. data/features/ftp_server/directory_navigation.feature +0 -59
  26. data/features/ftp_server/disconnect_after_failed_logins.feature +0 -25
  27. data/features/ftp_server/eprt.feature +0 -56
  28. data/features/ftp_server/epsv.feature +0 -37
  29. data/features/ftp_server/features.feature +0 -38
  30. data/features/ftp_server/file_structure.feature +0 -43
  31. data/features/ftp_server/get.feature +0 -80
  32. data/features/ftp_server/get_ipv6.feature +0 -46
  33. data/features/ftp_server/get_tls.feature +0 -23
  34. data/features/ftp_server/help.feature +0 -21
  35. data/features/ftp_server/implicit_tls.feature +0 -23
  36. data/features/ftp_server/invertability.feature +0 -15
  37. data/features/ftp_server/list.feature +0 -94
  38. data/features/ftp_server/list_tls.feature +0 -29
  39. data/features/ftp_server/logging.feature +0 -11
  40. data/features/ftp_server/login_auth_level_account.feature +0 -51
  41. data/features/ftp_server/login_auth_level_password.feature +0 -59
  42. data/features/ftp_server/login_auth_level_user.feature +0 -31
  43. data/features/ftp_server/max_connections.feature +0 -39
  44. data/features/ftp_server/mdtm.feature +0 -53
  45. data/features/ftp_server/mkdir.feature +0 -70
  46. data/features/ftp_server/mode.feature +0 -43
  47. data/features/ftp_server/name_list.feature +0 -77
  48. data/features/ftp_server/name_list_tls.feature +0 -30
  49. data/features/ftp_server/noop.feature +0 -17
  50. data/features/ftp_server/options.feature +0 -17
  51. data/features/ftp_server/pasv.feature +0 -30
  52. data/features/ftp_server/port.feature +0 -49
  53. data/features/ftp_server/put.feature +0 -79
  54. data/features/ftp_server/put_tls.feature +0 -23
  55. data/features/ftp_server/put_unique.feature +0 -56
  56. data/features/ftp_server/quit.feature +0 -23
  57. data/features/ftp_server/reinitialize.feature +0 -13
  58. data/features/ftp_server/rename.feature +0 -97
  59. data/features/ftp_server/rmdir.feature +0 -71
  60. data/features/ftp_server/site.feature +0 -13
  61. data/features/ftp_server/size.feature +0 -69
  62. data/features/ftp_server/status.feature +0 -18
  63. data/features/ftp_server/step_definitions/logging.rb +0 -10
  64. data/features/ftp_server/step_definitions/test_server.rb +0 -71
  65. data/features/ftp_server/structure_mount.feature +0 -13
  66. data/features/ftp_server/syntax_errors.feature +0 -18
  67. data/features/ftp_server/syst.feature +0 -18
  68. data/features/ftp_server/timeout.feature +0 -26
  69. data/features/ftp_server/type.feature +0 -59
  70. data/features/step_definitions/append.rb +0 -17
  71. data/features/step_definitions/client.rb +0 -27
  72. data/features/step_definitions/client_and_server_files.rb +0 -26
  73. data/features/step_definitions/client_files.rb +0 -16
  74. data/features/step_definitions/command.rb +0 -7
  75. data/features/step_definitions/connect.rb +0 -39
  76. data/features/step_definitions/delete.rb +0 -17
  77. data/features/step_definitions/directory_navigation.rb +0 -28
  78. data/features/step_definitions/error_replies.rb +0 -117
  79. data/features/step_definitions/features.rb +0 -23
  80. data/features/step_definitions/file_structure.rb +0 -18
  81. data/features/step_definitions/generic_send.rb +0 -11
  82. data/features/step_definitions/get.rb +0 -18
  83. data/features/step_definitions/help.rb +0 -20
  84. data/features/step_definitions/invalid_commands.rb +0 -13
  85. data/features/step_definitions/ipv6.rb +0 -11
  86. data/features/step_definitions/line_endings.rb +0 -9
  87. data/features/step_definitions/list.rb +0 -75
  88. data/features/step_definitions/login.rb +0 -84
  89. data/features/step_definitions/mkdir.rb +0 -11
  90. data/features/step_definitions/mode.rb +0 -17
  91. data/features/step_definitions/mtime.rb +0 -25
  92. data/features/step_definitions/noop.rb +0 -17
  93. data/features/step_definitions/options.rb +0 -11
  94. data/features/step_definitions/passive.rb +0 -10
  95. data/features/step_definitions/pending.rb +0 -5
  96. data/features/step_definitions/port.rb +0 -7
  97. data/features/step_definitions/put.rb +0 -31
  98. data/features/step_definitions/quit.rb +0 -17
  99. data/features/step_definitions/rename.rb +0 -13
  100. data/features/step_definitions/rmdir.rb +0 -11
  101. data/features/step_definitions/server_files.rb +0 -63
  102. data/features/step_definitions/server_title.rb +0 -14
  103. data/features/step_definitions/size.rb +0 -22
  104. data/features/step_definitions/status.rb +0 -11
  105. data/features/step_definitions/success_replies.rb +0 -9
  106. data/features/step_definitions/system.rb +0 -12
  107. data/features/step_definitions/timing.rb +0 -21
  108. data/features/step_definitions/type.rb +0 -17
  109. data/features/support/env.rb +0 -6
  110. data/features/support/example_server.rb +0 -69
  111. data/features/support/file_templates/ascii_unix +0 -4
  112. data/features/support/file_templates/ascii_windows +0 -4
  113. data/features/support/file_templates/binary +0 -0
  114. data/features/support/test_client.rb +0 -258
  115. data/features/support/test_file_templates.rb +0 -35
  116. data/features/support/test_server.rb +0 -304
  117. data/features/support/test_server_files.rb +0 -59
  118. data/rake_tasks/cucumber.rake +0 -9
  119. data/rake_tasks/default.rake +0 -1
  120. data/rake_tasks/jeweler.rake +0 -52
  121. data/rake_tasks/spec.rake +0 -3
  122. data/rake_tasks/test.rake +0 -2
  123. data/rake_tasks/yard.rake +0 -3
  124. data/spec/command_sequence_checker_spec.rb +0 -85
  125. data/spec/connection_throttle_spec.rb +0 -101
  126. data/spec/connection_tracker_spec.rb +0 -99
  127. data/spec/data_server_factory_spec.rb +0 -104
  128. data/spec/disk_file_system_spec.rb +0 -322
  129. data/spec/exception_translator_spec.rb +0 -38
  130. data/spec/file_info_spec.rb +0 -61
  131. data/spec/ftp_server_error_spec.rb +0 -15
  132. data/spec/list_format/eplf_spec.rb +0 -63
  133. data/spec/list_format/ls_spec.rb +0 -272
  134. data/spec/list_path_spec.rb +0 -23
  135. data/spec/null_logger_spec.rb +0 -26
  136. data/spec/protocols_spec.rb +0 -159
  137. data/spec/server_spec.rb +0 -83
  138. data/spec/spec_helper.rb +0 -17
  139. data/spec/telnet_spec.rb +0 -77
  140. data/spec/translate_exceptions_spec.rb +0 -42
  141. data/testlib/network.rb +0 -17
@@ -1,29 +0,0 @@
1
- Feature: List TLS
2
-
3
- As a client
4
- I want to list files
5
- So that I can see what file to transfer
6
-
7
- Background:
8
- Given the test server has TLS mode "explicit"
9
- And the test server is started
10
-
11
- Scenario: Active
12
- Given a successful login with explicit TLS
13
- And the server has file "foo"
14
- And the server has file "bar"
15
- And the client is in active mode
16
- When the client successfully lists the directory
17
- Then the file list should be in long form
18
- And the file list should contain "foo"
19
- And the file list should contain "bar"
20
-
21
- Scenario: Passive
22
- Given a successful login with explicit TLS
23
- And the server has file "foo"
24
- And the server has file "bar"
25
- And the client is in passive mode
26
- When the client successfully lists the directory
27
- Then the file list should be in long form
28
- And the file list should contain "foo"
29
- And the file list should contain "bar"
@@ -1,11 +0,0 @@
1
- Feature: Logging
2
-
3
- As a programmer
4
- I want to see logging output
5
- So that I can fix FTP protocol problems
6
-
7
- Scenario: Logging enabled
8
- Given the test server has logging enabled
9
- And the test server is started
10
- And a successful login
11
- Then the server should have written log output
@@ -1,51 +0,0 @@
1
- Feature: Login
2
-
3
- As a client
4
- I want to log in
5
- So that I can transfer files
6
-
7
- Background:
8
- Given the test server has auth level "AUTH_ACCOUNT"
9
- And the test server is started
10
-
11
- Scenario: Normal connection
12
- Given a successful login
13
- Then the server returns no error
14
- And the client should be logged in
15
-
16
- Scenario: Bad user
17
- Given the client connects
18
- When the client logs in with bad user
19
- Then the server returns a login incorrect error
20
- And the client should not be logged in
21
-
22
- Scenario: Bad password
23
- Given a successful connection
24
- When the client logs in with bad password
25
- Then the server returns a login incorrect error
26
- And the client should not be logged in
27
-
28
- Scenario: Bad account
29
- Given a successful connection
30
- When the client logs in with bad account
31
- Then the server returns a login incorrect error
32
- And the client should not be logged in
33
-
34
- Scenario: ACCT without parameter
35
- Given a successful connection
36
- And the client sends a user
37
- And the client sends a password
38
- When the client sends "ACCT"
39
- Then the server returns a syntax error
40
-
41
- Scenario: PASS not followed by ACCT
42
- Given a successful connection
43
- And the client sends a user
44
- And the client sends a password
45
- When the client sends "NOOP"
46
- Then the server returns a bad sequence error
47
-
48
- Scenario: ACCT out of sequence
49
- Given a successful connection
50
- When the client sends "ACCT"
51
- Then the server returns a bad sequence error
@@ -1,59 +0,0 @@
1
- Feature: Login
2
-
3
- As a client
4
- I want to log in
5
- So that I can transfer files
6
-
7
- Background:
8
- Given the test server has auth level "AUTH_PASSWORD"
9
- And the test server is started
10
-
11
- Scenario: Normal connection
12
- Given a successful login
13
- Then the server returns no error
14
- And the client should be logged in
15
-
16
- Scenario: Bad user
17
- Given the client connects
18
- When the client logs in with bad user
19
- Then the server returns a login incorrect error
20
- And the client should not be logged in
21
-
22
- Scenario: Bad password
23
- Given a successful connection
24
- When the client logs in with bad password
25
- Then the server returns a login incorrect error
26
- And the client should not be logged in
27
-
28
- Scenario: Already logged in
29
- Given a successful login
30
- When the client logs in
31
- Then the server returns a bad sequence error
32
- And the client should be logged in
33
-
34
- Scenario: PASS when already logged in
35
- Given a successful login
36
- When the client sends a password
37
- Then the server returns a bad sequence error
38
-
39
- Scenario: PASS after failed login
40
- Given a failed login
41
- When the client sends a password
42
- Then the server returns a bad sequence error
43
-
44
- Scenario: PASS without USER
45
- Given a successful connection
46
- And the client sends a password
47
- Then the server returns a bad sequence error
48
-
49
- Scenario: PASS without parameter
50
- Given a successful connection
51
- And the client sends a user
52
- When the client sends a password with no parameter
53
- Then the server returns a syntax error
54
-
55
- Scenario: USER not followed by PASS
56
- Given a successful connection
57
- And the client sends a user
58
- When the client sends "NOOP"
59
- Then the server returns a bad sequence error
@@ -1,31 +0,0 @@
1
- Feature: Login
2
-
3
- As a client
4
- I want to log in
5
- So that I can transfer files
6
-
7
- Background:
8
- Given the test server has auth level "AUTH_USER"
9
- And the test server is started
10
-
11
- Scenario: Normal connection
12
- Given a successful login
13
- Then the server returns no error
14
- And the client should be logged in
15
-
16
- Scenario: Bad user
17
- Given the client connects
18
- When the client logs in with bad user
19
- Then the server returns a login incorrect error
20
- And the client should not be logged in
21
-
22
- Scenario: Already logged in
23
- Given a successful login
24
- When the client logs in
25
- Then the server returns a bad sequence error
26
- And the client should be logged in
27
-
28
- Scenario: USER without parameter
29
- Given a successful connection
30
- And the client sends a user with no parameter
31
- Then the server returns a syntax error
@@ -1,39 +0,0 @@
1
- Feature: Max Connections
2
-
3
- As an administrator
4
- I want to limit the number of connections
5
- To prevent overload
6
-
7
- Scenario: Total connections
8
- Given the test server has max_connections set to 2
9
- And the test server is started
10
- And the 1st client connects
11
- And the 2nd client connects
12
- When the 3rd client tries to connect
13
- Then the server returns a too many connections error
14
-
15
- Scenario: Connections per user
16
- And the test server has max_connections_per_ip set to 1
17
- And the test server is started
18
- And the 1st client connects from 127.0.0.1
19
- And the 2nd client connects from 127.0.0.2
20
- When the 3rd client tries to connect from 127.0.0.2
21
- Then the server returns a too many connections error
22
-
23
- Scenario: TLS
24
- Given the test server has max_connections set to 2
25
- And the test server has TLS mode "explicit"
26
- And the test server is started
27
- And the 1st client connects
28
- And the 2nd client connects
29
- When the 3rd client tries to connect
30
- Then the server returns a too many connections error
31
-
32
- Scenario: Connections per user, TLS
33
- And the test server has max_connections_per_ip set to 1
34
- And the test server has TLS mode "explicit"
35
- And the test server is started
36
- And the 1st client connects from 127.0.0.1
37
- And the 2nd client connects from 127.0.0.2
38
- When the 3rd client tries to connect from 127.0.0.2
39
- Then the server returns a too many connections error
@@ -1,53 +0,0 @@
1
- Feature: MDTM
2
-
3
- As a client
4
- I want to get a file's modification time
5
- So that I can detect when it changes
6
-
7
- Background:
8
- Given the test server is started
9
-
10
- Scenario: File in current directory
11
- Given a successful login
12
- And the server has file "ascii_unix"
13
- And the file "ascii_unix" has mtime "2014-01-02 13:14:15.123456"
14
- When the client successfully gets mtime of "ascii_unix"
15
- Then the reported mtime should be "20140102131415"
16
-
17
- Scenario: File in subdirectory
18
- Given a successful login
19
- And the server has file "foo/ascii_unix"
20
- Then the client successfully gets mtime of "foo/ascii_unix"
21
-
22
- Scenario: Non-root working directory
23
- Given a successful login
24
- And the server has file "foo/ascii_unix"
25
- And the client successfully cd's to "foo"
26
- Then the client successfully gets mtime of "ascii_unix"
27
-
28
- Scenario: Access denied
29
- Given a successful login
30
- When the client gets mtime of "forbidden"
31
- Then the server returns an access denied error
32
-
33
- Scenario: Missing file
34
- Given a successful login
35
- When the client gets mtime of "foo"
36
- Then the server returns a not found error
37
-
38
- Scenario: Not logged in
39
- Given a successful connection
40
- When the client gets mtime of "foo"
41
- Then the server returns a not logged in error
42
-
43
- Scenario: Missing path
44
- Given a successful login
45
- When the client gets mtime with no path
46
- Then the server returns a syntax error
47
-
48
- Scenario: List not enabled
49
- Given the test server lacks list
50
- And a successful login
51
- And the server has file "foo"
52
- When the client gets mtime of "foo"
53
- Then the server returns an unimplemented command error
@@ -1,70 +0,0 @@
1
- Feature: Make directory
2
-
3
- As a client
4
- I want to create a directory
5
- So that I can categorize my uploads
6
-
7
- Background:
8
- Given the test server is started
9
-
10
- Scenario: Make directory
11
- Given a successful login
12
- When the client successfully makes directory "foo"
13
- Then the server has directory "foo"
14
-
15
- Scenario: Directory of a directory
16
- Given a successful login
17
- And the server has directory "foo"
18
- When the client successfully makes directory "foo/bar"
19
- Then the server has directory "foo/bar"
20
-
21
- Scenario: After cwd
22
- Given a successful login
23
- And the server has directory "foo"
24
- And the client successfully cd's to "foo"
25
- When the client successfully makes directory "bar"
26
- Then the server has directory "foo/bar"
27
-
28
- Scenario: XMKD
29
- Given a successful login
30
- When the client successfully sends "XMKD foo"
31
- Then the server has directory "foo"
32
-
33
- Scenario: Missing directory
34
- Given a successful login
35
- When the client makes directory "foo/bar"
36
- Then the server returns a not found error
37
-
38
- Scenario: Not logged in
39
- Given a successful connection
40
- When the client makes directory "foo"
41
- Then the server returns a not logged in error
42
-
43
- Scenario: Already exists
44
- Given a successful login
45
- And the server has directory "foo"
46
- When the client makes directory "foo"
47
- Then the server returns an already exists error
48
-
49
- Scenario: Directory of a file
50
- Given a successful login
51
- And the server has file "foo"
52
- When the client makes directory "foo/bar"
53
- Then the server returns a not a directory error
54
-
55
- Scenario: Mkdir not enabled
56
- Given the test server lacks mkdir
57
- And a successful login
58
- When the client makes directory "foo"
59
- Then the server returns an unimplemented command error
60
-
61
- Scenario: Missing path
62
- Given a successful login
63
- When the client sends "MKD"
64
- Then the server returns a syntax error
65
-
66
- Scenario: Access denied
67
- Given a successful login
68
- When the client makes directory "forbidden"
69
- Then the server returns an access denied error
70
-
@@ -1,43 +0,0 @@
1
- Feature: Mode
2
-
3
- As a client
4
- I want to set the file transfer mode
5
- So that can optimize the transfer
6
-
7
- Background:
8
- Given the test server is started
9
-
10
- Scenario: Stream
11
- Given a successful login
12
- And the server has file "ascii_unix"
13
- When the client successfully sets mode "S"
14
- And the client successfully gets text "ascii_unix"
15
- Then the remote file "ascii_unix" should match the local file
16
-
17
- Scenario: Block
18
- Given a successful login
19
- And the server has file "ascii_unix"
20
- When the client sets mode "B"
21
- Then the server returns a mode not implemented error
22
-
23
- Scenario: Compressed
24
- Given a successful login
25
- And the server has file "ascii_unix"
26
- When the client sets mode "C"
27
- Then the server returns a mode not implemented error
28
-
29
- Scenario: Invalid
30
- Given a successful login
31
- And the server has file "ascii_unix"
32
- When the client sets mode "*"
33
- Then the server returns an invalid mode error
34
-
35
- Scenario: Not logged in
36
- Given a successful connection
37
- When the client sets mode "S"
38
- Then the server returns a not logged in error
39
-
40
- Scenario: Missing parameter
41
- Given a successful login
42
- When the client sets mode with no parameter
43
- Then the server returns a syntax error
@@ -1,77 +0,0 @@
1
- Feature: Name List
2
-
3
- As a client
4
- I want to list file names
5
- So that I can see what file to transfer
6
-
7
- Background:
8
- Given the test server is started
9
-
10
- Scenario: Implicit
11
- Given a successful login
12
- And the server has file "foo"
13
- And the server has file "bar"
14
- When the client successfully name-lists the directory
15
- Then the file list should be in short form
16
- And the file list should contain "foo"
17
- And the file list should contain "bar"
18
-
19
- Scenario: Root
20
- Given a successful login
21
- And the server has file "foo"
22
- And the server has file "bar"
23
- When the client successfully name-lists the directory "/"
24
- Then the file list should be in short form
25
- And the file list should contain "foo"
26
- And the file list should contain "bar"
27
-
28
- Scenario: Parent of root
29
- Given a successful login
30
- And the server has file "foo"
31
- And the server has file "bar"
32
- When the client successfully name-lists the directory "/.."
33
- Then the file list should be in short form
34
- And the file list should contain "foo"
35
- And the file list should contain "bar"
36
-
37
- Scenario: Subdir
38
- Given a successful login
39
- And the server has file "subdir/foo"
40
- When the client successfully name-lists the directory "subdir"
41
- Then the file list should be in short form
42
- And the file list should contain "foo"
43
-
44
- Scenario: '-a'
45
- Given a successful login
46
- And the server has file "foo"
47
- And the server has file "bar"
48
- When the client successfully name-lists the directory "-a"
49
- Then the file list should be in short form
50
- And the file list should contain "foo"
51
- And the file list should contain "bar"
52
-
53
- Scenario: Passive
54
- Given a successful login
55
- And the server has file "foo"
56
- And the server has file "bar"
57
- And the client is in passive mode
58
- When the client successfully name-lists the directory
59
- Then the file list should be in short form
60
- And the file list should contain "foo"
61
- And the file list should contain "bar"
62
-
63
- Scenario: Missing directory
64
- Given a successful login
65
- When the client successfully name-lists the directory "missing/file"
66
- Then the file list should be empty
67
-
68
- Scenario: Not logged in
69
- Given a successful connection
70
- When the client name-lists the directory
71
- Then the server returns a not logged in error
72
-
73
- Scenario: List not enabled
74
- Given the test server lacks list
75
- And a successful login
76
- When the client name-lists the directory
77
- Then the server returns an unimplemented command error