summaryrefslogtreecommitdiffhomepage
path: root/cli-chansession.c
diff options
context:
space:
mode:
authorMatt Johnston <matt@ucc.asn.au>2008-09-17 14:36:49 +0000
committerMatt Johnston <matt@ucc.asn.au>2008-09-17 14:36:49 +0000
commitaf00c78e21c07f0801cc79e224323aad3e181dc5 (patch)
tree10acbe7897eb344b39aa31dcd83cdc9719ae70e7 /cli-chansession.c
parent1c72a35ddb79eede31657a450b8ba35aed24c79e (diff)
Rework netcat-alike to be a proper mode, with -B argument.
--HG-- branch : dbclient-netcat-alike extra : convert_revision : b02ba6628cf2095017c60d202ac630f231e6b553
Diffstat (limited to 'cli-chansession.c')
-rw-r--r--cli-chansession.c63
1 files changed, 38 insertions, 25 deletions
diff --git a/cli-chansession.c b/cli-chansession.c
index beb065c..07b9b9d 100644
--- a/cli-chansession.c
+++ b/cli-chansession.c
@@ -338,9 +338,8 @@ static void send_chansess_shell_req(struct Channel *channel) {
TRACE(("leave send_chansess_shell_req"))
}
-static int cli_initchansess(struct Channel *channel) {
-
-
+/* Shared for normal client channel and netcat-alike */
+static int cli_init_stdpipe_sess(struct Channel *channel) {
channel->writefd = STDOUT_FILENO;
setnonblocking(STDOUT_FILENO);
@@ -351,6 +350,12 @@ static int cli_initchansess(struct Channel *channel) {
setnonblocking(STDERR_FILENO);
channel->extrabuf = cbuf_new(opts.recv_window);
+ return 0;
+}
+
+static int cli_initchansess(struct Channel *channel) {
+
+ cli_init_stdpipe_sess(channel);
if (cli_opts.wantpty) {
send_chansess_pty_req(channel);
@@ -363,52 +368,60 @@ static int cli_initchansess(struct Channel *channel) {
}
return 0; /* Success */
-
}
-void cli_send_chansess_request() {
+#ifdef ENABLE_CLI_NETCAT
+
+void cli_send_netcat_request() {
- unsigned int port = 0;
- unsigned char* addr = NULL;
- unsigned char* ipstring = "127.0.0.1";
- unsigned char* portstring = "22";
+ const unsigned char* source_host = "127.0.0.1";
+ const int source_port = 22;
- /* hack hack */
- static const struct ChanType cli_chan_tcphack = {
+ const struct ChanType cli_chan_netcat = {
0, /* sepfds */
"direct-tcpip",
- NULL,
+ cli_init_stdpipe_sess, /* inithandler */
NULL,
NULL,
cli_closechansess
};
- TRACE(("enter cli_send_chansess_request"))
- if (send_msg_channel_open_init(STDIN_FILENO, &cli_chan_tcphack)
+ cli_opts.wantpty = 0;
+
+ if (send_msg_channel_open_init(STDIN_FILENO, &cli_chan_netcat)
== DROPBEAR_FAILURE) {
dropbear_exit("Couldn't open initial channel");
}
- if (cli_opts.localfwds == NULL) {
- dropbear_exit("You need to give a \"-L ignored:host:port\" option with this hacked up dbclient.");
- }
+ buf_putstring(ses.writepayload, cli_opts.netcat_host,
+ strlen(cli_opts.netcat_host));
+ buf_putint(ses.writepayload, cli_opts.netcat_port);
- addr = cli_opts.localfwds->connectaddr;
- port = cli_opts.localfwds->connectport;
+ /* originator ip - localhost is accurate enough */
+ buf_putstring(ses.writepayload, source_host, strlen(source_host));
+ buf_putint(ses.writepayload, source_port);
- buf_putstring(ses.writepayload, addr, strlen(addr));
- buf_putint(ses.writepayload, port);
+ encrypt_packet();
+ TRACE(("leave cli_send_chansess_request"))
+}
+#endif
- /* originator ip */
- buf_putstring(ses.writepayload, ipstring, strlen(ipstring));
- /* originator port */
- buf_putint(ses.writepayload, atol(portstring));
+void cli_send_chansess_request() {
+ TRACE(("enter cli_send_chansess_request"))
+
+ if (send_msg_channel_open_init(STDIN_FILENO, &clichansess)
+ == DROPBEAR_FAILURE) {
+ dropbear_exit("Couldn't open initial channel");
+ }
+
+ /* No special channel request data */
encrypt_packet();
TRACE(("leave cli_send_chansess_request"))
}
+
#if 0
while (cli_opts.localfwds != NULL) {
ret = cli_localtcp(cli_opts.localfwds->listenport,