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.
- checksums.yaml +4 -4
- data/Changelog.md +6 -0
- data/Gemfile +2 -15
- data/Gemfile.lock +12 -51
- data/README.md +12 -0
- data/VERSION +1 -1
- data/bin/ftpdrb +17 -12
- data/examples/write_only.rb +61 -0
- data/ftpd.gemspec +59 -261
- data/lib/ftpd/session.rb +51 -51
- metadata +11 -153
- data/.travis.yml +0 -6
- data/features/example/eplf.feature +0 -14
- data/features/example/example.feature +0 -18
- data/features/example/read_only.feature +0 -63
- data/features/example/step_definitions/example_server.rb +0 -13
- data/features/ftp_server/abort.feature +0 -13
- data/features/ftp_server/allo.feature +0 -33
- data/features/ftp_server/append.feature +0 -94
- data/features/ftp_server/cdup.feature +0 -36
- data/features/ftp_server/command_errors.feature +0 -13
- data/features/ftp_server/concurrent_sessions.feature +0 -14
- data/features/ftp_server/delay_after_failed_login.feature +0 -23
- data/features/ftp_server/delete.feature +0 -60
- data/features/ftp_server/directory_navigation.feature +0 -59
- data/features/ftp_server/disconnect_after_failed_logins.feature +0 -25
- data/features/ftp_server/eprt.feature +0 -56
- data/features/ftp_server/epsv.feature +0 -37
- data/features/ftp_server/features.feature +0 -38
- data/features/ftp_server/file_structure.feature +0 -43
- data/features/ftp_server/get.feature +0 -80
- data/features/ftp_server/get_ipv6.feature +0 -46
- data/features/ftp_server/get_tls.feature +0 -23
- data/features/ftp_server/help.feature +0 -21
- data/features/ftp_server/implicit_tls.feature +0 -23
- data/features/ftp_server/invertability.feature +0 -15
- data/features/ftp_server/list.feature +0 -94
- data/features/ftp_server/list_tls.feature +0 -29
- data/features/ftp_server/logging.feature +0 -11
- data/features/ftp_server/login_auth_level_account.feature +0 -51
- data/features/ftp_server/login_auth_level_password.feature +0 -59
- data/features/ftp_server/login_auth_level_user.feature +0 -31
- data/features/ftp_server/max_connections.feature +0 -39
- data/features/ftp_server/mdtm.feature +0 -53
- data/features/ftp_server/mkdir.feature +0 -70
- data/features/ftp_server/mode.feature +0 -43
- data/features/ftp_server/name_list.feature +0 -77
- data/features/ftp_server/name_list_tls.feature +0 -30
- data/features/ftp_server/noop.feature +0 -17
- data/features/ftp_server/options.feature +0 -17
- data/features/ftp_server/pasv.feature +0 -30
- data/features/ftp_server/port.feature +0 -49
- data/features/ftp_server/put.feature +0 -79
- data/features/ftp_server/put_tls.feature +0 -23
- data/features/ftp_server/put_unique.feature +0 -56
- data/features/ftp_server/quit.feature +0 -23
- data/features/ftp_server/reinitialize.feature +0 -13
- data/features/ftp_server/rename.feature +0 -97
- data/features/ftp_server/rmdir.feature +0 -71
- data/features/ftp_server/site.feature +0 -13
- data/features/ftp_server/size.feature +0 -69
- data/features/ftp_server/status.feature +0 -18
- data/features/ftp_server/step_definitions/logging.rb +0 -10
- data/features/ftp_server/step_definitions/test_server.rb +0 -71
- data/features/ftp_server/structure_mount.feature +0 -13
- data/features/ftp_server/syntax_errors.feature +0 -18
- data/features/ftp_server/syst.feature +0 -18
- data/features/ftp_server/timeout.feature +0 -26
- data/features/ftp_server/type.feature +0 -59
- data/features/step_definitions/append.rb +0 -17
- data/features/step_definitions/client.rb +0 -27
- data/features/step_definitions/client_and_server_files.rb +0 -26
- data/features/step_definitions/client_files.rb +0 -16
- data/features/step_definitions/command.rb +0 -7
- data/features/step_definitions/connect.rb +0 -39
- data/features/step_definitions/delete.rb +0 -17
- data/features/step_definitions/directory_navigation.rb +0 -28
- data/features/step_definitions/error_replies.rb +0 -117
- data/features/step_definitions/features.rb +0 -23
- data/features/step_definitions/file_structure.rb +0 -18
- data/features/step_definitions/generic_send.rb +0 -11
- data/features/step_definitions/get.rb +0 -18
- data/features/step_definitions/help.rb +0 -20
- data/features/step_definitions/invalid_commands.rb +0 -13
- data/features/step_definitions/ipv6.rb +0 -11
- data/features/step_definitions/line_endings.rb +0 -9
- data/features/step_definitions/list.rb +0 -75
- data/features/step_definitions/login.rb +0 -84
- data/features/step_definitions/mkdir.rb +0 -11
- data/features/step_definitions/mode.rb +0 -17
- data/features/step_definitions/mtime.rb +0 -25
- data/features/step_definitions/noop.rb +0 -17
- data/features/step_definitions/options.rb +0 -11
- data/features/step_definitions/passive.rb +0 -10
- data/features/step_definitions/pending.rb +0 -5
- data/features/step_definitions/port.rb +0 -7
- data/features/step_definitions/put.rb +0 -31
- data/features/step_definitions/quit.rb +0 -17
- data/features/step_definitions/rename.rb +0 -13
- data/features/step_definitions/rmdir.rb +0 -11
- data/features/step_definitions/server_files.rb +0 -63
- data/features/step_definitions/server_title.rb +0 -14
- data/features/step_definitions/size.rb +0 -22
- data/features/step_definitions/status.rb +0 -11
- data/features/step_definitions/success_replies.rb +0 -9
- data/features/step_definitions/system.rb +0 -12
- data/features/step_definitions/timing.rb +0 -21
- data/features/step_definitions/type.rb +0 -17
- data/features/support/env.rb +0 -6
- data/features/support/example_server.rb +0 -69
- data/features/support/file_templates/ascii_unix +0 -4
- data/features/support/file_templates/ascii_windows +0 -4
- data/features/support/file_templates/binary +0 -0
- data/features/support/test_client.rb +0 -258
- data/features/support/test_file_templates.rb +0 -35
- data/features/support/test_server.rb +0 -304
- data/features/support/test_server_files.rb +0 -59
- data/rake_tasks/cucumber.rake +0 -9
- data/rake_tasks/default.rake +0 -1
- data/rake_tasks/jeweler.rake +0 -52
- data/rake_tasks/spec.rake +0 -3
- data/rake_tasks/test.rake +0 -2
- data/rake_tasks/yard.rake +0 -3
- data/spec/command_sequence_checker_spec.rb +0 -85
- data/spec/connection_throttle_spec.rb +0 -101
- data/spec/connection_tracker_spec.rb +0 -99
- data/spec/data_server_factory_spec.rb +0 -104
- data/spec/disk_file_system_spec.rb +0 -322
- data/spec/exception_translator_spec.rb +0 -38
- data/spec/file_info_spec.rb +0 -61
- data/spec/ftp_server_error_spec.rb +0 -15
- data/spec/list_format/eplf_spec.rb +0 -63
- data/spec/list_format/ls_spec.rb +0 -272
- data/spec/list_path_spec.rb +0 -23
- data/spec/null_logger_spec.rb +0 -26
- data/spec/protocols_spec.rb +0 -159
- data/spec/server_spec.rb +0 -83
- data/spec/spec_helper.rb +0 -17
- data/spec/telnet_spec.rb +0 -77
- data/spec/translate_exceptions_spec.rb +0 -42
- 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
|