annotate cli-runopts.c @ 1930:299f4f19ba19

Add /usr/sbin and /sbin to default root PATH When dropbear is used in a very restricted environment (such as in a initrd), the default user shell is often also very restricted and doesn't take care of setting the PATH so the user ends up with the PATH set by dropbear. Unfortunately, dropbear always sets "/usr/bin:/bin" as default PATH even for the root user which should have /usr/sbin and /sbin too. For a concrete instance of this problem, see the "Remote Unlocking" section in this tutorial: https://paxswill.com/blog/2013/11/04/encrypted-raspberry-pi/ It speaks of a bug in the initramfs script because it's written "blkid" instead of "/sbin/blkid"... this is just because the scripts from the initramfs do not expect to have a PATH without the sbin directories and because dropbear is not setting the PATH appropriately for the root user. I'm thus suggesting to use the attached patch to fix this misbehaviour (I did not test it, but it's easy enough). It might seem anecdotic but multiple Kali users have been bitten by this. From https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=903403
author Raphael Hertzog <hertzog@debian.org>
date Mon, 09 Jul 2018 16:27:53 +0200
parents 3442105b2aba
children e093ddc5b585
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);
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
40 #if DROPBEAR_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
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
43 #if DROPBEAR_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
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
46 #if DROPBEAR_CLI_NETCAT
485
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"
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
54 #if DROPBEAR_CLI_MULTIHOP
509
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"
1877
33363a68784d use option -q for suppression remote banner output, pass option also for proxy command
HansH111 <hans@atbas.org>
parents: 1834
diff changeset
65 "-q quiet, don't show remote banner\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
66 "-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
67 "-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
68 "-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
69 "-o option Set option in OpenSSH-like format ('-o help' to list options)\n"
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
70 #if DROPBEAR_CLI_PUBKEY_AUTH
995
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
71 "-i <identityfile> (multiple allowed, default %s)\n"
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
72 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
73 #if DROPBEAR_CLI_AGENTFWD
225
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
74 "-A Enable agent auth forwarding\n"
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
75 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
76 #if DROPBEAR_CLI_LOCALTCPFWD
580
dd9947170fc8 - fixes for listenaddr
Matt Johnston <matt@ucc.asn.au>
parents: 579
diff changeset
77 "-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
78 "-g Allow remote hosts to connect to forwarded ports\n"
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents: 56
diff changeset
79 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
80 #if DROPBEAR_CLI_REMOTETCPFWD
580
dd9947170fc8 - fixes for listenaddr
Matt Johnston <matt@ucc.asn.au>
parents: 579
diff changeset
81 "-R <[listenaddress:]listenport:remotehost:remoteport> Remote port forwarding\n"
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents: 56
diff changeset
82 #endif
1834
94dc11094e26 Increase max window size to 10MB, fallback rather than
Matt Johnston <matt@codeconstruct.com.au>
parents: 1821
diff changeset
83 "-W <receive_window_buffer> (default %d, larger may be faster, max 10MB)\n"
454
7e43f5e473b9 - Add -K keepalive flag for dropbear and dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 449
diff changeset
84 "-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
85 "-I <idle_timeout> (0 is never, default %d)\n"
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
86 #if DROPBEAR_CLI_NETCAT
509
4e251543b941 LICENSE - Update copyright to 2008
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
87 "-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
88 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
89 #if DROPBEAR_CLI_PROXYCMD
509
4e251543b941 LICENSE - Update copyright to 2008
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
90 "-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
91 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
92 #if DROPBEAR_USER_ALGO_LIST
682
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
93 "-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
94 "-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
95 #endif
1466
f787f60f8e45 bind to port as well with -b
Matt Johnston <matt@ucc.asn.au>
parents: 1465
diff changeset
96 "-b [bind_address][:bind_port]\n"
946
17d874ae93a1 Add '-V' for version
Matt Johnston <matt@ucc.asn.au>
parents: 939
diff changeset
97 "-V Version\n"
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
98 #if DEBUG_TRACE
1892
3442105b2aba increase verboseness by allowing multiple -v
HansH111 <hans@atbas.org>
parents: 1877
diff changeset
99 "-v verbose (repeat for more verbose)\n"
94
c85c88500ea6 DEBUG_TRACE now only triggers with -v on the cmdline
Matt Johnston <matt@ucc.asn.au>
parents: 68
diff changeset
100 #endif
454
7e43f5e473b9 - Add -K keepalive flag for dropbear and dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 449
diff changeset
101 ,DROPBEAR_VERSION, cli_opts.progname,
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
102 #if DROPBEAR_CLI_PUBKEY_AUTH
995
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
103 DROPBEAR_DEFAULT_CLI_AUTHKEY,
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
104 #endif
513
a3748e54273c Idle timeout patch from Farrell Aultman. Needs testing, unsure if server
Matt Johnston <matt@ucc.asn.au>
parents: 509
diff changeset
105 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
106
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
107 }
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
108
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
109 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
110 unsigned int i, j;
1404
e8f67918fdc9 when pointer, use NULL instead of 0
Francois Perrad <francois.perrad@gadz.org>
parents: 1295
diff changeset
111 char ** next = NULL;
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
112 enum {
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
113 OPT_EXTENDED_OPTIONS,
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
114 #if DROPBEAR_CLI_PUBKEY_AUTH
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
115 OPT_AUTHKEY,
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
116 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
117 #if DROPBEAR_CLI_LOCALTCPFWD
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
118 OPT_LOCALTCPFWD,
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents: 56
diff changeset
119 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
120 #if DROPBEAR_CLI_REMOTETCPFWD
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
121 OPT_REMOTETCPFWD,
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents: 56
diff changeset
122 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
123 #if DROPBEAR_CLI_NETCAT
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
124 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
125 #endif
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
126 /* 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
127 OPT_OTHER
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
128 } opt;
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
129 unsigned int cmdlen;
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
130
459
f4addc06745b Make sure declarations of variables are at the top of function,
Matt Johnston <matt@ucc.asn.au>
parents: 454
diff changeset
131 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
132 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
133 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
134 char *host_arg = NULL;
1466
f787f60f8e45 bind to port as well with -b
Matt Johnston <matt@ucc.asn.au>
parents: 1465
diff changeset
135 char *bind_arg = NULL;
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
136 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
137
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
138 /* 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
139 cli_opts.progname = argv[0];
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
140 cli_opts.remotehost = NULL;
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
141 cli_opts.remoteport = NULL;
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
142 cli_opts.username = NULL;
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
143 cli_opts.cmd = NULL;
325
0e4f225b7e07 Add -N "no remote command" dbclient option.
Matt Johnston <matt@ucc.asn.au>
parents: 258
diff changeset
144 cli_opts.no_cmd = 0;
1877
33363a68784d use option -q for suppression remote banner output, pass option also for proxy command
HansH111 <hans@atbas.org>
parents: 1834
diff changeset
145 cli_opts.quiet = 0;
326
d965110e3f5c add -f background option to dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 325
diff changeset
146 cli_opts.backgrounded = 0;
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
147 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
148 cli_opts.always_accept_key = 0;
772
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
149 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
150 cli_opts.is_subsystem = 0;
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
151 #if DROPBEAR_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
152 cli_opts.privkeys = list_new();
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
153 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
154 #if DROPBEAR_CLI_ANYTCPFWD
1206
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
155 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
156 #endif
1821
df8d8ec1801c added option to disable trivial auth methods (#128)
Manfred Kaiser <37737811+manfred-kaiser@users.noreply.github.com>
parents: 1687
diff changeset
157 cli_opts.disable_trivial_auth = 0;
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
158 #if DROPBEAR_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
159 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
160 opts.listen_fwd_all = 0;
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents: 56
diff changeset
161 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
162 #if DROPBEAR_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
163 cli_opts.remotefwds = list_new();
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents: 56
diff changeset
164 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
165 #if DROPBEAR_CLI_AGENTFWD
225
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
166 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
167 cli_opts.agent_fd = -1;
225
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
168 cli_opts.agent_keys_loaded = 0;
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
169 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
170 #if DROPBEAR_CLI_PROXYCMD
483
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
171 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
172 #endif
1465
f7a53832501d cli_bind_address_connect
houseofkodai <karthik@houseofkodai.in>
parents: 1404
diff changeset
173 cli_opts.bind_address = NULL;
1466
f787f60f8e45 bind to port as well with -b
Matt Johnston <matt@ucc.asn.au>
parents: 1465
diff changeset
174 cli_opts.bind_port = NULL;
575
f9b5dc0cba61 - Disable compression for non-final multihops
Matt Johnston <matt@ucc.asn.au>
parents: 574
diff changeset
175 #ifndef DISABLE_ZLIB
996
47643024fc90 Disable non-delayed zlib for server
Matt Johnston <matt@ucc.asn.au>
parents: 995
diff changeset
176 opts.compress_mode = DROPBEAR_COMPRESS_ON;
575
f9b5dc0cba61 - Disable compression for non-final multihops
Matt Johnston <matt@ucc.asn.au>
parents: 574
diff changeset
177 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
178 #if DROPBEAR_USER_ALGO_LIST
682
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
179 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
180 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
181 #endif
1210
64a50eac1030 Moved usingsyslog from svr_runopts to runopts.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1206
diff changeset
182 #ifndef DISABLE_SYSLOG
64a50eac1030 Moved usingsyslog from svr_runopts to runopts.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1206
diff changeset
183 opts.usingsyslog = 0;
64a50eac1030 Moved usingsyslog from svr_runopts to runopts.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1206
diff changeset
184 #endif
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
185 /* not yet
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
186 opts.ipv4 = 1;
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
187 opts.ipv6 = 1;
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
188 */
449
3e6c536bc023 Add -W <windowsize> argument and document it.
Matt Johnston <matt@ucc.asn.au>
parents: 446
diff changeset
189 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
190 opts.keepalive_secs = DEFAULT_KEEPALIVE;
a0819ecfee0b Make -K keepalive behave like OpenSSH's ServerAliveInterval
Matt Johnston <matt@ucc.asn.au>
parents: 895
diff changeset
191 opts.idle_timeout_secs = DEFAULT_IDLE_TIMEOUT;
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
192
483
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
193 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
194
1171
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
195 for (i = 1; i < (unsigned int)argc; i++) {
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
196 /* 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
197 if (argv[i][0] != '-')
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
198 {
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
199 if (host_arg == NULL) {
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
200 host_arg = argv[i];
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
201 continue;
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
202 }
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
203 /* 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
204 commands are consumed below */
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
205 break;
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
206 }
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
207
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
208 /* Begins with '-' */
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
209 opt = OPT_OTHER;
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
210 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
211 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
212 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
213 if (cli_opts.always_accept_key) {
857
c19acba28590 use oldstyle comments
Matt Johnston <matt@ucc.asn.au>
parents: 852
diff changeset
214 /* twice means no checking at all */
772
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
215 cli_opts.no_hostkey_check = 1;
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
216 }
418
ab57ba0cb667 Add '-y' option to dbclient to accept the host key without checking
Matt Johnston <matt@ucc.asn.au>
parents: 412
diff changeset
217 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
218 break;
1877
33363a68784d use option -q for suppression remote banner output, pass option also for proxy command
HansH111 <hans@atbas.org>
parents: 1834
diff changeset
219 case 'q': /* quiet */
33363a68784d use option -q for suppression remote banner output, pass option also for proxy command
HansH111 <hans@atbas.org>
parents: 1834
diff changeset
220 cli_opts.quiet = 1;
33363a68784d use option -q for suppression remote banner output, pass option also for proxy command
HansH111 <hans@atbas.org>
parents: 1834
diff changeset
221 break;
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
222 case 'p': /* remoteport */
1642
21dabe66f2c8 fix constness build error
Matt Johnston <matt@ucc.asn.au>
parents: 1637
diff changeset
223 next = (char**)&cli_opts.remoteport;
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
224 break;
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
225 #if DROPBEAR_CLI_PUBKEY_AUTH
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
226 case 'i': /* an identityfile */
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
227 opt = OPT_AUTHKEY;
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
228 break;
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
229 #endif
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
230 case 't': /* we want a pty */
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
231 cli_opts.wantpty = 1;
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
232 break;
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
233 case 'T': /* don't want a pty */
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
234 cli_opts.wantpty = 0;
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
235 break;
325
0e4f225b7e07 Add -N "no remote command" dbclient option.
Matt Johnston <matt@ucc.asn.au>
parents: 258
diff changeset
236 case 'N':
0e4f225b7e07 Add -N "no remote command" dbclient option.
Matt Johnston <matt@ucc.asn.au>
parents: 258
diff changeset
237 cli_opts.no_cmd = 1;
0e4f225b7e07 Add -N "no remote command" dbclient option.
Matt Johnston <matt@ucc.asn.au>
parents: 258
diff changeset
238 break;
326
d965110e3f5c add -f background option to dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 325
diff changeset
239 case 'f':
d965110e3f5c add -f background option to dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 325
diff changeset
240 cli_opts.backgrounded = 1;
d965110e3f5c add -f background option to dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 325
diff changeset
241 break;
497
ae600f1eef81 - Enable -s for specifying a subsystem (such as sftp)
Matt Johnston <matt@ucc.asn.au>
parents: 494
diff changeset
242 case 's':
ae600f1eef81 - Enable -s for specifying a subsystem (such as sftp)
Matt Johnston <matt@ucc.asn.au>
parents: 494
diff changeset
243 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
244 break;
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
245 case 'o':
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
246 opt = OPT_EXTENDED_OPTIONS;
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
247 break;
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
248 #if DROPBEAR_CLI_LOCALTCPFWD
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
249 case 'L':
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
250 opt = OPT_LOCALTCPFWD;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
251 break;
258
306499676384 * add -g (dbclient) and -a (dropbear) options for allowing non-local
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
252 case 'g':
306499676384 * add -g (dbclient) and -a (dropbear) options for allowing non-local
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
253 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
254 break;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
255 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
256 #if DROPBEAR_CLI_REMOTETCPFWD
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
257 case 'R':
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
258 opt = OPT_REMOTETCPFWD;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
259 break;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
260 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
261 #if DROPBEAR_CLI_NETCAT
485
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
262 case 'B':
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
263 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
264 break;
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
265 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
266 #if DROPBEAR_CLI_PROXYCMD
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
267 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
268 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
269 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
270 #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
271 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
272 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
273 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
274 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
275 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
276 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
277 break;
442
d82a2a44c684 Add -u option to specify /dev/urandom instead
Matt Johnston <matt@ucc.asn.au>
parents: 418
diff changeset
278 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
279 /* 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
280 break;
449
3e6c536bc023 Add -W <windowsize> argument and document it.
Matt Johnston <matt@ucc.asn.au>
parents: 446
diff changeset
281 case 'W':
3e6c536bc023 Add -W <windowsize> argument and document it.
Matt Johnston <matt@ucc.asn.au>
parents: 446
diff changeset
282 next = &recv_window_arg;
3e6c536bc023 Add -W <windowsize> argument and document it.
Matt Johnston <matt@ucc.asn.au>
parents: 446
diff changeset
283 break;
454
7e43f5e473b9 - Add -K keepalive flag for dropbear and dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 449
diff changeset
284 case 'K':
7e43f5e473b9 - Add -K keepalive flag for dropbear and dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 449
diff changeset
285 next = &keepalive_arg;
7e43f5e473b9 - Add -K keepalive flag for dropbear and dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 449
diff changeset
286 break;
513
a3748e54273c Idle timeout patch from Farrell Aultman. Needs testing, unsure if server
Matt Johnston <matt@ucc.asn.au>
parents: 509
diff changeset
287 case 'I':
a3748e54273c Idle timeout patch from Farrell Aultman. Needs testing, unsure if server
Matt Johnston <matt@ucc.asn.au>
parents: 509
diff changeset
288 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
289 break;
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
290 #if DROPBEAR_CLI_AGENTFWD
225
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
291 case 'A':
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
292 cli_opts.agent_fwd = 1;
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
293 break;
ca7e76d981d9 - progress towards client agent forwarding
Matt Johnston <matt@ucc.asn.au>
parents: 215
diff changeset
294 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
295 #if DROPBEAR_USER_ALGO_LIST
682
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
296 case 'c':
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
297 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
298 break;
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
299 case 'm':
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
300 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
301 break;
4edea9f363d0 Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents: 674
diff changeset
302 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
303 #if DEBUG_TRACE
94
c85c88500ea6 DEBUG_TRACE now only triggers with -v on the cmdline
Matt Johnston <matt@ucc.asn.au>
parents: 68
diff changeset
304 case 'v':
1892
3442105b2aba increase verboseness by allowing multiple -v
HansH111 <hans@atbas.org>
parents: 1877
diff changeset
305 debug_trace++;
94
c85c88500ea6 DEBUG_TRACE now only triggers with -v on the cmdline
Matt Johnston <matt@ucc.asn.au>
parents: 68
diff changeset
306 break;
c85c88500ea6 DEBUG_TRACE now only triggers with -v on the cmdline
Matt Johnston <matt@ucc.asn.au>
parents: 68
diff changeset
307 #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
308 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
309 case 'e':
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
310 #if !DROPBEAR_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
311 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
312 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
313 #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
314 case 'D':
1499
2d450c1056e3 options: Complete the transition to numeric toggles (`#if')
Michael Witten <mfwitten@gmail.com>
parents: 1466
diff changeset
315 #if !DROPBEAR_CLI_REMOTETCPFWD
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 '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
317 #endif
1499
2d450c1056e3 options: Complete the transition to numeric toggles (`#if')
Michael Witten <mfwitten@gmail.com>
parents: 1466
diff changeset
318 #if !DROPBEAR_CLI_LOCALTCPFWD
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
319 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
320 #endif
946
17d874ae93a1 Add '-V' for version
Matt Johnston <matt@ucc.asn.au>
parents: 939
diff changeset
321 case 'V':
17d874ae93a1 Add '-V' for version
Matt Johnston <matt@ucc.asn.au>
parents: 939
diff changeset
322 print_version();
17d874ae93a1 Add '-V' for version
Matt Johnston <matt@ucc.asn.au>
parents: 939
diff changeset
323 exit(EXIT_SUCCESS);
17d874ae93a1 Add '-V' for version
Matt Johnston <matt@ucc.asn.au>
parents: 939
diff changeset
324 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
325 case 'b':
1466
f787f60f8e45 bind to port as well with -b
Matt Johnston <matt@ucc.asn.au>
parents: 1465
diff changeset
326 next = &bind_arg;
1465
f7a53832501d cli_bind_address_connect
houseofkodai <karthik@houseofkodai.in>
parents: 1404
diff changeset
327 break;
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
328 default:
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
329 fprintf(stderr,
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
330 "WARNING: Ignoring unknown option -%c\n", c);
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
331 break;
46
3bea78e1b175 Filled out a bit, with commandline support etc
Matt Johnston <matt@ucc.asn.au>
parents: 40
diff changeset
332 } /* Switch */
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
333 }
46
3bea78e1b175 Filled out a bit, with commandline support etc
Matt Johnston <matt@ucc.asn.au>
parents: 40
diff changeset
334
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
335 if (!next && opt == OPT_OTHER) /* got a flag */
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
336 continue;
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
337
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
338 if (c == '\0') {
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
339 i++;
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
340 j = 0;
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
341 if (!argv[i])
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
342 dropbear_exit("Missing argument");
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
343 }
46
3bea78e1b175 Filled out a bit, with commandline support etc
Matt Johnston <matt@ucc.asn.au>
parents: 40
diff changeset
344
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
345 if (opt == OPT_EXTENDED_OPTIONS) {
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
346 TRACE(("opt extended"))
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
347 add_extendedopt(&argv[i][j]);
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
348 }
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
349 else
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
350 #if DROPBEAR_CLI_PUBKEY_AUTH
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
351 if (opt == OPT_AUTHKEY) {
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
352 TRACE(("opt authkey"))
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
353 loadidentityfile(&argv[i][j], 1);
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
354 }
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
355 else
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
356 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
357 #if DROPBEAR_CLI_REMOTETCPFWD
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
358 if (opt == OPT_REMOTETCPFWD) {
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
359 TRACE(("opt remotetcpfwd"))
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
360 addforward(&argv[i][j], cli_opts.remotefwds);
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
361 }
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
362 else
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
363 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
364 #if DROPBEAR_CLI_LOCALTCPFWD
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
365 if (opt == OPT_LOCALTCPFWD) {
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
366 TRACE(("opt localtcpfwd"))
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
367 addforward(&argv[i][j], cli_opts.localfwds);
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
368 }
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
369 else
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
370 #endif
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
371 #if DROPBEAR_CLI_NETCAT
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
372 if (opt == OPT_NETCAT) {
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
373 TRACE(("opt netcat"))
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
374 add_netcat(&argv[i][j]);
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 else
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
377 #endif
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
378 if (next) {
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
379 /* The previous flag set a value to assign */
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
380 *next = &argv[i][j];
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
381 if (*next == NULL)
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
382 dropbear_exit("Invalid null argument");
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
383 next = NULL;
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 }
46
3bea78e1b175 Filled out a bit, with commandline support etc
Matt Johnston <matt@ucc.asn.au>
parents: 40
diff changeset
386
1687
f8d8af12ac14 Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents: 1642
diff changeset
387 #if DROPBEAR_USER_ALGO_LIST
f8d8af12ac14 Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents: 1642
diff changeset
388 /* -c help doesn't need a hostname */
f8d8af12ac14 Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents: 1642
diff changeset
389 parse_ciphers_macs();
f8d8af12ac14 Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents: 1642
diff changeset
390 #endif
f8d8af12ac14 Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents: 1642
diff changeset
391
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
392 /* Done with options/flags; now handle the hostname (which may not
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
393 * start with a hyphen) and optional command */
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
394
1171
c745f720ae2e Fix flags after the hostname
Matt Johnston <matt@ucc.asn.au>
parents: 1170
diff changeset
395 if (host_arg == NULL) { /* missing hostname */
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
396 printhelp();
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
397 exit(EXIT_FAILURE);
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
398 }
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
399 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
400
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
401 if (i < (unsigned int)argc) {
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
402 /* Build the command to send */
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
403 cmdlen = 0;
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
404 for (j = i; j < (unsigned int)argc; j++)
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
405 cmdlen += strlen(argv[j]) + 1; /* +1 for spaces */
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
406
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
407 /* Allocate the space */
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
408 cli_opts.cmd = (char*)m_malloc(cmdlen);
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
409 cli_opts.cmd[0] = '\0';
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
410
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
411 /* Append all the bits */
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
412 for (j = i; j < (unsigned int)argc; j++) {
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
413 strlcat(cli_opts.cmd, argv[j], cmdlen);
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
414 strlcat(cli_opts.cmd, " ", cmdlen);
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
415 }
1170
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
416 /* It'll be null-terminated here */
ff9bd50f1457 Bundling for dbclient
Guilhem Moulin <guilhem@fripost.org>
parents: 1160
diff changeset
417 TRACE(("cmd is: %s", cli_opts.cmd))
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
418 }
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
419
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
420 /* 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
421
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
422 #if DROPBEAR_CLI_PROXYCMD
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
423 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
424 /* 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
425 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
426 }
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
427 #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
428
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
429 if (cli_opts.remoteport == NULL) {
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
430 cli_opts.remoteport = "22";
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
431 }
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
432
1466
f787f60f8e45 bind to port as well with -b
Matt Johnston <matt@ucc.asn.au>
parents: 1465
diff changeset
433 if (bind_arg) {
f787f60f8e45 bind to port as well with -b
Matt Johnston <matt@ucc.asn.au>
parents: 1465
diff changeset
434 /* split [host][:port] */
f787f60f8e45 bind to port as well with -b
Matt Johnston <matt@ucc.asn.au>
parents: 1465
diff changeset
435 char *port = strrchr(bind_arg, ':');
f787f60f8e45 bind to port as well with -b
Matt Johnston <matt@ucc.asn.au>
parents: 1465
diff changeset
436 if (port) {
f787f60f8e45 bind to port as well with -b
Matt Johnston <matt@ucc.asn.au>
parents: 1465
diff changeset
437 cli_opts.bind_port = m_strdup(port+1);
f787f60f8e45 bind to port as well with -b
Matt Johnston <matt@ucc.asn.au>
parents: 1465
diff changeset
438 *port = '\0';
f787f60f8e45 bind to port as well with -b
Matt Johnston <matt@ucc.asn.au>
parents: 1465
diff changeset
439 }
f787f60f8e45 bind to port as well with -b
Matt Johnston <matt@ucc.asn.au>
parents: 1465
diff changeset
440 if (strlen(bind_arg) > 0) {
f787f60f8e45 bind to port as well with -b
Matt Johnston <matt@ucc.asn.au>
parents: 1465
diff changeset
441 cli_opts.bind_address = m_strdup(bind_arg);
f787f60f8e45 bind to port as well with -b
Matt Johnston <matt@ucc.asn.au>
parents: 1465
diff changeset
442 }
f787f60f8e45 bind to port as well with -b
Matt Johnston <matt@ucc.asn.au>
parents: 1465
diff changeset
443 }
f787f60f8e45 bind to port as well with -b
Matt Johnston <matt@ucc.asn.au>
parents: 1465
diff changeset
444
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
445 /* 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
446 * there's a command, but we do otherwise */
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
447 if (cli_opts.wantpty == 9) {
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
448 if (cli_opts.cmd == NULL) {
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
449 cli_opts.wantpty = 1;
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
450 } else {
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
451 cli_opts.wantpty = 0;
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
452 }
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
453 }
326
d965110e3f5c add -f background option to dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 325
diff changeset
454
d965110e3f5c add -f background option to dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 325
diff changeset
455 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
456 && cli_opts.no_cmd == 0) {
594
a98a2138364a Improve capitalisation for all logged strings
Matt Johnston <matt@ucc.asn.au>
parents: 580
diff changeset
457 dropbear_exit("Command required for -f");
326
d965110e3f5c add -f background option to dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 325
diff changeset
458 }
1834
94dc11094e26 Increase max window size to 10MB, fallback rather than
Matt Johnston <matt@codeconstruct.com.au>
parents: 1821
diff changeset
459
483
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
460 if (recv_window_arg) {
1834
94dc11094e26 Increase max window size to 10MB, fallback rather than
Matt Johnston <matt@codeconstruct.com.au>
parents: 1821
diff changeset
461 parse_recv_window(recv_window_arg);
449
3e6c536bc023 Add -W <windowsize> argument and document it.
Matt Johnston <matt@ucc.asn.au>
parents: 446
diff changeset
462 }
454
7e43f5e473b9 - Add -K keepalive flag for dropbear and dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 449
diff changeset
463 if (keepalive_arg) {
568
005530560594 Rearrange getaddrstring() etc
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
464 unsigned int val;
005530560594 Rearrange getaddrstring() etc
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
465 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
466 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
467 }
568
005530560594 Rearrange getaddrstring() etc
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
468 opts.keepalive_secs = val;
454
7e43f5e473b9 - Add -K keepalive flag for dropbear and dbclient
Matt Johnston <matt@ucc.asn.au>
parents: 449
diff changeset
469 }
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
470
513
a3748e54273c Idle timeout patch from Farrell Aultman. Needs testing, unsure if server
Matt Johnston <matt@ucc.asn.au>
parents: 509
diff changeset
471 if (idle_timeout_arg) {
568
005530560594 Rearrange getaddrstring() etc
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
472 unsigned int val;
005530560594 Rearrange getaddrstring() etc
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
473 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
474 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
475 }
568
005530560594 Rearrange getaddrstring() etc
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
476 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
477 }
a3748e54273c Idle timeout patch from Farrell Aultman. Needs testing, unsure if server
Matt Johnston <matt@ucc.asn.au>
parents: 509
diff changeset
478
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
479 #if DROPBEAR_CLI_NETCAT
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
480 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
481 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
482 }
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
483 #endif
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
484
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
485 #if (DROPBEAR_CLI_PUBKEY_AUTH)
995
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
486 {
1134
36557295418e change DROPBEAR_DEFAULT_CLI_AUTHKEY to just prepend homedir
Matt Johnston <matt@ucc.asn.au>
parents: 1085
diff changeset
487 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
488 loadidentityfile(expand_path, 0);
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
489 m_free(expand_path);
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
490 }
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
491 #endif
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
492
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
493 /* 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
494 * 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
495 * of other flags such as -i */
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
496 #if DROPBEAR_CLI_MULTIHOP
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
497 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
498 #else
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
499 parse_hostname(host_arg);
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
500 #endif
39
0883c0906870 tty raw mode support works mostly
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
501 }
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
502
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
503 #if DROPBEAR_CLI_PUBKEY_AUTH
995
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
504 static void loadidentityfile(const char* filename, int warnfail) {
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
505 sign_key *key;
852
7540c0822374 Various cleanups and fixes for warnings
Matt Johnston <matt@ucc.asn.au>
parents: 812
diff changeset
506 enum signkey_type keytype;
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
507
995
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
508 TRACE(("loadidentityfile %s", filename))
6fb4c010c448 Default client key path ~/.ssh/id_dropbear
Matt Johnston <matt@ucc.asn.au>
parents: 961
diff changeset
509
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
510 key = new_sign_key();
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
511 keytype = DROPBEAR_SIGNKEY_ANY;
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
512 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
513 if (warnfail) {
1213
7fd1211a1f63 Use dropbear_log instead of some fprintf's in client code.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1212
diff changeset
514 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
515 }
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
516 sign_key_free(key);
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
517 } 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
518 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
519 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
520 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
521 list_append(cli_opts.privkeys, key);
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
522 }
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
523 }
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
524 #endif
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
525
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
526 #if DROPBEAR_CLI_MULTIHOP
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
527
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
528 static char*
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
529 multihop_passthrough_args() {
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
530 char *ret;
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
531 int total;
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
532 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
533 m_list_elem *iter;
772
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
534 /* 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
535 * the intermediate processes */
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
536 #if DROPBEAR_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
537 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
538 {
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
539 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
540 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
541 }
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
542 #endif /* DROPBEAR_CLI_PUBKEY_AUTH */
1085
ad14e2e71190 Fix building when ENABLE_CLI_PUBKEY_AUTH is unset
Matt Johnston <matt@ucc.asn.au>
parents: 996
diff changeset
543
857
c19acba28590 use oldstyle comments
Matt Johnston <matt@ucc.asn.au>
parents: 852
diff changeset
544 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
545 ret = m_malloc(len);
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
546 total = 0;
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
547
1877
33363a68784d use option -q for suppression remote banner output, pass option also for proxy command
HansH111 <hans@atbas.org>
parents: 1834
diff changeset
548 if (cli_opts.quiet)
33363a68784d use option -q for suppression remote banner output, pass option also for proxy command
HansH111 <hans@atbas.org>
parents: 1834
diff changeset
549 {
33363a68784d use option -q for suppression remote banner output, pass option also for proxy command
HansH111 <hans@atbas.org>
parents: 1834
diff changeset
550 int written = snprintf(ret+total, len-total, "-q ");
33363a68784d use option -q for suppression remote banner output, pass option also for proxy command
HansH111 <hans@atbas.org>
parents: 1834
diff changeset
551 total += written;
33363a68784d use option -q for suppression remote banner output, pass option also for proxy command
HansH111 <hans@atbas.org>
parents: 1834
diff changeset
552 }
33363a68784d use option -q for suppression remote banner output, pass option also for proxy command
HansH111 <hans@atbas.org>
parents: 1834
diff changeset
553
772
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
554 if (cli_opts.no_hostkey_check)
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
555 {
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
556 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
557 total += written;
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
558 }
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
559 else if (cli_opts.always_accept_key)
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
560 {
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
561 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
562 total += written;
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
563 }
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
564
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
565 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
566 {
1237
888e3d17e962 Fix print format specifier
Chocobo1 <Chocobo1@users.noreply.github.com>
parents: 1220
diff changeset
567 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
568 total += written;
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
569 }
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
570
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
571 #if DROPBEAR_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
572 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
573 {
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
574 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
575 const size_t size = len - total;
772
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
576 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
577 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
578 total += written;
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
579 }
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
580 #endif /* DROPBEAR_CLI_PUBKEY_AUTH */
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
581
776
f7c8b786e595 changelog updates for 2013.57
Matt Johnston <matt@ucc.asn.au>
parents: 772
diff changeset
582 /* 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
583 if (total > 0)
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
584 {
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
585 total--;
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
586 }
7fc0aeada79c -y -y to disable hostkey checking
Matt Johnston <matt@ucc.asn.au>
parents: 716
diff changeset
587
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
588 return ret;
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
589 }
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
590
489
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
591 /* 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
592 * 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
593 * 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
594 * dbclient wrt,madako,canyons
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
595 * then we want to run:
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
596 * 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
597 * 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
598 * 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
599 * 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
600 *
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
601 * 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
602 */
489
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
603 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
604 char *userhostarg = NULL;
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
605 char *hostbuf = NULL;
574
b6665c1eac43 Remove extraneous semicolon
Matt Johnston <matt@ucc.asn.au>
parents: 568
diff changeset
606 char *last_hop = NULL;
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
607 char *remainder = NULL;
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
608
494
66eac4631d88 - Work around rsync and scp parsing and modifying the user@host argument,
Matt Johnston <matt@ucc.asn.au>
parents: 492
diff changeset
609 /* 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
610 * 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
611 * 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
612 * 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
613 * 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
614 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
615 && 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
616 && 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
617 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
618 hostbuf = m_malloc(len);
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
619 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
620 } else {
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
621 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
622 }
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
623 userhostarg = hostbuf;
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
624
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
625 last_hop = strrchr(userhostarg, ',');
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
626 if (last_hop) {
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
627 if (last_hop == userhostarg) {
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
628 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
629 }
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
630 *last_hop = '\0';
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
631 last_hop++;
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
632 remainder = userhostarg;
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
633 userhostarg = last_hop;
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
634 }
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
635
489
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
636 parse_hostname(userhostarg);
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
637
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
638 if (last_hop) {
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
639 /* Set up the proxycmd */
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
640 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
641 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
642 if (cli_opts.proxycmd) {
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
643 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
644 }
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
645 if (cli_opts.remoteport == NULL) {
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
646 cli_opts.remoteport = "22";
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
647 }
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
648 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
649 + 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
650 + strlen(passthrough_args)
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
651 + 30;
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
652 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
653 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
654 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
655 passthrough_args, remainder);
575
f9b5dc0cba61 - Disable compression for non-final multihops
Matt Johnston <matt@ucc.asn.au>
parents: 574
diff changeset
656 #ifndef DISABLE_ZLIB
f9b5dc0cba61 - Disable compression for non-final multihops
Matt Johnston <matt@ucc.asn.au>
parents: 574
diff changeset
657 /* 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
658 opts.compress_mode = DROPBEAR_COMPRESS_OFF;
575
f9b5dc0cba61 - Disable compression for non-final multihops
Matt Johnston <matt@ucc.asn.au>
parents: 574
diff changeset
659 #endif
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
660 m_free(passthrough_args);
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
661 }
544
9e51707cd6f2 - Make -i and -W pass through multihop arguments
Matt Johnston <matt@ucc.asn.au>
parents: 541
diff changeset
662 m_free(hostbuf);
487
2e17f82a7330 Add multihop 'onion-forwarding' mode. Needs refinement, works.
Matt Johnston <matt@ucc.asn.au>
parents: 486
diff changeset
663 }
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
664 #endif /* !DROPBEAR_CLI_MULTIHOP */
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
665
489
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
666 /* Parses a [user@]hostname[/port] argument. */
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
667 static void parse_hostname(const char* orighostarg) {
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
668 char *userhostarg = NULL;
489
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
669 char *port = NULL;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
670
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
671 userhostarg = m_strdup(orighostarg);
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
672
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
673 cli_opts.remotehost = strchr(userhostarg, '@');
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
674 if (cli_opts.remotehost == NULL) {
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
675 /* 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
676 * local user's name */
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
677 cli_opts.remotehost = userhostarg;
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
678 } else {
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
679 cli_opts.remotehost[0] = '\0'; /* Split the user/host */
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
680 cli_opts.remotehost++;
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
681 cli_opts.username = userhostarg;
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
682 }
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
683
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
684 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
685 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
686 }
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
687
895
5608a5a61c2a Change port separator to ^ since % is used in ipv6 addresses
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
688 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
689 if (!port) {
857
c19acba28590 use oldstyle comments
Matt Johnston <matt@ucc.asn.au>
parents: 852
diff changeset
690 /* legacy separator */
783
34e69908b3f7 Use '#' for host#port separator, document it. This fixes scp
Matt Johnston <matt@ucc.asn.au>
parents: 776
diff changeset
691 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
692 }
489
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
693 if (port) {
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
694 *port = '\0';
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
695 cli_opts.remoteport = port+1;
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
696 }
79c657a673ec - Allow specifying a port with host/port.
Matt Johnston <matt@ucc.asn.au>
parents: 487
diff changeset
697
47
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
698 if (cli_opts.remotehost[0] == '\0') {
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
699 dropbear_exit("Bad hostname");
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
700 }
4b53a43f0082 - client pubkey auth works
Matt Johnston <matt@ucc.asn.au>
parents: 46
diff changeset
701 }
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
702
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
703 #if DROPBEAR_CLI_NETCAT
485
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
704 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
705 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
706
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
707 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
708
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
709 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
710 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
711 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
712 goto fail;
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
713 }
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
714 *portstr = '\0';
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
715 portstr++;
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
716
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
717 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
718 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
719 goto fail;
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
720 }
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
721
492
b956d6151600 Replace calls to strtoul() with a helper m_str_to_uint()
Matt Johnston <matt@ucc.asn.au>
parents: 489
diff changeset
722 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
723 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
724 goto fail;
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
725 }
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
726
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
727 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
728 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
729 goto fail;
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
730 }
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
731
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
732 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
733 return;
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
734
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
735 fail:
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
736 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
737 }
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
738 #endif
12d845ab7b5f Rework netcat-alike to be a proper mode, with -B argument.
Matt Johnston <matt@ucc.asn.au>
parents: 459
diff changeset
739
483
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
740 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
741 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
742 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
743
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
744 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
745
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
746 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
747 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
748 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
749 } else {
958
1bf92da7a2a0 Try without identifying current user
iquaba <cooka2011@gmail.com>
parents: 946
diff changeset
750 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
751 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
752 }
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
753
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
754 }
738313e73b1c - "-J 'nc localhost 22'" kind of works, needs fixing hostkeys, ptys etc.
Matt Johnston <matt@ucc.asn.au>
parents: 479
diff changeset
755
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
756 #if DROPBEAR_CLI_ANYTCPFWD
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
757 /* 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
758 * 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
759 static void addforward(const char* origstr, m_list *fwdlist) {
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
760
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
761 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
762 char * listenaddr = NULL;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
763 char * listenport = NULL;
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
764 char * connectaddr = NULL;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
765 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
766 struct TCPFwdEntry* newfwd = NULL;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
767 char * str = NULL;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
768
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
769 TRACE(("enter addforward"))
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
770
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
771 /* 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
772 is never free()d. */
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
773 str = m_strdup(origstr);
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
774
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
775 part1 = str;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
776
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
777 part2 = strchr(str, ':');
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
778 if (part2 == NULL) {
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
779 TRACE(("part2 == NULL"))
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
780 goto fail;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
781 }
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
782 *part2 = '\0';
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
783 part2++;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
784
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
785 part3 = strchr(part2, ':');
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
786 if (part3 == NULL) {
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
787 TRACE(("part3 == NULL"))
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
788 goto fail;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
789 }
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
790 *part3 = '\0';
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
791 part3++;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
792
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
793 part4 = strchr(part3, ':');
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
794 if (part4) {
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
795 *part4 = '\0';
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
796 part4++;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
797 }
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
798
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
799 if (part4) {
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
800 listenaddr = part1;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
801 listenport = part2;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
802 connectaddr = part3;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
803 connectport = part4;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
804 } else {
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
805 listenaddr = NULL;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
806 listenport = part1;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
807 connectaddr = part2;
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
808 connectport = part3;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
809 }
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
810
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 546
diff changeset
811 newfwd = m_malloc(sizeof(struct TCPFwdEntry));
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
812
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
813 /* 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
814 * 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
815 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
816 TRACE(("bad listenport strtoul"))
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
817 goto fail;
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
492
b956d6151600 Replace calls to strtoul() with a helper m_str_to_uint()
Matt Johnston <matt@ucc.asn.au>
parents: 489
diff changeset
820 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
821 TRACE(("bad connectport strtoul"))
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
822 goto fail;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
823 }
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
824
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 575
diff changeset
825 newfwd->listenaddr = listenaddr;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
826 newfwd->connectaddr = connectaddr;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
827
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
828 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
829 TRACE(("listenport > 65535"))
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
830 goto badport;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
831 }
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
832
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
833 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
834 TRACE(("connectport > 65535"))
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
835 goto badport;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
836 }
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
837
505
805e557fdff7 Report errors if a remote request fails
Matt Johnston <matt@ucc.asn.au>
parents: 497
diff changeset
838 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
839 list_append(fwdlist, newfwd);
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
840
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
841 TRACE(("leave addforward: done"))
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
842 return;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
843
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
844 fail:
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
845 dropbear_exit("Bad TCP forward '%s'", origstr);
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
846
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
847 badport:
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
848 dropbear_exit("Bad TCP port in '%s'", origstr);
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
849 }
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
850 #endif
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
851
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
852 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
853 int seen_eq = 0;
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
854 int optlen = strlen(optname);
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
855 const char *str = *strptr;
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
856
1220
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
857 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
858 ++str;
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
859 }
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
860
1215
d058e15ea213 A few minor style fixes
Matt Johnston <matt@ucc.asn.au>
parents: 1213
diff changeset
861 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
862 return DROPBEAR_FAILURE;
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 str += optlen;
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
866
1220
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
867 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
868 if (*str == '=') {
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
869 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
870 }
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
871 ++str;
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
872 }
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
873
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
874 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
875 /* 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
876 return DROPBEAR_FAILURE;
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
877 }
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
878
1220
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
879 *strptr = str;
de2e39e94c68 revert removal of space handling, different fix for avoiding option prefix
Matt Johnston <matt@ucc.asn.au>
parents: 1218
diff changeset
880 return DROPBEAR_SUCCESS;
1205
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
1215
d058e15ea213 A few minor style fixes
Matt Johnston <matt@ucc.asn.au>
parents: 1213
diff changeset
883 static int parse_flag_value(const char *value) {
d058e15ea213 A few minor style fixes
Matt Johnston <matt@ucc.asn.au>
parents: 1213
diff changeset
884 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
885 return 1;
1215
d058e15ea213 A few minor style fixes
Matt Johnston <matt@ucc.asn.au>
parents: 1213
diff changeset
886 } 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
887 return 0;
1215
d058e15ea213 A few minor style fixes
Matt Johnston <matt@ucc.asn.au>
parents: 1213
diff changeset
888 }
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
889
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
890 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
891 }
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
892
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
893 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
894 const char *optstr = origstr;
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
895
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
896 if (strcmp(origstr, "help") == 0) {
1206
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
897 dropbear_log(LOG_INFO, "Available options:\n"
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
898 #if DROPBEAR_CLI_ANYTCPFWD
1206
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
899 "\tExitOnForwardFailure\n"
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
900 #endif
1821
df8d8ec1801c added option to disable trivial auth methods (#128)
Manfred Kaiser <37737811+manfred-kaiser@users.noreply.github.com>
parents: 1687
diff changeset
901 "\tDisableTrivialAuth\n"
1212
bf626d259eb1 Support syslog logging in dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1210
diff changeset
902 #ifndef DISABLE_SYSLOG
bf626d259eb1 Support syslog logging in dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1210
diff changeset
903 "\tUseSyslog\n"
bf626d259eb1 Support syslog logging in dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1210
diff changeset
904 #endif
1637
cf8dc6204fb6 support openssh long option -o Port=XXXX (#68)
xcko <24556661+xcko@users.noreply.github.com>
parents: 1499
diff changeset
905 "\tPort\n"
1206
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
906 );
1205
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
907 exit(EXIT_SUCCESS);
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
908 }
978887222d29 Added OpenSSH-like -o command line option to dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1171
diff changeset
909
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1276
diff changeset
910 #if DROPBEAR_CLI_ANYTCPFWD
1206
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
911 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
912 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
913 return;
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
914 }
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
915 #endif
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1205
diff changeset
916
1212
bf626d259eb1 Support syslog logging in dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1210
diff changeset
917 #ifndef DISABLE_SYSLOG
bf626d259eb1 Support syslog logging in dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1210
diff changeset
918 if (match_extendedopt(&optstr, "UseSyslog") == DROPBEAR_SUCCESS) {
bf626d259eb1 Support syslog logging in dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1210
diff changeset
919 opts.usingsyslog = parse_flag_value(optstr);
bf626d259eb1 Support syslog logging in dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1210
diff changeset
920 return;
bf626d259eb1 Support syslog logging in dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1210
diff changeset
921 }
bf626d259eb1 Support syslog logging in dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1210
diff changeset
922 #endif
bf626d259eb1 Support syslog logging in dbclient.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1210
diff changeset
923
1637
cf8dc6204fb6 support openssh long option -o Port=XXXX (#68)
xcko <24556661+xcko@users.noreply.github.com>
parents: 1499
diff changeset
924 if (match_extendedopt(&optstr, "Port") == DROPBEAR_SUCCESS) {
cf8dc6204fb6 support openssh long option -o Port=XXXX (#68)
xcko <24556661+xcko@users.noreply.github.com>
parents: 1499
diff changeset
925 cli_opts.remoteport = optstr;
cf8dc6204fb6 support openssh long option -o Port=XXXX (#68)
xcko <24556661+xcko@users.noreply.github.com>
parents: 1499
diff changeset
926 return;
cf8dc6204fb6 support openssh long option -o Port=XXXX (#68)
xcko <24556661+xcko@users.noreply.github.com>
parents: 1499
diff changeset
927 }
cf8dc6204fb6 support openssh long option -o Port=XXXX (#68)
xcko <24556661+xcko@users.noreply.github.com>
parents: 1499
diff changeset
928
1821
df8d8ec1801c added option to disable trivial auth methods (#128)
Manfred Kaiser <37737811+manfred-kaiser@users.noreply.github.com>
parents: 1687
diff changeset
929 if (match_extendedopt(&optstr, "DisableTrivialAuth") == DROPBEAR_SUCCESS) {
df8d8ec1801c added option to disable trivial auth methods (#128)
Manfred Kaiser <37737811+manfred-kaiser@users.noreply.github.com>
parents: 1687
diff changeset
930 cli_opts.disable_trivial_auth = parse_flag_value(optstr);
df8d8ec1801c added option to disable trivial auth methods (#128)
Manfred Kaiser <37737811+manfred-kaiser@users.noreply.github.com>
parents: 1687
diff changeset
931 return;
df8d8ec1801c added option to disable trivial auth methods (#128)
Manfred Kaiser <37737811+manfred-kaiser@users.noreply.github.com>
parents: 1687
diff changeset
932 }
df8d8ec1801c added option to disable trivial auth methods (#128)
Manfred Kaiser <37737811+manfred-kaiser@users.noreply.github.com>
parents: 1687
diff changeset
933
1217
980b7ea2c5ef unknown options should be non-fatal
Matt Johnston <matt@ucc.asn.au>
parents: 1215
diff changeset
934 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
935 }