Unverified Commit a2f39668 authored by Nikos Mavrogiannopoulos's avatar Nikos Mavrogiannopoulos Committed by Daniel Stenberg
Browse files

libssh: added SFTP support



The SFTP back-end supports asynchronous reading only, limited
to 32-bit file length. Writing is synchronous with no other
limitations.

This also brings keyboard-interactive authentication.

Signed-off-by: default avatarNikos Mavrogiannopoulos <nmav@gnutls.org>
parent c75c9d4f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -4091,6 +4091,7 @@ if test "x$USE_LIBSSH2" = "x1"; then
fi
if test "x$USE_LIBSSH" = "x1"; then
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP"
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP"
fi
if test "x$CURL_DISABLE_RTSP" != "x1"; then
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTSP"
+1564 −51

File changed.

Preview size limit exceeded, changes collapsed.

+19 −2
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@
#include <libssh2_sftp.h>
#elif defined(HAVE_LIBSSH_LIBSSH_H)
#include <libssh/libssh.h>
#include <libssh/sftp.h>
#endif /* HAVE_LIBSSH2_H */

/****************************************************************************
@@ -130,8 +131,6 @@ struct ssh_conn {
                                 quote command fails) */
  char *homedir;              /* when doing SFTP we figure out home dir in the
                                 connect phase */
  char *readdir_filename;
  char *readdir_longentry;
  int readdir_len, readdir_totalLen, readdir_currLen;
  char *readdir_line;
  char *readdir_linkPath;
@@ -146,12 +145,29 @@ struct ssh_conn {

#if defined(USE_LIBSSH)
/* our variables */
  unsigned kbd_state; /* 0 or 1 */
  ssh_key privkey;
  ssh_key pubkey;
  int auth_methods;
  ssh_session ssh_session;
  ssh_scp scp_session;
  sftp_session sftp_session;
  sftp_file sftp_file;
  sftp_dir sftp_dir;

  unsigned sftp_recv_state; /* 0 or 1 */
  int sftp_file_index; /* for async read */
  sftp_attributes readdir_attrs; /* used by the SFTP readdir actions */
  sftp_attributes readdir_link_attrs; /* used by the SFTP readdir actions */
  sftp_attributes quote_attrs; /* used by the SFTP_QUOTE state */

  const char *readdir_filename; /* points within readdir_attrs */
  const char *readdir_longentry;
  char *readdir_tmp;
#elif defined(USE_LIBSSH2)
  char *readdir_filename;
  char *readdir_longentry;

  LIBSSH2_SFTP_ATTRIBUTES quote_attrs; /* used by the SFTP_QUOTE state */

  /* Here's a set of struct members used by the SFTP_READDIR state */
@@ -180,6 +196,7 @@ struct ssh_conn {
#define CURL_LIBSSH_VERSION ssh_version(0)

extern const struct Curl_handler Curl_handler_scp;
extern const struct Curl_handler Curl_handler_sftp;

#elif defined(USE_LIBSSH2)

+1 −1
Original line number Diff line number Diff line
@@ -200,7 +200,7 @@ static const struct Curl_handler * const protocols[] = {
  &Curl_handler_scp,
#endif

#if defined(USE_LIBSSH2)
#if defined(USE_LIBSSH2) || defined(USE_LIBSSH)
  &Curl_handler_sftp,
#endif

+0 −2
Original line number Diff line number Diff line
@@ -272,8 +272,6 @@ static const char * const protocols[] = {
#endif
#if defined(USE_LIBSSH) || defined(USE_LIBSSH2)
  "scp",
#endif
#ifdef USE_LIBSSH2
  "sftp",
#endif
#if !defined(CURL_DISABLE_SMB) && defined(USE_NTLM) && \