diff options
author | Damien Miller <djm@mindrot.org> | 2001-01-29 23:30:01 +0100 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2001-01-29 23:30:01 +0100 |
commit | 832562e9ba9052d41c257af2419621350ca2af01 (patch) | |
tree | 429a188e6e4b7b45bc102f61630ed7dff4a7180f | |
parent | - (djm) OpenBSD CVS Sync: (diff) | |
download | openssh-832562e9ba9052d41c257af2419621350ca2af01.tar.xz openssh-832562e9ba9052d41c257af2419621350ca2af01.zip |
- djm@cvs.openbsd.org 2001/01/29 05:36:11
[ssh.1 ssh.c]
Allow invocation of sybsystem by commandline (-s); ok markus@
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | ssh.1 | 8 | ||||
-rw-r--r-- | ssh.c | 22 |
3 files changed, 28 insertions, 5 deletions
@@ -10,6 +10,9 @@ [rsa.c rsa.h ssh-agent.c sshconnect1.c sshd.c] handle rsa_private_decrypt failures; helps against the Bleichenbacher pkcs#1 attack + - djm@cvs.openbsd.org 2001/01/29 05:36:11 + [ssh.1 ssh.c] + Allow invocation of sybsystem by commandline (-s); ok markus@ 20000129 - (stevesk) sftp-server.c: use %lld vs. %qd @@ -34,7 +34,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh.1,v 1.79 2001/01/28 20:36:16 stevesk Exp $ +.\" $OpenBSD: ssh.1,v 1.80 2001/01/29 12:36:10 djm Exp $ .Dd September 25, 1999 .Dt SSH 1 .Os @@ -48,7 +48,7 @@ .Op Ar command .Pp .Nm ssh -.Op Fl afgknqtvxACNPTX246 +.Op Fl afgknqstvxACNPTX246 .Op Fl c Ar cipher_spec .Op Fl e Ar escape_char .Op Fl i Ar identity_file @@ -470,6 +470,10 @@ for older servers. Quiet mode. Causes all warning and diagnostic messages to be suppressed. Only fatal errors are displayed. +.It Fl s +May be used to request invocation of a subsystem on the remote system. Subsystems are a feature of the SSH2 protocol which facilitate the use +of SSH as a secure transport for other application (eg. sftp). The +subsystem is specified as the remote command. .It Fl t Force pseudo-tty allocation. This can be used to execute arbitrary @@ -39,7 +39,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: ssh.c,v 1.84 2001/01/21 19:05:58 markus Exp $"); +RCSID("$OpenBSD: ssh.c,v 1.85 2001/01/29 12:36:10 djm Exp $"); #include <openssl/evp.h> #include <openssl/err.h> @@ -139,6 +139,9 @@ uid_t original_real_uid; /* command to be executed */ Buffer command; +/* Should we execute a command or invoke a subsystem? */ +int subsystem_flag = 0; + /* Prints a help message to the user. This function never returns. */ void @@ -181,6 +184,7 @@ usage() fprintf(stderr, " -6 Use IPv6 only.\n"); fprintf(stderr, " -2 Force protocol version 2.\n"); fprintf(stderr, " -o 'option' Process the option as if it was read from a configuration file.\n"); + fprintf(stderr, " -s Invoke command (mandatory) as SSH2 subsystem.\n"); exit(1); } @@ -484,6 +488,9 @@ main(int ac, char **av) "command-line", 0, &dummy) != 0) exit(1); break; + case 's': + subsystem_flag = 1; + break; default: usage(); } @@ -507,6 +514,10 @@ main(int ac, char **av) if (optind == ac) { /* No command specified - execute shell on a tty. */ tty_flag = 1; + if (subsystem_flag) { + fprintf(stderr, "You must specify a subsystem to invoke."); + usage(); + } } else { /* A command has been specified. Store it into the buffer. */ @@ -978,8 +989,13 @@ ssh_session2_callback(int id, void *arg) if (len > 0) { if (len > 900) len = 900; - debug("Sending command: %.*s", len, buffer_ptr(&command)); - channel_request_start(id, "exec", 0); + if (subsystem_flag) { + debug("Sending subsystem: %.*s", len, buffer_ptr(&command)); + channel_request_start(id, "subsystem", 0); + } else { + debug("Sending command: %.*s", len, buffer_ptr(&command)); + channel_request_start(id, "exec", 0); + } packet_put_string(buffer_ptr(&command), len); packet_send(); } else { |