xref: /freebsd/crypto/openssh/sftp-client.h (revision 4a421b63)
14a421b63SDag-Erling Smørgrav /* $OpenBSD: sftp-client.h,v 1.20 2010/12/04 00:18:01 djm Exp $ */
21e8db6e2SBrian Feldman 
31e8db6e2SBrian Feldman /*
4efcad6b7SDag-Erling Smørgrav  * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
51e8db6e2SBrian Feldman  *
6efcad6b7SDag-Erling Smørgrav  * Permission to use, copy, modify, and distribute this software for any
7efcad6b7SDag-Erling Smørgrav  * purpose with or without fee is hereby granted, provided that the above
8efcad6b7SDag-Erling Smørgrav  * copyright notice and this permission notice appear in all copies.
91e8db6e2SBrian Feldman  *
10efcad6b7SDag-Erling Smørgrav  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11efcad6b7SDag-Erling Smørgrav  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12efcad6b7SDag-Erling Smørgrav  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13efcad6b7SDag-Erling Smørgrav  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14efcad6b7SDag-Erling Smørgrav  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15efcad6b7SDag-Erling Smørgrav  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16efcad6b7SDag-Erling Smørgrav  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
171e8db6e2SBrian Feldman  */
181e8db6e2SBrian Feldman 
191e8db6e2SBrian Feldman /* Client side of SSH2 filexfer protocol */
201e8db6e2SBrian Feldman 
21ae1f160dSDag-Erling Smørgrav #ifndef _SFTP_CLIENT_H
22ae1f160dSDag-Erling Smørgrav #define _SFTP_CLIENT_H
23ae1f160dSDag-Erling Smørgrav 
241e8db6e2SBrian Feldman typedef struct SFTP_DIRENT SFTP_DIRENT;
251e8db6e2SBrian Feldman 
261e8db6e2SBrian Feldman struct SFTP_DIRENT {
271e8db6e2SBrian Feldman 	char *filename;
281e8db6e2SBrian Feldman 	char *longname;
291e8db6e2SBrian Feldman 	Attrib a;
301e8db6e2SBrian Feldman };
311e8db6e2SBrian Feldman 
321e8db6e2SBrian Feldman /*
33d4af9e69SDag-Erling Smørgrav  * Used for statvfs responses on the wire from the server, because the
34d4af9e69SDag-Erling Smørgrav  * server's native format may be larger than the client's.
35d4af9e69SDag-Erling Smørgrav  */
36d4af9e69SDag-Erling Smørgrav struct sftp_statvfs {
37d4af9e69SDag-Erling Smørgrav 	u_int64_t f_bsize;
38d4af9e69SDag-Erling Smørgrav 	u_int64_t f_frsize;
39d4af9e69SDag-Erling Smørgrav 	u_int64_t f_blocks;
40d4af9e69SDag-Erling Smørgrav 	u_int64_t f_bfree;
41d4af9e69SDag-Erling Smørgrav 	u_int64_t f_bavail;
42d4af9e69SDag-Erling Smørgrav 	u_int64_t f_files;
43d4af9e69SDag-Erling Smørgrav 	u_int64_t f_ffree;
44d4af9e69SDag-Erling Smørgrav 	u_int64_t f_favail;
45d4af9e69SDag-Erling Smørgrav 	u_int64_t f_fsid;
46d4af9e69SDag-Erling Smørgrav 	u_int64_t f_flag;
47d4af9e69SDag-Erling Smørgrav 	u_int64_t f_namemax;
48d4af9e69SDag-Erling Smørgrav };
49d4af9e69SDag-Erling Smørgrav 
50d4af9e69SDag-Erling Smørgrav /*
51043840dfSDag-Erling Smørgrav  * Initialise a SSH filexfer connection. Returns NULL on error or
525e8dbd04SDag-Erling Smørgrav  * a pointer to a initialized sftp_conn struct on success.
531e8db6e2SBrian Feldman  */
544a421b63SDag-Erling Smørgrav struct sftp_conn *do_init(int, int, u_int, u_int, u_int64_t);
55ae1f160dSDag-Erling Smørgrav 
56ee21a45fSDag-Erling Smørgrav u_int sftp_proto_version(struct sftp_conn *);
571e8db6e2SBrian Feldman 
581e8db6e2SBrian Feldman /* Close file referred to by 'handle' */
59ae1f160dSDag-Erling Smørgrav int do_close(struct sftp_conn *, char *, u_int);
601e8db6e2SBrian Feldman 
611e8db6e2SBrian Feldman /* Read contents of 'path' to NULL-terminated array 'dir' */
62ae1f160dSDag-Erling Smørgrav int do_readdir(struct sftp_conn *, char *, SFTP_DIRENT ***);
631e8db6e2SBrian Feldman 
641e8db6e2SBrian Feldman /* Frees a NULL-terminated array of SFTP_DIRENTs (eg. from do_readdir) */
65ae1f160dSDag-Erling Smørgrav void free_sftp_dirents(SFTP_DIRENT **);
661e8db6e2SBrian Feldman 
671e8db6e2SBrian Feldman /* Delete file 'path' */
68ae1f160dSDag-Erling Smørgrav int do_rm(struct sftp_conn *, char *);
691e8db6e2SBrian Feldman 
701e8db6e2SBrian Feldman /* Create directory 'path' */
71b15c8340SDag-Erling Smørgrav int do_mkdir(struct sftp_conn *, char *, Attrib *, int);
721e8db6e2SBrian Feldman 
731e8db6e2SBrian Feldman /* Remove directory 'path' */
74ae1f160dSDag-Erling Smørgrav int do_rmdir(struct sftp_conn *, char *);
751e8db6e2SBrian Feldman 
761e8db6e2SBrian Feldman /* Get file attributes of 'path' (follows symlinks) */
77ae1f160dSDag-Erling Smørgrav Attrib *do_stat(struct sftp_conn *, char *, int);
781e8db6e2SBrian Feldman 
791e8db6e2SBrian Feldman /* Get file attributes of 'path' (does not follow symlinks) */
80ae1f160dSDag-Erling Smørgrav Attrib *do_lstat(struct sftp_conn *, char *, int);
811e8db6e2SBrian Feldman 
821e8db6e2SBrian Feldman /* Set file attributes of 'path' */
83ae1f160dSDag-Erling Smørgrav int do_setstat(struct sftp_conn *, char *, Attrib *);
841e8db6e2SBrian Feldman 
851e8db6e2SBrian Feldman /* Set file attributes of open file 'handle' */
86ae1f160dSDag-Erling Smørgrav int do_fsetstat(struct sftp_conn *, char *, u_int, Attrib *);
871e8db6e2SBrian Feldman 
881e8db6e2SBrian Feldman /* Canonicalise 'path' - caller must free result */
89ae1f160dSDag-Erling Smørgrav char *do_realpath(struct sftp_conn *, char *);
901e8db6e2SBrian Feldman 
91d4af9e69SDag-Erling Smørgrav /* Get statistics for filesystem hosting file at "path" */
92d4af9e69SDag-Erling Smørgrav int do_statvfs(struct sftp_conn *, const char *, struct sftp_statvfs *, int);
93d4af9e69SDag-Erling Smørgrav 
941e8db6e2SBrian Feldman /* Rename 'oldpath' to 'newpath' */
95ae1f160dSDag-Erling Smørgrav int do_rename(struct sftp_conn *, char *, char *);
961e8db6e2SBrian Feldman 
974a421b63SDag-Erling Smørgrav /* Link 'oldpath' to 'newpath' */
984a421b63SDag-Erling Smørgrav int do_hardlink(struct sftp_conn *, char *, char *);
994a421b63SDag-Erling Smørgrav 
1001e8db6e2SBrian Feldman /* Rename 'oldpath' to 'newpath' */
101ae1f160dSDag-Erling Smørgrav int do_symlink(struct sftp_conn *, char *, char *);
1021e8db6e2SBrian Feldman 
1031e8db6e2SBrian Feldman /* XXX: add callbacks to do_download/do_upload so we can do progress meter */
1041e8db6e2SBrian Feldman 
1051e8db6e2SBrian Feldman /*
1061e8db6e2SBrian Feldman  * Download 'remote_path' to 'local_path'. Preserve permissions and times
1071e8db6e2SBrian Feldman  * if 'pflag' is set
1081e8db6e2SBrian Feldman  */
109b15c8340SDag-Erling Smørgrav int do_download(struct sftp_conn *, char *, char *, Attrib *, int);
110b15c8340SDag-Erling Smørgrav 
111b15c8340SDag-Erling Smørgrav /*
112b15c8340SDag-Erling Smørgrav  * Recursively download 'remote_directory' to 'local_directory'. Preserve
113b15c8340SDag-Erling Smørgrav  * times if 'pflag' is set
114b15c8340SDag-Erling Smørgrav  */
115b15c8340SDag-Erling Smørgrav int download_dir(struct sftp_conn *, char *, char *, Attrib *, int, int);
1161e8db6e2SBrian Feldman 
1171e8db6e2SBrian Feldman /*
1181e8db6e2SBrian Feldman  * Upload 'local_path' to 'remote_path'. Preserve permissions and times
1191e8db6e2SBrian Feldman  * if 'pflag' is set
1201e8db6e2SBrian Feldman  */
121ae1f160dSDag-Erling Smørgrav int do_upload(struct sftp_conn *, char *, char *, int);
122ae1f160dSDag-Erling Smørgrav 
123b15c8340SDag-Erling Smørgrav /*
124b15c8340SDag-Erling Smørgrav  * Recursively upload 'local_directory' to 'remote_directory'. Preserve
125b15c8340SDag-Erling Smørgrav  * times if 'pflag' is set
126b15c8340SDag-Erling Smørgrav  */
127b15c8340SDag-Erling Smørgrav int upload_dir(struct sftp_conn *, char *, char *, int, int);
128b15c8340SDag-Erling Smørgrav 
129b15c8340SDag-Erling Smørgrav /* Concatenate paths, taking care of slashes. Caller must free result. */
130b15c8340SDag-Erling Smørgrav char *path_append(char *, char *);
131b15c8340SDag-Erling Smørgrav 
132ae1f160dSDag-Erling Smørgrav #endif
133