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,63 +0,0 @@
1
- Feature: Example
2
-
3
- As a programmer
4
- I want to start a read-only server
5
- So that nobody can modify the file system I expose
6
-
7
- Background:
8
- Given the example has argument "--read-only"
9
- And the example server is started
10
-
11
- Scenario: Fetch README
12
- Given a successful login
13
- When the client successfully gets text "README"
14
- Then the local file "README" should match the remote file
15
-
16
- Scenario: Fetch README
17
- Given a successful login
18
- When the client successfully gets text "README"
19
- Then the local file "README" should match the remote file
20
-
21
- Scenario: List
22
- Given a successful login
23
- When the client successfully lists the directory
24
- Then the file list should be in long form
25
- And the file list should contain "README"
26
-
27
- Scenario: Name List
28
- Given a successful login
29
- When the client successfully name-lists the directory
30
- Then the file list should be in short form
31
- And the file list should contain "README"
32
-
33
- Scenario: Put
34
- Given a successful login
35
- And the client has file "foo"
36
- When the client puts text "foo"
37
- Then the server returns an unimplemented command error
38
-
39
- Scenario: Put unique
40
- Given a successful login
41
- And the client has file "foo"
42
- When the client stores unique "foo"
43
- Then the server returns an unimplemented command error
44
-
45
- Scenario: Delete
46
- Given a successful login
47
- When the client deletes "README"
48
- Then the server returns an unimplemented command error
49
-
50
- Scenario: Mkdir
51
- Given a successful login
52
- When the client makes directory "foo"
53
- Then the server returns an unimplemented command error
54
-
55
- Scenario: Rename
56
- Given a successful login
57
- When the client renames "README" to "foo"
58
- Then the server returns an unimplemented command error
59
-
60
- Scenario: Rmdir
61
- Given a successful login
62
- When the client removes directory "foo"
63
- Then the server returns an unimplemented command error
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- def example_args
4
- @example_args ||= []
5
- end
6
-
7
- Given /^the example has argument "(.*?)"$/ do |arg|
8
- example_args << arg
9
- end
10
-
11
- Given /^the example server is started$/ do
12
- @server = ExampleServer.new(example_args)
13
- end
@@ -1,13 +0,0 @@
1
- Feature: Abort
2
-
3
- As a client
4
- I want to know this command is not supported
5
- So that I can avoid using it
6
-
7
- Background:
8
- Given the test server is started
9
-
10
- Scenario: Unimplemented
11
- Given a successful connection
12
- When the client sends command "ABOR"
13
- Then the server returns an unimplemented command error
@@ -1,33 +0,0 @@
1
- Feature: ALLO
2
-
3
- As a client
4
- I want to reserve file system space
5
- So that my put will succeed
6
-
7
- Background:
8
- Given the test server is started
9
-
10
- Scenario: With count
11
- Given a successful login
12
- When the client successfully sends "ALLO 1024"
13
- Then the server returns a not necessary reply
14
-
15
- Scenario: With count and record size
16
- Given a successful login
17
- When the client successfully sends "ALLO 1024 R 128"
18
- Then the server returns a not necessary reply
19
-
20
- Scenario: Not logged in
21
- Given a successful connection
22
- When the client sends "ALLO 1024"
23
- Then the server returns a not logged in error
24
-
25
- Scenario: Missing argument
26
- Given a successful login
27
- When the client sends "ALLO"
28
- Then the server returns a syntax error
29
-
30
- Scenario: Invalid argument
31
- Given a successful login
32
- When the client sends "ALLO XYZ"
33
- Then the server returns a syntax error
@@ -1,94 +0,0 @@
1
- Feature: Append
2
-
3
- As a client
4
- I want to append to a file
5
- Because it is a log
6
-
7
- Background:
8
- Given the test server is started
9
-
10
- Scenario: ASCII file with *nix line endings
11
- Given a successful login
12
- And the server has file "foo"
13
- And the client has file "ascii_unix"
14
- When the client successfully appends text "ascii_unix" onto "foo"
15
- Then the remote file "foo" should match "foo" + "ascii_unix"
16
-
17
- Scenario: ASCII file with windows line endings
18
- Given a successful login
19
- And the server has file "foo"
20
- And the client has file "ascii_windows"
21
- When the client successfully appends text "ascii_windows" onto "foo"
22
- Then the remote file "foo" should match "foo" + "ascii_unix"
23
-
24
- Scenario: Binary file
25
- Given a successful login
26
- And the server has file "foo"
27
- And the client has file "binary"
28
- When the client successfully appends binary "binary" onto "foo"
29
- Then the remote file "foo" should match "foo" + "binary"
30
-
31
- Scenario: Passive
32
- Given a successful login
33
- And the server has file "foo"
34
- And the client has file "binary"
35
- And the client is in passive mode
36
- When the client successfully appends binary "binary" onto "foo"
37
- Then the remote file "foo" should match "foo" + "binary"
38
-
39
- Scenario: Destination missing
40
- Given a successful login
41
- And the client has file "binary"
42
- When the client successfully appends binary "binary" onto "foo"
43
- Then the remote file "foo" should match "binary"
44
-
45
- Scenario: Subdir
46
- Given a successful login
47
- And the server has file "subdir/foo"
48
- And the client has file "binary"
49
- When the client successfully appends binary "binary" onto "subdir/foo"
50
- Then the remote file "subdir/foo" should match "foo" + "binary"
51
-
52
- Scenario: Non-root working directory
53
- Given a successful login
54
- And the server has file "subdir/foo"
55
- And the client has file "binary"
56
- And the client successfully cd's to "subdir"
57
- When the client successfully appends binary "binary" onto "foo"
58
- Then the remote file "subdir/foo" should match "foo" + "binary"
59
-
60
- Scenario: Access denied
61
- Given a successful login
62
- And the client has file "foo"
63
- When the client appends binary "foo" onto "forbidden"
64
- Then the server returns an access denied error
65
-
66
- Scenario: Missing directory
67
- Given a successful login
68
- And the client has file "binary"
69
- When the client appends binary "binary" onto "subdir/foo"
70
- Then the server returns a not found error
71
-
72
- Scenario: Not logged in
73
- Given a successful connection
74
- And the client has file "foo"
75
- When the client appends binary "foo" onto "foo"
76
- Then the server returns a not logged in error
77
-
78
- Scenario: Missing path
79
- Given a successful login
80
- When the client sends "APPE"
81
- Then the server returns a syntax error
82
-
83
- Scenario: File system error
84
- Given a successful login
85
- And the client has file "foo"
86
- When the client appends text "foo" onto "unable"
87
- Then the server returns an action not taken error
88
-
89
- Scenario: Append not enabled
90
- Given the test server lacks append
91
- And a successful login
92
- And the client has file "foo"
93
- When the client appends text "foo" onto "bar"
94
- Then the server returns an unimplemented command error
@@ -1,36 +0,0 @@
1
- Feature: Change Directory
2
-
3
- As a client
4
- I want to change to the parent directory
5
-
6
- Background:
7
- Given the test server is started
8
-
9
- Scenario: From subdir
10
- Given a successful login
11
- And the server has directory "subdir"
12
- And the client successfully cd's to "subdir"
13
- When the client successfully cd's up
14
- Then the current directory should be "/"
15
-
16
- Scenario: From root
17
- Given a successful login
18
- When the client successfully cd's up
19
- Then the current directory should be "/"
20
-
21
- Scenario: XCUP
22
- Given a successful login
23
- And the server has directory "subdir"
24
- And the client successfully cd's to "subdir"
25
- When the client successfully sends "XCUP"
26
- Then the current directory should be "/"
27
-
28
- Scenario: With argument
29
- Given a successful login
30
- When the client sends "CDUP abc"
31
- Then the server returns a syntax error
32
-
33
- Scenario: Not logged in
34
- Given a successful connection
35
- When the client cd's to "subdir"
36
- Then the server returns a not logged in error
@@ -1,13 +0,0 @@
1
- Feature: Command Errors
2
-
3
- As a client
4
- I want good error messages
5
- So that I can figure out what went wrong
6
-
7
- Background:
8
- Given the test server is started
9
-
10
- Scenario: Unknown command
11
- Given a successful connection
12
- When the client sends command "foo"
13
- Then the server returns a command unrecognized error
@@ -1,14 +0,0 @@
1
- Feature: Concurrent Sessions
2
-
3
- As a client
4
- I want to start a session when there is another session
5
- So that my session doesn't have to wait on the other
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
- And the second client connects and logs in
14
- Then the second client successfully does nothing
@@ -1,23 +0,0 @@
1
- Feature: Delay After Failed Login
2
-
3
- As an administrator
4
- I want to make brute force attacks less efficient
5
- So that an attacker doesn't gain access
6
-
7
- Scenario: Failed login attempts
8
- Given the test server has a failed login delay of 0.2 seconds
9
- And the test server is started
10
- Given the client connects
11
- And the client logs in with bad user
12
- And the client logs in with bad user
13
- And the client logs in
14
- Then it should take at least 0.4 seconds
15
-
16
- Scenario: Failed login attempts
17
- Given the test server has a failed login delay of 0.0 seconds
18
- And the test server is started
19
- Given the client connects
20
- And the client logs in with bad user
21
- And the client logs in with bad user
22
- And the client logs in
23
- Then it should take less than 0.4 seconds
@@ -1,60 +0,0 @@
1
- Feature: Delete
2
-
3
- As a client
4
- I want to delete files
5
- So that nobody can fetch them from the server
6
-
7
- Background:
8
- Given the test server is started
9
-
10
- Scenario: Delete a file
11
- Given a successful login
12
- And the server has file "foo"
13
- When the client successfully deletes "foo"
14
- Then the server should not have file "foo"
15
-
16
- Scenario: Delete a file in a subdirectory
17
- Given a successful login
18
- And the server has file "foo/bar"
19
- When the client successfully deletes "foo/bar"
20
- Then the server should not have file "foo/bar"
21
-
22
- Scenario: Change current directory
23
- Given a successful login
24
- And the server has file "foo/bar"
25
- And the client successfully cd's to "foo"
26
- When the client successfully deletes "bar"
27
- Then the server should not have file "foo/bar"
28
-
29
- Scenario: Missing path
30
- Given a successful login
31
- And the server has file "foo"
32
- When the client deletes with no path
33
- Then the server returns a path required error
34
-
35
- Scenario: not found
36
- Given a successful login
37
- When the client deletes "foo"
38
- Then the server returns a not found error
39
-
40
- Scenario: Access denied
41
- Given a successful login
42
- When the client deletes "forbidden"
43
- Then the server returns an access denied error
44
-
45
- Scenario: File system error
46
- Given a successful login
47
- When the client deletes "unable"
48
- Then the server returns an action not taken error
49
-
50
- Scenario: Not logged in
51
- Given a successful connection
52
- When the client deletes "foo"
53
- Then the server returns a not logged in error
54
-
55
- Scenario: Delete not enabled
56
- Given the test server lacks delete
57
- And a successful login
58
- And the server has file "foo"
59
- When the client deletes "foo"
60
- Then the server returns an unimplemented command error
@@ -1,59 +0,0 @@
1
- Feature: Change Directory
2
-
3
- As a client
4
- I want to change the current directory
5
- So that I can use shorter paths
6
-
7
- Background:
8
- Given the test server is started
9
-
10
- Scenario: Down to subdir
11
- Given a successful login
12
- And the server has file "subdir/bar"
13
- When the client successfully cd's to "subdir"
14
- Then the current directory should be "/subdir"
15
-
16
- Scenario: Up from subdir
17
- Given a successful login
18
- And the server has file "subdir/bar"
19
- And the client successfully cd's to "subdir"
20
- When the client successfully cd's to ".."
21
- Then the current directory should be "/"
22
-
23
- Scenario: Up from root
24
- Given a successful login
25
- When the client successfully cd's to ".."
26
- Then the current directory should be "/"
27
-
28
- Scenario: XPWD
29
- Given a successful login
30
- And the server has directory "subdir"
31
- When the client successfully cd's to "subdir"
32
- Then the XPWD directory should be "/subdir"
33
-
34
- Scenario: XCWD
35
- Given a successful login
36
- And the server has directory "subdir"
37
- When the client successfully sends "XCWD subdir"
38
- Then the current directory should be "/subdir"
39
-
40
- Scenario: Change to file
41
- Given a successful login
42
- And the server has file "baz"
43
- When the client cd's to "baz"
44
- Then the server returns a not a directory error
45
-
46
- Scenario: No such directory
47
- Given a successful login
48
- When the client cd's to "subdir"
49
- Then the server returns a not found error
50
-
51
- Scenario: Access denied
52
- Given a successful login
53
- When the client cd's to "forbidden"
54
- Then the server returns an access denied error
55
-
56
- Scenario: Not logged in
57
- Given a successful connection
58
- When the client cd's to "subdir"
59
- Then the server returns a not logged in error
@@ -1,25 +0,0 @@
1
- Feature: Disconnect After Failed Logins
2
-
3
- As an administrator
4
- I want to make brute force attacks less efficient
5
- So that an attacker doesn't gain access
6
-
7
- Scenario: Disconnected after maximum failed attempts
8
- Given the test server has a max of 3 failed login attempts
9
- And the test server is started
10
- Given the client connects
11
- And the client logs in with bad user
12
- And the client logs in with bad user
13
- When the client logs in with bad user
14
- Then the server returns a server unavailable error
15
- And the client should not be connected
16
-
17
- Scenario: No maximum configured
18
- Given the test server has no max failed login attempts
19
- And the test server is started
20
- Given the client connects
21
- And the client logs in with bad user
22
- And the client logs in with bad user
23
- And the client logs in with bad user
24
- Then the server returns a login incorrect error
25
- And the client should be connected