]> asedeno.scripts.mit.edu Git - PuTTY.git/log
PuTTY.git
9 years agoSort out the mess with OpenSSH key file formats.
Simon Tatham [Sun, 10 May 2015 06:42:48 +0000 (07:42 +0100)]
Sort out the mess with OpenSSH key file formats.

When I implemented reading and writing of the new format a couple of
weeks ago, I kept them strictly separate in the UI, so you have to ask
for the format you want when exporting. But in fact this is silly,
because not every key type can be saved in both formats, and OpenSSH
itself has the policy of using the old format for key types it can
handle, unless specifically asked to use the new one.

So I've now arranged that the key file format enum has three values
for OpenSSH: PEM, NEW and AUTO. Files being loaded are identified as
either PEM or NEW, which describe the two physical file formats. But
exporting UIs present either AUTO or NEW, where AUTO is the virtual
format meaning 'save in the old format if possible, otherwise the new
one'.

9 years agoSupport public keys using the "ssh-ed25519" method.
Chris Staite [Sat, 9 May 2015 14:02:54 +0000 (15:02 +0100)]
Support public keys using the "ssh-ed25519" method.

This introduces a third system of elliptic curve representation and
arithmetic, namely Edwards form.

9 years agoSupport ECDH key exchange using the 'curve25519' curve.
Chris Staite [Sat, 9 May 2015 14:02:52 +0000 (15:02 +0100)]
Support ECDH key exchange using the 'curve25519' curve.

This is the kex protocol id "curve25519-sha256@libssh.org", so called
because it's over the prime field of order 2^255 - 19.

Arithmetic in this curve is done using the Montgomery representation,
rather than the Weierstrass representation. So 'struct ec_curve' has
grown a discriminant field and a union of subtypes.

9 years agoProvide a little-endian version of bignum_from_bytes().
Chris Staite [Sat, 9 May 2015 14:02:50 +0000 (15:02 +0100)]
Provide a little-endian version of bignum_from_bytes().

9 years agoVary cmdgen's default key size based on key type.
Simon Tatham [Sat, 9 May 2015 14:02:47 +0000 (15:02 +0100)]
Vary cmdgen's default key size based on key type.

It's a bit silly to have 'puttygen -t ecdsa' immediately crash out
because the default key size is 2048 and we don't know a 2048-bit
elliptic curve.

9 years agoConst-correctness in the debug functions!
Simon Tatham [Sat, 9 May 2015 14:02:45 +0000 (15:02 +0100)]
Const-correctness in the debug functions!

I'm finding missing constifications all over the place this week.
Turns out that dmemdump() has been taking a non-const memory pointer
ever since the beginning, and it's never come up until now. How silly.

9 years agoCompletely remove the privdata mechanism in dialog.h.
Simon Tatham [Fri, 8 May 2015 18:04:16 +0000 (19:04 +0100)]
Completely remove the privdata mechanism in dialog.h.

The last use of it, to store the contents of the saved session name
edit box, was removed nearly two years ago in svn r9923 and replaced
by ctrl_alloc_with_free. The mechanism has been unused ever since
then, and I suspect any further uses of it would be a bad idea for the
same reasons, so let's get rid of it.

9 years agoFix two small memory leaks in config mechanism.
Simon Tatham [Fri, 8 May 2015 17:57:18 +0000 (18:57 +0100)]
Fix two small memory leaks in config mechanism.

The memory dangling off ssd->sesslist should be freed when ssd itself
goes away, and the font settings ctrlset we delete in gtkcfg.c should
be freed as well once it's been removed from its containing array.

Thanks to Ranjini Aravind for pointing these out.

9 years agoRemove the list of key algorithms in pageant.c.
Simon Tatham [Thu, 7 May 2015 18:57:46 +0000 (19:57 +0100)]
Remove the list of key algorithms in pageant.c.

The only reason those couldn't be replaced with a call to the
centralised find_pubkey_alg is because that function takes a zero-
terminated string and instead we had a (length,pointer) string. Easily
fixed; there's now a find_pubkey_alg_len(), and we call that.

This also fixes a string-matching bug in which the sense of memcmp was
reversed by mistake for ECDSA keys!

9 years agoClean up Unix Pageant's setup and teardown.
Simon Tatham [Thu, 7 May 2015 18:04:25 +0000 (19:04 +0100)]
Clean up Unix Pageant's setup and teardown.

I've moved the listening socket setup back to before the lifetime
preparations, so in particular we find out that we couldn't bind to
the socket _before_ we fork. The only part that really needed to come
after lifetime setup was the logging setup, so that's now a separate
function called later.

Also, the random exit(0)s in silly places like x11_closing have turned
into setting a time_to_die flag, so that all clean exits funnel back
to the end of main() which at least tries to tidy up a bit afterwards.

(Finally, fixed a small bug in testing the return value of waitpid(),
which only showed up once we didn't exit(0) after the first wait.
Ahem.)

9 years agoFix the inverted return values in pageant_add_ssh*_key().
Simon Tatham [Thu, 7 May 2015 17:41:06 +0000 (18:41 +0100)]
Fix the inverted return values in pageant_add_ssh*_key().

This would have caused intermittent use-after-free crashes in Windows
Pageant, but only with keys added via the primary Pageant's own UI or
command line - not keys submitted from another process, because those
don't go through the same function.

9 years agoFix SSH-1 RSA key handling in Pageant.
Simon Tatham [Wed, 6 May 2015 19:49:07 +0000 (20:49 +0100)]
Fix SSH-1 RSA key handling in Pageant.

The auxiliary values (the two primes and the inverse of one mod the
other) were being read into the key structure wrongly, causing
crt_modpow() in sshrsa.c to give the wrong answers where straight
modpow would not have.

This must have been broken ever since I implemented the RSA CRT
optimisation in 2011. And nobody has noticed, which is a good sign for
the phasing out of SSH-1 :-) I only spotted it myself because I was
testing all the Pageant message types in the course of implementing
the new logging.

9 years agoPut proper logging into Pageant.
Simon Tatham [Wed, 6 May 2015 18:32:26 +0000 (19:32 +0100)]
Put proper logging into Pageant.

Now it actually logs all its requests and responses, the fingerprints
of keys mentioned in all messages, and so on.

I've also added the -v option, which causes Pageant in any mode to
direct that logging information to standard error. In --debug mode,
however, the logging output goes to standard output instead (because
when debugging, that information changes from a side effect to the
thing you actually wanted in the first place :-).

An internal tweak: the logging functions now take a va_list rather
than an actual variadic argument list, so that I can pass it through
several functions.

9 years agoRemove some FIXMEs left in from initial work.
Simon Tatham [Wed, 6 May 2015 17:08:05 +0000 (18:08 +0100)]
Remove some FIXMEs left in from initial work.

LIFE_EXEC is already dealt with, and I forgot to take out the comment
reminding me to do it, ahem.

The LIFE_PARENT mentioned in the same comment was an idea I had but
couldn't think of a way to make it work: if you have a terminal-only
shell session in which you want to eval $(ssh-agent), then it's
annoying and fragile to have to remember to kill the agent when you
log out, so you'd like it to automatically tie its lifetime to that of
the shell from which you invoked it. Unfortunately, I don't know of
any way to do that without race conditions. (E.g. if only pageant
didn't fork, then it could poll its own ppid until it became 1 - but
the child process would find it was 1 already.)

9 years agoProvide a Unix port of Pageant.
Simon Tatham [Tue, 5 May 2015 19:16:23 +0000 (20:16 +0100)]
Provide a Unix port of Pageant.

This is much more like ssh-agent than the Windows version is - it sets
SSH_AUTH_SOCK and SSH_AGENT_PID as its means of being found by other
processes, rather than Windows Pageant's approach of establishing
itself in a well-known location. But the actual agent code is the same
as Windows Pageant.

For the moment, this is an experimental utility and I don't expect it
to be useful to many people; its immediate use to me is that it
provides a way to test and debug the agent code on Unix, and also to
use the agent interface as a convenient way to exercise public key
functions I want to debug. And of course it means I can be constantly
using and testing my own code, on whatever platform I happen to be
using. In the further future, I have a list of possible features I
might add to it, but I don't know which ones I'll decide are
worthwhile.

One feature I've already put in is a wider range of lifetime
management options than ssh-agent: the -X mode causes Pageant to make
a connection to your X display, and automatically terminate when that
connection closes, so that it has the same lifetime as your X session
without having to do the cumbersome trick of exec()ing the subsequent
session-management process.

9 years agoMove make_dir_and_check_ours() out into uxmisc.c.
Simon Tatham [Tue, 5 May 2015 19:16:22 +0000 (20:16 +0100)]
Move make_dir_and_check_ours() out into uxmisc.c.

I'm going to want to use it for a second purpose in a minute.

9 years agoCross-platform support for speaking SSH agent protocol on a Socket.
Simon Tatham [Tue, 5 May 2015 19:16:20 +0000 (20:16 +0100)]
Cross-platform support for speaking SSH agent protocol on a Socket.

The exact nature of the Socket is left up to the front end to decide,
so that we can use a Unix-domain socket on Unix and a Windows named
pipe on Windows. But the logic of how we receive data and what we send
in response is all cross-platform.

9 years agoMove half of Pageant out into a cross-platform source file.
Simon Tatham [Tue, 5 May 2015 19:16:19 +0000 (20:16 +0100)]
Move half of Pageant out into a cross-platform source file.

I'm aiming for windows/winpgnt.c to only contain the parts of Windows
Pageant that are actually to do with handling the Windows API, and for
all the actual agent logic to be cross-platform.

This commit is a start: I've moved every function and internal
variable that was easy to move. But it doesn't get all the way there -
there's still a lot of logic in add_keyfile() and get_keylist*() that
would be good to move out to cross-platform code, but it's harder
because that code is currently quite intertwined with details of
Windows OS interfacing such as printing message boxes and passphrase
prompts and calling back out to agent_query if the Pageant doing that
job isn't the primary one.

9 years agoConst-correctness in x11_setup_display.
Simon Tatham [Tue, 5 May 2015 19:16:18 +0000 (20:16 +0100)]
Const-correctness in x11_setup_display.

The 'display' parameter should have been a const char *. No call sites
affected.

9 years agoConst-correctness in public-key functions.
Simon Tatham [Tue, 5 May 2015 19:16:17 +0000 (20:16 +0100)]
Const-correctness in public-key functions.

Several of the functions in ssh2_signkey, and one or two SSH-1 key
functions too, were still taking assorted non-const buffer parameters
that had never been properly constified. Sort them all out.

9 years agoUse find_pubkey_alg in openssh_read_new().
Simon Tatham [Sat, 2 May 2015 14:11:41 +0000 (15:11 +0100)]
Use find_pubkey_alg in openssh_read_new().

This is better than listing all the algorithm names in yet another
place that will then need updating when a new key format is added.
However, that also means I need to find a new place to put the
'npieces' value I was previously setting up differently per key type;
since that's a fundamental property of the key format, I've moved it
to a constant field in the ssh_signkey structure, and filled that
field in for all the existing key types with the values from the
replaced code in openssh_read_new().

9 years agoWrite an exporter for the new OpenSSH format.
Simon Tatham [Tue, 28 Apr 2015 18:51:52 +0000 (19:51 +0100)]
Write an exporter for the new OpenSSH format.

This was a lot less work than the importer, partly because the bcrypt
primitive is already working now, and mostly because we don't have to
handle the possible cross product of ciphers and kdfs in full and
completely hypothetical generality - we can emit a fixed choice of
either nothing or our chosen pair.

9 years agoCompletely separate old and new OpenSSH key handling code.
Simon Tatham [Tue, 28 Apr 2015 18:49:55 +0000 (19:49 +0100)]
Completely separate old and new OpenSSH key handling code.

I thought it would be a good idea to share the loading code on the
basis that the outer header line + base64 format isn't too different,
but in fact I ended up faffing endlessly with mode bits and unions and
constantly re-testing in every subfunction which kind of key it was,
so that small saving wasn't worth it.

9 years agoSeparate key-type enum values for old and new OpenSSH keys.
Simon Tatham [Tue, 28 Apr 2015 18:46:58 +0000 (19:46 +0100)]
Separate key-type enum values for old and new OpenSSH keys.

It's all very well for these two different formats to share a type
code as long as we're only loading them and not saving, but as soon as
we need to save one or the other, we'll need different type codes
after all.

This commit introduces the openssh_new_write() function, but for the
moment, it always returns failure.

9 years agoFix enum-conflation in cmdgen.c.
Simon Tatham [Tue, 28 Apr 2015 18:46:08 +0000 (19:46 +0100)]
Fix enum-conflation in cmdgen.c.

I'd somehow managed to declare an enum in cmdgen.c with key types
OPENSSH and SSHCOM, and use it interchangeably with the one in ssh.h
with SSH_KEYTYPE_OPENSSH and SSH_KEYTYPE_SSHCOM.

It so happened that the relevant two enum values matched up! So this
hasn't caused a bug yet, but it's an accident waiting to happen. Fix
it before it does.

9 years agoTeach PuTTYgen to import from OpenSSH's new key format.
Simon Tatham [Mon, 27 Apr 2015 19:48:29 +0000 (20:48 +0100)]
Teach PuTTYgen to import from OpenSSH's new key format.

This is import only, for the moment: I haven't written an exporter
yet. Also, we currently don't support the format's full generality - a
new-style OpenSSH key file can contain multiple keys, but this code
currently only handles files with one key in them. That should be easy
to change, though, given only a little UI.

9 years agoSome miscellaneous marshalling helpers.
Simon Tatham [Mon, 27 Apr 2015 19:48:29 +0000 (20:48 +0100)]
Some miscellaneous marshalling helpers.

I'm about to use these in a new piece of code, but they may come in
helpful elsewhere as well. match_ssh_id in particular wraps an idiom
that's quite common in the rest of the codebase.

9 years agoProvide a script to regenerate the Blowfish init tables.
Simon Tatham [Mon, 27 Apr 2015 19:48:29 +0000 (20:48 +0100)]
Provide a script to regenerate the Blowfish init tables.

Since I've recently published a program that can easily generate the
required digits of pi, and since I was messing around in sshblowf.c
already, it seemed like a good idea to provide a derivation of all
that hex data.

9 years agoImplementation of OpenSSH's bcrypt.
Simon Tatham [Mon, 27 Apr 2015 19:48:29 +0000 (20:48 +0100)]
Implementation of OpenSSH's bcrypt.

This isn't the same as the standard bcrypt; it's OpenSSH's
modification that they use for their new-style key format.

In order to implement this, I've broken up blowfish_setkey() into two
subfunctions, and provided one of them with an extra optional salt
parameter, which is NULL in ordinary Blowfish but used by bcrypt.
Also, I've exposed some of sshblowf.c's internal machinery for the new
sshbcrypt.c to use.

9 years agoPaste error in comment.
Simon Tatham [Mon, 27 Apr 2015 05:54:21 +0000 (06:54 +0100)]
Paste error in comment.

SSH2_MSG_KEX_DH_GEX_REQUEST_OLD and SSH2_MSG_KEX_DH_GEX_REQUEST were
correctly _defined_ as different numbers, but the comments to the
right containing the hex representations of their values were
accidentally the same.

9 years agoAdd smemclrs of all hash states we destroy.
Simon Tatham [Sun, 26 Apr 2015 22:55:33 +0000 (23:55 +0100)]
Add smemclrs of all hash states we destroy.

9 years agoUse a timing-safe memory compare to verify MACs.
Simon Tatham [Sun, 26 Apr 2015 22:31:11 +0000 (23:31 +0100)]
Use a timing-safe memory compare to verify MACs.

Now that we have modes in which the MAC verification happens before
any other crypto operation and hence will be the only thing seen by an
attacker, it seems like about time we got round to doing it in a
cautious way that tries to prevent the attacker from using our memcmp
as a timing oracle.

So, here's an smemeq() function which has the semantics of !memcmp but
attempts to run in time dependent only on the length parameter. All
the MAC implementations now use this in place of !memcmp to verify the
MAC on input data.

9 years agoSupport OpenSSH encrypt-then-MAC protocol extension.
Simon Tatham [Sun, 26 Apr 2015 22:30:32 +0000 (23:30 +0100)]
Support OpenSSH encrypt-then-MAC protocol extension.

This causes the initial length field of the SSH-2 binary packet to be
unencrypted (with the knock-on effect that now the packet length not
including MAC must be congruent to 4 rather than 0 mod the cipher
block size), and then the MAC is applied over the unencrypted length
field and encrypted ciphertext (prefixed by the sequence number as
usual). At the cost of exposing some information about the packet
lengths to an attacker (but rarely anything they couldn't have
inferred from the TCP headers anyway), this closes down any
possibility of a MITM using the client as a decryption oracle, unless
they can _first_ fake a correct MAC.

ETM mode is enabled by means of selecting a different MAC identifier,
all the current ones of which are constructed by appending
"-etm@openssh.com" to the name of a MAC that already existed.

We currently prefer the original SSH-2 binary packet protocol (i.e. we
list all the ETM-mode MACs last in our KEXINIT), on the grounds that
it's better tested and more analysed, so at the moment the new mode is
only activated if a server refuses to speak anything else.

9 years agoFix a few memory leaks.
Simon Tatham [Sun, 26 Apr 2015 09:49:24 +0000 (10:49 +0100)]
Fix a few memory leaks.

Patch due to Chris Staite.

9 years agoDivide the Bugs panel in half.
Simon Tatham [Sat, 25 Apr 2015 09:46:56 +0000 (10:46 +0100)]
Divide the Bugs panel in half.

It overflowed as a result of the previous commit.

9 years agoSupport RFC 4419.
Simon Tatham [Sat, 25 Apr 2015 09:46:53 +0000 (10:46 +0100)]
Support RFC 4419.

PuTTY now uses the updated version of Diffie-Hellman group exchange,
except for a few old OpenSSH versions which Darren Tucker reports only
support the old version.

FIXME: this needs further work because the Bugs config panel has now
overflowed.

9 years agoOld Dropbear servers have the ssh-close-vs-request bug.
Jacob Nevins [Thu, 23 Apr 2015 22:42:45 +0000 (23:42 +0100)]
Old Dropbear servers have the ssh-close-vs-request bug.

Add automatic bug detection. (Versions verified by Matt Johnston.)

9 years agoFix a dangerous cross-thread memory access.
Simon Tatham [Tue, 7 Apr 2015 21:17:08 +0000 (22:17 +0100)]
Fix a dangerous cross-thread memory access.

When a winhandl.c input thread returns EOF to the main thread, the
latter might immediately delete the input thread's context. I
carefully wrote in a comment that in that case we had to not touch ctx
ever again after signalling to the main thread - but the test for
whether that was true, which also touched ctx, itself came _after_ the
SetEvent which sent that signal. Ahem.

Spotted by Minefield, which it looks as if I haven't run for a while.

9 years agoClean up a stale foreign handle in winnps.c.
Simon Tatham [Tue, 7 Apr 2015 20:54:41 +0000 (21:54 +0100)]
Clean up a stale foreign handle in winnps.c.

I had set up an event object for signalling incoming connections to
the named pipe, and then called handle_add_foreign_event to get that
event object watched for connections - but when I closed down the
listening pipe, I deleted the event object without also cancelling
that foreign-event handle, so that winhandl.c would potentially call
the callback for a destroyed object.

9 years agoDon't output negative numbers in the ESC[13t report.
Simon Tatham [Sat, 7 Mar 2015 20:57:26 +0000 (20:57 +0000)]
Don't output negative numbers in the ESC[13t report.

A minus sign is illegal at that position in a control sequence, so if
ESC[13t should report something like ESC[3;-123;234t then we won't
accept it as input. Switch to printing the numbers as unsigned, so
that negative window coordinates are output as their 32-bit two's
complement; experimentation suggests that PuTTY does accept that on
input.

9 years agoStop Windows PuTTY becoming unresponsive if server floods us.
Simon Tatham [Sat, 7 Mar 2015 17:10:36 +0000 (17:10 +0000)]
Stop Windows PuTTY becoming unresponsive if server floods us.

This was an old bug, fixed around 0.59, which apparently regressed
when I rewrote the main event loop using the toplevel_callback
mechanism.

Investigation just now suggests that it has to do with my faulty
assumption that Windows PeekMessage would deliver messages in its
message queue in FIFO order (i.e. that the thing calling itself a
message queue is actually a _queue_). In fact my WM_NETEVENT seems to
like to jump the queue, so that once a steady stream of them starts
arriving, we never do anything else in the main event loop (except
deal with handles).

Worked around in a simple and slightly bodgy way, namely, we don't
stop looping on PeekMessage and run our toplevel callbacks until we've
either run out of messages completely or else seen at least one that
_isn't_ a WM_NETEVENT. That way we should reliably interleave NETEVENT
processing with processing of other stuff.

9 years agoMove kh2reg.py link from svn to git.
Jacob Nevins [Sun, 1 Mar 2015 12:27:27 +0000 (12:27 +0000)]
Move kh2reg.py link from svn to git.

9 years agoMinimal documentation for ECDSA/ECDH support.
Jacob Nevins [Sat, 28 Feb 2015 19:08:15 +0000 (19:08 +0000)]
Minimal documentation for ECDSA/ECDH support.

9 years agoAdd a new checklist item.
Simon Tatham [Sat, 28 Feb 2015 15:47:45 +0000 (15:47 +0000)]
Add a new checklist item.

I managed to build from completely the wrong commit this morning, so
make sure to double-check next time!

9 years agoTypo.
Simon Tatham [Sat, 28 Feb 2015 13:10:55 +0000 (13:10 +0000)]
Typo.

9 years agoReorganise the release checklist.
Simon Tatham [Sat, 28 Feb 2015 12:04:54 +0000 (12:04 +0000)]
Reorganise the release checklist.

Mostly I'm rearranging things because of the new workflows that git
makes available - it's now possible (and indeed sensible) to prepare a
lot of stuff in a fairly relaxed manner in local checkouts, and then
the process of going live with the release has a lot less manual
writing of stuff and a lot more mechanical 'git push' and running of
update scripts.

However, there's one new item that was actually missed off the
previous checklist: turning off nightly pre-release builds after
making the release they were a pre-release of. Ahem.

9 years agoNew 'contrib' tool: a script for faking initial KEX.
Simon Tatham [Sat, 28 Feb 2015 07:58:29 +0000 (07:58 +0000)]
New 'contrib' tool: a script for faking initial KEX.

encodelib.py is a Python library which implements some handy SSH-2
encoding primitives; samplekex.py uses that to fabricate the start of
an SSH connection, up to the point where key exchange totally fails
its crypto.

The idea is that you adapt samplekex.py to construct initial-kex
sequences with particular properties, in order to test robustness and
security fixes that affect the initial-kex sequence. For example, I
used an adaptation of this to test the Diffie-Hellman range check
that's just gone into 0.64.

9 years agoMerge branch 'pre-0.64'
Simon Tatham [Sat, 28 Feb 2015 07:57:58 +0000 (07:57 +0000)]
Merge branch 'pre-0.64'

9 years agoBump version number for 0.64 release. 0.64
Simon Tatham [Fri, 27 Feb 2015 22:42:03 +0000 (22:42 +0000)]
Bump version number for 0.64 release.

9 years agoAdd some missing smemclrs and sfrees.
Simon Tatham [Thu, 19 Feb 2015 20:08:18 +0000 (20:08 +0000)]
Add some missing smemclrs and sfrees.

The absence of these could have prevented sensitive private key
information from being properly cleared out of memory that PuTTY tools
had finished with.

Thanks to Patrick Coleman for spotting this and sending a patch.

9 years agoFix an erroneous length field in SSH-1 key load.
Simon Tatham [Thu, 19 Feb 2015 20:05:10 +0000 (20:05 +0000)]
Fix an erroneous length field in SSH-1 key load.

We incremented buf by a few bytes, so we must decrement the
corresponding length by the same amount, or else makekey() could
overrun.

Thanks to Patrick Coleman for the patch.

9 years agoEnforce acceptable range for Diffie-Hellman server value.
Simon Tatham [Thu, 5 Feb 2015 19:39:17 +0000 (19:39 +0000)]
Enforce acceptable range for Diffie-Hellman server value.

Florent Daigniere of Matta points out that RFC 4253 actually
_requires_ us to refuse to accept out-of-range values, though it isn't
completely clear to me why this should be a MUST on the receiving end.

Matta considers this to be a security vulnerability, on the grounds
that if a server should accidentally send an obviously useless value
such as 1 then we will fail to reject it and agree a key that an
eavesdropper could also figure out. Their id for this vulnerability is
MATTA-2015-002.

9 years agoMerge branch 'pre-0.64'
Jacob Nevins [Fri, 27 Feb 2015 09:28:05 +0000 (09:28 +0000)]
Merge branch 'pre-0.64'

9 years agoRefresh the Windows installer README.txt.
Jacob Nevins [Fri, 27 Feb 2015 09:26:47 +0000 (09:26 +0000)]
Refresh the Windows installer README.txt.

The most recent version of Windows it acknowledged was XP.

9 years agoMerge branch 'pre-0.64'
Jacob Nevins [Tue, 24 Feb 2015 10:37:53 +0000 (10:37 +0000)]
Merge branch 'pre-0.64'

9 years agoMake kh2reg.py compatible with modern Python.
Jacob Nevins [Tue, 24 Feb 2015 10:30:18 +0000 (10:30 +0000)]
Make kh2reg.py compatible with modern Python.

Bare string exceptions aren't supported any more.
Patch by Will Aoki, plus a backward compatibility tweak from Colin Watson.
Seen working with Python 2.4.3 and 2.7.6.

9 years agoImprove comments in winhandl.c.
Simon Tatham [Sat, 7 Feb 2015 11:48:49 +0000 (11:48 +0000)]
Improve comments in winhandl.c.

To understand the handle leak bug that I fixed in git commit
7549f2da40d3666f2c9527d84d9ed5468e231691, I had to think fairly hard
to remind myself what all this code was doing, which means the
comments weren't good enough. Expanded and rewritten some of them in
the hope that things will be clearer next time.

9 years agoMerge branch 'pre-0.64'
Simon Tatham [Sat, 7 Feb 2015 12:50:31 +0000 (12:50 +0000)]
Merge branch 'pre-0.64'

9 years agoMark handles defunct before calling gotdata/sentdata.
Simon Tatham [Sat, 7 Feb 2015 12:39:47 +0000 (12:39 +0000)]
Mark handles defunct before calling gotdata/sentdata.

If (say) a read handle returns EOF, and its gotdata function responds
by calling handle_free(), then we want the handle to have already had
its defunct flag set so that the handle can be destroyed. Otherwise
handle_free will set the 'done' flag to ask the subthread to
terminate, and then sit and wait for it to say it's done so -
forgetting that it signalled termination already by returning EOF, and
hence will not be responding to that signal.

Ditto for write errors on write handles, though that should happen
less often.

9 years agoFix handle leak in winhandl.c.
Simon Tatham [Sat, 7 Feb 2015 11:48:19 +0000 (11:48 +0000)]
Fix handle leak in winhandl.c.

The code for cleaning up handle structures works by the main thread
asking the per-handle subthread to shut down by means of setting its
'done' flag, and then once the subthread signals back through its
event object that it's done so, the main thread frees all its
resources and removes the event object from the list of things being
checked in the program's event loop.

But read threads were not sending back that final event acknowledging
a request to shut down, so their event objects were never being
cleaned up.

Bug spotted by Ronald Weiss.

9 years agoMerge branch 'pre-0.64'
Jacob Nevins [Sun, 18 Jan 2015 14:50:20 +0000 (14:50 +0000)]
Merge branch 'pre-0.64'

9 years agoRemove user-key-oriented advice from host key docs.
Jacob Nevins [Sun, 18 Jan 2015 14:44:45 +0000 (14:44 +0000)]
Remove user-key-oriented advice from host key docs.

It would be rare to have a host keypair in .ppk format or on a client
machine to load into PuTTYgen, and it might confuse people into thinking
they are required to do so.

9 years agoMerge branch 'pre-0.64'
Jacob Nevins [Thu, 8 Jan 2015 23:50:34 +0000 (23:50 +0000)]
Merge branch 'pre-0.64'

9 years agoUse local username consistently in Unix Plink.
Jacob Nevins [Mon, 5 Jan 2015 23:41:43 +0000 (23:41 +0000)]
Use local username consistently in Unix Plink.

It tries to use the local username as the remote username if it has no
better ideas, but the presence of Default Settings would defeat this,
even if it had no username set. Reported by Jonathan Amery.

9 years agoMerge branch 'pre-0.64'
Jacob Nevins [Mon, 5 Jan 2015 23:49:25 +0000 (23:49 +0000)]
Merge branch 'pre-0.64'

9 years agoFix a copy-and-pasted comment.
Jacob Nevins [Mon, 5 Jan 2015 23:41:24 +0000 (23:41 +0000)]
Fix a copy-and-pasted comment.

9 years agoIt's a new year.
Jacob Nevins [Mon, 5 Jan 2015 23:48:01 +0000 (23:48 +0000)]
It's a new year.

9 years agoMerge branch 'pre-0.64'
Simon Tatham [Sat, 20 Dec 2014 18:52:40 +0000 (18:52 +0000)]
Merge branch 'pre-0.64'

9 years agoDo an smemclr(bytes) in bignum_random_in_range.
Simon Tatham [Sat, 20 Dec 2014 18:44:36 +0000 (18:44 +0000)]
Do an smemclr(bytes) in bignum_random_in_range.

It's used for sensitive data, so we shouldn't leave it lying around
after free.

9 years agoFix memory management in bignum_random_in_range.
Simon Tatham [Sat, 20 Dec 2014 18:43:46 +0000 (18:43 +0000)]
Fix memory management in bignum_random_in_range.

We were allocating a new array in which to make up a random number
every time we went round the loop, and not freeing any of them. Now we
allocate a single array to use for all loop iterations, and clear and
free it properly afterwards.

Patch due to Tim Kosse.

9 years agoFix a handle leak in Windows PSFTP.
Simon Tatham [Sat, 20 Dec 2014 18:42:22 +0000 (18:42 +0000)]
Fix a handle leak in Windows PSFTP.

We were checking the return value of CreateThread for validity, but
not keeping it to free afterwards if it _was_ valid. Also, we weren't
closing ctx->event in the valid case either. Patch due to Tim Kosse.

9 years agoFixes to memory management in the elliptic curve code.
Simon Tatham [Sat, 20 Dec 2014 17:07:17 +0000 (17:07 +0000)]
Fixes to memory management in the elliptic curve code.

There was an error-handling path testing the wrong variable; an
inappropriate call to ec_point_free in decodepoint() (in fact, that
function always gets passed a pointer to an ec_point structure that's
not a dynamically allocated block at all or not in its own right, so
we should have just cleared its contents without freeing the structure
itself); a missing return on an error path which would have caused the
same structure to be freed a second time; and two missing freebn in
ecdsa_sign.

Patch due to Tim Kosse.

9 years agoAdd a missing freeaddrinfo() in Unix sk_newlistener.
Simon Tatham [Sat, 20 Dec 2014 16:54:28 +0000 (16:54 +0000)]
Add a missing freeaddrinfo() in Unix sk_newlistener.

If we use getaddrinfo to translate the source IP address into a
sockaddr, then we need to freeaddrinfo the returned data later. Patch
due to Tim Kosse.

9 years agoClose the remote file handle if sftp_put_file's fstat fails.
Simon Tatham [Sat, 20 Dec 2014 16:53:01 +0000 (16:53 +0000)]
Close the remote file handle if sftp_put_file's fstat fails.

Instead of abruptly returning from sftp_put_file in that situation, we
now send an FXP_CLOSE instead. Patch due to Tim Kosse.

9 years agoMerge branch 'pre-0.64'
Simon Tatham [Sat, 22 Nov 2014 16:42:01 +0000 (16:42 +0000)]
Merge branch 'pre-0.64'

9 years agoStop referring to Plink as "PuTTY Link".
Simon Tatham [Sat, 22 Nov 2014 16:38:01 +0000 (16:38 +0000)]
Stop referring to Plink as "PuTTY Link".

I don't think anyone has ever actually called it that, colloquially
_or_ formally, and if anyone ever did (in a bug report, say) I'd
probably have to stop and think to work out what they meant. It's
universally called Plink, and should be officially so as well :-)

9 years agoAnother missing initialisation.
Simon Tatham [Sat, 22 Nov 2014 16:35:54 +0000 (16:35 +0000)]
Another missing initialisation.

This one spotted in the old-fashioned way, by actually attempting a
Plink raw connection and wondering why it didn't seem to be reading
from standard input! Turns out 'bufsize' is uninitialised until the
first send, which can inhibit any stdin reading if it gets a large
enough nonsense value.

9 years agoConsistently use &def for %makefile_extra pieces.
Simon Tatham [Sat, 22 Nov 2014 16:30:29 +0000 (16:30 +0000)]
Consistently use &def for %makefile_extra pieces.

mkfiles.pl was giving a couple of annoying perl warnings, because some
makefile_extra strings were never set by Recipe. We already have the
&def function to convert undefs into "" for this reason, but weren't
using it everywhere. Now I think we are.

9 years agoMove echo/edit state change functionality out of ldisc_send.
Simon Tatham [Sat, 22 Nov 2014 16:12:47 +0000 (16:12 +0000)]
Move echo/edit state change functionality out of ldisc_send.

I'm not actually sure why we've always had back ends notify ldisc of
changes to echo/edit settings by giving ldisc_send(ldisc,NULL,0,0) a
special meaning, instead of by having a separate dedicated notify
function with its own prototype and parameter set. Coverity's recent
observation that the two kinds of call don't even have the same
requirements on the ldisc (particularly, whether ldisc->term can be
NULL) makes me realise that it's really high time I separated the two
conceptually different operations into actually different functions.

While I'm here, I've renamed the confusing ldisc_update() function
which that special operation ends up feeding to, because it's not
actually a function applying to an ldisc - it applies to a front end.
So ldisc_send(ldisc,NULL,0,0) is now ldisc_echoedit_update(ldisc), and
that in turn figures out the current echo/edit settings before passing
them on to frontend_echoedit_update(). I think that should be clearer.

9 years agoMerge branch 'pre-0.64'
Simon Tatham [Sat, 22 Nov 2014 16:02:01 +0000 (16:02 +0000)]
Merge branch 'pre-0.64'

9 years agoAdd some missing initialisations.
Simon Tatham [Sat, 22 Nov 2014 14:57:06 +0000 (14:57 +0000)]
Add some missing initialisations.

Spotted by valgrind, after I was testing all the Coverity bug fixes :-)

9 years agoDon't reject _and_ accept X forwarding requests!
Simon Tatham [Sat, 22 Nov 2014 09:59:37 +0000 (09:59 +0000)]
Don't reject _and_ accept X forwarding requests!

If a sharing downstream asks for an auth method we don't understand,
we should send them CHANNEL_FAILURE *and then stop processing*. Ahem.

(Spotted while examining this code in the course of Coverity-related
fixes, but not itself a Coverity-found problem.)

9 years agoFix assorted memory leaks.
Simon Tatham [Sat, 22 Nov 2014 09:58:15 +0000 (09:58 +0000)]
Fix assorted memory leaks.

All spotted by Coverity.

9 years agoFix uninitialised variable in two Windows event loops.
Simon Tatham [Sat, 22 Nov 2014 10:18:16 +0000 (10:18 +0000)]
Fix uninitialised variable in two Windows event loops.

If (Msg)WaitForMultipleObjects returns WAIT_TIMEOUT, we expect 'next'
to have been initialised. This can occur without having called
run_timers(), if a toplevel callback was pending, so we can't expect
run_timers to have reliably initialised 'next'.

I'm not actually convinced this could have come up in either of the
affected programs (Windows PSFTP and Plink), due to the list of things
toplevel callbacks are currently used for, but it certainly wants
fixing anyway for the future.

Spotted by Coverity.

9 years agoClarify when ldisc->term may be NULL.
Simon Tatham [Sat, 22 Nov 2014 10:37:14 +0000 (10:37 +0000)]
Clarify when ldisc->term may be NULL.

Namely, any ldisc that you send actual data through should have a
terminal attached, because the ldisc editing/echoing system is
designed entirely for use with a terminal. The only time you can have
an ldisc with no terminal is when it's only ever used by the backend
to report changes to the front end in edit/echo status, e.g. by Unix
Plink.

Coverity spotted an oddity in ldisc_send which after a while I decided
would never have actually caused a problem, but OTOH I agree that it
was confusing, so now hopefully it's less so.

9 years agoFix typo in validate_manual_hostkey().
Simon Tatham [Sat, 22 Nov 2014 10:12:47 +0000 (10:12 +0000)]
Fix typo in validate_manual_hostkey().

'p += strcspn' returns p always non-NULL and sometimes pointing at \0,
as opposed to 'p = strchr' which returns p sometimes non-NULL and
never pointing at \0. Test the pointer after the call accordingly.
Thanks, Coverity.

9 years agoMerge connection-sharing shutdown fix from pre-0.64.
Simon Tatham [Mon, 10 Nov 2014 18:32:12 +0000 (18:32 +0000)]
Merge connection-sharing shutdown fix from pre-0.64.

9 years agoShut down connshare upstream along with the SSH connection.
Simon Tatham [Mon, 10 Nov 2014 18:29:00 +0000 (18:29 +0000)]
Shut down connshare upstream along with the SSH connection.

This ought to happen in ssh_do_close alongside the code that shuts
down other local listening things like port forwardings, for the same
obvious reason. In particular, we should get through this _before_ we
put up a modal dialog box telling the user what just went wrong with
the SSH connection, so that further sessions started while that box is
active don't try futilely to connect to the not-really-listening
zombie upstream.

9 years agoMerge branch 'pre-0.64'.
Jacob Nevins [Sun, 9 Nov 2014 12:41:10 +0000 (12:41 +0000)]
Merge branch 'pre-0.64'.

9 years agoFree copied Conf in log_free().
Jacob Nevins [Sun, 9 Nov 2014 00:54:35 +0000 (00:54 +0000)]
Free copied Conf in log_free().

Thanks to Corey Stup for pointing it out.

9 years agoMerge reconfig fixes from branch 'pre-0.64'.
Jacob Nevins [Sun, 9 Nov 2014 00:12:51 +0000 (00:12 +0000)]
Merge reconfig fixes from branch 'pre-0.64'.

9 years agoDisable some mid-session configs for downstreams.
Jacob Nevins [Sun, 9 Nov 2014 00:10:46 +0000 (00:10 +0000)]
Disable some mid-session configs for downstreams.

Compression, encryption, and key exchange settings are all meaningless
to reconfigure in connection-sharing downstreams.

9 years agoDisable manual host key config in mid-session.
Jacob Nevins [Sun, 9 Nov 2014 00:08:36 +0000 (00:08 +0000)]
Disable manual host key config in mid-session.

Changing it can't have any useful effect, since we have strictly
enforced that the host key used for rekeys is the same as the first key
exchange since b8e668c.

9 years agoMerge another docs fix from 'pre-0.64'.
Jacob Nevins [Sat, 8 Nov 2014 23:38:52 +0000 (23:38 +0000)]
Merge another docs fix from 'pre-0.64'.

9 years agoDocument IPv6 literal syntax for tunnels.
Jacob Nevins [Sat, 8 Nov 2014 23:37:59 +0000 (23:37 +0000)]
Document IPv6 literal syntax for tunnels.

9 years agoMerge Gtk event log fix from 'pre-0.64'.
Jacob Nevins [Sat, 8 Nov 2014 22:22:45 +0000 (22:22 +0000)]
Merge Gtk event log fix from 'pre-0.64'.

9 years agoFix a double-free in the Gtk event log.
Jacob Nevins [Sat, 8 Nov 2014 22:22:34 +0000 (22:22 +0000)]
Fix a double-free in the Gtk event log.

It could occur some time after a line was selected in the event log
window.

9 years agoMerge SSH-2-only default from 'pre-0.64'.
Jacob Nevins [Sat, 8 Nov 2014 19:35:57 +0000 (19:35 +0000)]
Merge SSH-2-only default from 'pre-0.64'.

9 years agoMerge misc docs improvements from branch 'pre-0.64'.
Jacob Nevins [Sat, 8 Nov 2014 19:32:42 +0000 (19:32 +0000)]
Merge misc docs improvements from branch 'pre-0.64'.

9 years agoDiscourage SSH-1 in documentation.
Jacob Nevins [Sat, 8 Nov 2014 18:37:43 +0000 (18:37 +0000)]
Discourage SSH-1 in documentation.