Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | | - |
6 | | - |
7 | | - |
8 | | - |
9 | | - |
10 | | - |
11 | | - |
12 | | - |
13 | | - |
14 | | - |
15 | | - |
16 | | - |
17 | | - |
18 | | - |
19 | | - |
20 | typedef void chan_fn(struct ssh *, Channel *c, | - |
21 | fd_set *readset, fd_set *writeset); | - |
22 | struct permission { | - |
23 | char *host_to_connect; | - |
24 | int port_to_connect; | - |
25 | char *listen_host; | - |
26 | char *listen_path; | - |
27 | int listen_port; | - |
28 | Channel *downstream; | - |
29 | }; | - |
30 | | - |
31 | | - |
32 | | - |
33 | | - |
34 | | - |
35 | struct permission_set { | - |
36 | | - |
37 | | - |
38 | | - |
39 | | - |
40 | u_int num_permitted_user; | - |
41 | struct permission *permitted_user; | - |
42 | | - |
43 | | - |
44 | | - |
45 | | - |
46 | u_int num_permitted_admin; | - |
47 | struct permission *permitted_admin; | - |
48 | | - |
49 | | - |
50 | | - |
51 | | - |
52 | | - |
53 | | - |
54 | int all_permitted; | - |
55 | }; | - |
56 | | - |
57 | | - |
58 | struct ssh_channels { | - |
59 | | - |
60 | | - |
61 | | - |
62 | | - |
63 | Channel **channels; | - |
64 | | - |
65 | | - |
66 | | - |
67 | | - |
68 | | - |
69 | u_int channels_alloc; | - |
70 | | - |
71 | | - |
72 | | - |
73 | | - |
74 | | - |
75 | int channel_max_fd; | - |
76 | chan_fn **channel_pre; | - |
77 | chan_fn **channel_post; | - |
78 | | - |
79 | | - |
80 | struct permission_set local_perms; | - |
81 | struct permission_set remote_perms; | - |
82 | | - |
83 | | - |
84 | | - |
85 | | - |
86 | char *x11_saved_display; | - |
87 | | - |
88 | | - |
89 | char *x11_saved_proto; | - |
90 | | - |
91 | | - |
92 | char *x11_saved_data; | - |
93 | u_int x11_saved_data_len; | - |
94 | | - |
95 | | - |
96 | u_int x11_refuse_time; | - |
97 | | - |
98 | | - |
99 | | - |
100 | | - |
101 | | - |
102 | | - |
103 | u_char *x11_fake_data; | - |
104 | u_int x11_fake_data_len; | - |
105 | | - |
106 | | - |
107 | int IPv4or6; | - |
108 | }; | - |
109 | | - |
110 | | - |
111 | static void port_open_helper(struct ssh *ssh, Channel *c, char *rtype); | - |
112 | static const char *channel_rfwd_bind_host(const char *listen_host); | - |
113 | | - |
114 | | - |
115 | static int connect_next(struct channel_connect *); | - |
116 | static void channel_connect_ctx_free(struct channel_connect *); | - |
117 | static Channel *rdynamic_connect_prepare(struct ssh *, char *, char *); | - |
118 | static int rdynamic_connect_finish(struct ssh *, Channel *); | - |
119 | | - |
120 | | - |
121 | static void channel_handler_init(struct ssh_channels *sc); | - |
122 | | - |
123 | | - |
124 | | - |
125 | void | - |
126 | channel_init_channels(struct ssh *ssh) | - |
127 | { | - |
128 | struct ssh_channels *sc; | - |
129 | | - |
130 | if ((TRUE | never evaluated | FALSE | never evaluated |
sc = calloc(1, sizeof(*sc))) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
131 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
132 | || | - |
133 | (TRUE | never evaluated | FALSE | never evaluated |
sc->channel_pre = calloc(23,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
134 | sizeof(*sc->channel_pre))) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
135 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
136 | || | - |
137 | (TRUE | never evaluated | FALSE | never evaluated |
sc->channel_post = calloc(23,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
138 | sizeof(*sc->channel_post))) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
139 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
140 | ) | - |
141 | fatal("%s: allocation failed", __func__); never executed: fatal("%s: allocation failed", __func__); | 0 |
142 | sc->channels_alloc = 10; | - |
143 | sc->channels = xcalloc(sc->channels_alloc, sizeof(*sc->channels)); | - |
144 | sc->IPv4or6 = | - |
145 | 0 | - |
146 | ; | - |
147 | channel_handler_init(sc); | - |
148 | | - |
149 | ssh->chanctxt = sc; | - |
150 | } never executed: end of block | 0 |
151 | | - |
152 | Channel * | - |
153 | channel_by_id(struct ssh *ssh, int id) | - |
154 | { | - |
155 | Channel *c; | - |
156 | | - |
157 | if (id < 0TRUE | never evaluated | FALSE | never evaluated |
|| (TRUE | never evaluated | FALSE | never evaluated |
u_int)id >= ssh->chanctxt->channels_allocTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
158 | logit("%s: %d: bad id", __func__, id); | - |
159 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 |
160 | ((void *)0) never executed: return ((void *)0) ; | 0 |
161 | ; never executed: return ((void *)0) ; | 0 |
162 | } | - |
163 | c = ssh->chanctxt->channels[id]; | - |
164 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
165 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
166 | ) { | - |
167 | logit("%s: %d: bad id: channel free", __func__, id); | - |
168 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 |
169 | ((void *)0) never executed: return ((void *)0) ; | 0 |
170 | ; never executed: return ((void *)0) ; | 0 |
171 | } | - |
172 | return never executed: return c; c;never executed: return c; | 0 |
173 | } | - |
174 | | - |
175 | Channel * | - |
176 | channel_by_remote_id(struct ssh *ssh, u_int remote_id) | - |
177 | { | - |
178 | Channel *c; | - |
179 | u_int i; | - |
180 | | - |
181 | for (i = 0; i < ssh->chanctxt->channels_allocTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
182 | c = ssh->chanctxt->channels[i]; | - |
183 | if (c != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
184 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
185 | && c->have_remote_idTRUE | never evaluated | FALSE | never evaluated |
&& c->remote_id == remote_idTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
186 | return never executed: return c; c;never executed: return c; | 0 |
187 | } never executed: end of block | 0 |
188 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 |
189 | ((void *)0) never executed: return ((void *)0) ; | 0 |
190 | ; never executed: return ((void *)0) ; | 0 |
191 | } | - |
192 | | - |
193 | | - |
194 | | - |
195 | | - |
196 | | - |
197 | Channel * | - |
198 | channel_lookup(struct ssh *ssh, int id) | - |
199 | { | - |
200 | Channel *c; | - |
201 | | - |
202 | if ((TRUE | never evaluated | FALSE | never evaluated |
c = channel_by_id(ssh, id)) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
203 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
204 | ) | - |
205 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 |
206 | ((void *)0) never executed: return ((void *)0) ; | 0 |
207 | ; never executed: return ((void *)0) ; | 0 |
208 | | - |
209 | switch (c->type) { | - |
210 | case never executed: case 7: 7:never executed: case 7: | 0 |
211 | case never executed: case 10: 10:never executed: case 10: | 0 |
212 | case never executed: case 12: 12:never executed: case 12: | 0 |
213 | case never executed: case 13: 13:never executed: case 13: | 0 |
214 | case never executed: case 21: 21:never executed: case 21: | 0 |
215 | case never executed: case 22: 22:never executed: case 22: | 0 |
216 | case never executed: case 3: 3:never executed: case 3: | 0 |
217 | case never executed: case 4: 4:never executed: case 4: | 0 |
218 | case never executed: case 17: 17:never executed: case 17: | 0 |
219 | case never executed: case 20: 20:never executed: case 20: | 0 |
220 | return never executed: return c; c;never executed: return c; | 0 |
221 | } | - |
222 | logit("Non-public channel %d, type %d.", id, c->type); | - |
223 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 |
224 | ((void *)0) never executed: return ((void *)0) ; | 0 |
225 | ; never executed: return ((void *)0) ; | 0 |
226 | } | - |
227 | | - |
228 | | - |
229 | | - |
230 | | - |
231 | | - |
232 | static void | - |
233 | channel_register_fds(struct ssh *ssh, Channel *c, int rfd, int wfd, int efd, | - |
234 | int extusage, int nonblock, int is_tty) | - |
235 | { | - |
236 | struct ssh_channels *sc = ssh->chanctxt; | - |
237 | | - |
238 | | - |
239 | sc->channel_max_fd = (((TRUE | never evaluated | FALSE | never evaluated |
sc->channel_max_fd) > (rfd))TRUE | never evaluated | FALSE | never evaluated |
? (sc->channel_max_fd) : (rfd)); | 0 |
240 | sc->channel_max_fd = (((TRUE | never evaluated | FALSE | never evaluated |
sc->channel_max_fd) > (wfd))TRUE | never evaluated | FALSE | never evaluated |
? (sc->channel_max_fd) : (wfd)); | 0 |
241 | sc->channel_max_fd = (((TRUE | never evaluated | FALSE | never evaluated |
sc->channel_max_fd) > (efd))TRUE | never evaluated | FALSE | never evaluated |
? (sc->channel_max_fd) : (efd)); | 0 |
242 | | - |
243 | if (rfd != -1TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
244 | fcntl(rfd, never executed: fcntl(rfd, 2 , 1 ); | 0 |
245 | 2 never executed: fcntl(rfd, 2 , 1 ); | 0 |
246 | , never executed: fcntl(rfd, 2 , 1 ); | 0 |
247 | 1 never executed: fcntl(rfd, 2 , 1 ); | 0 |
248 | ); never executed: fcntl(rfd, 2 , 1 ); | 0 |
249 | if (wfd != -1TRUE | never evaluated | FALSE | never evaluated |
&& wfd != rfdTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
250 | fcntl(wfd, never executed: fcntl(wfd, 2 , 1 ); | 0 |
251 | 2 never executed: fcntl(wfd, 2 , 1 ); | 0 |
252 | , never executed: fcntl(wfd, 2 , 1 ); | 0 |
253 | 1 never executed: fcntl(wfd, 2 , 1 ); | 0 |
254 | ); never executed: fcntl(wfd, 2 , 1 ); | 0 |
255 | if (efd != -1TRUE | never evaluated | FALSE | never evaluated |
&& efd != rfdTRUE | never evaluated | FALSE | never evaluated |
&& efd != wfdTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
256 | fcntl(efd, never executed: fcntl(efd, 2 , 1 ); | 0 |
257 | 2 never executed: fcntl(efd, 2 , 1 ); | 0 |
258 | , never executed: fcntl(efd, 2 , 1 ); | 0 |
259 | 1 never executed: fcntl(efd, 2 , 1 ); | 0 |
260 | ); never executed: fcntl(efd, 2 , 1 ); | 0 |
261 | | - |
262 | c->rfd = rfd; | - |
263 | c->wfd = wfd; | - |
264 | c->sock = (TRUE | never evaluated | FALSE | never evaluated |
rfd == wfd)TRUE | never evaluated | FALSE | never evaluated |
? rfd : -1; | 0 |
265 | c->efd = efd; | - |
266 | c->extended_usage = extusage; | - |
267 | | - |
268 | if ((TRUE | never evaluated | FALSE | never evaluated |
c->isatty = is_tty) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
269 | debug2("channel %d: rfd %d isatty", c->self, c->rfd); never executed: debug2("channel %d: rfd %d isatty", c->self, c->rfd); | 0 |
270 | | - |
271 | | - |
272 | | - |
273 | | - |
274 | | - |
275 | | - |
276 | if (nonblockTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
277 | if (rfd != -1TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
278 | set_nonblock(rfd); never executed: set_nonblock(rfd); | 0 |
279 | if (wfd != -1TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
280 | set_nonblock(wfd); never executed: set_nonblock(wfd); | 0 |
281 | if (efd != -1TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
282 | set_nonblock(efd); never executed: set_nonblock(efd); | 0 |
283 | } never executed: end of block | 0 |
284 | } never executed: end of block | 0 |
285 | | - |
286 | | - |
287 | | - |
288 | | - |
289 | | - |
290 | Channel * | - |
291 | channel_new(struct ssh *ssh, char *ctype, int type, int rfd, int wfd, int efd, | - |
292 | u_int window, u_int maxpack, int extusage, char *remote_name, int nonblock) | - |
293 | { | - |
294 | struct ssh_channels *sc = ssh->chanctxt; | - |
295 | u_int i, found; | - |
296 | Channel *c; | - |
297 | | - |
298 | | - |
299 | for (i = 0; i < sc->channels_allocTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
300 | if (sc->channels[i] == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
301 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
302 | ) { | - |
303 | | - |
304 | found = i; | - |
305 | break; never executed: break; | 0 |
306 | } | - |
307 | } never executed: end of block | 0 |
308 | if (i >= sc->channels_allocTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
309 | | - |
310 | | - |
311 | | - |
312 | | - |
313 | found = sc->channels_alloc; | - |
314 | if (sc->channels_alloc > (16*1024)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
315 | fatal("%s: internal error: channels_alloc %d too big", never executed: fatal("%s: internal error: channels_alloc %d too big", __func__, sc->channels_alloc); | 0 |
316 | __func__, sc->channels_alloc); never executed: fatal("%s: internal error: channels_alloc %d too big", __func__, sc->channels_alloc); | 0 |
317 | sc->channels = xrecallocarray(sc->channels, sc->channels_alloc, | - |
318 | sc->channels_alloc + 10, sizeof(*sc->channels)); | - |
319 | sc->channels_alloc += 10; | - |
320 | debug2("channel: expanding %d", sc->channels_alloc); | - |
321 | } never executed: end of block | 0 |
322 | | - |
323 | c = sc->channels[found] = xcalloc(1, sizeof(Channel)); | - |
324 | if ((TRUE | never evaluated | FALSE | never evaluated |
c->input = sshbuf_new()) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
325 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
326 | || | - |
327 | (TRUE | never evaluated | FALSE | never evaluated |
c->output = sshbuf_new()) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
328 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
329 | || | - |
330 | (TRUE | never evaluated | FALSE | never evaluated |
c->extended = sshbuf_new()) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
331 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
332 | ) | - |
333 | fatal("%s: sshbuf_new failed", __func__); never executed: fatal("%s: sshbuf_new failed", __func__); | 0 |
334 | c->ostate = 0; | - |
335 | c->istate = 0; | - |
336 | channel_register_fds(ssh, c, rfd, wfd, efd, extusage, nonblock, 0); | - |
337 | c->self = found; | - |
338 | c->type = type; | - |
339 | c->ctype = ctype; | - |
340 | c->local_window = window; | - |
341 | c->local_window_max = window; | - |
342 | c->local_maxpacket = maxpack; | - |
343 | c->remote_name = xstrdup(remote_name); | - |
344 | c->ctl_chan = -1; | - |
345 | c->delayed = 1; | - |
346 | do { (&c->status_confirms)->tqh_first = | - |
347 | ((void *)0) | - |
348 | ; (&c->status_confirms)->tqh_last = &(&c->status_confirms)->tqh_first; } while (0); | - |
349 | debug("channel %d: new [%s]", found, remote_name); | - |
350 | return never executed: return c; c;never executed: return c; | 0 |
351 | } | - |
352 | | - |
353 | static void | - |
354 | channel_find_maxfd(struct ssh_channels *sc) | - |
355 | { | - |
356 | u_int i; | - |
357 | int max = 0; | - |
358 | Channel *c; | - |
359 | | - |
360 | for (i = 0; i < sc->channels_allocTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
361 | c = sc->channels[i]; | - |
362 | if (c != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
363 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
364 | ) { | - |
365 | max = (((TRUE | never evaluated | FALSE | never evaluated |
max) > (c->rfd))TRUE | never evaluated | FALSE | never evaluated |
? (max) : (c->rfd)); | 0 |
366 | max = (((TRUE | never evaluated | FALSE | never evaluated |
max) > (c->wfd))TRUE | never evaluated | FALSE | never evaluated |
? (max) : (c->wfd)); | 0 |
367 | max = (((TRUE | never evaluated | FALSE | never evaluated |
max) > (c->efd))TRUE | never evaluated | FALSE | never evaluated |
? (max) : (c->efd)); | 0 |
368 | } never executed: end of block | 0 |
369 | } never executed: end of block | 0 |
370 | sc->channel_max_fd = max; | - |
371 | } never executed: end of block | 0 |
372 | | - |
373 | int | - |
374 | channel_close_fd(struct ssh *ssh, int *fdp) | - |
375 | { | - |
376 | struct ssh_channels *sc = ssh->chanctxt; | - |
377 | int ret = 0, fd = *fdp; | - |
378 | | - |
379 | if (fd != -1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
380 | ret = close(fd); | - |
381 | *fdp = -1; | - |
382 | if (fd == sc->channel_max_fdTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
383 | channel_find_maxfd(sc); never executed: channel_find_maxfd(sc); | 0 |
384 | } never executed: end of block | 0 |
385 | return never executed: return ret; ret;never executed: return ret; | 0 |
386 | } | - |
387 | | - |
388 | | - |
389 | static void | - |
390 | channel_close_fds(struct ssh *ssh, Channel *c) | - |
391 | { | - |
392 | int sock = c->sock, rfd = c->rfd, wfd = c->wfd, efd = c->efd; | - |
393 | | - |
394 | channel_close_fd(ssh, &c->sock); | - |
395 | if (rfd != sockTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
396 | channel_close_fd(ssh, &c->rfd); never executed: channel_close_fd(ssh, &c->rfd); | 0 |
397 | if (wfd != sockTRUE | never evaluated | FALSE | never evaluated |
&& wfd != rfdTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
398 | channel_close_fd(ssh, &c->wfd); never executed: channel_close_fd(ssh, &c->wfd); | 0 |
399 | if (efd != sockTRUE | never evaluated | FALSE | never evaluated |
&& efd != rfdTRUE | never evaluated | FALSE | never evaluated |
&& efd != wfdTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
400 | channel_close_fd(ssh, &c->efd); never executed: channel_close_fd(ssh, &c->efd); | 0 |
401 | } never executed: end of block | 0 |
402 | | - |
403 | static void | - |
404 | fwd_perm_clear(struct permission *perm) | - |
405 | { | - |
406 | free(perm->host_to_connect); | - |
407 | free(perm->listen_host); | - |
408 | free(perm->listen_path); | - |
409 | bzero(perm, sizeof(*perm)); | - |
410 | } never executed: end of block | 0 |
411 | | - |
412 | | - |
413 | static const char * | - |
414 | fwd_ident(int who, int where) | - |
415 | { | - |
416 | if (who == 0x100TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
417 | if (whereTRUE | never evaluated | FALSE | never evaluated |
== (1<<1)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
418 | return never executed: return "admin local"; "admin local";never executed: return "admin local"; | 0 |
419 | else if (whereTRUE | never evaluated | FALSE | never evaluated |
== (1)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
420 | return never executed: return "admin remote"; "admin remote";never executed: return "admin remote"; | 0 |
421 | } never executed: end of block else if (who == 0x101TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
422 | if (whereTRUE | never evaluated | FALSE | never evaluated |
== (1<<1)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
423 | return never executed: return "user local"; "user local";never executed: return "user local"; | 0 |
424 | else if (whereTRUE | never evaluated | FALSE | never evaluated |
== (1)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
425 | return never executed: return "user remote"; "user remote";never executed: return "user remote"; | 0 |
426 | } never executed: end of block | 0 |
427 | fatal("Unknown forward permission list %d/%d", who, where); | - |
428 | } never executed: end of block | 0 |
429 | | - |
430 | | - |
431 | static struct permission_set * | - |
432 | permission_set_get(struct ssh *ssh, int where) | - |
433 | { | - |
434 | struct ssh_channels *sc = ssh->chanctxt; | - |
435 | | - |
436 | switch (where) { | - |
437 | case never executed: case (1<<1): (1<<1):never executed: case (1<<1): | 0 |
438 | return never executed: return &sc->local_perms; &sc->local_perms;never executed: return &sc->local_perms; | 0 |
439 | break; dead code: break; | - |
440 | case never executed: case (1): (1):never executed: case (1): | 0 |
441 | return never executed: return &sc->remote_perms; &sc->remote_perms;never executed: return &sc->remote_perms; | 0 |
442 | break; dead code: break; | - |
443 | default never executed: default: :never executed: default: | 0 |
444 | fatal("%s: invalid forwarding direction %d", __func__, where); | - |
445 | } never executed: end of block | 0 |
446 | } | - |
447 | | - |
448 | | - |
449 | static void | - |
450 | permission_set_get_array(struct ssh *ssh, int who, int where, | - |
451 | struct permission ***permpp, u_int **npermpp) | - |
452 | { | - |
453 | struct permission_set *pset = permission_set_get(ssh, where); | - |
454 | | - |
455 | switch (who) { | - |
456 | case never executed: case 0x101: 0x101:never executed: case 0x101: | 0 |
457 | *permpp = &pset->permitted_user; | - |
458 | *npermpp = &pset->num_permitted_user; | - |
459 | break; never executed: break; | 0 |
460 | case never executed: case 0x100: 0x100:never executed: case 0x100: | 0 |
461 | *permpp = &pset->permitted_admin; | - |
462 | *npermpp = &pset->num_permitted_admin; | - |
463 | break; never executed: break; | 0 |
464 | default never executed: default: :never executed: default: | 0 |
465 | fatal("%s: invalid forwarding client %d", __func__, who); | - |
466 | } never executed: end of block | 0 |
467 | } | - |
468 | | - |
469 | | - |
470 | static int | - |
471 | permission_set_add(struct ssh *ssh, int who, int where, | - |
472 | const char *host_to_connect, int port_to_connect, | - |
473 | const char *listen_host, const char *listen_path, int listen_port, | - |
474 | Channel *downstream) | - |
475 | { | - |
476 | struct permission **permp; | - |
477 | u_int n, *npermp; | - |
478 | | - |
479 | permission_set_get_array(ssh, who, where, &permp, &npermp); | - |
480 | | - |
481 | if (*TRUE | never evaluated | FALSE | never evaluated |
npermp >= 0x7fffffffTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
482 | fatal("%s: %s overflow", __func__, fwd_ident(who, where)); never executed: fatal("%s: %s overflow", __func__, fwd_ident(who, where)); | 0 |
483 | | - |
484 | *permp = xrecallocarray(*permp, *npermp, *npermp + 1, sizeof(**permp)); | - |
485 | n = (*npermp)++; | - |
486 | | - |
487 | (*permp)[n].host_to_connect = ((TRUE | never evaluated | FALSE | never evaluated |
host_to_connect == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
488 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
489 | )TRUE | never evaluated | FALSE | never evaluated |
? | 0 |
490 | ((void *)0) | - |
491 | : xstrdup(host_to_connect)); | - |
492 | (*permp)[n].port_to_connect = port_to_connect; | - |
493 | (*permp)[n].listen_host = ((TRUE | never evaluated | FALSE | never evaluated |
listen_host == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
494 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
495 | )TRUE | never evaluated | FALSE | never evaluated |
? | 0 |
496 | ((void *)0) | - |
497 | : xstrdup(listen_host)); | - |
498 | (*permp)[n].listen_path = ((TRUE | never evaluated | FALSE | never evaluated |
listen_path == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
499 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
500 | )TRUE | never evaluated | FALSE | never evaluated |
? | 0 |
501 | ((void *)0) | - |
502 | : xstrdup(listen_path)); | - |
503 | (*permp)[n].listen_port = listen_port; | - |
504 | (*permp)[n].downstream = downstream; | - |
505 | | - |
506 | return never executed: return (int)n; (int)n;never executed: return (int)n; | 0 |
507 | } | - |
508 | | - |
509 | static void | - |
510 | mux_remove_remote_forwardings(struct ssh *ssh, Channel *c) | - |
511 | { | - |
512 | struct ssh_channels *sc = ssh->chanctxt; | - |
513 | struct permission_set *pset = &sc->local_perms; | - |
514 | struct permission *perm; | - |
515 | int r; | - |
516 | u_int i; | - |
517 | | - |
518 | for (i = 0; i < pset->num_permitted_userTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
519 | perm = &pset->permitted_user[i]; | - |
520 | if (perm->downstream != cTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
521 | continue; never executed: continue; | 0 |
522 | | - |
523 | | - |
524 | debug("channel %d: cleanup remote forward for %s:%u", | - |
525 | c->self, perm->listen_host, perm->listen_port); | - |
526 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_start(ssh, 80)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
527 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
528 | "cancel-tcpip-forward")) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
529 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u8(ssh, 0)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
530 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
531 | channel_rfwd_bind_host(perm->listen_host))) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
532 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, perm->listen_port)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
533 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
534 | fatal("%s: channel %i: %s", __func__, | - |
535 | c->self, ssh_err(r)); | - |
536 | } never executed: end of block | 0 |
537 | fwd_perm_clear(perm); | - |
538 | } never executed: end of block | 0 |
539 | } never executed: end of block | 0 |
540 | | - |
541 | | - |
542 | void | - |
543 | channel_free(struct ssh *ssh, Channel *c) | - |
544 | { | - |
545 | struct ssh_channels *sc = ssh->chanctxt; | - |
546 | char *s; | - |
547 | u_int i, n; | - |
548 | Channel *other; | - |
549 | struct channel_confirm *cc; | - |
550 | | - |
551 | for (n = 0, i = 0; i < sc->channels_allocTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
552 | if ((TRUE | never evaluated | FALSE | never evaluated |
other = sc->channels[i]) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
553 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
554 | ) | - |
555 | continue; never executed: continue; | 0 |
556 | n++; | - |
557 | | - |
558 | if (c->type == 16TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
559 | other->type == 20TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
560 | other->mux_ctx == cTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
561 | other->mux_ctx = | - |
562 | ((void *)0) | - |
563 | ; | - |
564 | other->type = 4; | - |
565 | other->istate = 3; | - |
566 | other->ostate = 3; | - |
567 | } never executed: end of block | 0 |
568 | } never executed: end of block | 0 |
569 | debug("channel %d: free: %s, nchannels %u", c->self, | - |
570 | c->remote_name ? c->remote_name : "???", n); | - |
571 | | - |
572 | if (c->type == 16TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
573 | mux_remove_remote_forwardings(ssh, c); never executed: mux_remove_remote_forwardings(ssh, c); | 0 |
574 | | - |
575 | if (log_level_get() >= SYSLOG_LEVEL_DEBUG3TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
576 | s = channel_open_message(ssh); | - |
577 | debug3("channel %d: status: %s", c->self, s); | - |
578 | free(s); | - |
579 | } never executed: end of block | 0 |
580 | | - |
581 | channel_close_fds(ssh, c); | - |
582 | sshbuf_free(c->input); | - |
583 | sshbuf_free(c->output); | - |
584 | sshbuf_free(c->extended); | - |
585 | c->input = c->output = c->extended = | - |
586 | ((void *)0) | - |
587 | ; | - |
588 | free(c->remote_name); | - |
589 | c->remote_name = | - |
590 | ((void *)0) | - |
591 | ; | - |
592 | free(c->path); | - |
593 | c->path = | - |
594 | ((void *)0) | - |
595 | ; | - |
596 | free(c->listening_addr); | - |
597 | c->listening_addr = | - |
598 | ((void *)0) | - |
599 | ; | - |
600 | while ((TRUE | never evaluated | FALSE | never evaluated |
cc = ((&c->status_confirms)->tqh_first)) != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
601 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
602 | ) { | - |
603 | if (cc->abandon_cb != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
604 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
605 | ) | - |
606 | cc->abandon_cb(ssh, c, cc->ctx); never executed: cc->abandon_cb(ssh, c, cc->ctx); | 0 |
607 | do { if (((TRUE | never evaluated | FALSE | never evaluated |
cc)->entry.tqe_next) != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
608 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
609 | ) ( never executed: (cc)->entry.tqe_next->entry.tqe_prev = (cc)->entry.tqe_prev; cc)->entry.tqe_next->entry.tqe_prev = (cc)->entry.tqe_prev;never executed: (cc)->entry.tqe_next->entry.tqe_prev = (cc)->entry.tqe_prev; else (never executed: (&c->status_confirms)->tqh_last = (cc)->entry.tqe_prev; &c->status_confirms)->tqh_last = (cc)->entry.tqe_prev;never executed: (&c->status_confirms)->tqh_last = (cc)->entry.tqe_prev; *(cc)->entry.tqe_prev = (cc)->entry.tqe_next; ; ; } while (0); | 0 |
610 | explicit_bzero(cc, sizeof(*cc)); | - |
611 | free(cc); | - |
612 | } never executed: end of block | 0 |
613 | if (c->filter_cleanup != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
614 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
615 | && c->filter_ctx != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
616 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
617 | ) | - |
618 | c->filter_cleanup(ssh, c->self, c->filter_ctx); never executed: c->filter_cleanup(ssh, c->self, c->filter_ctx); | 0 |
619 | sc->channels[c->self] = | - |
620 | ((void *)0) | - |
621 | ; | - |
622 | explicit_bzero(c, sizeof(*c)); | - |
623 | free(c); | - |
624 | } never executed: end of block | 0 |
625 | | - |
626 | void | - |
627 | channel_free_all(struct ssh *ssh) | - |
628 | { | - |
629 | u_int i; | - |
630 | | - |
631 | for (i = 0; i < ssh->chanctxt->channels_allocTRUE | never evaluated | FALSE | never evaluated |
; i++) | 0 |
632 | if (ssh->chanctxt->channels[i] != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
633 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
634 | ) | - |
635 | channel_free(ssh, ssh->chanctxt->channels[i]); never executed: channel_free(ssh, ssh->chanctxt->channels[i]); | 0 |
636 | } never executed: end of block | 0 |
637 | | - |
638 | | - |
639 | | - |
640 | | - |
641 | | - |
642 | void | - |
643 | channel_close_all(struct ssh *ssh) | - |
644 | { | - |
645 | u_int i; | - |
646 | | - |
647 | for (i = 0; i < ssh->chanctxt->channels_allocTRUE | never evaluated | FALSE | never evaluated |
; i++) | 0 |
648 | if (ssh->chanctxt->channels[i] != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
649 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
650 | ) | - |
651 | channel_close_fds(ssh, ssh->chanctxt->channels[i]); never executed: channel_close_fds(ssh, ssh->chanctxt->channels[i]); | 0 |
652 | } never executed: end of block | 0 |
653 | | - |
654 | | - |
655 | | - |
656 | | - |
657 | void | - |
658 | channel_stop_listening(struct ssh *ssh) | - |
659 | { | - |
660 | u_int i; | - |
661 | Channel *c; | - |
662 | | - |
663 | for (i = 0; i < ssh->chanctxt->channels_allocTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
664 | c = ssh->chanctxt->channels[i]; | - |
665 | if (c != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
666 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
667 | ) { | - |
668 | switch (c->type) { | - |
669 | case never executed: case 6: 6:never executed: case 6: | 0 |
670 | case never executed: case 2: 2:never executed: case 2: | 0 |
671 | case never executed: case 11: 11:never executed: case 11: | 0 |
672 | case never executed: case 1: 1:never executed: case 1: | 0 |
673 | case never executed: case 18: 18:never executed: case 18: | 0 |
674 | case never executed: case 19: 19:never executed: case 19: | 0 |
675 | channel_close_fd(ssh, &c->sock); | - |
676 | channel_free(ssh, c); | - |
677 | break; never executed: break; | 0 |
678 | } | - |
679 | } never executed: end of block | 0 |
680 | } never executed: end of block | 0 |
681 | } never executed: end of block | 0 |
682 | | - |
683 | | - |
684 | | - |
685 | | - |
686 | | - |
687 | int | - |
688 | channel_not_very_much_buffered_data(struct ssh *ssh) | - |
689 | { | - |
690 | u_int i; | - |
691 | u_int maxsize = ssh_packet_get_maxsize(ssh); | - |
692 | Channel *c; | - |
693 | | - |
694 | for (i = 0; i < ssh->chanctxt->channels_allocTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
695 | c = ssh->chanctxt->channels[i]; | - |
696 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
697 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
698 | || c->type != 4TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
699 | continue; never executed: continue; | 0 |
700 | if (sshbuf_len(c->output) > maxsizeTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
701 | debug2("channel %d: big output buffer %zu > %u", | - |
702 | c->self, sshbuf_len(c->output), maxsize); | - |
703 | return never executed: return 0; 0;never executed: return 0; | 0 |
704 | } | - |
705 | } never executed: end of block | 0 |
706 | return never executed: return 1; 1;never executed: return 1; | 0 |
707 | } | - |
708 | | - |
709 | | - |
710 | int | - |
711 | channel_still_open(struct ssh *ssh) | - |
712 | { | - |
713 | u_int i; | - |
714 | Channel *c; | - |
715 | | - |
716 | for (i = 0; i < ssh->chanctxt->channels_allocTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
717 | c = ssh->chanctxt->channels[i]; | - |
718 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
719 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
720 | ) | - |
721 | continue; never executed: continue; | 0 |
722 | switch (c->type) { | - |
723 | case never executed: case 1: 1:never executed: case 1: | 0 |
724 | case never executed: case 2: 2:never executed: case 2: | 0 |
725 | case never executed: case 11: 11:never executed: case 11: | 0 |
726 | case never executed: case 15: 15:never executed: case 15: | 0 |
727 | case never executed: case 5: 5:never executed: case 5: | 0 |
728 | case never executed: case 6: 6:never executed: case 6: | 0 |
729 | case never executed: case 13: 13:never executed: case 13: | 0 |
730 | case never executed: case 21: 21:never executed: case 21: | 0 |
731 | case never executed: case 12: 12:never executed: case 12: | 0 |
732 | case never executed: case 14: 14:never executed: case 14: | 0 |
733 | case never executed: case 17: 17:never executed: case 17: | 0 |
734 | case never executed: case 18: 18:never executed: case 18: | 0 |
735 | case never executed: case 19: 19:never executed: case 19: | 0 |
736 | continue; never executed: continue; | 0 |
737 | case never executed: case 10: 10:never executed: case 10: | 0 |
738 | continue; never executed: continue; | 0 |
739 | case never executed: case 3: 3:never executed: case 3: | 0 |
740 | case never executed: case 4: 4:never executed: case 4: | 0 |
741 | case never executed: case 22: 22:never executed: case 22: | 0 |
742 | case never executed: case 7: 7:never executed: case 7: | 0 |
743 | case never executed: case 16: 16:never executed: case 16: | 0 |
744 | case never executed: case 20: 20:never executed: case 20: | 0 |
745 | return never executed: return 1; 1;never executed: return 1; | 0 |
746 | default never executed: default: :never executed: default: | 0 |
747 | fatal("%s: bad channel type %d", __func__, c->type); | - |
748 | | - |
749 | } never executed: end of block | 0 |
750 | } | - |
751 | return never executed: return 0; 0;never executed: return 0; | 0 |
752 | } | - |
753 | | - |
754 | | - |
755 | int | - |
756 | channel_find_open(struct ssh *ssh) | - |
757 | { | - |
758 | u_int i; | - |
759 | Channel *c; | - |
760 | | - |
761 | for (i = 0; i < ssh->chanctxt->channels_allocTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
762 | c = ssh->chanctxt->channels[i]; | - |
763 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
764 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
765 | || !c->have_remote_idTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
766 | continue; never executed: continue; | 0 |
767 | switch (c->type) { | - |
768 | case never executed: case 5: 5:never executed: case 5: | 0 |
769 | case never executed: case 13: 13:never executed: case 13: | 0 |
770 | case never executed: case 21: 21:never executed: case 21: | 0 |
771 | case never executed: case 22: 22:never executed: case 22: | 0 |
772 | case never executed: case 1: 1:never executed: case 1: | 0 |
773 | case never executed: case 2: 2:never executed: case 2: | 0 |
774 | case never executed: case 11: 11:never executed: case 11: | 0 |
775 | case never executed: case 15: 15:never executed: case 15: | 0 |
776 | case never executed: case 16: 16:never executed: case 16: | 0 |
777 | case never executed: case 20: 20:never executed: case 20: | 0 |
778 | case never executed: case 3: 3:never executed: case 3: | 0 |
779 | case never executed: case 12: 12:never executed: case 12: | 0 |
780 | case never executed: case 14: 14:never executed: case 14: | 0 |
781 | case never executed: case 17: 17:never executed: case 17: | 0 |
782 | case never executed: case 18: 18:never executed: case 18: | 0 |
783 | case never executed: case 19: 19:never executed: case 19: | 0 |
784 | continue; never executed: continue; | 0 |
785 | case never executed: case 10: 10:never executed: case 10: | 0 |
786 | case never executed: case 6: 6:never executed: case 6: | 0 |
787 | case never executed: case 4: 4:never executed: case 4: | 0 |
788 | case never executed: case 7: 7:never executed: case 7: | 0 |
789 | return never executed: return i; i;never executed: return i; | 0 |
790 | default never executed: default: :never executed: default: | 0 |
791 | fatal("%s: bad channel type %d", __func__, c->type); | - |
792 | | - |
793 | } never executed: end of block | 0 |
794 | } | - |
795 | return never executed: return -1; -1;never executed: return -1; | 0 |
796 | } | - |
797 | | - |
798 | | - |
799 | | - |
800 | | - |
801 | | - |
802 | | - |
803 | char * | - |
804 | channel_open_message(struct ssh *ssh) | - |
805 | { | - |
806 | struct sshbuf *buf; | - |
807 | Channel *c; | - |
808 | u_int i; | - |
809 | int r; | - |
810 | char *ret; | - |
811 | | - |
812 | if ((TRUE | never evaluated | FALSE | never evaluated |
buf = sshbuf_new()) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
813 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
814 | ) | - |
815 | fatal("%s: sshbuf_new", __func__); never executed: fatal("%s: sshbuf_new", __func__); | 0 |
816 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_putf(buf,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
817 | "The following connections are open:\r\n")) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
818 | fatal("%s: sshbuf_putf: %s", __func__, ssh_err(r)); never executed: fatal("%s: sshbuf_putf: %s", __func__, ssh_err(r)); | 0 |
819 | for (i = 0; i < ssh->chanctxt->channels_allocTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
820 | c = ssh->chanctxt->channels[i]; | - |
821 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
822 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
823 | ) | - |
824 | continue; never executed: continue; | 0 |
825 | switch (c->type) { | - |
826 | case never executed: case 1: 1:never executed: case 1: | 0 |
827 | case never executed: case 2: 2:never executed: case 2: | 0 |
828 | case never executed: case 11: 11:never executed: case 11: | 0 |
829 | case never executed: case 5: 5:never executed: case 5: | 0 |
830 | case never executed: case 6: 6:never executed: case 6: | 0 |
831 | case never executed: case 14: 14:never executed: case 14: | 0 |
832 | case never executed: case 17: 17:never executed: case 17: | 0 |
833 | case never executed: case 15: 15:never executed: case 15: | 0 |
834 | case never executed: case 18: 18:never executed: case 18: | 0 |
835 | case never executed: case 19: 19:never executed: case 19: | 0 |
836 | continue; never executed: continue; | 0 |
837 | case never executed: case 10: 10:never executed: case 10: | 0 |
838 | case never executed: case 3: 3:never executed: case 3: | 0 |
839 | case never executed: case 12: 12:never executed: case 12: | 0 |
840 | case never executed: case 13: 13:never executed: case 13: | 0 |
841 | case never executed: case 21: 21:never executed: case 21: | 0 |
842 | case never executed: case 22: 22:never executed: case 22: | 0 |
843 | case never executed: case 4: 4:never executed: case 4: | 0 |
844 | case never executed: case 7: 7:never executed: case 7: | 0 |
845 | case never executed: case 20: 20:never executed: case 20: | 0 |
846 | case never executed: case 16: 16:never executed: case 16: | 0 |
847 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_putf(buf, " #%d %.300s "TRUE | never evaluated | FALSE | never evaluated |
| 0 |
848 | "(t%d %s%u i%u/%zu o%u/%zu fd %d/%d cc %d)\r\n",TRUE | never evaluated | FALSE | never evaluated |
| 0 |
849 | c->self, c->remote_name,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
850 | c->type,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
851 | c->have_remote_id ? "r" : "nr", c->remote_id,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
852 | c->istate, sshbuf_len(c->input),TRUE | never evaluated | FALSE | never evaluated |
| 0 |
853 | c->ostate, sshbuf_len(c->output),TRUE | never evaluated | FALSE | never evaluated |
| 0 |
854 | c->rfd, c->wfd, c->ctl_chan)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
855 | fatal("%s: sshbuf_putf: %s", never executed: fatal("%s: sshbuf_putf: %s", __func__, ssh_err(r)); | 0 |
856 | __func__, ssh_err(r)); never executed: fatal("%s: sshbuf_putf: %s", __func__, ssh_err(r)); | 0 |
857 | continue; never executed: continue; | 0 |
858 | default never executed: default: :never executed: default: | 0 |
859 | fatal("%s: bad channel type %d", __func__, c->type); | - |
860 | | - |
861 | } never executed: end of block | 0 |
862 | } | - |
863 | if ((TRUE | never evaluated | FALSE | never evaluated |
ret = sshbuf_dup_string(buf)) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
864 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
865 | ) | - |
866 | fatal("%s: sshbuf_dup_string", __func__); never executed: fatal("%s: sshbuf_dup_string", __func__); | 0 |
867 | sshbuf_free(buf); | - |
868 | return never executed: return ret; ret;never executed: return ret; | 0 |
869 | } | - |
870 | | - |
871 | static void | - |
872 | open_preamble(struct ssh *ssh, const char *where, Channel *c, const char *type) | - |
873 | { | - |
874 | int r; | - |
875 | | - |
876 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_start(ssh, 90)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
877 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh, type)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
878 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->self)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
879 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->local_window)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
880 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->local_maxpacket)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
881 | fatal("%s: channel %i: open: %s", where, c->self, ssh_err(r)); | - |
882 | } never executed: end of block | 0 |
883 | } never executed: end of block | 0 |
884 | | - |
885 | void | - |
886 | channel_send_open(struct ssh *ssh, int id) | - |
887 | { | - |
888 | Channel *c = channel_lookup(ssh, id); | - |
889 | int r; | - |
890 | | - |
891 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
892 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
893 | ) { | - |
894 | logit("channel_send_open: %d: bad id", id); | - |
895 | return; never executed: return; | 0 |
896 | } | - |
897 | debug2("channel %d: send open", id); | - |
898 | open_preamble(ssh, __func__, c, c->ctype); | - |
899 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
900 | fatal("%s: channel %i: %s", __func__, c->self, ssh_err(r)); never executed: fatal("%s: channel %i: %s", __func__, c->self, ssh_err(r)); | 0 |
901 | } never executed: end of block | 0 |
902 | | - |
903 | void | - |
904 | channel_request_start(struct ssh *ssh, int id, char *service, int wantconfirm) | - |
905 | { | - |
906 | Channel *c = channel_lookup(ssh, id); | - |
907 | int r; | - |
908 | | - |
909 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
910 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
911 | ) { | - |
912 | logit("%s: %d: unknown channel id", __func__, id); | - |
913 | return; never executed: return; | 0 |
914 | } | - |
915 | if (!c->have_remote_idTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
916 | fatal(":%s: channel %d: no remote id", __func__, c->self); never executed: fatal(":%s: channel %d: no remote id", __func__, c->self); | 0 |
917 | | - |
918 | debug2("channel %d: request %s confirm %d", id, service, wantconfirm); | - |
919 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_start(ssh, 98)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
920 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->remote_id)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
921 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh, service)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
922 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u8(ssh, wantconfirm)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
923 | fatal("%s: channel %i: %s", __func__, c->self, ssh_err(r)); | - |
924 | } never executed: end of block | 0 |
925 | } never executed: end of block | 0 |
926 | | - |
927 | void | - |
928 | channel_register_status_confirm(struct ssh *ssh, int id, | - |
929 | channel_confirm_cb *cb, channel_confirm_abandon_cb *abandon_cb, void *ctx) | - |
930 | { | - |
931 | struct channel_confirm *cc; | - |
932 | Channel *c; | - |
933 | | - |
934 | if ((TRUE | never evaluated | FALSE | never evaluated |
c = channel_lookup(ssh, id)) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
935 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
936 | ) | - |
937 | fatal("%s: %d: bad id", __func__, id); never executed: fatal("%s: %d: bad id", __func__, id); | 0 |
938 | | - |
939 | cc = xcalloc(1, sizeof(*cc)); | - |
940 | cc->cb = cb; | - |
941 | cc->abandon_cb = abandon_cb; | - |
942 | cc->ctx = ctx; | - |
943 | do { (cc)->entry.tqe_next = | - |
944 | ((void *)0) | - |
945 | ; (cc)->entry.tqe_prev = (&c->status_confirms)->tqh_last; *(&c->status_confirms)->tqh_last = (cc); (&c->status_confirms)->tqh_last = &(cc)->entry.tqe_next; } while (0); | - |
946 | } never executed: end of block | 0 |
947 | | - |
948 | void | - |
949 | channel_register_open_confirm(struct ssh *ssh, int id, | - |
950 | channel_open_fn *fn, void *ctx) | - |
951 | { | - |
952 | Channel *c = channel_lookup(ssh, id); | - |
953 | | - |
954 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
955 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
956 | ) { | - |
957 | logit("%s: %d: bad id", __func__, id); | - |
958 | return; never executed: return; | 0 |
959 | } | - |
960 | c->open_confirm = fn; | - |
961 | c->open_confirm_ctx = ctx; | - |
962 | } never executed: end of block | 0 |
963 | | - |
964 | void | - |
965 | channel_register_cleanup(struct ssh *ssh, int id, | - |
966 | channel_callback_fn *fn, int do_close) | - |
967 | { | - |
968 | Channel *c = channel_by_id(ssh, id); | - |
969 | | - |
970 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
971 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
972 | ) { | - |
973 | logit("%s: %d: bad id", __func__, id); | - |
974 | return; never executed: return; | 0 |
975 | } | - |
976 | c->detach_user = fn; | - |
977 | c->detach_close = do_close; | - |
978 | } never executed: end of block | 0 |
979 | | - |
980 | void | - |
981 | channel_cancel_cleanup(struct ssh *ssh, int id) | - |
982 | { | - |
983 | Channel *c = channel_by_id(ssh, id); | - |
984 | | - |
985 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
986 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
987 | ) { | - |
988 | logit("%s: %d: bad id", __func__, id); | - |
989 | return; never executed: return; | 0 |
990 | } | - |
991 | c->detach_user = | - |
992 | ((void *)0) | - |
993 | ; | - |
994 | c->detach_close = 0; | - |
995 | } never executed: end of block | 0 |
996 | | - |
997 | void | - |
998 | channel_register_filter(struct ssh *ssh, int id, channel_infilter_fn *ifn, | - |
999 | channel_outfilter_fn *ofn, channel_filter_cleanup_fn *cfn, void *ctx) | - |
1000 | { | - |
1001 | Channel *c = channel_lookup(ssh, id); | - |
1002 | | - |
1003 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1004 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1005 | ) { | - |
1006 | logit("%s: %d: bad id", __func__, id); | - |
1007 | return; never executed: return; | 0 |
1008 | } | - |
1009 | c->input_filter = ifn; | - |
1010 | c->output_filter = ofn; | - |
1011 | c->filter_ctx = ctx; | - |
1012 | c->filter_cleanup = cfn; | - |
1013 | } never executed: end of block | 0 |
1014 | | - |
1015 | void | - |
1016 | channel_set_fds(struct ssh *ssh, int id, int rfd, int wfd, int efd, | - |
1017 | int extusage, int nonblock, int is_tty, u_int window_max) | - |
1018 | { | - |
1019 | Channel *c = channel_lookup(ssh, id); | - |
1020 | int r; | - |
1021 | | - |
1022 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1023 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1024 | || c->type != 10TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1025 | fatal("channel_activate for non-larval channel %d.", id); never executed: fatal("channel_activate for non-larval channel %d.", id); | 0 |
1026 | if (!c->have_remote_idTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1027 | fatal(":%s: channel %d: no remote id", __func__, c->self); never executed: fatal(":%s: channel %d: no remote id", __func__, c->self); | 0 |
1028 | | - |
1029 | channel_register_fds(ssh, c, rfd, wfd, efd, extusage, nonblock, is_tty); | - |
1030 | c->type = 4; | - |
1031 | c->local_window = c->local_window_max = window_max; | - |
1032 | | - |
1033 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_start(ssh, 93)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1034 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->remote_id)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1035 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->local_window)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1036 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1037 | fatal("%s: channel %i: %s", __func__, c->self, ssh_err(r)); never executed: fatal("%s: channel %i: %s", __func__, c->self, ssh_err(r)); | 0 |
1038 | } never executed: end of block | 0 |
1039 | | - |
1040 | static void | - |
1041 | channel_pre_listener(struct ssh *ssh, Channel *c, | - |
1042 | fd_set *readset, fd_set *writeset) | - |
1043 | { | - |
1044 | kludge_FD_SET(c->sock, readset); | - |
1045 | } never executed: end of block | 0 |
1046 | | - |
1047 | static void | - |
1048 | channel_pre_connecting(struct ssh *ssh, Channel *c, | - |
1049 | fd_set *readset, fd_set *writeset) | - |
1050 | { | - |
1051 | debug3("channel %d: waiting for connection", c->self); | - |
1052 | kludge_FD_SET(c->sock, writeset); | - |
1053 | } never executed: end of block | 0 |
1054 | | - |
1055 | static void | - |
1056 | channel_pre_open(struct ssh *ssh, Channel *c, | - |
1057 | fd_set *readset, fd_set *writeset) | - |
1058 | { | - |
1059 | if (c->istate == 0TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
1060 | c->remote_window > 0TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
1061 | sshbuf_len(c->input) < c->remote_windowTRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
1062 | sshbuf_check_reserve(c->input, (16*1024)) == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1063 | kludge_FD_SET(c->rfd, readset); never executed: kludge_FD_SET(c->rfd, readset); | 0 |
1064 | if (c->ostate == 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1065 | c->ostate == 1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1066 | if (sshbuf_len(c->output) > 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1067 | kludge_FD_SET(c->wfd, writeset); | - |
1068 | } never executed: end of block else if (c->ostate == 1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1069 | if ((c->extended_usage == 2TRUE | never evaluated | FALSE | never evaluated |
&& c->efd != -1TRUE | never evaluated | FALSE | never evaluated |
&& (!(c->flags & (0x08|0x02))TRUE | never evaluated | FALSE | never evaluated |
|| sshbuf_len(c->extended) > 0TRUE | never evaluated | FALSE | never evaluated |
))) | 0 |
1070 | debug2("channel %d: " never executed: debug2("channel %d: " "obuf_empty delayed efd %d/(%zu)", c->self, c->efd, sshbuf_len(c->extended)); | 0 |
1071 | "obuf_empty delayed efd %d/(%zu)", c->self, never executed: debug2("channel %d: " "obuf_empty delayed efd %d/(%zu)", c->self, c->efd, sshbuf_len(c->extended)); | 0 |
1072 | c->efd, sshbuf_len(c->extended)); never executed: debug2("channel %d: " "obuf_empty delayed efd %d/(%zu)", c->self, c->efd, sshbuf_len(c->extended)); | 0 |
1073 | else | - |
1074 | chan_obuf_empty(ssh, c); never executed: chan_obuf_empty(ssh, c); | 0 |
1075 | } | - |
1076 | } never executed: end of block | 0 |
1077 | | - |
1078 | if (c->efd != -1TRUE | never evaluated | FALSE | never evaluated |
&& !(c->istate == 3TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
1079 | c->ostate == 3TRUE | never evaluated | FALSE | never evaluated |
)) { | 0 |
1080 | if (c->extended_usage == 2TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
1081 | sshbuf_len(c->extended) > 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1082 | kludge_FD_SET(c->efd, writeset); never executed: kludge_FD_SET(c->efd, writeset); | 0 |
1083 | else if (c->efd != -1TRUE | never evaluated | FALSE | never evaluated |
&& !(c->flags & 0x04)TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
1084 | (c->extended_usage == 1TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1085 | c->extended_usage == 0TRUE | never evaluated | FALSE | never evaluated |
) && | 0 |
1086 | sshbuf_len(c->extended) < c->remote_windowTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1087 | kludge_FD_SET(c->efd, readset); never executed: kludge_FD_SET(c->efd, readset); | 0 |
1088 | } never executed: end of block | 0 |
1089 | | - |
1090 | } never executed: end of block | 0 |
1091 | static int | - |
1092 | x11_open_helper(struct ssh *ssh, struct sshbuf *b) | - |
1093 | { | - |
1094 | struct ssh_channels *sc = ssh->chanctxt; | - |
1095 | u_char *ucp; | - |
1096 | u_int proto_len, data_len; | - |
1097 | | - |
1098 | | - |
1099 | if (sc->x11_refuse_time != 0TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
1100 | (TRUE | never evaluated | FALSE | never evaluated |
u_int)monotime() >= sc->x11_refuse_timeTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1101 | verbose("Rejected X11 connection after ForwardX11Timeout " | - |
1102 | "expired"); | - |
1103 | return never executed: return -1; -1;never executed: return -1; | 0 |
1104 | } | - |
1105 | | - |
1106 | | - |
1107 | if (sshbuf_len(b) < 12TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1108 | return never executed: return 0; 0;never executed: return 0; | 0 |
1109 | | - |
1110 | | - |
1111 | ucp = sshbuf_mutable_ptr(b); | - |
1112 | if (ucp[0] == 0x42TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1113 | proto_len = 256 * ucp[6] + ucp[7]; | - |
1114 | data_len = 256 * ucp[8] + ucp[9]; | - |
1115 | } never executed: end of block else if (ucp[0] == 0x6cTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1116 | proto_len = ucp[6] + 256 * ucp[7]; | - |
1117 | data_len = ucp[8] + 256 * ucp[9]; | - |
1118 | } never executed: end of block else { | 0 |
1119 | debug2("Initial X11 packet contains bad byte order byte: 0x%x", | - |
1120 | ucp[0]); | - |
1121 | return never executed: return -1; -1;never executed: return -1; | 0 |
1122 | } | - |
1123 | | - |
1124 | | - |
1125 | if (sshbuf_len(b) <TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1126 | 12 + ((proto_len + 3) & ~3) + ((data_len + 3) & ~3)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1127 | return never executed: return 0; 0;never executed: return 0; | 0 |
1128 | | - |
1129 | | - |
1130 | if (proto_len != strlen(sc->x11_saved_proto)TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1131 | memcmp(ucp + 12, sc->x11_saved_proto, proto_len) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1132 | debug2("X11 connection uses different authentication protocol."); | - |
1133 | return never executed: return -1; -1;never executed: return -1; | 0 |
1134 | } | - |
1135 | | - |
1136 | if (data_len != sc->x11_fake_data_lenTRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1137 | timingsafe_bcmp(ucp + 12 + ((proto_len + 3) & ~3),TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1138 | sc->x11_fake_data, sc->x11_fake_data_len) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1139 | debug2("X11 auth data does not match fake data."); | - |
1140 | return never executed: return -1; -1;never executed: return -1; | 0 |
1141 | } | - |
1142 | | - |
1143 | if (sc->x11_fake_data_len != sc->x11_saved_data_lenTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1144 | error("X11 fake_data_len %d != saved_data_len %d", | - |
1145 | sc->x11_fake_data_len, sc->x11_saved_data_len); | - |
1146 | return never executed: return -1; -1;never executed: return -1; | 0 |
1147 | } | - |
1148 | | - |
1149 | | - |
1150 | | - |
1151 | | - |
1152 | | - |
1153 | memcpy(ucp + 12 + ((proto_len + 3) & ~3), | - |
1154 | sc->x11_saved_data, sc->x11_saved_data_len); | - |
1155 | return never executed: return 1; 1;never executed: return 1; | 0 |
1156 | } | - |
1157 | | - |
1158 | static void | - |
1159 | channel_pre_x11_open(struct ssh *ssh, Channel *c, | - |
1160 | fd_set *readset, fd_set *writeset) | - |
1161 | { | - |
1162 | int ret = x11_open_helper(ssh, c->output); | - |
1163 | | - |
1164 | | - |
1165 | | - |
1166 | if (ret == 1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1167 | c->type = 4; | - |
1168 | channel_pre_open(ssh, c, readset, writeset); | - |
1169 | } never executed: end of block else if (ret == -1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1170 | logit("X11 connection rejected because of wrong authentication."); | - |
1171 | debug2("X11 rejected %d i%d/o%d", | - |
1172 | c->self, c->istate, c->ostate); | - |
1173 | chan_read_failed(ssh, c); | - |
1174 | sshbuf_reset(c->input); | - |
1175 | chan_ibuf_empty(ssh, c); | - |
1176 | sshbuf_reset(c->output); | - |
1177 | chan_write_failed(ssh, c); | - |
1178 | debug2("X11 closed %d i%d/o%d", c->self, c->istate, c->ostate); | - |
1179 | } never executed: end of block | 0 |
1180 | } never executed: end of block | 0 |
1181 | | - |
1182 | static void | - |
1183 | channel_pre_mux_client(struct ssh *ssh, | - |
1184 | Channel *c, fd_set *readset, fd_set *writeset) | - |
1185 | { | - |
1186 | if (c->istate == 0TRUE | never evaluated | FALSE | never evaluated |
&& !c->mux_pauseTRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
1187 | sshbuf_check_reserve(c->input, (16*1024)) == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1188 | kludge_FD_SET(c->rfd, readset); never executed: kludge_FD_SET(c->rfd, readset); | 0 |
1189 | if (c->istate == 1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1190 | | - |
1191 | sshbuf_reset(c->input); | - |
1192 | chan_ibuf_empty(ssh, c); | - |
1193 | | - |
1194 | chan_rcvd_oclose(ssh, c); | - |
1195 | } never executed: end of block | 0 |
1196 | if (c->ostate == 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1197 | c->ostate == 1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1198 | if (sshbuf_len(c->output) > 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1199 | kludge_FD_SET(c->wfd, writeset); never executed: kludge_FD_SET(c->wfd, writeset); | 0 |
1200 | else if (c->ostate == 1TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1201 | chan_obuf_empty(ssh, c); never executed: chan_obuf_empty(ssh, c); | 0 |
1202 | } never executed: end of block | 0 |
1203 | } never executed: end of block | 0 |
1204 | | - |
1205 | | - |
1206 | static int | - |
1207 | channel_decode_socks4(Channel *c, struct sshbuf *input, struct sshbuf *output) | - |
1208 | { | - |
1209 | const u_char *p; | - |
1210 | char *host; | - |
1211 | u_int len, have, i, found, need; | - |
1212 | char username[256]; | - |
1213 | struct { | - |
1214 | u_int8_t version; | - |
1215 | u_int8_t command; | - |
1216 | u_int16_t dest_port; | - |
1217 | struct in_addr dest_addr; | - |
1218 | } s4_req, s4_rsp; | - |
1219 | int r; | - |
1220 | | - |
1221 | debug2("channel %d: decode socks4", c->self); | - |
1222 | | - |
1223 | have = sshbuf_len(input); | - |
1224 | len = sizeof(s4_req); | - |
1225 | if (have < lenTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1226 | return never executed: return 0; 0;never executed: return 0; | 0 |
1227 | p = sshbuf_ptr(input); | - |
1228 | | - |
1229 | need = 1; | - |
1230 | | - |
1231 | if (p[4] == 0TRUE | never evaluated | FALSE | never evaluated |
&& p[5] == 0TRUE | never evaluated | FALSE | never evaluated |
&& p[6] == 0TRUE | never evaluated | FALSE | never evaluated |
&& p[7] != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1232 | debug2("channel %d: socks4a request", c->self); | - |
1233 | | - |
1234 | need = 2; | - |
1235 | } never executed: end of block | 0 |
1236 | | - |
1237 | for (found = 0, i = len; i < haveTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
1238 | if (p[i] == '\0'TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1239 | found++; | - |
1240 | if (found == needTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1241 | break; never executed: break; | 0 |
1242 | } never executed: end of block | 0 |
1243 | if (i > 1024TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1244 | | - |
1245 | debug("channel %d: decode socks4: too long", | - |
1246 | c->self); | - |
1247 | return never executed: return -1; -1;never executed: return -1; | 0 |
1248 | } | - |
1249 | } never executed: end of block | 0 |
1250 | if (found < needTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1251 | return never executed: return 0; 0;never executed: return 0; | 0 |
1252 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_get(input, &s4_req.version, 1)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1253 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_get(input, &s4_req.command, 1)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1254 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_get(input, &s4_req.dest_port, 2)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1255 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_get(input, &s4_req.dest_addr, 4)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1256 | debug("channels %d: decode socks4: %s", c->self, ssh_err(r)); | - |
1257 | return never executed: return -1; -1;never executed: return -1; | 0 |
1258 | } | - |
1259 | have = sshbuf_len(input); | - |
1260 | p = sshbuf_ptr(input); | - |
1261 | if (memchr(p, '\0', have) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1262 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1263 | ) { | - |
1264 | error("channel %d: decode socks4: user not nul terminated", | - |
1265 | c->self); | - |
1266 | return never executed: return -1; -1;never executed: return -1; | 0 |
1267 | } | - |
1268 | len = strlen(p); | - |
1269 | debug2("channel %d: decode socks4: user %s/%d", c->self, p, len); | - |
1270 | len++; | - |
1271 | strlcpy(username, p, sizeof(username)); | - |
1272 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_consume(input, len)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1273 | fatal("%s: channel %d: consume: %s", __func__, | - |
1274 | c->self, ssh_err(r)); | - |
1275 | } never executed: end of block | 0 |
1276 | free(c->path); | - |
1277 | c->path = | - |
1278 | ((void *)0) | - |
1279 | ; | - |
1280 | if (need == 1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1281 | host = inet_ntoa(s4_req.dest_addr); | - |
1282 | c->path = xstrdup(host); | - |
1283 | } never executed: end of block else { | 0 |
1284 | have = sshbuf_len(input); | - |
1285 | p = sshbuf_ptr(input); | - |
1286 | if (memchr(p, '\0', have) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1287 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1288 | ) { | - |
1289 | error("channel %d: decode socks4a: host not nul " | - |
1290 | "terminated", c->self); | - |
1291 | return never executed: return -1; -1;never executed: return -1; | 0 |
1292 | } | - |
1293 | len = strlen(p); | - |
1294 | debug2("channel %d: decode socks4a: host %s/%d", | - |
1295 | c->self, p, len); | - |
1296 | len++; | - |
1297 | if (len > TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1298 | 1025TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1299 | ) { | - |
1300 | error("channel %d: hostname \"%.100s\" too long", | - |
1301 | c->self, p); | - |
1302 | return never executed: return -1; -1;never executed: return -1; | 0 |
1303 | } | - |
1304 | c->path = xstrdup(p); | - |
1305 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_consume(input, len)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1306 | fatal("%s: channel %d: consume: %s", __func__, | - |
1307 | c->self, ssh_err(r)); | - |
1308 | } never executed: end of block | 0 |
1309 | } never executed: end of block | 0 |
1310 | c->host_port = | - |
1311 | (__extension__ ({ unsigned short int __v, __x = (unsigned short int) ( | - |
1312 | s4_req.dest_port | - |
1313 | ); if (__builtin_constant_p (__x)TRUE | never evaluated | FALSE | never evaluated |
) __v = ((unsigned short int) ((((__x) >> 8) & 0xff) | (((__x) & 0xff) << 8)));never executed: __v = ((unsigned short int) ((((__x) >> 8) & 0xff) | (((__x) & 0xff) << 8))); else __asm__never executed: __asm__ ("rorw $8, %w0" : "=r" (__v) : "0" (__x) : "cc"); ("rorw $8, %w0" : "=r" (__v) : "0" (__x) : "cc");never executed: __asm__ ("rorw $8, %w0" : "=r" (__v) : "0" (__x) : "cc"); __v; })) | 0 |
1314 | ; | - |
1315 | | - |
1316 | debug2("channel %d: dynamic request: socks4 host %s port %u command %u", | - |
1317 | c->self, c->path, c->host_port, s4_req.command); | - |
1318 | | - |
1319 | if (s4_req.command != 1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1320 | debug("channel %d: cannot handle: %s cn %d", | - |
1321 | c->self, need == 1 ? "SOCKS4" : "SOCKS4A", s4_req.command); | - |
1322 | return never executed: return -1; -1;never executed: return -1; | 0 |
1323 | } | - |
1324 | s4_rsp.version = 0; | - |
1325 | s4_rsp.command = 90; | - |
1326 | s4_rsp.dest_port = 0; | - |
1327 | s4_rsp.dest_addr.s_addr = | - |
1328 | ((in_addr_t) 0x00000000) | - |
1329 | ; | - |
1330 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put(output, &s4_rsp, sizeof(s4_rsp))) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1331 | fatal("%s: channel %d: append reply: %s", __func__, | - |
1332 | c->self, ssh_err(r)); | - |
1333 | } never executed: end of block | 0 |
1334 | return never executed: return 1; 1;never executed: return 1; | 0 |
1335 | } | - |
1336 | static int | - |
1337 | channel_decode_socks5(Channel *c, struct sshbuf *input, struct sshbuf *output) | - |
1338 | { | - |
1339 | | - |
1340 | struct { | - |
1341 | u_int8_t version; | - |
1342 | u_int8_t command; | - |
1343 | u_int8_t reserved; | - |
1344 | u_int8_t atyp; | - |
1345 | } s5_req, s5_rsp; | - |
1346 | u_int16_t dest_port; | - |
1347 | char dest_addr[255+1], ntop[ | - |
1348 | 46 | - |
1349 | ]; | - |
1350 | const u_char *p; | - |
1351 | u_int have, need, i, found, nmethods, addrlen, af; | - |
1352 | int r; | - |
1353 | | - |
1354 | debug2("channel %d: decode socks5", c->self); | - |
1355 | p = sshbuf_ptr(input); | - |
1356 | if (p[0] != 0x05TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1357 | return never executed: return -1; -1;never executed: return -1; | 0 |
1358 | have = sshbuf_len(input); | - |
1359 | if (!(c->flags & 0x1000)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1360 | | - |
1361 | if (have < 2TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1362 | return never executed: return 0; 0;never executed: return 0; | 0 |
1363 | nmethods = p[1]; | - |
1364 | if (have < nmethods + 2TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1365 | return never executed: return 0; 0;never executed: return 0; | 0 |
1366 | | - |
1367 | for (found = 0, i = 2; i < nmethods + 2TRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
1368 | if (p[i] == 0x00TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1369 | found = 1; | - |
1370 | break; never executed: break; | 0 |
1371 | } | - |
1372 | } never executed: end of block | 0 |
1373 | if (!foundTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1374 | debug("channel %d: method SSH_SOCKS5_NOAUTH not found", | - |
1375 | c->self); | - |
1376 | return never executed: return -1; -1;never executed: return -1; | 0 |
1377 | } | - |
1378 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_consume(input, nmethods + 2)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1379 | fatal("%s: channel %d: consume: %s", __func__, | - |
1380 | c->self, ssh_err(r)); | - |
1381 | } never executed: end of block | 0 |
1382 | | - |
1383 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put_u8(output, 0x05)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1384 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put_u8(output, 0x00)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1385 | fatal("%s: channel %d: append reply: %s", __func__, | - |
1386 | c->self, ssh_err(r)); | - |
1387 | } never executed: end of block | 0 |
1388 | c->flags |= 0x1000; | - |
1389 | debug2("channel %d: socks5 auth done", c->self); | - |
1390 | return never executed: return 0; 0;never executed: return 0; | 0 |
1391 | } | - |
1392 | debug2("channel %d: socks5 post auth", c->self); | - |
1393 | if (have < sizeof(s5_req)+1TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1394 | return never executed: return 0; 0;never executed: return 0; | 0 |
1395 | memcpy(&s5_req, p, sizeof(s5_req)); | - |
1396 | if (s5_req.version != 0x05TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1397 | s5_req.command != 0x01TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1398 | s5_req.reserved != 0x00TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1399 | debug2("channel %d: only socks5 connect supported", c->self); | - |
1400 | return never executed: return -1; -1;never executed: return -1; | 0 |
1401 | } | - |
1402 | switch (s5_req.atyp){ | - |
1403 | case never executed: case 0x01: 0x01:never executed: case 0x01: | 0 |
1404 | addrlen = 4; | - |
1405 | af = | - |
1406 | 2 | - |
1407 | ; | - |
1408 | break; never executed: break; | 0 |
1409 | case never executed: case 0x03: 0x03:never executed: case 0x03: | 0 |
1410 | addrlen = p[sizeof(s5_req)]; | - |
1411 | af = -1; | - |
1412 | break; never executed: break; | 0 |
1413 | case never executed: case 0x04: 0x04:never executed: case 0x04: | 0 |
1414 | addrlen = 16; | - |
1415 | af = | - |
1416 | 10 | - |
1417 | ; | - |
1418 | break; never executed: break; | 0 |
1419 | default never executed: default: :never executed: default: | 0 |
1420 | debug2("channel %d: bad socks5 atyp %d", c->self, s5_req.atyp); | - |
1421 | return never executed: return -1; -1;never executed: return -1; | 0 |
1422 | } | - |
1423 | need = sizeof(s5_req) + addrlen + 2; | - |
1424 | if (s5_req.atyp == 0x03TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1425 | need++; never executed: need++; | 0 |
1426 | if (have < needTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1427 | return never executed: return 0; 0;never executed: return 0; | 0 |
1428 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_consume(input, sizeof(s5_req))) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1429 | fatal("%s: channel %d: consume: %s", __func__, | - |
1430 | c->self, ssh_err(r)); | - |
1431 | } never executed: end of block | 0 |
1432 | if (s5_req.atyp == 0x03TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1433 | | - |
1434 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_consume(input, 1)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1435 | fatal("%s: channel %d: consume: %s", __func__, | - |
1436 | c->self, ssh_err(r)); | - |
1437 | } never executed: end of block | 0 |
1438 | } never executed: end of block | 0 |
1439 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_get(input, &dest_addr, addrlen)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1440 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_get(input, &dest_port, 2)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1441 | debug("channel %d: parse addr/port: %s", c->self, ssh_err(r)); | - |
1442 | return never executed: return -1; -1;never executed: return -1; | 0 |
1443 | } | - |
1444 | dest_addr[addrlen] = '\0'; | - |
1445 | free(c->path); | - |
1446 | c->path = | - |
1447 | ((void *)0) | - |
1448 | ; | - |
1449 | if (s5_req.atyp == 0x03TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1450 | if (addrlen >= TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1451 | 1025TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1452 | ) { | - |
1453 | error("channel %d: dynamic request: socks5 hostname " | - |
1454 | "\"%.100s\" too long", c->self, dest_addr); | - |
1455 | return never executed: return -1; -1;never executed: return -1; | 0 |
1456 | } | - |
1457 | c->path = xstrdup(dest_addr); | - |
1458 | } never executed: end of block else { | 0 |
1459 | if (inet_ntop(af, dest_addr, ntop, sizeof(ntop)) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1460 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1461 | ) | - |
1462 | return never executed: return -1; -1;never executed: return -1; | 0 |
1463 | c->path = xstrdup(ntop); | - |
1464 | } never executed: end of block | 0 |
1465 | c->host_port = | - |
1466 | (__extension__ ({ unsigned short int __v, __x = (unsigned short int) ( | - |
1467 | dest_port | - |
1468 | ); if (__builtin_constant_p (__x)TRUE | never evaluated | FALSE | never evaluated |
) __v = ((unsigned short int) ((((__x) >> 8) & 0xff) | (((__x) & 0xff) << 8)));never executed: __v = ((unsigned short int) ((((__x) >> 8) & 0xff) | (((__x) & 0xff) << 8))); else __asm__never executed: __asm__ ("rorw $8, %w0" : "=r" (__v) : "0" (__x) : "cc"); ("rorw $8, %w0" : "=r" (__v) : "0" (__x) : "cc");never executed: __asm__ ("rorw $8, %w0" : "=r" (__v) : "0" (__x) : "cc"); __v; })) | 0 |
1469 | ; | - |
1470 | | - |
1471 | debug2("channel %d: dynamic request: socks5 host %s port %u command %u", | - |
1472 | c->self, c->path, c->host_port, s5_req.command); | - |
1473 | | - |
1474 | s5_rsp.version = 0x05; | - |
1475 | s5_rsp.command = 0x00; | - |
1476 | s5_rsp.reserved = 0; | - |
1477 | s5_rsp.atyp = 0x01; | - |
1478 | dest_port = 0; | - |
1479 | | - |
1480 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put(output, &s5_rsp, sizeof(s5_rsp))) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1481 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put_u32(output, TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1482 | __bswap_32 (((in_addr_t) 0x00000000))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1483 | )) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1484 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put(output, &dest_port, sizeof(dest_port))) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1485 | fatal("%s: channel %d: append reply: %s", __func__, never executed: fatal("%s: channel %d: append reply: %s", __func__, c->self, ssh_err(r)); | 0 |
1486 | c->self, ssh_err(r)); never executed: fatal("%s: channel %d: append reply: %s", __func__, c->self, ssh_err(r)); | 0 |
1487 | return never executed: return 1; 1;never executed: return 1; | 0 |
1488 | } | - |
1489 | | - |
1490 | Channel * | - |
1491 | channel_connect_stdio_fwd(struct ssh *ssh, | - |
1492 | const char *host_to_connect, u_short port_to_connect, int in, int out) | - |
1493 | { | - |
1494 | Channel *c; | - |
1495 | | - |
1496 | debug("%s %s:%d", __func__, host_to_connect, port_to_connect); | - |
1497 | | - |
1498 | c = channel_new(ssh, "stdio-forward", 3, in, out, | - |
1499 | -1, (64*(32*1024)), (32*1024), | - |
1500 | 0, "stdio-forward", 0); | - |
1501 | | - |
1502 | c->path = xstrdup(host_to_connect); | - |
1503 | c->host_port = port_to_connect; | - |
1504 | c->listening_port = 0; | - |
1505 | c->force_drain = 1; | - |
1506 | | - |
1507 | channel_register_fds(ssh, c, in, out, -1, 0, 1, 0); | - |
1508 | port_open_helper(ssh, c, "direct-tcpip"); | - |
1509 | | - |
1510 | return never executed: return c; c;never executed: return c; | 0 |
1511 | } | - |
1512 | | - |
1513 | | - |
1514 | static void | - |
1515 | channel_pre_dynamic(struct ssh *ssh, Channel *c, | - |
1516 | fd_set *readset, fd_set *writeset) | - |
1517 | { | - |
1518 | const u_char *p; | - |
1519 | u_int have; | - |
1520 | int ret; | - |
1521 | | - |
1522 | have = sshbuf_len(c->input); | - |
1523 | debug2("channel %d: pre_dynamic: have %d", c->self, have); | - |
1524 | | - |
1525 | | - |
1526 | if (have < 3TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1527 | | - |
1528 | kludge_FD_SET(c->sock, readset); | - |
1529 | return; never executed: return; | 0 |
1530 | } | - |
1531 | | - |
1532 | p = sshbuf_ptr(c->input); | - |
1533 | | - |
1534 | switch (p[0]) { | - |
1535 | case never executed: case 0x04: 0x04:never executed: case 0x04: | 0 |
1536 | ret = channel_decode_socks4(c, c->input, c->output); | - |
1537 | break; never executed: break; | 0 |
1538 | case never executed: case 0x05: 0x05:never executed: case 0x05: | 0 |
1539 | ret = channel_decode_socks5(c, c->input, c->output); | - |
1540 | break; never executed: break; | 0 |
1541 | default never executed: default: :never executed: default: | 0 |
1542 | ret = -1; | - |
1543 | break; never executed: break; | 0 |
1544 | } | - |
1545 | if (ret < 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1546 | chan_mark_dead(ssh, c); | - |
1547 | } never executed: end of block else if (ret == 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1548 | debug2("channel %d: pre_dynamic: need more", c->self); | - |
1549 | | - |
1550 | kludge_FD_SET(c->sock, readset); | - |
1551 | if (sshbuf_len(c->output)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1552 | kludge_FD_SET(c->sock, writeset); never executed: kludge_FD_SET(c->sock, writeset); | 0 |
1553 | } never executed: end of block else { | 0 |
1554 | | - |
1555 | c->type = 3; | - |
1556 | port_open_helper(ssh, c, "direct-tcpip"); | - |
1557 | } never executed: end of block | 0 |
1558 | } | - |
1559 | | - |
1560 | | - |
1561 | static void | - |
1562 | rdynamic_close(struct ssh *ssh, Channel *c) | - |
1563 | { | - |
1564 | c->type = 4; | - |
1565 | chan_read_failed(ssh, c); | - |
1566 | sshbuf_reset(c->input); | - |
1567 | chan_ibuf_empty(ssh, c); | - |
1568 | sshbuf_reset(c->output); | - |
1569 | chan_write_failed(ssh, c); | - |
1570 | } never executed: end of block | 0 |
1571 | | - |
1572 | | - |
1573 | static void | - |
1574 | channel_before_prepare_select_rdynamic(struct ssh *ssh, Channel *c) | - |
1575 | { | - |
1576 | const u_char *p; | - |
1577 | u_int have, len; | - |
1578 | int r, ret; | - |
1579 | | - |
1580 | have = sshbuf_len(c->output); | - |
1581 | debug2("channel %d: pre_rdynamic: have %d", c->self, have); | - |
1582 | | - |
1583 | | - |
1584 | if (c->flags & 0x08TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1585 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_consume(c->output, have)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1586 | fatal("%s: channel %d: consume: %s", | - |
1587 | __func__, c->self, ssh_err(r)); | - |
1588 | } never executed: end of block | 0 |
1589 | rdynamic_close(ssh, c); | - |
1590 | return; never executed: return; | 0 |
1591 | } | - |
1592 | | - |
1593 | if (have < 3TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1594 | return; never executed: return; | 0 |
1595 | | - |
1596 | p = sshbuf_ptr(c->output); | - |
1597 | switch (p[0]) { | - |
1598 | case never executed: case 0x04: 0x04:never executed: case 0x04: | 0 |
1599 | | - |
1600 | ret = channel_decode_socks4(c, c->output, c->input); | - |
1601 | break; never executed: break; | 0 |
1602 | case never executed: case 0x05: 0x05:never executed: case 0x05: | 0 |
1603 | ret = channel_decode_socks5(c, c->output, c->input); | - |
1604 | break; never executed: break; | 0 |
1605 | default never executed: default: :never executed: default: | 0 |
1606 | ret = -1; | - |
1607 | break; never executed: break; | 0 |
1608 | } | - |
1609 | if (ret < 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1610 | rdynamic_close(ssh, c); | - |
1611 | } never executed: end of block else if (ret == 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1612 | debug2("channel %d: pre_rdynamic: need more", c->self); | - |
1613 | | - |
1614 | len = sshbuf_len(c->input); | - |
1615 | if (len > 0TRUE | never evaluated | FALSE | never evaluated |
&& len < c->remote_windowTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1616 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_start(ssh, 94)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1617 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->remote_id)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1618 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_stringb(ssh, c->input)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1619 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1620 | fatal("%s: channel %i: rdynamic: %s", __func__, | - |
1621 | c->self, ssh_err(r)); | - |
1622 | } never executed: end of block | 0 |
1623 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_consume(c->input, len)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1624 | fatal("%s: channel %d: consume: %s", | - |
1625 | __func__, c->self, ssh_err(r)); | - |
1626 | } never executed: end of block | 0 |
1627 | c->remote_window -= len; | - |
1628 | } never executed: end of block | 0 |
1629 | } never executed: end of block else if (rdynamic_connect_finish(ssh, c) < 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1630 | | - |
1631 | rdynamic_close(ssh, c); | - |
1632 | } never executed: end of block | 0 |
1633 | } never executed: end of block | 0 |
1634 | | - |
1635 | | - |
1636 | static void | - |
1637 | channel_post_x11_listener(struct ssh *ssh, Channel *c, | - |
1638 | fd_set *readset, fd_set *writeset) | - |
1639 | { | - |
1640 | Channel *nc; | - |
1641 | struct sockaddr_storage addr; | - |
1642 | int r, newsock, oerrno, remote_port; | - |
1643 | socklen_t addrlen; | - |
1644 | char buf[16384], *remote_ipaddr; | - |
1645 | | - |
1646 | if (!kludge_FD_ISSET(c->sock, readset)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1647 | return; never executed: return; | 0 |
1648 | | - |
1649 | debug("X11 connection requested."); | - |
1650 | addrlen = sizeof(addr); | - |
1651 | newsock = accept(c->sock, (struct sockaddr *)&addr, &addrlen); | - |
1652 | if (c->single_connectionTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1653 | oerrno = | - |
1654 | (*__errno_location ()) | - |
1655 | ; | - |
1656 | debug2("single_connection: closing X11 listener."); | - |
1657 | channel_close_fd(ssh, &c->sock); | - |
1658 | chan_mark_dead(ssh, c); | - |
1659 | | - |
1660 | (*__errno_location ()) | - |
1661 | = oerrno; | - |
1662 | } never executed: end of block | 0 |
1663 | if (newsock < 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1664 | if ( | - |
1665 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1666 | != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1667 | 4TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1668 | && | - |
1669 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1670 | != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1671 | 11TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1672 | && | - |
1673 | | - |
1674 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1675 | != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1676 | 103TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1677 | ) | - |
1678 | error("accept: %.100s", strerror( never executed: error("accept: %.100s", strerror( (*__errno_location ()) )); | 0 |
1679 | (*__errno_location ()) never executed: error("accept: %.100s", strerror( (*__errno_location ()) )); | 0 |
1680 | )); never executed: error("accept: %.100s", strerror( (*__errno_location ()) )); | 0 |
1681 | if ( | - |
1682 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1683 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1684 | 24TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1685 | || | - |
1686 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1687 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1688 | 23TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1689 | ) | - |
1690 | c->notbefore = monotime() + 1; never executed: c->notbefore = monotime() + 1; | 0 |
1691 | return; never executed: return; | 0 |
1692 | } | - |
1693 | set_nodelay(newsock); | - |
1694 | remote_ipaddr = get_peer_ipaddr(newsock); | - |
1695 | remote_port = get_peer_port(newsock); | - |
1696 | snprintf(buf, sizeof buf, "X11 connection from %.200s port %d", | - |
1697 | remote_ipaddr, remote_port); | - |
1698 | | - |
1699 | nc = channel_new(ssh, "accepted x11 socket", | - |
1700 | 3, newsock, newsock, -1, | - |
1701 | c->local_window_max, c->local_maxpacket, 0, buf, 1); | - |
1702 | open_preamble(ssh, __func__, nc, "x11"); | - |
1703 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh, remote_ipaddr)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1704 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, remote_port)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1705 | fatal("%s: channel %i: reply %s", __func__, | - |
1706 | c->self, ssh_err(r)); | - |
1707 | } never executed: end of block | 0 |
1708 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
1709 | fatal("%s: channel %i: send %s", __func__, c->self, ssh_err(r)); never executed: fatal("%s: channel %i: send %s", __func__, c->self, ssh_err(r)); | 0 |
1710 | free(remote_ipaddr); | - |
1711 | } never executed: end of block | 0 |
1712 | | - |
1713 | static void | - |
1714 | port_open_helper(struct ssh *ssh, Channel *c, char *rtype) | - |
1715 | { | - |
1716 | char *local_ipaddr = get_local_ipaddr(c->sock); | - |
1717 | int local_port = c->sock == -1TRUE | never evaluated | FALSE | never evaluated |
? 65536 : get_local_port(c->sock); | 0 |
1718 | char *remote_ipaddr = get_peer_ipaddr(c->sock); | - |
1719 | int remote_port = get_peer_port(c->sock); | - |
1720 | int r; | - |
1721 | | - |
1722 | if (remote_port == -1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1723 | | - |
1724 | free(remote_ipaddr); | - |
1725 | remote_ipaddr = xstrdup("127.0.0.1"); | - |
1726 | remote_port = 65535; | - |
1727 | } never executed: end of block | 0 |
1728 | | - |
1729 | free(c->remote_name); | - |
1730 | xasprintf(&c->remote_name, | - |
1731 | "%s: listening port %d for %.100s port %d, " | - |
1732 | "connect from %.200s port %d to %.100s port %d", | - |
1733 | rtype, c->listening_port, c->path, c->host_port, | - |
1734 | remote_ipaddr, remote_port, local_ipaddr, local_port); | - |
1735 | | - |
1736 | open_preamble(ssh, __func__, c, rtype); | - |
1737 | if ( | - |
1738 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1739 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1740 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1741 | "direct-tcpip"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1742 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1743 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1744 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1745 | "direct-tcpip"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1746 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1747 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1748 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1749 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1750 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1751 | "direct-tcpip"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1752 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1753 | "direct-tcpip"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1754 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1755 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1756 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1757 | "direct-tcpip"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1758 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1759 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1760 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1761 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1762 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1763 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1764 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1765 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1766 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1767 | "direct-tcpip"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1768 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1769 | "direct-tcpip"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1770 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1771 | "direct-tcpip"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1772 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1773 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1774 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1775 | "direct-tcpip"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1776 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1777 | "direct-tcpip"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1778 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1779 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1780 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1781 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1782 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1783 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1784 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( rtype ))[3] - __s2[3]); | 0 |
1785 | rtypeTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( rtype ))[3] - __s2[3]); | 0 |
1786 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1787 | "direct-tcpip"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1788 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1789 | "direct-tcpip"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1790 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1791 | "direct-tcpip"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1792 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1793 | "direct-tcpip"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1794 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1795 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1796 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1797 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1798 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1799 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1800 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1801 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1802 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1803 | "direct-tcpip"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1804 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1805 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1806 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1807 | "direct-tcpip"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1808 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1809 | "direct-tcpip"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1810 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1811 | "direct-tcpip"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1812 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "direct-tcpip" ))[3] - __s2[3]); | 0 |
1813 | "direct-tcpip"TRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "direct-tcpip" ))[3] - __s2[3]); | 0 |
1814 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1815 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1816 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1817 | "direct-tcpip"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1818 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1819 | == 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1820 | | - |
1821 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh, c->path)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
1822 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->host_port)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1823 | fatal("%s: channel %i: reply %s", __func__, | - |
1824 | c->self, ssh_err(r)); | - |
1825 | } never executed: end of block | 0 |
1826 | } never executed: end of block else if ( | 0 |
1827 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1828 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1829 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1830 | "direct-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1831 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1832 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1833 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1834 | "direct-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1835 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1836 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1837 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1838 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1839 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1840 | "direct-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1841 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1842 | "direct-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1843 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1844 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1845 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1846 | "direct-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1847 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1848 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1849 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1850 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1851 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1852 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1853 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1854 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1855 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1856 | "direct-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1857 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1858 | "direct-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1859 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1860 | "direct-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1861 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1862 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1863 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1864 | "direct-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1865 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1866 | "direct-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1867 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1868 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1869 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1870 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1871 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1872 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1873 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( rtype ))[3] - __s2[3]); | 0 |
1874 | rtypeTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( rtype ))[3] - __s2[3]); | 0 |
1875 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1876 | "direct-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1877 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1878 | "direct-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1879 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1880 | "direct-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1881 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1882 | "direct-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1883 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1884 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1885 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1886 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1887 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1888 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1889 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1890 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1891 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1892 | "direct-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1893 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1894 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1895 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1896 | "direct-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1897 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1898 | "direct-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1899 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1900 | "direct-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1901 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "direct-streamlocal@openssh.com" ))[3] - __s2[3]); | 0 |
1902 | "direct-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "direct-streamlocal@openssh.com" ))[3] - __s2[3]); | 0 |
1903 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1904 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1905 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1906 | "direct-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1907 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1908 | == 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1909 | | - |
1910 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh, c->path)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1911 | fatal("%s: channel %i: reply %s", __func__, | - |
1912 | c->self, ssh_err(r)); | - |
1913 | } never executed: end of block | 0 |
1914 | } never executed: end of block else if ( | 0 |
1915 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1916 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1917 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1918 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1919 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1920 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1921 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1922 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1923 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1924 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1925 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1926 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1927 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1928 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1929 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1930 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1931 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1932 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1933 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1934 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1935 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1936 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1937 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1938 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1939 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1940 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1941 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1942 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1943 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1944 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1945 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1946 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1947 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1948 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1949 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1950 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1951 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1952 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1953 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1954 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1955 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1956 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1957 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1958 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1959 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1960 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1961 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( rtype ))[3] - __s2[3]); | 0 |
1962 | rtypeTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( rtype ))[3] - __s2[3]); | 0 |
1963 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1964 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1965 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1966 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1967 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1968 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1969 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1970 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1971 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1972 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1973 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1974 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1975 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1976 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1977 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1978 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1979 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1980 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1981 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1982 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1983 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1984 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1985 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1986 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1987 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1988 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1989 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "forwarded-streamlocal@openssh.com" ))[3] - __s2[3]); | 0 |
1990 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "forwarded-streamlocal@openssh.com" ))[3] - __s2[3]); | 0 |
1991 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1992 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
1993 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1994 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1995 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1996 | == 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1997 | | - |
1998 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh, c->path)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
1999 | fatal("%s: channel %i: reply %s", __func__, | - |
2000 | c->self, ssh_err(r)); | - |
2001 | } never executed: end of block | 0 |
2002 | } never executed: end of block else { | 0 |
2003 | | - |
2004 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh, c->path)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
2005 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, local_port)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2006 | fatal("%s: channel %i: reply %s", __func__, | - |
2007 | c->self, ssh_err(r)); | - |
2008 | } never executed: end of block | 0 |
2009 | } never executed: end of block | 0 |
2010 | if ( | - |
2011 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2012 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
2013 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2014 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2015 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2016 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
2017 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2018 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2019 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2020 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
2021 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2022 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
2023 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2024 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2025 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2026 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2027 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2028 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
2029 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2030 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2031 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2032 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
2033 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2034 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
2035 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2036 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
2037 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2038 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
2039 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2040 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2041 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2042 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2043 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2044 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2045 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2046 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
2047 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2048 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2049 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2050 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2051 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2052 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
2053 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2054 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
2055 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2056 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
2057 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( rtype ))[3] - __s2[3]); | 0 |
2058 | rtypeTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( rtype ))[3] - __s2[3]); | 0 |
2059 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2060 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2061 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2062 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2063 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2064 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2065 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2066 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2067 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2068 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
2069 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2070 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
2071 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2072 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
2073 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2074 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
2075 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2076 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2077 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2078 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
2079 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2080 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2081 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2082 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2083 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2084 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2085 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "forwarded-streamlocal@openssh.com" ))[3] - __s2[3]); | 0 |
2086 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "forwarded-streamlocal@openssh.com" ))[3] - __s2[3]); | 0 |
2087 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2088 | rtypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
2089 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2090 | "forwarded-streamlocal@openssh.com"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2091 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2092 | == 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2093 | | - |
2094 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh, "")) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2095 | fatal("%s: channel %i: reply %s", __func__, | - |
2096 | c->self, ssh_err(r)); | - |
2097 | } never executed: end of block | 0 |
2098 | } never executed: end of block else { | 0 |
2099 | | - |
2100 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh, remote_ipaddr)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
2101 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, (u_int)remote_port)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2102 | fatal("%s: channel %i: reply %s", __func__, | - |
2103 | c->self, ssh_err(r)); | - |
2104 | } never executed: end of block | 0 |
2105 | } never executed: end of block | 0 |
2106 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2107 | fatal("%s: channel %i: send %s", __func__, c->self, ssh_err(r)); never executed: fatal("%s: channel %i: send %s", __func__, c->self, ssh_err(r)); | 0 |
2108 | free(remote_ipaddr); | - |
2109 | free(local_ipaddr); | - |
2110 | } never executed: end of block | 0 |
2111 | | - |
2112 | void | - |
2113 | channel_set_x11_refuse_time(struct ssh *ssh, u_int refuse_time) | - |
2114 | { | - |
2115 | ssh->chanctxt->x11_refuse_time = refuse_time; | - |
2116 | } never executed: end of block | 0 |
2117 | | - |
2118 | | - |
2119 | | - |
2120 | | - |
2121 | static void | - |
2122 | channel_post_port_listener(struct ssh *ssh, Channel *c, | - |
2123 | fd_set *readset, fd_set *writeset) | - |
2124 | { | - |
2125 | Channel *nc; | - |
2126 | struct sockaddr_storage addr; | - |
2127 | int newsock, nextstate; | - |
2128 | socklen_t addrlen; | - |
2129 | char *rtype; | - |
2130 | | - |
2131 | if (!kludge_FD_ISSET(c->sock, readset)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2132 | return; never executed: return; | 0 |
2133 | | - |
2134 | debug("Connection to port %d forwarding to %.100s port %d requested.", | - |
2135 | c->listening_port, c->path, c->host_port); | - |
2136 | | - |
2137 | if (c->type == 11TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2138 | nextstate = 3; | - |
2139 | rtype = "forwarded-tcpip"; | - |
2140 | } never executed: end of block else if (c->type == 19TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2141 | nextstate = 3; | - |
2142 | rtype = "forwarded-streamlocal@openssh.com"; | - |
2143 | } never executed: end of block else if (c->host_port == -2TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2144 | nextstate = 3; | - |
2145 | rtype = "direct-streamlocal@openssh.com"; | - |
2146 | } never executed: end of block else if (c->host_port == 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2147 | nextstate = 13; | - |
2148 | rtype = "dynamic-tcpip"; | - |
2149 | } never executed: end of block else { | 0 |
2150 | nextstate = 3; | - |
2151 | rtype = "direct-tcpip"; | - |
2152 | } never executed: end of block | 0 |
2153 | | - |
2154 | addrlen = sizeof(addr); | - |
2155 | newsock = accept(c->sock, (struct sockaddr *)&addr, &addrlen); | - |
2156 | if (newsock < 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2157 | if ( | - |
2158 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2159 | != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2160 | 4TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2161 | && | - |
2162 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2163 | != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2164 | 11TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2165 | && | - |
2166 | | - |
2167 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2168 | != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2169 | 103TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2170 | ) | - |
2171 | error("accept: %.100s", strerror( never executed: error("accept: %.100s", strerror( (*__errno_location ()) )); | 0 |
2172 | (*__errno_location ()) never executed: error("accept: %.100s", strerror( (*__errno_location ()) )); | 0 |
2173 | )); never executed: error("accept: %.100s", strerror( (*__errno_location ()) )); | 0 |
2174 | if ( | - |
2175 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2176 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2177 | 24TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2178 | || | - |
2179 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2180 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2181 | 23TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2182 | ) | - |
2183 | c->notbefore = monotime() + 1; never executed: c->notbefore = monotime() + 1; | 0 |
2184 | return; never executed: return; | 0 |
2185 | } | - |
2186 | if (c->host_port != -2TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2187 | set_nodelay(newsock); never executed: set_nodelay(newsock); | 0 |
2188 | nc = channel_new(ssh, rtype, nextstate, newsock, newsock, -1, | - |
2189 | c->local_window_max, c->local_maxpacket, 0, rtype, 1); | - |
2190 | nc->listening_port = c->listening_port; | - |
2191 | nc->host_port = c->host_port; | - |
2192 | if (c->path != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2193 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2194 | ) | - |
2195 | nc->path = xstrdup(c->path); never executed: nc->path = xstrdup(c->path); | 0 |
2196 | | - |
2197 | if (nextstate != 13TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2198 | port_open_helper(ssh, nc, rtype); never executed: port_open_helper(ssh, nc, rtype); | 0 |
2199 | } never executed: end of block | 0 |
2200 | | - |
2201 | | - |
2202 | | - |
2203 | | - |
2204 | | - |
2205 | static void | - |
2206 | channel_post_auth_listener(struct ssh *ssh, Channel *c, | - |
2207 | fd_set *readset, fd_set *writeset) | - |
2208 | { | - |
2209 | Channel *nc; | - |
2210 | int r, newsock; | - |
2211 | struct sockaddr_storage addr; | - |
2212 | socklen_t addrlen; | - |
2213 | | - |
2214 | if (!kludge_FD_ISSET(c->sock, readset)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2215 | return; never executed: return; | 0 |
2216 | | - |
2217 | addrlen = sizeof(addr); | - |
2218 | newsock = accept(c->sock, (struct sockaddr *)&addr, &addrlen); | - |
2219 | if (newsock < 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2220 | error("accept from auth socket: %.100s", strerror( | - |
2221 | (*__errno_location ()) | - |
2222 | )); | - |
2223 | if ( | - |
2224 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2225 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2226 | 24TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2227 | || | - |
2228 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2229 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2230 | 23TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2231 | ) | - |
2232 | c->notbefore = monotime() + 1; never executed: c->notbefore = monotime() + 1; | 0 |
2233 | return; never executed: return; | 0 |
2234 | } | - |
2235 | nc = channel_new(ssh, "accepted auth socket", | - |
2236 | 3, newsock, newsock, -1, | - |
2237 | c->local_window_max, c->local_maxpacket, | - |
2238 | 0, "accepted auth socket", 1); | - |
2239 | open_preamble(ssh, __func__, nc, "auth-agent@openssh.com"); | - |
2240 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2241 | fatal("%s: channel %i: %s", __func__, c->self, ssh_err(r)); never executed: fatal("%s: channel %i: %s", __func__, c->self, ssh_err(r)); | 0 |
2242 | } never executed: end of block | 0 |
2243 | | - |
2244 | static void | - |
2245 | channel_post_connecting(struct ssh *ssh, Channel *c, | - |
2246 | fd_set *readset, fd_set *writeset) | - |
2247 | { | - |
2248 | int err = 0, sock, isopen, r; | - |
2249 | socklen_t sz = sizeof(err); | - |
2250 | | - |
2251 | if (!kludge_FD_ISSET(c->sock, writeset)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2252 | return; never executed: return; | 0 |
2253 | if (!c->have_remote_idTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2254 | fatal(":%s: channel %d: no remote id", __func__, c->self); never executed: fatal(":%s: channel %d: no remote id", __func__, c->self); | 0 |
2255 | | - |
2256 | isopen = (c->type == 22); | - |
2257 | if (getsockopt(c->sock, TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2258 | 1TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2259 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2260 | 4TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2261 | , &err, &sz) < 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2262 | err = | - |
2263 | (*__errno_location ()) | - |
2264 | ; | - |
2265 | error("getsockopt SO_ERROR failed"); | - |
2266 | } never executed: end of block | 0 |
2267 | if (err == 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2268 | debug("channel %d: connected to %s port %d", | - |
2269 | c->self, c->connect_ctx.host, c->connect_ctx.port); | - |
2270 | channel_connect_ctx_free(&c->connect_ctx); | - |
2271 | c->type = 4; | - |
2272 | if (isopenTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2273 | | - |
2274 | } never executed: end of block else { | 0 |
2275 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_start(ssh,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2276 | 91)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
2277 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->remote_id)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
2278 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->self)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
2279 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->local_window)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
2280 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->local_maxpacket))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2281 | != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2282 | fatal("%s: channel %i: confirm: %s", __func__, never executed: fatal("%s: channel %i: confirm: %s", __func__, c->self, ssh_err(r)); | 0 |
2283 | c->self, ssh_err(r)); never executed: fatal("%s: channel %i: confirm: %s", __func__, c->self, ssh_err(r)); | 0 |
2284 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2285 | fatal("%s: channel %i: %s", __func__, c->self, never executed: fatal("%s: channel %i: %s", __func__, c->self, ssh_err(r)); | 0 |
2286 | ssh_err(r)); never executed: fatal("%s: channel %i: %s", __func__, c->self, ssh_err(r)); | 0 |
2287 | } never executed: end of block | 0 |
2288 | } else { | - |
2289 | debug("channel %d: connection failed: %s", | - |
2290 | c->self, strerror(err)); | - |
2291 | | - |
2292 | if ((TRUE | never evaluated | FALSE | never evaluated |
sock = connect_next(&c->connect_ctx)) > 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2293 | close(c->sock); | - |
2294 | c->sock = c->rfd = c->wfd = sock; | - |
2295 | channel_find_maxfd(ssh->chanctxt); | - |
2296 | return; never executed: return; | 0 |
2297 | } | - |
2298 | | - |
2299 | error("connect_to %.100s port %d: failed.", | - |
2300 | c->connect_ctx.host, c->connect_ctx.port); | - |
2301 | channel_connect_ctx_free(&c->connect_ctx); | - |
2302 | if (isopenTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2303 | rdynamic_close(ssh, c); | - |
2304 | } never executed: end of block else { | 0 |
2305 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_start(ssh,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2306 | 92)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
2307 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->remote_id)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
2308 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2309 | 2)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
2310 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh, strerror(err))) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
2311 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh, "")) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2312 | fatal("%s: channel %i: failure: %s", __func__, | - |
2313 | c->self, ssh_err(r)); | - |
2314 | } never executed: end of block | 0 |
2315 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2316 | fatal("%s: channel %i: %s", __func__, c->self, never executed: fatal("%s: channel %i: %s", __func__, c->self, ssh_err(r)); | 0 |
2317 | ssh_err(r)); never executed: fatal("%s: channel %i: %s", __func__, c->self, ssh_err(r)); | 0 |
2318 | chan_mark_dead(ssh, c); | - |
2319 | } never executed: end of block | 0 |
2320 | } | - |
2321 | } | - |
2322 | | - |
2323 | static int | - |
2324 | channel_handle_rfd(struct ssh *ssh, Channel *c, | - |
2325 | fd_set *readset, fd_set *writeset) | - |
2326 | { | - |
2327 | char buf[(16*1024)]; | - |
2328 | ssize_t len; | - |
2329 | int r, force; | - |
2330 | | - |
2331 | force = c->isattyTRUE | never evaluated | FALSE | never evaluated |
&& c->detach_closeTRUE | never evaluated | FALSE | never evaluated |
&& c->istate != 3TRUE | never evaluated | FALSE | never evaluated |
; | 0 |
2332 | | - |
2333 | if (c->rfd == -1TRUE | never evaluated | FALSE | never evaluated |
|| (!forceTRUE | never evaluated | FALSE | never evaluated |
&& !kludge_FD_ISSET(c->rfd, readset)TRUE | never evaluated | FALSE | never evaluated |
)) | 0 |
2334 | return never executed: return 1; 1;never executed: return 1; | 0 |
2335 | | - |
2336 | | - |
2337 | (*__errno_location ()) | - |
2338 | = 0; | - |
2339 | len = read(c->rfd, buf, sizeof(buf)); | - |
2340 | if (len < 0TRUE | never evaluated | FALSE | never evaluated |
&& ( | 0 |
2341 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2342 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2343 | 4TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2344 | || | - |
2345 | (( | - |
2346 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2347 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2348 | 11TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2349 | || | - |
2350 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2351 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2352 | 11TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2353 | ) && !forceTRUE | never evaluated | FALSE | never evaluated |
))) | 0 |
2354 | return never executed: return 1; 1;never executed: return 1; | 0 |
2355 | | - |
2356 | if (len <= 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2357 | | - |
2358 | | - |
2359 | | - |
2360 | | - |
2361 | debug2("channel %d: read<=0 rfd %d len %zd", | - |
2362 | c->self, c->rfd, len); | - |
2363 | if (c->type != 4TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2364 | debug2("channel %d: not open", c->self); | - |
2365 | chan_mark_dead(ssh, c); | - |
2366 | return never executed: return -1; -1;never executed: return -1; | 0 |
2367 | } else { | - |
2368 | chan_read_failed(ssh, c); | - |
2369 | } never executed: end of block | 0 |
2370 | return never executed: return -1; -1;never executed: return -1; | 0 |
2371 | } | - |
2372 | if (c->input_filter != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2373 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2374 | ) { | - |
2375 | if (c->input_filter(ssh, c, buf, len) == -1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2376 | debug2("channel %d: filter stops", c->self); | - |
2377 | chan_read_failed(ssh, c); | - |
2378 | } never executed: end of block | 0 |
2379 | } never executed: end of block else if (c->datagramTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2380 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put_string(c->input, buf, len)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2381 | fatal("%s: channel %d: put datagram: %s", __func__, never executed: fatal("%s: channel %d: put datagram: %s", __func__, c->self, ssh_err(r)); | 0 |
2382 | c->self, ssh_err(r)); never executed: fatal("%s: channel %d: put datagram: %s", __func__, c->self, ssh_err(r)); | 0 |
2383 | } never executed: end of block else if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put(c->input, buf, len)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2384 | fatal("%s: channel %d: put data: %s", __func__, | - |
2385 | c->self, ssh_err(r)); | - |
2386 | } never executed: end of block | 0 |
2387 | return never executed: return 1; 1;never executed: return 1; | 0 |
2388 | } | - |
2389 | | - |
2390 | static int | - |
2391 | channel_handle_wfd(struct ssh *ssh, Channel *c, | - |
2392 | fd_set *readset, fd_set *writeset) | - |
2393 | { | - |
2394 | struct termios tio; | - |
2395 | u_char *data = | - |
2396 | ((void *)0) | - |
2397 | , *buf; | - |
2398 | size_t dlen, olen = 0; | - |
2399 | int r, len; | - |
2400 | | - |
2401 | if (c->wfd == -1TRUE | never evaluated | FALSE | never evaluated |
|| !kludge_FD_ISSET(c->wfd, writeset)TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
2402 | sshbuf_len(c->output) == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2403 | return never executed: return 1; 1;never executed: return 1; | 0 |
2404 | | - |
2405 | | - |
2406 | olen = sshbuf_len(c->output); | - |
2407 | if (c->output_filter != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2408 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2409 | ) { | - |
2410 | if ((TRUE | never evaluated | FALSE | never evaluated |
buf = c->output_filter(ssh, c, &data, &dlen)) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2411 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2412 | ) { | - |
2413 | debug2("channel %d: filter stops", c->self); | - |
2414 | if (c->type != 4TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2415 | chan_mark_dead(ssh, c); never executed: chan_mark_dead(ssh, c); | 0 |
2416 | else | - |
2417 | chan_write_failed(ssh, c); never executed: chan_write_failed(ssh, c); | 0 |
2418 | return never executed: return -1; -1;never executed: return -1; | 0 |
2419 | } | - |
2420 | } never executed: end of block else if (c->datagramTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2421 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_get_string(c->output, &data, &dlen)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2422 | fatal("%s: channel %d: get datagram: %s", __func__, never executed: fatal("%s: channel %d: get datagram: %s", __func__, c->self, ssh_err(r)); | 0 |
2423 | c->self, ssh_err(r)); never executed: fatal("%s: channel %d: get datagram: %s", __func__, c->self, ssh_err(r)); | 0 |
2424 | buf = data; | - |
2425 | } never executed: end of block else { | 0 |
2426 | buf = data = sshbuf_mutable_ptr(c->output); | - |
2427 | dlen = sshbuf_len(c->output); | - |
2428 | } never executed: end of block | 0 |
2429 | | - |
2430 | if (c->datagramTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2431 | | - |
2432 | len = write(c->wfd, buf, dlen); | - |
2433 | free(data); | - |
2434 | if (len < 0TRUE | never evaluated | FALSE | never evaluated |
&& ( | 0 |
2435 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2436 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2437 | 4TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2438 | || | - |
2439 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2440 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2441 | 11TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2442 | || | - |
2443 | | - |
2444 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2445 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2446 | 11TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2447 | )) | - |
2448 | return never executed: return 1; 1;never executed: return 1; | 0 |
2449 | if (len <= 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2450 | goto never executed: goto write_fail; write_fail;never executed: goto write_fail; | 0 |
2451 | goto never executed: goto out; out;never executed: goto out; | 0 |
2452 | } | - |
2453 | | - |
2454 | | - |
2455 | | - |
2456 | | - |
2457 | | - |
2458 | | - |
2459 | | - |
2460 | len = write(c->wfd, buf, dlen); | - |
2461 | if (len < 0TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
2462 | ( | - |
2463 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2464 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2465 | 4TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2466 | || | - |
2467 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2468 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2469 | 11TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2470 | || | - |
2471 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2472 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2473 | 11TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2474 | )) | - |
2475 | return never executed: return 1; 1;never executed: return 1; | 0 |
2476 | if (len <= 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2477 | write_fail: | - |
2478 | if (c->type != 4TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2479 | debug2("channel %d: not open", c->self); | - |
2480 | chan_mark_dead(ssh, c); | - |
2481 | return never executed: return -1; -1;never executed: return -1; | 0 |
2482 | } else { | - |
2483 | chan_write_failed(ssh, c); | - |
2484 | } never executed: end of block | 0 |
2485 | return never executed: return -1; -1;never executed: return -1; | 0 |
2486 | } | - |
2487 | | - |
2488 | if (c->isattyTRUE | never evaluated | FALSE | never evaluated |
&& dlen >= 1TRUE | never evaluated | FALSE | never evaluated |
&& buf[0] != '\r'TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2489 | if (tcgetattr(c->wfd, &tio) == 0TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
2490 | !(tio.c_lflag & TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2491 | 0000010TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2492 | )TRUE | never evaluated | FALSE | never evaluated |
&& (TRUE | never evaluated | FALSE | never evaluated |
tio.c_lflag & TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2493 | 0000002TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2494 | )TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2495 | | - |
2496 | | - |
2497 | | - |
2498 | | - |
2499 | | - |
2500 | | - |
2501 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_msg_ignore(ssh, 4+len)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
2502 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2503 | fatal("%s: channel %d: ignore: %s", never executed: fatal("%s: channel %d: ignore: %s", __func__, c->self, ssh_err(r)); | 0 |
2504 | __func__, c->self, ssh_err(r)); never executed: fatal("%s: channel %d: ignore: %s", __func__, c->self, ssh_err(r)); | 0 |
2505 | } never executed: end of block | 0 |
2506 | } never executed: end of block | 0 |
2507 | | - |
2508 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_consume(c->output, len)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2509 | fatal("%s: channel %d: consume: %s", | - |
2510 | __func__, c->self, ssh_err(r)); | - |
2511 | } never executed: end of block | 0 |
2512 | out: code before this statement never executed: out: | 0 |
2513 | c->local_consumed += olen - sshbuf_len(c->output); | - |
2514 | | - |
2515 | return never executed: return 1; 1;never executed: return 1; | 0 |
2516 | } | - |
2517 | | - |
2518 | static int | - |
2519 | channel_handle_efd_write(struct ssh *ssh, Channel *c, | - |
2520 | fd_set *readset, fd_set *writeset) | - |
2521 | { | - |
2522 | int r; | - |
2523 | ssize_t len; | - |
2524 | | - |
2525 | if (!kludge_FD_ISSET(c->efd, writeset)TRUE | never evaluated | FALSE | never evaluated |
|| sshbuf_len(c->extended) == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2526 | return never executed: return 1; 1;never executed: return 1; | 0 |
2527 | | - |
2528 | len = write(c->efd, sshbuf_ptr(c->extended), | - |
2529 | sshbuf_len(c->extended)); | - |
2530 | debug2("channel %d: written %zd to efd %d", c->self, len, c->efd); | - |
2531 | if (len < 0TRUE | never evaluated | FALSE | never evaluated |
&& ( | 0 |
2532 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2533 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2534 | 4TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2535 | || | - |
2536 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2537 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2538 | 11TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2539 | || | - |
2540 | | - |
2541 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2542 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2543 | 11TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2544 | )) | - |
2545 | return never executed: return 1; 1;never executed: return 1; | 0 |
2546 | if (len <= 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2547 | debug2("channel %d: closing write-efd %d", c->self, c->efd); | - |
2548 | channel_close_fd(ssh, &c->efd); | - |
2549 | } never executed: end of block else { | 0 |
2550 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_consume(c->extended, len)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2551 | fatal("%s: channel %d: consume: %s", | - |
2552 | __func__, c->self, ssh_err(r)); | - |
2553 | } never executed: end of block | 0 |
2554 | c->local_consumed += len; | - |
2555 | } never executed: end of block | 0 |
2556 | return never executed: return 1; 1;never executed: return 1; | 0 |
2557 | } | - |
2558 | | - |
2559 | static int | - |
2560 | channel_handle_efd_read(struct ssh *ssh, Channel *c, | - |
2561 | fd_set *readset, fd_set *writeset) | - |
2562 | { | - |
2563 | char buf[(16*1024)]; | - |
2564 | int r; | - |
2565 | ssize_t len; | - |
2566 | | - |
2567 | if (!c->detach_closeTRUE | never evaluated | FALSE | never evaluated |
&& !kludge_FD_ISSET(c->efd, readset)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2568 | return never executed: return 1; 1;never executed: return 1; | 0 |
2569 | | - |
2570 | len = read(c->efd, buf, sizeof(buf)); | - |
2571 | debug2("channel %d: read %zd from efd %d", c->self, len, c->efd); | - |
2572 | if (len < 0TRUE | never evaluated | FALSE | never evaluated |
&& ( | 0 |
2573 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2574 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2575 | 4TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2576 | || (( | - |
2577 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2578 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2579 | 11TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2580 | || | - |
2581 | | - |
2582 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2583 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2584 | 11TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2585 | ) && !c->detach_closeTRUE | never evaluated | FALSE | never evaluated |
))) | 0 |
2586 | return never executed: return 1; 1;never executed: return 1; | 0 |
2587 | if (len <= 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2588 | debug2("channel %d: closing read-efd %d", | - |
2589 | c->self, c->efd); | - |
2590 | channel_close_fd(ssh, &c->efd); | - |
2591 | } never executed: end of block else { | 0 |
2592 | if (c->extended_usage == 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2593 | debug3("channel %d: discard efd", | - |
2594 | c->self); | - |
2595 | } never executed: end of block else if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put(c->extended, buf, len)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2596 | fatal("%s: channel %d: append: %s", | - |
2597 | __func__, c->self, ssh_err(r)); | - |
2598 | } never executed: end of block | 0 |
2599 | } never executed: end of block | 0 |
2600 | return never executed: return 1; 1;never executed: return 1; | 0 |
2601 | } | - |
2602 | | - |
2603 | static int | - |
2604 | channel_handle_efd(struct ssh *ssh, Channel *c, | - |
2605 | fd_set *readset, fd_set *writeset) | - |
2606 | { | - |
2607 | if (c->efd == -1TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2608 | return never executed: return 1; 1;never executed: return 1; | 0 |
2609 | | - |
2610 | | - |
2611 | | - |
2612 | if (c->extended_usage == 2TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2613 | return never executed: return channel_handle_efd_write(ssh, c, readset, writeset); channel_handle_efd_write(ssh, c, readset, writeset);never executed: return channel_handle_efd_write(ssh, c, readset, writeset); | 0 |
2614 | else if (c->extended_usage == 1TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
2615 | c->extended_usage == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2616 | return never executed: return channel_handle_efd_read(ssh, c, readset, writeset); channel_handle_efd_read(ssh, c, readset, writeset);never executed: return channel_handle_efd_read(ssh, c, readset, writeset); | 0 |
2617 | | - |
2618 | return never executed: return 1; 1;never executed: return 1; | 0 |
2619 | } | - |
2620 | | - |
2621 | static int | - |
2622 | channel_check_window(struct ssh *ssh, Channel *c) | - |
2623 | { | - |
2624 | int r; | - |
2625 | | - |
2626 | if (c->type == 4TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
2627 | !(c->flags & (0x01|0x02))TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
2628 | ((TRUE | never evaluated | FALSE | never evaluated |
c->local_window_max - c->local_window >TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2629 | c->local_maxpacket*3)TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
2630 | c->local_window < c->local_window_max/2TRUE | never evaluated | FALSE | never evaluated |
) && | 0 |
2631 | c->local_consumed > 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2632 | if (!c->have_remote_idTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2633 | fatal(":%s: channel %d: no remote id", never executed: fatal(":%s: channel %d: no remote id", __func__, c->self); | 0 |
2634 | __func__, c->self); never executed: fatal(":%s: channel %d: no remote id", __func__, c->self); | 0 |
2635 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_start(ssh,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2636 | 93)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
2637 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->remote_id)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
2638 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->local_consumed)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
2639 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2640 | fatal("%s: channel %i: %s", __func__, | - |
2641 | c->self, ssh_err(r)); | - |
2642 | } never executed: end of block | 0 |
2643 | debug2("channel %d: window %d sent adjust %d", | - |
2644 | c->self, c->local_window, | - |
2645 | c->local_consumed); | - |
2646 | c->local_window += c->local_consumed; | - |
2647 | c->local_consumed = 0; | - |
2648 | } never executed: end of block | 0 |
2649 | return never executed: return 1; 1;never executed: return 1; | 0 |
2650 | } | - |
2651 | | - |
2652 | static void | - |
2653 | channel_post_open(struct ssh *ssh, Channel *c, | - |
2654 | fd_set *readset, fd_set *writeset) | - |
2655 | { | - |
2656 | channel_handle_rfd(ssh, c, readset, writeset); | - |
2657 | channel_handle_wfd(ssh, c, readset, writeset); | - |
2658 | channel_handle_efd(ssh, c, readset, writeset); | - |
2659 | channel_check_window(ssh, c); | - |
2660 | } never executed: end of block | 0 |
2661 | | - |
2662 | static u_int | - |
2663 | read_mux(struct ssh *ssh, Channel *c, u_int need) | - |
2664 | { | - |
2665 | char buf[(16*1024)]; | - |
2666 | ssize_t len; | - |
2667 | u_int rlen; | - |
2668 | int r; | - |
2669 | | - |
2670 | if (sshbuf_len(c->input) < needTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2671 | rlen = need - sshbuf_len(c->input); | - |
2672 | len = read(c->rfd, buf, (((rlen) < ((16*1024))) ? (rlen) : ((16*1024)))); | - |
2673 | if (len < 0TRUE | never evaluated | FALSE | never evaluated |
&& ( | 0 |
2674 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2675 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2676 | 4TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2677 | || | - |
2678 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2679 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2680 | 11TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2681 | )) | - |
2682 | return never executed: return sshbuf_len(c->input); sshbuf_len(c->input);never executed: return sshbuf_len(c->input); | 0 |
2683 | if (len <= 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2684 | debug2("channel %d: ctl read<=0 rfd %d len %zd", | - |
2685 | c->self, c->rfd, len); | - |
2686 | chan_read_failed(ssh, c); | - |
2687 | return never executed: return 0; 0;never executed: return 0; | 0 |
2688 | } else if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put(c->input, buf, len)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2689 | fatal("%s: channel %d: append: %s", | - |
2690 | __func__, c->self, ssh_err(r)); | - |
2691 | } never executed: end of block | 0 |
2692 | } never executed: end of block | 0 |
2693 | return never executed: return sshbuf_len(c->input); sshbuf_len(c->input);never executed: return sshbuf_len(c->input); | 0 |
2694 | } | - |
2695 | | - |
2696 | static void | - |
2697 | channel_post_mux_client_read(struct ssh *ssh, Channel *c, | - |
2698 | fd_set *readset, fd_set *writeset) | - |
2699 | { | - |
2700 | u_int need; | - |
2701 | | - |
2702 | if (c->rfd == -1TRUE | never evaluated | FALSE | never evaluated |
|| !kludge_FD_ISSET(c->rfd, readset)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2703 | return; never executed: return; | 0 |
2704 | if (c->istate != 0TRUE | never evaluated | FALSE | never evaluated |
&& c->istate != 1TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2705 | return; never executed: return; | 0 |
2706 | if (c->mux_pauseTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2707 | return; never executed: return; | 0 |
2708 | | - |
2709 | | - |
2710 | | - |
2711 | | - |
2712 | | - |
2713 | if (read_mux(ssh, c, 4) < 4TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2714 | return; never executed: return; | 0 |
2715 | | - |
2716 | need = (((u_int32_t)(((const u_char *)(sshbuf_ptr(c->input)))[0]) << 24) | ((u_int32_t)(((const u_char *)(sshbuf_ptr(c->input)))[1]) << 16) | ((u_int32_t)(((const u_char *)(sshbuf_ptr(c->input)))[2]) << 8) | (u_int32_t)(((const u_char *)(sshbuf_ptr(c->input)))[3])); | - |
2717 | | - |
2718 | if (need > (256 * 1024)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2719 | debug2("channel %d: packet too big %u > %u", | - |
2720 | c->self, (256 * 1024), need); | - |
2721 | chan_rcvd_oclose(ssh, c); | - |
2722 | return; never executed: return; | 0 |
2723 | } | - |
2724 | if (read_mux(ssh, c, need + 4) < need + 4TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2725 | return; never executed: return; | 0 |
2726 | if (c->mux_rcb(ssh, c) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2727 | debug("channel %d: mux_rcb failed", c->self); | - |
2728 | chan_mark_dead(ssh, c); | - |
2729 | return; never executed: return; | 0 |
2730 | } | - |
2731 | } never executed: end of block | 0 |
2732 | | - |
2733 | static void | - |
2734 | channel_post_mux_client_write(struct ssh *ssh, Channel *c, | - |
2735 | fd_set *readset, fd_set *writeset) | - |
2736 | { | - |
2737 | ssize_t len; | - |
2738 | int r; | - |
2739 | | - |
2740 | if (c->wfd == -1TRUE | never evaluated | FALSE | never evaluated |
|| !kludge_FD_ISSET(c->wfd, writeset)TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
2741 | sshbuf_len(c->output) == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2742 | return; never executed: return; | 0 |
2743 | | - |
2744 | len = write(c->wfd, sshbuf_ptr(c->output), sshbuf_len(c->output)); | - |
2745 | if (len < 0TRUE | never evaluated | FALSE | never evaluated |
&& ( | 0 |
2746 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2747 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2748 | 4TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2749 | || | - |
2750 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2751 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2752 | 11TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2753 | )) | - |
2754 | return; never executed: return; | 0 |
2755 | if (len <= 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2756 | chan_mark_dead(ssh, c); | - |
2757 | return; never executed: return; | 0 |
2758 | } | - |
2759 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_consume(c->output, len)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2760 | fatal("%s: channel %d: consume: %s", __func__, never executed: fatal("%s: channel %d: consume: %s", __func__, c->self, ssh_err(r)); | 0 |
2761 | c->self, ssh_err(r)); never executed: fatal("%s: channel %d: consume: %s", __func__, c->self, ssh_err(r)); | 0 |
2762 | } never executed: end of block | 0 |
2763 | | - |
2764 | static void | - |
2765 | channel_post_mux_client(struct ssh *ssh, Channel *c, | - |
2766 | fd_set *readset, fd_set *writeset) | - |
2767 | { | - |
2768 | channel_post_mux_client_read(ssh, c, readset, writeset); | - |
2769 | channel_post_mux_client_write(ssh, c, readset, writeset); | - |
2770 | } never executed: end of block | 0 |
2771 | | - |
2772 | static void | - |
2773 | channel_post_mux_listener(struct ssh *ssh, Channel *c, | - |
2774 | fd_set *readset, fd_set *writeset) | - |
2775 | { | - |
2776 | Channel *nc; | - |
2777 | struct sockaddr_storage addr; | - |
2778 | socklen_t addrlen; | - |
2779 | int newsock; | - |
2780 | uid_t euid; | - |
2781 | gid_t egid; | - |
2782 | | - |
2783 | if (!kludge_FD_ISSET(c->sock, readset)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2784 | return; never executed: return; | 0 |
2785 | | - |
2786 | debug("multiplexing control connection"); | - |
2787 | | - |
2788 | | - |
2789 | | - |
2790 | | - |
2791 | memset(&addr, 0, sizeof(addr)); | - |
2792 | addrlen = sizeof(addr); | - |
2793 | if ((TRUE | never evaluated | FALSE | never evaluated |
newsock = accept(c->sock, (struct sockaddr*)&addr,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2794 | &addrlen)) == -1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2795 | error("%s accept: %s", __func__, strerror( | - |
2796 | (*__errno_location ()) | - |
2797 | )); | - |
2798 | if ( | - |
2799 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2800 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2801 | 24TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2802 | || | - |
2803 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2804 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2805 | 23TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2806 | ) | - |
2807 | c->notbefore = monotime() + 1; never executed: c->notbefore = monotime() + 1; | 0 |
2808 | return; never executed: return; | 0 |
2809 | } | - |
2810 | | - |
2811 | if (getpeereid(newsock, &euid, &egid) < 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2812 | error("%s getpeereid failed: %s", __func__, | - |
2813 | strerror( | - |
2814 | (*__errno_location ()) | - |
2815 | )); | - |
2816 | close(newsock); | - |
2817 | return; never executed: return; | 0 |
2818 | } | - |
2819 | if ((TRUE | never evaluated | FALSE | never evaluated |
euid != 0)TRUE | never evaluated | FALSE | never evaluated |
&& (TRUE | never evaluated | FALSE | never evaluated |
getuid() != euid)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2820 | error("multiplex uid mismatch: peer euid %u != uid %u", | - |
2821 | (u_int)euid, (u_int)getuid()); | - |
2822 | close(newsock); | - |
2823 | return; never executed: return; | 0 |
2824 | } | - |
2825 | nc = channel_new(ssh, "multiplex client", 16, | - |
2826 | newsock, newsock, -1, c->local_window_max, | - |
2827 | c->local_maxpacket, 0, "mux-control", 1); | - |
2828 | nc->mux_rcb = c->mux_rcb; | - |
2829 | debug3("%s: new mux channel %d fd %d", __func__, nc->self, nc->sock); | - |
2830 | | - |
2831 | nc->mux_rcb(ssh, nc); | - |
2832 | | - |
2833 | nc->flags |= 0x10; | - |
2834 | } never executed: end of block | 0 |
2835 | | - |
2836 | static void | - |
2837 | channel_handler_init(struct ssh_channels *sc) | - |
2838 | { | - |
2839 | chan_fn **pre, **post; | - |
2840 | | - |
2841 | if ((TRUE | never evaluated | FALSE | never evaluated |
pre = calloc(23, sizeof(*pre))) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2842 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2843 | || | - |
2844 | (TRUE | never evaluated | FALSE | never evaluated |
post = calloc(23, sizeof(*post))) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2845 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2846 | ) | - |
2847 | fatal("%s: allocation failed", __func__); never executed: fatal("%s: allocation failed", __func__); | 0 |
2848 | | - |
2849 | pre[4] = &channel_pre_open; | - |
2850 | pre[7] = &channel_pre_x11_open; | - |
2851 | pre[2] = &channel_pre_listener; | - |
2852 | pre[11] = &channel_pre_listener; | - |
2853 | pre[18] = &channel_pre_listener; | - |
2854 | pre[19] = &channel_pre_listener; | - |
2855 | pre[1] = &channel_pre_listener; | - |
2856 | pre[6] = &channel_pre_listener; | - |
2857 | pre[12] = &channel_pre_connecting; | - |
2858 | pre[13] = &channel_pre_dynamic; | - |
2859 | pre[22] = &channel_pre_connecting; | - |
2860 | pre[15] = &channel_pre_listener; | - |
2861 | pre[16] = &channel_pre_mux_client; | - |
2862 | | - |
2863 | post[4] = &channel_post_open; | - |
2864 | post[2] = &channel_post_port_listener; | - |
2865 | post[11] = &channel_post_port_listener; | - |
2866 | post[18] = &channel_post_port_listener; | - |
2867 | post[19] = &channel_post_port_listener; | - |
2868 | post[1] = &channel_post_x11_listener; | - |
2869 | post[6] = &channel_post_auth_listener; | - |
2870 | post[12] = &channel_post_connecting; | - |
2871 | post[13] = &channel_post_open; | - |
2872 | post[22] = &channel_post_connecting; | - |
2873 | post[15] = &channel_post_mux_listener; | - |
2874 | post[16] = &channel_post_mux_client; | - |
2875 | | - |
2876 | sc->channel_pre = pre; | - |
2877 | sc->channel_post = post; | - |
2878 | } never executed: end of block | 0 |
2879 | | - |
2880 | | - |
2881 | static void | - |
2882 | channel_garbage_collect(struct ssh *ssh, Channel *c) | - |
2883 | { | - |
2884 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2885 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2886 | ) | - |
2887 | return; never executed: return; | 0 |
2888 | if (c->detach_user != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2889 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2890 | ) { | - |
2891 | if (!chan_is_dead(ssh, c, c->detach_close)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2892 | return; never executed: return; | 0 |
2893 | debug2("channel %d: gc: notify user", c->self); | - |
2894 | c->detach_user(ssh, c->self, | - |
2895 | ((void *)0) | - |
2896 | ); | - |
2897 | | - |
2898 | if (c->detach_user != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2899 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2900 | ) | - |
2901 | return; never executed: return; | 0 |
2902 | debug2("channel %d: gc: user detached", c->self); | - |
2903 | } never executed: end of block | 0 |
2904 | if (!chan_is_dead(ssh, c, 1)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2905 | return; never executed: return; | 0 |
2906 | debug2("channel %d: garbage collecting", c->self); | - |
2907 | channel_free(ssh, c); | - |
2908 | } never executed: end of block | 0 |
2909 | | - |
2910 | enum channel_table { CHAN_PRE, CHAN_POST }; | - |
2911 | | - |
2912 | static void | - |
2913 | channel_handler(struct ssh *ssh, int table, | - |
2914 | fd_set *readset, fd_set *writeset, time_t *unpause_secs) | - |
2915 | { | - |
2916 | struct ssh_channels *sc = ssh->chanctxt; | - |
2917 | chan_fn **ftab = table == CHAN_PRETRUE | never evaluated | FALSE | never evaluated |
? sc->channel_pre : sc->channel_post; | 0 |
2918 | u_int i, oalloc; | - |
2919 | Channel *c; | - |
2920 | time_t now; | - |
2921 | | - |
2922 | now = monotime(); | - |
2923 | if (unpause_secs != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2924 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2925 | ) | - |
2926 | * never executed: *unpause_secs = 0; unpause_secs = 0;never executed: *unpause_secs = 0; | 0 |
2927 | for (i = 0, oalloc = sc->channels_alloc; i < oallocTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
2928 | c = sc->channels[i]; | - |
2929 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2930 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2931 | ) | - |
2932 | continue; never executed: continue; | 0 |
2933 | if (c->delayedTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
2934 | if (table == CHAN_PRETRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2935 | c->delayed = 0; never executed: c->delayed = 0; | 0 |
2936 | else | - |
2937 | continue; never executed: continue; | 0 |
2938 | } | - |
2939 | if (ftab[c->type] != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2940 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2941 | ) { | - |
2942 | | - |
2943 | | - |
2944 | | - |
2945 | if (c->notbefore <= nowTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2946 | (* never executed: (*ftab[c->type])(ssh, c, readset, writeset); ftab[c->type])(ssh, c, readset, writeset);never executed: (*ftab[c->type])(ssh, c, readset, writeset); | 0 |
2947 | else if (unpause_secs != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2948 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2949 | ) { | - |
2950 | | - |
2951 | | - |
2952 | | - |
2953 | | - |
2954 | debug3("%s: chan %d: skip for %d more seconds", | - |
2955 | __func__, c->self, | - |
2956 | (int)(c->notbefore - now)); | - |
2957 | if (*TRUE | never evaluated | FALSE | never evaluated |
unpause_secs == 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
2958 | (TRUE | never evaluated | FALSE | never evaluated |
c->notbefore - now) < *unpause_secsTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2959 | * never executed: *unpause_secs = c->notbefore - now; unpause_secs = c->notbefore - now;never executed: *unpause_secs = c->notbefore - now; | 0 |
2960 | } never executed: end of block | 0 |
2961 | } never executed: end of block | 0 |
2962 | channel_garbage_collect(ssh, c); | - |
2963 | } never executed: end of block | 0 |
2964 | if (unpause_secs != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2965 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2966 | && *TRUE | never evaluated | FALSE | never evaluated |
unpause_secs != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2967 | debug3("%s: first channel unpauses in %d seconds", never executed: debug3("%s: first channel unpauses in %d seconds", __func__, (int)*unpause_secs); | 0 |
2968 | __func__, (int)*unpause_secs); never executed: debug3("%s: first channel unpauses in %d seconds", __func__, (int)*unpause_secs); | 0 |
2969 | } never executed: end of block | 0 |
2970 | | - |
2971 | | - |
2972 | | - |
2973 | | - |
2974 | | - |
2975 | | - |
2976 | static void | - |
2977 | channel_before_prepare_select(struct ssh *ssh) | - |
2978 | { | - |
2979 | struct ssh_channels *sc = ssh->chanctxt; | - |
2980 | Channel *c; | - |
2981 | u_int i, oalloc; | - |
2982 | | - |
2983 | for (i = 0, oalloc = sc->channels_alloc; i < oallocTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
2984 | c = sc->channels[i]; | - |
2985 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2986 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
2987 | ) | - |
2988 | continue; never executed: continue; | 0 |
2989 | if (c->type == 21TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
2990 | channel_before_prepare_select_rdynamic(ssh, c); never executed: channel_before_prepare_select_rdynamic(ssh, c); | 0 |
2991 | } never executed: end of block | 0 |
2992 | } never executed: end of block | 0 |
2993 | | - |
2994 | | - |
2995 | | - |
2996 | | - |
2997 | | - |
2998 | void | - |
2999 | channel_prepare_select(struct ssh *ssh, fd_set **readsetp, fd_set **writesetp, | - |
3000 | int *maxfdp, u_int *nallocp, time_t *minwait_secs) | - |
3001 | { | - |
3002 | u_int n, sz, nfdset; | - |
3003 | | - |
3004 | channel_before_prepare_select(ssh); | - |
3005 | | - |
3006 | n = (((*TRUE | never evaluated | FALSE | never evaluated |
maxfdp) > (ssh->chanctxt->channel_max_fd))TRUE | never evaluated | FALSE | never evaluated |
? (*maxfdp) : (ssh->chanctxt->channel_max_fd)); | 0 |
3007 | | - |
3008 | nfdset = | - |
3009 | ((( | - |
3010 | n+1 | - |
3011 | ) + (((8 * (int) sizeof (__fd_mask))) - 1)) / ((8 * (int) sizeof (__fd_mask)))) | - |
3012 | ; | - |
3013 | | - |
3014 | if (nfdsetTRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
3015 | (TRUE | never evaluated | FALSE | never evaluated |
18446744073709551615UL) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3016 | / nfdset < sizeof(fd_mask)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3017 | fatal("channel_prepare_select: max_fd (%d) is too large", n); never executed: fatal("channel_prepare_select: max_fd (%d) is too large", n); | 0 |
3018 | sz = nfdset * sizeof(fd_mask); | - |
3019 | | - |
3020 | | - |
3021 | if (*TRUE | never evaluated | FALSE | never evaluated |
readsetp == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3022 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3023 | || sz > *nallocpTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3024 | *readsetp = xreallocarray(*readsetp, nfdset, sizeof(fd_mask)); | - |
3025 | *writesetp = xreallocarray(*writesetp, nfdset, sizeof(fd_mask)); | - |
3026 | *nallocp = sz; | - |
3027 | } never executed: end of block | 0 |
3028 | *maxfdp = n; | - |
3029 | memset(*readsetp, 0, sz); | - |
3030 | memset(*writesetp, 0, sz); | - |
3031 | | - |
3032 | if (!ssh_packet_is_rekeying(ssh)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3033 | channel_handler(ssh, CHAN_PRE, *readsetp, *writesetp, never executed: channel_handler(ssh, CHAN_PRE, *readsetp, *writesetp, minwait_secs); | 0 |
3034 | minwait_secs); never executed: channel_handler(ssh, CHAN_PRE, *readsetp, *writesetp, minwait_secs); | 0 |
3035 | } never executed: end of block | 0 |
3036 | | - |
3037 | | - |
3038 | | - |
3039 | | - |
3040 | | - |
3041 | void | - |
3042 | channel_after_select(struct ssh *ssh, fd_set *readset, fd_set *writeset) | - |
3043 | { | - |
3044 | channel_handler(ssh, CHAN_POST, readset, writeset, | - |
3045 | ((void *)0) | - |
3046 | ); | - |
3047 | } never executed: end of block | 0 |
3048 | | - |
3049 | | - |
3050 | | - |
3051 | | - |
3052 | static void | - |
3053 | channel_output_poll_input_open(struct ssh *ssh, Channel *c) | - |
3054 | { | - |
3055 | size_t len, plen; | - |
3056 | const u_char *pkt; | - |
3057 | int r; | - |
3058 | | - |
3059 | if ((TRUE | never evaluated | FALSE | never evaluated |
len = sshbuf_len(c->input)) == 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3060 | if (c->istate == 1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3061 | | - |
3062 | | - |
3063 | | - |
3064 | | - |
3065 | | - |
3066 | | - |
3067 | | - |
3068 | if ((c->extended_usage == 1TRUE | never evaluated | FALSE | never evaluated |
&& (c->efd != -1TRUE | never evaluated | FALSE | never evaluated |
|| sshbuf_len(c->extended) > 0TRUE | never evaluated | FALSE | never evaluated |
))) | 0 |
3069 | debug2("channel %d: " never executed: debug2("channel %d: " "ibuf_empty delayed efd %d/(%zu)", c->self, c->efd, sshbuf_len(c->extended)); | 0 |
3070 | "ibuf_empty delayed efd %d/(%zu)", never executed: debug2("channel %d: " "ibuf_empty delayed efd %d/(%zu)", c->self, c->efd, sshbuf_len(c->extended)); | 0 |
3071 | c->self, c->efd, sshbuf_len(c->extended)); never executed: debug2("channel %d: " "ibuf_empty delayed efd %d/(%zu)", c->self, c->efd, sshbuf_len(c->extended)); | 0 |
3072 | else | - |
3073 | chan_ibuf_empty(ssh, c); never executed: chan_ibuf_empty(ssh, c); | 0 |
3074 | } | - |
3075 | return; never executed: return; | 0 |
3076 | } | - |
3077 | | - |
3078 | if (!c->have_remote_idTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3079 | fatal(":%s: channel %d: no remote id", __func__, c->self); never executed: fatal(":%s: channel %d: no remote id", __func__, c->self); | 0 |
3080 | | - |
3081 | if (c->datagramTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3082 | | - |
3083 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_get_string_direct(c->input, &pkt, &plen)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3084 | fatal("%s: channel %d: get datagram: %s", __func__, never executed: fatal("%s: channel %d: get datagram: %s", __func__, c->self, ssh_err(r)); | 0 |
3085 | c->self, ssh_err(r)); never executed: fatal("%s: channel %d: get datagram: %s", __func__, c->self, ssh_err(r)); | 0 |
3086 | | - |
3087 | | - |
3088 | | - |
3089 | | - |
3090 | | - |
3091 | if (plen > c->remote_windowTRUE | never evaluated | FALSE | never evaluated |
|| plen > c->remote_maxpacketTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3092 | debug("channel %d: datagram too big", c->self); | - |
3093 | return; never executed: return; | 0 |
3094 | } | - |
3095 | | - |
3096 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_start(ssh, 94)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3097 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->remote_id)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3098 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_string(ssh, pkt, plen)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3099 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3100 | fatal("%s: channel %i: datagram: %s", __func__, | - |
3101 | c->self, ssh_err(r)); | - |
3102 | } never executed: end of block | 0 |
3103 | c->remote_window -= plen; | - |
3104 | return; never executed: return; | 0 |
3105 | } | - |
3106 | | - |
3107 | | - |
3108 | if (len > c->remote_windowTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3109 | len = c->remote_window; never executed: len = c->remote_window; | 0 |
3110 | if (len > c->remote_maxpacketTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3111 | len = c->remote_maxpacket; never executed: len = c->remote_maxpacket; | 0 |
3112 | if (len == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3113 | return; never executed: return; | 0 |
3114 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_start(ssh, 94)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3115 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->remote_id)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3116 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_string(ssh, sshbuf_ptr(c->input), len)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3117 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3118 | fatal("%s: channel %i: data: %s", __func__, | - |
3119 | c->self, ssh_err(r)); | - |
3120 | } never executed: end of block | 0 |
3121 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_consume(c->input, len)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3122 | fatal("%s: channel %i: consume: %s", __func__, never executed: fatal("%s: channel %i: consume: %s", __func__, c->self, ssh_err(r)); | 0 |
3123 | c->self, ssh_err(r)); never executed: fatal("%s: channel %i: consume: %s", __func__, c->self, ssh_err(r)); | 0 |
3124 | c->remote_window -= len; | - |
3125 | } never executed: end of block | 0 |
3126 | | - |
3127 | | - |
3128 | | - |
3129 | | - |
3130 | static void | - |
3131 | channel_output_poll_extended_read(struct ssh *ssh, Channel *c) | - |
3132 | { | - |
3133 | size_t len; | - |
3134 | int r; | - |
3135 | | - |
3136 | if ((TRUE | never evaluated | FALSE | never evaluated |
len = sshbuf_len(c->extended)) == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3137 | return; never executed: return; | 0 |
3138 | | - |
3139 | debug2("channel %d: rwin %u elen %zu euse %d", c->self, | - |
3140 | c->remote_window, sshbuf_len(c->extended), c->extended_usage); | - |
3141 | if (len > c->remote_windowTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3142 | len = c->remote_window; never executed: len = c->remote_window; | 0 |
3143 | if (len > c->remote_maxpacketTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3144 | len = c->remote_maxpacket; never executed: len = c->remote_maxpacket; | 0 |
3145 | if (len == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3146 | return; never executed: return; | 0 |
3147 | if (!c->have_remote_idTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3148 | fatal(":%s: channel %d: no remote id", __func__, c->self); never executed: fatal(":%s: channel %d: no remote id", __func__, c->self); | 0 |
3149 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_start(ssh, 95)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3150 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->remote_id)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3151 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, 1)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3152 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_string(ssh, sshbuf_ptr(c->extended), len)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3153 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3154 | fatal("%s: channel %i: data: %s", __func__, | - |
3155 | c->self, ssh_err(r)); | - |
3156 | } never executed: end of block | 0 |
3157 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_consume(c->extended, len)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3158 | fatal("%s: channel %i: consume: %s", __func__, never executed: fatal("%s: channel %i: consume: %s", __func__, c->self, ssh_err(r)); | 0 |
3159 | c->self, ssh_err(r)); never executed: fatal("%s: channel %i: consume: %s", __func__, c->self, ssh_err(r)); | 0 |
3160 | c->remote_window -= len; | - |
3161 | debug2("channel %d: sent ext data %zu", c->self, len); | - |
3162 | } never executed: end of block | 0 |
3163 | | - |
3164 | | - |
3165 | void | - |
3166 | channel_output_poll(struct ssh *ssh) | - |
3167 | { | - |
3168 | struct ssh_channels *sc = ssh->chanctxt; | - |
3169 | Channel *c; | - |
3170 | u_int i; | - |
3171 | | - |
3172 | for (i = 0; i < sc->channels_allocTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
3173 | c = sc->channels[i]; | - |
3174 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3175 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3176 | ) | - |
3177 | continue; never executed: continue; | 0 |
3178 | | - |
3179 | | - |
3180 | | - |
3181 | | - |
3182 | | - |
3183 | if (c->type != 4TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3184 | continue; never executed: continue; | 0 |
3185 | if ((TRUE | never evaluated | FALSE | never evaluated |
c->flags & (0x01|0x02))TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3186 | | - |
3187 | debug3("channel %d: will not send data after close", | - |
3188 | c->self); | - |
3189 | continue; never executed: continue; | 0 |
3190 | } | - |
3191 | | - |
3192 | | - |
3193 | if (c->istate == 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3194 | c->istate == 1TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3195 | channel_output_poll_input_open(ssh, c); never executed: channel_output_poll_input_open(ssh, c); | 0 |
3196 | | - |
3197 | if (!(c->flags & 0x04)TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
3198 | c->extended_usage == 1TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3199 | channel_output_poll_extended_read(ssh, c); never executed: channel_output_poll_extended_read(ssh, c); | 0 |
3200 | } never executed: end of block | 0 |
3201 | } never executed: end of block | 0 |
3202 | int | - |
3203 | channel_proxy_downstream(struct ssh *ssh, Channel *downstream) | - |
3204 | { | - |
3205 | Channel *c = | - |
3206 | ((void *)0) | - |
3207 | ; | - |
3208 | struct sshbuf *original = | - |
3209 | ((void *)0) | - |
3210 | , *modified = | - |
3211 | ((void *)0) | - |
3212 | ; | - |
3213 | const u_char *cp; | - |
3214 | char *ctype = | - |
3215 | ((void *)0) | - |
3216 | , *listen_host = | - |
3217 | ((void *)0) | - |
3218 | ; | - |
3219 | u_char type; | - |
3220 | size_t have; | - |
3221 | int ret = -1, r; | - |
3222 | u_int id, remote_id, listen_port; | - |
3223 | | - |
3224 | | - |
3225 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_get_string_direct(downstream->input, &cp, &have))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3226 | != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3227 | error("%s: malformed message: %s", __func__, ssh_err(r)); | - |
3228 | return never executed: return -1; -1;never executed: return -1; | 0 |
3229 | } | - |
3230 | if (have < 2TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3231 | error("%s: short message", __func__); | - |
3232 | return never executed: return -1; -1;never executed: return -1; | 0 |
3233 | } | - |
3234 | type = cp[1]; | - |
3235 | | - |
3236 | cp += 2; | - |
3237 | have -= 2; | - |
3238 | if (ssh_packet_log_type(type)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3239 | debug3("%s: channel %u: down->up: type %u", __func__, never executed: debug3("%s: channel %u: down->up: type %u", __func__, downstream->self, type); | 0 |
3240 | downstream->self, type); never executed: debug3("%s: channel %u: down->up: type %u", __func__, downstream->self, type); | 0 |
3241 | | - |
3242 | switch (type) { | - |
3243 | case never executed: case 90: 90:never executed: case 90: | 0 |
3244 | if ((TRUE | never evaluated | FALSE | never evaluated |
original = sshbuf_from(cp, have)) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3245 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3246 | || | - |
3247 | (TRUE | never evaluated | FALSE | never evaluated |
modified = sshbuf_new()) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3248 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3249 | ) { | - |
3250 | error("%s: alloc", __func__); | - |
3251 | goto never executed: goto out; out;never executed: goto out; | 0 |
3252 | } | - |
3253 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_get_cstring(original, &ctype, TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3254 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3255 | )) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3256 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_get_u32(original, &id)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3257 | error("%s: parse error %s", __func__, ssh_err(r)); | - |
3258 | goto never executed: goto out; out;never executed: goto out; | 0 |
3259 | } | - |
3260 | c = channel_new(ssh, "mux proxy", 20, | - |
3261 | -1, -1, -1, 0, 0, 0, ctype, 1); | - |
3262 | c->mux_ctx = downstream; | - |
3263 | c->mux_downstream_id = id; | - |
3264 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put_cstring(modified, ctype)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3265 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put_u32(modified, c->self)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3266 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_putb(modified, original)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3267 | error("%s: compose error %s", __func__, ssh_err(r)); | - |
3268 | channel_free(ssh, c); | - |
3269 | goto never executed: goto out; out;never executed: goto out; | 0 |
3270 | } | - |
3271 | break; never executed: break; | 0 |
3272 | case never executed: case 91: 91:never executed: case 91: | 0 |
3273 | | - |
3274 | | - |
3275 | | - |
3276 | | - |
3277 | if ((TRUE | never evaluated | FALSE | never evaluated |
original = sshbuf_from(cp, have)) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3278 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3279 | || | - |
3280 | (TRUE | never evaluated | FALSE | never evaluated |
modified = sshbuf_new()) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3281 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3282 | ) { | - |
3283 | error("%s: alloc", __func__); | - |
3284 | goto never executed: goto out; out;never executed: goto out; | 0 |
3285 | } | - |
3286 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_get_u32(original, &remote_id)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3287 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_get_u32(original, &id)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3288 | error("%s: parse error %s", __func__, ssh_err(r)); | - |
3289 | goto never executed: goto out; out;never executed: goto out; | 0 |
3290 | } | - |
3291 | c = channel_new(ssh, "mux proxy", 20, | - |
3292 | -1, -1, -1, 0, 0, 0, "mux-down-connect", 1); | - |
3293 | c->mux_ctx = downstream; | - |
3294 | c->mux_downstream_id = id; | - |
3295 | c->remote_id = remote_id; | - |
3296 | c->have_remote_id = 1; | - |
3297 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put_u32(modified, remote_id)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3298 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put_u32(modified, c->self)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3299 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_putb(modified, original)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3300 | error("%s: compose error %s", __func__, ssh_err(r)); | - |
3301 | channel_free(ssh, c); | - |
3302 | goto never executed: goto out; out;never executed: goto out; | 0 |
3303 | } | - |
3304 | break; never executed: break; | 0 |
3305 | case never executed: case 80: 80:never executed: case 80: | 0 |
3306 | if ((TRUE | never evaluated | FALSE | never evaluated |
original = sshbuf_from(cp, have)) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3307 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3308 | ) { | - |
3309 | error("%s: alloc", __func__); | - |
3310 | goto never executed: goto out; out;never executed: goto out; | 0 |
3311 | } | - |
3312 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_get_cstring(original, &ctype, TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3313 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3314 | )) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3315 | error("%s: parse error %s", __func__, ssh_err(r)); | - |
3316 | goto never executed: goto out; out;never executed: goto out; | 0 |
3317 | } | - |
3318 | if ( | - |
3319 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3320 | ctypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3321 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3322 | "tcpip-forward"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3323 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3324 | ctypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3325 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3326 | "tcpip-forward"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3327 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3328 | ctypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3329 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3330 | ctypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3331 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3332 | "tcpip-forward"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3333 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3334 | "tcpip-forward"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3335 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3336 | ctypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3337 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3338 | "tcpip-forward"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3339 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3340 | ctypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3341 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3342 | ctypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3343 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3344 | ctypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3345 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3346 | ctypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3347 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3348 | "tcpip-forward"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3349 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3350 | "tcpip-forward"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3351 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3352 | "tcpip-forward"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3353 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3354 | ctypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3355 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3356 | "tcpip-forward"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3357 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3358 | "tcpip-forward"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3359 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3360 | ctypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3361 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3362 | ctypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3363 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3364 | ctypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3365 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( ctype ))[3] - __s2[3]); | 0 |
3366 | ctypeTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( ctype ))[3] - __s2[3]); | 0 |
3367 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3368 | "tcpip-forward"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3369 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3370 | "tcpip-forward"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3371 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3372 | "tcpip-forward"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3373 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3374 | "tcpip-forward"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3375 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3376 | ctypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3377 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3378 | ctypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3379 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3380 | ctypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3381 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3382 | ctypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3383 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3384 | "tcpip-forward"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3385 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3386 | ctypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3387 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3388 | "tcpip-forward"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3389 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3390 | "tcpip-forward"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3391 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3392 | "tcpip-forward"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3393 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "tcpip-forward" ))[3] - __s2[3]); | 0 |
3394 | "tcpip-forward"TRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "tcpip-forward" ))[3] - __s2[3]); | 0 |
3395 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3396 | ctypeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3397 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3398 | "tcpip-forward"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3399 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3400 | != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3401 | error("%s: unsupported request %s", __func__, ctype); | - |
3402 | goto never executed: goto out; out;never executed: goto out; | 0 |
3403 | } | - |
3404 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_get_u8(original, TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3405 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3406 | )) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3407 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_get_cstring(original, &listen_host, TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3408 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3409 | )) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3410 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_get_u32(original, &listen_port)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3411 | error("%s: parse error %s", __func__, ssh_err(r)); | - |
3412 | goto never executed: goto out; out;never executed: goto out; | 0 |
3413 | } | - |
3414 | if (listen_port > 65535TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3415 | error("%s: tcpip-forward for %s: bad port %u", | - |
3416 | __func__, listen_host, listen_port); | - |
3417 | goto never executed: goto out; out;never executed: goto out; | 0 |
3418 | } | - |
3419 | | - |
3420 | permission_set_add(ssh, 0x101, (1<<1), "<mux>", -1, | - |
3421 | listen_host, | - |
3422 | ((void *)0) | - |
3423 | , (int)listen_port, downstream); | - |
3424 | listen_host = | - |
3425 | ((void *)0) | - |
3426 | ; | - |
3427 | break; never executed: break; | 0 |
3428 | case never executed: case 97: 97:never executed: case 97: | 0 |
3429 | if (have < 4TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3430 | break; never executed: break; | 0 |
3431 | remote_id = (((u_int32_t)(((const u_char *)(cp))[0]) << 24) | ((u_int32_t)(((const u_char *)(cp))[1]) << 16) | ((u_int32_t)(((const u_char *)(cp))[2]) << 8) | (u_int32_t)(((const u_char *)(cp))[3])); | - |
3432 | if ((TRUE | never evaluated | FALSE | never evaluated |
c = channel_by_remote_id(ssh, remote_id)) != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3433 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3434 | ) { | - |
3435 | if (c->flags & 0x02TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3436 | channel_free(ssh, c); never executed: channel_free(ssh, c); | 0 |
3437 | else | - |
3438 | c->flags |= 0x01; never executed: c->flags |= 0x01; | 0 |
3439 | } | - |
3440 | break; never executed: break; | 0 |
3441 | } | - |
3442 | if (modifiedTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3443 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_start(ssh, type)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3444 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_putb(ssh, modified)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3445 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3446 | error("%s: send %s", __func__, ssh_err(r)); | - |
3447 | goto never executed: goto out; out;never executed: goto out; | 0 |
3448 | } | - |
3449 | } never executed: end of block else { | 0 |
3450 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_start(ssh, type)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3451 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put(ssh, cp, have)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3452 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3453 | error("%s: send %s", __func__, ssh_err(r)); | - |
3454 | goto never executed: goto out; out;never executed: goto out; | 0 |
3455 | } | - |
3456 | } never executed: end of block | 0 |
3457 | ret = 0; | - |
3458 | out: code before this statement never executed: out: | 0 |
3459 | free(ctype); | - |
3460 | free(listen_host); | - |
3461 | sshbuf_free(original); | - |
3462 | sshbuf_free(modified); | - |
3463 | return never executed: return ret; ret;never executed: return ret; | 0 |
3464 | } | - |
3465 | | - |
3466 | | - |
3467 | | - |
3468 | | - |
3469 | | - |
3470 | | - |
3471 | | - |
3472 | int | - |
3473 | channel_proxy_upstream(Channel *c, int type, u_int32_t seq, struct ssh *ssh) | - |
3474 | { | - |
3475 | struct sshbuf *b = | - |
3476 | ((void *)0) | - |
3477 | ; | - |
3478 | Channel *downstream; | - |
3479 | const u_char *cp = | - |
3480 | ((void *)0) | - |
3481 | ; | - |
3482 | size_t len; | - |
3483 | int r; | - |
3484 | | - |
3485 | | - |
3486 | | - |
3487 | | - |
3488 | | - |
3489 | | - |
3490 | | - |
3491 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3492 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3493 | || c->type != 20TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3494 | return never executed: return 0; 0;never executed: return 0; | 0 |
3495 | if ((TRUE | never evaluated | FALSE | never evaluated |
downstream = c->mux_ctx) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3496 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3497 | ) | - |
3498 | return never executed: return 0; 0;never executed: return 0; | 0 |
3499 | switch (type) { | - |
3500 | case never executed: case 97: 97:never executed: case 97: | 0 |
3501 | case never executed: case 94: 94:never executed: case 94: | 0 |
3502 | case never executed: case 96: 96:never executed: case 96: | 0 |
3503 | case never executed: case 95: 95:never executed: case 95: | 0 |
3504 | case never executed: case 91: 91:never executed: case 91: | 0 |
3505 | case never executed: case 92: 92:never executed: case 92: | 0 |
3506 | case never executed: case 93: 93:never executed: case 93: | 0 |
3507 | case never executed: case 99: 99:never executed: case 99: | 0 |
3508 | case never executed: case 100: 100:never executed: case 100: | 0 |
3509 | case never executed: case 98: 98:never executed: case 98: | 0 |
3510 | break; never executed: break; | 0 |
3511 | default never executed: default: :never executed: default: | 0 |
3512 | debug2("%s: channel %u: unsupported type %u", __func__, | - |
3513 | c->self, type); | - |
3514 | return never executed: return 0; 0;never executed: return 0; | 0 |
3515 | } | - |
3516 | if ((TRUE | never evaluated | FALSE | never evaluated |
b = sshbuf_new()) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3517 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3518 | ) { | - |
3519 | error("%s: alloc reply", __func__); | - |
3520 | goto never executed: goto out; out;never executed: goto out; | 0 |
3521 | } | - |
3522 | | - |
3523 | cp = sshpkt_ptr(ssh, &len); | - |
3524 | if (cp == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3525 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3526 | ) { | - |
3527 | error("%s: no packet", __func__); | - |
3528 | goto never executed: goto out; out;never executed: goto out; | 0 |
3529 | } | - |
3530 | | - |
3531 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put_u8(b, 0)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3532 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put_u8(b, type)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3533 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put_u32(b, c->mux_downstream_id)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3534 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put(b, cp, len)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3535 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put_stringb(downstream->output, b)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3536 | error("%s: compose for muxclient %s", __func__, ssh_err(r)); | - |
3537 | goto never executed: goto out; out;never executed: goto out; | 0 |
3538 | } | - |
3539 | | - |
3540 | if (ssh_packet_log_type(type)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3541 | debug3("%s: channel %u: up->down: type %u", __func__, c->self, never executed: debug3("%s: channel %u: up->down: type %u", __func__, c->self, type); | 0 |
3542 | type); never executed: debug3("%s: channel %u: up->down: type %u", __func__, c->self, type); | 0 |
3543 | out: code before this statement never executed: out: | 0 |
3544 | | - |
3545 | switch (type) { | - |
3546 | case never executed: case 91: 91:never executed: case 91: | 0 |
3547 | | - |
3548 | if (cpTRUE | never evaluated | FALSE | never evaluated |
&& len > 4TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3549 | c->remote_id = (((u_int32_t)(((const u_char *)(cp))[0]) << 24) | ((u_int32_t)(((const u_char *)(cp))[1]) << 16) | ((u_int32_t)(((const u_char *)(cp))[2]) << 8) | (u_int32_t)(((const u_char *)(cp))[3])); | - |
3550 | c->have_remote_id = 1; | - |
3551 | } never executed: end of block | 0 |
3552 | break; never executed: break; | 0 |
3553 | case never executed: case 97: 97:never executed: case 97: | 0 |
3554 | if (c->flags & 0x01TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3555 | channel_free(ssh, c); never executed: channel_free(ssh, c); | 0 |
3556 | else | - |
3557 | c->flags |= 0x02; never executed: c->flags |= 0x02; | 0 |
3558 | break; never executed: break; | 0 |
3559 | } | - |
3560 | sshbuf_free(b); | - |
3561 | return never executed: return 1; 1;never executed: return 1; | 0 |
3562 | } | - |
3563 | | - |
3564 | | - |
3565 | | - |
3566 | | - |
3567 | static int | - |
3568 | channel_parse_id(struct ssh *ssh, const char *where, const char *what) | - |
3569 | { | - |
3570 | u_int32_t id; | - |
3571 | int r; | - |
3572 | | - |
3573 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_get_u32(ssh, &id)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3574 | error("%s: parse id: %s", where, ssh_err(r)); | - |
3575 | ssh_packet_disconnect(ssh, "Invalid %s message", what); | - |
3576 | } never executed: end of block | 0 |
3577 | if (id > 0x7fffffffTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3578 | error("%s: bad channel id %u: %s", where, id, ssh_err(r)); | - |
3579 | ssh_packet_disconnect(ssh, "Invalid %s channel id", what); | - |
3580 | } never executed: end of block | 0 |
3581 | return never executed: return (int)id; (int)id;never executed: return (int)id; | 0 |
3582 | } | - |
3583 | | - |
3584 | | - |
3585 | static Channel * | - |
3586 | channel_from_packet_id(struct ssh *ssh, const char *where, const char *what) | - |
3587 | { | - |
3588 | int id = channel_parse_id(ssh, where, what); | - |
3589 | Channel *c; | - |
3590 | | - |
3591 | if ((TRUE | never evaluated | FALSE | never evaluated |
c = channel_lookup(ssh, id)) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3592 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3593 | ) { | - |
3594 | ssh_packet_disconnect(ssh, | - |
3595 | "%s packet referred to nonexistent channel %d", what, id); | - |
3596 | } never executed: end of block | 0 |
3597 | return never executed: return c; c;never executed: return c; | 0 |
3598 | } | - |
3599 | | - |
3600 | int | - |
3601 | channel_input_data(int type, u_int32_t seq, struct ssh *ssh) | - |
3602 | { | - |
3603 | const u_char *data; | - |
3604 | size_t data_len, win_len; | - |
3605 | Channel *c = channel_from_packet_id(ssh, __func__, "data"); | - |
3606 | int r; | - |
3607 | | - |
3608 | if (channel_proxy_upstream(c, type, seq, ssh)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3609 | return never executed: return 0; 0;never executed: return 0; | 0 |
3610 | | - |
3611 | | - |
3612 | if (c->type != 4TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
3613 | c->type != 21TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
3614 | c->type != 22TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
3615 | c->type != 7TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3616 | return never executed: return 0; 0;never executed: return 0; | 0 |
3617 | | - |
3618 | | - |
3619 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_get_string_direct(ssh, &data, &data_len)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3620 | fatal("%s: channel %d: get data: %s", __func__, never executed: fatal("%s: channel %d: get data: %s", __func__, c->self, ssh_err(r)); | 0 |
3621 | c->self, ssh_err(r)); never executed: fatal("%s: channel %d: get data: %s", __func__, c->self, ssh_err(r)); | 0 |
3622 | do { int _len = ssh_packet_remaining(ssh); if (_len > 0TRUE | never evaluated | FALSE | never evaluated |
) { logit("Packet integrity error (%d bytes remaining) at %s:%d", _len ,__FILE__, 2967); ssh_packet_disconnect(ssh, "Packet integrity error."); }never executed: end of block } while (0); | 0 |
3623 | | - |
3624 | win_len = data_len; | - |
3625 | if (c->datagramTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3626 | win_len += 4; never executed: win_len += 4; | 0 |
3627 | | - |
3628 | | - |
3629 | | - |
3630 | | - |
3631 | | - |
3632 | | - |
3633 | if (c->ostate != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3634 | c->local_window -= win_len; | - |
3635 | c->local_consumed += win_len; | - |
3636 | return never executed: return 0; 0;never executed: return 0; | 0 |
3637 | } | - |
3638 | | - |
3639 | if (win_len > c->local_maxpacketTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3640 | logit("channel %d: rcvd big packet %zu, maxpack %u", | - |
3641 | c->self, win_len, c->local_maxpacket); | - |
3642 | return never executed: return 0; 0;never executed: return 0; | 0 |
3643 | } | - |
3644 | if (win_len > c->local_windowTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3645 | logit("channel %d: rcvd too much data %zu, win %u", | - |
3646 | c->self, win_len, c->local_window); | - |
3647 | return never executed: return 0; 0;never executed: return 0; | 0 |
3648 | } | - |
3649 | c->local_window -= win_len; | - |
3650 | | - |
3651 | if (c->datagramTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3652 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put_string(c->output, data, data_len)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3653 | fatal("%s: channel %d: append datagram: %s", never executed: fatal("%s: channel %d: append datagram: %s", __func__, c->self, ssh_err(r)); | 0 |
3654 | __func__, c->self, ssh_err(r)); never executed: fatal("%s: channel %d: append datagram: %s", __func__, c->self, ssh_err(r)); | 0 |
3655 | } never executed: end of block else if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put(c->output, data, data_len)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3656 | fatal("%s: channel %d: append data: %s", never executed: fatal("%s: channel %d: append data: %s", __func__, c->self, ssh_err(r)); | 0 |
3657 | __func__, c->self, ssh_err(r)); never executed: fatal("%s: channel %d: append data: %s", __func__, c->self, ssh_err(r)); | 0 |
3658 | | - |
3659 | return never executed: return 0; 0;never executed: return 0; | 0 |
3660 | } | - |
3661 | | - |
3662 | int | - |
3663 | channel_input_extended_data(int type, u_int32_t seq, struct ssh *ssh) | - |
3664 | { | - |
3665 | const u_char *data; | - |
3666 | size_t data_len; | - |
3667 | u_int32_t tcode; | - |
3668 | Channel *c = channel_from_packet_id(ssh, __func__, "extended data"); | - |
3669 | int r; | - |
3670 | | - |
3671 | if (channel_proxy_upstream(c, type, seq, ssh)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3672 | return never executed: return 0; 0;never executed: return 0; | 0 |
3673 | if (c->type != 4TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3674 | logit("channel %d: ext data for non open", c->self); | - |
3675 | return never executed: return 0; 0;never executed: return 0; | 0 |
3676 | } | - |
3677 | if (c->flags & 0x08TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3678 | if (datafellows & 0x00200000TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3679 | debug("channel %d: accepting ext data after eof", never executed: debug("channel %d: accepting ext data after eof", c->self); | 0 |
3680 | c->self); never executed: debug("channel %d: accepting ext data after eof", c->self); | 0 |
3681 | else | - |
3682 | ssh_packet_disconnect(ssh, "Received extended_data " never executed: ssh_packet_disconnect(ssh, "Received extended_data " "after EOF on channel %d.", c->self); | 0 |
3683 | "after EOF on channel %d.", c->self); never executed: ssh_packet_disconnect(ssh, "Received extended_data " "after EOF on channel %d.", c->self); | 0 |
3684 | } | - |
3685 | | - |
3686 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_get_u32(ssh, &tcode)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3687 | error("%s: parse tcode: %s", __func__, ssh_err(r)); | - |
3688 | ssh_packet_disconnect(ssh, "Invalid extended_data message"); | - |
3689 | } never executed: end of block | 0 |
3690 | if (c->efd == -1TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3691 | c->extended_usage != 2TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3692 | tcode != 1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3693 | logit("channel %d: bad ext data", c->self); | - |
3694 | return never executed: return 0; 0;never executed: return 0; | 0 |
3695 | } | - |
3696 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_get_string_direct(ssh, &data, &data_len)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3697 | error("%s: parse data: %s", __func__, ssh_err(r)); | - |
3698 | ssh_packet_disconnect(ssh, "Invalid extended_data message"); | - |
3699 | } never executed: end of block | 0 |
3700 | do { int _len = ssh_packet_remaining(ssh); if (_len > 0TRUE | never evaluated | FALSE | never evaluated |
) { logit("Packet integrity error (%d bytes remaining) at %s:%d", _len ,__FILE__, 3045); ssh_packet_disconnect(ssh, "Packet integrity error."); }never executed: end of block } while (0); | 0 |
3701 | | - |
3702 | if (data_len > c->local_windowTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3703 | logit("channel %d: rcvd too much extended_data %zu, win %u", | - |
3704 | c->self, data_len, c->local_window); | - |
3705 | return never executed: return 0; 0;never executed: return 0; | 0 |
3706 | } | - |
3707 | debug2("channel %d: rcvd ext data %zu", c->self, data_len); | - |
3708 | | - |
3709 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put(c->extended, data, data_len)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3710 | error("%s: append: %s", __func__, ssh_err(r)); never executed: error("%s: append: %s", __func__, ssh_err(r)); | 0 |
3711 | c->local_window -= data_len; | - |
3712 | return never executed: return 0; 0;never executed: return 0; | 0 |
3713 | } | - |
3714 | | - |
3715 | int | - |
3716 | channel_input_ieof(int type, u_int32_t seq, struct ssh *ssh) | - |
3717 | { | - |
3718 | Channel *c = channel_from_packet_id(ssh, __func__, "ieof"); | - |
3719 | | - |
3720 | do { int _len = ssh_packet_remaining(ssh); if (_len > 0TRUE | never evaluated | FALSE | never evaluated |
) { logit("Packet integrity error (%d bytes remaining) at %s:%d", _len ,__FILE__, 3065); ssh_packet_disconnect(ssh, "Packet integrity error."); }never executed: end of block } while (0); | 0 |
3721 | | - |
3722 | if (channel_proxy_upstream(c, type, seq, ssh)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3723 | return never executed: return 0; 0;never executed: return 0; | 0 |
3724 | chan_rcvd_ieof(ssh, c); | - |
3725 | | - |
3726 | | - |
3727 | if (c->force_drainTRUE | never evaluated | FALSE | never evaluated |
&& c->istate == 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3728 | debug("channel %d: FORCE input drain", c->self); | - |
3729 | c->istate = 1; | - |
3730 | if (sshbuf_len(c->input) == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3731 | chan_ibuf_empty(ssh, c); never executed: chan_ibuf_empty(ssh, c); | 0 |
3732 | } never executed: end of block | 0 |
3733 | return never executed: return 0; 0;never executed: return 0; | 0 |
3734 | } | - |
3735 | | - |
3736 | int | - |
3737 | channel_input_oclose(int type, u_int32_t seq, struct ssh *ssh) | - |
3738 | { | - |
3739 | Channel *c = channel_from_packet_id(ssh, __func__, "oclose"); | - |
3740 | | - |
3741 | if (channel_proxy_upstream(c, type, seq, ssh)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3742 | return never executed: return 0; 0;never executed: return 0; | 0 |
3743 | do { int _len = ssh_packet_remaining(ssh); if (_len > 0TRUE | never evaluated | FALSE | never evaluated |
) { logit("Packet integrity error (%d bytes remaining) at %s:%d", _len ,__FILE__, 3088); ssh_packet_disconnect(ssh, "Packet integrity error."); }never executed: end of block } while (0); | 0 |
3744 | chan_rcvd_oclose(ssh, c); | - |
3745 | return never executed: return 0; 0;never executed: return 0; | 0 |
3746 | } | - |
3747 | | - |
3748 | int | - |
3749 | channel_input_open_confirmation(int type, u_int32_t seq, struct ssh *ssh) | - |
3750 | { | - |
3751 | Channel *c = channel_from_packet_id(ssh, __func__, "open confirmation"); | - |
3752 | u_int32_t remote_window, remote_maxpacket; | - |
3753 | int r; | - |
3754 | | - |
3755 | if (channel_proxy_upstream(c, type, seq, ssh)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3756 | return never executed: return 0; 0;never executed: return 0; | 0 |
3757 | if (c->type != 3TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3758 | packet_disconnect("Received open confirmation for " never executed: packet_disconnect("Received open confirmation for " "non-opening channel %d.", c->self); | 0 |
3759 | "non-opening channel %d.", c->self); never executed: packet_disconnect("Received open confirmation for " "non-opening channel %d.", c->self); | 0 |
3760 | | - |
3761 | | - |
3762 | | - |
3763 | | - |
3764 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_get_u32(ssh, &c->remote_id)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3765 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_get_u32(ssh, &remote_window)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3766 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_get_u32(ssh, &remote_maxpacket)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3767 | error("%s: window/maxpacket: %s", __func__, ssh_err(r)); | - |
3768 | packet_disconnect("Invalid open confirmation message"); | - |
3769 | } never executed: end of block | 0 |
3770 | do { int _len = ssh_packet_remaining(ssh); if (_len > 0TRUE | never evaluated | FALSE | never evaluated |
) { logit("Packet integrity error (%d bytes remaining) at %s:%d", _len ,__FILE__, 3115); ssh_packet_disconnect(ssh, "Packet integrity error."); }never executed: end of block } while (0); | 0 |
3771 | | - |
3772 | c->have_remote_id = 1; | - |
3773 | c->remote_window = remote_window; | - |
3774 | c->remote_maxpacket = remote_maxpacket; | - |
3775 | c->type = 4; | - |
3776 | if (c->open_confirmTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3777 | debug2("%s: channel %d: callback start", __func__, c->self); | - |
3778 | c->open_confirm(ssh, c->self, 1, c->open_confirm_ctx); | - |
3779 | debug2("%s: channel %d: callback done", __func__, c->self); | - |
3780 | } never executed: end of block | 0 |
3781 | debug2("channel %d: open confirm rwindow %u rmax %u", c->self, | - |
3782 | c->remote_window, c->remote_maxpacket); | - |
3783 | return never executed: return 0; 0;never executed: return 0; | 0 |
3784 | } | - |
3785 | | - |
3786 | static char * | - |
3787 | reason2txt(int reason) | - |
3788 | { | - |
3789 | switch (reason) { | - |
3790 | case never executed: case 1: 1:never executed: case 1: | 0 |
3791 | return never executed: return "administratively prohibited"; "administratively prohibited";never executed: return "administratively prohibited"; | 0 |
3792 | case never executed: case 2: 2:never executed: case 2: | 0 |
3793 | return never executed: return "connect failed"; "connect failed";never executed: return "connect failed"; | 0 |
3794 | case never executed: case 3: 3:never executed: case 3: | 0 |
3795 | return never executed: return "unknown channel type"; "unknown channel type";never executed: return "unknown channel type"; | 0 |
3796 | case never executed: case 4: 4:never executed: case 4: | 0 |
3797 | return never executed: return "resource shortage"; "resource shortage";never executed: return "resource shortage"; | 0 |
3798 | } | - |
3799 | return never executed: return "unknown reason"; "unknown reason";never executed: return "unknown reason"; | 0 |
3800 | } | - |
3801 | | - |
3802 | int | - |
3803 | channel_input_open_failure(int type, u_int32_t seq, struct ssh *ssh) | - |
3804 | { | - |
3805 | Channel *c = channel_from_packet_id(ssh, __func__, "open failure"); | - |
3806 | u_int32_t reason; | - |
3807 | char *msg = | - |
3808 | ((void *)0) | - |
3809 | ; | - |
3810 | int r; | - |
3811 | | - |
3812 | if (channel_proxy_upstream(c, type, seq, ssh)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3813 | return never executed: return 0; 0;never executed: return 0; | 0 |
3814 | if (c->type != 3TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3815 | packet_disconnect("Received open failure for " never executed: packet_disconnect("Received open failure for " "non-opening channel %d.", c->self); | 0 |
3816 | "non-opening channel %d.", c->self); never executed: packet_disconnect("Received open failure for " "non-opening channel %d.", c->self); | 0 |
3817 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_get_u32(ssh, &reason)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3818 | error("%s: reason: %s", __func__, ssh_err(r)); | - |
3819 | packet_disconnect("Invalid open failure message"); | - |
3820 | } never executed: end of block | 0 |
3821 | | - |
3822 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_get_cstring(ssh, &msg, TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3823 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3824 | )) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
3825 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_get_string_direct(ssh, TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3826 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3827 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3828 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3829 | )) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3830 | error("%s: message/lang: %s", __func__, ssh_err(r)); | - |
3831 | packet_disconnect("Invalid open failure message"); | - |
3832 | } never executed: end of block | 0 |
3833 | do { int _len = ssh_packet_remaining(ssh); if (_len > 0TRUE | never evaluated | FALSE | never evaluated |
) { logit("Packet integrity error (%d bytes remaining) at %s:%d", _len ,__FILE__, 3170); ssh_packet_disconnect(ssh, "Packet integrity error."); }never executed: end of block } while (0); | 0 |
3834 | logit("channel %d: open failed: %s%s%s", c->self, | - |
3835 | reason2txt(reason), msg ? ": ": "", msg ? msg : ""); | - |
3836 | free(msg); | - |
3837 | if (c->open_confirmTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3838 | debug2("%s: channel %d: callback start", __func__, c->self); | - |
3839 | c->open_confirm(ssh, c->self, 0, c->open_confirm_ctx); | - |
3840 | debug2("%s: channel %d: callback done", __func__, c->self); | - |
3841 | } never executed: end of block | 0 |
3842 | | - |
3843 | chan_mark_dead(ssh, c); | - |
3844 | return never executed: return 0; 0;never executed: return 0; | 0 |
3845 | } | - |
3846 | | - |
3847 | int | - |
3848 | channel_input_window_adjust(int type, u_int32_t seq, struct ssh *ssh) | - |
3849 | { | - |
3850 | int id = channel_parse_id(ssh, __func__, "window adjust"); | - |
3851 | Channel *c; | - |
3852 | u_int32_t adjust; | - |
3853 | u_int new_rwin; | - |
3854 | int r; | - |
3855 | | - |
3856 | if ((TRUE | never evaluated | FALSE | never evaluated |
c = channel_lookup(ssh, id)) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3857 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3858 | ) { | - |
3859 | logit("Received window adjust for non-open channel %d.", id); | - |
3860 | return never executed: return 0; 0;never executed: return 0; | 0 |
3861 | } | - |
3862 | | - |
3863 | if (channel_proxy_upstream(c, type, seq, ssh)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3864 | return never executed: return 0; 0;never executed: return 0; | 0 |
3865 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_get_u32(ssh, &adjust)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3866 | error("%s: adjust: %s", __func__, ssh_err(r)); | - |
3867 | packet_disconnect("Invalid window adjust message"); | - |
3868 | } never executed: end of block | 0 |
3869 | do { int _len = ssh_packet_remaining(ssh); if (_len > 0TRUE | never evaluated | FALSE | never evaluated |
) { logit("Packet integrity error (%d bytes remaining) at %s:%d", _len ,__FILE__, 3204); ssh_packet_disconnect(ssh, "Packet integrity error."); }never executed: end of block } while (0); | 0 |
3870 | debug2("channel %d: rcvd adjust %u", c->self, adjust); | - |
3871 | if ((TRUE | never evaluated | FALSE | never evaluated |
new_rwin = c->remote_window + adjust) < c->remote_windowTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3872 | fatal("channel %d: adjust %u overflows remote window %u", | - |
3873 | c->self, adjust, c->remote_window); | - |
3874 | } never executed: end of block | 0 |
3875 | c->remote_window = new_rwin; | - |
3876 | return never executed: return 0; 0;never executed: return 0; | 0 |
3877 | } | - |
3878 | | - |
3879 | int | - |
3880 | channel_input_status_confirm(int type, u_int32_t seq, struct ssh *ssh) | - |
3881 | { | - |
3882 | int id = channel_parse_id(ssh, __func__, "status confirm"); | - |
3883 | Channel *c; | - |
3884 | struct channel_confirm *cc; | - |
3885 | | - |
3886 | | - |
3887 | ssh_packet_set_alive_timeouts(active_state, (0)); | - |
3888 | | - |
3889 | debug2("%s: type %d id %d", __func__, type, id); | - |
3890 | | - |
3891 | if ((TRUE | never evaluated | FALSE | never evaluated |
c = channel_lookup(ssh, id)) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3892 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3893 | ) { | - |
3894 | logit("%s: %d: unknown", __func__, id); | - |
3895 | return never executed: return 0; 0;never executed: return 0; | 0 |
3896 | } | - |
3897 | if (channel_proxy_upstream(c, type, seq, ssh)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3898 | return never executed: return 0; 0;never executed: return 0; | 0 |
3899 | do { int _len = ssh_packet_remaining(ssh); if (_len > 0TRUE | never evaluated | FALSE | never evaluated |
) { logit("Packet integrity error (%d bytes remaining) at %s:%d", _len ,__FILE__, 3232); ssh_packet_disconnect(ssh, "Packet integrity error."); }never executed: end of block } while (0); | 0 |
3900 | if ((TRUE | never evaluated | FALSE | never evaluated |
cc = ((&c->status_confirms)->tqh_first)) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3901 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3902 | ) | - |
3903 | return never executed: return 0; 0;never executed: return 0; | 0 |
3904 | cc->cb(ssh, type, c, cc->ctx); | - |
3905 | do { if (((TRUE | never evaluated | FALSE | never evaluated |
cc)->entry.tqe_next) != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3906 | ((TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3907 | ) ( never executed: (cc)->entry.tqe_next->entry.tqe_prev = (cc)->entry.tqe_prev; cc)->entry.tqe_next->entry.tqe_prev = (cc)->entry.tqe_prev;never executed: (cc)->entry.tqe_next->entry.tqe_prev = (cc)->entry.tqe_prev; else (never executed: (&c->status_confirms)->tqh_last = (cc)->entry.tqe_prev; &c->status_confirms)->tqh_last = (cc)->entry.tqe_prev;never executed: (&c->status_confirms)->tqh_last = (cc)->entry.tqe_prev; *(cc)->entry.tqe_prev = (cc)->entry.tqe_next; ; ; } while (0); | 0 |
3908 | explicit_bzero(cc, sizeof(*cc)); | - |
3909 | free(cc); | - |
3910 | return never executed: return 0; 0;never executed: return 0; | 0 |
3911 | } | - |
3912 | | - |
3913 | | - |
3914 | | - |
3915 | void | - |
3916 | channel_set_af(struct ssh *ssh, int af) | - |
3917 | { | - |
3918 | ssh->chanctxt->IPv4or6 = af; | - |
3919 | } never executed: end of block | 0 |
3920 | static const char * | - |
3921 | channel_fwd_bind_addr(const char *listen_addr, int *wildcardp, | - |
3922 | int is_client, struct ForwardOptions *fwd_opts) | - |
3923 | { | - |
3924 | const char *addr = | - |
3925 | ((void *)0) | - |
3926 | ; | - |
3927 | int wildcard = 0; | - |
3928 | | - |
3929 | if (listen_addr == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3930 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3931 | ) { | - |
3932 | | - |
3933 | if (fwd_opts->gateway_portsTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
3934 | wildcard = 1; never executed: wildcard = 1; | 0 |
3935 | } never executed: end of block else if (fwd_opts->gateway_portsTRUE | never evaluated | FALSE | never evaluated |
|| is_clientTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
3936 | if (((TRUE | never evaluated | FALSE | never evaluated |
datafellows & 0x01000000)TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
3937 | | - |
3938 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3939 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3940 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3941 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3942 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3943 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3944 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3945 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3946 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3947 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3948 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3949 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3950 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3951 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3952 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3953 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3954 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3955 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3956 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3957 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3958 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3959 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3960 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3961 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3962 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3963 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3964 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3965 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3966 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3967 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3968 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3969 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3970 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3971 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3972 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3973 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3974 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3975 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3976 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3977 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3978 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3979 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3980 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3981 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3982 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3983 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3984 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( listen_addr ))[3] - __s2[3]); | 0 |
3985 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( listen_addr ))[3] - __s2[3]); | 0 |
3986 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3987 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3988 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3989 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3990 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3991 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3992 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3993 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3994 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3995 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3996 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3997 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
3998 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
3999 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4000 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4001 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4002 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4003 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4004 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4005 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4006 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4007 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4008 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4009 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4010 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4011 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4012 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "0.0.0.0" ))[3] - __s2[3]); | 0 |
4013 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "0.0.0.0" ))[3] - __s2[3]); | 0 |
4014 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4015 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4016 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4017 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4018 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4019 | == 0TRUE | never evaluated | FALSE | never evaluated |
&& is_client == 0TRUE | never evaluated | FALSE | never evaluated |
) || | 0 |
4020 | *TRUE | never evaluated | FALSE | never evaluated |
listen_addr == '\0'TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
4021 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4022 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4023 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4024 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4025 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4026 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4027 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4028 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4029 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4030 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4031 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4032 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4033 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4034 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4035 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4036 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4037 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4038 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4039 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4040 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4041 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4042 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4043 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4044 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4045 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4046 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4047 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4048 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4049 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4050 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4051 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4052 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4053 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4054 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4055 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4056 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4057 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4058 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4059 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4060 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4061 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4062 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4063 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4064 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4065 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4066 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4067 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( listen_addr ))[3] - __s2[3]); | 0 |
4068 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( listen_addr ))[3] - __s2[3]); | 0 |
4069 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4070 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4071 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4072 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4073 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4074 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4075 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4076 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4077 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4078 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4079 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4080 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4081 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4082 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4083 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4084 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4085 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4086 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4087 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4088 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4089 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4090 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4091 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4092 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4093 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4094 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4095 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "*" ))[3] - __s2[3]); | 0 |
4096 | "*"TRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "*" ))[3] - __s2[3]); | 0 |
4097 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4098 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4099 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4100 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4101 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4102 | == 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
4103 | (!is_clientTRUE | never evaluated | FALSE | never evaluated |
&& fwd_opts->gateway_ports == 1TRUE | never evaluated | FALSE | never evaluated |
)) { | 0 |
4104 | wildcard = 1; | - |
4105 | | - |
4106 | | - |
4107 | | - |
4108 | | - |
4109 | if (*TRUE | never evaluated | FALSE | never evaluated |
listen_addr != '\0'TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
4110 | | - |
4111 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4112 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4113 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4114 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4115 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4116 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4117 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4118 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4119 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4120 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4121 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4122 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4123 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4124 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4125 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4126 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4127 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4128 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4129 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4130 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4131 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4132 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4133 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4134 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4135 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4136 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4137 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4138 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4139 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4140 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4141 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4142 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4143 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4144 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4145 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4146 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4147 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4148 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4149 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4150 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4151 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4152 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4153 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4154 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4155 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4156 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4157 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( listen_addr ))[3] - __s2[3]); | 0 |
4158 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( listen_addr ))[3] - __s2[3]); | 0 |
4159 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4160 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4161 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4162 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4163 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4164 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4165 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4166 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4167 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4168 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4169 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4170 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4171 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4172 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4173 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4174 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4175 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4176 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4177 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4178 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4179 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4180 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4181 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4182 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4183 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4184 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4185 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "0.0.0.0" ))[3] - __s2[3]); | 0 |
4186 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "0.0.0.0" ))[3] - __s2[3]); | 0 |
4187 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4188 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4189 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4190 | "0.0.0.0"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4191 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4192 | != 0TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
4193 | | - |
4194 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4195 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4196 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4197 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4198 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4199 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4200 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4201 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4202 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4203 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4204 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4205 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4206 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4207 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4208 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4209 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4210 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4211 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4212 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4213 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4214 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4215 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4216 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4217 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4218 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4219 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4220 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4221 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4222 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4223 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4224 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4225 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4226 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4227 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4228 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4229 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4230 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4231 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4232 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4233 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4234 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4235 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4236 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4237 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4238 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4239 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4240 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( listen_addr ))[3] - __s2[3]); | 0 |
4241 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( listen_addr ))[3] - __s2[3]); | 0 |
4242 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4243 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4244 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4245 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4246 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4247 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4248 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4249 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4250 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4251 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4252 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4253 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4254 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4255 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4256 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4257 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4258 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4259 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4260 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4261 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4262 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4263 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4264 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4265 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4266 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4267 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4268 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "*" ))[3] - __s2[3]); | 0 |
4269 | "*"TRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "*" ))[3] - __s2[3]); | 0 |
4270 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4271 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4272 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4273 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4274 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4275 | != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
4276 | packet_send_debug("Forwarding listen address " | - |
4277 | "\"%s\" overridden by server " | - |
4278 | "GatewayPorts", listen_addr); | - |
4279 | } never executed: end of block | 0 |
4280 | } never executed: end of block else if ( | 0 |
4281 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4282 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4283 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4284 | "localhost"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4285 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4286 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4287 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4288 | "localhost"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4289 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4290 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4291 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4292 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4293 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4294 | "localhost"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4295 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4296 | "localhost"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4297 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4298 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4299 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4300 | "localhost"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4301 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4302 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4303 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4304 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4305 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4306 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4307 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4308 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4309 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4310 | "localhost"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4311 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4312 | "localhost"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4313 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4314 | "localhost"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4315 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4316 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4317 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4318 | "localhost"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4319 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4320 | "localhost"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4321 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4322 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4323 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4324 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4325 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4326 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4327 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( listen_addr ))[3] - __s2[3]); | 0 |
4328 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( listen_addr ))[3] - __s2[3]); | 0 |
4329 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4330 | "localhost"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4331 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4332 | "localhost"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4333 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4334 | "localhost"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4335 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4336 | "localhost"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4337 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4338 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4339 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4340 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4341 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4342 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4343 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4344 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4345 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4346 | "localhost"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4347 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4348 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4349 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4350 | "localhost"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4351 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4352 | "localhost"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4353 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4354 | "localhost"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4355 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "localhost" ))[3] - __s2[3]); | 0 |
4356 | "localhost"TRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "localhost" ))[3] - __s2[3]); | 0 |
4357 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4358 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4359 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4360 | "localhost"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4361 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4362 | != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
4363 | | - |
4364 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4365 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4366 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4367 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4368 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4369 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4370 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4371 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4372 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4373 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4374 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4375 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4376 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4377 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4378 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4379 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4380 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4381 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4382 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4383 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4384 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4385 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4386 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4387 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4388 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4389 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4390 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4391 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4392 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4393 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4394 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4395 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4396 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4397 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4398 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4399 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4400 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4401 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4402 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4403 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4404 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4405 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4406 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4407 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4408 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4409 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4410 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( listen_addr ))[3] - __s2[3]); | 0 |
4411 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( listen_addr ))[3] - __s2[3]); | 0 |
4412 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4413 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4414 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4415 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4416 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4417 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4418 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4419 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4420 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4421 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4422 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4423 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4424 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4425 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4426 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4427 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4428 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4429 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4430 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4431 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4432 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4433 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4434 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4435 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4436 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4437 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4438 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "127.0.0.1" ))[3] - __s2[3]); | 0 |
4439 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "127.0.0.1" ))[3] - __s2[3]); | 0 |
4440 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4441 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4442 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4443 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4444 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4445 | == 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
4446 | | - |
4447 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4448 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4449 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4450 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4451 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4452 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4453 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4454 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4455 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4456 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4457 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4458 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4459 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4460 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4461 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4462 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4463 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4464 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4465 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4466 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4467 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4468 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4469 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4470 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4471 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4472 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4473 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4474 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4475 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4476 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4477 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4478 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4479 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4480 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4481 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4482 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4483 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4484 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4485 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4486 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4487 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4488 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4489 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4490 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4491 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4492 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4493 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( listen_addr ))[3] - __s2[3]); | 0 |
4494 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( listen_addr ))[3] - __s2[3]); | 0 |
4495 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4496 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4497 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4498 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4499 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4500 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4501 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4502 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4503 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4504 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4505 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4506 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4507 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4508 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4509 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4510 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4511 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4512 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4513 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4514 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4515 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4516 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4517 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4518 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4519 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4520 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4521 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "::1" ))[3] - __s2[3]); | 0 |
4522 | "::1"TRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "::1" ))[3] - __s2[3]); | 0 |
4523 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4524 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4525 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4526 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4527 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4528 | == 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
4529 | | - |
4530 | addr = listen_addr; | - |
4531 | } never executed: end of block | 0 |
4532 | } never executed: end of block else if ( | 0 |
4533 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4534 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4535 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4536 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4537 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4538 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4539 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4540 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4541 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4542 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4543 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4544 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4545 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4546 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4547 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4548 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4549 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4550 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4551 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4552 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4553 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4554 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4555 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4556 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4557 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4558 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4559 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4560 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4561 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4562 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4563 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4564 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4565 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4566 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4567 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4568 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4569 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4570 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4571 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4572 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4573 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4574 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4575 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4576 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4577 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4578 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4579 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( listen_addr ))[3] - __s2[3]); | 0 |
4580 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( listen_addr ))[3] - __s2[3]); | 0 |
4581 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4582 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4583 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4584 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4585 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4586 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4587 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4588 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4589 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4590 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4591 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4592 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4593 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4594 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4595 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4596 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4597 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4598 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4599 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4600 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4601 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4602 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4603 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4604 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4605 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4606 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4607 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "127.0.0.1" ))[3] - __s2[3]); | 0 |
4608 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "127.0.0.1" ))[3] - __s2[3]); | 0 |
4609 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4610 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4611 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4612 | "127.0.0.1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4613 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4614 | == 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
4615 | | - |
4616 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4617 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4618 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4619 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4620 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4621 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4622 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4623 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4624 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4625 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4626 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4627 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4628 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4629 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4630 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4631 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4632 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4633 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4634 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4635 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4636 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4637 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4638 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4639 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4640 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4641 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4642 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4643 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4644 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4645 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4646 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4647 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4648 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4649 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4650 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4651 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4652 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4653 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4654 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4655 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4656 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4657 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4658 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4659 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4660 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4661 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4662 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( listen_addr ))[3] - __s2[3]); | 0 |
4663 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( listen_addr ))[3] - __s2[3]); | 0 |
4664 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4665 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4666 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4667 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4668 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4669 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4670 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4671 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4672 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4673 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4674 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4675 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4676 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4677 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4678 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4679 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4680 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4681 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4682 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4683 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4684 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4685 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4686 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4687 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4688 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4689 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4690 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "::1" ))[3] - __s2[3]); | 0 |
4691 | "::1"TRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "::1" ))[3] - __s2[3]); | 0 |
4692 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4693 | listen_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
4694 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4695 | "::1"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4696 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4697 | == 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
4698 | | - |
4699 | | - |
4700 | | - |
4701 | | - |
4702 | | - |
4703 | addr = listen_addr; | - |
4704 | } never executed: end of block | 0 |
4705 | if (wildcardp != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4706 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4707 | ) | - |
4708 | * never executed: *wildcardp = wildcard; wildcardp = wildcard;never executed: *wildcardp = wildcard; | 0 |
4709 | return never executed: return addr; addr;never executed: return addr; | 0 |
4710 | } | - |
4711 | | - |
4712 | static int | - |
4713 | channel_setup_fwd_listener_tcpip(struct ssh *ssh, int type, | - |
4714 | struct Forward *fwd, int *allocated_listen_port, | - |
4715 | struct ForwardOptions *fwd_opts) | - |
4716 | { | - |
4717 | Channel *c; | - |
4718 | int sock, r, success = 0, wildcard = 0, is_client; | - |
4719 | struct addrinfo hints, *ai, *aitop; | - |
4720 | const char *host, *addr; | - |
4721 | char ntop[ | - |
4722 | 1025 | - |
4723 | ], strport[ | - |
4724 | 32 | - |
4725 | ]; | - |
4726 | in_port_t *lport_p; | - |
4727 | | - |
4728 | is_client = (type == 2); | - |
4729 | | - |
4730 | if (is_clientTRUE | never evaluated | FALSE | never evaluated |
&& fwd->connect_path != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4731 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4732 | ) { | - |
4733 | host = fwd->connect_path; | - |
4734 | } never executed: end of block else { | 0 |
4735 | host = (TRUE | never evaluated | FALSE | never evaluated |
type == 11)TRUE | never evaluated | FALSE | never evaluated |
? | 0 |
4736 | fwd->listen_host : fwd->connect_host; | - |
4737 | if (host == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4738 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4739 | ) { | - |
4740 | error("No forward host name."); | - |
4741 | return never executed: return 0; 0;never executed: return 0; | 0 |
4742 | } | - |
4743 | if (strlen(host) >= TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4744 | 1025TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4745 | ) { | - |
4746 | error("Forward host name too long."); | - |
4747 | return never executed: return 0; 0;never executed: return 0; | 0 |
4748 | } | - |
4749 | } never executed: end of block | 0 |
4750 | | - |
4751 | | - |
4752 | addr = channel_fwd_bind_addr(fwd->listen_host, &wildcard, | - |
4753 | is_client, fwd_opts); | - |
4754 | debug3("%s: type %d wildcard %d addr %s", __func__, | - |
4755 | type, wildcard, (addr == | - |
4756 | ((void *)0) | - |
4757 | ) ? "NULL" : addr); | - |
4758 | | - |
4759 | | - |
4760 | | - |
4761 | | - |
4762 | | - |
4763 | memset(&hints, 0, sizeof(hints)); | - |
4764 | hints.ai_family = ssh->chanctxt->IPv4or6; | - |
4765 | hints.ai_flags = wildcardTRUE | never evaluated | FALSE | never evaluated |
? | 0 |
4766 | 0x0001 | - |
4767 | : 0; | - |
4768 | hints.ai_socktype = | - |
4769 | SOCK_STREAM | - |
4770 | ; | - |
4771 | snprintf(strport, sizeof strport, "%d", fwd->listen_port); | - |
4772 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = getaddrinfo(addr, strport, &hints, &aitop)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
4773 | if (addr == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4774 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4775 | ) { | - |
4776 | | - |
4777 | packet_disconnect("getaddrinfo: fatal error: %s", | - |
4778 | ssh_gai_strerror(r)); | - |
4779 | } never executed: end of block else { | 0 |
4780 | error("%s: getaddrinfo(%.64s): %s", __func__, addr, | - |
4781 | ssh_gai_strerror(r)); | - |
4782 | } never executed: end of block | 0 |
4783 | return never executed: return 0; 0;never executed: return 0; | 0 |
4784 | } | - |
4785 | if (allocated_listen_port != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4786 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4787 | ) | - |
4788 | * never executed: *allocated_listen_port = 0; allocated_listen_port = 0;never executed: *allocated_listen_port = 0; | 0 |
4789 | for (ai = aitop; aiTRUE | never evaluated | FALSE | never evaluated |
; ai = ai->ai_next) { | 0 |
4790 | switch (ai->ai_family) { | - |
4791 | case never executed: case 2 : never executed: case 2 : | 0 |
4792 | 2 never executed: case 2 : | 0 |
4793 | : never executed: case 2 : | 0 |
4794 | lport_p = &((struct sockaddr_in *)ai->ai_addr)-> | - |
4795 | sin_port; | - |
4796 | break; never executed: break; | 0 |
4797 | case never executed: case 10 : never executed: case 10 : | 0 |
4798 | 10 never executed: case 10 : | 0 |
4799 | : never executed: case 10 : | 0 |
4800 | lport_p = &((struct sockaddr_in6 *)ai->ai_addr)-> | - |
4801 | sin6_port; | - |
4802 | break; never executed: break; | 0 |
4803 | default never executed: default: :never executed: default: | 0 |
4804 | continue; never executed: continue; | 0 |
4805 | } | - |
4806 | | - |
4807 | | - |
4808 | | - |
4809 | | - |
4810 | if (type == 11TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
4811 | fwd->listen_port == 0TRUE | never evaluated | FALSE | never evaluated |
&& allocated_listen_port != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4812 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4813 | && | - |
4814 | *TRUE | never evaluated | FALSE | never evaluated |
allocated_listen_port > 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
4815 | * never executed: *lport_p = (__extension__ ({ unsigned short int __v, __x = (unsigned short int) ( *allocated_listen_port ); if (__builtin_constant_p (__x)) __v = ((unsigned short int) ((((__x) >> 8) & 0xff) | (((__x) & 0xff) << 8))); else __asm__ ("rorw $8, %w0" : "=r" (__v) : "0" (__x) : "cc"); __v; })) ; lport_p = never executed: *lport_p = (__extension__ ({ unsigned short int __v, __x = (unsigned short int) ( *allocated_listen_port ); if (__builtin_constant_p (__x)) __v = ((unsigned short int) ((((__x) >> 8) & 0xff) | (((__x) & 0xff) << 8))); else __asm__ ("rorw $8, %w0" : "=r" (__v) : "0" (__x) : "cc"); __v; })) ; | 0 |
4816 | (__extension__ ({ unsigned short int __v, __x = (unsigned short int) ( never executed: *lport_p = (__extension__ ({ unsigned short int __v, __x = (unsigned short int) ( *allocated_listen_port ); if (__builtin_constant_p (__x)) __v = ((unsigned short int) ((((__x) >> 8) & 0xff) | (((__x) & 0xff) << 8))); else __asm__ ("rorw $8, %w0" : "=r" (__v) : "0" (__x) : "cc"); __v; })) ; | 0 |
4817 | *allocated_listen_port never executed: *lport_p = (__extension__ ({ unsigned short int __v, __x = (unsigned short int) ( *allocated_listen_port ); if (__builtin_constant_p (__x)) __v = ((unsigned short int) ((((__x) >> 8) & 0xff) | (((__x) & 0xff) << 8))); else __asm__ ("rorw $8, %w0" : "=r" (__v) : "0" (__x) : "cc"); __v; })) ; | 0 |
4818 | ); if (__builtin_constant_p (__x)TRUE | never evaluated | FALSE | never evaluated |
) __v = ((unsigned short int) ((((__x) >> 8) & 0xff) | (((__x) & 0xff) << 8)));never executed: __v = ((unsigned short int) ((((__x) >> 8) & 0xff) | (((__x) & 0xff) << 8))); else __asm__never executed: __asm__ ("rorw $8, %w0" : "=r" (__v) : "0" (__x) : "cc"); ("rorw $8, %w0" : "=r" (__v) : "0" (__x) : "cc");never executed: __asm__ ("rorw $8, %w0" : "=r" (__v) : "0" (__x) : "cc"); __v; }))never executed: *lport_p = (__extension__ ({ unsigned short int __v, __x = (unsigned short int) ( *allocated_listen_port ); if (__builtin_constant_p (__x)) __v = ((unsigned short int) ((((__x) >> 8) & 0xff) | (((__x) & 0xff) << 8))); else __asm__ ("rorw $8, %w0" : "=r" (__v) : "0" (__x) : "cc"); __v; })) ; | 0 |
4819 | ; never executed: *lport_p = (__extension__ ({ unsigned short int __v, __x = (unsigned short int) ( *allocated_listen_port ); if (__builtin_constant_p (__x)) __v = ((unsigned short int) ((((__x) >> 8) & 0xff) | (((__x) & 0xff) << 8))); else __asm__ ("rorw $8, %w0" : "=r" (__v) : "0" (__x) : "cc"); __v; })) ; | 0 |
4820 | | - |
4821 | if (getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop, sizeof(ntop),TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4822 | strport, sizeof(strport),TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4823 | TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4824 | 1TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4825 | |TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4826 | 2TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4827 | ) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
4828 | error("%s: getnameinfo failed", __func__); | - |
4829 | continue; never executed: continue; | 0 |
4830 | } | - |
4831 | | - |
4832 | sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); | - |
4833 | if (sock < 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
4834 | | - |
4835 | verbose("socket [%s]:%s: %.100s", ntop, strport, | - |
4836 | strerror( | - |
4837 | (*__errno_location ()) | - |
4838 | )); | - |
4839 | continue; never executed: continue; | 0 |
4840 | } | - |
4841 | | - |
4842 | set_reuseaddr(sock); | - |
4843 | if (ai->ai_family == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4844 | 10TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4845 | ) | - |
4846 | sock_set_v6only(sock); never executed: sock_set_v6only(sock); | 0 |
4847 | | - |
4848 | debug("Local forwarding listening on %s port %s.", | - |
4849 | ntop, strport); | - |
4850 | | - |
4851 | | - |
4852 | if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
4853 | | - |
4854 | | - |
4855 | | - |
4856 | | - |
4857 | if (!ai->ai_nextTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
4858 | error("bind [%s]:%s: %.100s", never executed: error("bind [%s]:%s: %.100s", ntop, strport, strerror( (*__errno_location ()) )); | 0 |
4859 | ntop, strport, strerror( never executed: error("bind [%s]:%s: %.100s", ntop, strport, strerror( (*__errno_location ()) )); | 0 |
4860 | (*__errno_location ()) never executed: error("bind [%s]:%s: %.100s", ntop, strport, strerror( (*__errno_location ()) )); | 0 |
4861 | )); never executed: error("bind [%s]:%s: %.100s", ntop, strport, strerror( (*__errno_location ()) )); | 0 |
4862 | else | - |
4863 | verbose("bind [%s]:%s: %.100s", never executed: verbose("bind [%s]:%s: %.100s", ntop, strport, strerror( (*__errno_location ()) )); | 0 |
4864 | ntop, strport, strerror( never executed: verbose("bind [%s]:%s: %.100s", ntop, strport, strerror( (*__errno_location ()) )); | 0 |
4865 | (*__errno_location ()) never executed: verbose("bind [%s]:%s: %.100s", ntop, strport, strerror( (*__errno_location ()) )); | 0 |
4866 | )); never executed: verbose("bind [%s]:%s: %.100s", ntop, strport, strerror( (*__errno_location ()) )); | 0 |
4867 | | - |
4868 | close(sock); | - |
4869 | continue; never executed: continue; | 0 |
4870 | } | - |
4871 | | - |
4872 | if (listen(sock, 128) < 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
4873 | error("listen: %.100s", strerror( | - |
4874 | (*__errno_location ()) | - |
4875 | )); | - |
4876 | error("listen [%s]:%s: %.100s", ntop, strport, | - |
4877 | strerror( | - |
4878 | (*__errno_location ()) | - |
4879 | )); | - |
4880 | close(sock); | - |
4881 | continue; never executed: continue; | 0 |
4882 | } | - |
4883 | | - |
4884 | | - |
4885 | | - |
4886 | | - |
4887 | | - |
4888 | if (type == 11TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
4889 | fwd->listen_port == 0TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
4890 | allocated_listen_port != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4891 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4892 | && | - |
4893 | *TRUE | never evaluated | FALSE | never evaluated |
allocated_listen_port == 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
4894 | *allocated_listen_port = get_local_port(sock); | - |
4895 | debug("Allocated listen port %d", | - |
4896 | *allocated_listen_port); | - |
4897 | } never executed: end of block | 0 |
4898 | | - |
4899 | | - |
4900 | c = channel_new(ssh, "port listener", type, sock, sock, -1, | - |
4901 | (64*(32*1024)), (32*1024), | - |
4902 | 0, "port listener", 1); | - |
4903 | c->path = xstrdup(host); | - |
4904 | c->host_port = fwd->connect_port; | - |
4905 | c->listening_addr = addr == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4906 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4907 | ? | - |
4908 | ((void *)0) | - |
4909 | : xstrdup(addr); | - |
4910 | if (fwd->listen_port == 0TRUE | never evaluated | FALSE | never evaluated |
&& allocated_listen_port != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4911 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4912 | && | - |
4913 | !(datafellows & 0x08000000)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
4914 | c->listening_port = *allocated_listen_port; never executed: c->listening_port = *allocated_listen_port; | 0 |
4915 | else | - |
4916 | c->listening_port = fwd->listen_port; never executed: c->listening_port = fwd->listen_port; | 0 |
4917 | success = 1; | - |
4918 | } never executed: end of block | 0 |
4919 | if (success == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
4920 | error("%s: cannot listen to port: %d", __func__, never executed: error("%s: cannot listen to port: %d", __func__, fwd->listen_port); | 0 |
4921 | fwd->listen_port); never executed: error("%s: cannot listen to port: %d", __func__, fwd->listen_port); | 0 |
4922 | freeaddrinfo(aitop); | - |
4923 | return never executed: return success; success;never executed: return success; | 0 |
4924 | } | - |
4925 | | - |
4926 | static int | - |
4927 | channel_setup_fwd_listener_streamlocal(struct ssh *ssh, int type, | - |
4928 | struct Forward *fwd, struct ForwardOptions *fwd_opts) | - |
4929 | { | - |
4930 | struct sockaddr_un sunaddr; | - |
4931 | const char *path; | - |
4932 | Channel *c; | - |
4933 | int port, sock; | - |
4934 | mode_t omask; | - |
4935 | | - |
4936 | switch (type) { | - |
4937 | case never executed: case 18: 18:never executed: case 18: | 0 |
4938 | if (fwd->connect_path != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4939 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4940 | ) { | - |
4941 | if (strlen(fwd->connect_path) > sizeof(sunaddr.sun_path)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
4942 | error("Local connecting path too long: %s", | - |
4943 | fwd->connect_path); | - |
4944 | return never executed: return 0; 0;never executed: return 0; | 0 |
4945 | } | - |
4946 | path = fwd->connect_path; | - |
4947 | port = -2; | - |
4948 | } never executed: end of block else { | 0 |
4949 | if (fwd->connect_host == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4950 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4951 | ) { | - |
4952 | error("No forward host name."); | - |
4953 | return never executed: return 0; 0;never executed: return 0; | 0 |
4954 | } | - |
4955 | if (strlen(fwd->connect_host) >= TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4956 | 1025TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4957 | ) { | - |
4958 | error("Forward host name too long."); | - |
4959 | return never executed: return 0; 0;never executed: return 0; | 0 |
4960 | } | - |
4961 | path = fwd->connect_host; | - |
4962 | port = fwd->connect_port; | - |
4963 | } never executed: end of block | 0 |
4964 | break; never executed: break; | 0 |
4965 | case never executed: case 19: 19:never executed: case 19: | 0 |
4966 | path = fwd->listen_path; | - |
4967 | port = -2; | - |
4968 | break; never executed: break; | 0 |
4969 | default never executed: default: :never executed: default: | 0 |
4970 | error("%s: unexpected channel type %d", __func__, type); | - |
4971 | return never executed: return 0; 0;never executed: return 0; | 0 |
4972 | } | - |
4973 | | - |
4974 | if (fwd->listen_path == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4975 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
4976 | ) { | - |
4977 | error("No forward path name."); | - |
4978 | return never executed: return 0; 0;never executed: return 0; | 0 |
4979 | } | - |
4980 | if (strlen(fwd->listen_path) > sizeof(sunaddr.sun_path)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
4981 | error("Local listening path too long: %s", fwd->listen_path); | - |
4982 | return never executed: return 0; 0;never executed: return 0; | 0 |
4983 | } | - |
4984 | | - |
4985 | debug3("%s: type %d path %s", __func__, type, fwd->listen_path); | - |
4986 | | - |
4987 | | - |
4988 | omask = umask(fwd_opts->streamlocal_bind_mask); | - |
4989 | sock = unix_listener(fwd->listen_path, 128, | - |
4990 | fwd_opts->streamlocal_bind_unlink); | - |
4991 | umask(omask); | - |
4992 | if (sock < 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
4993 | return never executed: return 0; 0;never executed: return 0; | 0 |
4994 | | - |
4995 | debug("Local forwarding listening on path %s.", fwd->listen_path); | - |
4996 | | - |
4997 | | - |
4998 | c = channel_new(ssh, "unix listener", type, sock, sock, -1, | - |
4999 | (64*(32*1024)), (32*1024), | - |
5000 | 0, "unix listener", 1); | - |
5001 | c->path = xstrdup(path); | - |
5002 | c->host_port = port; | - |
5003 | c->listening_port = -2; | - |
5004 | c->listening_addr = xstrdup(fwd->listen_path); | - |
5005 | return never executed: return 1; 1;never executed: return 1; | 0 |
5006 | } | - |
5007 | | - |
5008 | static int | - |
5009 | channel_cancel_rport_listener_tcpip(struct ssh *ssh, | - |
5010 | const char *host, u_short port) | - |
5011 | { | - |
5012 | u_int i; | - |
5013 | int found = 0; | - |
5014 | | - |
5015 | for (i = 0; i < ssh->chanctxt->channels_allocTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
5016 | Channel *c = ssh->chanctxt->channels[i]; | - |
5017 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5018 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5019 | || c->type != 11TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
5020 | continue; never executed: continue; | 0 |
5021 | if ( | - |
5022 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5023 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5024 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5025 | hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5026 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5027 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5028 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5029 | hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5030 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5031 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5032 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5033 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5034 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5035 | hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5036 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5037 | hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5038 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5039 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5040 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5041 | hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5042 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5043 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5044 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5045 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5046 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5047 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5048 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5049 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5050 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5051 | hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5052 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5053 | hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5054 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5055 | hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5056 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5057 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5058 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5059 | hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5060 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5061 | hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5062 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5063 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5064 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5065 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5066 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5067 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5068 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( c->path ))[3] - __s2[3]); | 0 |
5069 | c->pathTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( c->path ))[3] - __s2[3]); | 0 |
5070 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5071 | hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5072 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5073 | hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5074 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5075 | hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5076 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5077 | hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5078 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5079 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5080 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5081 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5082 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5083 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5084 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5085 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5086 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5087 | hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5088 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5089 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5090 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5091 | hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5092 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5093 | hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5094 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5095 | hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5096 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( host ))[3] - __s2[3]); | 0 |
5097 | hostTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( host ))[3] - __s2[3]); | 0 |
5098 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5099 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5100 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5101 | hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5102 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5103 | == 0TRUE | never evaluated | FALSE | never evaluated |
&& c->listening_port == portTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
5104 | debug2("%s: close channel %d", __func__, i); | - |
5105 | channel_free(ssh, c); | - |
5106 | found = 1; | - |
5107 | } never executed: end of block | 0 |
5108 | } never executed: end of block | 0 |
5109 | | - |
5110 | return never executed: return found; found;never executed: return found; | 0 |
5111 | } | - |
5112 | | - |
5113 | static int | - |
5114 | channel_cancel_rport_listener_streamlocal(struct ssh *ssh, const char *path) | - |
5115 | { | - |
5116 | u_int i; | - |
5117 | int found = 0; | - |
5118 | | - |
5119 | for (i = 0; i < ssh->chanctxt->channels_allocTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
5120 | Channel *c = ssh->chanctxt->channels[i]; | - |
5121 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5122 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5123 | || c->type != 19TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
5124 | continue; never executed: continue; | 0 |
5125 | if (c->path == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5126 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5127 | ) | - |
5128 | continue; never executed: continue; | 0 |
5129 | if ( | - |
5130 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5131 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5132 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5133 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5134 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5135 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5136 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5137 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5138 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5139 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5140 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5141 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5142 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5143 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5144 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5145 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5146 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5147 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5148 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5149 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5150 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5151 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5152 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5153 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5154 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5155 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5156 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5157 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5158 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5159 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5160 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5161 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5162 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5163 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5164 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5165 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5166 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5167 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5168 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5169 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5170 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5171 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5172 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5173 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5174 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5175 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5176 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( c->path ))[3] - __s2[3]); | 0 |
5177 | c->pathTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( c->path ))[3] - __s2[3]); | 0 |
5178 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5179 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5180 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5181 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5182 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5183 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5184 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5185 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5186 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5187 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5188 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5189 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5190 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5191 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5192 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5193 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5194 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5195 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5196 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5197 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5198 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5199 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5200 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5201 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5202 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5203 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5204 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( path ))[3] - __s2[3]); | 0 |
5205 | pathTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( path ))[3] - __s2[3]); | 0 |
5206 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5207 | c->pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5208 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5209 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5210 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5211 | == 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
5212 | debug2("%s: close channel %d", __func__, i); | - |
5213 | channel_free(ssh, c); | - |
5214 | found = 1; | - |
5215 | } never executed: end of block | 0 |
5216 | } never executed: end of block | 0 |
5217 | | - |
5218 | return never executed: return found; found;never executed: return found; | 0 |
5219 | } | - |
5220 | | - |
5221 | int | - |
5222 | channel_cancel_rport_listener(struct ssh *ssh, struct Forward *fwd) | - |
5223 | { | - |
5224 | if (fwd->listen_path != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5225 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5226 | ) { | - |
5227 | return never executed: return channel_cancel_rport_listener_streamlocal(ssh, fwd->listen_path); channel_cancel_rport_listener_streamlocal(ssh,never executed: return channel_cancel_rport_listener_streamlocal(ssh, fwd->listen_path); | 0 |
5228 | fwd->listen_path); never executed: return channel_cancel_rport_listener_streamlocal(ssh, fwd->listen_path); | 0 |
5229 | } else { | - |
5230 | return never executed: return channel_cancel_rport_listener_tcpip(ssh, fwd->listen_host, fwd->listen_port); channel_cancel_rport_listener_tcpip(ssh,never executed: return channel_cancel_rport_listener_tcpip(ssh, fwd->listen_host, fwd->listen_port); | 0 |
5231 | fwd->listen_host, fwd->listen_port); never executed: return channel_cancel_rport_listener_tcpip(ssh, fwd->listen_host, fwd->listen_port); | 0 |
5232 | } | - |
5233 | } | - |
5234 | | - |
5235 | static int | - |
5236 | channel_cancel_lport_listener_tcpip(struct ssh *ssh, | - |
5237 | const char *lhost, u_short lport, int cport, | - |
5238 | struct ForwardOptions *fwd_opts) | - |
5239 | { | - |
5240 | u_int i; | - |
5241 | int found = 0; | - |
5242 | const char *addr = channel_fwd_bind_addr(lhost, | - |
5243 | ((void *)0) | - |
5244 | , 1, fwd_opts); | - |
5245 | | - |
5246 | for (i = 0; i < ssh->chanctxt->channels_allocTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
5247 | Channel *c = ssh->chanctxt->channels[i]; | - |
5248 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5249 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5250 | || c->type != 2TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
5251 | continue; never executed: continue; | 0 |
5252 | if (c->listening_port != lportTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
5253 | continue; never executed: continue; | 0 |
5254 | if (cport == -1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
5255 | | - |
5256 | if (c->host_port == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
5257 | continue; never executed: continue; | 0 |
5258 | } never executed: end of block else { | 0 |
5259 | if (c->host_port != cportTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
5260 | continue; never executed: continue; | 0 |
5261 | } never executed: end of block | 0 |
5262 | if ((c->listening_addr == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5263 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5264 | && addr != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5265 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5266 | ) || | - |
5267 | (c->listening_addr != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5268 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5269 | && addr == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5270 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5271 | )) | - |
5272 | continue; never executed: continue; | 0 |
5273 | if (addr == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5274 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5275 | || | - |
5276 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5277 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5278 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5279 | addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5280 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5281 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5282 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5283 | addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5284 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5285 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5286 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5287 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5288 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5289 | addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5290 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5291 | addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5292 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5293 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5294 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5295 | addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5296 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5297 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5298 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5299 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5300 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5301 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5302 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5303 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5304 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5305 | addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5306 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5307 | addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5308 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5309 | addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5310 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5311 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5312 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5313 | addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5314 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5315 | addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5316 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5317 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5318 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5319 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5320 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5321 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5322 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( c->listening_addr ))[3] - __s2[3]); | 0 |
5323 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( c->listening_addr ))[3] - __s2[3]); | 0 |
5324 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5325 | addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5326 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5327 | addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5328 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5329 | addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5330 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5331 | addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5332 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5333 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5334 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5335 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5336 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5337 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5338 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5339 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5340 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5341 | addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5342 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5343 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5344 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5345 | addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5346 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5347 | addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5348 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5349 | addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5350 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( addr ))[3] - __s2[3]); | 0 |
5351 | addrTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( addr ))[3] - __s2[3]); | 0 |
5352 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5353 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5354 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5355 | addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5356 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5357 | == 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
5358 | debug2("%s: close channel %d", __func__, i); | - |
5359 | channel_free(ssh, c); | - |
5360 | found = 1; | - |
5361 | } never executed: end of block | 0 |
5362 | } never executed: end of block | 0 |
5363 | | - |
5364 | return never executed: return found; found;never executed: return found; | 0 |
5365 | } | - |
5366 | | - |
5367 | static int | - |
5368 | channel_cancel_lport_listener_streamlocal(struct ssh *ssh, const char *path) | - |
5369 | { | - |
5370 | u_int i; | - |
5371 | int found = 0; | - |
5372 | | - |
5373 | if (path == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5374 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5375 | ) { | - |
5376 | error("%s: no path specified.", __func__); | - |
5377 | return never executed: return 0; 0;never executed: return 0; | 0 |
5378 | } | - |
5379 | | - |
5380 | for (i = 0; i < ssh->chanctxt->channels_allocTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
5381 | Channel *c = ssh->chanctxt->channels[i]; | - |
5382 | if (c == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5383 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5384 | || c->type != 18TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
5385 | continue; never executed: continue; | 0 |
5386 | if (c->listening_addr == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5387 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5388 | ) | - |
5389 | continue; never executed: continue; | 0 |
5390 | if ( | - |
5391 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5392 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5393 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5394 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5395 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5396 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5397 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5398 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5399 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5400 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5401 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5402 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5403 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5404 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5405 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5406 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5407 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5408 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5409 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5410 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5411 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5412 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5413 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5414 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5415 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5416 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5417 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5418 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5419 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5420 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5421 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5422 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5423 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5424 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5425 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5426 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5427 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5428 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5429 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5430 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5431 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5432 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5433 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5434 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5435 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5436 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5437 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( c->listening_addr ))[3] - __s2[3]); | 0 |
5438 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( c->listening_addr ))[3] - __s2[3]); | 0 |
5439 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5440 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5441 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5442 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5443 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5444 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5445 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5446 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5447 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5448 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5449 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5450 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5451 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5452 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5453 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5454 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5455 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5456 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5457 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5458 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5459 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5460 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5461 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5462 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5463 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5464 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5465 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( path ))[3] - __s2[3]); | 0 |
5466 | pathTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( path ))[3] - __s2[3]); | 0 |
5467 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5468 | c->listening_addrTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5469 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5470 | pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5471 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5472 | == 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
5473 | debug2("%s: close channel %d", __func__, i); | - |
5474 | channel_free(ssh, c); | - |
5475 | found = 1; | - |
5476 | } never executed: end of block | 0 |
5477 | } never executed: end of block | 0 |
5478 | | - |
5479 | return never executed: return found; found;never executed: return found; | 0 |
5480 | } | - |
5481 | | - |
5482 | int | - |
5483 | channel_cancel_lport_listener(struct ssh *ssh, | - |
5484 | struct Forward *fwd, int cport, struct ForwardOptions *fwd_opts) | - |
5485 | { | - |
5486 | if (fwd->listen_path != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5487 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5488 | ) { | - |
5489 | return never executed: return channel_cancel_lport_listener_streamlocal(ssh, fwd->listen_path); channel_cancel_lport_listener_streamlocal(ssh,never executed: return channel_cancel_lport_listener_streamlocal(ssh, fwd->listen_path); | 0 |
5490 | fwd->listen_path); never executed: return channel_cancel_lport_listener_streamlocal(ssh, fwd->listen_path); | 0 |
5491 | } else { | - |
5492 | return never executed: return channel_cancel_lport_listener_tcpip(ssh, fwd->listen_host, fwd->listen_port, cport, fwd_opts); channel_cancel_lport_listener_tcpip(ssh,never executed: return channel_cancel_lport_listener_tcpip(ssh, fwd->listen_host, fwd->listen_port, cport, fwd_opts); | 0 |
5493 | fwd->listen_host, fwd->listen_port, cport, fwd_opts); never executed: return channel_cancel_lport_listener_tcpip(ssh, fwd->listen_host, fwd->listen_port, cport, fwd_opts); | 0 |
5494 | } | - |
5495 | } | - |
5496 | | - |
5497 | | - |
5498 | int | - |
5499 | channel_setup_local_fwd_listener(struct ssh *ssh, | - |
5500 | struct Forward *fwd, struct ForwardOptions *fwd_opts) | - |
5501 | { | - |
5502 | if (fwd->listen_path != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5503 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5504 | ) { | - |
5505 | return never executed: return channel_setup_fwd_listener_streamlocal(ssh, 18, fwd, fwd_opts); channel_setup_fwd_listener_streamlocal(ssh,never executed: return channel_setup_fwd_listener_streamlocal(ssh, 18, fwd, fwd_opts); | 0 |
5506 | 18, fwd, fwd_opts); never executed: return channel_setup_fwd_listener_streamlocal(ssh, 18, fwd, fwd_opts); | 0 |
5507 | } else { | - |
5508 | return never executed: return channel_setup_fwd_listener_tcpip(ssh, 2, fwd, ((void *)0) , fwd_opts); channel_setup_fwd_listener_tcpip(ssh,never executed: return channel_setup_fwd_listener_tcpip(ssh, 2, fwd, ((void *)0) , fwd_opts); | 0 |
5509 | 2, fwd, never executed: return channel_setup_fwd_listener_tcpip(ssh, 2, fwd, ((void *)0) , fwd_opts); | 0 |
5510 | ((void *)0) never executed: return channel_setup_fwd_listener_tcpip(ssh, 2, fwd, ((void *)0) , fwd_opts); | 0 |
5511 | , fwd_opts); never executed: return channel_setup_fwd_listener_tcpip(ssh, 2, fwd, ((void *)0) , fwd_opts); | 0 |
5512 | } | - |
5513 | } | - |
5514 | | - |
5515 | | - |
5516 | static int | - |
5517 | remote_open_match(struct permission *allowed_open, struct Forward *fwd) | - |
5518 | { | - |
5519 | int ret; | - |
5520 | char *lhost; | - |
5521 | | - |
5522 | | - |
5523 | if (fwd->listen_path != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5524 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5525 | ) | - |
5526 | return never executed: return 1; 1;never executed: return 1; | 0 |
5527 | | - |
5528 | if (fwd->listen_host == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5529 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5530 | || allowed_open->listen_host == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5531 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5532 | ) | - |
5533 | return never executed: return 0; 0;never executed: return 0; | 0 |
5534 | | - |
5535 | if (allowed_open->listen_port != 0TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
5536 | allowed_open->listen_port != fwd->listen_portTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
5537 | return never executed: return 0; 0;never executed: return 0; | 0 |
5538 | | - |
5539 | | - |
5540 | lhost = xstrdup(fwd->listen_host); | - |
5541 | lowercase(lhost); | - |
5542 | ret = match_pattern(lhost, allowed_open->listen_host); | - |
5543 | free(lhost); | - |
5544 | | - |
5545 | return never executed: return ret; ret;never executed: return ret; | 0 |
5546 | } | - |
5547 | | - |
5548 | | - |
5549 | static int | - |
5550 | check_rfwd_permission(struct ssh *ssh, struct Forward *fwd) | - |
5551 | { | - |
5552 | struct ssh_channels *sc = ssh->chanctxt; | - |
5553 | struct permission_set *pset = &sc->remote_perms; | - |
5554 | u_int i, permit, permit_adm = 1; | - |
5555 | struct permission *perm; | - |
5556 | | - |
5557 | | - |
5558 | | - |
5559 | permit = pset->all_permitted; | - |
5560 | if (!permitTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
5561 | for (i = 0; i < pset->num_permitted_userTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
5562 | perm = &pset->permitted_user[i]; | - |
5563 | if (remote_open_match(perm, fwd)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
5564 | permit = 1; | - |
5565 | break; never executed: break; | 0 |
5566 | } | - |
5567 | } never executed: end of block | 0 |
5568 | } never executed: end of block | 0 |
5569 | | - |
5570 | if (pset->num_permitted_admin > 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
5571 | permit_adm = 0; | - |
5572 | for (i = 0; i < pset->num_permitted_adminTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
5573 | perm = &pset->permitted_admin[i]; | - |
5574 | if (remote_open_match(perm, fwd)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
5575 | permit_adm = 1; | - |
5576 | break; never executed: break; | 0 |
5577 | } | - |
5578 | } never executed: end of block | 0 |
5579 | } never executed: end of block | 0 |
5580 | | - |
5581 | return never executed: return permit && permit_adm; permitTRUE | never evaluated | FALSE | never evaluated |
&& permit_admTRUE | never evaluated | FALSE | never evaluated |
;never executed: return permit && permit_adm; | 0 |
5582 | } | - |
5583 | | - |
5584 | | - |
5585 | int | - |
5586 | channel_setup_remote_fwd_listener(struct ssh *ssh, struct Forward *fwd, | - |
5587 | int *allocated_listen_port, struct ForwardOptions *fwd_opts) | - |
5588 | { | - |
5589 | if (!check_rfwd_permission(ssh, fwd)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
5590 | packet_send_debug("port forwarding refused"); | - |
5591 | return never executed: return 0; 0;never executed: return 0; | 0 |
5592 | } | - |
5593 | if (fwd->listen_path != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5594 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5595 | ) { | - |
5596 | return never executed: return channel_setup_fwd_listener_streamlocal(ssh, 19, fwd, fwd_opts); channel_setup_fwd_listener_streamlocal(ssh,never executed: return channel_setup_fwd_listener_streamlocal(ssh, 19, fwd, fwd_opts); | 0 |
5597 | 19, fwd, fwd_opts); never executed: return channel_setup_fwd_listener_streamlocal(ssh, 19, fwd, fwd_opts); | 0 |
5598 | } else { | - |
5599 | return never executed: return channel_setup_fwd_listener_tcpip(ssh, 11, fwd, allocated_listen_port, fwd_opts); channel_setup_fwd_listener_tcpip(ssh,never executed: return channel_setup_fwd_listener_tcpip(ssh, 11, fwd, allocated_listen_port, fwd_opts); | 0 |
5600 | 11, fwd, allocated_listen_port, never executed: return channel_setup_fwd_listener_tcpip(ssh, 11, fwd, allocated_listen_port, fwd_opts); | 0 |
5601 | fwd_opts); never executed: return channel_setup_fwd_listener_tcpip(ssh, 11, fwd, allocated_listen_port, fwd_opts); | 0 |
5602 | } | - |
5603 | } | - |
5604 | | - |
5605 | | - |
5606 | | - |
5607 | | - |
5608 | | - |
5609 | static const char * | - |
5610 | channel_rfwd_bind_host(const char *listen_host) | - |
5611 | { | - |
5612 | if (listen_host == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5613 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5614 | ) { | - |
5615 | return never executed: return "localhost"; "localhost";never executed: return "localhost"; | 0 |
5616 | } else if (*TRUE | never evaluated | FALSE | never evaluated |
listen_host == '\0'TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
5617 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5618 | listen_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5619 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5620 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5621 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5622 | listen_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5623 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5624 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5625 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5626 | listen_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5627 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5628 | listen_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5629 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5630 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5631 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5632 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5633 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5634 | listen_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5635 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5636 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5637 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5638 | listen_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5639 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5640 | listen_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5641 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5642 | listen_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5643 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5644 | listen_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5645 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5646 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5647 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5648 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5649 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5650 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5651 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5652 | listen_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5653 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5654 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5655 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5656 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5657 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5658 | listen_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5659 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5660 | listen_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5661 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5662 | listen_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5663 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( listen_host ))[3] - __s2[3]); | 0 |
5664 | listen_hostTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( listen_host ))[3] - __s2[3]); | 0 |
5665 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5666 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5667 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5668 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5669 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5670 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5671 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5672 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5673 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5674 | listen_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5675 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5676 | listen_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5677 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5678 | listen_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5679 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5680 | listen_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5681 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5682 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5683 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5684 | listen_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5685 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5686 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5687 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5688 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5689 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5690 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5691 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "*" ))[3] - __s2[3]); | 0 |
5692 | "*"TRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "*" ))[3] - __s2[3]); | 0 |
5693 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5694 | listen_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5695 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5696 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5697 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5698 | == 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
5699 | return never executed: return ""; "";never executed: return ""; | 0 |
5700 | } else | - |
5701 | return never executed: return listen_host; listen_host;never executed: return listen_host; | 0 |
5702 | } | - |
5703 | | - |
5704 | | - |
5705 | | - |
5706 | | - |
5707 | | - |
5708 | | - |
5709 | | - |
5710 | int | - |
5711 | channel_request_remote_forwarding(struct ssh *ssh, struct Forward *fwd) | - |
5712 | { | - |
5713 | int r, success = 0, idx = -1; | - |
5714 | char *host_to_connect, *listen_host, *listen_path; | - |
5715 | int port_to_connect, listen_port; | - |
5716 | | - |
5717 | | - |
5718 | if (fwd->listen_path != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5719 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5720 | ) { | - |
5721 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_start(ssh, 80)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
5722 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5723 | "streamlocal-forward@openssh.com")) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
5724 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u8(ssh, 1)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
5725 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh, fwd->listen_path)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
5726 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
5727 | (TRUE | never evaluated | FALSE | never evaluated |
r = ssh_packet_write_wait(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
5728 | fatal("%s: request streamlocal: %s", never executed: fatal("%s: request streamlocal: %s", __func__, ssh_err(r)); | 0 |
5729 | __func__, ssh_err(r)); never executed: fatal("%s: request streamlocal: %s", __func__, ssh_err(r)); | 0 |
5730 | } never executed: end of block else { | 0 |
5731 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_start(ssh, 80)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
5732 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh, "tcpip-forward")) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
5733 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u8(ssh, 1)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
5734 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5735 | channel_rfwd_bind_host(fwd->listen_host))) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
5736 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, fwd->listen_port)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
5737 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
5738 | (TRUE | never evaluated | FALSE | never evaluated |
r = ssh_packet_write_wait(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
5739 | fatal("%s: request tcpip-forward: %s", never executed: fatal("%s: request tcpip-forward: %s", __func__, ssh_err(r)); | 0 |
5740 | __func__, ssh_err(r)); never executed: fatal("%s: request tcpip-forward: %s", __func__, ssh_err(r)); | 0 |
5741 | } never executed: end of block | 0 |
5742 | | - |
5743 | success = 1; | - |
5744 | if (successTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
5745 | | - |
5746 | host_to_connect = listen_host = listen_path = | - |
5747 | ((void *)0) | - |
5748 | ; | - |
5749 | port_to_connect = listen_port = 0; | - |
5750 | if (fwd->connect_path != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5751 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5752 | ) { | - |
5753 | host_to_connect = xstrdup(fwd->connect_path); | - |
5754 | port_to_connect = -2; | - |
5755 | } never executed: end of block else { | 0 |
5756 | host_to_connect = xstrdup(fwd->connect_host); | - |
5757 | port_to_connect = fwd->connect_port; | - |
5758 | } never executed: end of block | 0 |
5759 | if (fwd->listen_path != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5760 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5761 | ) { | - |
5762 | listen_path = xstrdup(fwd->listen_path); | - |
5763 | listen_port = -2; | - |
5764 | } never executed: end of block else { | 0 |
5765 | if (fwd->listen_host != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5766 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5767 | ) | - |
5768 | listen_host = xstrdup(fwd->listen_host); never executed: listen_host = xstrdup(fwd->listen_host); | 0 |
5769 | listen_port = fwd->listen_port; | - |
5770 | } never executed: end of block | 0 |
5771 | idx = permission_set_add(ssh, 0x101, (1<<1), | - |
5772 | host_to_connect, port_to_connect, | - |
5773 | listen_host, listen_path, listen_port, | - |
5774 | ((void *)0) | - |
5775 | ); | - |
5776 | } never executed: end of block | 0 |
5777 | return never executed: return idx; idx;never executed: return idx; | 0 |
5778 | } | - |
5779 | | - |
5780 | static int | - |
5781 | open_match(struct permission *allowed_open, const char *requestedhost, | - |
5782 | int requestedport) | - |
5783 | { | - |
5784 | if (allowed_open->host_to_connect == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5785 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5786 | ) | - |
5787 | return never executed: return 0; 0;never executed: return 0; | 0 |
5788 | if (allowed_open->port_to_connect != 0TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
5789 | allowed_open->port_to_connect != requestedportTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
5790 | return never executed: return 0; 0;never executed: return 0; | 0 |
5791 | if ( | - |
5792 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5793 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5794 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5795 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5796 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5797 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5798 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5799 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5800 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5801 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5802 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5803 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5804 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5805 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5806 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5807 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5808 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5809 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5810 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5811 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5812 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5813 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5814 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5815 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5816 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5817 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5818 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5819 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5820 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5821 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5822 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5823 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5824 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5825 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5826 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5827 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5828 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5829 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5830 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5831 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5832 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5833 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5834 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5835 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5836 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5837 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5838 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( allowed_open->host_to_connect ))[3] - __s2[3]); | 0 |
5839 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( allowed_open->host_to_connect ))[3] - __s2[3]); | 0 |
5840 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5841 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5842 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5843 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5844 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5845 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5846 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5847 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5848 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5849 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5850 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5851 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5852 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5853 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5854 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5855 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5856 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5857 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5858 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5859 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5860 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5861 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5862 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5863 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5864 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5865 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5866 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "*" ))[3] - __s2[3]); | 0 |
5867 | "*"TRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "*" ))[3] - __s2[3]); | 0 |
5868 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5869 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5870 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5871 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5872 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5873 | != 0TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
5874 | | - |
5875 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5876 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5877 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5878 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5879 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5880 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5881 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5882 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5883 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5884 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5885 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5886 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5887 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5888 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5889 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5890 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5891 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5892 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5893 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5894 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5895 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5896 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5897 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5898 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5899 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5900 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5901 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5902 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5903 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5904 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5905 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5906 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5907 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5908 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5909 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5910 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5911 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5912 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5913 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5914 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5915 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5916 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5917 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5918 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5919 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5920 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5921 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( allowed_open->host_to_connect ))[3] - __s2[3]); | 0 |
5922 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( allowed_open->host_to_connect ))[3] - __s2[3]); | 0 |
5923 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5924 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5925 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5926 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5927 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5928 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5929 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5930 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5931 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5932 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5933 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5934 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5935 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5936 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5937 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5938 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5939 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5940 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5941 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5942 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5943 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5944 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5945 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5946 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5947 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5948 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5949 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( requestedhost ))[3] - __s2[3]); | 0 |
5950 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( requestedhost ))[3] - __s2[3]); | 0 |
5951 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5952 | allowed_open->host_to_connectTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5953 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5954 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5955 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5956 | != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
5957 | return never executed: return 0; 0;never executed: return 0; | 0 |
5958 | return never executed: return 1; 1;never executed: return 1; | 0 |
5959 | } | - |
5960 | | - |
5961 | | - |
5962 | | - |
5963 | | - |
5964 | | - |
5965 | | - |
5966 | | - |
5967 | static int | - |
5968 | open_listen_match_tcpip(struct permission *allowed_open, | - |
5969 | const char *requestedhost, u_short requestedport, int translate) | - |
5970 | { | - |
5971 | const char *allowed_host; | - |
5972 | | - |
5973 | if (allowed_open->host_to_connect == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5974 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5975 | ) | - |
5976 | return never executed: return 0; 0;never executed: return 0; | 0 |
5977 | if (allowed_open->listen_port != requestedportTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
5978 | return never executed: return 0; 0;never executed: return 0; | 0 |
5979 | if (!translateTRUE | never evaluated | FALSE | never evaluated |
&& allowed_open->listen_host == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5980 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5981 | && | - |
5982 | requestedhost == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5983 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5984 | ) | - |
5985 | return never executed: return 1; 1;never executed: return 1; | 0 |
5986 | allowed_host = translateTRUE | never evaluated | FALSE | never evaluated |
? | 0 |
5987 | channel_rfwd_bind_host(allowed_open->listen_host) : | - |
5988 | allowed_open->listen_host; | - |
5989 | if (allowed_host == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5990 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5991 | || requestedhost == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5992 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5993 | || | - |
5994 | | - |
5995 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5996 | allowed_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5997 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
5998 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
5999 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6000 | allowed_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6001 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6002 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6003 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6004 | allowed_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6005 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6006 | allowed_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6007 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6008 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6009 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6010 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6011 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6012 | allowed_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6013 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6014 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6015 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6016 | allowed_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6017 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6018 | allowed_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6019 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6020 | allowed_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6021 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6022 | allowed_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6023 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6024 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6025 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6026 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6027 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6028 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6029 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6030 | allowed_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6031 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6032 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6033 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6034 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6035 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6036 | allowed_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6037 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6038 | allowed_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6039 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6040 | allowed_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6041 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( allowed_host ))[3] - __s2[3]); | 0 |
6042 | allowed_hostTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( allowed_host ))[3] - __s2[3]); | 0 |
6043 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6044 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6045 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6046 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6047 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6048 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6049 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6050 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6051 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6052 | allowed_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6053 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6054 | allowed_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6055 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6056 | allowed_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6057 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6058 | allowed_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6059 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6060 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6061 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6062 | allowed_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6063 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6064 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6065 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6066 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6067 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6068 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6069 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( requestedhost ))[3] - __s2[3]); | 0 |
6070 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( requestedhost ))[3] - __s2[3]); | 0 |
6071 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6072 | allowed_hostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6073 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6074 | requestedhostTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6075 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6076 | != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
6077 | return never executed: return 0; 0;never executed: return 0; | 0 |
6078 | return never executed: return 1; 1;never executed: return 1; | 0 |
6079 | } | - |
6080 | | - |
6081 | static int | - |
6082 | open_listen_match_streamlocal(struct permission *allowed_open, | - |
6083 | const char *requestedpath) | - |
6084 | { | - |
6085 | if (allowed_open->host_to_connect == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6086 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6087 | ) | - |
6088 | return never executed: return 0; 0;never executed: return 0; | 0 |
6089 | if (allowed_open->listen_port != -2TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
6090 | return never executed: return 0; 0;never executed: return 0; | 0 |
6091 | if (allowed_open->listen_path == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6092 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6093 | || | - |
6094 | | - |
6095 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6096 | allowed_open->listen_pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6097 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6098 | requestedpathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6099 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6100 | allowed_open->listen_pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6101 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6102 | requestedpathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6103 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6104 | allowed_open->listen_pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6105 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6106 | allowed_open->listen_pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6107 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6108 | requestedpathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6109 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6110 | requestedpathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6111 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6112 | allowed_open->listen_pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6113 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6114 | requestedpathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6115 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6116 | allowed_open->listen_pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6117 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6118 | allowed_open->listen_pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6119 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6120 | allowed_open->listen_pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6121 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6122 | allowed_open->listen_pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6123 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6124 | requestedpathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6125 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6126 | requestedpathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6127 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6128 | requestedpathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6129 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6130 | allowed_open->listen_pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6131 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6132 | requestedpathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6133 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6134 | requestedpathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6135 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6136 | allowed_open->listen_pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6137 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6138 | allowed_open->listen_pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6139 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6140 | allowed_open->listen_pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6141 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( allowed_open->listen_path ))[3] - __s2[3]); | 0 |
6142 | allowed_open->listen_pathTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( allowed_open->listen_path ))[3] - __s2[3]); | 0 |
6143 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6144 | requestedpathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6145 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6146 | requestedpathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6147 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6148 | requestedpathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6149 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6150 | requestedpathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6151 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6152 | allowed_open->listen_pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6153 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6154 | allowed_open->listen_pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6155 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6156 | allowed_open->listen_pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6157 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6158 | allowed_open->listen_pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6159 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6160 | requestedpathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6161 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6162 | allowed_open->listen_pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6163 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6164 | requestedpathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6165 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6166 | requestedpathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6167 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6168 | requestedpathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6169 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( requestedpath ))[3] - __s2[3]); | 0 |
6170 | requestedpathTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( requestedpath ))[3] - __s2[3]); | 0 |
6171 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6172 | allowed_open->listen_pathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6173 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6174 | requestedpathTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6175 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6176 | != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
6177 | return never executed: return 0; 0;never executed: return 0; | 0 |
6178 | return never executed: return 1; 1;never executed: return 1; | 0 |
6179 | } | - |
6180 | | - |
6181 | | - |
6182 | | - |
6183 | | - |
6184 | | - |
6185 | static int | - |
6186 | channel_request_rforward_cancel_tcpip(struct ssh *ssh, | - |
6187 | const char *host, u_short port) | - |
6188 | { | - |
6189 | struct ssh_channels *sc = ssh->chanctxt; | - |
6190 | struct permission_set *pset = &sc->local_perms; | - |
6191 | int r; | - |
6192 | u_int i; | - |
6193 | struct permission *perm; | - |
6194 | | - |
6195 | for (i = 0; i < pset->num_permitted_userTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
6196 | perm = &pset->permitted_user[i]; | - |
6197 | if (open_listen_match_tcpip(perm, host, port, 0)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
6198 | break; never executed: break; | 0 |
6199 | perm = | - |
6200 | ((void *)0) | - |
6201 | ; | - |
6202 | } never executed: end of block | 0 |
6203 | if (perm == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6204 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6205 | ) { | - |
6206 | debug("%s: requested forward not found", __func__); | - |
6207 | return never executed: return -1; -1;never executed: return -1; | 0 |
6208 | } | - |
6209 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_start(ssh, 80)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
6210 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh, "cancel-tcpip-forward")) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
6211 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u8(ssh, 0)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
6212 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh, channel_rfwd_bind_host(host))) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
6213 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, port)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
6214 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
6215 | fatal("%s: send cancel: %s", __func__, ssh_err(r)); never executed: fatal("%s: send cancel: %s", __func__, ssh_err(r)); | 0 |
6216 | | - |
6217 | fwd_perm_clear(perm); | - |
6218 | | - |
6219 | return never executed: return 0; 0;never executed: return 0; | 0 |
6220 | } | - |
6221 | | - |
6222 | | - |
6223 | | - |
6224 | | - |
6225 | | - |
6226 | static int | - |
6227 | channel_request_rforward_cancel_streamlocal(struct ssh *ssh, const char *path) | - |
6228 | { | - |
6229 | struct ssh_channels *sc = ssh->chanctxt; | - |
6230 | struct permission_set *pset = &sc->local_perms; | - |
6231 | int r; | - |
6232 | u_int i; | - |
6233 | struct permission *perm; | - |
6234 | | - |
6235 | for (i = 0; i < pset->num_permitted_userTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
6236 | perm = &pset->permitted_user[i]; | - |
6237 | if (open_listen_match_streamlocal(perm, path)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
6238 | break; never executed: break; | 0 |
6239 | perm = | - |
6240 | ((void *)0) | - |
6241 | ; | - |
6242 | } never executed: end of block | 0 |
6243 | if (perm == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6244 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6245 | ) { | - |
6246 | debug("%s: requested forward not found", __func__); | - |
6247 | return never executed: return -1; -1;never executed: return -1; | 0 |
6248 | } | - |
6249 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_start(ssh, 80)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
6250 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6251 | "cancel-streamlocal-forward@openssh.com")) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
6252 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u8(ssh, 0)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
6253 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh, path)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
6254 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
6255 | fatal("%s: send cancel: %s", __func__, ssh_err(r)); never executed: fatal("%s: send cancel: %s", __func__, ssh_err(r)); | 0 |
6256 | | - |
6257 | fwd_perm_clear(perm); | - |
6258 | | - |
6259 | return never executed: return 0; 0;never executed: return 0; | 0 |
6260 | } | - |
6261 | | - |
6262 | | - |
6263 | | - |
6264 | | - |
6265 | int | - |
6266 | channel_request_rforward_cancel(struct ssh *ssh, struct Forward *fwd) | - |
6267 | { | - |
6268 | if (fwd->listen_path != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6269 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6270 | ) { | - |
6271 | return never executed: return channel_request_rforward_cancel_streamlocal(ssh, fwd->listen_path); channel_request_rforward_cancel_streamlocal(ssh,never executed: return channel_request_rforward_cancel_streamlocal(ssh, fwd->listen_path); | 0 |
6272 | fwd->listen_path); never executed: return channel_request_rforward_cancel_streamlocal(ssh, fwd->listen_path); | 0 |
6273 | } else { | - |
6274 | return never executed: return channel_request_rforward_cancel_tcpip(ssh, fwd->listen_host, fwd->listen_port ? fwd->listen_port : fwd->allocated_port); channel_request_rforward_cancel_tcpip(ssh,never executed: return channel_request_rforward_cancel_tcpip(ssh, fwd->listen_host, fwd->listen_port ? fwd->listen_port : fwd->allocated_port); | 0 |
6275 | fwd->listen_host, never executed: return channel_request_rforward_cancel_tcpip(ssh, fwd->listen_host, fwd->listen_port ? fwd->listen_port : fwd->allocated_port); | 0 |
6276 | fwd->listen_port ? fwd->listen_port : fwd->allocated_port); never executed: return channel_request_rforward_cancel_tcpip(ssh, fwd->listen_host, fwd->listen_port ? fwd->listen_port : fwd->allocated_port); | 0 |
6277 | } | - |
6278 | } | - |
6279 | | - |
6280 | | - |
6281 | | - |
6282 | | - |
6283 | | - |
6284 | | - |
6285 | void | - |
6286 | channel_permit_all(struct ssh *ssh, int where) | - |
6287 | { | - |
6288 | struct permission_set *pset = permission_set_get(ssh, where); | - |
6289 | | - |
6290 | if (pset->num_permitted_user == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
6291 | pset->all_permitted = 1; never executed: pset->all_permitted = 1; | 0 |
6292 | } never executed: end of block | 0 |
6293 | | - |
6294 | | - |
6295 | | - |
6296 | | - |
6297 | void | - |
6298 | channel_add_permission(struct ssh *ssh, int who, int where, | - |
6299 | char *host, int port) | - |
6300 | { | - |
6301 | int local = where == (1<<1); | - |
6302 | struct permission_set *pset = permission_set_get(ssh, where); | - |
6303 | | - |
6304 | debug("allow %s forwarding to host %s port %d", | - |
6305 | fwd_ident(who, where), host, port); | - |
6306 | | - |
6307 | | - |
6308 | | - |
6309 | | - |
6310 | permission_set_add(ssh, who, where, | - |
6311 | local ? host : 0, local ? port : 0, | - |
6312 | local ? | - |
6313 | ((void *)0) | - |
6314 | : host, | - |
6315 | ((void *)0) | - |
6316 | , local ? 0 : port, | - |
6317 | ((void *)0) | - |
6318 | ); | - |
6319 | pset->all_permitted = 0; | - |
6320 | } never executed: end of block | 0 |
6321 | | - |
6322 | | - |
6323 | | - |
6324 | | - |
6325 | void | - |
6326 | channel_disable_admin(struct ssh *ssh, int where) | - |
6327 | { | - |
6328 | channel_clear_permission(ssh, 0x100, where); | - |
6329 | permission_set_add(ssh, 0x100, where, | - |
6330 | | - |
6331 | ((void *)0) | - |
6332 | , 0, | - |
6333 | ((void *)0) | - |
6334 | , | - |
6335 | ((void *)0) | - |
6336 | , 0, | - |
6337 | ((void *)0) | - |
6338 | ); | - |
6339 | } never executed: end of block | 0 |
6340 | | - |
6341 | | - |
6342 | | - |
6343 | | - |
6344 | void | - |
6345 | channel_clear_permission(struct ssh *ssh, int who, int where) | - |
6346 | { | - |
6347 | struct permission **permp; | - |
6348 | u_int *npermp; | - |
6349 | | - |
6350 | permission_set_get_array(ssh, who, where, &permp, &npermp); | - |
6351 | *permp = xrecallocarray(*permp, *npermp, 0, sizeof(**permp)); | - |
6352 | *npermp = 0; | - |
6353 | } never executed: end of block | 0 |
6354 | | - |
6355 | | - |
6356 | | - |
6357 | | - |
6358 | | - |
6359 | | - |
6360 | void | - |
6361 | channel_update_permission(struct ssh *ssh, int idx, int newport) | - |
6362 | { | - |
6363 | struct permission_set *pset = &ssh->chanctxt->local_perms; | - |
6364 | | - |
6365 | if (idx < 0TRUE | never evaluated | FALSE | never evaluated |
|| (TRUE | never evaluated | FALSE | never evaluated |
u_int)idx >= pset->num_permitted_userTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6366 | debug("%s: index out of range: %d num_permitted_user %d", | - |
6367 | __func__, idx, pset->num_permitted_user); | - |
6368 | return; never executed: return; | 0 |
6369 | } | - |
6370 | debug("%s allowed port %d for forwarding to host %s port %d", | - |
6371 | newport > 0 ? "Updating" : "Removing", | - |
6372 | newport, | - |
6373 | pset->permitted_user[idx].host_to_connect, | - |
6374 | pset->permitted_user[idx].port_to_connect); | - |
6375 | if (newport <= 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
6376 | fwd_perm_clear(&pset->permitted_user[idx]); never executed: fwd_perm_clear(&pset->permitted_user[idx]); | 0 |
6377 | else { | - |
6378 | pset->permitted_user[idx].listen_port = | - |
6379 | (TRUE | never evaluated | FALSE | never evaluated |
datafellows & 0x08000000)TRUE | never evaluated | FALSE | never evaluated |
? 0 : newport; | 0 |
6380 | } never executed: end of block | 0 |
6381 | } | - |
6382 | | - |
6383 | | - |
6384 | int | - |
6385 | permitopen_port(const char *p) | - |
6386 | { | - |
6387 | int port; | - |
6388 | | - |
6389 | if ( | - |
6390 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6391 | pTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6392 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6393 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6394 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6395 | pTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6396 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6397 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6398 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6399 | pTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6400 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6401 | pTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6402 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6403 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6404 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6405 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6406 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6407 | pTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6408 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6409 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6410 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6411 | pTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6412 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6413 | pTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6414 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6415 | pTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6416 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6417 | pTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6418 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6419 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6420 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6421 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6422 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6423 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6424 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6425 | pTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6426 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6427 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6428 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6429 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6430 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6431 | pTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6432 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6433 | pTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6434 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6435 | pTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6436 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( p ))[3] - __s2[3]); | 0 |
6437 | pTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( p ))[3] - __s2[3]); | 0 |
6438 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6439 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6440 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6441 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6442 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6443 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6444 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6445 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6446 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6447 | pTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6448 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6449 | pTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6450 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6451 | pTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6452 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6453 | pTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6454 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6455 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6456 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6457 | pTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6458 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6459 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6460 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6461 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6462 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6463 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6464 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "*" ))[3] - __s2[3]); | 0 |
6465 | "*"TRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "*" ))[3] - __s2[3]); | 0 |
6466 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6467 | pTRUE | never evaluated | FALSE | never evaluated |
| 0 |
6468 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6469 | "*"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6470 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6471 | == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
6472 | return never executed: return 0; 0;never executed: return 0; | 0 |
6473 | if ((TRUE | never evaluated | FALSE | never evaluated |
port = a2port(p)) > 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
6474 | return never executed: return port; port;never executed: return port; | 0 |
6475 | return never executed: return -1; -1;never executed: return -1; | 0 |
6476 | } | - |
6477 | | - |
6478 | | - |
6479 | static int | - |
6480 | connect_next(struct channel_connect *cctx) | - |
6481 | { | - |
6482 | int sock, saved_errno; | - |
6483 | struct sockaddr_un *sunaddr; | - |
6484 | char ntop[ | - |
6485 | 1025 | - |
6486 | ]; | - |
6487 | char strport[((( | - |
6488 | 32 | - |
6489 | ) > (sizeof(sunaddr->sun_path))) ? ( | - |
6490 | 32 | - |
6491 | ) : (sizeof(sunaddr->sun_path)))]; | - |
6492 | | - |
6493 | for (; cctx->aiTRUE | never evaluated | FALSE | never evaluated |
; cctx->ai = cctx->ai->ai_next) { | 0 |
6494 | switch (cctx->ai->ai_family) { | - |
6495 | case never executed: case 1 : never executed: case 1 : | 0 |
6496 | 1 never executed: case 1 : | 0 |
6497 | : never executed: case 1 : | 0 |
6498 | | - |
6499 | sunaddr = (struct sockaddr_un *)cctx->ai->ai_addr; | - |
6500 | strlcpy(ntop, "unix", sizeof(ntop)); | - |
6501 | strlcpy(strport, sunaddr->sun_path, sizeof(strport)); | - |
6502 | break; never executed: break; | 0 |
6503 | case never executed: case 2 : never executed: case 2 : | 0 |
6504 | 2 never executed: case 2 : | 0 |
6505 | : never executed: case 2 : | 0 |
6506 | case never executed: case 10 : never executed: case 10 : | 0 |
6507 | 10 never executed: case 10 : | 0 |
6508 | : never executed: case 10 : | 0 |
6509 | if (getnameinfo(cctx->ai->ai_addr, cctx->ai->ai_addrlen,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6510 | ntop, sizeof(ntop), strport, sizeof(strport),TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6511 | TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6512 | 1TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6513 | |TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6514 | 2TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6515 | ) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6516 | error("connect_next: getnameinfo failed"); | - |
6517 | continue; never executed: continue; | 0 |
6518 | } | - |
6519 | break; never executed: break; | 0 |
6520 | default never executed: default: :never executed: default: | 0 |
6521 | continue; never executed: continue; | 0 |
6522 | } | - |
6523 | if ((TRUE | never evaluated | FALSE | never evaluated |
sock = socket(cctx->ai->ai_family, cctx->ai->ai_socktype,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6524 | cctx->ai->ai_protocol)) == -1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6525 | if (cctx->ai->ai_next == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6526 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6527 | ) | - |
6528 | error("socket: %.100s", strerror( never executed: error("socket: %.100s", strerror( (*__errno_location ()) )); | 0 |
6529 | (*__errno_location ()) never executed: error("socket: %.100s", strerror( (*__errno_location ()) )); | 0 |
6530 | )); never executed: error("socket: %.100s", strerror( (*__errno_location ()) )); | 0 |
6531 | else | - |
6532 | verbose("socket: %.100s", strerror( never executed: verbose("socket: %.100s", strerror( (*__errno_location ()) )); | 0 |
6533 | (*__errno_location ()) never executed: verbose("socket: %.100s", strerror( (*__errno_location ()) )); | 0 |
6534 | )); never executed: verbose("socket: %.100s", strerror( (*__errno_location ()) )); | 0 |
6535 | continue; never executed: continue; | 0 |
6536 | } | - |
6537 | if (set_nonblock(sock) == -1TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
6538 | fatal("%s: set_nonblock(%d)", __func__, sock); never executed: fatal("%s: set_nonblock(%d)", __func__, sock); | 0 |
6539 | if (connect(sock, cctx->ai->ai_addr,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6540 | cctx->ai->ai_addrlen) == -1TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
6541 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6542 | != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6543 | 115TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6544 | ) { | - |
6545 | debug("connect_next: host %.100s ([%.100s]:%s): " | - |
6546 | "%.100s", cctx->host, ntop, strport, | - |
6547 | strerror( | - |
6548 | (*__errno_location ()) | - |
6549 | )); | - |
6550 | saved_errno = | - |
6551 | (*__errno_location ()) | - |
6552 | ; | - |
6553 | close(sock); | - |
6554 | | - |
6555 | (*__errno_location ()) | - |
6556 | = saved_errno; | - |
6557 | continue; never executed: continue; | 0 |
6558 | } | - |
6559 | if (cctx->ai->ai_family != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6560 | 1TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6561 | ) | - |
6562 | set_nodelay(sock); never executed: set_nodelay(sock); | 0 |
6563 | debug("connect_next: host %.100s ([%.100s]:%s) " | - |
6564 | "in progress, fd=%d", cctx->host, ntop, strport, sock); | - |
6565 | cctx->ai = cctx->ai->ai_next; | - |
6566 | return never executed: return sock; sock;never executed: return sock; | 0 |
6567 | } | - |
6568 | return never executed: return -1; -1;never executed: return -1; | 0 |
6569 | } | - |
6570 | | - |
6571 | static void | - |
6572 | channel_connect_ctx_free(struct channel_connect *cctx) | - |
6573 | { | - |
6574 | free(cctx->host); | - |
6575 | if (cctx->aitopTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6576 | if (cctx->aitop->ai_family == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6577 | 1TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6578 | ) | - |
6579 | free(cctx->aitop); never executed: free(cctx->aitop); | 0 |
6580 | else | - |
6581 | freeaddrinfo(cctx->aitop); never executed: freeaddrinfo(cctx->aitop); | 0 |
6582 | } | - |
6583 | memset(cctx, 0, sizeof(*cctx)); | - |
6584 | } never executed: end of block | 0 |
6585 | | - |
6586 | | - |
6587 | | - |
6588 | | - |
6589 | | - |
6590 | static int | - |
6591 | connect_to_helper(struct ssh *ssh, const char *name, int port, int socktype, | - |
6592 | char *ctype, char *rname, struct channel_connect *cctx, | - |
6593 | int *reason, const char **errmsg) | - |
6594 | { | - |
6595 | struct addrinfo hints; | - |
6596 | int gaierr; | - |
6597 | int sock = -1; | - |
6598 | char strport[ | - |
6599 | 32 | - |
6600 | ]; | - |
6601 | | - |
6602 | if (port == -2TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6603 | struct sockaddr_un *sunaddr; | - |
6604 | struct addrinfo *ai; | - |
6605 | | - |
6606 | if (strlen(name) > sizeof(sunaddr->sun_path)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6607 | error("%.100s: %.100s", name, strerror( | - |
6608 | 36 | - |
6609 | )); | - |
6610 | return never executed: return -1; -1;never executed: return -1; | 0 |
6611 | } | - |
6612 | | - |
6613 | | - |
6614 | | - |
6615 | | - |
6616 | | - |
6617 | | - |
6618 | ai = xmalloc(sizeof(*ai) + sizeof(*sunaddr)); | - |
6619 | memset(ai, 0, sizeof(*ai) + sizeof(*sunaddr)); | - |
6620 | ai->ai_addr = (struct sockaddr *)(ai + 1); | - |
6621 | ai->ai_addrlen = sizeof(*sunaddr); | - |
6622 | ai->ai_family = | - |
6623 | 1 | - |
6624 | ; | - |
6625 | ai->ai_socktype = socktype; | - |
6626 | ai->ai_protocol = | - |
6627 | 0 | - |
6628 | ; | - |
6629 | sunaddr = (struct sockaddr_un *)ai->ai_addr; | - |
6630 | sunaddr->sun_family = | - |
6631 | 1 | - |
6632 | ; | - |
6633 | strlcpy(sunaddr->sun_path, name, sizeof(sunaddr->sun_path)); | - |
6634 | cctx->aitop = ai; | - |
6635 | } never executed: end of block else { | 0 |
6636 | memset(&hints, 0, sizeof(hints)); | - |
6637 | hints.ai_family = ssh->chanctxt->IPv4or6; | - |
6638 | hints.ai_socktype = socktype; | - |
6639 | snprintf(strport, sizeof strport, "%d", port); | - |
6640 | if ((TRUE | never evaluated | FALSE | never evaluated |
gaierr = getaddrinfo(name, strport, &hints, &cctx->aitop))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6641 | != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6642 | if (errmsg != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6643 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6644 | ) | - |
6645 | * never executed: *errmsg = ssh_gai_strerror(gaierr); errmsg = ssh_gai_strerror(gaierr);never executed: *errmsg = ssh_gai_strerror(gaierr); | 0 |
6646 | if (reason != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6647 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6648 | ) | - |
6649 | * never executed: *reason = 2; reason = 2;never executed: *reason = 2; | 0 |
6650 | error("connect_to %.100s: unknown host (%s)", name, | - |
6651 | ssh_gai_strerror(gaierr)); | - |
6652 | return never executed: return -1; -1;never executed: return -1; | 0 |
6653 | } | - |
6654 | } never executed: end of block | 0 |
6655 | | - |
6656 | cctx->host = xstrdup(name); | - |
6657 | cctx->port = port; | - |
6658 | cctx->ai = cctx->aitop; | - |
6659 | | - |
6660 | if ((TRUE | never evaluated | FALSE | never evaluated |
sock = connect_next(cctx)) == -1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6661 | error("connect to %.100s port %d failed: %s", | - |
6662 | name, port, strerror( | - |
6663 | (*__errno_location ()) | - |
6664 | )); | - |
6665 | return never executed: return -1; -1;never executed: return -1; | 0 |
6666 | } | - |
6667 | | - |
6668 | return never executed: return sock; sock;never executed: return sock; | 0 |
6669 | } | - |
6670 | | - |
6671 | | - |
6672 | static Channel * | - |
6673 | connect_to(struct ssh *ssh, const char *host, int port, | - |
6674 | char *ctype, char *rname) | - |
6675 | { | - |
6676 | struct channel_connect cctx; | - |
6677 | Channel *c; | - |
6678 | int sock; | - |
6679 | | - |
6680 | memset(&cctx, 0, sizeof(cctx)); | - |
6681 | sock = connect_to_helper(ssh, host, port, | - |
6682 | SOCK_STREAM | - |
6683 | , ctype, rname, | - |
6684 | &cctx, | - |
6685 | ((void *)0) | - |
6686 | , | - |
6687 | ((void *)0) | - |
6688 | ); | - |
6689 | if (sock == -1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6690 | channel_connect_ctx_free(&cctx); | - |
6691 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 |
6692 | ((void *)0) never executed: return ((void *)0) ; | 0 |
6693 | ; never executed: return ((void *)0) ; | 0 |
6694 | } | - |
6695 | c = channel_new(ssh, ctype, 12, sock, sock, -1, | - |
6696 | (64*(32*1024)), (32*1024), 0, rname, 1); | - |
6697 | c->host_port = port; | - |
6698 | c->path = xstrdup(host); | - |
6699 | c->connect_ctx = cctx; | - |
6700 | | - |
6701 | return never executed: return c; c;never executed: return c; | 0 |
6702 | } | - |
6703 | | - |
6704 | | - |
6705 | | - |
6706 | | - |
6707 | | - |
6708 | Channel * | - |
6709 | channel_connect_by_listen_address(struct ssh *ssh, const char *listen_host, | - |
6710 | u_short listen_port, char *ctype, char *rname) | - |
6711 | { | - |
6712 | struct ssh_channels *sc = ssh->chanctxt; | - |
6713 | struct permission_set *pset = &sc->local_perms; | - |
6714 | u_int i; | - |
6715 | struct permission *perm; | - |
6716 | | - |
6717 | for (i = 0; i < pset->num_permitted_userTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
6718 | perm = &pset->permitted_user[i]; | - |
6719 | if (open_listen_match_tcpip(perm,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6720 | listen_host, listen_port, 1)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6721 | if (perm->downstreamTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
6722 | return never executed: return perm->downstream; perm->downstream;never executed: return perm->downstream; | 0 |
6723 | if (perm->port_to_connect == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
6724 | return never executed: return rdynamic_connect_prepare(ssh, ctype, rname); rdynamic_connect_prepare(ssh,never executed: return rdynamic_connect_prepare(ssh, ctype, rname); | 0 |
6725 | ctype, rname); never executed: return rdynamic_connect_prepare(ssh, ctype, rname); | 0 |
6726 | return never executed: return connect_to(ssh, perm->host_to_connect, perm->port_to_connect, ctype, rname); connect_to(ssh,never executed: return connect_to(ssh, perm->host_to_connect, perm->port_to_connect, ctype, rname); | 0 |
6727 | perm->host_to_connect, perm->port_to_connect, never executed: return connect_to(ssh, perm->host_to_connect, perm->port_to_connect, ctype, rname); | 0 |
6728 | ctype, rname); never executed: return connect_to(ssh, perm->host_to_connect, perm->port_to_connect, ctype, rname); | 0 |
6729 | } | - |
6730 | } never executed: end of block | 0 |
6731 | error("WARNING: Server requests forwarding for unknown listen_port %d", | - |
6732 | listen_port); | - |
6733 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 |
6734 | ((void *)0) never executed: return ((void *)0) ; | 0 |
6735 | ; never executed: return ((void *)0) ; | 0 |
6736 | } | - |
6737 | | - |
6738 | Channel * | - |
6739 | channel_connect_by_listen_path(struct ssh *ssh, const char *path, | - |
6740 | char *ctype, char *rname) | - |
6741 | { | - |
6742 | struct ssh_channels *sc = ssh->chanctxt; | - |
6743 | struct permission_set *pset = &sc->local_perms; | - |
6744 | u_int i; | - |
6745 | struct permission *perm; | - |
6746 | | - |
6747 | for (i = 0; i < pset->num_permitted_userTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
6748 | perm = &pset->permitted_user[i]; | - |
6749 | if (open_listen_match_streamlocal(perm, path)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6750 | return never executed: return connect_to(ssh, perm->host_to_connect, perm->port_to_connect, ctype, rname); connect_to(ssh,never executed: return connect_to(ssh, perm->host_to_connect, perm->port_to_connect, ctype, rname); | 0 |
6751 | perm->host_to_connect, perm->port_to_connect, never executed: return connect_to(ssh, perm->host_to_connect, perm->port_to_connect, ctype, rname); | 0 |
6752 | ctype, rname); never executed: return connect_to(ssh, perm->host_to_connect, perm->port_to_connect, ctype, rname); | 0 |
6753 | } | - |
6754 | } never executed: end of block | 0 |
6755 | error("WARNING: Server requests forwarding for unknown path %.100s", | - |
6756 | path); | - |
6757 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 |
6758 | ((void *)0) never executed: return ((void *)0) ; | 0 |
6759 | ; never executed: return ((void *)0) ; | 0 |
6760 | } | - |
6761 | | - |
6762 | | - |
6763 | Channel * | - |
6764 | channel_connect_to_port(struct ssh *ssh, const char *host, u_short port, | - |
6765 | char *ctype, char *rname, int *reason, const char **errmsg) | - |
6766 | { | - |
6767 | struct ssh_channels *sc = ssh->chanctxt; | - |
6768 | struct permission_set *pset = &sc->local_perms; | - |
6769 | struct channel_connect cctx; | - |
6770 | Channel *c; | - |
6771 | u_int i, permit, permit_adm = 1; | - |
6772 | int sock; | - |
6773 | struct permission *perm; | - |
6774 | | - |
6775 | permit = pset->all_permitted; | - |
6776 | if (!permitTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6777 | for (i = 0; i < pset->num_permitted_userTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
6778 | perm = &pset->permitted_user[i]; | - |
6779 | if (open_match(perm, host, port)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6780 | permit = 1; | - |
6781 | break; never executed: break; | 0 |
6782 | } | - |
6783 | } never executed: end of block | 0 |
6784 | } never executed: end of block | 0 |
6785 | | - |
6786 | if (pset->num_permitted_admin > 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6787 | permit_adm = 0; | - |
6788 | for (i = 0; i < pset->num_permitted_adminTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
6789 | perm = &pset->permitted_admin[i]; | - |
6790 | if (open_match(perm, host, port)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6791 | permit_adm = 1; | - |
6792 | break; never executed: break; | 0 |
6793 | } | - |
6794 | } never executed: end of block | 0 |
6795 | } never executed: end of block | 0 |
6796 | | - |
6797 | if (!permitTRUE | never evaluated | FALSE | never evaluated |
|| !permit_admTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6798 | logit("Received request to connect to host %.100s port %d, " | - |
6799 | "but the request was denied.", host, port); | - |
6800 | if (reason != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6801 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6802 | ) | - |
6803 | * never executed: *reason = 1; reason = 1;never executed: *reason = 1; | 0 |
6804 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 |
6805 | ((void *)0) never executed: return ((void *)0) ; | 0 |
6806 | ; never executed: return ((void *)0) ; | 0 |
6807 | } | - |
6808 | | - |
6809 | memset(&cctx, 0, sizeof(cctx)); | - |
6810 | sock = connect_to_helper(ssh, host, port, | - |
6811 | SOCK_STREAM | - |
6812 | , ctype, rname, | - |
6813 | &cctx, reason, errmsg); | - |
6814 | if (sock == -1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6815 | channel_connect_ctx_free(&cctx); | - |
6816 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 |
6817 | ((void *)0) never executed: return ((void *)0) ; | 0 |
6818 | ; never executed: return ((void *)0) ; | 0 |
6819 | } | - |
6820 | | - |
6821 | c = channel_new(ssh, ctype, 12, sock, sock, -1, | - |
6822 | (64*(32*1024)), (32*1024), 0, rname, 1); | - |
6823 | c->host_port = port; | - |
6824 | c->path = xstrdup(host); | - |
6825 | c->connect_ctx = cctx; | - |
6826 | | - |
6827 | return never executed: return c; c;never executed: return c; | 0 |
6828 | } | - |
6829 | | - |
6830 | | - |
6831 | Channel * | - |
6832 | channel_connect_to_path(struct ssh *ssh, const char *path, | - |
6833 | char *ctype, char *rname) | - |
6834 | { | - |
6835 | struct ssh_channels *sc = ssh->chanctxt; | - |
6836 | struct permission_set *pset = &sc->local_perms; | - |
6837 | u_int i, permit, permit_adm = 1; | - |
6838 | struct permission *perm; | - |
6839 | | - |
6840 | permit = pset->all_permitted; | - |
6841 | if (!permitTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6842 | for (i = 0; i < pset->num_permitted_userTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
6843 | perm = &pset->permitted_user[i]; | - |
6844 | if (open_match(perm, path, -2)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6845 | permit = 1; | - |
6846 | break; never executed: break; | 0 |
6847 | } | - |
6848 | } never executed: end of block | 0 |
6849 | } never executed: end of block | 0 |
6850 | | - |
6851 | if (pset->num_permitted_admin > 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6852 | permit_adm = 0; | - |
6853 | for (i = 0; i < pset->num_permitted_adminTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
6854 | perm = &pset->permitted_admin[i]; | - |
6855 | if (open_match(perm, path, -2)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6856 | permit_adm = 1; | - |
6857 | break; never executed: break; | 0 |
6858 | } | - |
6859 | } never executed: end of block | 0 |
6860 | } never executed: end of block | 0 |
6861 | | - |
6862 | if (!permitTRUE | never evaluated | FALSE | never evaluated |
|| !permit_admTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6863 | logit("Received request to connect to path %.100s, " | - |
6864 | "but the request was denied.", path); | - |
6865 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 |
6866 | ((void *)0) never executed: return ((void *)0) ; | 0 |
6867 | ; never executed: return ((void *)0) ; | 0 |
6868 | } | - |
6869 | return never executed: return connect_to(ssh, path, -2, ctype, rname); connect_to(ssh, path, -2, ctype, rname);never executed: return connect_to(ssh, path, -2, ctype, rname); | 0 |
6870 | } | - |
6871 | | - |
6872 | void | - |
6873 | channel_send_window_changes(struct ssh *ssh) | - |
6874 | { | - |
6875 | struct ssh_channels *sc = ssh->chanctxt; | - |
6876 | struct winsize ws; | - |
6877 | int r; | - |
6878 | u_int i; | - |
6879 | | - |
6880 | for (i = 0; i < sc->channels_allocTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
6881 | if (sc->channels[i] == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6882 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6883 | || !sc->channels[i]->client_ttyTRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
6884 | sc->channels[i]->type != 4TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
6885 | continue; never executed: continue; | 0 |
6886 | if (ioctl(sc->channels[i]->rfd, TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6887 | 0x5413TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6888 | , &ws) < 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
6889 | continue; never executed: continue; | 0 |
6890 | channel_request_start(ssh, i, "window-change", 0); | - |
6891 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, (u_int)ws.ws_col)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
6892 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, (u_int)ws.ws_row)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
6893 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, (u_int)ws.ws_xpixel)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
6894 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, (u_int)ws.ws_ypixel)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
6895 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
6896 | fatal("%s: channel %u: send window-change: %s", never executed: fatal("%s: channel %u: send window-change: %s", __func__, i, ssh_err(r)); | 0 |
6897 | __func__, i, ssh_err(r)); never executed: fatal("%s: channel %u: send window-change: %s", __func__, i, ssh_err(r)); | 0 |
6898 | } never executed: end of block | 0 |
6899 | } never executed: end of block | 0 |
6900 | | - |
6901 | | - |
6902 | static Channel * | - |
6903 | rdynamic_connect_prepare(struct ssh *ssh, char *ctype, char *rname) | - |
6904 | { | - |
6905 | Channel *c; | - |
6906 | int r; | - |
6907 | | - |
6908 | c = channel_new(ssh, ctype, 21, -1, -1, -1, | - |
6909 | (64*(32*1024)), (32*1024), 0, rname, 1); | - |
6910 | c->host_port = 0; | - |
6911 | c->path = | - |
6912 | ((void *)0) | - |
6913 | ; | - |
6914 | | - |
6915 | | - |
6916 | | - |
6917 | | - |
6918 | | - |
6919 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_start(ssh, 91)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
6920 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->remote_id)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
6921 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->self)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
6922 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->local_window)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
6923 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, c->local_maxpacket)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6924 | fatal("%s: channel %i: confirm: %s", __func__, | - |
6925 | c->self, ssh_err(r)); | - |
6926 | } never executed: end of block | 0 |
6927 | return never executed: return c; c;never executed: return c; | 0 |
6928 | } | - |
6929 | | - |
6930 | | - |
6931 | static int | - |
6932 | rdynamic_connect_finish(struct ssh *ssh, Channel *c) | - |
6933 | { | - |
6934 | struct channel_connect cctx; | - |
6935 | int sock; | - |
6936 | | - |
6937 | memset(&cctx, 0, sizeof(cctx)); | - |
6938 | sock = connect_to_helper(ssh, c->path, c->host_port, | - |
6939 | SOCK_STREAM | - |
6940 | , | - |
6941 | ((void *)0) | - |
6942 | , | - |
6943 | | - |
6944 | ((void *)0) | - |
6945 | , &cctx, | - |
6946 | ((void *)0) | - |
6947 | , | - |
6948 | ((void *)0) | - |
6949 | ); | - |
6950 | if (sock == -1TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
6951 | channel_connect_ctx_free(&cctx); never executed: channel_connect_ctx_free(&cctx); | 0 |
6952 | else { | - |
6953 | | - |
6954 | c->type = 22; | - |
6955 | c->connect_ctx = cctx; | - |
6956 | channel_register_fds(ssh, c, sock, sock, -1, 0, 1, 0); | - |
6957 | } never executed: end of block | 0 |
6958 | return never executed: return sock; sock;never executed: return sock; | 0 |
6959 | } | - |
6960 | int | - |
6961 | x11_create_display_inet(struct ssh *ssh, int x11_display_offset, | - |
6962 | int x11_use_localhost, int single_connection, | - |
6963 | u_int *display_numberp, int **chanids) | - |
6964 | { | - |
6965 | Channel *nc = | - |
6966 | ((void *)0) | - |
6967 | ; | - |
6968 | int display_number, sock; | - |
6969 | u_short port; | - |
6970 | struct addrinfo hints, *ai, *aitop; | - |
6971 | char strport[ | - |
6972 | 32 | - |
6973 | ]; | - |
6974 | int gaierr, n, num_socks = 0, socks[10]; | - |
6975 | | - |
6976 | if (chanids == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6977 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6978 | ) | - |
6979 | return never executed: return -1; -1;never executed: return -1; | 0 |
6980 | | - |
6981 | for (display_number = x11_display_offset; | - |
6982 | display_number < 1000TRUE | never evaluated | FALSE | never evaluated |
; | 0 |
6983 | display_number++) { | - |
6984 | port = 6000 + display_number; | - |
6985 | memset(&hints, 0, sizeof(hints)); | - |
6986 | hints.ai_family = ssh->chanctxt->IPv4or6; | - |
6987 | hints.ai_flags = x11_use_localhostTRUE | never evaluated | FALSE | never evaluated |
? 0: | 0 |
6988 | 0x0001 | - |
6989 | ; | - |
6990 | hints.ai_socktype = | - |
6991 | SOCK_STREAM | - |
6992 | ; | - |
6993 | snprintf(strport, sizeof strport, "%d", port); | - |
6994 | if ((TRUE | never evaluated | FALSE | never evaluated |
gaierr = getaddrinfo(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6995 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6996 | , strport,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
6997 | &hints, &aitop)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
6998 | error("getaddrinfo: %.100s", ssh_gai_strerror(gaierr)); | - |
6999 | return never executed: return -1; -1;never executed: return -1; | 0 |
7000 | } | - |
7001 | for (ai = aitop; aiTRUE | never evaluated | FALSE | never evaluated |
; ai = ai->ai_next) { | 0 |
7002 | if (ai->ai_family != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7003 | 2TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7004 | && | - |
7005 | ai->ai_family != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7006 | 10TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7007 | ) | - |
7008 | continue; never executed: continue; | 0 |
7009 | sock = socket(ai->ai_family, ai->ai_socktype, | - |
7010 | ai->ai_protocol); | - |
7011 | if (sock < 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
7012 | if ((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7013 | (*__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7014 | != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7015 | 22TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7016 | )TRUE | never evaluated | FALSE | never evaluated |
&& (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7017 | (*__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7018 | != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7019 | 97TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7020 | )TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7021 | | - |
7022 | && (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7023 | (*__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7024 | != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7025 | 96TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7026 | )TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7027 | | - |
7028 | ) { | - |
7029 | error("socket: %.100s", strerror( | - |
7030 | (*__errno_location ()) | - |
7031 | )); | - |
7032 | freeaddrinfo(aitop); | - |
7033 | return never executed: return -1; -1;never executed: return -1; | 0 |
7034 | } else { | - |
7035 | debug("x11_create_display_inet: Socket family %d not supported", | - |
7036 | ai->ai_family); | - |
7037 | continue; never executed: continue; | 0 |
7038 | } | - |
7039 | } | - |
7040 | if (ai->ai_family == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7041 | 10TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7042 | ) | - |
7043 | sock_set_v6only(sock); never executed: sock_set_v6only(sock); | 0 |
7044 | if (x11_use_localhostTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
7045 | set_reuseaddr(sock); never executed: set_reuseaddr(sock); | 0 |
7046 | if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
7047 | debug2("%s: bind port %d: %.100s", __func__, | - |
7048 | port, strerror( | - |
7049 | (*__errno_location ()) | - |
7050 | )); | - |
7051 | close(sock); | - |
7052 | for (n = 0; n < num_socksTRUE | never evaluated | FALSE | never evaluated |
; n++) | 0 |
7053 | close(socks[n]); never executed: close(socks[n]); | 0 |
7054 | num_socks = 0; | - |
7055 | break; never executed: break; | 0 |
7056 | } | - |
7057 | socks[num_socks++] = sock; | - |
7058 | if (num_socks == 10TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
7059 | break; never executed: break; | 0 |
7060 | } never executed: end of block | 0 |
7061 | freeaddrinfo(aitop); | - |
7062 | if (num_socks > 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
7063 | break; never executed: break; | 0 |
7064 | } never executed: end of block | 0 |
7065 | if (display_number >= 1000TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
7066 | error("Failed to allocate internet-domain X11 display socket."); | - |
7067 | return never executed: return -1; -1;never executed: return -1; | 0 |
7068 | } | - |
7069 | | - |
7070 | for (n = 0; n < num_socksTRUE | never evaluated | FALSE | never evaluated |
; n++) { | 0 |
7071 | sock = socks[n]; | - |
7072 | if (listen(sock, 128) < 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
7073 | error("listen: %.100s", strerror( | - |
7074 | (*__errno_location ()) | - |
7075 | )); | - |
7076 | close(sock); | - |
7077 | return never executed: return -1; -1;never executed: return -1; | 0 |
7078 | } | - |
7079 | } never executed: end of block | 0 |
7080 | | - |
7081 | | - |
7082 | *chanids = xcalloc(num_socks + 1, sizeof(**chanids)); | - |
7083 | for (n = 0; n < num_socksTRUE | never evaluated | FALSE | never evaluated |
; n++) { | 0 |
7084 | sock = socks[n]; | - |
7085 | nc = channel_new(ssh, "x11 listener", | - |
7086 | 1, sock, sock, -1, | - |
7087 | (4*(16*1024)), (16*1024), | - |
7088 | 0, "X11 inet listener", 1); | - |
7089 | nc->single_connection = single_connection; | - |
7090 | (*chanids)[n] = nc->self; | - |
7091 | } never executed: end of block | 0 |
7092 | (*chanids)[n] = -1; | - |
7093 | | - |
7094 | | - |
7095 | *display_numberp = display_number; | - |
7096 | return never executed: return 0; 0;never executed: return 0; | 0 |
7097 | } | - |
7098 | | - |
7099 | static int | - |
7100 | connect_local_xsocket_path(const char *pathname) | - |
7101 | { | - |
7102 | int sock; | - |
7103 | struct sockaddr_un addr; | - |
7104 | | - |
7105 | sock = socket( | - |
7106 | 1 | - |
7107 | , | - |
7108 | SOCK_STREAM | - |
7109 | , 0); | - |
7110 | if (sock < 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
7111 | error("socket: %.100s", strerror( never executed: error("socket: %.100s", strerror( (*__errno_location ()) )); | 0 |
7112 | (*__errno_location ()) never executed: error("socket: %.100s", strerror( (*__errno_location ()) )); | 0 |
7113 | )); never executed: error("socket: %.100s", strerror( (*__errno_location ()) )); | 0 |
7114 | memset(&addr, 0, sizeof(addr)); | - |
7115 | addr.sun_family = | - |
7116 | 1 | - |
7117 | ; | - |
7118 | strlcpy(addr.sun_path, pathname, sizeof addr.sun_path); | - |
7119 | if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
7120 | return never executed: return sock; sock;never executed: return sock; | 0 |
7121 | close(sock); | - |
7122 | error("connect %.100s: %.100s", addr.sun_path, strerror( | - |
7123 | (*__errno_location ()) | - |
7124 | )); | - |
7125 | return never executed: return -1; -1;never executed: return -1; | 0 |
7126 | } | - |
7127 | | - |
7128 | static int | - |
7129 | connect_local_xsocket(u_int dnr) | - |
7130 | { | - |
7131 | char buf[1024]; | - |
7132 | snprintf(buf, sizeof buf, "/tmp/.X11-unix/X%u", dnr); | - |
7133 | return never executed: return connect_local_xsocket_path(buf); connect_local_xsocket_path(buf);never executed: return connect_local_xsocket_path(buf); | 0 |
7134 | } | - |
7135 | int | - |
7136 | x11_connect_display(struct ssh *ssh) | - |
7137 | { | - |
7138 | u_int display_number; | - |
7139 | const char *display; | - |
7140 | char buf[1024], *cp; | - |
7141 | struct addrinfo hints, *ai, *aitop; | - |
7142 | char strport[ | - |
7143 | 32 | - |
7144 | ]; | - |
7145 | int gaierr, sock = 0; | - |
7146 | | - |
7147 | | - |
7148 | display = getenv("DISPLAY"); | - |
7149 | if (!displayTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
7150 | error("DISPLAY not set."); | - |
7151 | return never executed: return -1; -1;never executed: return -1; | 0 |
7152 | } | - |
7153 | if ( | - |
7154 | (TRUE | never evaluated | FALSE | never evaluated |
__extension__ (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7155 | 5TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7156 | )TRUE | never evaluated | FALSE | never evaluated |
&& ((__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7157 | displayTRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7158 | )TRUE | never evaluated | FALSE | never evaluated |
&& strlen (TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7159 | displayTRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7160 | ) < ((size_t) (TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7161 | 5TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7162 | ))TRUE | never evaluated | FALSE | never evaluated |
) || (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7163 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7164 | )TRUE | never evaluated | FALSE | never evaluated |
&& strlen (TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7165 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7166 | ) < ((size_t) (TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7167 | 5TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7168 | ))TRUE | never evaluated | FALSE | never evaluated |
)) ? __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7169 | displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7170 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7171 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7172 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7173 | displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7174 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7175 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7176 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7177 | displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7178 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7179 | displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7180 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7181 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7182 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7183 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7184 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7185 | displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7186 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7187 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7188 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7189 | displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7190 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7191 | displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7192 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7193 | displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7194 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7195 | displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7196 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7197 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7198 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7199 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7200 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7201 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7202 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7203 | displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7204 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7205 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7206 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7207 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7208 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7209 | displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7210 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7211 | displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7212 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7213 | displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7214 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( display ))[3] - __s2[3]); | 0 |
7215 | displayTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( display ))[3] - __s2[3]); | 0 |
7216 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7217 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7218 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7219 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7220 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7221 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7222 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7223 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7224 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7225 | displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7226 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7227 | displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7228 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7229 | displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7230 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7231 | displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7232 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7233 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7234 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7235 | displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7236 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7237 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7238 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7239 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7240 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7241 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7242 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "unix:" ))[3] - __s2[3]); | 0 |
7243 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "unix:" ))[3] - __s2[3]); | 0 |
7244 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7245 | displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7246 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7247 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7248 | )))); }) : strncmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7249 | displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7250 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7251 | "unix:"TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7252 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7253 | 5TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7254 | ))) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7255 | == 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
7256 | display[0] == ':'TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
7257 | | - |
7258 | if (sscanf(strrchr(display, ':') + 1, "%u",TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7259 | &display_number) != 1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
7260 | error("Could not parse display number from DISPLAY: " | - |
7261 | "%.100s", display); | - |
7262 | return never executed: return -1; -1;never executed: return -1; | 0 |
7263 | } | - |
7264 | | - |
7265 | sock = connect_local_xsocket(display_number); | - |
7266 | if (sock < 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
7267 | return never executed: return -1; -1;never executed: return -1; | 0 |
7268 | | - |
7269 | | - |
7270 | return never executed: return sock; sock;never executed: return sock; | 0 |
7271 | } | - |
7272 | | - |
7273 | | - |
7274 | | - |
7275 | | - |
7276 | strlcpy(buf, display, sizeof(buf)); | - |
7277 | cp = | - |
7278 | (__extension__ (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7279 | ':'TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7280 | )TRUE | never evaluated | FALSE | never evaluated |
&& !__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7281 | bufTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7282 | )TRUE | never evaluated | FALSE | never evaluated |
&& (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7283 | ':'TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7284 | ) == '\0'TRUE | never evaluated | FALSE | never evaluated |
? (char *) __rawmemchr ( | 0 |
7285 | buf | - |
7286 | , | - |
7287 | ':' | - |
7288 | ) : __builtin_strchr ( | - |
7289 | buf | - |
7290 | , | - |
7291 | ':' | - |
7292 | ))) | - |
7293 | ; | - |
7294 | if (!cpTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
7295 | error("Could not find ':' in DISPLAY: %.100s", display); | - |
7296 | return never executed: return -1; -1;never executed: return -1; | 0 |
7297 | } | - |
7298 | *cp = 0; | - |
7299 | | - |
7300 | | - |
7301 | | - |
7302 | | - |
7303 | if (sscanf(cp + 1, "%u", &display_number) != 1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
7304 | error("Could not parse display number from DISPLAY: %.100s", | - |
7305 | display); | - |
7306 | return never executed: return -1; -1;never executed: return -1; | 0 |
7307 | } | - |
7308 | | - |
7309 | | - |
7310 | memset(&hints, 0, sizeof(hints)); | - |
7311 | hints.ai_family = ssh->chanctxt->IPv4or6; | - |
7312 | hints.ai_socktype = | - |
7313 | SOCK_STREAM | - |
7314 | ; | - |
7315 | snprintf(strport, sizeof strport, "%u", 6000 + display_number); | - |
7316 | if ((TRUE | never evaluated | FALSE | never evaluated |
gaierr = getaddrinfo(buf, strport, &hints, &aitop)) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
7317 | error("%.100s: unknown host. (%s)", buf, | - |
7318 | ssh_gai_strerror(gaierr)); | - |
7319 | return never executed: return -1; -1;never executed: return -1; | 0 |
7320 | } | - |
7321 | for (ai = aitop; aiTRUE | never evaluated | FALSE | never evaluated |
; ai = ai->ai_next) { | 0 |
7322 | | - |
7323 | sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); | - |
7324 | if (sock < 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
7325 | debug2("socket: %.100s", strerror( | - |
7326 | (*__errno_location ()) | - |
7327 | )); | - |
7328 | continue; never executed: continue; | 0 |
7329 | } | - |
7330 | | - |
7331 | if (connect(sock, ai->ai_addr, ai->ai_addrlen) < 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
7332 | debug2("connect %.100s port %u: %.100s", buf, | - |
7333 | 6000 + display_number, strerror( | - |
7334 | (*__errno_location ()) | - |
7335 | )); | - |
7336 | close(sock); | - |
7337 | continue; never executed: continue; | 0 |
7338 | } | - |
7339 | | - |
7340 | break; never executed: break; | 0 |
7341 | } | - |
7342 | freeaddrinfo(aitop); | - |
7343 | if (!aiTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
7344 | error("connect %.100s port %u: %.100s", buf, | - |
7345 | 6000 + display_number, strerror( | - |
7346 | (*__errno_location ()) | - |
7347 | )); | - |
7348 | return never executed: return -1; -1;never executed: return -1; | 0 |
7349 | } | - |
7350 | set_nodelay(sock); | - |
7351 | return never executed: return sock; sock;never executed: return sock; | 0 |
7352 | } | - |
7353 | | - |
7354 | | - |
7355 | | - |
7356 | | - |
7357 | | - |
7358 | | - |
7359 | void | - |
7360 | x11_request_forwarding_with_spoofing(struct ssh *ssh, int client_session_id, | - |
7361 | const char *disp, const char *proto, const char *data, int want_reply) | - |
7362 | { | - |
7363 | struct ssh_channels *sc = ssh->chanctxt; | - |
7364 | u_int data_len = (u_int) strlen(data) / 2; | - |
7365 | u_int i, value; | - |
7366 | const char *cp; | - |
7367 | char *new_data; | - |
7368 | int r, screen_number; | - |
7369 | | - |
7370 | if (sc->x11_saved_display == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7371 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7372 | ) | - |
7373 | sc->x11_saved_display = xstrdup(disp); never executed: sc->x11_saved_display = xstrdup(disp); | 0 |
7374 | else if ( | - |
7375 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7376 | dispTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7377 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7378 | sc->x11_saved_displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7379 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7380 | dispTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7381 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7382 | sc->x11_saved_displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7383 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7384 | dispTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7385 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7386 | dispTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7387 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7388 | sc->x11_saved_displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7389 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7390 | sc->x11_saved_displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7391 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7392 | dispTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7393 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7394 | sc->x11_saved_displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7395 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7396 | dispTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7397 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7398 | dispTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7399 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7400 | dispTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7401 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7402 | dispTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7403 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7404 | sc->x11_saved_displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7405 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7406 | sc->x11_saved_displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7407 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7408 | sc->x11_saved_displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7409 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7410 | dispTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7411 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7412 | sc->x11_saved_displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7413 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7414 | sc->x11_saved_displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7415 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7416 | dispTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7417 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7418 | dispTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7419 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7420 | dispTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7421 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( disp ))[3] - __s2[3]); | 0 |
7422 | dispTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( disp ))[3] - __s2[3]); | 0 |
7423 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7424 | sc->x11_saved_displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7425 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7426 | sc->x11_saved_displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7427 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7428 | sc->x11_saved_displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7429 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7430 | sc->x11_saved_displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7431 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7432 | dispTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7433 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7434 | dispTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7435 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7436 | dispTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7437 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7438 | dispTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7439 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7440 | sc->x11_saved_displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7441 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7442 | dispTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7443 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7444 | sc->x11_saved_displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7445 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7446 | sc->x11_saved_displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7447 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7448 | sc->x11_saved_displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7449 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( sc->x11_saved_display ))[3] - __s2[3]); | 0 |
7450 | sc->x11_saved_displayTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( sc->x11_saved_display ))[3] - __s2[3]); | 0 |
7451 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7452 | dispTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7453 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7454 | sc->x11_saved_displayTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7455 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7456 | != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
7457 | error("x11_request_forwarding_with_spoofing: different " | - |
7458 | "$DISPLAY already forwarded"); | - |
7459 | return; never executed: return; | 0 |
7460 | } | - |
7461 | | - |
7462 | cp = | - |
7463 | (__extension__ (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7464 | ':'TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7465 | )TRUE | never evaluated | FALSE | never evaluated |
&& !__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7466 | dispTRUE | never evaluated | FALSE | never evaluated |
| 0 |
7467 | )TRUE | never evaluated | FALSE | never evaluated |
&& (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7468 | ':'TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7469 | ) == '\0'TRUE | never evaluated | FALSE | never evaluated |
? (char *) __rawmemchr ( | 0 |
7470 | disp | - |
7471 | , | - |
7472 | ':' | - |
7473 | ) : __builtin_strchr ( | - |
7474 | disp | - |
7475 | , | - |
7476 | ':' | - |
7477 | ))) | - |
7478 | ; | - |
7479 | if (cpTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
7480 | cp = never executed: cp = (__extension__ (__builtin_constant_p ( '.' ) && !__builtin_constant_p ( cp ) && ( '.' ) == '\0' ? (char *) __rawmemchr ( cp , '.' ) : __builtin_strchr ( cp , '.' ))) ; | 0 |
7481 | (__extension__ (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
never executed: cp = (__extension__ (__builtin_constant_p ( '.' ) && !__builtin_constant_p ( cp ) && ( '.' ) == '\0' ? (char *) __rawmemchr ( cp , '.' ) : __builtin_strchr ( cp , '.' ))) ; | 0 |
7482 | '.'TRUE | never evaluated | FALSE | never evaluated |
never executed: cp = (__extension__ (__builtin_constant_p ( '.' ) && !__builtin_constant_p ( cp ) && ( '.' ) == '\0' ? (char *) __rawmemchr ( cp , '.' ) : __builtin_strchr ( cp , '.' ))) ; | 0 |
7483 | )TRUE | never evaluated | FALSE | never evaluated |
&& !__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
never executed: cp = (__extension__ (__builtin_constant_p ( '.' ) && !__builtin_constant_p ( cp ) && ( '.' ) == '\0' ? (char *) __rawmemchr ( cp , '.' ) : __builtin_strchr ( cp , '.' ))) ; | 0 |
7484 | cpTRUE | never evaluated | FALSE | never evaluated |
never executed: cp = (__extension__ (__builtin_constant_p ( '.' ) && !__builtin_constant_p ( cp ) && ( '.' ) == '\0' ? (char *) __rawmemchr ( cp , '.' ) : __builtin_strchr ( cp , '.' ))) ; | 0 |
7485 | )TRUE | never evaluated | FALSE | never evaluated |
&& (TRUE | never evaluated | FALSE | never evaluated |
never executed: cp = (__extension__ (__builtin_constant_p ( '.' ) && !__builtin_constant_p ( cp ) && ( '.' ) == '\0' ? (char *) __rawmemchr ( cp , '.' ) : __builtin_strchr ( cp , '.' ))) ; | 0 |
7486 | '.'TRUE | never evaluated | FALSE | never evaluated |
never executed: cp = (__extension__ (__builtin_constant_p ( '.' ) && !__builtin_constant_p ( cp ) && ( '.' ) == '\0' ? (char *) __rawmemchr ( cp , '.' ) : __builtin_strchr ( cp , '.' ))) ; | 0 |
7487 | ) == '\0'TRUE | never evaluated | FALSE | never evaluated |
? (char *) __rawmemchr (never executed: cp = (__extension__ (__builtin_constant_p ( '.' ) && !__builtin_constant_p ( cp ) && ( '.' ) == '\0' ? (char *) __rawmemchr ( cp , '.' ) : __builtin_strchr ( cp , '.' ))) ; | 0 |
7488 | cp never executed: cp = (__extension__ (__builtin_constant_p ( '.' ) && !__builtin_constant_p ( cp ) && ( '.' ) == '\0' ? (char *) __rawmemchr ( cp , '.' ) : __builtin_strchr ( cp , '.' ))) ; | 0 |
7489 | , never executed: cp = (__extension__ (__builtin_constant_p ( '.' ) && !__builtin_constant_p ( cp ) && ( '.' ) == '\0' ? (char *) __rawmemchr ( cp , '.' ) : __builtin_strchr ( cp , '.' ))) ; | 0 |
7490 | '.' never executed: cp = (__extension__ (__builtin_constant_p ( '.' ) && !__builtin_constant_p ( cp ) && ( '.' ) == '\0' ? (char *) __rawmemchr ( cp , '.' ) : __builtin_strchr ( cp , '.' ))) ; | 0 |
7491 | ) : __builtin_strchr ( never executed: cp = (__extension__ (__builtin_constant_p ( '.' ) && !__builtin_constant_p ( cp ) && ( '.' ) == '\0' ? (char *) __rawmemchr ( cp , '.' ) : __builtin_strchr ( cp , '.' ))) ; | 0 |
7492 | cp never executed: cp = (__extension__ (__builtin_constant_p ( '.' ) && !__builtin_constant_p ( cp ) && ( '.' ) == '\0' ? (char *) __rawmemchr ( cp , '.' ) : __builtin_strchr ( cp , '.' ))) ; | 0 |
7493 | , never executed: cp = (__extension__ (__builtin_constant_p ( '.' ) && !__builtin_constant_p ( cp ) && ( '.' ) == '\0' ? (char *) __rawmemchr ( cp , '.' ) : __builtin_strchr ( cp , '.' ))) ; | 0 |
7494 | '.' never executed: cp = (__extension__ (__builtin_constant_p ( '.' ) && !__builtin_constant_p ( cp ) && ( '.' ) == '\0' ? (char *) __rawmemchr ( cp , '.' ) : __builtin_strchr ( cp , '.' ))) ; | 0 |
7495 | ))) never executed: cp = (__extension__ (__builtin_constant_p ( '.' ) && !__builtin_constant_p ( cp ) && ( '.' ) == '\0' ? (char *) __rawmemchr ( cp , '.' ) : __builtin_strchr ( cp , '.' ))) ; | 0 |
7496 | ; never executed: cp = (__extension__ (__builtin_constant_p ( '.' ) && !__builtin_constant_p ( cp ) && ( '.' ) == '\0' ? (char *) __rawmemchr ( cp , '.' ) : __builtin_strchr ( cp , '.' ))) ; | 0 |
7497 | if (cpTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
7498 | screen_number = (u_int)strtonum(cp + 1, 0, 400, never executed: screen_number = (u_int)strtonum(cp + 1, 0, 400, ((void *)0) ); | 0 |
7499 | ((void *)0) never executed: screen_number = (u_int)strtonum(cp + 1, 0, 400, ((void *)0) ); | 0 |
7500 | ); never executed: screen_number = (u_int)strtonum(cp + 1, 0, 400, ((void *)0) ); | 0 |
7501 | else | - |
7502 | screen_number = 0; never executed: screen_number = 0; | 0 |
7503 | | - |
7504 | if (sc->x11_saved_proto == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7505 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
7506 | ) { | - |
7507 | | - |
7508 | sc->x11_saved_proto = xstrdup(proto); | - |
7509 | | - |
7510 | | - |
7511 | sc->x11_saved_data = xmalloc(data_len); | - |
7512 | for (i = 0; i < data_lenTRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
7513 | if (sscanf(data + 2 * i, "%2x", &value) != 1TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
7514 | fatal("x11_request_forwarding: bad " never executed: fatal("x11_request_forwarding: bad " "authentication data: %.100s", data); | 0 |
7515 | "authentication data: %.100s", data); never executed: fatal("x11_request_forwarding: bad " "authentication data: %.100s", data); | 0 |
7516 | sc->x11_saved_data[i] = value; | - |
7517 | } never executed: end of block | 0 |
7518 | sc->x11_saved_data_len = data_len; | - |
7519 | | - |
7520 | | - |
7521 | sc->x11_fake_data = xmalloc(data_len); | - |
7522 | arc4random_buf(sc->x11_fake_data, data_len); | - |
7523 | sc->x11_fake_data_len = data_len; | - |
7524 | } never executed: end of block | 0 |
7525 | | - |
7526 | | - |
7527 | new_data = tohex(sc->x11_fake_data, data_len); | - |
7528 | | - |
7529 | | - |
7530 | channel_request_start(ssh, client_session_id, "x11-req", want_reply); | - |
7531 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u8(ssh, 0)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
7532 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh, proto)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
7533 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_cstring(ssh, new_data)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
7534 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_put_u32(ssh, screen_number)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
7535 | (TRUE | never evaluated | FALSE | never evaluated |
r = sshpkt_send(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
|| | 0 |
7536 | (TRUE | never evaluated | FALSE | never evaluated |
r = ssh_packet_write_wait(ssh)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
7537 | fatal("%s: send x11-req: %s", __func__, ssh_err(r)); never executed: fatal("%s: send x11-req: %s", __func__, ssh_err(r)); | 0 |
7538 | free(new_data); | - |
7539 | } never executed: end of block | 0 |
| | |