annotate cli-tcpfwd.c @ 1838:60cd5cdb165c

Update .hgignore and .gitignore with tests
author Matt Johnston <matt@codeconstruct.com.au>
date Mon, 18 Oct 2021 14:26:59 +0800
parents a7cc3332d8ab
children 1d86a58fb52d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
74
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
1 /*
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
2 * Dropbear SSH
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
3 *
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
4 * Copyright (c) 2002,2003 Matt Johnston
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
5 * All rights reserved.
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
6 *
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
8 * of this software and associated documentation files (the "Software"), to deal
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
9 * in the Software without restriction, including without limitation the rights
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
11 * copies of the Software, and to permit persons to whom the Software is
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
12 * furnished to do so, subject to the following conditions:
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
13 *
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
14 * The above copyright notice and this permission notice shall be included in
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
15 * all copies or substantial portions of the Software.
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
16 *
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
23 * SOFTWARE. */
e3adf4cf5465 License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents: 70
diff changeset
24
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
25 #include "includes.h"
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
26 #include "dbutil.h"
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
27 #include "tcpfwd.h"
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
28 #include "channel.h"
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
29 #include "runopts.h"
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
30 #include "session.h"
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
31 #include "ssh.h"
1032
0da8ba489c23 Move generic network routines to netio.c
Matt Johnston <matt@ucc.asn.au>
parents: 1025
diff changeset
32 #include "netio.h"
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
33
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1275
diff changeset
34 #if DROPBEAR_CLI_REMOTETCPFWD
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
35 static int newtcpforwarded(struct Channel * channel);
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
36
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
37 const struct ChanType cli_chan_tcpremote = {
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
38 "forwarded-tcpip",
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
39 newtcpforwarded,
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
40 NULL,
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
41 NULL,
1625
79eef94ccea9 Split ChanType closehandler() and cleanup() so that dbclient doesn't
Matt Johnston <matt@ucc.asn.au>
parents: 1620
diff changeset
42 NULL,
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
43 NULL
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
44 };
156
8c2b3506f112 Rearrange preprocessor parts so that compilation with various options
Matt Johnston <matt@ucc.asn.au>
parents: 108
diff changeset
45 #endif
8c2b3506f112 Rearrange preprocessor parts so that compilation with various options
Matt Johnston <matt@ucc.asn.au>
parents: 108
diff changeset
46
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1275
diff changeset
47 #if DROPBEAR_CLI_LOCALTCPFWD
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
48 static int cli_localtcp(const char* listenaddr,
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
49 unsigned int listenport,
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
50 const char* remoteaddr,
156
8c2b3506f112 Rearrange preprocessor parts so that compilation with various options
Matt Johnston <matt@ucc.asn.au>
parents: 108
diff changeset
51 unsigned int remoteport);
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
52 static const struct ChanType cli_chan_tcplocal = {
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
53 "direct-tcpip",
941
5daedffd0769 Set tcp priority as follows:
Matt Johnston <matt@ucc.asn.au>
parents: 899
diff changeset
54 tcp_prio_inithandler,
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
55 NULL,
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
56 NULL,
1625
79eef94ccea9 Split ChanType closehandler() and cleanup() so that dbclient doesn't
Matt Johnston <matt@ucc.asn.au>
parents: 1620
diff changeset
57 NULL,
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
58 NULL
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
59 };
156
8c2b3506f112 Rearrange preprocessor parts so that compilation with various options
Matt Johnston <matt@ucc.asn.au>
parents: 108
diff changeset
60 #endif
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
61
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1275
diff changeset
62 #if DROPBEAR_CLI_ANYTCPFWD
1206
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1123
diff changeset
63 static void fwd_failed(const char* format, ...) ATTRIB_PRINTF(1,2);
1275
d49bda490798 add static in function definition
Francois Perrad <francois.perrad@gadz.org>
parents: 1251
diff changeset
64 static void fwd_failed(const char* format, ...)
1206
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1123
diff changeset
65 {
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1123
diff changeset
66 va_list param;
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1123
diff changeset
67 va_start(param, format);
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1123
diff changeset
68
1215
d058e15ea213 A few minor style fixes
Matt Johnston <matt@ucc.asn.au>
parents: 1206
diff changeset
69 if (cli_opts.exit_on_fwd_failure) {
1206
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1123
diff changeset
70 _dropbear_exit(EXIT_FAILURE, format, param);
1215
d058e15ea213 A few minor style fixes
Matt Johnston <matt@ucc.asn.au>
parents: 1206
diff changeset
71 } else {
1206
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1123
diff changeset
72 _dropbear_log(LOG_WARNING, format, param);
1215
d058e15ea213 A few minor style fixes
Matt Johnston <matt@ucc.asn.au>
parents: 1206
diff changeset
73 }
1206
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1123
diff changeset
74
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1123
diff changeset
75 va_end(param);
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1123
diff changeset
76 }
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1123
diff changeset
77 #endif
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1123
diff changeset
78
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1275
diff changeset
79 #if DROPBEAR_CLI_LOCALTCPFWD
63
dcc43965928f - A nice cleaner structure for tcp (acceptor) forwarding.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
80 void setup_localtcp() {
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
81 m_list_elem *iter;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
82 int ret;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
83
165
0cfba3034be5 Fixed DEBUG_TRACE macro so that we don't get semicolons left about the place
Matt Johnston <matt@ucc.asn.au>
parents: 156
diff changeset
84 TRACE(("enter setup_localtcp"))
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
85
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
86 for (iter = cli_opts.localfwds->first; iter; iter = iter->next) {
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
87 struct TCPFwdEntry * fwd = (struct TCPFwdEntry*)iter->item;
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
88 ret = cli_localtcp(
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
89 fwd->listenaddr,
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
90 fwd->listenport,
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
91 fwd->connectaddr,
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
92 fwd->connectport);
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
93 if (ret == DROPBEAR_FAILURE) {
1206
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1123
diff changeset
94 fwd_failed("Failed local port forward %s:%d:%s:%d",
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
95 fwd->listenaddr,
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
96 fwd->listenport,
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
97 fwd->connectaddr,
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
98 fwd->connectport);
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
99 }
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
100 }
165
0cfba3034be5 Fixed DEBUG_TRACE macro so that we don't get semicolons left about the place
Matt Johnston <matt@ucc.asn.au>
parents: 156
diff changeset
101 TRACE(("leave setup_localtcp"))
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
102
63
dcc43965928f - A nice cleaner structure for tcp (acceptor) forwarding.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
103 }
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
104
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
105 static int cli_localtcp(const char* listenaddr,
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
106 unsigned int listenport,
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
107 const char* remoteaddr,
63
dcc43965928f - A nice cleaner structure for tcp (acceptor) forwarding.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
108 unsigned int remoteport) {
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
109
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
110 struct TCPListener* tcpinfo = NULL;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
111 int ret;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
112
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
113 TRACE(("enter cli_localtcp: %d %s %d", listenport, remoteaddr,
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
114 remoteport));
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
115
184
ca55377e4f7e - allocate correct buffer size for channel info, rather than sizeof(pointer).
Matt Johnston <matt@ucc.asn.au>
parents: 165
diff changeset
116 tcpinfo = (struct TCPListener*)m_malloc(sizeof(struct TCPListener));
258
306499676384 * add -g (dbclient) and -a (dropbear) options for allowing non-local
Matt Johnston <matt@ucc.asn.au>
parents: 253
diff changeset
117
108
10f4d3319780 - added circular buffering for channels
Matt Johnston <matt@ucc.asn.au>
parents: 74
diff changeset
118 tcpinfo->sendaddr = m_strdup(remoteaddr);
63
dcc43965928f - A nice cleaner structure for tcp (acceptor) forwarding.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
119 tcpinfo->sendport = remoteport;
258
306499676384 * add -g (dbclient) and -a (dropbear) options for allowing non-local
Matt Johnston <matt@ucc.asn.au>
parents: 253
diff changeset
120
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
121 if (listenaddr)
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
122 {
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
123 tcpinfo->listenaddr = m_strdup(listenaddr);
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
124 }
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
125 else
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
126 {
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
127 if (opts.listen_fwd_all) {
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
128 tcpinfo->listenaddr = m_strdup("");
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
129 } else {
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
130 tcpinfo->listenaddr = m_strdup("localhost");
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
131 }
258
306499676384 * add -g (dbclient) and -a (dropbear) options for allowing non-local
Matt Johnston <matt@ucc.asn.au>
parents: 253
diff changeset
132 }
63
dcc43965928f - A nice cleaner structure for tcp (acceptor) forwarding.
Matt Johnston <matt@ucc.asn.au>
parents: 62
diff changeset
133 tcpinfo->listenport = listenport;
258
306499676384 * add -g (dbclient) and -a (dropbear) options for allowing non-local
Matt Johnston <matt@ucc.asn.au>
parents: 253
diff changeset
134
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
135 tcpinfo->chantype = &cli_chan_tcplocal;
259
c049490e43fe * fix -L forwarding on the client, broke last rev
Matt Johnston <matt@ucc.asn.au>
parents: 258
diff changeset
136 tcpinfo->tcp_type = direct;
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
137
1620
572a7aefa188 FIx remote forward listeners
Matt Johnston <matt@ucc.asn.au>
parents: 1515
diff changeset
138 ret = listen_tcpfwd(tcpinfo, NULL);
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
139
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
140 if (ret == DROPBEAR_FAILURE) {
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
141 m_free(tcpinfo);
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
142 }
165
0cfba3034be5 Fixed DEBUG_TRACE macro so that we don't get semicolons left about the place
Matt Johnston <matt@ucc.asn.au>
parents: 156
diff changeset
143 TRACE(("leave cli_localtcp: %d", ret))
62
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
144 return ret;
20563735e8b5 just checkpointing
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
145 }
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1275
diff changeset
146 #endif /* DROPBEAR_CLI_LOCALTCPFWD */
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
147
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1275
diff changeset
148 #if DROPBEAR_CLI_REMOTETCPFWD
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
149 static void send_msg_global_request_remotetcp(const char *addr, int port) {
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
150
165
0cfba3034be5 Fixed DEBUG_TRACE macro so that we don't get semicolons left about the place
Matt Johnston <matt@ucc.asn.au>
parents: 156
diff changeset
151 TRACE(("enter send_msg_global_request_remotetcp"))
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
152
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
153 CHECKCLEARTOWRITE();
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
154 buf_putbyte(ses.writepayload, SSH_MSG_GLOBAL_REQUEST);
1123
d7b752525b91 buf_getstring and buf_putstring now use non-unsigned char*
Matt Johnston <matt@ucc.asn.au>
parents: 1094
diff changeset
155 buf_putstring(ses.writepayload, "tcpip-forward", 13);
505
805e557fdff7 Report errors if a remote request fails
Matt Johnston <matt@ucc.asn.au>
parents: 259
diff changeset
156 buf_putbyte(ses.writepayload, 1); /* want_reply */
1123
d7b752525b91 buf_getstring and buf_putstring now use non-unsigned char*
Matt Johnston <matt@ucc.asn.au>
parents: 1094
diff changeset
157 buf_putstring(ses.writepayload, addr, strlen(addr));
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
158 buf_putint(ses.writepayload, port);
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
159
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
160 encrypt_packet();
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
161
165
0cfba3034be5 Fixed DEBUG_TRACE macro so that we don't get semicolons left about the place
Matt Johnston <matt@ucc.asn.au>
parents: 156
diff changeset
162 TRACE(("leave send_msg_global_request_remotetcp"))
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
163 }
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
164
505
805e557fdff7 Report errors if a remote request fails
Matt Johnston <matt@ucc.asn.au>
parents: 259
diff changeset
165 /* The only global success/failure messages are for remotetcp.
805e557fdff7 Report errors if a remote request fails
Matt Johnston <matt@ucc.asn.au>
parents: 259
diff changeset
166 * Since there isn't any identifier in these messages, we have to rely on them
805e557fdff7 Report errors if a remote request fails
Matt Johnston <matt@ucc.asn.au>
parents: 259
diff changeset
167 * being in the same order as we sent the requests. This is the ordering
631
af304deacb4c Print the server allocated port when using dbclient -R 0:....
Matt Johnston <matt@ucc.asn.au>
parents: 591
diff changeset
168 * of the cli_opts.remotefwds list.
af304deacb4c Print the server allocated port when using dbclient -R 0:....
Matt Johnston <matt@ucc.asn.au>
parents: 591
diff changeset
169 * If the requested remote port is 0 the listen port will be
af304deacb4c Print the server allocated port when using dbclient -R 0:....
Matt Johnston <matt@ucc.asn.au>
parents: 591
diff changeset
170 * dynamically allocated by the server and the port number will be returned
af304deacb4c Print the server allocated port when using dbclient -R 0:....
Matt Johnston <matt@ucc.asn.au>
parents: 591
diff changeset
171 * to client and the port number reported to the user. */
505
805e557fdff7 Report errors if a remote request fails
Matt Johnston <matt@ucc.asn.au>
parents: 259
diff changeset
172 void cli_recv_msg_request_success() {
631
af304deacb4c Print the server allocated port when using dbclient -R 0:....
Matt Johnston <matt@ucc.asn.au>
parents: 591
diff changeset
173 /* We just mark off that we have received the reply,
505
805e557fdff7 Report errors if a remote request fails
Matt Johnston <matt@ucc.asn.au>
parents: 259
diff changeset
174 * so that we can report failure for later ones. */
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
175 m_list_elem * iter = NULL;
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
176 for (iter = cli_opts.remotefwds->first; iter; iter = iter->next) {
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
177 struct TCPFwdEntry *fwd = (struct TCPFwdEntry*)iter->item;
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
178 if (!fwd->have_reply) {
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
179 fwd->have_reply = 1;
631
af304deacb4c Print the server allocated port when using dbclient -R 0:....
Matt Johnston <matt@ucc.asn.au>
parents: 591
diff changeset
180 if (fwd->listenport == 0) {
899
115f8a3c2d5a - Fix dbclient with port 0 for server-allocated
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
181 /* The server should let us know which port was allocated if we requested port 0 */
631
af304deacb4c Print the server allocated port when using dbclient -R 0:....
Matt Johnston <matt@ucc.asn.au>
parents: 591
diff changeset
182 int allocport = buf_getint(ses.payload);
af304deacb4c Print the server allocated port when using dbclient -R 0:....
Matt Johnston <matt@ucc.asn.au>
parents: 591
diff changeset
183 if (allocport > 0) {
899
115f8a3c2d5a - Fix dbclient with port 0 for server-allocated
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
184 fwd->listenport = allocport;
631
af304deacb4c Print the server allocated port when using dbclient -R 0:....
Matt Johnston <matt@ucc.asn.au>
parents: 591
diff changeset
185 dropbear_log(LOG_INFO, "Allocated port %d for remote forward to %s:%d",
af304deacb4c Print the server allocated port when using dbclient -R 0:....
Matt Johnston <matt@ucc.asn.au>
parents: 591
diff changeset
186 allocport, fwd->connectaddr, fwd->connectport);
af304deacb4c Print the server allocated port when using dbclient -R 0:....
Matt Johnston <matt@ucc.asn.au>
parents: 591
diff changeset
187 }
af304deacb4c Print the server allocated port when using dbclient -R 0:....
Matt Johnston <matt@ucc.asn.au>
parents: 591
diff changeset
188 }
505
805e557fdff7 Report errors if a remote request fails
Matt Johnston <matt@ucc.asn.au>
parents: 259
diff changeset
189 return;
805e557fdff7 Report errors if a remote request fails
Matt Johnston <matt@ucc.asn.au>
parents: 259
diff changeset
190 }
805e557fdff7 Report errors if a remote request fails
Matt Johnston <matt@ucc.asn.au>
parents: 259
diff changeset
191 }
805e557fdff7 Report errors if a remote request fails
Matt Johnston <matt@ucc.asn.au>
parents: 259
diff changeset
192 }
805e557fdff7 Report errors if a remote request fails
Matt Johnston <matt@ucc.asn.au>
parents: 259
diff changeset
193
805e557fdff7 Report errors if a remote request fails
Matt Johnston <matt@ucc.asn.au>
parents: 259
diff changeset
194 void cli_recv_msg_request_failure() {
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
195 m_list_elem *iter;
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
196 for (iter = cli_opts.remotefwds->first; iter; iter = iter->next) {
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
197 struct TCPFwdEntry *fwd = (struct TCPFwdEntry*)iter->item;
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
198 if (!fwd->have_reply) {
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
199 fwd->have_reply = 1;
1206
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1123
diff changeset
200 fwd_failed("Remote TCP forward request failed (port %d -> %s:%d)",
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1123
diff changeset
201 fwd->listenport,
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1123
diff changeset
202 fwd->connectaddr,
2907c658fa76 Implemented ExitOnForwardFailure option for local and remote forwarding.
Konstantin Tokarev <ktokarev@smartlabs.tv>
parents: 1123
diff changeset
203 fwd->connectport);
505
805e557fdff7 Report errors if a remote request fails
Matt Johnston <matt@ucc.asn.au>
parents: 259
diff changeset
204 return;
805e557fdff7 Report errors if a remote request fails
Matt Johnston <matt@ucc.asn.au>
parents: 259
diff changeset
205 }
805e557fdff7 Report errors if a remote request fails
Matt Johnston <matt@ucc.asn.au>
parents: 259
diff changeset
206 }
805e557fdff7 Report errors if a remote request fails
Matt Johnston <matt@ucc.asn.au>
parents: 259
diff changeset
207 }
805e557fdff7 Report errors if a remote request fails
Matt Johnston <matt@ucc.asn.au>
parents: 259
diff changeset
208
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
209 void setup_remotetcp() {
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
210 m_list_elem *iter;
165
0cfba3034be5 Fixed DEBUG_TRACE macro so that we don't get semicolons left about the place
Matt Johnston <matt@ucc.asn.au>
parents: 156
diff changeset
211 TRACE(("enter setup_remotetcp"))
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
212
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
213 for (iter = cli_opts.remotefwds->first; iter; iter = iter->next) {
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
214 struct TCPFwdEntry *fwd = (struct TCPFwdEntry*)iter->item;
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
215 if (!fwd->listenaddr)
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
216 {
857
c19acba28590 use oldstyle comments
Matt Johnston <matt@ucc.asn.au>
parents: 631
diff changeset
217 /* we store the addresses so that we can compare them
c19acba28590 use oldstyle comments
Matt Johnston <matt@ucc.asn.au>
parents: 631
diff changeset
218 when the server sends them back */
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
219 if (opts.listen_fwd_all) {
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
220 fwd->listenaddr = m_strdup("");
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
221 } else {
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
222 fwd->listenaddr = m_strdup("localhost");
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
223 }
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
224 }
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
225 send_msg_global_request_remotetcp(fwd->listenaddr, fwd->listenport);
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
226 }
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
227
165
0cfba3034be5 Fixed DEBUG_TRACE macro so that we don't get semicolons left about the place
Matt Johnston <matt@ucc.asn.au>
parents: 156
diff changeset
228 TRACE(("leave setup_remotetcp"))
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
229 }
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
230
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
231 static int newtcpforwarded(struct Channel * channel) {
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
232
1250
2bb4c662d1c2 more hard tab
Francois Perrad <francois.perrad@gadz.org>
parents: 1215
diff changeset
233 char *origaddr = NULL;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
234 unsigned int origport;
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
235 m_list_elem * iter = NULL;
1327
e47e4b8a005d initialize variable and protect against NULL dereferencement
Francois Perrad <francois.perrad@gadz.org>
parents: 1295
diff changeset
236 struct TCPFwdEntry *fwd = NULL;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
237 char portstring[NI_MAXSERV];
70
b0316ce64e4b Merging in the changes from 0.41-0.43 main Dropbear tree
Matt Johnston <matt@ucc.asn.au>
parents: 66
diff changeset
238 int err = SSH_OPEN_ADMINISTRATIVELY_PROHIBITED;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
239
1123
d7b752525b91 buf_getstring and buf_putstring now use non-unsigned char*
Matt Johnston <matt@ucc.asn.au>
parents: 1094
diff changeset
240 origaddr = buf_getstring(ses.payload, NULL);
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
241 origport = buf_getint(ses.payload);
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
242
899
115f8a3c2d5a - Fix dbclient with port 0 for server-allocated
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
243 /* Find which port corresponds. First try and match address as well as port,
115f8a3c2d5a - Fix dbclient with port 0 for server-allocated
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
244 in case they want to forward different ports separately ... */
551
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
245 for (iter = cli_opts.remotefwds->first; iter; iter = iter->next) {
c3f2ec71e3d4 New standard linked list to use, rather than adhoc SignKeyList or TCPFwdList
Matt Johnston <matt@ucc.asn.au>
parents: 505
diff changeset
246 fwd = (struct TCPFwdEntry*)iter->item;
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
247 if (origport == fwd->listenport
899
115f8a3c2d5a - Fix dbclient with port 0 for server-allocated
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
248 && strcmp(origaddr, fwd->listenaddr) == 0) {
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
249 break;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
250 }
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
251 }
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
252
899
115f8a3c2d5a - Fix dbclient with port 0 for server-allocated
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
253 if (!iter)
115f8a3c2d5a - Fix dbclient with port 0 for server-allocated
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
254 {
115f8a3c2d5a - Fix dbclient with port 0 for server-allocated
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
255 /* ... otherwise try to generically match the only forwarded port
115f8a3c2d5a - Fix dbclient with port 0 for server-allocated
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
256 without address (also handles ::1 vs 127.0.0.1 vs localhost case).
115f8a3c2d5a - Fix dbclient with port 0 for server-allocated
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
257 rfc4254 is vague about the definition of "address that was connected" */
115f8a3c2d5a - Fix dbclient with port 0 for server-allocated
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
258 for (iter = cli_opts.remotefwds->first; iter; iter = iter->next) {
115f8a3c2d5a - Fix dbclient with port 0 for server-allocated
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
259 fwd = (struct TCPFwdEntry*)iter->item;
115f8a3c2d5a - Fix dbclient with port 0 for server-allocated
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
260 if (origport == fwd->listenport) {
115f8a3c2d5a - Fix dbclient with port 0 for server-allocated
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
261 break;
115f8a3c2d5a - Fix dbclient with port 0 for server-allocated
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
262 }
115f8a3c2d5a - Fix dbclient with port 0 for server-allocated
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
263 }
115f8a3c2d5a - Fix dbclient with port 0 for server-allocated
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
264 }
115f8a3c2d5a - Fix dbclient with port 0 for server-allocated
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
265
115f8a3c2d5a - Fix dbclient with port 0 for server-allocated
Matt Johnston <matt@ucc.asn.au>
parents: 857
diff changeset
266
1327
e47e4b8a005d initialize variable and protect against NULL dereferencement
Francois Perrad <francois.perrad@gadz.org>
parents: 1295
diff changeset
267 if (iter == NULL || fwd == NULL) {
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
268 /* We didn't request forwarding on that port */
1250
2bb4c662d1c2 more hard tab
Francois Perrad <francois.perrad@gadz.org>
parents: 1215
diff changeset
269 cleantext(origaddr);
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
270 dropbear_log(LOG_INFO, "Server sent unrequested forward from \"%s:%d\"",
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
271 origaddr, origport);
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
272 goto out;
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
273 }
1785
9026f976eee8 fuzz: work around fuzz_connect_remote() limitations
Matt Johnston <matt@ucc.asn.au>
parents: 1625
diff changeset
274
9026f976eee8 fuzz: work around fuzz_connect_remote() limitations
Matt Johnston <matt@ucc.asn.au>
parents: 1625
diff changeset
275 channel->prio = DROPBEAR_CHANNEL_PRIO_UNKNOWABLE;
1829
a7cc3332d8ab Replace ChanType.sepfds with Channel.bidir_fd
Matt Johnston <matt@ucc.asn.au>
parents: 1785
diff changeset
276
1237
888e3d17e962 Fix print format specifier
Chocobo1 <Chocobo1@users.noreply.github.com>
parents: 1215
diff changeset
277 snprintf(portstring, sizeof(portstring), "%u", fwd->connectport);
1466
f787f60f8e45 bind to port as well with -b
Matt Johnston <matt@ucc.asn.au>
parents: 1465
diff changeset
278 channel->conn_pending = connect_remote(fwd->connectaddr, portstring, channel_connect_done, channel, NULL, NULL);
1829
a7cc3332d8ab Replace ChanType.sepfds with Channel.bidir_fd
Matt Johnston <matt@ucc.asn.au>
parents: 1785
diff changeset
279
70
b0316ce64e4b Merging in the changes from 0.41-0.43 main Dropbear tree
Matt Johnston <matt@ucc.asn.au>
parents: 66
diff changeset
280 err = SSH_OPEN_IN_PROGRESS;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
281
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
282 out:
578
44f486b72427 - tcpfwd bindaddr support against trunk. needs merging.
Matt Johnston <matt@ucc.asn.au>
parents: 551
diff changeset
283 m_free(origaddr);
165
0cfba3034be5 Fixed DEBUG_TRACE macro so that we don't get semicolons left about the place
Matt Johnston <matt@ucc.asn.au>
parents: 156
diff changeset
284 TRACE(("leave newtcpdirect: err %d", err))
70
b0316ce64e4b Merging in the changes from 0.41-0.43 main Dropbear tree
Matt Johnston <matt@ucc.asn.au>
parents: 66
diff changeset
285 return err;
64
efb5e0b335cf TCP forwarding works.
Matt Johnston <matt@ucc.asn.au>
parents: 63
diff changeset
286 }
1295
750ec4ec4cbe Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents: 1275
diff changeset
287 #endif /* DROPBEAR_CLI_REMOTETCPFWD */