Better yet, look for sftp-server on the user's PATH as well, which
[u/mdw/putty] / psftp.c
diff --git a/psftp.c b/psftp.c
index 3a50c25..49e6749 100644 (file)
--- a/psftp.c
+++ b/psftp.c
@@ -1513,26 +1513,23 @@ int main(int argc, char *argv[])
      * Set up fallback option, for SSH1 servers or servers with the
      * sftp subsystem not enabled but the server binary installed
      * in the usual place. We only support fallback on Unix
-     * systems, and we use the kludgy command string
+     * systems, and we use a kludgy piece of shellery which should
+     * try to find sftp-server in various places (the obvious
+     * systemwide spots /usr/lib and /usr/local/lib, and then the
+     * user's PATH) and finally give up.
      * 
-     *   if test ! -x /usr/lib/sftp-server -a -x /usr/local/lib/sftp-server
-     *   then
-     *     exec /usr/local/lib/sftp-server
-     *   else
-     *     exec /usr/lib/sftp-server
-     *   fi
+     *   test -x /usr/lib/sftp-server && exec /usr/lib/sftp-server
+     *   test -x /usr/local/lib/sftp-server && exec /usr/local/lib/sftp-server
+     *   exec sftp-server
      * 
      * the idea being that this will attempt to use either of the
      * obvious pathnames and then give up, and when it does give up
      * it will print the preferred pathname in the error messages.
      */
     cfg.remote_cmd_ptr2 =
-       "if test ! -x /usr/lib/sftp-server -a -x /usr/local/lib/sftp-server\n"
-       "then\n"
-       "  exec /usr/local/lib/sftp-server\n"
-       "else\n"
-       "  exec /usr/lib/sftp-server\n"
-       "fi";
+       "test -x /usr/lib/sftp-server && exec /usr/lib/sftp-server\n"
+       "test -x /usr/local/lib/sftp-server && exec /usr/local/lib/sftp-server\n"
+       "exec sftp-server";
     cfg.ssh_subsys2 = FALSE;
 
     back = &ssh_backend;