]> asedeno.scripts.mit.edu Git - PuTTY.git/log
PuTTY.git
9 years agoTweak SSH protocol version refusal messages.
Jacob Nevins [Sat, 8 Nov 2014 18:35:31 +0000 (18:35 +0000)]
Tweak SSH protocol version refusal messages.

"required by user" will grate if the user did not configure the
behaviour (and I'm about to change the default to `2 only').

9 years agoCross-reference 'logical host' and host key config docs.
Jacob Nevins [Sat, 8 Nov 2014 18:34:24 +0000 (18:34 +0000)]
Cross-reference 'logical host' and host key config docs.

9 years agoTweak key file config docs re Pageant.
Jacob Nevins [Sat, 8 Nov 2014 18:32:31 +0000 (18:32 +0000)]
Tweak key file config docs re Pageant.

Clarify that it's not necessary to faff around with explicit key
configuration if you're using Pageant.

9 years agoRearrange SSH bug docs to match the GUI.
Jacob Nevins [Sat, 8 Nov 2014 18:31:15 +0000 (18:31 +0000)]
Rearrange SSH bug docs to match the GUI.

No change to the text.

9 years agoClarify that port forwarding is of TCP connections.
Jacob Nevins [Sat, 8 Nov 2014 18:30:01 +0000 (18:30 +0000)]
Clarify that port forwarding is of TCP connections.

(Rather than just the generic 'network connections'.)

9 years agoRefer to X11 'graphical applications'.
Jacob Nevins [Sat, 8 Nov 2014 18:29:08 +0000 (18:29 +0000)]
Refer to X11 'graphical applications'.

For people who know they need graphical applications but don't know what
X11 is.

9 years agoCorrect default lines of scrollback in the docs.
Jacob Nevins [Sat, 8 Nov 2014 17:12:24 +0000 (17:12 +0000)]
Correct default lines of scrollback in the docs.

The default was increased in fd266a3 (just before 0.63).

9 years agoUse a shorter name for the channel close bug.
Jacob Nevins [Tue, 4 Nov 2014 18:35:36 +0000 (18:35 +0000)]
Use a shorter name for the channel close bug.

The old name was too long for the Windows configuration dialog, so the
last word got lost.

9 years agoFix definition of surrogate macros.
Jacob Nevins [Mon, 3 Nov 2014 23:09:18 +0000 (23:09 +0000)]
Fix definition of surrogate macros.

Define HIGH_SURROGATE_START etc even if IS_HIGH_SURROGATE is defined,
as they are used elsewhere too. This is necessary to build with recent
MinGW.

9 years agoAdd some missing invariants in bigdiv and bigmod.
Simon Tatham [Sat, 1 Nov 2014 19:20:51 +0000 (19:20 +0000)]
Add some missing invariants in bigdiv and bigmod.

The underlying function 'bigdivmod' does not ensure either of its
outputs is normalised, so its callers must do so.

9 years agoRemove an unused variable.
Ben Harris [Sat, 1 Nov 2014 18:43:35 +0000 (18:43 +0000)]
Remove an unused variable.

As far as I can tell, it's been unused ever since it was introduced in
2001.

9 years agoReport correct error when FormatMessage fails.
Ben Harris [Sat, 1 Nov 2014 17:43:54 +0000 (17:43 +0000)]
Report correct error when FormatMessage fails.

Previously, the original error code would be reported as having come
from FormatMessage.  Spotted by GCC [-Wformat-extra-args].

9 years agoUpdate documentation to refer to Git rather than Subversion.
Ben Harris [Sat, 1 Nov 2014 17:17:57 +0000 (17:17 +0000)]
Update documentation to refer to Git rather than Subversion.

9 years agoMove definition of SECURITY_WIN32 from makefiles into source.
Simon Tatham [Sat, 1 Nov 2014 14:44:16 +0000 (14:44 +0000)]
Move definition of SECURITY_WIN32 from makefiles into source.

This makes it easier for people to recompile the source in other
contexts or other makefiles.

9 years agoFix two double-frees in ssh2_load_userkey().
Simon Tatham [Tue, 28 Oct 2014 18:39:55 +0000 (18:39 +0000)]
Fix two double-frees in ssh2_load_userkey().

We should NULL out mac after freeing it, so that the cleanup code
doesn't try to free it again; also if the final key creation fails, we
should avoid freeing ret->comment when we're going to go to that same
cleanup code which will free 'comment' which contains the same pointer.

Thanks to Christopher Staite for pointing these out.

9 years agoUpdate the example bob command in the release checklist.
Simon Tatham [Sun, 26 Oct 2014 08:02:35 +0000 (08:02 +0000)]
Update the example bob command in the release checklist.

Building from a git tag requires a different command-line syntax from
a Subversion tag.

9 years agoAdd a .gitignore, now this project is in git.
Simon Tatham [Sat, 25 Oct 2014 14:44:35 +0000 (15:44 +0100)]
Add a .gitignore, now this project is in git.

9 years agoCross-reference the description of winadj@putty.projects.tartarus.org
Jacob Nevins [Tue, 21 Oct 2014 11:33:33 +0000 (11:33 +0000)]
Cross-reference the description of winadj@putty.projects.tartarus.org
to its bug-compatibility mode.

[originally from svn r10287]

9 years agoTurn mkunxarc.sh back into an ordinary sh script.
Simon Tatham [Wed, 1 Oct 2014 20:52:16 +0000 (20:52 +0000)]
Turn mkunxarc.sh back into an ordinary sh script.

It became bash-dependent in r9229 because I used a bashism to remove
the 'r' from the front of $SVN_REV, but that's not needed any more.

[originally from svn r10281]
[r9229 == bd60f2fc5ba21250ffb2c612397d02b109d2b24f]

9 years agoAdd a missing bounds check in the Deflate decompressor.
Simon Tatham [Wed, 1 Oct 2014 18:33:45 +0000 (18:33 +0000)]
Add a missing bounds check in the Deflate decompressor.

The symbol alphabet used for encoding ranges of backward distances in
a Deflate compressed block contains 32 symbol values, but two of them
(symbols 30 and 31) have no meaning, and hence it is an encoding error
for them to appear in a compressed block. If a compressed file did so
anyway, this decompressor would index past the end of the distcodes[]
array. Oops.

This is clearly a bug, but I don't believe it's a vulnerability. The
nonsense record we load from distcodes[] in this situation contains an
indeterminate bogus value for 'extrabits' (how many more bits to read
from the input stream to complete the backward distance) and also for
the offset to add to the backward distance after that. But neither of
these can lead to a buffer overflow: if extrabits is so big that
dctx->nbits (which is capped at 32) never exceeds it, then the
decompressor will simply swallow all further data without producing
any output, and otherwise the decompressor will consume _some_ number
of spare bits from the input, work out a backward distance and an
offset in the sliding window which will be utter nonsense and probably
out of bounds, but fortunately will then AND the offset with 0x7FFF at
the last minute, which makes it safe again. So I think the worst that
a malicious compressor can do is to cause the decompressor to generate
strange data, which of course it could do anyway if it wanted to by
sending that same data legally compressed.

[originally from svn r10278]

9 years agoRework versioning system to not depend on Subversion.
Simon Tatham [Wed, 24 Sep 2014 10:33:13 +0000 (10:33 +0000)]
Rework versioning system to not depend on Subversion.

I've shifted away from using the SVN revision number as a monotonic
version identifier (replacing it in the Windows version resource with
a count of days since an arbitrary epoch), and I've removed all uses
of SVN keyword expansion (replacing them with version information
written out by Buildscr).

While I'm at it, I've done a major rewrite of the affected code which
centralises all the computation of the assorted version numbers and
strings into Buildscr, so that they're all more or less alongside each
other rather than scattered across multiple source files.

I've also retired the MD5-based manifest file system. A long time ago,
it seemed like a good idea to arrange that binaries of PuTTY would
automatically cease to identify themselves as a particular upstream
version number if any changes were made to the source code, so that if
someone made a local tweak and distributed the result then I wouldn't
get blamed for the results. Since then I've decided the whole idea is
more trouble than it's worth, so now distribution tarballs will have
version information baked in and people can just cope with that.

[originally from svn r10262]

9 years agoCorrect man page description of -hostkey to match actual behaviour.
Jacob Nevins [Tue, 23 Sep 2014 22:35:02 +0000 (22:35 +0000)]
Correct man page description of -hostkey to match actual behaviour.

[originally from svn r10235]

9 years agoBodge around the failing Coverity build in winshare.c.
Simon Tatham [Tue, 23 Sep 2014 12:38:16 +0000 (12:38 +0000)]
Bodge around the failing Coverity build in winshare.c.

The winegcc hack I use for my Coverity builds is currently using a
version of wincrypt.h that's missing a couple of constants I use.
Ensure they're defined by hand, but (just in case I defined them
_wrong_) also provide a command-line define so I can do that only in
the case of Coverity builds.

[originally from svn r10234]

9 years agoAdd some index terms for host key overrides.
Jacob Nevins [Sat, 20 Sep 2014 23:06:10 +0000 (23:06 +0000)]
Add some index terms for host key overrides.

[originally from svn r10232]

9 years agoUpdate transcripts for recent command-line help changes.
Jacob Nevins [Sat, 20 Sep 2014 22:58:48 +0000 (22:58 +0000)]
Update transcripts for recent command-line help changes.

[originally from svn r10231]

9 years agoMove -sercfg out of the "SSH only" section of command-line help.
Jacob Nevins [Sat, 20 Sep 2014 22:51:27 +0000 (22:51 +0000)]
Move -sercfg out of the "SSH only" section of command-line help.

[originally from svn r10230]

9 years agoUpdate command-line help and man pages for -hostkey.
Jacob Nevins [Sat, 20 Sep 2014 22:49:47 +0000 (22:49 +0000)]
Update command-line help and man pages for -hostkey.

[originally from svn r10229]

9 years agoDon't show SSH connection sharing options mid-session (they don't work).
Jacob Nevins [Sat, 20 Sep 2014 22:14:24 +0000 (22:14 +0000)]
Don't show SSH connection sharing options mid-session (they don't work).

[originally from svn r10228]

9 years agoFix a FIXME and a markup error in the manual host key docs.
Jacob Nevins [Tue, 9 Sep 2014 15:08:33 +0000 (15:08 +0000)]
Fix a FIXME and a markup error in the manual host key docs.

[originally from svn r10224]

9 years agoChange the naming policy for connection-sharing Unix sockets.
Simon Tatham [Tue, 9 Sep 2014 12:47:39 +0000 (12:47 +0000)]
Change the naming policy for connection-sharing Unix sockets.

I had initially assumed that, since all of a user's per-connection
subdirectories live inside a top-level putty-connshare.$USER directory
that's not accessible to anyone else, there would be no need to
obfuscate the names of the internal directories for privacy, because
nobody would be able to look at them anyway.

Unfortunately, that's not true: 'netstat -ax' run by any user will
show up the full pathnames of Unix-domain sockets, including pathname
components that you wouldn't have had the access to go and look at
directly. So the Unix connection sharing socket names do need to be
obfuscated after all.

Since Unix doesn't have Windows's CryptProtectMemory, we have to do
this manually, by creating a file of random salt data inside the
top-level putty-connshare directory (if there isn't one there already)
and then hashing that salt with the "user@host" connection identifier
to get the socket directory name. What a pain.

[originally from svn r10222]

9 years agoNew option to manually configure the expected host key(s).
Simon Tatham [Tue, 9 Sep 2014 11:46:24 +0000 (11:46 +0000)]
New option to manually configure the expected host key(s).

This option is available from the command line as '-hostkey', and is
also configurable through the GUI. When enabled, it completely
replaces all of the automated host key management: the server's host
key will be checked against the manually configured list, and the
connection will be allowed or disconnected on that basis, and the host
key store in the registry will not be either consulted or updated.

The main aim is to provide a means of automatically running Plink,
PSCP or PSFTP deep inside Windows services where HKEY_CURRENT_USER
isn't available to have stored the right host key in. But it also
permits you to specify a list of multiple host keys, which means a
second use case for the same mechanism will probably be round-robin
DNS names that select one of several servers with different host keys.

Host keys can be specified as the standard MD5 fingerprint or as an
SSH-2 base64 blob, and are canonicalised on input. (The base64 blob is
more unwieldy, especially with Windows command-line length limits, but
provides a means of specifying the _whole_ public key in case you
don't trust MD5. I haven't bothered to provide an analogous mechanism
for SSH-1, on the basis that anyone worrying about MD5 should have
stopped using SSH-1 already!)

[originally from svn r10220]

9 years agoAdd an option to suppress horizontal scroll bars in list boxes.
Simon Tatham [Tue, 9 Sep 2014 11:46:14 +0000 (11:46 +0000)]
Add an option to suppress horizontal scroll bars in list boxes.

I'm about to add a list box which expects to contain some very long
but uninformative strings, and which is also quite vertically squashed
so there's not much room for a horizontal scroll bar to appear in it.
So here's an option in the list box specification structure which
causes the constructed GTKTreeView to use the 'ellipsize' option for
all its cell renderers, i.e. too-long strings are truncated with an
ellipsis.

Windows needs no change, because its list boxes already work this way.

[originally from svn r10219]

9 years agoMove base64_decode_atom into misc.c.
Simon Tatham [Tue, 9 Sep 2014 11:46:10 +0000 (11:46 +0000)]
Move base64_decode_atom into misc.c.

I'm about to need to refer to it from a source file that won't
necessarily always be linked against sshpubk.c, so it needs to live
somewhere less specialist. Now it sits alongside base64_encode_atom
(already in misc.c for another reason), which is neater anyway.

[originally from svn r10218]

9 years agoHandle save/load of set-typed config items.
Simon Tatham [Tue, 9 Sep 2014 11:46:07 +0000 (11:46 +0000)]
Handle save/load of set-typed config items.

I'm about to introduce a configuration option which is really a _set_
of string values (rather than an ordered list), and I'm going to
represent it in Conf as a string->string map (since that's a data type
we already support) in which every key which exists at all maps to the
empty string.

This change modifies settings.c so that it can write out such options
into the saved session as a comma-separated list of the key strings
only, rather than the form 'string1=,string2=,string3=' which you'd
get if you just used the existing wmap().

(Reading the result back in turns out not to need a code change - the
existing code already does what we want if it's reading a list of
key=value pairs and one of them doesn't have an = sign at all.)

[originally from svn r10217]

9 years agoClose the listening socket when a sharing upstream dies.
Simon Tatham [Sun, 7 Sep 2014 13:06:52 +0000 (13:06 +0000)]
Close the listening socket when a sharing upstream dies.

Without this, doing 'Restart Session' on Windows in a session with
sharing enabled but no actual sharing being done would crash, because
the first incarnation of the session would become an upstream and
establish a listening named pipe, which then wouldn't get cleaned up
when the session closed, so the restarted session would try to connect
to it, triggering a call to plug_accepting on a freed sharestate.

[originally from svn r10216]

9 years agoCope with REG_SZ data not having a trailing NUL.
Simon Tatham [Sun, 7 Sep 2014 13:06:50 +0000 (13:06 +0000)]
Cope with REG_SZ data not having a trailing NUL.

A user points out that the person who writes a REG_SZ into the
registry can choose whether or not to NUL-terminate it properly, and
if they don't, RegQueryValueEx will retrieve it without the NUL. So if
someone does that to PuTTY's saved session data, then PuTTY may
retrieve nonsense strings.

Arguably this is the fault of whoever tampered with the saved session
data without doing it the same way we would have, but even so, there
ought to be some handling at our end other than silently returning the
wrong data, and putting the NUL back on seems more sensible than
complaining loudly.

[originally from svn r10215]

9 years agoFix null dereference in ldisc_configure.
Simon Tatham [Wed, 27 Aug 2014 22:25:37 +0000 (22:25 +0000)]
Fix null dereference in ldisc_configure.

The IDM_RECONF handler unconditionally calls ldisc_configure to
reconfigure the line discipline for the new echo/edit settings, but in
fact ldisc can be NULL if no session is currently active. (Indeed, the
very next line acknowledges this, by testing it for NULL before
calling ldisc_send!) Thanks to Alexander Wong for the report.

[originally from svn r10214]

9 years agoFix another crash at KEXINIT time, ahem.
Simon Tatham [Mon, 28 Jul 2014 17:47:36 +0000 (17:47 +0000)]
Fix another crash at KEXINIT time, ahem.

This is the same code I previously fixed for failing to check NULL
pointers coming back from ssh_pkt_getstring if the server's KEXINIT
ended early, leading to an embarrassing segfault in place of a fatal
error message. But I've now also had it pointed out to me that the
fatal error message passes the string as %s, which is inappropriate
because (being read straight out of the middle of an SSH packet) it
isn't necessarily zero-terminated!

This is still just an embarrassing segfault in place of a fatal error
message, and not exploitable as far as I can see, because the string
is passed to a dupprintf, which will either read off the end of
allocated address space and segfault non-exploitably, or else it will
find a NUL after all and carefully allocate enough space to format an
error message containing all of the previous junk. But still, how
embarrassing to have messed up the same code _twice_.

[originally from svn r10211]

9 years agoTruncate all terminal lines when we clear scrollback.
Simon Tatham [Thu, 24 Jul 2014 18:13:16 +0000 (18:13 +0000)]
Truncate all terminal lines when we clear scrollback.

Now Jacob has reminded me that 'resize-no-truncate' was already on the
wishlist, I notice that it suggested Clear Scrollback should remove
the preserved information off to the right. On the basis that that's
(at least partly) a privacy feature, that seems sensible, so let's do it.

[originally from svn r10210]

9 years agoPreserve truncated parts of terminal lines after a resize.
Simon Tatham [Wed, 23 Jul 2014 21:48:02 +0000 (21:48 +0000)]
Preserve truncated parts of terminal lines after a resize.

We now only truncate a termline to the current terminal width if we're
actually going to modify it. As a result, resizing to a narrower
terminal width and then immediately back again, with no terminal
output in between, should restore the previous screen contents. Only
lines that are actually modified while the terminal is narrow (and
scrolling them around doesn't count as modification) should now be
truncated.

This will be a bit nicer for Unix window resizing (since X lacks the
Windows distinction between mid-drag resize events and the ultimate
drag-release, so can't defer the call to term_size until the latter as
we can on Windows), but mostly it's inspired by having played with a
tiling window manager recently and hence realised that in some
environments windows will be resized back and forth without much
control as a side effect of just moving them around - so it's
generally desirable for resizes to be non-destructive.

[originally from svn r10208]

9 years agoAnother fix to timer handling.
Simon Tatham [Sun, 13 Jul 2014 07:49:29 +0000 (07:49 +0000)]
Another fix to timer handling.

Robert de Bath points out that failure to remove the timer whose
callback returned FALSE may not have been the cause of runaway timer
explosion; another possibility is that a function called from
timer_trigger()'s call to run_timers() has already set a timer up by
the time run_timers() returns, and then we set another one up on top
of it. Fix that too.

[originally from svn r10206]

9 years agoWork around a timer leak with GTK 2.4.22 on openSUSE 13.1.
Simon Tatham [Tue, 8 Jul 2014 22:22:12 +0000 (22:22 +0000)]
Work around a timer leak with GTK 2.4.22 on openSUSE 13.1.

Mihkel Ader reports that on that system, timers apparently aren't
getting auto-destroyed when timer_trigger returns FALSE, so the change
in r10181 has caused GTK PuTTY to gradually allocate more and more
timers and consume more and more CPU as they all keep firing.

As far as I can see, this must surely be a bug in GTK 2 (the docs say
that timers _are_ auto-destroyed when their callback returns false),
and it doesn't seem to happen for me with GTK 2.4.23 on Ubuntu 14.04.
However, I'll try to work around it by _explicitly_ destroying each
old timer before we zero out the variable containing its id.

[originally from svn r10202]
[r10181 == e4c4bd20920e11458ab0ec0cd17c69b8bf7f6d00]

9 years agoFix automatic version numbering in the Unix tarball.
Simon Tatham [Mon, 7 Jul 2014 19:47:23 +0000 (19:47 +0000)]
Fix automatic version numbering in the Unix tarball.

Manfred Schwarb points out that when I moved the autoconf machinery up
from the unix subdirectory to the top level, in r10141, I missed a
couple of lingering $(srcdir)/.. in the make rule for version.o, as a
result of which the automatic checking of the manifest wasn't doing
its thing and tools built from a standard .tar.gz were reporting as
'Unidentified build'.

[originally from svn r10201]
[r10141 == a947c49bec36957cb5d38e1dc2e22dc0e3465849]

9 years agoImplement this year's consensus on CHANNEL_FAILURE vs CHANNEL_CLOSE.
Simon Tatham [Sun, 6 Jul 2014 14:05:39 +0000 (14:05 +0000)]
Implement this year's consensus on CHANNEL_FAILURE vs CHANNEL_CLOSE.

We now expect that after the server has sent us CHANNEL_CLOSE, we
should not expect to see any replies to our outstanding channel
requests, and conversely after we have sent CHANNEL_CLOSE we avoid
sending any reply to channel requests from the server. This was the
consensus among implementors discussing the problem on ietf-ssh in
April 2014.

To cope with current OpenSSH's (and perhaps other servers we don't
know about yet) willingness to send request replies after
CHANNEL_CLOSE, I introduce a bug-compatibility flag which is detected
for every OpenSSH version up to and including the current 6.6 - but
not beyond, since https://bugzilla.mindrot.org/show_bug.cgi?id=1818
promises that 6.7 will also implement the new consensus behaviour.

[originally from svn r10200]

10 years agoReplace quaint references to floppies with "USB stick".
Jacob Nevins [Mon, 26 May 2014 09:27:54 +0000 (09:27 +0000)]
Replace quaint references to floppies with "USB stick".

[originally from svn r10193]

10 years agoExplicitly set the owning SID in make_private_security_descriptor.
Simon Tatham [Tue, 13 May 2014 19:19:28 +0000 (19:19 +0000)]
Explicitly set the owning SID in make_private_security_descriptor.

Philippe Maupertuis reports that on one particular machine, Windows
causes the named pipe created by upstream PuTTY to be owned by the
Administrators group SID rather than the user's SID, which defeats the
security check in the downstream PuTTY. No other machine has been
reported to do this, but nonetheless it's clearly a thing that can
sometimes happen, so we now work around it by specifying explicitly in
the security descriptor for the pipe that its owner should be the user
SID rather than any other SID we might have the right to use.

[originally from svn r10188]

10 years agoPrevent double-inclusion of ssh.h in case of -DNO_SECURITY.
Simon Tatham [Wed, 23 Apr 2014 14:05:31 +0000 (14:05 +0000)]
Prevent double-inclusion of ssh.h in case of -DNO_SECURITY.

winshare.c includes ssh.h, but if you defined NO_SECURITY it then
decides to fall back to including the stub noshare.c, which includes
ssh.h again. Fix by moving a block of includes inside the ifdef.

[originally from svn r10184]

10 years agoFix the prototype of the stub function in noshare.c.
Simon Tatham [Tue, 22 Apr 2014 17:53:50 +0000 (17:53 +0000)]
Fix the prototype of the stub function in noshare.c.

It's an old prototype from part way through the development of
connection sharing, which I must have forgotten to fix because by the
time I changed the prototype no platform was using noshare.c any more.

[originally from svn r10183]

10 years agoFix an annoying warning from GTK on Ubuntu 14.04.
Simon Tatham [Sun, 20 Apr 2014 16:48:18 +0000 (16:48 +0000)]
Fix an annoying warning from GTK on Ubuntu 14.04.

Timer objects evaporate when our timer_trigger callback is called, and
therefore we should not remember their ids beyond that time and
attempt to cancel them later. Previous versions of GTK silently
ignored us doing that, but upgrading to Ubuntu Trusty has given me a
version of GTK that complains about it, so let's stop doing it.

[originally from svn r10181]

10 years agoFix a bounds check that should have been >= not >.
Simon Tatham [Fri, 18 Apr 2014 14:37:27 +0000 (14:37 +0000)]
Fix a bounds check that should have been >= not >.

Thanks to René König for pointing it out.

[originally from svn r10174]

10 years agoAdd auto-recognition of BUG_SSH2_RSA_PADDING for ProFTPD.
Simon Tatham [Thu, 27 Mar 2014 18:07:13 +0000 (18:07 +0000)]
Add auto-recognition of BUG_SSH2_RSA_PADDING for ProFTPD.

Martin Prikryl reports that it had the exact same bug as old OpenSSH
(insisting that RSA signature integers be padded with leading zero
bytes to the same length as the RSA modulus, where in fact RFC 4253
section 6.6 says it ought to have _no_ padding), but is recently
fixed. The first version string to not have the bug is reported to be
"mod_sftp/0.9.9", so here we recognise everything less than that as
requiring our existing workaround.

[originally from svn r10161]

10 years agoNew FAQ, aimed at the people who periodically send us large
Simon Tatham [Tue, 4 Mar 2014 23:02:12 +0000 (23:02 +0000)]
New FAQ, aimed at the people who periodically send us large
questionnaires in unfriendly formats like Excel, apparently in the
mistaken belief that we have some kind of incentive to answer them. I
hope I've managed to identify the key reason why they make this
mistake.

[originally from svn r10156]

10 years agoStop using 'zip -k' to construct the Windows source archive.
Simon Tatham [Tue, 4 Mar 2014 22:56:08 +0000 (22:56 +0000)]
Stop using 'zip -k' to construct the Windows source archive.

It was intended to ensure that people still working with DOS filename
restrictions (or things approximating that, e.g. VFAT) wouldn't have
trouble. Those days are surely long gone, and now zip -k is causing
its own trouble with the new VS2010/VS2012 project files, which
include pairs of filenames that become the same under the zip -k
transformation and hence break the source archive build.

[originally from svn r10155]

10 years agoAdd 'set -e' to mksrcarc.sh, so it spots zip returning error.
Simon Tatham [Tue, 4 Mar 2014 22:56:04 +0000 (22:56 +0000)]
Add 'set -e' to mksrcarc.sh, so it spots zip returning error.

[originally from svn r10154]

10 years agoHave mksrcarc.sh log its activity to standard output.
Simon Tatham [Tue, 4 Mar 2014 22:56:03 +0000 (22:56 +0000)]
Have mksrcarc.sh log its activity to standard output.

Its previous policy of silence made sense before we did builds using
bob (gratuitous output on success caused cronmail) but now it just
makes it hard to spot problems.

[originally from svn r10153]

10 years agoAdd a missing bn_restore_invariant in RSA blinding code.
Simon Tatham [Mon, 24 Feb 2014 23:35:55 +0000 (23:35 +0000)]
Add a missing bn_restore_invariant in RSA blinding code.

We were inventing a random number by starting with a long zero bignum
and then setting bits at random, which left an opportunity for the
result to be a non-normalised representation (with a leading zero
word) and hence fail an assertion in bignum_cmp.

[originally from svn r10147]

10 years agoAdd some assertions in sshzlib.c.
Simon Tatham [Sat, 22 Feb 2014 18:02:14 +0000 (18:02 +0000)]
Add some assertions in sshzlib.c.

gcc 4.8 compiling with -O3 gives a new warning about the access to
st->pending at the top of lz77_compress, because for some reason it
thinks there's an out-of-bounds array access there (or perhaps just a
potential one, I'm not really sure which side -Warray-bounds is erring
on). Add an assertion reassuring it that st->npending can't get bigger
than the size of st->pending at the site it's complaining about, and a
second one at the site where st->npending is increased (just in case
my analysis of why it can't happen was wrong!). Also add a comment
explaining the assertions.

[originally from svn r10144]

10 years agoAdd the autogenerated empty.h to CLEANFILES.
Simon Tatham [Sat, 22 Feb 2014 18:02:10 +0000 (18:02 +0000)]
Add the autogenerated empty.h to CLEANFILES.

Colin Watson points out that it's untidy to create it with the
makefile but not clean it up again in the same way.

[originally from svn r10143]

10 years agoAdd the 'subdir-objects' option in the automake makefile.
Simon Tatham [Sat, 22 Feb 2014 18:02:06 +0000 (18:02 +0000)]
Add the 'subdir-objects' option in the automake makefile.

This rearranges the object files so that they each live alongside
their original source file, instead of all being in the same
directory. To my way of thinking this is a more or less neutral change
(perhaps marginally less tidy), but autotools is apparently beginning
to think it's the One True Way and 1.14 will give a warning if you
don't have it enabled.

[originally from svn r10142]

10 years agoMove the Unix configure script up to the top level.
Simon Tatham [Sat, 22 Feb 2014 18:01:32 +0000 (18:01 +0000)]
Move the Unix configure script up to the top level.

Previously, 'configure' and its assorted machinery lived in the 'unix'
subdir, because that seemed like a clean place to keep it given that
all the other per-platform Makefiles live in their platform
directories. However, this never sat all that happily with autotools,
and even less so now that it likes to have object file pathnames
parallel source file pathnames: if you have Makefile.am refer to
source files outside its subdir as "../terminal.c" and enable
subdir-objects then any out-of-tree build calls the corresponding
object file "../terminal.o" and so your build products mostly end up
at the directory above your build dir! And as of autotools 1.14 my
previous compensatory bodge of prefixing every source file path in
Makefile.am with "$(srcdir)" has stopped working too.

So I'm giving in to necessity, and changing policy by moving the
configure machinery up to the top level of the source tree where
autotools will be less confused by it. This should not be taken as any
indication of the primacy of the Unix port, only of the recalcitrance
of autotools.

Whereas before we had a trivial script called 'configure' at the top
level that invoked unix/configure to effectively do an 'out-of-tree
build' (for make purposes) at the top level of the source tree, we now
have a similar script in unix/configure. So this _should_ make very
little difference: people who were previously running configure from
the top level should still be able to, and likewise people who were
running it from the unix subdir.

[originally from svn r10141]

10 years agoEnable xterm mouse reporting of wheel actions in GTK.
Simon Tatham [Sun, 16 Feb 2014 16:40:46 +0000 (16:40 +0000)]
Enable xterm mouse reporting of wheel actions in GTK.

I had somehow missed this completely out of the GTK mouse-button
handling and never noticed until now!

Of course, like any other mouse action, if you want it to be handled
locally rather than passed through then you can hold down Shift.

[originally from svn r10139]

10 years agoStop sending release events for mouse wheel 'buttons' in X mouse mode.
Simon Tatham [Sun, 16 Feb 2014 16:40:45 +0000 (16:40 +0000)]
Stop sending release events for mouse wheel 'buttons' in X mouse mode.

On Windows (X mouse reporting of the mouse wheel isn't currently done
by the Unix front end, though I'm shortly about to fix that too) a
mouse wheel event is translated into a virtual button, and we send
both a press and a release of that button to terminal.c, which encodes
both in X mouse reporting escape sequences and passes them on to the
server. This isn't consistent with what xterm does - scroll-wheel
events are encoded _like_ button presses, but differ semantically in
that they don't have matching releases. So we're updating to match
xterm.

[originally from svn r10138]

10 years agoRevert half of r10135, and re-fix properly.
Simon Tatham [Wed, 5 Feb 2014 21:51:25 +0000 (21:51 +0000)]
Revert half of r10135, and re-fix properly.

One of my changes in uxnet.c was outside the NO_IPV6 ifdef, and broke
compilation in the normal mode. Revert all changes in that file and
replace with a reference to the 'step' parameter in the no-IPv6
version of the SOCKADDR_FAMILY macro, so that those warnings are
squelched anyway.

[originally from svn r10136]
[r10135 == e00a004e64d9de3f8ff5c4eb745faa326c307057]

10 years agoFix warnings when compiling with -DNO_IPV6.
Simon Tatham [Tue, 4 Feb 2014 22:37:53 +0000 (22:37 +0000)]
Fix warnings when compiling with -DNO_IPV6.

A user pointed out that 'family' was uninitialised in config.c, and
when I tried test-building with -DNO_IPV6 (and the usual -Werror, of
course) some unused variables showed up in uxnet.c too.

[originally from svn r10135]

10 years agoDon't unconditionally reset scrollback on certain escape sequences.
Simon Tatham [Sat, 25 Jan 2014 18:38:38 +0000 (18:38 +0000)]
Don't unconditionally reset scrollback on certain escape sequences.

Handlers for a number of escape sequences, notably including ESC[J and
the sequences that switch to/from the alternate screen, were
unconditionally resetting the scrollback instead of first checking the
'Reset scrollback on display activity' configuration option. I've
added the missing if statements, so now 'Reset scrollback on display
activity' should actually mean what it says.

For example, this would have inconvenienced an mplayer user, who
wouldn't be able to go up and check their scrollback while mplayer was
repeatedly redisplaying its status line, because mplayer uses ESC[J to
erase each version of the status line before printing the next
version.

[originally from svn r10125]

10 years agoFix a potential crash in ssh_setup_portfwd.
Simon Tatham [Sat, 25 Jan 2014 15:59:04 +0000 (15:59 +0000)]
Fix a potential crash in ssh_setup_portfwd.

If we search for a colon by computing ptr + host_strcspn(ptr,":"),
then the resulting pointer is always non-NULL, and the 'not found'
condition is not !p but !*p.

This typo could have caused PuTTY to overrun a string, but not in a
security-bug sense because any such string would have to have been
loaded from the configuration rather than received from a hostile
source.

[originally from svn r10123]

10 years agoSupport explicit IPv6 source addresses in Windows port forwarding.
Simon Tatham [Sat, 25 Jan 2014 15:58:59 +0000 (15:58 +0000)]
Support explicit IPv6 source addresses in Windows port forwarding.

There's been a long-standing FIXME in Windows's sk_newlistener which
says that in IPv6 mode, an explicit source address (e.g. from a
command-line option of the form -L srcaddr:12345:dest:22) is ignored.
Now it's honoured if possible.

[originally from svn r10122]

10 years agoAvoid misidentifying unbracketed IPv6 literals as host:port.
Simon Tatham [Sat, 25 Jan 2014 15:58:57 +0000 (15:58 +0000)]
Avoid misidentifying unbracketed IPv6 literals as host:port.

Both GUI PuTTY front ends have a piece of logic whereby a string is
interpreted as host:port if there's _one_ colon in it, but if there's
more than one colon then it's assumed to be an IPv6 literal with no
trailing port number. This permits the PuTTY command line to take
strings such as 'host', 'host:22' or '[::1]:22', but also cope with a
bare v6 literal such as '::1'.

This logic is also required in the two Plink front ends and in the
processing of CONF_loghost for host key indexing in ssh.c, but was
missing in all those places. Add it.

[originally from svn r10121]

10 years agoUse the new host_str* functions to improve IPv6 literal support.
Simon Tatham [Sat, 25 Jan 2014 15:58:54 +0000 (15:58 +0000)]
Use the new host_str* functions to improve IPv6 literal support.

I've gone through everywhere we handle host names / addresses (on
command lines, in PuTTY config, in port forwarding, in X display
names, in host key storage...) and tried to make them handle IPv6
literals sensibly, by using the host_str* functions I introduced in my
previous commit. Generally it's now OK to use a bracketed IPv6 literal
anywhere a hostname might have been valid; in a few cases where no
ambiguity exists (e.g. no :port suffix is permitted anyway)
unbracketed IPv6 literals are also acceptable.

[originally from svn r10120]

10 years agoNew hostname-handling functions in misc.c.
Simon Tatham [Sat, 25 Jan 2014 15:58:47 +0000 (15:58 +0000)]
New hostname-handling functions in misc.c.

These are intended to make it easier to handle strings of the form
"hostname:port" or other colon-separated things including hostnames
(such as the -L and -R command-line option arguments), even though the
hostname part might be a square-bracketed IPv6 address literal
containing colons that have to _not_ be treated as separating the
top-level string components.

Three of these functions have semantics as much like existing C
library functions as I could make them (host_strchr, host_strrchr,
host_strcspn) so that it wouldn't be too error-prone to replace
existing C functions with them at lots of call sites. The fourth
function (host_strduptrim) just strips square brackets off anything
that looks like an IPv6 literal.

[originally from svn r10119]

10 years agoFix assertion failure in Unix PuTTYgen exports.
Simon Tatham [Thu, 16 Jan 2014 19:16:19 +0000 (19:16 +0000)]
Fix assertion failure in Unix PuTTYgen exports.

The assertions I added to sshrand.c in r9930 are now justified,
because they were failing when cmdgen was used to convert a key into
either foreign private key file format - both the export functions
require random_byte() for one reason or another, and random_ref()
hadn't been called first.

[originally from svn r10117]
[r9930 == 33f485c1c3a0942192763f085292aa57d9c3de87]

10 years agoIt's a new year.
Jacob Nevins [Wed, 15 Jan 2014 23:57:54 +0000 (23:57 +0000)]
It's a new year.

[originally from svn r10114]

10 years agoRemove mention of ASCIICTLS. It hasn't done anything since r673 in 2000.
Jacob Nevins [Wed, 15 Jan 2014 23:46:30 +0000 (23:46 +0000)]
Remove mention of ASCIICTLS. It hasn't done anything since r673 in 2000.

[originally from svn r10113]
[r673 == 5d359d9528f158baba1862a8fec8ce1af31d2ee8]

10 years agoGenerate IDE project files for Visual Studio 2010 and 2012.
Simon Tatham [Sat, 11 Jan 2014 11:23:12 +0000 (11:23 +0000)]
Generate IDE project files for Visual Studio 2010 and 2012.

Thanks to Mike Edenfield for the initial version of this patch; I've
polished it up a bit (in particular inventing a more overengineered
GUID generation strategy) but most of it is his.

[originally from svn r10112]

10 years agoRename the handle-type enumeration values.
Simon Tatham [Tue, 7 Jan 2014 23:26:10 +0000 (23:26 +0000)]
Rename the handle-type enumeration values.

Mike Edenfield points out that modern versions of the Windows SDK have
decided that 'INPUT' is a sensible name for an OS data structure
(sigh), and provided a patch to add a disambiguating prefix to
winhandl.c's enum values INPUT, OUTPUT and FOREIGN.

[originally from svn r10109]

10 years agoFix breakage of SSH-2 packet decompression by r10070.
Simon Tatham [Mon, 2 Dec 2013 19:26:36 +0000 (19:26 +0000)]
Fix breakage of SSH-2 packet decompression by r10070.

The line that resets st->pktin->length to cover only the semantic
payload of the SSH message was overwriting the modification to
st->pktin->length performed by the optional decompression step. I
didn't notice because I don't habitually enable compression.

[originally from svn r10103]
[r10070 == 9f5d51a4ac3c10efbefa9b10facb5386e02a6aca]

10 years agoUse printf rather than echo to generate \versionid.
Jacob Nevins [Sun, 1 Dec 2013 18:02:56 +0000 (18:02 +0000)]
Use printf rather than echo to generate \versionid.

(Sacrificing the ability to build PuTTY docs from Halibut source on SunOS 4,
apparently, but I expect we'll live.)

[originally from svn r10102]

10 years agoDocument the 'bold black' hazard of bold-as-font.
Jacob Nevins [Sat, 30 Nov 2013 20:01:26 +0000 (20:01 +0000)]
Document the 'bold black' hazard of bold-as-font.

[originally from svn r10101]

10 years agoMake GTK idle and quit function setup idempotent.
Simon Tatham [Sat, 30 Nov 2013 18:04:57 +0000 (18:04 +0000)]
Make GTK idle and quit function setup idempotent.

I found last week that when a local proxy process terminated
unexpectedly, Unix PuTTY went into a tight loop calling quit
functions, because if idle_toplevel_callback_func is called from
inside a subsidiary gtk_main then it will schedule a quit function and
_not_ disable itself, so that that quit function keeps being
rescheduled on subsequent calls.

To fix, I've tried to make the whole handling of idle and quit
functions more sensibly robust: we keep our own boolean flag
indicating whether each of our functions has already been scheduled
with GTK, and if so, we don't schedule the same one again. Also, when
idle_toplevel_callback_func schedules a quit function, it should
unschedule itself since it's now done everything it can until a
gtk_main instance quits.

[originally from svn r10100]

10 years agoFix interaction of insch() with selection highlights.
Simon Tatham [Mon, 25 Nov 2013 19:46:05 +0000 (19:46 +0000)]
Fix interaction of insch() with selection highlights.

Previously I had unthinkingly called the general-purpose
check_selection() routine to indicate that I was going to mess with n
character cells right of the cursor position, causing the selection
highlight to be removed if it intersected that region. This is all
wrong, since actually the whole region from cursor to EOL is modified
by any character insertion or deletion, so if we were going to call
check_selection it should be on that whole region. (Quick demo: select
part of the line to the right of the cursor, then emit ESC[P or ESC[@
and see the text move left or right while the highlight stays put.)

So we could just call check_selection() on that larger affected
region, and that would be correct. However, we can do something
slightly more elegant in the case where the selection is contained
entirely within the subregion that moves to one side (as opposed to
the characters that actually vanish at one or other end): we can move
the selection highlight with the text under it, to preserve the visual
reminder of which text was selected for as long as possible.

[originally from svn r10097]

10 years agoSwitch to using SIDs in make_private_security_descriptor().
Simon Tatham [Mon, 25 Nov 2013 18:35:14 +0000 (18:35 +0000)]
Switch to using SIDs in make_private_security_descriptor().

Daniel Meidlinger reports that at least one Windows machine which is
not obviously otherwise misconfigured will respond to our
SetEntriesInAcl call with odd errors like ERROR_NONE_MAPPED or
ERROR_TRUSTED_RELATIONSHIP_FAILURE. This is apparently to do with
failure to convert the names "EVERYONE" and "CURRENT_USER" used in the
ACL specification to SIDs. (Or perhaps only one of them is the problem
- I didn't investigate in that direction.)

If we instead construct a fully SID-based ACL, using the well-known
world SID in place of EVERYONE and calling our existing get_user_sid
routine in place of CURRENT_USER, he reports that the problem goes
away, so let's do that instead.

While I'm here, I've slightly simplified the function prototype of
make_private_security_descriptor(), by turning 'networksid' into an
internal static that we can reuse in subsequent calls once we've set
it up. (Mostly because I didn't fancy adding another two pointless
parameters at every call site for the two new SIDs.)

[originally from svn r10096]

10 years agoRemove an unused variable orphaned by r10092.
Simon Tatham [Sat, 23 Nov 2013 16:54:51 +0000 (16:54 +0000)]
Remove an unused variable orphaned by r10092.

[originally from svn r10095]
[r10092 == d1e4f9c8fb826bb1761ae6dbbdfb566ebbe3ab61]

10 years agoSetEntriesInAcl returns its error code directly.
Simon Tatham [Fri, 22 Nov 2013 19:41:49 +0000 (19:41 +0000)]
SetEntriesInAcl returns its error code directly.

According to the MSDN documentation, that is. Why oh why? Everything
_else_ leaves it in GetLastError().

[originally from svn r10094]

10 years agoPass the right number of entries to SetEntriesInAcl!
Simon Tatham [Fri, 22 Nov 2013 19:41:45 +0000 (19:41 +0000)]
Pass the right number of entries to SetEntriesInAcl!

[originally from svn r10093]

10 years agoInclude the numeric error code in win_strerror's output.
Simon Tatham [Fri, 22 Nov 2013 19:41:43 +0000 (19:41 +0000)]
Include the numeric error code in win_strerror's output.

This will be useful if someone gets a mysterious Windows error on a
system configured into a language we don't speak - if they cut and
paste the error message to send to us, then we won't have to try to
translate it.

[originally from svn r10092]

10 years agoFix up the Windows help context stuff for the new connection sharing controls.
Jacob Nevins [Mon, 18 Nov 2013 22:34:57 +0000 (22:34 +0000)]
Fix up the Windows help context stuff for the new connection sharing controls.

[originally from svn r10088]

10 years agoGracefully degrade in the absence of CryptProtectMemory.
Simon Tatham [Mon, 18 Nov 2013 19:07:58 +0000 (19:07 +0000)]
Gracefully degrade in the absence of CryptProtectMemory.

XP doesn't have it, and I think having connection sharing work without
its privacy enhancement is better than having it not work at all.

[originally from svn r10087]

10 years agoRestore compatibility with older autoconfs.
Simon Tatham [Mon, 18 Nov 2013 19:07:11 +0000 (19:07 +0000)]
Restore compatibility with older autoconfs.

The one in Ubuntu 10.04 doesn't know what AM_PROG_AR means, so
configure.ac was broken in r10053 when fixing compatibility with later
versions; you can't win...

[originally from svn r10086]
[r10053 == 2d9cc79d53ec2973c6b8ce47a15561c0f3b9e59c]

10 years agoFix an assortment of dupprintf() format string bugs.
Simon Tatham [Sun, 17 Nov 2013 14:05:44 +0000 (14:05 +0000)]
Fix an assortment of dupprintf() format string bugs.

I've enabled gcc's format-string checking on dupprintf, by declaring
it in misc.h to have the appropriate GNU-specific attribute. This
pointed out a selection of warnings, which I've fixed.

[originally from svn r10084]

10 years agoImplement connection sharing between instances of PuTTY.
Simon Tatham [Sun, 17 Nov 2013 14:05:41 +0000 (14:05 +0000)]
Implement connection sharing between instances of PuTTY.

The basic strategy is described at the top of the new source file
sshshare.c. In very brief: an 'upstream' PuTTY opens a Unix-domain
socket or Windows named pipe, and listens for connections from other
PuTTYs wanting to run sessions on the same server. The protocol spoken
down that socket/pipe is essentially the bare ssh-connection protocol,
using a trivial binary packet protocol with no encryption, and the
upstream has to do some fiddly transformations that I've been
referring to as 'channel-number NAT' to avoid resource clashes between
the sessions it's managing.

This is quite different from OpenSSH's approach of using the Unix-
domain socket as a means of passing file descriptors around; the main
reason for that is that fd-passing is Unix-specific but this system
has to work on Windows too. However, there are additional advantages,
such as making it easy for each downstream PuTTY to run its own
independent set of port and X11 forwardings (though the method for
making the latter work is quite painful).

Sharing is off by default, but configuration is intended to be very
easy in the normal case - just tick one box in the SSH config panel
and everything else happens automatically.

[originally from svn r10083]

10 years agoMove the dynamic loading of advapi into its own module.
Simon Tatham [Sun, 17 Nov 2013 14:05:29 +0000 (14:05 +0000)]
Move the dynamic loading of advapi into its own module.

There's now a winsecur.[ch], which centralises helper functions using
the Windows security stuff in advapi.h (currently just get_user_sid),
and also centralises the run-time loading of those functions and
checking they're all there.

[originally from svn r10082]

10 years agoGet rid of the error-return mechanism from x11_init.
Simon Tatham [Sun, 17 Nov 2013 14:05:23 +0000 (14:05 +0000)]
Get rid of the error-return mechanism from x11_init.

Now that it doesn't actually make a network connection because that's
deferred until after the X authorisation exchange, there's no point in
having it return an error message and write the real output through a
pointer argument. Instead, we can just have it return xconn directly
and simplify the call sites.

[originally from svn r10081]

10 years agoRefactor the construction of X protocol greetings.
Simon Tatham [Sun, 17 Nov 2013 14:05:17 +0000 (14:05 +0000)]
Refactor the construction of X protocol greetings.

I've moved it out into a separate function, preparatory to calling it
from somewhere completely different in changes to come. Also, we now
retain the peer address sent from the SSH server in string form,
rather than translating it immediately into a numeric IP address, so
that its original form will be available later to pass on elsewhere.

[originally from svn r10080]

10 years agoPrepare to have multiple X11 auth cookies valid at once.
Simon Tatham [Sun, 17 Nov 2013 14:05:10 +0000 (14:05 +0000)]
Prepare to have multiple X11 auth cookies valid at once.

Rather than the top-level component of X forwarding being an
X11Display structure which owns some auth data, it's now a collection
of X11FakeAuth structures, each of which owns a display. The idea is
that when we receive an X connection, we wait to see which of our
available auth cookies it matches, and then connect to whatever X
display that auth cookie identifies. At present the tree will only
have one thing in it; this is all groundwork for later changes.

[originally from svn r10079]

10 years agoDecouple X socket opening from x11_init().
Simon Tatham [Sun, 17 Nov 2013 14:05:04 +0000 (14:05 +0000)]
Decouple X socket opening from x11_init().

Now we wait to open the socket to the X server until we've seen the
authorisation data. This prepares us to do something else with the
channel if we see different auth data, which will come up in
connection sharing.

[originally from svn r10078]

10 years agoAdd missing 'const' in the des_*_xdmauth functions.
Simon Tatham [Sun, 17 Nov 2013 14:05:01 +0000 (14:05 +0000)]
Add missing 'const' in the des_*_xdmauth functions.

[originally from svn r10077]

10 years agoAdd a missing null pointer check in s_write.
Simon Tatham [Sun, 17 Nov 2013 14:04:56 +0000 (14:04 +0000)]
Add a missing null pointer check in s_write.

I don't know that this can ever be triggered in the current state of
the code, but when I start mucking around with SSH session closing in
the near future, it may be handy to have it.

[originally from svn r10076]

10 years agoRemove sk_{get,set}_private_ptr completely!
Simon Tatham [Sun, 17 Nov 2013 14:04:48 +0000 (14:04 +0000)]
Remove sk_{get,set}_private_ptr completely!

It was only actually used in X11 and port forwarding, to find internal
state structures given only the Socket that ssh.c held. So now that
that lookup has been reworked to be the sensible way round,
private_ptr is no longer used for anything and can be removed.

[originally from svn r10075]

10 years agoRefactor ssh.c's APIs to x11fwd.c and portfwd.c.
Simon Tatham [Sun, 17 Nov 2013 14:04:41 +0000 (14:04 +0000)]
Refactor ssh.c's APIs to x11fwd.c and portfwd.c.

The most important change is that, where previously ssh.c held the
Socket pointer for each X11 and port forwarding, and the support
modules would find their internal state structure by calling
sk_get_private_ptr on that Socket, it's now the other way round. ssh.c
now directly holds the internal state structure pointer for each
forwarding, and when the support module needs the Socket it looks it
up in a field of that. This will come in handy when I decouple socket
creation from logical forwarding setup, so that X forwardings can
delay actually opening a connection to an X server until they look at
the authentication data and see which server it has to be.

However, while I'm here, I've also taken the opportunity to clean up a
few other points, notably error message handling, and also the fact
that the same kind of state structure was used for both
connection-type and listening-type port forwardings. Now there are
separate PortForwarding and PortListener structure types, which seems
far more sensible.

[originally from svn r10074]

10 years agoReliably initialise uxnet's socket fd fields to -1.
Simon Tatham [Sun, 17 Nov 2013 14:04:33 +0000 (14:04 +0000)]
Reliably initialise uxnet's socket fd fields to -1.

This prevents embarrassing mess-ups involving getting back a Socket
which has mostly been memset to 0 but contains an error message,
sk_close()ing it to free the memory, and finding that standard input
has been closed as a side effect.

[originally from svn r10073]