1*6236dae4SAndroid Build Coastguard Worker #ifndef HEADER_CURL_SSH_H 2*6236dae4SAndroid Build Coastguard Worker #define HEADER_CURL_SSH_H 3*6236dae4SAndroid Build Coastguard Worker /*************************************************************************** 4*6236dae4SAndroid Build Coastguard Worker * _ _ ____ _ 5*6236dae4SAndroid Build Coastguard Worker * Project ___| | | | _ \| | 6*6236dae4SAndroid Build Coastguard Worker * / __| | | | |_) | | 7*6236dae4SAndroid Build Coastguard Worker * | (__| |_| | _ <| |___ 8*6236dae4SAndroid Build Coastguard Worker * \___|\___/|_| \_\_____| 9*6236dae4SAndroid Build Coastguard Worker * 10*6236dae4SAndroid Build Coastguard Worker * Copyright (C) Daniel Stenberg, <[email protected]>, et al. 11*6236dae4SAndroid Build Coastguard Worker * 12*6236dae4SAndroid Build Coastguard Worker * This software is licensed as described in the file COPYING, which 13*6236dae4SAndroid Build Coastguard Worker * you should have received as part of this distribution. The terms 14*6236dae4SAndroid Build Coastguard Worker * are also available at https://curl.se/docs/copyright.html. 15*6236dae4SAndroid Build Coastguard Worker * 16*6236dae4SAndroid Build Coastguard Worker * You may opt to use, copy, modify, merge, publish, distribute and/or sell 17*6236dae4SAndroid Build Coastguard Worker * copies of the Software, and permit persons to whom the Software is 18*6236dae4SAndroid Build Coastguard Worker * furnished to do so, under the terms of the COPYING file. 19*6236dae4SAndroid Build Coastguard Worker * 20*6236dae4SAndroid Build Coastguard Worker * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 21*6236dae4SAndroid Build Coastguard Worker * KIND, either express or implied. 22*6236dae4SAndroid Build Coastguard Worker * 23*6236dae4SAndroid Build Coastguard Worker * SPDX-License-Identifier: curl 24*6236dae4SAndroid Build Coastguard Worker * 25*6236dae4SAndroid Build Coastguard Worker ***************************************************************************/ 26*6236dae4SAndroid Build Coastguard Worker 27*6236dae4SAndroid Build Coastguard Worker #include "curl_setup.h" 28*6236dae4SAndroid Build Coastguard Worker 29*6236dae4SAndroid Build Coastguard Worker #if defined(USE_LIBSSH2) 30*6236dae4SAndroid Build Coastguard Worker #include <libssh2.h> 31*6236dae4SAndroid Build Coastguard Worker #include <libssh2_sftp.h> 32*6236dae4SAndroid Build Coastguard Worker #elif defined(USE_LIBSSH) 33*6236dae4SAndroid Build Coastguard Worker /* in 0.10.0 or later, ignore deprecated warnings */ 34*6236dae4SAndroid Build Coastguard Worker #define SSH_SUPPRESS_DEPRECATED 35*6236dae4SAndroid Build Coastguard Worker #include <libssh/libssh.h> 36*6236dae4SAndroid Build Coastguard Worker #include <libssh/sftp.h> 37*6236dae4SAndroid Build Coastguard Worker #elif defined(USE_WOLFSSH) 38*6236dae4SAndroid Build Coastguard Worker #include <wolfssh/ssh.h> 39*6236dae4SAndroid Build Coastguard Worker #include <wolfssh/wolfsftp.h> 40*6236dae4SAndroid Build Coastguard Worker #endif 41*6236dae4SAndroid Build Coastguard Worker 42*6236dae4SAndroid Build Coastguard Worker #include "curl_path.h" 43*6236dae4SAndroid Build Coastguard Worker 44*6236dae4SAndroid Build Coastguard Worker /**************************************************************************** 45*6236dae4SAndroid Build Coastguard Worker * SSH unique setup 46*6236dae4SAndroid Build Coastguard Worker ***************************************************************************/ 47*6236dae4SAndroid Build Coastguard Worker typedef enum { 48*6236dae4SAndroid Build Coastguard Worker SSH_NO_STATE = -1, /* Used for "nextState" so say there is none */ 49*6236dae4SAndroid Build Coastguard Worker SSH_STOP = 0, /* do nothing state, stops the state machine */ 50*6236dae4SAndroid Build Coastguard Worker 51*6236dae4SAndroid Build Coastguard Worker SSH_INIT, /* First state in SSH-CONNECT */ 52*6236dae4SAndroid Build Coastguard Worker SSH_S_STARTUP, /* Session startup */ 53*6236dae4SAndroid Build Coastguard Worker SSH_HOSTKEY, /* verify hostkey */ 54*6236dae4SAndroid Build Coastguard Worker SSH_AUTHLIST, 55*6236dae4SAndroid Build Coastguard Worker SSH_AUTH_PKEY_INIT, 56*6236dae4SAndroid Build Coastguard Worker SSH_AUTH_PKEY, 57*6236dae4SAndroid Build Coastguard Worker SSH_AUTH_PASS_INIT, 58*6236dae4SAndroid Build Coastguard Worker SSH_AUTH_PASS, 59*6236dae4SAndroid Build Coastguard Worker SSH_AUTH_AGENT_INIT, /* initialize then wait for connection to agent */ 60*6236dae4SAndroid Build Coastguard Worker SSH_AUTH_AGENT_LIST, /* ask for list then wait for entire list to come */ 61*6236dae4SAndroid Build Coastguard Worker SSH_AUTH_AGENT, /* attempt one key at a time */ 62*6236dae4SAndroid Build Coastguard Worker SSH_AUTH_HOST_INIT, 63*6236dae4SAndroid Build Coastguard Worker SSH_AUTH_HOST, 64*6236dae4SAndroid Build Coastguard Worker SSH_AUTH_KEY_INIT, 65*6236dae4SAndroid Build Coastguard Worker SSH_AUTH_KEY, 66*6236dae4SAndroid Build Coastguard Worker SSH_AUTH_GSSAPI, 67*6236dae4SAndroid Build Coastguard Worker SSH_AUTH_DONE, 68*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_INIT, 69*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_REALPATH, /* Last state in SSH-CONNECT */ 70*6236dae4SAndroid Build Coastguard Worker 71*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_QUOTE_INIT, /* First state in SFTP-DO */ 72*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_POSTQUOTE_INIT, /* (Possibly) First state in SFTP-DONE */ 73*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_QUOTE, 74*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_NEXT_QUOTE, 75*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_QUOTE_STAT, 76*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_QUOTE_SETSTAT, 77*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_QUOTE_SYMLINK, 78*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_QUOTE_MKDIR, 79*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_QUOTE_RENAME, 80*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_QUOTE_RMDIR, 81*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_QUOTE_UNLINK, 82*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_QUOTE_STATVFS, 83*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_GETINFO, 84*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_FILETIME, 85*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_TRANS_INIT, 86*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_UPLOAD_INIT, 87*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_CREATE_DIRS_INIT, 88*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_CREATE_DIRS, 89*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_CREATE_DIRS_MKDIR, 90*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_READDIR_INIT, 91*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_READDIR, 92*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_READDIR_LINK, 93*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_READDIR_BOTTOM, 94*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_READDIR_DONE, 95*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_DOWNLOAD_INIT, 96*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_DOWNLOAD_STAT, /* Last state in SFTP-DO */ 97*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_CLOSE, /* Last state in SFTP-DONE */ 98*6236dae4SAndroid Build Coastguard Worker SSH_SFTP_SHUTDOWN, /* First state in SFTP-DISCONNECT */ 99*6236dae4SAndroid Build Coastguard Worker SSH_SCP_TRANS_INIT, /* First state in SCP-DO */ 100*6236dae4SAndroid Build Coastguard Worker SSH_SCP_UPLOAD_INIT, 101*6236dae4SAndroid Build Coastguard Worker SSH_SCP_DOWNLOAD_INIT, 102*6236dae4SAndroid Build Coastguard Worker SSH_SCP_DOWNLOAD, 103*6236dae4SAndroid Build Coastguard Worker SSH_SCP_DONE, 104*6236dae4SAndroid Build Coastguard Worker SSH_SCP_SEND_EOF, 105*6236dae4SAndroid Build Coastguard Worker SSH_SCP_WAIT_EOF, 106*6236dae4SAndroid Build Coastguard Worker SSH_SCP_WAIT_CLOSE, 107*6236dae4SAndroid Build Coastguard Worker SSH_SCP_CHANNEL_FREE, /* Last state in SCP-DONE */ 108*6236dae4SAndroid Build Coastguard Worker SSH_SESSION_DISCONNECT, /* First state in SCP-DISCONNECT */ 109*6236dae4SAndroid Build Coastguard Worker SSH_SESSION_FREE, /* Last state in SCP/SFTP-DISCONNECT */ 110*6236dae4SAndroid Build Coastguard Worker SSH_QUIT, 111*6236dae4SAndroid Build Coastguard Worker SSH_LAST /* never used */ 112*6236dae4SAndroid Build Coastguard Worker } sshstate; 113*6236dae4SAndroid Build Coastguard Worker 114*6236dae4SAndroid Build Coastguard Worker #define CURL_PATH_MAX 1024 115*6236dae4SAndroid Build Coastguard Worker 116*6236dae4SAndroid Build Coastguard Worker /* this struct is used in the HandleData struct which is part of the 117*6236dae4SAndroid Build Coastguard Worker Curl_easy, which means this is used on a per-easy handle basis. 118*6236dae4SAndroid Build Coastguard Worker Everything that is strictly related to a connection is banned from this 119*6236dae4SAndroid Build Coastguard Worker struct. */ 120*6236dae4SAndroid Build Coastguard Worker struct SSHPROTO { 121*6236dae4SAndroid Build Coastguard Worker char *path; /* the path we operate on */ 122*6236dae4SAndroid Build Coastguard Worker #ifdef USE_LIBSSH2 123*6236dae4SAndroid Build Coastguard Worker struct dynbuf readdir_link; 124*6236dae4SAndroid Build Coastguard Worker struct dynbuf readdir; 125*6236dae4SAndroid Build Coastguard Worker char readdir_filename[CURL_PATH_MAX + 1]; 126*6236dae4SAndroid Build Coastguard Worker char readdir_longentry[CURL_PATH_MAX + 1]; 127*6236dae4SAndroid Build Coastguard Worker 128*6236dae4SAndroid Build Coastguard Worker LIBSSH2_SFTP_ATTRIBUTES quote_attrs; /* used by the SFTP_QUOTE state */ 129*6236dae4SAndroid Build Coastguard Worker 130*6236dae4SAndroid Build Coastguard Worker /* Here's a set of struct members used by the SFTP_READDIR state */ 131*6236dae4SAndroid Build Coastguard Worker LIBSSH2_SFTP_ATTRIBUTES readdir_attrs; 132*6236dae4SAndroid Build Coastguard Worker #endif 133*6236dae4SAndroid Build Coastguard Worker }; 134*6236dae4SAndroid Build Coastguard Worker 135*6236dae4SAndroid Build Coastguard Worker /* ssh_conn is used for struct connection-oriented data in the connectdata 136*6236dae4SAndroid Build Coastguard Worker struct */ 137*6236dae4SAndroid Build Coastguard Worker struct ssh_conn { 138*6236dae4SAndroid Build Coastguard Worker const char *authlist; /* List of auth. methods, managed by libssh2 */ 139*6236dae4SAndroid Build Coastguard Worker 140*6236dae4SAndroid Build Coastguard Worker /* common */ 141*6236dae4SAndroid Build Coastguard Worker const char *passphrase; /* pass-phrase to use */ 142*6236dae4SAndroid Build Coastguard Worker char *rsa_pub; /* strdup'ed public key file */ 143*6236dae4SAndroid Build Coastguard Worker char *rsa; /* strdup'ed private key file */ 144*6236dae4SAndroid Build Coastguard Worker bool authed; /* the connection has been authenticated fine */ 145*6236dae4SAndroid Build Coastguard Worker bool acceptfail; /* used by the SFTP_QUOTE (continue if 146*6236dae4SAndroid Build Coastguard Worker quote command fails) */ 147*6236dae4SAndroid Build Coastguard Worker sshstate state; /* always use ssh.c:state() to change state! */ 148*6236dae4SAndroid Build Coastguard Worker sshstate nextstate; /* the state to goto after stopping */ 149*6236dae4SAndroid Build Coastguard Worker CURLcode actualcode; /* the actual error code */ 150*6236dae4SAndroid Build Coastguard Worker struct curl_slist *quote_item; /* for the quote option */ 151*6236dae4SAndroid Build Coastguard Worker char *quote_path1; /* two generic pointers for the QUOTE stuff */ 152*6236dae4SAndroid Build Coastguard Worker char *quote_path2; 153*6236dae4SAndroid Build Coastguard Worker 154*6236dae4SAndroid Build Coastguard Worker char *homedir; /* when doing SFTP we figure out home dir in the 155*6236dae4SAndroid Build Coastguard Worker connect phase */ 156*6236dae4SAndroid Build Coastguard Worker /* end of READDIR stuff */ 157*6236dae4SAndroid Build Coastguard Worker 158*6236dae4SAndroid Build Coastguard Worker int secondCreateDirs; /* counter use by the code to see if the 159*6236dae4SAndroid Build Coastguard Worker second attempt has been made to change 160*6236dae4SAndroid Build Coastguard Worker to/create a directory */ 161*6236dae4SAndroid Build Coastguard Worker int orig_waitfor; /* default READ/WRITE bits wait for */ 162*6236dae4SAndroid Build Coastguard Worker char *slash_pos; /* used by the SFTP_CREATE_DIRS state */ 163*6236dae4SAndroid Build Coastguard Worker 164*6236dae4SAndroid Build Coastguard Worker #if defined(USE_LIBSSH) 165*6236dae4SAndroid Build Coastguard Worker char *readdir_linkPath; 166*6236dae4SAndroid Build Coastguard Worker size_t readdir_len; 167*6236dae4SAndroid Build Coastguard Worker struct dynbuf readdir_buf; 168*6236dae4SAndroid Build Coastguard Worker /* our variables */ 169*6236dae4SAndroid Build Coastguard Worker unsigned kbd_state; /* 0 or 1 */ 170*6236dae4SAndroid Build Coastguard Worker ssh_key privkey; 171*6236dae4SAndroid Build Coastguard Worker ssh_key pubkey; 172*6236dae4SAndroid Build Coastguard Worker unsigned int auth_methods; 173*6236dae4SAndroid Build Coastguard Worker ssh_session ssh_session; 174*6236dae4SAndroid Build Coastguard Worker ssh_scp scp_session; 175*6236dae4SAndroid Build Coastguard Worker sftp_session sftp_session; 176*6236dae4SAndroid Build Coastguard Worker sftp_file sftp_file; 177*6236dae4SAndroid Build Coastguard Worker sftp_dir sftp_dir; 178*6236dae4SAndroid Build Coastguard Worker 179*6236dae4SAndroid Build Coastguard Worker unsigned sftp_recv_state; /* 0 or 1 */ 180*6236dae4SAndroid Build Coastguard Worker int sftp_file_index; /* for async read */ 181*6236dae4SAndroid Build Coastguard Worker sftp_attributes readdir_attrs; /* used by the SFTP readdir actions */ 182*6236dae4SAndroid Build Coastguard Worker sftp_attributes readdir_link_attrs; /* used by the SFTP readdir actions */ 183*6236dae4SAndroid Build Coastguard Worker sftp_attributes quote_attrs; /* used by the SFTP_QUOTE state */ 184*6236dae4SAndroid Build Coastguard Worker 185*6236dae4SAndroid Build Coastguard Worker const char *readdir_filename; /* points within readdir_attrs */ 186*6236dae4SAndroid Build Coastguard Worker const char *readdir_longentry; 187*6236dae4SAndroid Build Coastguard Worker char *readdir_tmp; 188*6236dae4SAndroid Build Coastguard Worker #elif defined(USE_LIBSSH2) 189*6236dae4SAndroid Build Coastguard Worker LIBSSH2_SESSION *ssh_session; /* Secure Shell session */ 190*6236dae4SAndroid Build Coastguard Worker LIBSSH2_CHANNEL *ssh_channel; /* Secure Shell channel handle */ 191*6236dae4SAndroid Build Coastguard Worker LIBSSH2_SFTP *sftp_session; /* SFTP handle */ 192*6236dae4SAndroid Build Coastguard Worker LIBSSH2_SFTP_HANDLE *sftp_handle; 193*6236dae4SAndroid Build Coastguard Worker 194*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY 195*6236dae4SAndroid Build Coastguard Worker /* for HTTPS proxy storage */ 196*6236dae4SAndroid Build Coastguard Worker Curl_recv *tls_recv; 197*6236dae4SAndroid Build Coastguard Worker Curl_send *tls_send; 198*6236dae4SAndroid Build Coastguard Worker #endif 199*6236dae4SAndroid Build Coastguard Worker 200*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_LIBSSH2_AGENT_API 201*6236dae4SAndroid Build Coastguard Worker LIBSSH2_AGENT *ssh_agent; /* proxy to ssh-agent/pageant */ 202*6236dae4SAndroid Build Coastguard Worker struct libssh2_agent_publickey *sshagent_identity, 203*6236dae4SAndroid Build Coastguard Worker *sshagent_prev_identity; 204*6236dae4SAndroid Build Coastguard Worker #endif 205*6236dae4SAndroid Build Coastguard Worker 206*6236dae4SAndroid Build Coastguard Worker /* note that HAVE_LIBSSH2_KNOWNHOST_API is a define set in the libssh2.h 207*6236dae4SAndroid Build Coastguard Worker header */ 208*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_LIBSSH2_KNOWNHOST_API 209*6236dae4SAndroid Build Coastguard Worker LIBSSH2_KNOWNHOSTS *kh; 210*6236dae4SAndroid Build Coastguard Worker #endif 211*6236dae4SAndroid Build Coastguard Worker #elif defined(USE_WOLFSSH) 212*6236dae4SAndroid Build Coastguard Worker WOLFSSH *ssh_session; 213*6236dae4SAndroid Build Coastguard Worker WOLFSSH_CTX *ctx; 214*6236dae4SAndroid Build Coastguard Worker word32 handleSz; 215*6236dae4SAndroid Build Coastguard Worker byte handle[WOLFSSH_MAX_HANDLE]; 216*6236dae4SAndroid Build Coastguard Worker curl_off_t offset; 217*6236dae4SAndroid Build Coastguard Worker #endif /* USE_LIBSSH */ 218*6236dae4SAndroid Build Coastguard Worker }; 219*6236dae4SAndroid Build Coastguard Worker 220*6236dae4SAndroid Build Coastguard Worker #if defined(USE_LIBSSH2) 221*6236dae4SAndroid Build Coastguard Worker 222*6236dae4SAndroid Build Coastguard Worker /* Feature detection based on version numbers to better work with 223*6236dae4SAndroid Build Coastguard Worker non-configure platforms */ 224*6236dae4SAndroid Build Coastguard Worker 225*6236dae4SAndroid Build Coastguard Worker #if !defined(LIBSSH2_VERSION_NUM) || (LIBSSH2_VERSION_NUM < 0x001000) 226*6236dae4SAndroid Build Coastguard Worker # error "SCP/SFTP protocols require libssh2 0.16 or later" 227*6236dae4SAndroid Build Coastguard Worker #endif 228*6236dae4SAndroid Build Coastguard Worker 229*6236dae4SAndroid Build Coastguard Worker #if LIBSSH2_VERSION_NUM >= 0x010000 230*6236dae4SAndroid Build Coastguard Worker #define HAVE_LIBSSH2_SFTP_SEEK64 1 231*6236dae4SAndroid Build Coastguard Worker #endif 232*6236dae4SAndroid Build Coastguard Worker 233*6236dae4SAndroid Build Coastguard Worker #if LIBSSH2_VERSION_NUM >= 0x010100 234*6236dae4SAndroid Build Coastguard Worker #define HAVE_LIBSSH2_VERSION 1 235*6236dae4SAndroid Build Coastguard Worker #endif 236*6236dae4SAndroid Build Coastguard Worker 237*6236dae4SAndroid Build Coastguard Worker #if LIBSSH2_VERSION_NUM >= 0x010205 238*6236dae4SAndroid Build Coastguard Worker #define HAVE_LIBSSH2_INIT 1 239*6236dae4SAndroid Build Coastguard Worker #define HAVE_LIBSSH2_EXIT 1 240*6236dae4SAndroid Build Coastguard Worker #endif 241*6236dae4SAndroid Build Coastguard Worker 242*6236dae4SAndroid Build Coastguard Worker #if LIBSSH2_VERSION_NUM >= 0x010206 243*6236dae4SAndroid Build Coastguard Worker #define HAVE_LIBSSH2_KNOWNHOST_CHECKP 1 244*6236dae4SAndroid Build Coastguard Worker #define HAVE_LIBSSH2_SCP_SEND64 1 245*6236dae4SAndroid Build Coastguard Worker #endif 246*6236dae4SAndroid Build Coastguard Worker 247*6236dae4SAndroid Build Coastguard Worker #if LIBSSH2_VERSION_NUM >= 0x010208 248*6236dae4SAndroid Build Coastguard Worker #define HAVE_LIBSSH2_SESSION_HANDSHAKE 1 249*6236dae4SAndroid Build Coastguard Worker #endif 250*6236dae4SAndroid Build Coastguard Worker 251*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_LIBSSH2_VERSION 252*6236dae4SAndroid Build Coastguard Worker /* get it runtime if possible */ 253*6236dae4SAndroid Build Coastguard Worker #define CURL_LIBSSH2_VERSION libssh2_version(0) 254*6236dae4SAndroid Build Coastguard Worker #else 255*6236dae4SAndroid Build Coastguard Worker /* use build-time if runtime not possible */ 256*6236dae4SAndroid Build Coastguard Worker #define CURL_LIBSSH2_VERSION LIBSSH2_VERSION 257*6236dae4SAndroid Build Coastguard Worker #endif 258*6236dae4SAndroid Build Coastguard Worker 259*6236dae4SAndroid Build Coastguard Worker #endif /* USE_LIBSSH2 */ 260*6236dae4SAndroid Build Coastguard Worker 261*6236dae4SAndroid Build Coastguard Worker #ifdef USE_SSH 262*6236dae4SAndroid Build Coastguard Worker 263*6236dae4SAndroid Build Coastguard Worker extern const struct Curl_handler Curl_handler_scp; 264*6236dae4SAndroid Build Coastguard Worker extern const struct Curl_handler Curl_handler_sftp; 265*6236dae4SAndroid Build Coastguard Worker 266*6236dae4SAndroid Build Coastguard Worker /* generic SSH backend functions */ 267*6236dae4SAndroid Build Coastguard Worker CURLcode Curl_ssh_init(void); 268*6236dae4SAndroid Build Coastguard Worker void Curl_ssh_cleanup(void); 269*6236dae4SAndroid Build Coastguard Worker void Curl_ssh_version(char *buffer, size_t buflen); 270*6236dae4SAndroid Build Coastguard Worker void Curl_ssh_attach(struct Curl_easy *data, 271*6236dae4SAndroid Build Coastguard Worker struct connectdata *conn); 272*6236dae4SAndroid Build Coastguard Worker #else 273*6236dae4SAndroid Build Coastguard Worker /* for non-SSH builds */ 274*6236dae4SAndroid Build Coastguard Worker #define Curl_ssh_cleanup() 275*6236dae4SAndroid Build Coastguard Worker #define Curl_ssh_attach(x,y) 276*6236dae4SAndroid Build Coastguard Worker #define Curl_ssh_init() 0 277*6236dae4SAndroid Build Coastguard Worker #endif 278*6236dae4SAndroid Build Coastguard Worker 279*6236dae4SAndroid Build Coastguard Worker #endif /* HEADER_CURL_SSH_H */ 280