1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-10 18:07:59 +00:00
Commit Graph

552 Commits

Author SHA1 Message Date
Ben Harris
1940b37ff0 Add a new bug-compatibility mode that limits the window size we'll
advertise so that the server can't exceed our maximum packet size.
Enable it for "1.36_sshlib GlobalSCAPE" which apparently sends oversize
packets otherwise.

[originally from svn r7804]
2007-12-05 00:02:06 +00:00
Ben Harris
ca2b97f1d0 Replace mentions of SSH-2 I-Ds with references to the corresponding RFCs.
[originally from svn r7759]
2007-10-03 21:21:18 +00:00
Ben Harris
f8e7894e15 snew() always returns non-NULL, so checking if its return value is NULL
is pointless.

[originally from svn r7758]
2007-10-03 21:06:00 +00:00
Ben Harris
4a9feea43d Factor out the increasingly complicated SSH-2 channel structure initialisation
into its own function.  Maintaining four copies was getting boring.

[originally from svn r7757]
2007-10-03 21:04:26 +00:00
Ben Harris
3c149087e4 Take the code that does flow control in SSH-1, and make it work in SSH-2
as well.  This won't be triggered in the usual case, but it's useful
if the remote end ignores our window, or if we're in "simple" mode and
setting the window far larger than is necessary.

[originally from svn r7756]
2007-10-03 20:29:27 +00:00
Ben Harris
2db59b7443 Rather than rejecting spurious SSH_MSG_CHANNEL_SUCCESSes, and ignoring
spurious SSH_MSG_CHANNEL_FAILUREs, treat them as the protocol errors
they are and forcibly disconnect.  Inspired by recent traffic on
comp.security.ssh.

[originally from svn r7752]
2007-10-01 21:11:11 +00:00
Ben Harris
da5d553afc Merge the looking up of channel numbers for SSH-2 channel messages into
a single function which also handles checking that channels exist and
are properly open.  This should make PuTTY a little less tolerant of
servers that send bogus messages.

[originally from svn r7751]
2007-09-30 19:42:31 +00:00
Ben Harris
22f9618deb Add support for automatically tuning the SSH-2 window size for decent
performance.  The theory behind this is fairly simple, though the
implementation turns out to be a little trickier than it looks.

The basic idea is that when the connection isn't being limited by our ability
to process data, we want to ensure that the window size _as seen by the server_
never drops to zero.  Measuring the server's view of the window size is done
by arranging for it to acknowledge every SSH_MSG_CHANNEL_WINDOW_ADJUST, or 
rather an SSH_MSG_CHANNEL_REQUEST sent just before it.  That way we can tell
when it its outgoing data stream it received the window adjustment, and
thus how small the server's view of the window got.

At present, we only ever increase the window size.  In theory, we could
arrange to reduce it again if the server's view of it seemed to be persistently
too large, but my experiments suggest that getting this right will be tricky.

[originally from svn r7735]
2007-09-24 15:18:11 +00:00
Ben Harris
1854dcd388 Don't try SSH-1 RSA authentication unless the server has advertised support
for it.  It's possible that this obsoletes BUG_CHOKES_ON_RSA.  Certainly
the one SSH-1.5-Cisco-1.25 server I found was correctly not advertising RSA
auth.  For now, leave it in, because I'm not feeling entirely confident.

[originally from svn r7726]
2007-09-20 21:33:21 +00:00
Ben Harris
1e8a5e4796 In SSH-1, don't attempt password authentication unless the server has
announced support for it.  Instead exit with a fatal error (since password
auth is our last resort).

[originally from svn r7724]
2007-09-20 21:07:24 +00:00
Simon Tatham
4b178be3e9 ssh->mainchan can be NULL; try not to segfault in that situation.
[originally from svn r7705]
2007-09-03 19:09:56 +00:00
Ben Harris
ac041a3d66 Use "int" rather than "unsigned" as the argument to ssh2_set_window, not
because it can ever be negative, but because we'll be comparing it with
another int.  This way, C's promotion rules don't bite us and we should
stand slightly more chance of coping with broken servers that overrun our
window.

[originally from svn r7683]
2007-08-06 20:56:52 +00:00
Ben Harris
dd10ff5864 May as well reference an RFC rather than an Internet Draft where we can.
[originally from svn r7682]
2007-08-05 22:18:59 +00:00
Ben Harris
16cbd4f260 Small window-handling tweaks. Set the default big window to 0x7fffffff bytes,
and tweak ssh2_set_window() so it can cope with that.  Also arrange to send
a private channel message in simple mode to tell the server that it can safely
use a large window too.

[originally from svn r7679]
2007-08-05 14:18:43 +00:00
Ben Harris
a3ea90c0e8 In the file-transfer applications, which only ever use the main
channel, arrange to set the SSH-2 window size to something very
large.  This prevents the connection stalling when the window fills
up, and means that PSCP receives data _much_ faster.

[originally from svn r7672]
2007-08-04 22:14:19 +00:00
Ben Harris
3dc0f8507d Tweak window handling so that we send a window adjust if the window is half
used up, rather than over half.  That this increases the throughput of PSCP
by 50% indicates just how broken our window handling is.

[originally from svn r7667]
2007-08-04 16:04:08 +00:00
Ben Harris
7cda30ac1a When omitting session data from logs, don't omit the length of the session
data string.  This isn't strictly necessary, but it makes the logs easier to
use.

[originally from svn r7666]
2007-08-04 15:48:52 +00:00
Ben Harris
f48e3eb16b Tweak to window handling: Keep the local window in a signed integer, and
arrange to handle usefully the case where the server sends us more data
than it's allowed to.  There's no danger of overflow, since the maximum is
OUR_V2_WINSIZE and the minimum is -OUR_V2_MAXPKT (at least if the server is
nice).

[originally from svn r7661]
2007-08-04 14:32:06 +00:00
Ben Harris
77da96c62f Split pkt_ctx into a separate enumeration for each of kex and userauth
instead of a bitfield for both.  This doesn't gain much here, but it should
make it easier to make things other than logging use the context.

[originally from svn r7647]
2007-07-21 21:39:36 +00:00
Ben Harris
c1459927df Arrange that log_packet() isn't called for raw data logging if logctx is null.
This allows us to send data in ssh_init(), albeit at the expense of its not
being properly logged, so arrange to send the version string then if that's
sensible, which should reduce the number of round-trips required to bring
up an SSH-2 connection.

[originally from svn r7646]
2007-07-21 13:43:57 +00:00
Ben Harris
22cde3ee5b Separate out the code for creating and sending SSH version strings so that in
the SSH-2-only case, we can send it as soon as we connect rather than waiting
for the server's one.  Unfortunately, actually doing so will take a little
more effort -- there are subtleties to do with having a working log context
at the right moment that need to be sorted out.

[originally from svn r7645]
2007-07-19 23:53:02 +00:00
Ben Harris
3ac841ff6f Update an outdated comment.
[originally from svn r7642]
2007-07-18 22:54:31 +00:00
Jacob Nevins
46c00b0f38 Rationalise access to, and content of, backends[] array.
Should be no significant change in behaviour.
(Well, entering usernames containing commas on Plink's command line will be
a little harder now.)

[originally from svn r7628]
2007-06-30 21:56:44 +00:00
Simon Tatham
90e7bf4228 Fix a couple of signedness compiler warnings, presumably due to me
using a different version of gcc from before.

[originally from svn r7627]
2007-06-30 18:18:20 +00:00
Simon Tatham
fd26b64c74 Tong Ho points out a missing ssh_pkt_ensure().
[originally from svn r7626]
2007-06-30 18:17:12 +00:00
Simon Tatham
723d834a13 Reindent the section that was marked `XXX The lines below should be
reindented before this is committed'. Unfortunately not before it
was committed, but you can't have everything :-)

[originally from svn r7499]
2007-05-01 12:26:44 +00:00
Ben Harris
dad558a1e5 Add support for RFC 4432 RSA key exchange, the patch for which has been
lying around in my home directory for _years_.

[originally from svn r7496]
2007-04-30 22:09:26 +00:00
Ben Harris
3ffd1fbe38 Use preprocessor trickery to make the signal translation mechanism a little
less hideous.  The output of the preprocessor should be basically unchanged.

[originally from svn r7294]
2007-02-17 22:33:11 +00:00
Ben Harris
f69a0cf005 ssh2_set_window checks whether the channel is being closed, so there's no
need to check that before calling it.

[originally from svn r7293]
2007-02-17 22:15:57 +00:00
Ben Harris
91694cb3a2 When emitting SSH_MSG_IGNORE to protect against known-IV attacks on CBC,
remember to put an empty string in it rather than sending a completely
empty packet.  This should help with those servers (notably RomSShell)
that actually check the contents of SSH_MSG_IGNORE.

[originally from svn r7236]
2007-02-06 13:57:27 +00:00
Ben Harris
2069720687 Fix compiles on GCC 3.3, which doesn't know about assert(0);
[originally from svn r7130]
2007-01-20 20:05:46 +00:00
Simon Tatham
6716b1513e Flag user cancellation of authentication as a clean exit, so that it
will close the window even in `close window only on clean exit'
mode. Also, while I'm here, arrange a suitable exit code for
"exit-signal".

[originally from svn r7121]
2007-01-17 18:38:45 +00:00
Simon Tatham
42801b7e9e Get rid of all the MSVC warnings.
[originally from svn r7086]
2007-01-09 18:24:07 +00:00
Simon Tatham
274f6a60f7 Fix ssh2-cisco-pw-pad by reverting r5122. However, I've kept the
ability to easily re-enable the r5122 behaviour, in case we need to
conditionally switch between the two at a later date.

[originally from svn r7073]
[r5122 == 8a20515844]
[this svn revision also touched putty-wishlist]
2007-01-07 14:30:24 +00:00
Jacob Nevins
cd94e3bc3c Patch from Colin Watson intended to give a clean Unix compile with GCC 4.
(Since we choose to compile with -Werror, this is particularly important.)

I haven't yet checked that the resulting source actually compiles cleanly with
GCC 4, hence not marking `gcc4-warnings' as fixed just yet.

[originally from svn r7041]
2006-12-30 23:00:14 +00:00
Jacob Nevins
64f19d46d8 Minor semantic tweak to bug-compatibility modes: make
BUG_NEEDS_SSH1_PLAIN_PASSWORD do exactly what it says on the tin, independent
of whether BUG_CHOKES_ON_SSH1_IGNORE is set.

This is invisible in the default configuration, as all servers marked as having
the second bug have the first one too, but it would allow one to manually
configure PuTTY to cope with a SSH-1 server that got upset by ignore messages
during authentication, but was fine with their use as keepalives.

[originally from svn r6876]
2006-10-22 19:51:28 +00:00
Jacob Nevins
2afdb02660 I seem to have slightly funted Plink's display of banners etc in r6437, oops.
Fixed.

[originally from svn r6846]
[r6437 == 8719f92c14]
2006-09-05 21:41:38 +00:00
Jacob Nevins
e67b9cfd78 Slight change to password expiry UI for the benefit of Cisco servers, which
are as usual slightly odd.

[originally from svn r6845]
2006-09-05 21:39:30 +00:00
Simon Tatham
8b11c26c57 New logging mode, which records the exact bytes sent over the wire
in an SSH connection _in addition_ to the decrypted packets. This
will hopefully come in useful for debugging wire data corruption
issues: you can strace the server, enable this mode in the client,
and compare the sent and received data.

I'd _like_ to have this mode also log Diffie-Hellman private
exponents, session IDs, encryption and MAC keys, so that the
resulting log file could be used to independently verify the
correctness of all cryptographic operations performed by PuTTY.
However, I haven't been able to convince myself that the security
implications are acceptable. (It doesn't matter that this
information would permit an attacker to decrypt the session, because
the _already_ decrypted session is stored alongside it in the log
file. And I'm not planning, under any circumstances, to log users'
private keys. But gaining access to the log file while the session
was still running would permit an attacker to _hijack_ the session,
and that's the iffy bit.)

[originally from svn r6835]
2006-08-29 19:07:11 +00:00
Jacob Nevins
74278dcd64 Minor tweaks to -nc:
- log host:port in event log
 - add -nc to Plink usage message

[originally from svn r6825]
2006-08-28 17:47:43 +00:00
Simon Tatham
631b494807 New command-line option in Plink (and PuTTY, though it's less useful
there): `plink host -nc host2:port' causes the SSH connection's main
channel to be replaced with a direct-tcpip connection to the
specified destination. This feature is mainly designed for use as a
local proxy: setting your local proxy command to `plink %proxyhost
-nc %host:%port' lets you tunnel SSH over SSH with a minimum of
fuss. Works on all platforms.

[originally from svn r6823]
2006-08-28 15:12:37 +00:00
Simon Tatham
c353c3cc97 The `socket' function in the backends is only ever checked to see if
it's NULL. Since we already have one back end (uxpty) which doesn't
in fact talk to a network socket, and may well have more soon, I'm
replacing this TCP/IP-centric function with a nice neutral
`connected' function returning a boolean. Nothing else about its
semantics has currently changed.

[originally from svn r6810]
2006-08-27 08:03:19 +00:00
Simon Tatham
2d633388a1 Return a non-zero exit code in the event of a fatal-error SSH
session termination. `Close window only on clean exit' was not
working properly on Unix in the absence of this:
notify_remote_exit() was being called and ssh_return_exitcode was
returning zero, causing gtk_main_quit() to be called, _before_
connection_fatal() happened.

[originally from svn r6801]
2006-08-26 09:21:52 +00:00
Jacob Nevins
7958a63147 Sprinkle some header comments in various files in an attempt to explain what
they're for.

[originally from svn r6639]
2006-04-23 18:26:03 +00:00
Jacob Nevins
078c516a45 Dimitry Andric spotted that DH gex with SHA-256 was overflowing a buffer.
Fixed, and added paranoia so that this shouldn't happen again.

[originally from svn r6606]
[this svn revision also touched putty-wishlist]
2006-03-12 19:24:05 +00:00
Jacob Nevins
2cf27e43bb Log the hash used for DH kex (now there's a choice).
[originally from svn r6605]
2006-03-12 15:39:19 +00:00
Simon Tatham
fdee25e1f6 Daniel Meidlinger points out a redundant test :-)
[originally from svn r6579]
2006-02-19 22:37:31 +00:00
Simon Tatham
c2b2d9c539 Introduce a new checkbox and command-line option to inhibit use of
Pageant for local authentication. (This is a `don't use Pageant for
authentication at session startup' button rather than a `pretend
Pageant doesn't exist' button: that is, agent forwarding is
independent of this option.)

[originally from svn r6572]
2006-02-19 12:05:12 +00:00
Jacob Nevins
5d5abbf8d4 Apparently some SSH servers object to our claiming port-forwarded connections
to be from IP "client-side-connection". Claiming "0.0.0.0" instead seems to
work. Spotted by Brant Thomsen.

[originally from svn r6477]
[this svn revision also touched putty-wishlist]
2005-12-07 18:01:40 +00:00
Jacob Nevins
de945281fc r6437 broke the case where Pageant is running but contains no SSH-2 keys
that the SSH-2 server is happy with. Fixed, and since I'm here, fix
`pubkeyfile-and-pageant' as well (for SSH-1 and SSH-2).
Also, in SSH-2, we now reexamine "methods that can continue" for every
Pageant key offer, which is technically more correct although it seems
unlikely that it was causing any real problems.
(It's not entirely pretty, but neither was the old code. We could probably
do with some sort of abstraction for public/private keys to avoid carting
lots of fiddly bits of data around.)

[originally from svn r6459]
[r6437 == 8719f92c14]
[this svn revision also touched putty-wishlist]
2005-11-13 16:06:41 +00:00
Jacob Nevins
c4b2b493ff I broke the ability to cope with multiple consecutive k-i INFO_REQUESTS
in r6437. This ought to be better (but I can't test that case).

[originally from svn r6451]
[r6437 == 8719f92c14]
2005-11-09 23:19:33 +00:00
Jacob Nevins
29f1ae8a7e Fix minor hiccup in SSH-1 p-k auth.
[originally from svn r6447]
2005-11-04 23:31:11 +00:00
Jacob Nevins
4496d752a9 Placate a compiler warning introduced in r6437.
(I forgot we usually compile with -Werror on Unix, oops.)

[originally from svn r6446]
[r6437 == 8719f92c14]
2005-11-04 23:21:42 +00:00
Jacob Nevins
041e93f508 Fix for `ssh2-password-expiry'. Success case tested.
(Much easier since r6437, and actually works to boot.)

[originally from svn r6445]
[r6437 == 8719f92c14]
[this svn revision also touched putty-wishlist]
2005-11-04 14:49:22 +00:00
Jacob Nevins
6724e01956 (do_ssh2_authconn_state).method is redundant since r6437; remove.
Remove FIXMEs from .type assignments, as they look fine.

[originally from svn r6442]
[r6437 == 8719f92c14]
2005-10-31 22:43:51 +00:00
Jacob Nevins
8719f92c14 Revamp SSH authentication code so that user interaction is more
abstracted out; replace loops structured around a single interaction
per loop with less tortuous code (fixes: `ki-multiprompt-crash',
`ssh1-bad-passphrase-crash'; makes `ssh2-password-expiry' and
`proxy-password-prompt' easier).

The new interaction abstraction has a lot of fields that are unused in
the current code (things like window captions); this is groundwork for
`gui-auth'. However, ssh.c still writes directly to stderr; that may
want to be fixed.

In the GUI apps, user interaction is moved to terminal.c. This should
make it easier to fix things like UTF-8 username entry, although I
haven't attempted to do so. Also, control character filtering can be
tailored to be appropriate for individual front-ends; so far I don't
promise anything other than not having made it any worse.

I've tried to test this fairly exhaustively (although Mac stuff is
untested, as usual). It all seems to basically work, but I bet there
are new bugs. (One I know about is that you can no longer make the
PuTTY window go away with a ^D at the password prompt; this should be
fixed.)

[originally from svn r6437]
[this svn revision also touched putty-wishlist]
2005-10-30 20:24:09 +00:00
Jacob Nevins
c14f259ba2 Allow rsakey_pubblob() to return the key comment.
(like r6433 but for SSH-1)

[originally from svn r6434]
[r6433 == 49d2cf19ac]
2005-10-30 15:16:42 +00:00
Jacob Nevins
49d2cf19ac Add ability for ssh2_userkey_loadpub() to return the key comment.
(Not actually used currently, but it makes life easier for a patch I'm
working on.)

[originally from svn r6433]
2005-10-30 13:42:36 +00:00
Jacob Nevins
69ac38c1a8 Fix an error I introduced into SSH packet logging in r5642: some outgoing
packets over about 256 bytes would be logged with 12 bytes of preceding
garbage. (But the rest of the packet was logged in its entirety. This
holds for packets where (int(len/256)%2)==1, with an appropriate fudge
factor applied to `len'.) Ahem.

[originally from svn r6429]
[r5642 == c09d885b27]
2005-10-26 22:18:11 +00:00
Jacob Nevins
f2c17e2df8 Tweak to r6392: spell "MAC" thus.
[originally from svn r6399]
[r6392 == 8fb9bd0216]
2005-10-13 22:51:44 +00:00
Ben Harris
8fb9bd0216 Make SSH_MSG_DISCONNECT reasons less scary (without removing useful content).
[originally from svn r6392]
2005-10-13 21:51:38 +00:00
Ben Harris
c0d36aa00a Implement hmac-sha1-96. It's RECOMMENDED in the current transport draft,
and we don't have any strong reason not to implement it, for all that it's
rather pointless.

[originally from svn r6284]
2005-09-10 16:19:53 +00:00
Ben Harris
9131914278 Add support for diffie-hellman-group-exchange-sha256. Tested against a
patched OpenSSH server.  This is controlled by the same user settings
as diffie-hellman-group-exchange-sha1, which may not be optimal, especially
given that they're both referred to as dh-gex-sha1 in saved sessions.

[originally from svn r6272]
2005-09-04 14:53:39 +00:00
Ben Harris
a42d103cf9 Restructure things so that a single entry in the KEX preference list can
correspond to multiple SSH-2 KEX algorithms.  We already do the equivalent
for cipher algorithms.

[originally from svn r6262]
2005-09-03 13:41:43 +00:00
Jacob Nevins
d628d14e7f Check ssh->v2_session_id_len _after_ assigning to it.
[originally from svn r6260]
2005-09-02 10:51:09 +00:00
Ben Harris
a59356aa74 Add infrastructure for supporting multiple hashes in key exchange.
Nothing very surprising here.

[originally from svn r6251]
2005-08-31 20:43:06 +00:00
Ben Harris
11d5c791ac Rename ssh_md5 and ssh_sha1 to ssh_hmac_md5 and ssh_hmac_sha1 respectively.
This is to make room for a hash abstraction that's likely to want to use
ssh_sha1, at least.

[originally from svn r6249]
2005-08-31 19:11:19 +00:00
Ben Harris
7cceb6eeae Further progress in the direction of variable exchange hashes -- stash the
outgoing KEXINIT, and only start generating the exchange hash once we know
which KEX method we're using.

[originally from svn r6242]
2005-08-30 22:39:35 +00:00
Ben Harris
ef630659dd Beginnings of support for multiple exchange hashes in SSH-2: rather than
storing a SHA-1 hash of the client and server version strings, store the
strings themselves so we can feed them through the appropriate hash when
we know what it is.

[originally from svn r6241]
2005-08-30 20:38:57 +00:00
Jacob Nevins
1e57b290b8 More versions of WeOnlyDo have the rekey bug (but they've fixed it now).
[originally from svn r6233]
2005-08-29 00:34:03 +00:00
Jacob Nevins
5661adabbc I think this should fix various problems with queued incoming data not being
processed and incoming data being processed out of order, which I suspect is
the cause of `ssh1-fwd-trouble' as noted by Gevan Dutton. I'm not able to
test the failure case, but it doesn't seem to have obviously broken anything
in the cases I have tested, anyway.

[originally from svn r6221]
2005-08-26 21:17:49 +00:00
Ben Harris
575fa173d8 Florian Gaab reports that freeSSHd 1.0.7, which claims a "softwareversion"
of "WeOnlyDo-1.2.6", mishandles repeat key exchange.  Add it to the list.

[originally from svn r6200]
2005-08-22 20:07:46 +00:00
Ben Harris
ae64be506f draft-ietf-secsh-transport-24 says that only "SSH-" at the start of a line
marks a version string.  It's a bit vague about the definition of a line,
but I think it's reasonable to assume that they'll end with LF.  Change
do_ssh_init() to ignore "SSH-" anywhere else.  This makes the existing state
machine overkill, so replace it with something a little more readable.

[originally from svn r6138]
2005-07-24 13:46:14 +00:00
Ben Harris
7d49271ada Piers Finlayson reports that "DigiSSH_2.0" chokes (in a new and exciting
manner) on rekeys.  Add it to the list.

[originally from svn r6067]
2005-07-05 21:15:23 +00:00
Jacob Nevins
9897694920 Fix an apparently-harmless error spotted by Ben Rudiak-Gould:
do_ssh2_transport() was returning the wrong value for rekeys after the first.
This apparent error was introduced in r4901, but we can't see any reason for
the change to have been made. If it turns out to be a mistake to revert it,
I'm sure we'll find out.

Here for posterity is Simon's analysis:

| A lot of the return values from do_ssh2_transport appear to be vestigial: it
| used to be that a zero return from do_ssh2_transport meant it had handled the
| packet internally, and a 1 return meant the packet wasn't a transport-layer
| one and needed to pass on to do_ssh2_authconn. Since r4901, however, the
| layer discrimination is done based on the message type ranges, and the only
| remaining dependency on the return value from do_ssh2_transport is a special
| case in ssh2_protocol which detects the first 1 return and makes the
| initialisation call to do_ssh2_authconn.
| 
| Therefore, the gratuitous 1 return on every key exchange as a result of the
| confusing if statement is simply ignored in ssh2_protocol (because
| ssh->protocol_initial_phase_done is already TRUE). So the remaining question
| was, why does the _lack_ of that 1 return not cause a problem, if the if's
| sense is indeed reversed?
| 
| The answer is that 1 is still returned, just not by the crReturn inside the
| if statement. It's returned by the next crReturn, just after
| wait_for_rekey(). Which suggests that in fact, the if statement has the
| correct sense, but the crReturn inside it has the wrong value - it should be
| returning _zero_, to indicate that every NEWKEYS after the first one is
| uninteresting to the authconn code, and on the very first run through that
| doesn't happen and the NEWKEYS gets all the way to the crReturn(1) later on.

[originally from svn r5986]
[r4901 == a4ba026838]
2005-06-21 20:13:48 +00:00
Ben Harris
4ad47722e8 Make the sanity-checks on the size of incoming packets much stricter. We now
enforce the following:

* Packet must have at least one byte of payload and four bytes of padding.
* Total packet length must not exceed 35000 bytes compressed.
* Total packet length including length field must be a multiple of cipher
  block size (or eight bytes).

The feebleness of our old checks was noticed by Ben Rudiak-Gould.

[originally from svn r5981]
2005-06-20 13:56:30 +00:00
Ben Harris
93712a3ee1 A major purpose of PuTTY's memory-allocation functions is to succeed or die
trying, so there's no need to check their return values for NULL.  Spotted
by Ben Rudiak-Gould.

[originally from svn r5978]
2005-06-19 14:17:24 +00:00
Jacob Nevins
3c7cb747f6 Detection of "auth-agent@openssh.com" was too liberal. Spotted by
Ben Rudiak-Gould.

[originally from svn r5962]
2005-06-14 23:20:42 +00:00
Jacob Nevins
a7097f7e86 Remove a couple of mistaken references to Telnet in comments.
[originally from svn r5853]
2005-05-28 13:46:04 +00:00
Jacob Nevins
99ecca53ed Factor out all local SSH disconnections into a new function ssh_disconnect(),
and add the ability to treat a local disconnection as "unclean" -- notably, if
we can't agree any authentication methods to even try; someone was complaining
that the PuTTY window by default just disappears for no apparent reason in this
circumstance.

Also, use appropriate disconnect codes for those SSH2_MSG_DISCONNECT messages
that we do send.

I don't think I've seriously broken any user-visible behaviour, but the way
that connection-close distinctions are transmitted to the front-end is shaky
(or so it seems to me), so there may be non-ideal changes on some platforms.

[originally from svn r5824]
2005-05-21 16:49:27 +00:00
Jacob Nevins
b742913984 connection_fatal() should be called after ssh_closing() and other accesses to
`ssh', since it potentially frees it and potentially doesn't return.
Only affected a couple of rare circumstances.

[originally from svn r5787]
2005-05-16 14:41:08 +00:00
Jacob Nevins
680a32d5bc Don't try and set up reconfigured port-forwardings if the connection isn't yet
ready for them. Spotted by Martin Dushkov.

[originally from svn r5786]
2005-05-16 08:31:05 +00:00
Jacob Nevins
aa43d817d2 Use the packet dispatch table to handle USERAUTH_BANNER messages, which should
hopefully solve `drop-banner'. I haven't been able to test the failure case,
but the behaviour with OpenSSH appears no worse.

[originally from svn r5772]
[this svn revision also touched putty-wishlist]
2005-05-12 15:09:35 +00:00
Jacob Nevins
b099456c87 Implement `bypass-ssh2-userauth', since from correspondence it sounds like
there are servers which could in principle operate in this mode, although I
don't know if any do in practice. (Hence, I haven't been able to test it.)

[originally from svn r5748]
[this svn revision also touched putty-wishlist]
2005-05-05 22:37:54 +00:00
Ben Harris
df913d0036 Also blank X authentication data when using SSH-1, and add a comment explaining
why this may not be sufficient to hide it.

[originally from svn r5720]
2005-04-30 17:08:48 +00:00
Ben Harris
162d04d360 X11 authentication data are generally sensitive, so blank them from packet
logs by default.

[originally from svn r5719]
2005-04-30 16:13:11 +00:00
Ben Harris
d83cd2f79b Fix stupid typo that probably utterly broke SSH-1 support, and caused compiles
with GCC to fail.  Not sure how it survived long enough to test, really.

[originally from svn r5715]
2005-04-30 14:26:46 +00:00
Ben Harris
fcaee2626c In SSH-2 mode, PuTTY wasn't sending KEXINIT until it had received one from the
server, which led to stalemate if the server did the same.  PuTTY now sends
KEXINIT proactively as soon as it's worked out that it's talking SSH-2.

[originally from svn r5685]
2005-04-27 11:10:54 +00:00
Ben Harris
f2b0335c48 Now that we've got at least some SDCTR modes working (and aes256-ctr is our
default preferred cipher), add code to inject SSH_MSG_IGNOREs to randomise
the IV when using CBC-mode ciphers.  Each cipher has a flag to indicate
whether it needs this workaround, and the SSH packet output maze has gained
some extra complexity to implement it.

[originally from svn r5659]
2005-04-23 16:22:51 +00:00
Jacob Nevins
fb581ac625 First crack at `terminal-modes' in SSH. PuTTY now sends ERASE by default,
Unix Plink sends everything sensible it can find, and it's fully configurable
from the GUI.

I'm not entirely sure about the precise set of modes that Unix Plink should
look at; informed tweaks are welcome.

Also the Mac bits are guesses (but trivial).

[originally from svn r5653]
[this svn revision also touched putty-wishlist]
2005-04-21 13:57:08 +00:00
Jacob Nevins
62a3389981 Remove "none" from the MACs we offer to support in SSH-2. (It was at the
end, after the REQUIRED "hmac-sha1".) This has been present since SSH-2
support was introduced (r569).

[originally from svn r5643]
[r569 == 35205e5cb7]
2005-04-19 13:27:21 +00:00
Jacob Nevins
c09d885b27 Add ability to construct SSH-1 packets incrementally (not used yet).
I've added this to support `terminal-modes', but since this unifies some
SSH-1 and SSH-2 packet construction code, it saves a few hundred bytes.
Bonus.

[originally from svn r5642]
2005-04-18 21:09:58 +00:00
Ben Harris
09951c6078 Implement my experimental arcfour modes. The 256-bit version is disabled
until I can test it against someone else's implementation.

[originally from svn r5633]
2005-04-14 22:58:29 +00:00
Jacob Nevins
6eec320f0b Unify GET_32BIT()/PUT_32BIT() et al from numerous source files into misc.h.
I've done a bit of testing (not exhaustive), and I don't _think_ I've broken
anything...

[originally from svn r5632]
2005-04-12 20:04:56 +00:00
Simon Tatham
6df09c6275 <1112163342.018492.101240@f14g2000cwb.googlegroups.com> on
comp.security.ssh contains a Dr Watson log which looks to me as if
`unclean-close-crash' occurred due to a rekey timer going off after
the session had closed. Hence, ssh2_timer() now avoids doing
anything if the session is already closed, and also ssh_do_close()
proactively calls expire_timer_context(). Between those I think they
ought to solve the problem.

[originally from svn r5564]
2005-03-30 08:27:54 +00:00
Simon Tatham
4fa2049108 After we receive EOF on stdin, we should clear ssh->send_ok so that
we stop trying to read anything further from stdin. Otherwise we
send a continuous stream of SSH2_MSG_CHANNEL_EOF.

[originally from svn r5561]
2005-03-29 13:10:33 +00:00
Simon Tatham
7e41c571db The structural reorganisation of ssh.c (r4909) caused
ssh2_try_send() to no longer be run after receiving WINDOW_ADJUSTs.
I believe this is likely to have been the cause of recent PSCP
hanging issues.

[originally from svn r5517]
[r4909 == 02b0474f57]
2005-03-17 19:49:51 +00:00
Jacob Nevins
1ddb28955c Make it clearer which protocol version various bugs apply to.
[originally from svn r5490]
2005-03-11 15:24:09 +00:00
Jacob Nevins
5aa719d16e Consistently use a single notation to refer to SSH protocol versions, as
discussed. Use Barrett and Silverman's convention of "SSH-1" for SSH protocol
version 1 and "SSH-2" for protocol 2 ("SSH1"/"SSH2" refer to ssh.com
implementations in this scheme). <http://www.snailbook.com/terms.html>

[originally from svn r5480]
2005-03-10 16:36:05 +00:00
Jacob Nevins
b222632c66 Add notification when using the various auth methods with server-supplied
prompts, to make it more obvious if a server is attempting to spoof a local
passphrase prompt.

I believe an alert user could have spotted this in all cases in SSH-2,
although perhaps not in SSH-1. (But they'd have to have enabled
TIS/CryptoCard.)

[originally from svn r5450]
2005-03-06 16:38:19 +00:00