Mercurial > dropbear
annotate svr-x11fwd.c @ 994:5c5ade336926
Prefer stronger algorithms in algorithm negotiation.
Prefer diffie-hellman-group14-sha1 (2048 bit) over
diffie-hellman-group1-sha1 (1024 bit).
Due to meet-in-the-middle attacks the effective key length of
three key 3DES is 112 bits. AES is stronger and faster then 3DES.
Prefer to delay the start of compression until after authentication
has completed. This avoids exposing compression code to attacks
from unauthenticated users.
(github pull request #9)
author | Fedor Brunner <fedor.brunner@azet.sk> |
---|---|
date | Fri, 23 Jan 2015 23:00:25 +0800 |
parents | 5daedffd0769 |
children | d3925ed45a85 |
rev | line source |
---|---|
10
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
1 /* |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
2 * Dropbear - a SSH2 server |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
3 * |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
4 * Copyright (c) 2002,2003 Matt Johnston |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
5 * All rights reserved. |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
6 * |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
7 * Permission is hereby granted, free of charge, to any person obtaining a copy |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
8 * of this software and associated documentation files (the "Software"), to deal |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
9 * in the Software without restriction, including without limitation the rights |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
11 * copies of the Software, and to permit persons to whom the Software is |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
12 * furnished to do so, subject to the following conditions: |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
13 * |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
14 * The above copyright notice and this permission notice shall be included in |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
15 * all copies or substantial portions of the Software. |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
16 * |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
23 * SOFTWARE. */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
24 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
25 #include "includes.h" |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
26 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
27 #ifndef DISABLE_X11FWD |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
28 #include "x11fwd.h" |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
29 #include "session.h" |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
30 #include "ssh.h" |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
31 #include "dbutil.h" |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
32 #include "chansession.h" |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
33 #include "channel.h" |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
34 #include "packet.h" |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
35 #include "buffer.h" |
475
52a644e7b8e1
* Patch from Frédéric Moulins adding options to authorized_keys.
Matt Johnston <matt@ucc.asn.au>
parents:
179
diff
changeset
|
36 #include "auth.h" |
10
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
37 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
38 #define X11BASEPORT 6000 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
39 #define X11BINDBASE 6010 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
40 |
62 | 41 static void x11accept(struct Listener* listener, int sock); |
10
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
42 static int bindport(int fd); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
43 static int send_msg_channel_open_x11(int fd, struct sockaddr_in* addr); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
44 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
45 /* called as a request for a session channel, sets up listening X11 */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
46 /* returns DROPBEAR_SUCCESS or DROPBEAR_FAILURE */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
47 int x11req(struct ChanSess * chansess) { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
48 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
49 int fd; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
50 |
475
52a644e7b8e1
* Patch from Frédéric Moulins adding options to authorized_keys.
Matt Johnston <matt@ucc.asn.au>
parents:
179
diff
changeset
|
51 if (!svr_pubkey_allows_x11fwd()) { |
52a644e7b8e1
* Patch from Frédéric Moulins adding options to authorized_keys.
Matt Johnston <matt@ucc.asn.au>
parents:
179
diff
changeset
|
52 return DROPBEAR_FAILURE; |
52a644e7b8e1
* Patch from Frédéric Moulins adding options to authorized_keys.
Matt Johnston <matt@ucc.asn.au>
parents:
179
diff
changeset
|
53 } |
52a644e7b8e1
* Patch from Frédéric Moulins adding options to authorized_keys.
Matt Johnston <matt@ucc.asn.au>
parents:
179
diff
changeset
|
54 |
10
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
55 /* we already have an x11 connection */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
56 if (chansess->x11listener != NULL) { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
57 return DROPBEAR_FAILURE; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
58 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
59 |
179
161557a9dde8
* fix longstanding bug with connections being closed on failure to
Matt Johnston <matt@ucc.asn.au>
parents:
165
diff
changeset
|
60 chansess->x11singleconn = buf_getbool(ses.payload); |
10
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
61 chansess->x11authprot = buf_getstring(ses.payload, NULL); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
62 chansess->x11authcookie = buf_getstring(ses.payload, NULL); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
63 chansess->x11screennum = buf_getint(ses.payload); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
64 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
65 /* create listening socket */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
66 fd = socket(PF_INET, SOCK_STREAM, 0); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
67 if (fd < 0) { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
68 goto fail; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
69 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
70 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
71 /* allocate port and bind */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
72 chansess->x11port = bindport(fd); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
73 if (chansess->x11port < 0) { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
74 goto fail; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
75 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
76 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
77 /* listen */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
78 if (listen(fd, 20) < 0) { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
79 goto fail; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
80 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
81 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
82 /* set non-blocking */ |
109
2e9d1f29c50f
merge of 50be59810e462f9f44f55e421227d6aa0b31982b
Matt Johnston <matt@ucc.asn.au>
parents:
95
diff
changeset
|
83 setnonblocking(fd); |
10
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
84 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
85 /* listener code will handle the socket now. |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
86 * No cleanup handler needed, since listener_remove only happens |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
87 * from our cleanup anyway */ |
62 | 88 chansess->x11listener = new_listener( &fd, 1, 0, chansess, x11accept, NULL); |
10
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
89 if (chansess->x11listener == NULL) { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
90 goto fail; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
91 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
92 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
93 return DROPBEAR_SUCCESS; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
94 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
95 fail: |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
96 /* cleanup */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
97 m_free(chansess->x11authprot); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
98 m_free(chansess->x11authcookie); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
99 close(fd); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
100 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
101 return DROPBEAR_FAILURE; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
102 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
103 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
104 /* accepts a new X11 socket */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
105 /* returns DROPBEAR_FAILURE or DROPBEAR_SUCCESS */ |
62 | 106 static void x11accept(struct Listener* listener, int sock) { |
10
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
107 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
108 int fd; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
109 struct sockaddr_in addr; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
110 int len; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
111 int ret; |
13
db2c8e6fb284
Fixed stupid agentfwd error (using the listening FD, not the accepted on. gah)
Matt Johnston <matt@ucc.asn.au>
parents:
12
diff
changeset
|
112 struct ChanSess * chansess = (struct ChanSess *)(listener->typedata); |
10
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
113 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
114 len = sizeof(addr); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
115 |
62 | 116 fd = accept(sock, (struct sockaddr*)&addr, &len); |
10
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
117 if (fd < 0) { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
118 return; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
119 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
120 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
121 /* if single-connection we close it up */ |
13
db2c8e6fb284
Fixed stupid agentfwd error (using the listening FD, not the accepted on. gah)
Matt Johnston <matt@ucc.asn.au>
parents:
12
diff
changeset
|
122 if (chansess->x11singleconn) { |
db2c8e6fb284
Fixed stupid agentfwd error (using the listening FD, not the accepted on. gah)
Matt Johnston <matt@ucc.asn.au>
parents:
12
diff
changeset
|
123 x11cleanup(chansess); |
10
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
124 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
125 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
126 ret = send_msg_channel_open_x11(fd, &addr); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
127 if (ret == DROPBEAR_FAILURE) { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
128 close(fd); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
129 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
130 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
131 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
132 /* This is called after switching to the user, and sets up the xauth |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
133 * and environment variables. */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
134 void x11setauth(struct ChanSess *chansess) { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
135 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
136 char display[20]; /* space for "localhost:12345.123" */ |
70
b0316ce64e4b
Merging in the changes from 0.41-0.43 main Dropbear tree
Matt Johnston <matt@ucc.asn.au>
parents:
62
diff
changeset
|
137 FILE * authprog = NULL; |
10
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
138 int val; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
139 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
140 if (chansess->x11listener == NULL) { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
141 return; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
142 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
143 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
144 /* create the DISPLAY string */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
145 val = snprintf(display, sizeof(display), "localhost:%d.%d", |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
146 chansess->x11port - X11BASEPORT, chansess->x11screennum); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
147 if (val < 0 || val >= (int)sizeof(display)) { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
148 /* string was truncated */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
149 return; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
150 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
151 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
152 addnewvar("DISPLAY", display); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
153 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
154 /* create the xauth string */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
155 val = snprintf(display, sizeof(display), "unix:%d.%d", |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
156 chansess->x11port - X11BASEPORT, chansess->x11screennum); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
157 if (val < 0 || val >= (int)sizeof(display)) { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
158 /* string was truncated */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
159 return; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
160 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
161 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
162 /* popen is a nice function - code is strongly based on OpenSSH's */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
163 authprog = popen(XAUTH_COMMAND, "w"); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
164 if (authprog) { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
165 fprintf(authprog, "add %s %s %s\n", |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
166 display, chansess->x11authprot, chansess->x11authcookie); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
167 pclose(authprog); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
168 } else { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
169 fprintf(stderr, "Failed to run %s\n", XAUTH_COMMAND); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
170 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
171 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
172 |
13
db2c8e6fb284
Fixed stupid agentfwd error (using the listening FD, not the accepted on. gah)
Matt Johnston <matt@ucc.asn.au>
parents:
12
diff
changeset
|
173 void x11cleanup(struct ChanSess *chansess) { |
10
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
174 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
175 m_free(chansess->x11authprot); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
176 m_free(chansess->x11authcookie); |
95
b855bf63766c
Don't try to remove non-eixtant listeners
Matt Johnston <matt@ucc.asn.au>
parents:
70
diff
changeset
|
177 |
723 | 178 TRACE(("chansess %p", chansess)) |
95
b855bf63766c
Don't try to remove non-eixtant listeners
Matt Johnston <matt@ucc.asn.au>
parents:
70
diff
changeset
|
179 if (chansess->x11listener != NULL) { |
b855bf63766c
Don't try to remove non-eixtant listeners
Matt Johnston <matt@ucc.asn.au>
parents:
70
diff
changeset
|
180 remove_listener(chansess->x11listener); |
b855bf63766c
Don't try to remove non-eixtant listeners
Matt Johnston <matt@ucc.asn.au>
parents:
70
diff
changeset
|
181 chansess->x11listener = NULL; |
b855bf63766c
Don't try to remove non-eixtant listeners
Matt Johnston <matt@ucc.asn.au>
parents:
70
diff
changeset
|
182 } |
10
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
183 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
184 |
941
5daedffd0769
Set tcp priority as follows:
Matt Johnston <matt@ucc.asn.au>
parents:
723
diff
changeset
|
185 static int x11_inithandler(struct Channel *channel) { |
5daedffd0769
Set tcp priority as follows:
Matt Johnston <matt@ucc.asn.au>
parents:
723
diff
changeset
|
186 channel->prio = DROPBEAR_CHANNEL_PRIO_INTERACTIVE; |
5daedffd0769
Set tcp priority as follows:
Matt Johnston <matt@ucc.asn.au>
parents:
723
diff
changeset
|
187 return 0; |
5daedffd0769
Set tcp priority as follows:
Matt Johnston <matt@ucc.asn.au>
parents:
723
diff
changeset
|
188 } |
5daedffd0769
Set tcp priority as follows:
Matt Johnston <matt@ucc.asn.au>
parents:
723
diff
changeset
|
189 |
10
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
190 static const struct ChanType chan_x11 = { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
191 0, /* sepfds */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
192 "x11", |
941
5daedffd0769
Set tcp priority as follows:
Matt Johnston <matt@ucc.asn.au>
parents:
723
diff
changeset
|
193 x11_inithandler, /* inithandler */ |
10
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
194 NULL, /* checkclose */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
195 NULL, /* reqhandler */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
196 NULL /* closehandler */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
197 }; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
198 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
199 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
200 static int send_msg_channel_open_x11(int fd, struct sockaddr_in* addr) { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
201 |
70
b0316ce64e4b
Merging in the changes from 0.41-0.43 main Dropbear tree
Matt Johnston <matt@ucc.asn.au>
parents:
62
diff
changeset
|
202 char* ipstring = NULL; |
10
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
203 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
204 if (send_msg_channel_open_init(fd, &chan_x11) == DROPBEAR_SUCCESS) { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
205 ipstring = inet_ntoa(addr->sin_addr); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
206 buf_putstring(ses.writepayload, ipstring, strlen(ipstring)); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
207 buf_putint(ses.writepayload, addr->sin_port); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
208 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
209 encrypt_packet(); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
210 return DROPBEAR_SUCCESS; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
211 } else { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
212 return DROPBEAR_FAILURE; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
213 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
214 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
215 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
216 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
217 /* returns the port bound to, or -1 on failure. |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
218 * Will attempt to bind to a port X11BINDBASE (6010 usually) or upwards */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
219 static int bindport(int fd) { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
220 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
221 struct sockaddr_in addr; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
222 uint16_t port; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
223 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
224 memset((void*)&addr, 0x0, sizeof(addr)); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
225 addr.sin_family = AF_INET; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
226 addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
227 |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
228 /* if we can't find one in 2000 ports free, something's wrong */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
229 for (port = X11BINDBASE; port < X11BINDBASE + 2000; port++) { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
230 addr.sin_port = htons(port); |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
231 if (bind(fd, (struct sockaddr*)&addr, |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
232 sizeof(struct sockaddr_in)) == 0) { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
233 /* success */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
234 return port; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
235 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
236 if (errno == EADDRINUSE) { |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
237 /* try the next port */ |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
238 continue; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
239 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
240 /* otherwise it was an error we don't know about */ |
594
a98a2138364a
Improve capitalisation for all logged strings
Matt Johnston <matt@ucc.asn.au>
parents:
475
diff
changeset
|
241 dropbear_log(LOG_DEBUG, "Failed to bind x11 socket"); |
10
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
242 break; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
243 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
244 return -1; |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
245 } |
0f7d69d31b9d
- renaming x11fwd.c to svr-x11fwd.c, to testing monotone
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
246 #endif /* DROPBEAR_X11FWD */ |