aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngela Anderton Andin <[email protected]>2013-11-11 09:54:29 +0100
committerIngela Anderton Andin <[email protected]>2013-11-13 10:58:20 +0100
commite6631f5a8bbf3218eaed1e973bfb42aa40902667 (patch)
tree370efcd61f818e7ef0466a895080c2902407fca6
parent422ed9ecd9c95c25964381b7ca2888a0320a8ee4 (diff)
downloadotp-e6631f5a8bbf3218eaed1e973bfb42aa40902667.tar.gz
otp-e6631f5a8bbf3218eaed1e973bfb42aa40902667.tar.bz2
otp-e6631f5a8bbf3218eaed1e973bfb42aa40902667.zip
ssh: Add option to disallow CLI
OTP-10976
-rw-r--r--lib/ssh/doc/src/ssh.xml7
-rw-r--r--lib/ssh/src/ssh.erl2
-rw-r--r--lib/ssh/src/ssh_connection.erl2
3 files changed, 8 insertions, 3 deletions
diff --git a/lib/ssh/doc/src/ssh.xml b/lib/ssh/doc/src/ssh.xml
index 3409681af4..acf31fc0e9 100644
--- a/lib/ssh/doc/src/ssh.xml
+++ b/lib/ssh/doc/src/ssh.xml
@@ -248,13 +248,14 @@
<c><![CDATA[{shell, start, []}]]></c>
</item>
<tag><c><![CDATA[{ssh_cli, {channel_callback(),
- channel_init_args()}}]]></c></tag>
+ channel_init_args()} | no_cli}]]></c></tag>
<item>
- Provides your own cli implementation, i.e. a channel callback
+ Provides your own CLI implementation, i.e. a channel callback
module that implements a shell and command execution. Note
that you may customize the shell read-eval-print loop using the
option <c>shell</c> which is much less work than implementing
- your own cli channel.
+ your own CLI channel. If set to <c>no_cli</c> you will disable
+ CLI channels and only subsystem channels will be allowed.
</item>
<tag><c><![CDATA[{user_dir, String}]]></c></tag>
<item>
diff --git a/lib/ssh/src/ssh.erl b/lib/ssh/src/ssh.erl
index 4e78c4e65a..2685b1553b 100644
--- a/lib/ssh/src/ssh.erl
+++ b/lib/ssh/src/ssh.erl
@@ -401,6 +401,8 @@ handle_ssh_option({subsystems, Value} = Opt) when is_list(Value) ->
Opt;
handle_ssh_option({ssh_cli, {Cb, _}}= Opt) when is_atom(Cb) ->
Opt;
+handle_ssh_option({ssh_cli, no_cli} = Opt) ->
+ Opt;
handle_ssh_option({shell, {Module, Function, _}} = Opt) when is_atom(Module),
is_atom(Function) ->
Opt;
diff --git a/lib/ssh/src/ssh_connection.erl b/lib/ssh/src/ssh_connection.erl
index d3760f8295..7016f349e8 100644
--- a/lib/ssh/src/ssh_connection.erl
+++ b/lib/ssh/src/ssh_connection.erl
@@ -933,6 +933,8 @@ child_spec(Callback, Id, Args, Exec) ->
Type = worker,
{Name, StartFunc, Restart, Shutdown, Type, [ssh_channel]}.
+start_cli(#connection{cli_spec = no_cli}, _) ->
+ {error, cli_disabled};
start_cli(#connection{cli_spec = {CbModule, Args}, exec = Exec,
sub_system_supervisor = SubSysSup}, ChannelId) ->
start_channel(CbModule, ChannelId, Args, SubSysSup, Exec).