]> git.pld-linux.org Git - packages/openssh.git/blame - openssh-4.3p1-hpn11.patch
- rel 4
[packages/openssh.git] / openssh-4.3p1-hpn11.patch
CommitLineData
844bac07
ER
1diff -r -u -p1 openssh-4.3p1/buffer.c patch/buffer.c
2--- openssh-4.3p1/buffer.c 2005-03-14 07:22:26.000000000 -0500
3+++ patch/buffer.c 2006-02-01 10:26:10.000000000 -0500
4@@ -109,3 +109,3 @@ restart:
5 newlen = buffer->alloc + len + 32768;
6- if (newlen > BUFFER_MAX_LEN)
7+ if (newlen > BUFFER_MAX_HPN_LEN)
8 fatal("buffer_append_space: alloc %u not supported",
9diff -r -u -p1 openssh-4.3p1/buffer.h patch/buffer.h
10--- openssh-4.3p1/buffer.h 2005-03-14 07:22:26.000000000 -0500
11+++ patch/buffer.h 2006-02-01 10:26:10.000000000 -0500
12@@ -27,2 +27,3 @@ typedef struct {
13 #define BUFFER_MAX_LEN 0xa00000
14+#define BUFFER_MAX_HPN_LEN (2<<29)-1
15
16diff -r -u -p1 openssh-4.3p1/channels.c patch/channels.c
17--- openssh-4.3p1/channels.c 2006-01-31 05:47:15.000000000 -0500
18+++ patch/channels.c 2006-02-01 10:26:10.000000000 -0500
19@@ -290,2 +290,3 @@ channel_new(char *ctype, int type, int r
20 c->local_maxpacket = maxpack;
21+ c->dynamic_window = 0;
22 c->remote_id = -1;
23@@ -750,5 +751,5 @@ channel_pre_open(Channel *c, fd_set * re
24 u_int limit = compat20 ? c->remote_window : packet_get_maxsize();
25-
26+
27 /* check buffer limits */
28- limit = MIN(limit, (BUFFER_MAX_LEN - BUFFER_MAX_CHUNK - CHAN_RBUF));
29+ limit = MIN(limit, (BUFFER_MAX_HPN_LEN - BUFFER_MAX_CHUNK - CHAN_RBUF));
30
31@@ -1617,5 +1618,20 @@ channel_check_window(Channel *c)
32 c->local_consumed > 0) {
33+ u_int32_t tcpwinsz = 0;
34+ socklen_t optsz = sizeof(tcpwinsz);
35+ int ret = -1;
36+ u_int32_t addition = 0;
37+ if (c->dynamic_window) {
38+ ret = getsockopt(packet_get_connection_in(),
39+ SOL_SOCKET, SO_RCVBUF, &tcpwinsz, &optsz);
40+ if ((ret == 0) && tcpwinsz > BUFFER_MAX_HPN_LEN)
41+ tcpwinsz = BUFFER_MAX_HPN_LEN;
42+ }
43+ if (c->dynamic_window && (ret == 0) &&
44+ (tcpwinsz > c->local_window_max)) {
45+ addition = tcpwinsz - c->local_window_max;
46+ c->local_window_max += addition;
47+ }
48 packet_start(SSH2_MSG_CHANNEL_WINDOW_ADJUST);
49 packet_put_int(c->remote_id);
50- packet_put_int(c->local_consumed);
51+ packet_put_int(c->local_consumed + addition);
52 packet_send();
53@@ -1624,3 +1640,3 @@ channel_check_window(Channel *c)
54 c->local_consumed);
55- c->local_window += c->local_consumed;
56+ c->local_window += c->local_consumed + addition;
57 c->local_consumed = 0;
58diff -r -u -p1 openssh-4.3p1/channels.h patch/channels.h
59--- openssh-4.3p1/channels.h 2005-12-31 00:22:32.000000000 -0500
60+++ patch/channels.h 2006-02-01 10:26:10.000000000 -0500
61@@ -102,2 +102,3 @@ struct Channel {
62 u_int local_maxpacket;
63+ int dynamic_window;
64 int extended_usage;
65@@ -126,7 +127,7 @@ struct Channel {
66 #define CHAN_SES_PACKET_DEFAULT (32*1024)
67-#define CHAN_SES_WINDOW_DEFAULT (4*CHAN_SES_PACKET_DEFAULT)
68+#define CHAN_SES_WINDOW_DEFAULT (0xa00000/2)
69 #define CHAN_TCP_PACKET_DEFAULT (32*1024)
70-#define CHAN_TCP_WINDOW_DEFAULT (4*CHAN_TCP_PACKET_DEFAULT)
71+#define CHAN_TCP_WINDOW_DEFAULT (0xa00000/2)
72 #define CHAN_X11_PACKET_DEFAULT (16*1024)
73-#define CHAN_X11_WINDOW_DEFAULT (4*CHAN_X11_PACKET_DEFAULT)
74+#define CHAN_X11_WINDOW_DEFAULT (0xa00000/2)
75
76diff -r -u -p1 openssh-4.3p1/compat.c patch/compat.c
77--- openssh-4.3p1/compat.c 2005-03-01 05:24:33.000000000 -0500
78+++ patch/compat.c 2006-02-01 10:26:10.000000000 -0500
79@@ -164,2 +164,10 @@ compat_datafellows(const char *version)
80 datafellows = check[i].bugs;
81+ /* Check to see if the remote side is OpenSSH and not HPN */
82+ if(strstr(version,"OpenSSH") != NULL)
83+ {
84+ if (strstr(version,"hpn") == NULL)
85+ {
86+ datafellows |= SSH_BUG_LARGEWINDOW;
87+ }
88+ }
89 return;
90diff -r -u -p1 openssh-4.3p1/compat.h patch/compat.h
91--- openssh-4.3p1/compat.h 2005-03-01 05:24:33.000000000 -0500
92+++ patch/compat.h 2006-02-01 10:26:10.000000000 -0500
93@@ -58,2 +58,3 @@
94 #define SSH_OLD_FORWARD_ADDR 0x01000000
95+#define SSH_BUG_LARGEWINDOW 0x02000000
96
97diff -r -u -p1 openssh-4.3p1/readconf.h patch/readconf.h
98--- openssh-4.3p1/readconf.h 2005-12-13 03:29:02.000000000 -0500
99+++ patch/readconf.h 2006-02-01 10:26:11.000000000 -0500
100@@ -59,2 +59,3 @@ typedef struct {
101 int tcp_keep_alive; /* Set SO_KEEPALIVE. */
102+ int tcp_rcv_buf; /* user switch to set tcp recv buffer */
103 LogLevel log_level; /* Level for logging. */
104diff -r -u -p1 openssh-4.3p1/scp.c patch/scp.c
105--- openssh-4.3p1/scp.c 2006-01-31 06:11:38.000000000 -0500
106+++ patch/scp.c 2006-02-01 07:04:50.000000000 -0500
107@@ -280,3 +280,3 @@ main(int argc, char **argv)
108 fflag = tflag = 0;
109- while ((ch = getopt(argc, argv, "dfl:prtvBCc:i:P:q1246S:o:F:")) != -1)
110+ while ((ch = getopt(argc, argv, "dfl:pR:rtvBCc:i:P:q1246S:o:F:w:")) != -1)
111 switch (ch) {
112@@ -341,2 +341,5 @@ main(int argc, char **argv)
113 break;
114+ case 'R':
115+ addargs(&args, "-r%s", optarg);
116+ break;
117 default:
118@@ -555,3 +558,3 @@ source(int argc, char **argv)
119 int fd = -1, haderr, indx;
120- char *last, *name, buf[2048];
121+ char *last, *name, buf[16384];
122 int len;
123@@ -782,3 +785,3 @@ sink(int argc, char **argv)
124 int setimes, targisdir, wrerrno = 0;
125- char ch, *cp, *np, *targ, *why, *vect[1], buf[2048];
126+ char ch, *cp, *np, *targ, *why, *vect[1], buf[16384];
127 struct timeval tv[2];
128@@ -943,3 +946,3 @@ bad: run_err("%s: %s", np, strerror(er
129 (void) atomicio(vwrite, remout, "", 1);
130- if ((bp = allocbuf(&buffer, ofd, 4096)) == NULL) {
131+ if ((bp = allocbuf(&buffer, ofd, sizeof(buf))) == NULL) {
132 (void) close(ofd);
133@@ -953,4 +956,4 @@ bad: run_err("%s: %s", np, strerror(er
134 start_progress_meter(curfile, size, &statbytes);
135- for (count = i = 0; i < size; i += 4096) {
136- amt = 4096;
137+ for (count = i = 0; i < size; i += sizeof(buf)) {
138+ amt = sizeof(buf);
139 if (i + amt > size)
140@@ -971,3 +974,3 @@ bad: run_err("%s: %s", np, strerror(er
141 if (limit_rate)
142- bwlimit(4096);
143+ bwlimit(sizeof(buf));
144
145@@ -1086,4 +1089,4 @@ usage(void)
146 (void) fprintf(stderr,
147- "usage: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]\n"
148- " [-l limit] [-o ssh_option] [-P port] [-S program]\n"
149+ "usage: scp [-1246BCpqrRv] [-c cipher] [-F ssh_config] [-i identity_file]\n"
150+ " [-l limit] [-o ssh_option] [-P port] [-R buffer size] [-S program]\n"
151 " [[user@]host1:]file1 [...] [[user@]host2:]file2\n");
152diff -r -u -p1 openssh-4.3p1/serverloop.c patch/serverloop.c
153--- openssh-4.3p1/serverloop.c 2005-12-31 00:33:37.000000000 -0500
154+++ patch/serverloop.c 2006-02-01 10:26:11.000000000 -0500
155@@ -977,2 +977,4 @@ server_request_session(void)
156 0, "server-session", 1);
157+ if (!(datafellows & SSH_BUG_LARGEWINDOW))
158+ c->dynamic_window = 1;
159 if (session_open(the_authctxt, c->self) != 1) {
160diff -r -u -p1 openssh-4.3p1/ssh.c patch/ssh.c
161--- openssh-4.3p1/ssh.c 2005-12-31 00:33:37.000000000 -0500
162+++ patch/ssh.c 2006-02-01 07:02:41.000000000 -0500
3c2fdea7
ER
163@@ -160,7 +160,7 @@
164 usage(void)
165 {
844bac07 166 fprintf(stderr,
3c2fdea7
ER
167-"usage: ssh [-1246AaBCfgkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec]\n"
168+"usage: ssh [-1246AaBCfgkMNnqRrsTtVvXxY] [-b bind_address] [-c cipher_spec]\n"
844bac07 169 " [-D [bind_address:]port] [-e escape_char] [-F configfile]\n"
3c2fdea7
ER
170 " [-i identity_file] [-L [bind_address:]port:host:hostport]\n"
171 " [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]\n"
844bac07
ER
172@@ -165,2 +165,3 @@ usage(void)
173 " [-w tunnel:tunnel] [user@]hostname [command]\n"
174+" [-r receive buffer size]\n"
175 );
3c2fdea7
ER
176@@ -246,9 +246,12 @@
177 /* Parse command-line arguments. */
178 host = NULL;
844bac07 179
3c2fdea7
ER
180+ /* need to set options.tcp_rcv_buf to 0 */
181+ options.tcp_rcv_buf = 0;
182+
844bac07
ER
183 again:
184 while ((opt = getopt(ac, av,
3c2fdea7
ER
185- "1246ab:c:e:fgi:kl:m:no:p:qstvxABCD:F:I:L:MNO:PR:S:TVw:XY")) != -1) {
186+ "1246ab:c:e:fgi:kl:m:no:p:qr:stvxABCD:F:I:L:MNO:PR:S:TVw:XY")) != -1) {
844bac07 187 switch (opt) {
3c2fdea7
ER
188 case '1':
189 options.protocol = SSH_PROTO_1;
844bac07
ER
190@@ -497,2 +501,5 @@ again:
191 break;
192+ case 'r':
193+ options.tcp_rcv_buf = atoi(optarg) * 1024;
194+ break;
195 default:
196@@ -1132,2 +1139,3 @@ ssh_session2_open(void)
197 if (tty_flag) {
198+ window = 4*CHAN_SES_PACKET_DEFAULT;
199 window >>= 1;
200@@ -1139,3 +1147,5 @@ ssh_session2_open(void)
201 "client-session", /*nonblock*/0);
202-
203+ if (!tty_flag && (!(datafellows & SSH_BUG_LARGEWINDOW))) {
204+ c->dynamic_window = 1;
205+ }
206 debug3("ssh_session2_open: channel_new: %d", c->self);
207Only in patch: ssh.c.rej
208diff -r -u -p1 openssh-4.3p1/sshconnect.c patch/sshconnect.c
209--- openssh-4.3p1/sshconnect.c 2005-12-13 03:29:03.000000000 -0500
210+++ patch/sshconnect.c 2006-02-01 10:26:11.000000000 -0500
211@@ -168,2 +168,25 @@ ssh_create_socket(int privileged, struct
212 debug("Allocated local port %d.", p);
213+
214+
215+ /* tuning needs to happen after the socket is */
216+ /* created but before the connection happens */
217+ /* so winscale is negotiated properly -cjr */
218+
219+ /* Set tcp receive buffer if requested */
220+ if (options.tcp_rcv_buf)
221+ {
222+ if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
223+ (void *)&options.tcp_rcv_buf,
224+ sizeof(options.tcp_rcv_buf)) >= 0)
225+ {
226+ debug("setsockopt SO_RCVBUF: %.100s", strerror(errno));
227+ }
228+ else
229+ {
230+ /* coudln't set the socket size to use spec. */
231+ /* should default to system param and continue */
232+ /* warn the user though - cjr */
233+ error("Couldn't set socket receive buffer as requested. Continuing anyway.");
234+ }
235+ }
236 return sock;
237@@ -173,4 +196,26 @@ ssh_create_socket(int privileged, struct
238 error("socket: %.100s", strerror(errno));
239-
240- /* Bind the socket to an alternative local IP address */
241+
242+ /* tuning needs to happen after the socket is */
243+ /* created but before the connection happens */
244+ /* so winscale is negotiated properly -cjr */
245+
246+ /* Set tcp receive buffer if requested */
247+ if (options.tcp_rcv_buf)
248+ {
249+ if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
250+ (void *)&options.tcp_rcv_buf,
251+ sizeof(options.tcp_rcv_buf)) >= 0)
252+ {
253+ debug("setsockopt SO_RCVBUF: %.100s", strerror(errno));
254+ }
255+ else
256+ {
257+ /* coudln't set the socket size to use spec. */
258+ /* should default to system param and continue */
259+ /* warn the user though - cjr */
260+ error("Couldn't set socket receive buffer as requested. Continuing anyway.");
261+ }
262+ }
263+
264+ /* Bind the socket to an alternative local IP address */
265 if (options.bind_address == NULL)
266@@ -481,3 +526,3 @@ ssh_exchange_identification(void)
267 compat20 ? PROTOCOL_MINOR_2 : minor1,
268- SSH_VERSION);
269+ SSH_RELEASE);
270 if (atomicio(vwrite, connection_out, buf, strlen(buf)) != strlen(buf))
271diff -r -u -p1 openssh-4.3p1/sshd.c patch/sshd.c
272--- openssh-4.3p1/sshd.c 2005-12-23 22:59:12.000000000 -0500
273+++ patch/sshd.c 2006-02-01 10:26:11.000000000 -0500
274@@ -379,3 +379,3 @@ sshd_exchange_identification(int sock_in
275 }
276- snprintf(buf, sizeof buf, "SSH-%d.%d-%.100s\n", major, minor, SSH_VERSION);
277+ snprintf(buf, sizeof buf, "SSH-%d.%d-%.100s\n", major, minor, SSH_RELEASE);
278 server_version_string = xstrdup(buf);
279diff -r -u -p1 openssh-4.3p1/version.h patch/version.h
280--- openssh-4.3p1/version.h 2006-02-01 06:27:31.000000000 -0500
281+++ patch/version.h 2006-02-01 10:26:11.000000000 -0500
282@@ -5,2 +5,3 @@
283 #define SSH_PORTABLE "p1"
284-#define SSH_RELEASE SSH_VERSION SSH_PORTABLE
285+#define SSH_HPN "-hpn"
286+#define SSH_RELEASE SSH_VERSION SSH_PORTABLE SSH_HPN
This page took 0.633713 seconds and 4 git commands to generate.