Fix bug in which the SSH-only tools (pscp, psftp) did not honour a
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Wed, 27 Jul 2011 18:43:16 +0000 (18:43 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Wed, 27 Jul 2011 18:43:16 +0000 (18:43 +0000)
nonstandard port number when loading a saved session.

Occurs because those tools include be_none.c which defines no entries
in backends[] at all, as a result of which settings.c doesn't
recognise the word 'ssh' in the saved session's protocol field and
instead sets the protocol to something idiotic - which _then_ means
that when pscp.c forces the protocol to PROT_SSH, it also resets the
port number as it would when overriding a saved session specifying a
protocol other than SSH.

The immediate solution is to define a new be_ssh.c citing only
ssh_backend, and include that in the SSH-only tools. However, I wonder
if a better approach (perhaps when I redesign session loading and
saving) would be not to be so clever, and just have all the tools
contain a complete list of known protocol names for purposes of
understanding what's in the saved session data, and complain if you
try to use one they don't know how to actually speak.

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

Recipe
be_none.c
be_ssh.c [new file with mode: 0644]

diff --git a/Recipe b/Recipe
index 454fe32..77f3be0 100644 (file)
--- a/Recipe
+++ b/Recipe
@@ -317,7 +317,7 @@ LIBS     = advapi32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib
 # to proxy.c depending on whether we're crypto-avoidant or not.
 BE_ALL   = be_all cproxy
 BE_NOSSH = be_nossh nocproxy
-BE_SSH   = be_none cproxy
+BE_SSH   = be_ssh cproxy
 BE_NONE  = be_none nocproxy
 # More backend sets, with the additional Windows serial-port module.
 W_BE_ALL = be_all_s winser cproxy
index 6ec037a..688b8da 100644 (file)
--- a/be_none.c
+++ b/be_none.c
@@ -1,6 +1,6 @@
 /*
  * Linking module for programs that do not support selection of backend
- * (such as pscp or pterm).
+ * (such as pterm).
  */
 
 #include <stdio.h>
diff --git a/be_ssh.c b/be_ssh.c
new file mode 100644 (file)
index 0000000..57d241c
--- /dev/null
+++ b/be_ssh.c
@@ -0,0 +1,16 @@
+/*
+ * Linking module for programs that are restricted to only using SSH
+ * (pscp and psftp). These do not support selection of backend, but
+ * must still have a backends[] array mentioning SSH because
+ * settings.c will want to consult it during session load.
+ */
+
+#include <stdio.h>
+#include "putty.h"
+
+const int be_default_protocol = PROT_SSH;
+
+Backend *backends[] = {
+    &ssh_backend,
+    NULL
+};