]> asedeno.scripts.mit.edu Git - PuTTY_svn.git/log
PuTTY_svn.git
10 years agoEnable xterm mouse reporting of wheel actions in GTK. master
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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10139 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10138 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10136 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10135 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10125 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10123 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10122 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10121 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10120 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10119 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10117 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10114 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10113 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10112 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10109 cda61777-01e9-0310-a592-d414129be87e

10 years agoInclude another autoconf dropping in svn:ignore.
Simon Tatham [Mon, 2 Dec 2013 19:27:33 +0000 (19:27 +0000)]
Include another autoconf dropping in svn:ignore.

git-svn-id: http://svn.tartarus.org/sgt/putty@10104 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10103 cda61777-01e9-0310-a592-d414129be87e

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.)

git-svn-id: http://svn.tartarus.org/sgt/putty@10102 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10101 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10100 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10097 cda61777-01e9-0310-a592-d414129be87e

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.)

git-svn-id: http://svn.tartarus.org/sgt/putty@10096 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10095 cda61777-01e9-0310-a592-d414129be87e

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().

git-svn-id: http://svn.tartarus.org/sgt/putty@10094 cda61777-01e9-0310-a592-d414129be87e

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!

git-svn-id: http://svn.tartarus.org/sgt/putty@10093 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10092 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10088 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10087 cda61777-01e9-0310-a592-d414129be87e

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...

git-svn-id: http://svn.tartarus.org/sgt/putty@10086 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10084 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10083 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10082 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10081 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10080 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10079 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10078 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10077 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10076 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10075 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10074 cda61777-01e9-0310-a592-d414129be87e

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.

git-svn-id: http://svn.tartarus.org/sgt/putty@10073 cda61777-01e9-0310-a592-d414129be87e

10 years agoAdd support in uxnet.c for Unix-domain listening sockets.
Simon Tatham [Sun, 17 Nov 2013 14:04:29 +0000 (14:04 +0000)]
Add support in uxnet.c for Unix-domain listening sockets.

There are two new functions: one to construct a SockAddr wrapping a
Unix socket pathname (which can also be used as the destination for
new_connection), and one to establish a new listening Unix-domain
socket.

git-svn-id: http://svn.tartarus.org/sgt/putty@10072 cda61777-01e9-0310-a592-d414129be87e

10 years agoComplete rewrite of the packet log censoring code.
Simon Tatham [Sun, 17 Nov 2013 14:04:25 +0000 (14:04 +0000)]
Complete rewrite of the packet log censoring code.

Because the upcoming connection sharing changes are going to involve
us emitting outgoing SSH packets into our log file that we didn't
construct ourselves, we can no longer rely on metadata inserted at
packet construction time to tell us which parts of which packets have
to be blanked or omitted in the SSH packet log. Instead, we now have
functions that deal with constructing the blanks array just before
passing all kinds of packet (both SSH-1 and SSH-2, incoming and
outgoing) to logging.c; the blanks/nblanks fields in struct Packet are
therefore no longer needed.

git-svn-id: http://svn.tartarus.org/sgt/putty@10071 cda61777-01e9-0310-a592-d414129be87e

10 years agoClean up the 'data' vs 'body' pointers in struct Packet.
Simon Tatham [Sun, 17 Nov 2013 14:04:18 +0000 (14:04 +0000)]
Clean up the 'data' vs 'body' pointers in struct Packet.

There's always been some confusion over exactly what it all means. I
haven't cleaned it up to the point of complete sensibleness, but I've
got it to a point where I can at least understand and document the
remaining non-sensibleness.

git-svn-id: http://svn.tartarus.org/sgt/putty@10070 cda61777-01e9-0310-a592-d414129be87e

10 years agoAdd support for Windows named pipes.
Simon Tatham [Sun, 17 Nov 2013 14:04:01 +0000 (14:04 +0000)]
Add support for Windows named pipes.

This commit adds two new support modules, winnpc.c and winnps.c, which
deal respectively with being a client and server of a Windows named
pipe (which, in spite of what Unix programmers will infer from that
name, is actually closer to Windows's analogue of a Unix-domain
socket). Each one provides a fully featured Socket wrapper around the
hairy Windows named pipe API, so that the rest of the code base should
be able to use these interchangeably with ordinary sockets and hardly
notice the difference.

As part of this work, I've introduced a mechanism in winhandl.c to
permit it to store handles of event objects on behalf of other Windows
support modules and deal with passing them to applications' main event
loops as necessary. (Perhaps it would have been cleaner to split
winhandl.c into an event-object tracking layer analogous to uxsel, and
the handle management which is winhandl.c's proper job, but this is
less disruptive for the present.)

git-svn-id: http://svn.tartarus.org/sgt/putty@10069 cda61777-01e9-0310-a592-d414129be87e

10 years agoReplace the hacky 'OSSocket' type with a closure.
Simon Tatham [Sun, 17 Nov 2013 14:03:55 +0000 (14:03 +0000)]
Replace the hacky 'OSSocket' type with a closure.

The mechanism for constructing a new connection-type Socket when a
listening one receives an incoming connection previously worked by
passing a platform-specific 'OSSocket' type to the plug_accepting
function, which would then call sk_register to wrap it with a proper
Socket instance. This is less flexible than ideal, because it presumes
that only one kind of OS object might ever need to be turned into a
Socket. So I've replaced OSSocket throughout the code base with a pair
of parameters consisting of a function pointer and a context such that
passing the latter to the former returns the appropriate Socket; this
will permit different classes of listening Socket to pass different
function pointers.

In deference to the reality that OSSockets tend to be small integers
or pointer-sized OS handles, I've made the context parameter an
int/pointer union that can hold either of those directly, rather than
the usual approach of making it a plain 'void *' and requiring a
context structure to be dynamically allocated every time.

git-svn-id: http://svn.tartarus.org/sgt/putty@10068 cda61777-01e9-0310-a592-d414129be87e

10 years agoImplement freezing on Windows handle sockets.
Simon Tatham [Sun, 17 Nov 2013 14:03:48 +0000 (14:03 +0000)]
Implement freezing on Windows handle sockets.

That's been a FIXME in the code for ages, because it's difficult to
get winhandl.c to stop an already-started read from a handle (since
the read is a blocking system call running in a separate thread). But
I now realise it isn't absolutely necessary to do so - you can just
buffer one lot of data from winhandl and _then_ tell it to stop.

git-svn-id: http://svn.tartarus.org/sgt/putty@10067 cda61777-01e9-0310-a592-d414129be87e

10 years agoFactor out the HANDLE-to-Socket adapter from winproxy.c.
Simon Tatham [Sun, 17 Nov 2013 14:03:44 +0000 (14:03 +0000)]
Factor out the HANDLE-to-Socket adapter from winproxy.c.

It's now kept in a separate module, where it can be reused
conveniently for other kinds of Windows HANDLE that I want to wrap in
the PuTTY Socket abstraction - for example, the named pipes that I
shortly plan to use for the Windows side of connection-sharing IPC.

git-svn-id: http://svn.tartarus.org/sgt/putty@10066 cda61777-01e9-0310-a592-d414129be87e

10 years agoAdd a Socket implementation which just holds an error message.
Simon Tatham [Sun, 17 Nov 2013 14:03:36 +0000 (14:03 +0000)]
Add a Socket implementation which just holds an error message.

This isn't yet used, but I plan to use it in situations where you have
to report errors by returning a valid Socket on which the client wlil
call sk_socket_error, but in fact you notice the error _before_
instantiating your usual kind of Socket. The resulting Socket is
usable for nothing except reading out the error string and closing it.

git-svn-id: http://svn.tartarus.org/sgt/putty@10065 cda61777-01e9-0310-a592-d414129be87e

10 years agoMove SSH protocol enumerations out into ssh.h.
Simon Tatham [Sun, 17 Nov 2013 14:03:29 +0000 (14:03 +0000)]
Move SSH protocol enumerations out into ssh.h.

This permits packet type codes and other magic numbers to be accessed
from modules other than ssh.c.

git-svn-id: http://svn.tartarus.org/sgt/putty@10064 cda61777-01e9-0310-a592-d414129be87e

10 years agoMove cipher settings into their own config panel.
Simon Tatham [Sun, 17 Nov 2013 14:03:25 +0000 (14:03 +0000)]
Move cipher settings into their own config panel.

This makes room in the main SSH panel for new options about connection
sharing, which I'm shortly going to add.

git-svn-id: http://svn.tartarus.org/sgt/putty@10063 cda61777-01e9-0310-a592-d414129be87e

10 years agoClean up the semantics of the ssh_rportfwd structure.
Simon Tatham [Sun, 17 Nov 2013 14:03:21 +0000 (14:03 +0000)]
Clean up the semantics of the ssh_rportfwd structure.

It's now indexed by source hostname as well as source port (so that
separate requests for the server to listen on addr1:1234 and
addr2:1234 can be disambiguated), and also its destination host name
is dynamically allocated rather than a fixed-size buffer.

git-svn-id: http://svn.tartarus.org/sgt/putty@10062 cda61777-01e9-0310-a592-d414129be87e

10 years agoFind ToUnicodeEx() at run time, not load time.
Simon Tatham [Sun, 17 Nov 2013 14:03:20 +0000 (14:03 +0000)]
Find ToUnicodeEx() at run time, not load time.

This restores PuTTY's backward compatibility to versions of Windows
too old to have ToUnicodeEx in their system libraries, which was
accidentally broken in 0.63.

git-svn-id: http://svn.tartarus.org/sgt/putty@10061 cda61777-01e9-0310-a592-d414129be87e

10 years agoReplace GetQueueStatus with PeekMessage(PM_NOREMOVE).
Simon Tatham [Mon, 11 Nov 2013 23:01:47 +0000 (23:01 +0000)]
Replace GetQueueStatus with PeekMessage(PM_NOREMOVE).

A couple of users report that my recent reworking of the Windows
top-level message loop has led to messages occasionally being lost,
and MsgWaitForMultipleObjects blocking when it ought to have been
called with a zero timeout. I haven't been able to reproduce this
myself, but according to one reporter, PeekMessage(PM_NOREMOVE) is
effective at checking for a non-empty message queue in a way that
GetQueueStatus is not. Switch to using that instead. Thanks to Eric
Flumerfelt for debugging and testing help.

git-svn-id: http://svn.tartarus.org/sgt/putty@10057 cda61777-01e9-0310-a592-d414129be87e

10 years agoFix build failures on Ubuntu 13.10.
Simon Tatham [Sat, 26 Oct 2013 14:00:10 +0000 (14:00 +0000)]
Fix build failures on Ubuntu 13.10.

Automake now insists that we run AM_PROG_AR if we're going to build a
library, and AM_PROG_CC_C_O if we're going to build anything with
extra compile options. Those extra macros seem harmless in previous
versions of automake.

git-svn-id: http://svn.tartarus.org/sgt/putty@10053 cda61777-01e9-0310-a592-d414129be87e

10 years agoAvoid leaving unread Windows messages in the queue.
Simon Tatham [Fri, 25 Oct 2013 17:44:02 +0000 (17:44 +0000)]
Avoid leaving unread Windows messages in the queue.

Jochen Erwied points out that once you've used PeekMessage to remove
_one_ message from the message queue, MsgWaitForMultipleObjects will
consider the whole queue to have been 'read', or at least looked at
and deemed uninteresting, and so it will block until a further message
comes in. Hence, my change in r10040 which stops us from looping on
PeekMessage until the queue is empty has the effect of causing the
rest of the message queue not to be acted on until a new message comes
in to unblock it. Fix by checking if the queue is nonempty in advance
of calling MsgWaitForMultipleObjects, and if so, giving it a zero
timeout just as we do if there's a pending toplevel callback.

git-svn-id: http://svn.tartarus.org/sgt/putty@10052 cda61777-01e9-0310-a592-d414129be87e

10 years agorandom_ref() should always increment the reference count.
Simon Tatham [Wed, 9 Oct 2013 18:38:35 +0000 (18:38 +0000)]
random_ref() should always increment the reference count.

No current PuTTY utility was calling random_ref more than once per run
(ssh.c and the two main PuTTYgen programs call it once each), but if
one ever does (or if derived code does), it will want the reference
count to actually work sensibly.

git-svn-id: http://svn.tartarus.org/sgt/putty@10049 cda61777-01e9-0310-a592-d414129be87e

10 years agoDon't pass WinSock error codes to strerror.
Simon Tatham [Wed, 9 Oct 2013 18:36:56 +0000 (18:36 +0000)]
Don't pass WinSock error codes to strerror.

Martin Prikryl helpfully points out that when I revamped the socket
error mechanism using toplevel callbacks, I also accidentally passed
the error code to the wrong function. Use winsock_error_string instead.

git-svn-id: http://svn.tartarus.org/sgt/putty@10048 cda61777-01e9-0310-a592-d414129be87e

10 years agoFix cut-and-paste errors in nonfatal() implementations.
Simon Tatham [Mon, 23 Sep 2013 14:35:08 +0000 (14:35 +0000)]
Fix cut-and-paste errors in nonfatal() implementations.

Unix GUI programs should not say 'Fatal Error' in the message box
title, and Plink should not destroy its logging context as a side
effect of printing a non-fatal error. Both appear to have been due to
inattentive cut and paste from the pre-existing fatal error functions.

git-svn-id: http://svn.tartarus.org/sgt/putty@10044 cda61777-01e9-0310-a592-d414129be87e

10 years agoOops! Remove a tight-looping diagnostic.
Simon Tatham [Sun, 15 Sep 2013 14:40:46 +0000 (14:40 +0000)]
Oops! Remove a tight-looping diagnostic.

I temporarily applied it as a means of testing the revised event loops
in r10040, and accidentally folded it into my final commit instead of
backing it out. Ahem.

git-svn-id: http://svn.tartarus.org/sgt/putty@10042 cda61777-01e9-0310-a592-d414129be87e

10 years agoRemove the timed part of the terminal paste mechanism.
Simon Tatham [Sun, 15 Sep 2013 14:05:38 +0000 (14:05 +0000)]
Remove the timed part of the terminal paste mechanism.

In r10020 I carefully reimplemented using timing.c and callback.c the
same policy for large pastes that the previous code appeared to be
implementing ad-hoc, which included a 450ms delay between sending
successive lines of pasted text if no visible acknowledgment of the
just-sent line (in the form of a \n or \r) came back from the
application.

However, it turns out that that *wasn't* what the old code was doing.
It *would* have done that, but for the bug that it never actually set
the 'last_paste' variable, and never has done since it was first
introduced way back in r516! So the policy I thought had been in force
forever has in fact only been in force since I unwittingly fixed that
bug in r10020 - and it turns out to be a bad idea, breaking pastes
into vi in particular.

So I've removed the timed paste code completely, on the basis that
it's never actually worked and nobody seems to have been unhappy about
that. Now we still break large pastes into separate lines and send
them in successive top-level callbacks, and the user can still press a
key to interrupt a paste if they manage to catch it still going on,
but there's no attempted *delay* any more.

(It's possible that what I *really* ought to be doing is calling
back->sendbuffer() to see whether the backend is consuming the data
pasted so far, and if not, deferring the rest of the paste until the
send buffer becomes smaller. Then we could have pasting be delayed by
back-pressure from the recipient, and still manually interruptible
during that delay, but not have it delayed by anything else. But what
we have here should at least manage to be equivalent to the *actual*
rather than the intended old policy.)

git-svn-id: http://svn.tartarus.org/sgt/putty@10041 cda61777-01e9-0310-a592-d414129be87e

10 years agoOnly run one toplevel callback per event loop iteration.
Simon Tatham [Sun, 15 Sep 2013 14:05:31 +0000 (14:05 +0000)]
Only run one toplevel callback per event loop iteration.

This change attempts to reinstate as a universal property something
which was sporadically true of the ad-hockery that came before
toplevel callbacks: that if there's a _very long_ queue of things to
be done through the callback mechanism, the doing of them will be
interleaved with re-checks of other event sources, which might (e.g.)
cause a flag to be set which makes the next callback decide not to do
anything after all.

git-svn-id: http://svn.tartarus.org/sgt/putty@10040 cda61777-01e9-0310-a592-d414129be87e

10 years agoHandle socket errors on half-open channels.
Simon Tatham [Sun, 8 Sep 2013 13:20:49 +0000 (13:20 +0000)]
Handle socket errors on half-open channels.

Anthony Ho reports that this can occur naturally in some situation
involving Windows 8 + IE 11 and dynamic port forwarding: apparently we
get through the SOCKS negotiation, send our CHANNEL_OPEN, and then
*immediately* suffer a local WSAECONNABORTED error before the server
has sent back its OPEN_CONFIRMATION or OPEN_FAILURE. In this situation
ssh2_channel_check_close was failing to notice that the channel didn't
yet have a valid server id, and sending out a CHANNEL_CLOSE anyway
containing 32 bits of uninitialised nonsense.

We now handle this by turning our half-open CHAN_SOCKDATA_DORMANT into
a half-open CHAN_ZOMBIE, which means in turn that our handler
functions for OPEN_CONFIRMATION and OPEN_FAILURE have to recognise and
handle that case, the former by immediately initiating channel closure
once we _do_ have the channel's server id to do it with.

git-svn-id: http://svn.tartarus.org/sgt/putty@10039 cda61777-01e9-0310-a592-d414129be87e

10 years agoPass an error message through to sshfwd_unclean_close.
Simon Tatham [Sun, 8 Sep 2013 07:14:56 +0000 (07:14 +0000)]
Pass an error message through to sshfwd_unclean_close.

We have access to one at every call site, so there's really no reason
not to send it through to ssh.c to be logged.

git-svn-id: http://svn.tartarus.org/sgt/putty@10038 cda61777-01e9-0310-a592-d414129be87e

10 years agoFix SSH2_MSG_CHANNEL_EXTENDED_DATA in logparse.
Simon Tatham [Sat, 7 Sep 2013 16:15:11 +0000 (16:15 +0000)]
Fix SSH2_MSG_CHANNEL_EXTENDED_DATA in logparse.

It looks as if it's never worked at all: it had a spurious second
printf, it completely forgot to allow for the uint32 type code that
SSH2_MSG_CHANNEL_DATA doesn't have, it accessed the channel state's
sequence number fields in a way that made no sense and didn't match
the rest of the program, *and* it misinvoked the file opening API. I
must have never had an occasion to test it.

git-svn-id: http://svn.tartarus.org/sgt/putty@10037 cda61777-01e9-0310-a592-d414129be87e

10 years agoMake logparse handle completely bogus channel numbers.
Simon Tatham [Sat, 7 Sep 2013 16:15:10 +0000 (16:15 +0000)]
Make logparse handle completely bogus channel numbers.

Previously it would throw a bunch of Perl undefined-variable-usage
warnings; now it cleanly detects the problem, dumps as much of the
message as it still reasonably can, and doesn't update any channel
states.

git-svn-id: http://svn.tartarus.org/sgt/putty@10036 cda61777-01e9-0310-a592-d414129be87e

10 years agoFix free of an uninitialised pointer.
Simon Tatham [Mon, 26 Aug 2013 11:55:56 +0000 (11:55 +0000)]
Fix free of an uninitialised pointer.

CHAN_AGENT channels need c->u.a.message to be either NULL or valid
dynamically allocated memory, because it'll be freed by
ssh_channel_destroy. This bug triggers if an agent forwarding channel
is opened and closed without having sent any queries.

git-svn-id: http://svn.tartarus.org/sgt/putty@10032 cda61777-01e9-0310-a592-d414129be87e

10 years agoFix handling of IPv6 dynamic forwardings.
Simon Tatham [Thu, 22 Aug 2013 17:45:26 +0000 (17:45 +0000)]
Fix handling of IPv6 dynamic forwardings.

During the Conf revamp, I changed the internal representation of
dynamic forwardings so that they were stored as the conceptually
sensible L12345=D rather than the old D12345, and added compensation
code to translate to the latter form for backwards-compatible data
storage and for OpenSSH-harmonised GUI display. Unfortunately I forgot
that keys in the forwarding data can also prefix the L/R with a
character indicating IPv4/IPv6, and my translations didn't take
account of that possibility. Fix them.

git-svn-id: http://svn.tartarus.org/sgt/putty@10031 cda61777-01e9-0310-a592-d414129be87e

10 years agoDon't run toplevel callbacks in modal dialogs.
Simon Tatham [Sun, 18 Aug 2013 10:56:20 +0000 (10:56 +0000)]
Don't run toplevel callbacks in modal dialogs.

Because some of them can call gtk_main_quit(), which completely
confuses the dialog box system.

git-svn-id: http://svn.tartarus.org/sgt/putty@10029 cda61777-01e9-0310-a592-d414129be87e

10 years agoSensibly enforce non-interactive rekeying.
Simon Tatham [Sun, 18 Aug 2013 06:48:20 +0000 (06:48 +0000)]
Sensibly enforce non-interactive rekeying.

We now only present the full set of host key algorithms we can handle
in the first key exchange. In subsequent rekeys, we present only the
host key algorithm that we agreed on the previous time, and then we
verify the host key by simply enforcing that it's exactly the same as
the one we saw at first and disconnecting rudely if it isn't.

git-svn-id: http://svn.tartarus.org/sgt/putty@10027 cda61777-01e9-0310-a592-d414129be87e

10 years agoMake calling term_nopaste() a cross-platform feature.
Simon Tatham [Sat, 17 Aug 2013 16:06:40 +0000 (16:06 +0000)]
Make calling term_nopaste() a cross-platform feature.

It was one of those things that went in ages ago on Windows and never
got replicated in the Unix front end. And it needn't be: ldisc.c is a
perfect place to put it, since it knows which of the data it's sending
is based on a keystroke and which is automatically generated, and it
also has access to the terminal context. So now a keypress can
interrupt a runaway paste on all platforms.

git-svn-id: http://svn.tartarus.org/sgt/putty@10025 cda61777-01e9-0310-a592-d414129be87e

10 years agoRevamp Windows pending_netevent using toplevel callbacks.
Simon Tatham [Sat, 17 Aug 2013 16:06:35 +0000 (16:06 +0000)]
Revamp Windows pending_netevent using toplevel callbacks.

This greatly simplifies the process of calling select_result() from
the top level after receiving WM_NETEVENT.

git-svn-id: http://svn.tartarus.org/sgt/putty@10024 cda61777-01e9-0310-a592-d414129be87e

10 years agoRevamp net_pending_errors using toplevel callbacks.
Simon Tatham [Sat, 17 Aug 2013 16:06:27 +0000 (16:06 +0000)]
Revamp net_pending_errors using toplevel callbacks.

Again, I've removed the special-purpose ad-hockery from the assorted
front end message loops that dealt with deferred handling of socket
errors, and instead uxnet.c and winnet.c arrange that for themselves
by calling the new general top-level callback mechanism.

git-svn-id: http://svn.tartarus.org/sgt/putty@10023 cda61777-01e9-0310-a592-d414129be87e

10 years agoRevamp GTK's session close handling using toplevel callbacks.
Simon Tatham [Sat, 17 Aug 2013 16:06:22 +0000 (16:06 +0000)]
Revamp GTK's session close handling using toplevel callbacks.

Instead of having a special GTK idle function for dealing with session
closing, I now use the new top-level callback mechanism which is
slightly simpler for calling a one-off function.

Also in this commit, I've arranged for connection_fatal to queue a
call to the same session close function after displaying the message
box, with the effect that now all the same processing takes place no
matter whether the session closes cleanly or uncleanly - e.g. the SSH
specials submenu is cleaned out, as it should be.

git-svn-id: http://svn.tartarus.org/sgt/putty@10022 cda61777-01e9-0310-a592-d414129be87e

10 years agoRevamp Windows's close_session() using toplevel callbacks.
Simon Tatham [Sat, 17 Aug 2013 16:06:18 +0000 (16:06 +0000)]
Revamp Windows's close_session() using toplevel callbacks.

Instead of setting a must_close_session flag and having special code
in the message loop to check it, we'll schedule the call to
close_session using the new top-level callback system.

git-svn-id: http://svn.tartarus.org/sgt/putty@10021 cda61777-01e9-0310-a592-d414129be87e

10 years agoRevamp the terminal paste mechanism using toplevel callbacks.
Simon Tatham [Sat, 17 Aug 2013 16:06:12 +0000 (16:06 +0000)]
Revamp the terminal paste mechanism using toplevel callbacks.

I've removed the ad-hoc front-end bodgery in the Windows and GTK ports
to arrange for term_paste to be called at the right moments, and
instead, terminal.c itself deals with knowing when to send the next
chunk of pasted data using a combination of timers and the new
top-level callback mechanism.

As a happy side effect, it's now all in one place so I can actually
understand what it's doing! It turns out that what all that confusing
code was up to is: send a line of pasted data, and delay sending the
next line until either a CR or LF is returned from the server
(typically indicating that the pasted text has been received and
echoed) or 450ms elapse, whichever comes first.

git-svn-id: http://svn.tartarus.org/sgt/putty@10020 cda61777-01e9-0310-a592-d414129be87e

10 years agoAdd a general way to request an immediate top-level callback.
Simon Tatham [Sat, 17 Aug 2013 16:06:08 +0000 (16:06 +0000)]
Add a general way to request an immediate top-level callback.

This is a little like schedule_timer, in that the callback you provide
will be run from the top-level message loop of whatever application
you're in; but unlike the timer mechanism, it will happen
_immediately_.

The aim is to provide a general way to avoid re-entrance of code, in
cases where just _doing_ the thing you want done is liable to trigger
a confusing recursive call to the function in which you came to the
decision to do it; instead, you just request a top-level callback at
the message loop's earliest convenience, and do it then.

git-svn-id: http://svn.tartarus.org/sgt/putty@10019 cda61777-01e9-0310-a592-d414129be87e

10 years agoSebastian Kuschel reports that pfd_closing can be called for a socket
Simon Tatham [Thu, 15 Aug 2013 06:42:36 +0000 (06:42 +0000)]
Sebastian Kuschel reports that pfd_closing can be called for a socket
error with pr->c NULL, in which case calling sshfwd_unclean_close on
it will dereference NULL and segfault. Write an alternative error
handling path for that possibility.

(I don't know if it's the only way, but one way this can happen is if
you're doing dynamic forwarding and the socket error occurs during
SOCKS negotiation, in which case no SSH channel has been set up yet
because we haven't yet found out what we want to put in the
direct-tcpip channel open message.)

git-svn-id: http://svn.tartarus.org/sgt/putty@10018 cda61777-01e9-0310-a592-d414129be87e

10 years agoIt turns out I was a little over-strict in my handling of EOF in
Simon Tatham [Tue, 13 Aug 2013 06:46:51 +0000 (06:46 +0000)]
It turns out I was a little over-strict in my handling of EOF in
pscp.c when I did the big revamp in r9279: I assumed that in any SCP
connection we would be the first to send EOF, but in fact this isn't
true - doing downloads with old-SCP, EOF is initiated by the server,
so we were spuriously reporting an error for 'unexpected' EOF when
everything had gone fine. Thanks to Nathan Phelan for the report.

git-svn-id: http://svn.tartarus.org/sgt/putty@10016 cda61777-01e9-0310-a592-d414129be87e

10 years agosbcsgen.pl uses 'select' to point Perl at a different default output
Simon Tatham [Thu, 8 Aug 2013 17:22:07 +0000 (17:22 +0000)]
sbcsgen.pl uses 'select' to point Perl at a different default output
handle. Revert that when we hackily call it from mkfiles.pl, so that
if I have a need to insert diagnostics in the latter they won't go
into the end of sbcsdat.c.

git-svn-id: http://svn.tartarus.org/sgt/putty@10013 cda61777-01e9-0310-a592-d414129be87e

10 years agoRevert the default for font bolding style back to using colours rather
Simon Tatham [Wed, 7 Aug 2013 06:22:52 +0000 (06:22 +0000)]
Revert the default for font bolding style back to using colours rather
than fonts. I broke this in r9559 when I added the option for 'both',
because the internal representation got offset by one so as to change
from a boolean to two bitfields and I must have confused myself about
what the default should be.

git-svn-id: http://svn.tartarus.org/sgt/putty@10008 cda61777-01e9-0310-a592-d414129be87e

10 years agoBump version number prior to tagging 0.63.
Simon Tatham [Tue, 6 Aug 2013 17:09:07 +0000 (17:09 +0000)]
Bump version number prior to tagging 0.63.

git-svn-id: http://svn.tartarus.org/sgt/putty@9998 cda61777-01e9-0310-a592-d414129be87e

10 years agoOne more defensive assert, just to be sure.
Simon Tatham [Tue, 6 Aug 2013 16:45:49 +0000 (16:45 +0000)]
One more defensive assert, just to be sure.

git-svn-id: http://svn.tartarus.org/sgt/putty@9997 cda61777-01e9-0310-a592-d414129be87e

10 years agoThe bignum code has two representations of zero, since
Simon Tatham [Mon, 5 Aug 2013 19:50:51 +0000 (19:50 +0000)]
The bignum code has two representations of zero, since
bn_restore_invariant (and the many loops that duplicate it) leaves a
single zero word in a bignum representing 0, whereas the constant
'Zero' does not have any data words at all. Cope with this in
bignum_cmp.

(It would be a better plan to decide on one representation and stick
with it, but this is the less disruptive fix for the moment.)

git-svn-id: http://svn.tartarus.org/sgt/putty@9996 cda61777-01e9-0310-a592-d414129be87e

10 years agoAdd some more precautionary assertions, just in case anything wildly
Simon Tatham [Mon, 5 Aug 2013 19:50:47 +0000 (19:50 +0000)]
Add some more precautionary assertions, just in case anything wildly
out of range manages to get past other recent fixes.

git-svn-id: http://svn.tartarus.org/sgt/putty@9995 cda61777-01e9-0310-a592-d414129be87e

10 years agoBelatedly update the copyright year to 2013.
Jacob Nevins [Mon, 5 Aug 2013 15:15:17 +0000 (15:15 +0000)]
Belatedly update the copyright year to 2013.

git-svn-id: http://svn.tartarus.org/sgt/putty@9993 cda61777-01e9-0310-a592-d414129be87e

10 years agoFix memory leaks in the new error return from modinv.
Simon Tatham [Sun, 4 Aug 2013 22:33:50 +0000 (22:33 +0000)]
Fix memory leaks in the new error return from modinv.

git-svn-id: http://svn.tartarus.org/sgt/putty@9992 cda61777-01e9-0310-a592-d414129be87e

10 years agoSpot when we didn't successfully create an RSA public key from a
Simon Tatham [Sun, 4 Aug 2013 19:34:10 +0000 (19:34 +0000)]
Spot when we didn't successfully create an RSA public key from a
public blob, and return a proper error in that situation rather than a
struct with unhelpful NULLs in.

git-svn-id: http://svn.tartarus.org/sgt/putty@9991 cda61777-01e9-0310-a592-d414129be87e

10 years agoMake modinv able to return NULL if its inputs are not coprime, and
Simon Tatham [Sun, 4 Aug 2013 19:34:07 +0000 (19:34 +0000)]
Make modinv able to return NULL if its inputs are not coprime, and
check for that return value everywhere it is used.

git-svn-id: http://svn.tartarus.org/sgt/putty@9990 cda61777-01e9-0310-a592-d414129be87e

10 years agoAvoid trying to take the modular inverse of zero in response to a
Simon Tatham [Sun, 4 Aug 2013 19:34:00 +0000 (19:34 +0000)]
Avoid trying to take the modular inverse of zero in response to a
sufficiently silly DSA signature.

git-svn-id: http://svn.tartarus.org/sgt/putty@9989 cda61777-01e9-0310-a592-d414129be87e

10 years agoAnother couple of memory leaks.
Simon Tatham [Sun, 4 Aug 2013 19:33:57 +0000 (19:33 +0000)]
Another couple of memory leaks.

git-svn-id: http://svn.tartarus.org/sgt/putty@9988 cda61777-01e9-0310-a592-d414129be87e

10 years agoMore consistently defend against division by zero with assertions. We
Simon Tatham [Sun, 4 Aug 2013 19:33:53 +0000 (19:33 +0000)]
More consistently defend against division by zero with assertions. We
now check that all the modular functions (modpow, modinv, modmul,
bigdivmod) have nonzero moduli, and that modinv also has a nonzero
thing to try to invert.

git-svn-id: http://svn.tartarus.org/sgt/putty@9987 cda61777-01e9-0310-a592-d414129be87e

10 years agoValidate newly created DSA keys more carefully. Don't want a structure
Simon Tatham [Sun, 4 Aug 2013 19:33:49 +0000 (19:33 +0000)]
Validate newly created DSA keys more carefully. Don't want a structure
half-filled with null pointers.

git-svn-id: http://svn.tartarus.org/sgt/putty@9986 cda61777-01e9-0310-a592-d414129be87e

10 years agoRemove some redundant null-pointer checks from code that must have
Simon Tatham [Sun, 4 Aug 2013 19:33:46 +0000 (19:33 +0000)]
Remove some redundant null-pointer checks from code that must have
been written before I wrote a never-failing snew.

git-svn-id: http://svn.tartarus.org/sgt/putty@9985 cda61777-01e9-0310-a592-d414129be87e

10 years agoSanitise freeing of DSA keys.
Simon Tatham [Sun, 4 Aug 2013 19:33:43 +0000 (19:33 +0000)]
Sanitise freeing of DSA keys.

git-svn-id: http://svn.tartarus.org/sgt/putty@9984 cda61777-01e9-0310-a592-d414129be87e

10 years agoReinstate a piece of code accidentally removed in r9214, where Windows
Simon Tatham [Sun, 4 Aug 2013 19:32:10 +0000 (19:32 +0000)]
Reinstate a piece of code accidentally removed in r9214, where Windows
PuTTY does not trim a colon suffix off the hostname if it contains
_more than one_ colon. This allows IPv6 literals to be entered.

(Really we need to do a much bigger revamp of all uses of hostnames to
arrange that square-bracketed IPv6 literals work consistently, but
this at least removes a regression over 0.62.)

git-svn-id: http://svn.tartarus.org/sgt/putty@9983 cda61777-01e9-0310-a592-d414129be87e

10 years agoRaise the default scrollback from 200 to 2000 lines. The former was
Simon Tatham [Fri, 2 Aug 2013 22:33:40 +0000 (22:33 +0000)]
Raise the default scrollback from 200 to 2000 lines. The former was
not so silly in the 1990s and before I implemented scrollback
compression, but it's been a ridiculously low default for a while now.

git-svn-id: http://svn.tartarus.org/sgt/putty@9982 cda61777-01e9-0310-a592-d414129be87e

10 years agoFound a lot of places in sshbn.c where for-loops zeroing out memory
Simon Tatham [Fri, 2 Aug 2013 19:51:36 +0000 (19:51 +0000)]
Found a lot of places in sshbn.c where for-loops zeroing out memory
just before freeing it really ought to be smemclrs.

git-svn-id: http://svn.tartarus.org/sgt/putty@9981 cda61777-01e9-0310-a592-d414129be87e

10 years agoVerify RSA keys created by rsa2_openssh_createkey.
Simon Tatham [Fri, 2 Aug 2013 06:28:05 +0000 (06:28 +0000)]
Verify RSA keys created by rsa2_openssh_createkey.

git-svn-id: http://svn.tartarus.org/sgt/putty@9980 cda61777-01e9-0310-a592-d414129be87e

10 years agoReplace some 'sfree' calls of bignums with the proper 'freebn'.
Simon Tatham [Fri, 2 Aug 2013 06:28:00 +0000 (06:28 +0000)]
Replace some 'sfree' calls of bignums with the proper 'freebn'.

git-svn-id: http://svn.tartarus.org/sgt/putty@9979 cda61777-01e9-0310-a592-d414129be87e