annotate cli-runopts.c @ 1306:34e6127ef02e

merge fixes from PuTTY import.c toint() from misc.c (revids are from hggit conversion) changeset: 4620:60a336a6c85c user: Simon Tatham <[email protected]> date: Thu Feb 25 20:26:33 2016 +0000 files: import.c description: Fix potential segfaults in reading OpenSSH's ASN.1 key format. The length coming back from ber_read_id_len might have overflowed, so treat it as potentially negative. Also, while I'm here, accumulate it inside ber_read_id_len as an unsigned, so as to avoid undefined behaviour on integer overflow, and toint() it before return. Thanks to Hanno Böck for spotting this, with the aid of AFL. (cherry picked from commit 5b7833cd474a24ec098654dcba8cb9509f3bf2c1) Conflicts: import.c (cherry-picker's note: resolving the conflict involved removing an entire section of the original commit which fixed ECDSA code not present on this branch) changeset: 4619:9c6c638d98d8 user: Simon Tatham <[email protected]> date: Sun Jul 14 10:45:54 2013 +0000 files: import.c ssh.c sshdss.c sshpubk.c sshrsa.c description: Tighten up a lot of casts from unsigned to int which are read by one of the GET_32BIT macros and then used as length fields. Missing bounds checks against zero have been added, and also I've introduced a helper function toint() which casts from unsigned to int in such a way as to avoid C undefined behaviour, since I'm not sure I trust compilers any more to do the obviously sensible thing. [originally from svn r9918] changeset: 4618:3957829f24d3 user: Simon Tatham <[email protected]> date: Mon Jul 08 22:36:04 2013 +0000 files: import.c sshdss.c sshrsa.c description: Add an assortment of extra safety checks. [originally from svn r9896] changeset: 4617:2cddee0bce12 user: Jacob Nevins <[email protected]> date: Wed Dec 07 00:24:45 2005 +0000 files: import.c description: Institutional failure to memset() things pointed at rather than pointers. Things should now be zeroed and memory not leaked. Spotted by Brant Thomsen. [originally from svn r6476] changeset: 4616:24ac78a9c71d user: Simon Tatham <[email protected]> date: Wed Feb 11 13:58:27 2004 +0000 files: import.c description: Jacob's last-minute testing found a couple of trivial bugs in import.c, and my attempts to reproduce them in cmdgen found another one there :-) [originally from svn r3847] changeset: 4615:088d39a73db0 user: Simon Tatham <[email protected]> date: Thu Jan 22 18:52:49 2004 +0000 files: import.c description: Placate some gcc warnings. [originally from svn r3761] changeset: 4614:e4288bad4d93 parent: 1758:108b8924593d user: Simon Tatham <[email protected]> date: Fri Oct 03 21:21:23 2003 +0000 files: import.c description: My ASN.1 decoder returned wrong IDs for anything above 0x1E! Good job it's never had to yet. Ahem. [originally from svn r3479]
author Matt Johnston <matt@ucc.asn.au>
date Tue, 12 Jul 2016 23:00:01 +0800
parents 9169e4e7cbee
children 750ec4ec4cbe
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
1 /*
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
2 * Dropbear - a SSH2 server
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
3 *
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
4 * Copyright (c) 2002,2003 Matt Johnston
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
5 * All rights reserved.
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
6 *
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
8 * of this software and associated documentation files (the "Software"), to deal
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
9 * in the Software without restriction, including without limitation the rights
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
11 * copies of the Software, and to permit persons to whom the Software is
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
12 * furnished to do so, subject to the following conditions:
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
13 *
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
14 * The above copyright notice and this permission notice shall be included in
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
15 * all copies or substantial portions of the Software.
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
16 *
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
23 * SOFTWARE. */
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
24
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
25 #include "includes.h"
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
26 #include "runopts.h"
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
27 #include "signkey.h"
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
28 #include "buffer.h"
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
29 #include "dbutil.h"
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
30 #include "algo.h"
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
31 #include "tcpfwd.h"
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
32 #include "list.h"
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
33
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
34 cli_runopts cli_opts; /* GLOBAL */
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
35
1276
9169e4e7cbee fix empty C prototypes
Francois Perrad <francois.perrad@gadz.org>
parents: 1268
diff changeset
36 static void printhelp(void);
489
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
37 static void parse_hostname(const char* orighostarg);
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
38 static void parse_multihop_hostname(const char* orighostarg, const char* argv0);
1276
9169e4e7cbee fix empty C prototypes
Francois Perrad <francois.perrad@gadz.org>
parents: 1268
diff changeset
39 static void fill_own_user(void);
68
eee77ac31ccc cleaning up the pubkey defines
Matt Johnston <matt@ucc.asn.au>
parents: 66
diff changeset
40 #ifdef ENABLE_CLI_PUBKEY_AUTH
995
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
41 static void loadidentityfile(const char* filename, int warnfail);
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
42 #endif
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
43 #ifdef ENABLE_CLI_ANYTCPFWD
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
44 static void addforward(const char* str, m_list *fwdlist);
485
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
45 #endif
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
46 #ifdef ENABLE_CLI_NETCAT
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
47 static void add_netcat(const char *str);
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
48 #endif
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
49 static void add_extendedopt(const char *str);
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
50
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
51 static void printhelp() {
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
52
716
af4ef98b8591 Add URL to usage text
Matt Johnston <matt@ucc.asn.au>
parents: 697
diff changeset
53 fprintf(stderr, "Dropbear SSH client v%s https://matt.ucc.asn.au/dropbear/dropbear.html\n"
509
4e251543b941 LICENSE - Update copyright to 2008
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
54 #ifdef ENABLE_CLI_MULTIHOP
4e251543b941 LICENSE - Update copyright to 2008
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
55 "Usage: %s [options] [user@]host[/port][,[user@]host/port],...] [command]\n"
4e251543b941 LICENSE - Update copyright to 2008
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
56 #else
489
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
57 "Usage: %s [options] [user@]host[/port] [command]\n"
509
4e251543b941 LICENSE - Update copyright to 2008
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
58 #endif
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
59 "-p <remoteport>\n"
258
306499676384 * add -g (dbclient) and -a (dropbear) options for allowing non-local
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
60 "-l <username>\n"
56
6f091656c100 newlines which weren't there
Matt Johnston <matt@ucc.asn.au>
parents: 47
diff changeset
61 "-t Allocate a pty\n"
6f091656c100 newlines which weren't there
Matt Johnston <matt@ucc.asn.au>
parents: 47
diff changeset
62 "-T Don't allocate a pty\n"
325
0e4f225b7e07 Add -N "no remote command" dbclient option.
Matt Johnston <matt@ucc.asn.au>
parents: 258
diff changeset
63 "-N Don't run a remote command\n"
326
d965110e3f5c add -f background option to dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 325
diff changeset
64 "-f Run in background after auth\n"
418
ab57ba0cb667 Add '-y' option to dbclient to accept the host key without checking
Matt Johnston <matt@ucc.asn.au>
parents: 412
diff changeset
65 "-y Always accept remote host key if unknown\n"
772
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
66 "-y -y Don't perform any remote host key checking (caution)\n"
697
aadfa8de977d improve subsystem/sftp documentation, and multi-hop manual formatting
Matt Johnston <matt@ucc.asn.au>
parents: 682
diff changeset
67 "-s Request a subsystem (use by external sftp)\n"
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
68 "-o option Set option in OpenSSH-like format ('-o help' to list options)\n"
68
eee77ac31ccc cleaning up the pubkey defines
Matt Johnston <matt@ucc.asn.au>
parents: 66
diff changeset
69 #ifdef ENABLE_CLI_PUBKEY_AUTH
995
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
70 "-i <identityfile> (multiple allowed, default %s)\n"
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
71 #endif
225
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
72 #ifdef ENABLE_CLI_AGENTFWD
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
73 "-A Enable agent auth forwarding\n"
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
74 #endif
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
75 #ifdef ENABLE_CLI_LOCALTCPFWD
580
dd9947170fc8 - fixes for listenaddr
Matt Johnston <matt@ucc.asn.au>
parents: 579
diff changeset
76 "-L <[listenaddress:]listenport:remotehost:remoteport> Local port forwarding\n"
258
306499676384 * add -g (dbclient) and -a (dropbear) options for allowing non-local
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
77 "-g Allow remote hosts to connect to forwarded ports\n"
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents: 56
diff changeset
78 #endif
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
79 #ifdef ENABLE_CLI_REMOTETCPFWD
580
dd9947170fc8 - fixes for listenaddr
Matt Johnston <matt@ucc.asn.au>
parents: 579
diff changeset
80 "-R <[listenaddress:]listenport:remotehost:remoteport> Remote port forwarding\n"
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents: 56
diff changeset
81 #endif
454
7e43f5e473b9 - Add -K keepalive flag for dropbear and dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 449
diff changeset
82 "-W <receive_window_buffer> (default %d, larger may be faster, max 1MB)\n"
7e43f5e473b9 - Add -K keepalive flag for dropbear and dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 449
diff changeset
83 "-K <keepalive> (0 is never, default %d)\n"
513
a3748e54273c Idle timeout patch from Farrell Aultman. Needs testing, unsure if server
Matt Johnston <matt@ucc.asn.au>
parents: 509
diff changeset
84 "-I <idle_timeout> (0 is never, default %d)\n"
485
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
85 #ifdef ENABLE_CLI_NETCAT
509
4e251543b941 LICENSE - Update copyright to 2008
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
86 "-B <endhost:endport> Netcat-alike forwarding\n"
485
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
87 #endif
479
e3db1f7a2e43 - Split main socket var into ses.sock_in/ses.sock_out in preparation
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
88 #ifdef ENABLE_CLI_PROXYCMD
509
4e251543b941 LICENSE - Update copyright to 2008
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
89 "-J <proxy_program> Use program pipe rather than TCP connection\n"
479
e3db1f7a2e43 - Split main socket var into ses.sock_in/ses.sock_out in preparation
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
90 #endif
682
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
91 #ifdef ENABLE_USER_ALGO_LIST
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
92 "-c <cipher list> Specify preferred ciphers ('-c help' to list options)\n"
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
93 "-m <MAC list> Specify preferred MACs for packet verification (or '-m help')\n"
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
94 #endif
946
17d874ae93a1 Add '-V' for version
Matt Johnston <matt@ucc.asn.au>
parents: 939
diff changeset
95 "-V Version\n"
94
c85c88500ea6 DEBUG_TRACE now only triggers with -v on the cmdline
Matt Johnston <matt@ucc.asn.au>
parents: 68
diff changeset
96 #ifdef DEBUG_TRACE
509
4e251543b941 LICENSE - Update copyright to 2008
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
97 "-v verbose (compiled with DEBUG_TRACE)\n"
94
c85c88500ea6 DEBUG_TRACE now only triggers with -v on the cmdline
Matt Johnston <matt@ucc.asn.au>
parents: 68
diff changeset
98 #endif
454
7e43f5e473b9 - Add -K keepalive flag for dropbear and dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 449
diff changeset
99 ,DROPBEAR_VERSION, cli_opts.progname,
995
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
100 #ifdef ENABLE_CLI_PUBKEY_AUTH
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
101 DROPBEAR_DEFAULT_CLI_AUTHKEY,
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
102 #endif
513
a3748e54273c Idle timeout patch from Farrell Aultman. Needs testing, unsure if server
Matt Johnston <matt@ucc.asn.au>
parents: 509
diff changeset
103 DEFAULT_RECV_WINDOW, DEFAULT_KEEPALIVE, DEFAULT_IDLE_TIMEOUT);
454
7e43f5e473b9 - Add -K keepalive flag for dropbear and dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 449
diff changeset
104
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
105 }
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
106
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
107 void cli_getopts(int argc, char ** argv) {
46
3bea78e1b175 Filled out a bit, with commandline support etc
Matt Johnston <matt@ucc.asn.au>
parents: 40
diff changeset
108 unsigned int i, j;
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
109 char ** next = 0;
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
110 enum {
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
111 OPT_EXTENDED_OPTIONS,
68
eee77ac31ccc cleaning up the pubkey defines
Matt Johnston <matt@ucc.asn.au>
parents: 66
diff changeset
112 #ifdef ENABLE_CLI_PUBKEY_AUTH
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
113 OPT_AUTHKEY,
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
114 #endif
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
115 #ifdef ENABLE_CLI_LOCALTCPFWD
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
116 OPT_LOCALTCPFWD,
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents: 56
diff changeset
117 #endif
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
118 #ifdef ENABLE_CLI_REMOTETCPFWD
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
119 OPT_REMOTETCPFWD,
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents: 56
diff changeset
120 #endif
485
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
121 #ifdef ENABLE_CLI_NETCAT
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
122 OPT_NETCAT,
485
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
123 #endif
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
124 /* a flag (no arg) if 'next' is NULL, a string-valued option otherwise */
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
125 OPT_OTHER
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
126 } opt;
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
127 unsigned int cmdlen;
66
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
128 char* dummy = NULL; /* Not used for anything real */
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
129
459
f4addc06745b Make sure declarations of variables are at the top of function,
Matt Johnston <matt@ucc.asn.au>
parents: 454
diff changeset
130 char* recv_window_arg = NULL;
f4addc06745b Make sure declarations of variables are at the top of function,
Matt Johnston <matt@ucc.asn.au>
parents: 454
diff changeset
131 char* keepalive_arg = NULL;
513
a3748e54273c Idle timeout patch from Farrell Aultman. Needs testing, unsure if server
Matt Johnston <matt@ucc.asn.au>
parents: 509
diff changeset
132 char* idle_timeout_arg = NULL;
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
133 char *host_arg = NULL;
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
134 char c;
459
f4addc06745b Make sure declarations of variables are at the top of function,
Matt Johnston <matt@ucc.asn.au>
parents: 454
diff changeset
135
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
136 /* see printhelp() for options */
40
b4874d772210 - Added terminal mode handling etc for the client, and window change
Matt Johnston <matt@ucc.asn.au>
parents: 39
diff changeset
137 cli_opts.progname = argv[0];
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
138 cli_opts.remotehost = NULL;
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
139 cli_opts.remoteport = NULL;
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
140 cli_opts.username = NULL;
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
141 cli_opts.cmd = NULL;
325
0e4f225b7e07 Add -N "no remote command" dbclient option.
Matt Johnston <matt@ucc.asn.au>
parents: 258
diff changeset
142 cli_opts.no_cmd = 0;
326
d965110e3f5c add -f background option to dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 325
diff changeset
143 cli_opts.backgrounded = 0;
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
144 cli_opts.wantpty = 9; /* 9 means "it hasn't been touched", gets set later */
418
ab57ba0cb667 Add '-y' option to dbclient to accept the host key without checking
Matt Johnston <matt@ucc.asn.au>
parents: 412
diff changeset
145 cli_opts.always_accept_key = 0;
772
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
146 cli_opts.no_hostkey_check = 0;
497
ae600f1eef81 - Enable -s for specifying a subsystem (such as sftp)
Matt Johnston <matt@ucc.asn.au>
parents: 494
diff changeset
147 cli_opts.is_subsystem = 0;
68
eee77ac31ccc cleaning up the pubkey defines
Matt Johnston <matt@ucc.asn.au>
parents: 66
diff changeset
148 #ifdef ENABLE_CLI_PUBKEY_AUTH
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
149 cli_opts.privkeys = list_new();
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
150 #endif
1206
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
151 #ifdef ENABLE_CLI_ANYTCPFWD
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
152 cli_opts.exit_on_fwd_failure = 0;
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
153 #endif
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
154 #ifdef ENABLE_CLI_LOCALTCPFWD
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
155 cli_opts.localfwds = list_new();
446
2cd2edfa11ee Just use /dev/urandom since that's what everyone ends up using anyway.
Matt Johnston <matt@ucc.asn.au>
parents: 442
diff changeset
156 opts.listen_fwd_all = 0;
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents: 56
diff changeset
157 #endif
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
158 #ifdef ENABLE_CLI_REMOTETCPFWD
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
159 cli_opts.remotefwds = list_new();
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents: 56
diff changeset
160 #endif
225
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
161 #ifdef ENABLE_CLI_AGENTFWD
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
162 cli_opts.agent_fwd = 0;
674
1291413c7c7e Initialise agent_fd to -1 so we don't end up closing stdin (fd 0)
Matt Johnston <matt@ucc.asn.au>
parents: 594
diff changeset
163 cli_opts.agent_fd = -1;
225
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
164 cli_opts.agent_keys_loaded = 0;
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
165 #endif
483
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
166 #ifdef ENABLE_CLI_PROXYCMD
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
167 cli_opts.proxycmd = NULL;
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
168 #endif
575
f9b5dc0cba61 - Disable compression for non-final multihops
Matt Johnston <matt@ucc.asn.au>
parents: 574
diff changeset
169 #ifndef DISABLE_ZLIB
996
47643024fc90 Disable non-delayed zlib for server
Matt Johnston <matt@ucc.asn.au>
parents: 995
diff changeset
170 opts.compress_mode = DROPBEAR_COMPRESS_ON;
575
f9b5dc0cba61 - Disable compression for non-final multihops
Matt Johnston <matt@ucc.asn.au>
parents: 574
diff changeset
171 #endif
682
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
172 #ifdef ENABLE_USER_ALGO_LIST
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
173 opts.cipher_list = NULL;
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
174 opts.mac_list = NULL;
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
175 #endif
1210
64a50eac1030 Moved usingsyslog from svr_runopts to runopts.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1206
diff changeset
176 #ifndef DISABLE_SYSLOG
64a50eac1030 Moved usingsyslog from svr_runopts to runopts.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1206
diff changeset
177 opts.usingsyslog = 0;
64a50eac1030 Moved usingsyslog from svr_runopts to runopts.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1206
diff changeset
178 #endif
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
179 /* not yet
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
180 opts.ipv4 = 1;
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
181 opts.ipv6 = 1;
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
182 */
449
3e6c536bc023 Add -W <windowsize> argument and document it.
Matt Johnston <matt@ucc.asn.au>
parents: 446
diff changeset
183 opts.recv_window = DEFAULT_RECV_WINDOW;
939
a0819ecfee0b Make -K keepalive behave like OpenSSH's ServerAliveInterval
Matt Johnston <matt@ucc.asn.au>
parents: 895
diff changeset
184 opts.keepalive_secs = DEFAULT_KEEPALIVE;
a0819ecfee0b Make -K keepalive behave like OpenSSH's ServerAliveInterval
Matt Johnston <matt@ucc.asn.au>
parents: 895
diff changeset
185 opts.idle_timeout_secs = DEFAULT_IDLE_TIMEOUT;
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
186
483
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
187 fill_own_user();
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
188
1171
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
189 for (i = 1; i < (unsigned int)argc; i++) {
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
190 /* Handle non-flag arguments such as hostname or commands for the remote host */
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
191 if (argv[i][0] != '-')
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
192 {
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
193 if (host_arg == NULL) {
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
194 host_arg = argv[i];
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
195 continue;
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
196 }
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
197 /* Commands to pass to the remote host. No more flag handling,
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
198 commands are consumed below */
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
199 break;
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
200 }
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
201
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
202 /* Begins with '-' */
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
203 opt = OPT_OTHER;
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
204 for (j = 1; (c = argv[i][j]) != '\0' && !next && opt == OPT_OTHER; j++) {
1153
67d8a904f5a9 don't silently ignore extra flag arguments
Matt Johnston <matt@ucc.asn.au>
parents: 1134
diff changeset
205 switch (c) {
418
ab57ba0cb667 Add '-y' option to dbclient to accept the host key without checking
Matt Johnston <matt@ucc.asn.au>
parents: 412
diff changeset
206 case 'y': /* always accept the remote hostkey */
772
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
207 if (cli_opts.always_accept_key) {
857
c19acba28590 use oldstyle comments
Matt Johnston <matt@ucc.asn.au>
parents: 852
diff changeset
208 /* twice means no checking at all */
772
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
209 cli_opts.no_hostkey_check = 1;
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
210 }
418
ab57ba0cb667 Add '-y' option to dbclient to accept the host key without checking
Matt Johnston <matt@ucc.asn.au>
parents: 412
diff changeset
211 cli_opts.always_accept_key = 1;
ab57ba0cb667 Add '-y' option to dbclient to accept the host key without checking
Matt Johnston <matt@ucc.asn.au>
parents: 412
diff changeset
212 break;
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
213 case 'p': /* remoteport */
46
3bea78e1b175 Filled out a bit, with commandline support etc
Matt Johnston <matt@ucc.asn.au>
parents: 40
diff changeset
214 next = &cli_opts.remoteport;
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
215 break;
68
eee77ac31ccc cleaning up the pubkey defines
Matt Johnston <matt@ucc.asn.au>
parents: 66
diff changeset
216 #ifdef ENABLE_CLI_PUBKEY_AUTH
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
217 case 'i': /* an identityfile */
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
218 opt = OPT_AUTHKEY;
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
219 break;
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
220 #endif
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
221 case 't': /* we want a pty */
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
222 cli_opts.wantpty = 1;
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
223 break;
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
224 case 'T': /* don't want a pty */
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
225 cli_opts.wantpty = 0;
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
226 break;
325
0e4f225b7e07 Add -N "no remote command" dbclient option.
Matt Johnston <matt@ucc.asn.au>
parents: 258
diff changeset
227 case 'N':
0e4f225b7e07 Add -N "no remote command" dbclient option.
Matt Johnston <matt@ucc.asn.au>
parents: 258
diff changeset
228 cli_opts.no_cmd = 1;
0e4f225b7e07 Add -N "no remote command" dbclient option.
Matt Johnston <matt@ucc.asn.au>
parents: 258
diff changeset
229 break;
326
d965110e3f5c add -f background option to dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 325
diff changeset
230 case 'f':
d965110e3f5c add -f background option to dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 325
diff changeset
231 cli_opts.backgrounded = 1;
d965110e3f5c add -f background option to dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 325
diff changeset
232 break;
497
ae600f1eef81 - Enable -s for specifying a subsystem (such as sftp)
Matt Johnston <matt@ucc.asn.au>
parents: 494
diff changeset
233 case 's':
ae600f1eef81 - Enable -s for specifying a subsystem (such as sftp)
Matt Johnston <matt@ucc.asn.au>
parents: 494
diff changeset
234 cli_opts.is_subsystem = 1;
ae600f1eef81 - Enable -s for specifying a subsystem (such as sftp)
Matt Johnston <matt@ucc.asn.au>
parents: 494
diff changeset
235 break;
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
236 case 'o':
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
237 opt = OPT_EXTENDED_OPTIONS;
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
238 break;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
239 #ifdef ENABLE_CLI_LOCALTCPFWD
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
240 case 'L':
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
241 opt = OPT_LOCALTCPFWD;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
242 break;
258
306499676384 * add -g (dbclient) and -a (dropbear) options for allowing non-local
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
243 case 'g':
306499676384 * add -g (dbclient) and -a (dropbear) options for allowing non-local
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
244 opts.listen_fwd_all = 1;
306499676384 * add -g (dbclient) and -a (dropbear) options for allowing non-local
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
245 break;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
246 #endif
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
247 #ifdef ENABLE_CLI_REMOTETCPFWD
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
248 case 'R':
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
249 opt = OPT_REMOTETCPFWD;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
250 break;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
251 #endif
485
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
252 #ifdef ENABLE_CLI_NETCAT
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
253 case 'B':
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
254 opt = OPT_NETCAT;
485
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
255 break;
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
256 #endif
479
e3db1f7a2e43 - Split main socket var into ses.sock_in/ses.sock_out in preparation
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
257 #ifdef ENABLE_CLI_PROXYCMD
e3db1f7a2e43 - Split main socket var into ses.sock_in/ses.sock_out in preparation
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
258 case 'J':
e3db1f7a2e43 - Split main socket var into ses.sock_in/ses.sock_out in preparation
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
259 next = &cli_opts.proxycmd;
e3db1f7a2e43 - Split main socket var into ses.sock_in/ses.sock_out in preparation
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
260 break;
e3db1f7a2e43 - Split main socket var into ses.sock_in/ses.sock_out in preparation
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
261 #endif
66
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
262 case 'l':
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
263 next = &cli_opts.username;
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
264 break;
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
265 case 'h':
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
266 printhelp();
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
267 exit(EXIT_SUCCESS);
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
268 break;
442
d82a2a44c684 Add -u option to specify /dev/urandom instead
Matt Johnston <matt@ucc.asn.au>
parents: 418
diff changeset
269 case 'u':
446
2cd2edfa11ee Just use /dev/urandom since that's what everyone ends up using anyway.
Matt Johnston <matt@ucc.asn.au>
parents: 442
diff changeset
270 /* backwards compatibility with old urandom option */
442
d82a2a44c684 Add -u option to specify /dev/urandom instead
Matt Johnston <matt@ucc.asn.au>
parents: 418
diff changeset
271 break;
449
3e6c536bc023 Add -W <windowsize> argument and document it.
Matt Johnston <matt@ucc.asn.au>
parents: 446
diff changeset
272 case 'W':
3e6c536bc023 Add -W <windowsize> argument and document it.
Matt Johnston <matt@ucc.asn.au>
parents: 446
diff changeset
273 next = &recv_window_arg;
3e6c536bc023 Add -W <windowsize> argument and document it.
Matt Johnston <matt@ucc.asn.au>
parents: 446
diff changeset
274 break;
454
7e43f5e473b9 - Add -K keepalive flag for dropbear and dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 449
diff changeset
275 case 'K':
7e43f5e473b9 - Add -K keepalive flag for dropbear and dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 449
diff changeset
276 next = &keepalive_arg;
7e43f5e473b9 - Add -K keepalive flag for dropbear and dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 449
diff changeset
277 break;
513
a3748e54273c Idle timeout patch from Farrell Aultman. Needs testing, unsure if server
Matt Johnston <matt@ucc.asn.au>
parents: 509
diff changeset
278 case 'I':
a3748e54273c Idle timeout patch from Farrell Aultman. Needs testing, unsure if server
Matt Johnston <matt@ucc.asn.au>
parents: 509
diff changeset
279 next = &idle_timeout_arg;
a3748e54273c Idle timeout patch from Farrell Aultman. Needs testing, unsure if server
Matt Johnston <matt@ucc.asn.au>
parents: 509
diff changeset
280 break;
225
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
281 #ifdef ENABLE_CLI_AGENTFWD
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
282 case 'A':
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
283 cli_opts.agent_fwd = 1;
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
284 break;
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
285 #endif
682
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
286 #ifdef ENABLE_USER_ALGO_LIST
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
287 case 'c':
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
288 next = &opts.cipher_list;
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
289 break;
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
290 case 'm':
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
291 next = &opts.mac_list;
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
292 break;
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
293 #endif
94
c85c88500ea6 DEBUG_TRACE now only triggers with -v on the cmdline
Matt Johnston <matt@ucc.asn.au>
parents: 68
diff changeset
294 #ifdef DEBUG_TRACE
c85c88500ea6 DEBUG_TRACE now only triggers with -v on the cmdline
Matt Johnston <matt@ucc.asn.au>
parents: 68
diff changeset
295 case 'v':
c85c88500ea6 DEBUG_TRACE now only triggers with -v on the cmdline
Matt Johnston <matt@ucc.asn.au>
parents: 68
diff changeset
296 debug_trace = 1;
c85c88500ea6 DEBUG_TRACE now only triggers with -v on the cmdline
Matt Johnston <matt@ucc.asn.au>
parents: 68
diff changeset
297 break;
c85c88500ea6 DEBUG_TRACE now only triggers with -v on the cmdline
Matt Johnston <matt@ucc.asn.au>
parents: 68
diff changeset
298 #endif
66
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
299 case 'F':
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
300 case 'e':
682
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
301 #ifndef ENABLE_USER_ALGO_LIST
66
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
302 case 'c':
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
303 case 'm':
682
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
304 #endif
66
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
305 case 'D':
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
306 #ifndef ENABLE_CLI_REMOTETCPFWD
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
307 case 'R':
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
308 #endif
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
309 #ifndef ENABLE_CLI_LOCALTCPFWD
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
310 case 'L':
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
311 #endif
946
17d874ae93a1 Add '-V' for version
Matt Johnston <matt@ucc.asn.au>
parents: 939
diff changeset
312 case 'V':
17d874ae93a1 Add '-V' for version
Matt Johnston <matt@ucc.asn.au>
parents: 939
diff changeset
313 print_version();
17d874ae93a1 Add '-V' for version
Matt Johnston <matt@ucc.asn.au>
parents: 939
diff changeset
314 exit(EXIT_SUCCESS);
17d874ae93a1 Add '-V' for version
Matt Johnston <matt@ucc.asn.au>
parents: 939
diff changeset
315 break;
66
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
316 case 'b':
38c3146aa23d Some more sanity-checking of args, and just warn and ignore OpenSSH args
Matt Johnston <matt@ucc.asn.au>
parents: 64
diff changeset
317 next = &dummy;
1268
968be6f7cff6 add comment FALLTHROUGH which recognize by many lint tools
Francois Perrad <francois.perrad@gadz.org>
parents: 1237
diff changeset
318 /* FALLTHROUGH */
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
319 default:
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
320 fprintf(stderr,
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
321 "WARNING: Ignoring unknown option -%c\n", c);
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
322 break;
46
3bea78e1b175 Filled out a bit, with commandline support etc
Matt Johnston <matt@ucc.asn.au>
parents: 40
diff changeset
323 } /* Switch */
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
324 }
46
3bea78e1b175 Filled out a bit, with commandline support etc
Matt Johnston <matt@ucc.asn.au>
parents: 40
diff changeset
325
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
326 if (!next && opt == OPT_OTHER) /* got a flag */
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
327 continue;
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
328
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
329 if (c == '\0') {
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
330 i++;
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
331 j = 0;
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
332 if (!argv[i])
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
333 dropbear_exit("Missing argument");
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
334 }
46
3bea78e1b175 Filled out a bit, with commandline support etc
Matt Johnston <matt@ucc.asn.au>
parents: 40
diff changeset
335
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
336 if (opt == OPT_EXTENDED_OPTIONS) {
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
337 TRACE(("opt extended"))
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
338 add_extendedopt(&argv[i][j]);
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
339 }
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
340 else
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
341 #ifdef ENABLE_CLI_PUBKEY_AUTH
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
342 if (opt == OPT_AUTHKEY) {
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
343 TRACE(("opt authkey"))
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
344 loadidentityfile(&argv[i][j], 1);
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
345 }
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
346 else
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
347 #endif
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
348 #ifdef ENABLE_CLI_REMOTETCPFWD
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
349 if (opt == OPT_REMOTETCPFWD) {
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
350 TRACE(("opt remotetcpfwd"))
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
351 addforward(&argv[i][j], cli_opts.remotefwds);
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
352 }
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
353 else
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
354 #endif
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
355 #ifdef ENABLE_CLI_LOCALTCPFWD
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
356 if (opt == OPT_LOCALTCPFWD) {
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
357 TRACE(("opt localtcpfwd"))
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
358 addforward(&argv[i][j], cli_opts.localfwds);
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
359 }
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
360 else
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
361 #endif
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
362 #ifdef ENABLE_CLI_NETCAT
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
363 if (opt == OPT_NETCAT) {
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
364 TRACE(("opt netcat"))
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
365 add_netcat(&argv[i][j]);
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
366 }
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
367 else
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
368 #endif
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
369 if (next) {
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
370 /* The previous flag set a value to assign */
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
371 *next = &argv[i][j];
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
372 if (*next == NULL)
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
373 dropbear_exit("Invalid null argument");
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
374 next = NULL;
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
375 }
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
376 }
46
3bea78e1b175 Filled out a bit, with commandline support etc
Matt Johnston <matt@ucc.asn.au>
parents: 40
diff changeset
377
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
378 /* Done with options/flags; now handle the hostname (which may not
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
379 * start with a hyphen) and optional command */
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
380
1171
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
381 if (host_arg == NULL) { /* missing hostname */
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
382 printhelp();
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
383 exit(EXIT_FAILURE);
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
384 }
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
385 TRACE(("host is: %s", host_arg))
46
3bea78e1b175 Filled out a bit, with commandline support etc
Matt Johnston <matt@ucc.asn.au>
parents: 40
diff changeset
386
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
387 if (i < (unsigned int)argc) {
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
388 /* Build the command to send */
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
389 cmdlen = 0;
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
390 for (j = i; j < (unsigned int)argc; j++)
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
391 cmdlen += strlen(argv[j]) + 1; /* +1 for spaces */
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
392
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
393 /* Allocate the space */
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
394 cli_opts.cmd = (char*)m_malloc(cmdlen);
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
395 cli_opts.cmd[0] = '\0';
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
396
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
397 /* Append all the bits */
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
398 for (j = i; j < (unsigned int)argc; j++) {
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
399 strlcat(cli_opts.cmd, argv[j], cmdlen);
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
400 strlcat(cli_opts.cmd, " ", cmdlen);
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
401 }
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
402 /* It'll be null-terminated here */
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
403 TRACE(("cmd is: %s", cli_opts.cmd))
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
404 }
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
405
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
406 /* And now a few sanity checks and setup */
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
407
682
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
408 #ifdef ENABLE_USER_ALGO_LIST
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
409 parse_ciphers_macs();
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
410 #endif
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
411
812
c936abfa9935 strdup the proxycmd to avoid crash when freeing, from Lluís Batlle i Rossell
Matt Johnston <matt@ucc.asn.au>
parents: 784
diff changeset
412 #ifdef ENABLE_CLI_PROXYCMD
c936abfa9935 strdup the proxycmd to avoid crash when freeing, from Lluís Batlle i Rossell
Matt Johnston <matt@ucc.asn.au>
parents: 784
diff changeset
413 if (cli_opts.proxycmd) {
c936abfa9935 strdup the proxycmd to avoid crash when freeing, from Lluís Batlle i Rossell
Matt Johnston <matt@ucc.asn.au>
parents: 784
diff changeset
414 /* To match the common path of m_freeing it */
c936abfa9935 strdup the proxycmd to avoid crash when freeing, from Lluís Batlle i Rossell
Matt Johnston <matt@ucc.asn.au>
parents: 784
diff changeset
415 cli_opts.proxycmd = m_strdup(cli_opts.proxycmd);
c936abfa9935 strdup the proxycmd to avoid crash when freeing, from Lluís Batlle i Rossell
Matt Johnston <matt@ucc.asn.au>
parents: 784
diff changeset
416 }
c936abfa9935 strdup the proxycmd to avoid crash when freeing, from Lluís Batlle i Rossell
Matt Johnston <matt@ucc.asn.au>
parents: 784
diff changeset
417 #endif
c936abfa9935 strdup the proxycmd to avoid crash when freeing, from Lluís Batlle i Rossell
Matt Johnston <matt@ucc.asn.au>
parents: 784
diff changeset
418
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
419 if (cli_opts.remoteport == NULL) {
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
420 cli_opts.remoteport = "22";
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
421 }
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
422
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
423 /* If not explicitly specified with -t or -T, we don't want a pty if
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
424 * there's a command, but we do otherwise */
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
425 if (cli_opts.wantpty == 9) {
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
426 if (cli_opts.cmd == NULL) {
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
427 cli_opts.wantpty = 1;
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
428 } else {
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
429 cli_opts.wantpty = 0;
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
430 }
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
431 }
326
d965110e3f5c add -f background option to dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 325
diff changeset
432
d965110e3f5c add -f background option to dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 325
diff changeset
433 if (cli_opts.backgrounded && cli_opts.cmd == NULL
d965110e3f5c add -f background option to dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 325
diff changeset
434 && cli_opts.no_cmd == 0) {
594
a98a2138364a Improve capitalisation for all logged strings
Matt Johnston <matt@ucc.asn.au>
parents: 580
diff changeset
435 dropbear_exit("Command required for -f");
326
d965110e3f5c add -f background option to dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 325
diff changeset
436 }
449
3e6c536bc023 Add -W <windowsize> argument and document it.
Matt Johnston <matt@ucc.asn.au>
parents: 446
diff changeset
437
483
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
438 if (recv_window_arg) {
449
3e6c536bc023 Add -W <windowsize> argument and document it.
Matt Johnston <matt@ucc.asn.au>
parents: 446
diff changeset
439 opts.recv_window = atol(recv_window_arg);
483
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
440 if (opts.recv_window == 0 || opts.recv_window > MAX_RECV_WINDOW) {
449
3e6c536bc023 Add -W <windowsize> argument and document it.
Matt Johnston <matt@ucc.asn.au>
parents: 446
diff changeset
441 dropbear_exit("Bad recv window '%s'", recv_window_arg);
3e6c536bc023 Add -W <windowsize> argument and document it.
Matt Johnston <matt@ucc.asn.au>
parents: 446
diff changeset
442 }
3e6c536bc023 Add -W <windowsize> argument and document it.
Matt Johnston <matt@ucc.asn.au>
parents: 446
diff changeset
443 }
454
7e43f5e473b9 - Add -K keepalive flag for dropbear and dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 449
diff changeset
444 if (keepalive_arg) {
568
005530560594 Rearrange getaddrstring() etc
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
445 unsigned int val;
005530560594 Rearrange getaddrstring() etc
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
446 if (m_str_to_uint(keepalive_arg, &val) == DROPBEAR_FAILURE) {
454
7e43f5e473b9 - Add -K keepalive flag for dropbear and dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 449
diff changeset
447 dropbear_exit("Bad keepalive '%s'", keepalive_arg);
7e43f5e473b9 - Add -K keepalive flag for dropbear and dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 449
diff changeset
448 }
568
005530560594 Rearrange getaddrstring() etc
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
449 opts.keepalive_secs = val;
454
7e43f5e473b9 - Add -K keepalive flag for dropbear and dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 449
diff changeset
450 }
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
451
513
a3748e54273c Idle timeout patch from Farrell Aultman. Needs testing, unsure if server
Matt Johnston <matt@ucc.asn.au>
parents: 509
diff changeset
452 if (idle_timeout_arg) {
568
005530560594 Rearrange getaddrstring() etc
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
453 unsigned int val;
005530560594 Rearrange getaddrstring() etc
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
454 if (m_str_to_uint(idle_timeout_arg, &val) == DROPBEAR_FAILURE) {
513
a3748e54273c Idle timeout patch from Farrell Aultman. Needs testing, unsure if server
Matt Johnston <matt@ucc.asn.au>
parents: 509
diff changeset
455 dropbear_exit("Bad idle_timeout '%s'", idle_timeout_arg);
a3748e54273c Idle timeout patch from Farrell Aultman. Needs testing, unsure if server
Matt Johnston <matt@ucc.asn.au>
parents: 509
diff changeset
456 }
568
005530560594 Rearrange getaddrstring() etc
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
457 opts.idle_timeout_secs = val;
513
a3748e54273c Idle timeout patch from Farrell Aultman. Needs testing, unsure if server
Matt Johnston <matt@ucc.asn.au>
parents: 509
diff changeset
458 }
a3748e54273c Idle timeout patch from Farrell Aultman. Needs testing, unsure if server
Matt Johnston <matt@ucc.asn.au>
parents: 509
diff changeset
459
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
460 #ifdef ENABLE_CLI_NETCAT
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
461 if (cli_opts.cmd && cli_opts.netcat_host) {
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
462 dropbear_log(LOG_INFO, "Ignoring command '%s' in netcat mode", cli_opts.cmd);
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
463 }
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
464 #endif
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
465
1085
ad14e2e71190 Fix building when ENABLE_CLI_PUBKEY_AUTH is unset
Matt Johnston <matt@ucc.asn.au>
parents: 996
diff changeset
466 #if defined(DROPBEAR_DEFAULT_CLI_AUTHKEY) && defined(ENABLE_CLI_PUBKEY_AUTH)
995
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
467 {
1134
36557295418e change DROPBEAR_DEFAULT_CLI_AUTHKEY to just prepend homedir
Matt Johnston <matt@ucc.asn.au>
parents: 1085
diff changeset
468 char *expand_path = expand_homedir_path(DROPBEAR_DEFAULT_CLI_AUTHKEY);
995
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
469 loadidentityfile(expand_path, 0);
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
470 m_free(expand_path);
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
471 }
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
472 #endif
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
473
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
474 /* The hostname gets set up last, since
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
475 * in multi-hop mode it will require knowledge
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
476 * of other flags such as -i */
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
477 #ifdef ENABLE_CLI_MULTIHOP
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
478 parse_multihop_hostname(host_arg, argv[0]);
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
479 #else
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
480 parse_hostname(host_arg);
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
481 #endif
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
482 }
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
483
68
eee77ac31ccc cleaning up the pubkey defines
Matt Johnston <matt@ucc.asn.au>
parents: 66
diff changeset
484 #ifdef ENABLE_CLI_PUBKEY_AUTH
995
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
485 static void loadidentityfile(const char* filename, int warnfail) {
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
486 sign_key *key;
852
7540c0822374 Various cleanups and fixes for warnings
Matt Johnston <matt@ucc.asn.au>
parents: 812
diff changeset
487 enum signkey_type keytype;
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
488
995
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
489 TRACE(("loadidentityfile %s", filename))
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
490
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
491 key = new_sign_key();
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
492 keytype = DROPBEAR_SIGNKEY_ANY;
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
493 if ( readhostkey(filename, key, &keytype) != DROPBEAR_SUCCESS ) {
995
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
494 if (warnfail) {
1213
7fd1211a1f63 Use dropbear_log instead of some fprintf's in client code.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1212
diff changeset
495 dropbear_log(LOG_WARNING, "Failed loading keyfile '%s'\n", filename);
995
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
496 }
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
497 sign_key_free(key);
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
498 } else {
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
499 key->type = keytype;
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
500 key->source = SIGNKEY_SOURCE_RAW_FILE;
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
501 key->filename = m_strdup(filename);
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
502 list_append(cli_opts.privkeys, key);
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
503 }
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
504 }
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
505 #endif
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
506
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
507 #ifdef ENABLE_CLI_MULTIHOP
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
508
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
509 static char*
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
510 multihop_passthrough_args() {
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
511 char *ret;
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
512 int total;
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
513 unsigned int len = 0;
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
514 m_list_elem *iter;
772
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
515 /* Fill out -i, -y, -W options that make sense for all
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
516 * the intermediate processes */
1085
ad14e2e71190 Fix building when ENABLE_CLI_PUBKEY_AUTH is unset
Matt Johnston <matt@ucc.asn.au>
parents: 996
diff changeset
517 #ifdef ENABLE_CLI_PUBKEY_AUTH
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
518 for (iter = cli_opts.privkeys->first; iter; iter = iter->next)
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
519 {
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
520 sign_key * key = (sign_key*)iter->item;
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
521 len += 3 + strlen(key->filename);
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
522 }
1085
ad14e2e71190 Fix building when ENABLE_CLI_PUBKEY_AUTH is unset
Matt Johnston <matt@ucc.asn.au>
parents: 996
diff changeset
523 #endif /* ENABLE_CLI_PUBKEY_AUTH */
ad14e2e71190 Fix building when ENABLE_CLI_PUBKEY_AUTH is unset
Matt Johnston <matt@ucc.asn.au>
parents: 996
diff changeset
524
857
c19acba28590 use oldstyle comments
Matt Johnston <matt@ucc.asn.au>
parents: 852
diff changeset
525 len += 30; /* space for -W <size>, terminator. */
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
526 ret = m_malloc(len);
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
527 total = 0;
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
528
772
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
529 if (cli_opts.no_hostkey_check)
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
530 {
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
531 int written = snprintf(ret+total, len-total, "-y -y ");
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
532 total += written;
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
533 }
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
534 else if (cli_opts.always_accept_key)
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
535 {
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
536 int written = snprintf(ret+total, len-total, "-y ");
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
537 total += written;
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
538 }
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
539
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
540 if (opts.recv_window != DEFAULT_RECV_WINDOW)
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
541 {
1237
888e3d17e962 Fix print format specifier
Chocobo1 <Chocobo1@users.noreply.github.com>
parents: 1220
diff changeset
542 int written = snprintf(ret+total, len-total, "-W %u ", opts.recv_window);
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
543 total += written;
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
544 }
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
545
1085
ad14e2e71190 Fix building when ENABLE_CLI_PUBKEY_AUTH is unset
Matt Johnston <matt@ucc.asn.au>
parents: 996
diff changeset
546 #ifdef ENABLE_CLI_PUBKEY_AUTH
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
547 for (iter = cli_opts.privkeys->first; iter; iter = iter->next)
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
548 {
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
549 sign_key * key = (sign_key*)iter->item;
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
550 const size_t size = len - total;
772
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
551 int written = snprintf(ret+total, size, "-i %s ", key->filename);
568
005530560594 Rearrange getaddrstring() etc
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
552 dropbear_assert((unsigned int)written < size);
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
553 total += written;
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
554 }
1085
ad14e2e71190 Fix building when ENABLE_CLI_PUBKEY_AUTH is unset
Matt Johnston <matt@ucc.asn.au>
parents: 996
diff changeset
555 #endif /* ENABLE_CLI_PUBKEY_AUTH */
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
556
776
f7c8b786e595 changelog updates for 2013.57
Matt Johnston <matt@ucc.asn.au>
parents: 772
diff changeset
557 /* if args were passed, total will be not zero, and it will have a space at the end, so remove that */
772
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
558 if (total > 0)
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
559 {
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
560 total--;
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
561 }
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
562
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
563 return ret;
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
564 }
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
565
489
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
566 /* Sets up 'onion-forwarding' connections. This will spawn
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
567 * a separate dbclient process for each hop.
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
568 * As an example, if the cmdline is
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
569 * dbclient wrt,madako,canyons
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
570 * then we want to run:
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
571 * dbclient -J "dbclient -B canyons:22 wrt,madako" canyons
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
572 * and then the inner dbclient will recursively run:
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
573 * dbclient -J "dbclient -B madako:22 wrt" madako
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
574 * etc for as many hosts as we want.
489
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
575 *
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
576 * Ports for hosts can be specified as host/port.
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
577 */
489
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
578 static void parse_multihop_hostname(const char* orighostarg, const char* argv0) {
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
579 char *userhostarg = NULL;
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
580 char *hostbuf = NULL;
574
b6665c1eac43 Remove extraneous semicolon
Matt Johnston <matt@ucc.asn.au>
parents: 568
diff changeset
581 char *last_hop = NULL;
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
582 char *remainder = NULL;
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
583
494
66eac4631d88 - Work around rsync and scp parsing and modifying the user@host argument,
Matt Johnston <matt@ucc.asn.au>
parents: 492
diff changeset
584 /* both scp and rsync parse a user@host argument
66eac4631d88 - Work around rsync and scp parsing and modifying the user@host argument,
Matt Johnston <matt@ucc.asn.au>
parents: 492
diff changeset
585 * and turn it into "-l user host". This breaks
66eac4631d88 - Work around rsync and scp parsing and modifying the user@host argument,
Matt Johnston <matt@ucc.asn.au>
parents: 492
diff changeset
586 * for our multihop syntax, so we suture it back together.
66eac4631d88 - Work around rsync and scp parsing and modifying the user@host argument,
Matt Johnston <matt@ucc.asn.au>
parents: 492
diff changeset
587 * This will break usernames that have both '@' and ',' in them,
66eac4631d88 - Work around rsync and scp parsing and modifying the user@host argument,
Matt Johnston <matt@ucc.asn.au>
parents: 492
diff changeset
588 * though that should be fairly uncommon. */
66eac4631d88 - Work around rsync and scp parsing and modifying the user@host argument,
Matt Johnston <matt@ucc.asn.au>
parents: 492
diff changeset
589 if (cli_opts.username
66eac4631d88 - Work around rsync and scp parsing and modifying the user@host argument,
Matt Johnston <matt@ucc.asn.au>
parents: 492
diff changeset
590 && strchr(cli_opts.username, ',')
66eac4631d88 - Work around rsync and scp parsing and modifying the user@host argument,
Matt Johnston <matt@ucc.asn.au>
parents: 492
diff changeset
591 && strchr(cli_opts.username, '@')) {
66eac4631d88 - Work around rsync and scp parsing and modifying the user@host argument,
Matt Johnston <matt@ucc.asn.au>
parents: 492
diff changeset
592 unsigned int len = strlen(orighostarg) + strlen(cli_opts.username) + 2;
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
593 hostbuf = m_malloc(len);
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
594 snprintf(hostbuf, len, "%s@%s", cli_opts.username, orighostarg);
494
66eac4631d88 - Work around rsync and scp parsing and modifying the user@host argument,
Matt Johnston <matt@ucc.asn.au>
parents: 492
diff changeset
595 } else {
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
596 hostbuf = m_strdup(orighostarg);
494
66eac4631d88 - Work around rsync and scp parsing and modifying the user@host argument,
Matt Johnston <matt@ucc.asn.au>
parents: 492
diff changeset
597 }
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
598 userhostarg = hostbuf;
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
599
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
600 last_hop = strrchr(userhostarg, ',');
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
601 if (last_hop) {
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
602 if (last_hop == userhostarg) {
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
603 dropbear_exit("Bad multi-hop hostnames");
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
604 }
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
605 *last_hop = '\0';
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
606 last_hop++;
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
607 remainder = userhostarg;
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
608 userhostarg = last_hop;
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
609 }
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
610
489
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
611 parse_hostname(userhostarg);
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
612
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
613 if (last_hop) {
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
614 /* Set up the proxycmd */
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
615 unsigned int cmd_len = 0;
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
616 char *passthrough_args = multihop_passthrough_args();
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
617 if (cli_opts.proxycmd) {
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
618 dropbear_exit("-J can't be used with multihop mode");
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
619 }
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
620 if (cli_opts.remoteport == NULL) {
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
621 cli_opts.remoteport = "22";
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
622 }
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
623 cmd_len = strlen(argv0) + strlen(remainder)
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
624 + strlen(cli_opts.remotehost) + strlen(cli_opts.remoteport)
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
625 + strlen(passthrough_args)
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
626 + 30;
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
627 cli_opts.proxycmd = m_malloc(cmd_len);
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
628 snprintf(cli_opts.proxycmd, cmd_len, "%s -B %s:%s %s %s",
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
629 argv0, cli_opts.remotehost, cli_opts.remoteport,
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
630 passthrough_args, remainder);
575
f9b5dc0cba61 - Disable compression for non-final multihops
Matt Johnston <matt@ucc.asn.au>
parents: 574
diff changeset
631 #ifndef DISABLE_ZLIB
f9b5dc0cba61 - Disable compression for non-final multihops
Matt Johnston <matt@ucc.asn.au>
parents: 574
diff changeset
632 /* The stream will be incompressible since it's encrypted. */
996
47643024fc90 Disable non-delayed zlib for server
Matt Johnston <matt@ucc.asn.au>
parents: 995
diff changeset
633 opts.compress_mode = DROPBEAR_COMPRESS_OFF;
575
f9b5dc0cba61 - Disable compression for non-final multihops
Matt Johnston <matt@ucc.asn.au>
parents: 574
diff changeset
634 #endif
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
635 m_free(passthrough_args);
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
636 }
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
637 m_free(hostbuf);
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
638 }
489
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
639 #endif /* !ENABLE_CLI_MULTIHOP */
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
640
489
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
641 /* Parses a [user@]hostname[/port] argument. */
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
642 static void parse_hostname(const char* orighostarg) {
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
643 char *userhostarg = NULL;
489
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
644 char *port = NULL;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
645
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
646 userhostarg = m_strdup(orighostarg);
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
647
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
648 cli_opts.remotehost = strchr(userhostarg, '@');
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
649 if (cli_opts.remotehost == NULL) {
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
650 /* no username portion, the cli-auth.c code can figure the
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
651 * local user's name */
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
652 cli_opts.remotehost = userhostarg;
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
653 } else {
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
654 cli_opts.remotehost[0] = '\0'; /* Split the user/host */
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
655 cli_opts.remotehost++;
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
656 cli_opts.username = userhostarg;
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
657 }
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
658
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
659 if (cli_opts.username == NULL) {
483
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
660 cli_opts.username = m_strdup(cli_opts.own_user);
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
661 }
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
662
895
5608a5a61c2a Change port separator to ^ since % is used in ipv6 addresses
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
663 port = strchr(cli_opts.remotehost, '^');
783
34e69908b3f7 Use '#' for host#port separator, document it. This fixes scp
Matt Johnston <matt@ucc.asn.au>
parents: 776
diff changeset
664 if (!port) {
857
c19acba28590 use oldstyle comments
Matt Johnston <matt@ucc.asn.au>
parents: 852
diff changeset
665 /* legacy separator */
783
34e69908b3f7 Use '#' for host#port separator, document it. This fixes scp
Matt Johnston <matt@ucc.asn.au>
parents: 776
diff changeset
666 port = strchr(cli_opts.remotehost, '/');
34e69908b3f7 Use '#' for host#port separator, document it. This fixes scp
Matt Johnston <matt@ucc.asn.au>
parents: 776
diff changeset
667 }
489
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
668 if (port) {
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
669 *port = '\0';
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
670 cli_opts.remoteport = port+1;
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
671 }
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
672
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
673 if (cli_opts.remotehost[0] == '\0') {
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
674 dropbear_exit("Bad hostname");
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
675 }
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
676 }
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
677
485
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
678 #ifdef ENABLE_CLI_NETCAT
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
679 static void add_netcat(const char* origstr) {
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
680 char *portstr = NULL;
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
681
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
682 char * str = m_strdup(origstr);
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
683
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
684 portstr = strchr(str, ':');
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
685 if (portstr == NULL) {
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
686 TRACE(("No netcat port"))
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
687 goto fail;
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
688 }
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
689 *portstr = '\0';
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
690 portstr++;
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
691
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
692 if (strchr(portstr, ':')) {
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
693 TRACE(("Multiple netcat colons"))
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
694 goto fail;
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
695 }
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
696
492
b956d6151600 Replace calls to strtoul() with a helper m_str_to_uint()
Matt Johnston <matt@ucc.asn.au>
parents: 489
diff changeset
697 if (m_str_to_uint(portstr, &cli_opts.netcat_port) == DROPBEAR_FAILURE) {
485
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
698 TRACE(("bad netcat port"))
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
699 goto fail;
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
700 }
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
701
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
702 if (cli_opts.netcat_port > 65535) {
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
703 TRACE(("too large netcat port"))
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
704 goto fail;
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
705 }
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
706
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
707 cli_opts.netcat_host = str;
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
708 return;
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
709
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
710 fail:
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
711 dropbear_exit("Bad netcat endpoint '%s'", origstr);
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
712 }
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
713 #endif
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
714
483
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
715 static void fill_own_user() {
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
716 uid_t uid;
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
717 struct passwd *pw = NULL;
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
718
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
719 uid = getuid();
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
720
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
721 pw = getpwuid(uid);
961
a4032b946355 Be a bit safer in case pw_name doesn't exist
Matt Johnston <matt@ucc.asn.au>
parents: 958
diff changeset
722 if (pw && pw->pw_name != NULL) {
a4032b946355 Be a bit safer in case pw_name doesn't exist
Matt Johnston <matt@ucc.asn.au>
parents: 958
diff changeset
723 cli_opts.own_user = m_strdup(pw->pw_name);
a4032b946355 Be a bit safer in case pw_name doesn't exist
Matt Johnston <matt@ucc.asn.au>
parents: 958
diff changeset
724 } else {
958
1bf92da7a2a0 Try without identifying current user
iquaba <cooka2011@gmail.com>
parents: 946
diff changeset
725 dropbear_log(LOG_INFO, "Warning: failed to identify current user. Trying anyway.");
961
a4032b946355 Be a bit safer in case pw_name doesn't exist
Matt Johnston <matt@ucc.asn.au>
parents: 958
diff changeset
726 cli_opts.own_user = m_strdup("unknown");
483
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
727 }
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
728
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
729 }
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
730
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
731 #ifdef ENABLE_CLI_ANYTCPFWD
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
732 /* Turn a "[listenaddr:]listenport:remoteaddr:remoteport" string into into a forwarding
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
733 * set, and add it to the forwarding list */
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
734 static void addforward(const char* origstr, m_list *fwdlist) {
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
735
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
736 char *part1 = NULL, *part2 = NULL, *part3 = NULL, *part4 = NULL;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
737 char * listenaddr = NULL;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
738 char * listenport = NULL;
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
739 char * connectaddr = NULL;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
740 char * connectport = NULL;
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
741 struct TCPFwdEntry* newfwd = NULL;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
742 char * str = NULL;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
743
165
0cfba3034be5 Fixed DEBUG_TRACE macro so that we don't get semicolons left about the place
Matt Johnston <matt@ucc.asn.au>
parents: 134
diff changeset
744 TRACE(("enter addforward"))
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
745
411
253958302381 Revert bogus fix, make a note that the var is meant to 'leak'
Matt Johnston <matt@ucc.asn.au>
parents: 407
diff changeset
746 /* We need to split the original argument up. This var
253958302381 Revert bogus fix, make a note that the var is meant to 'leak'
Matt Johnston <matt@ucc.asn.au>
parents: 407
diff changeset
747 is never free()d. */
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
748 str = m_strdup(origstr);
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
749
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
750 part1 = str;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
751
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
752 part2 = strchr(str, ':');
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
753 if (part2 == NULL) {
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
754 TRACE(("part2 == NULL"))
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
755 goto fail;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
756 }
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
757 *part2 = '\0';
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
758 part2++;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
759
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
760 part3 = strchr(part2, ':');
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
761 if (part3 == NULL) {
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
762 TRACE(("part3 == NULL"))
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
763 goto fail;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
764 }
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
765 *part3 = '\0';
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
766 part3++;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
767
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
768 part4 = strchr(part3, ':');
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
769 if (part4) {
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
770 *part4 = '\0';
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
771 part4++;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
772 }
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
773
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
774 if (part4) {
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
775 listenaddr = part1;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
776 listenport = part2;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
777 connectaddr = part3;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
778 connectport = part4;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
779 } else {
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
780 listenaddr = NULL;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
781 listenport = part1;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
782 connectaddr = part2;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
783 connectport = part3;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
784 }
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
785
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
786 newfwd = m_malloc(sizeof(struct TCPFwdEntry));
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
787
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
788 /* Now we check the ports - note that the port ints are unsigned,
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
789 * the check later only checks for >= MAX_PORT */
492
b956d6151600 Replace calls to strtoul() with a helper m_str_to_uint()
Matt Johnston <matt@ucc.asn.au>
parents: 489
diff changeset
790 if (m_str_to_uint(listenport, &newfwd->listenport) == DROPBEAR_FAILURE) {
b956d6151600 Replace calls to strtoul() with a helper m_str_to_uint()
Matt Johnston <matt@ucc.asn.au>
parents: 489
diff changeset
791 TRACE(("bad listenport strtoul"))
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
792 goto fail;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
793 }
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
794
492
b956d6151600 Replace calls to strtoul() with a helper m_str_to_uint()
Matt Johnston <matt@ucc.asn.au>
parents: 489
diff changeset
795 if (m_str_to_uint(connectport, &newfwd->connectport) == DROPBEAR_FAILURE) {
b956d6151600 Replace calls to strtoul() with a helper m_str_to_uint()
Matt Johnston <matt@ucc.asn.au>
parents: 489
diff changeset
796 TRACE(("bad connectport strtoul"))
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
797 goto fail;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
798 }
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
799
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
800 newfwd->listenaddr = listenaddr;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
801 newfwd->connectaddr = connectaddr;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
802
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
803 if (newfwd->listenport > 65535) {
165
0cfba3034be5 Fixed DEBUG_TRACE macro so that we don't get semicolons left about the place
Matt Johnston <matt@ucc.asn.au>
parents: 134
diff changeset
804 TRACE(("listenport > 65535"))
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
805 goto badport;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
806 }
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
807
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
808 if (newfwd->connectport > 65535) {
165
0cfba3034be5 Fixed DEBUG_TRACE macro so that we don't get semicolons left about the place
Matt Johnston <matt@ucc.asn.au>
parents: 134
diff changeset
809 TRACE(("connectport > 65535"))
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
810 goto badport;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
811 }
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
812
505
805e557fdff7 Report errors if a remote request fails
Matt Johnston <matt@ucc.asn.au>
parents: 497
diff changeset
813 newfwd->have_reply = 0;
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
814 list_append(fwdlist, newfwd);
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
815
165
0cfba3034be5 Fixed DEBUG_TRACE macro so that we don't get semicolons left about the place
Matt Johnston <matt@ucc.asn.au>
parents: 134
diff changeset
816 TRACE(("leave addforward: done"))
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
817 return;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
818
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
819 fail:
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
820 dropbear_exit("Bad TCP forward '%s'", origstr);
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
821
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
822 badport:
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
823 dropbear_exit("Bad TCP port in '%s'", origstr);
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
824 }
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
825 #endif
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
826
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
827 static int match_extendedopt(const char** strptr, const char *optname) {
1220
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
828 int seen_eq = 0;
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
829 int optlen = strlen(optname);
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
830 const char *str = *strptr;
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
831
1220
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
832 while (isspace(*str)) {
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
833 ++str;
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
834 }
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
835
1215
d058e15ea213 A few minor style fixes
Matt Johnston <matt@ucc.asn.au>
parents: 1213
diff changeset
836 if (strncasecmp(str, optname, optlen) != 0) {
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
837 return DROPBEAR_FAILURE;
1215
d058e15ea213 A few minor style fixes
Matt Johnston <matt@ucc.asn.au>
parents: 1213
diff changeset
838 }
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
839
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
840 str += optlen;
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
841
1220
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
842 while (isspace(*str) || (!seen_eq && *str == '=')) {
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
843 if (*str == '=') {
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
844 seen_eq = 1;
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
845 }
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
846 ++str;
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
847 }
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
848
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
849 if (str-*strptr == optlen) {
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
850 /* matched just a prefix of optname */
1218
b73c078e11e9 Don't allow spaces and don't get confused by -o usesyslogd=yes
Matt Johnston <matt@ucc.asn.au>
parents: 1217
diff changeset
851 return DROPBEAR_FAILURE;
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
852 }
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
853
1220
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
854 *strptr = str;
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
855 return DROPBEAR_SUCCESS;
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
856 }
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
857
1215
d058e15ea213 A few minor style fixes
Matt Johnston <matt@ucc.asn.au>
parents: 1213
diff changeset
858 static int parse_flag_value(const char *value) {
d058e15ea213 A few minor style fixes
Matt Johnston <matt@ucc.asn.au>
parents: 1213
diff changeset
859 if (strcmp(value, "yes") == 0 || strcmp(value, "true") == 0) {
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
860 return 1;
1215
d058e15ea213 A few minor style fixes
Matt Johnston <matt@ucc.asn.au>
parents: 1213
diff changeset
861 } else if (strcmp(value, "no") == 0 || strcmp(value, "false") == 0) {
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
862 return 0;
1215
d058e15ea213 A few minor style fixes
Matt Johnston <matt@ucc.asn.au>
parents: 1213
diff changeset
863 }
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
864
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
865 dropbear_exit("Bad yes/no argument '%s'", value);
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
866 }
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
867
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
868 static void add_extendedopt(const char* origstr) {
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
869 const char *optstr = origstr;
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
870
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
871 if (strcmp(origstr, "help") == 0) {
1206
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
872 dropbear_log(LOG_INFO, "Available options:\n"
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
873 #ifdef ENABLE_CLI_ANYTCPFWD
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
874 "\tExitOnForwardFailure\n"
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
875 #endif
1212
bf626d259eb1 Support syslog logging in dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1210
diff changeset
876 #ifndef DISABLE_SYSLOG
bf626d259eb1 Support syslog logging in dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1210
diff changeset
877 "\tUseSyslog\n"
bf626d259eb1 Support syslog logging in dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1210
diff changeset
878 #endif
1206
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
879 );
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
880 exit(EXIT_SUCCESS);
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
881 }
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
882
1206
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
883 #ifdef ENABLE_CLI_ANYTCPFWD
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
884 if (match_extendedopt(&optstr, "ExitOnForwardFailure") == DROPBEAR_SUCCESS) {
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
885 cli_opts.exit_on_fwd_failure = parse_flag_value(optstr);
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
886 return;
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
887 }
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
888 #endif
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
889
1212
bf626d259eb1 Support syslog logging in dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1210
diff changeset
890 #ifndef DISABLE_SYSLOG
bf626d259eb1 Support syslog logging in dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1210
diff changeset
891 if (match_extendedopt(&optstr, "UseSyslog") == DROPBEAR_SUCCESS) {
bf626d259eb1 Support syslog logging in dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1210
diff changeset
892 opts.usingsyslog = parse_flag_value(optstr);
bf626d259eb1 Support syslog logging in dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1210
diff changeset
893 return;
bf626d259eb1 Support syslog logging in dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1210
diff changeset
894 }
bf626d259eb1 Support syslog logging in dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1210
diff changeset
895 #endif
bf626d259eb1 Support syslog logging in dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1210
diff changeset
896
1217
980b7ea2c5ef unknown options should be non-fatal
Matt Johnston <matt@ucc.asn.au>
parents: 1215
diff changeset
897 dropbear_log(LOG_WARNING, "Ignoring unknown configuration option '%s'", origstr);
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
898 }