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