1ae1f160dSDag-Erling Smørgrav /* $OpenBSD: sftp-client.h,v 1.9 2002/02/13 00:59:23 djm Exp $ */ 21e8db6e2SBrian Feldman 31e8db6e2SBrian Feldman /* 4ae1f160dSDag-Erling Smørgrav * Copyright (c) 2001,2002 Damien Miller. All rights reserved. 51e8db6e2SBrian Feldman * 61e8db6e2SBrian Feldman * Redistribution and use in source and binary forms, with or without 71e8db6e2SBrian Feldman * modification, are permitted provided that the following conditions 81e8db6e2SBrian Feldman * are met: 91e8db6e2SBrian Feldman * 1. Redistributions of source code must retain the above copyright 101e8db6e2SBrian Feldman * notice, this list of conditions and the following disclaimer. 111e8db6e2SBrian Feldman * 2. Redistributions in binary form must reproduce the above copyright 121e8db6e2SBrian Feldman * notice, this list of conditions and the following disclaimer in the 131e8db6e2SBrian Feldman * documentation and/or other materials provided with the distribution. 141e8db6e2SBrian Feldman * 151e8db6e2SBrian Feldman * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 161e8db6e2SBrian Feldman * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 171e8db6e2SBrian Feldman * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 181e8db6e2SBrian Feldman * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 191e8db6e2SBrian Feldman * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 201e8db6e2SBrian Feldman * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 211e8db6e2SBrian Feldman * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 221e8db6e2SBrian Feldman * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 231e8db6e2SBrian Feldman * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 241e8db6e2SBrian Feldman * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 251e8db6e2SBrian Feldman */ 261e8db6e2SBrian Feldman 271e8db6e2SBrian Feldman /* Client side of SSH2 filexfer protocol */ 281e8db6e2SBrian Feldman 29ae1f160dSDag-Erling Smørgrav #ifndef _SFTP_CLIENT_H 30ae1f160dSDag-Erling Smørgrav #define _SFTP_CLIENT_H 31ae1f160dSDag-Erling Smørgrav 321e8db6e2SBrian Feldman typedef struct SFTP_DIRENT SFTP_DIRENT; 331e8db6e2SBrian Feldman 341e8db6e2SBrian Feldman struct SFTP_DIRENT { 351e8db6e2SBrian Feldman char *filename; 361e8db6e2SBrian Feldman char *longname; 371e8db6e2SBrian Feldman Attrib a; 381e8db6e2SBrian Feldman }; 391e8db6e2SBrian Feldman 401e8db6e2SBrian Feldman /* 411e8db6e2SBrian Feldman * Initialiase a SSH filexfer connection. Returns -1 on error or 421e8db6e2SBrian Feldman * protocol version on success. 431e8db6e2SBrian Feldman */ 44ae1f160dSDag-Erling Smørgrav struct sftp_conn * 45ae1f160dSDag-Erling Smørgrav do_init(int, int, u_int, u_int); 46ae1f160dSDag-Erling Smørgrav 47ae1f160dSDag-Erling Smørgrav u_int 48ae1f160dSDag-Erling Smørgrav sftp_proto_version(struct sftp_conn *); 491e8db6e2SBrian Feldman 501e8db6e2SBrian Feldman /* Close file referred to by 'handle' */ 51ae1f160dSDag-Erling Smørgrav int do_close(struct sftp_conn *, char *, u_int); 521e8db6e2SBrian Feldman 531e8db6e2SBrian Feldman /* List contents of directory 'path' to stdout */ 54ae1f160dSDag-Erling Smørgrav int do_ls(struct sftp_conn *, char *); 551e8db6e2SBrian Feldman 561e8db6e2SBrian Feldman /* Read contents of 'path' to NULL-terminated array 'dir' */ 57ae1f160dSDag-Erling Smørgrav int do_readdir(struct sftp_conn *, char *, SFTP_DIRENT ***); 581e8db6e2SBrian Feldman 591e8db6e2SBrian Feldman /* Frees a NULL-terminated array of SFTP_DIRENTs (eg. from do_readdir) */ 60ae1f160dSDag-Erling Smørgrav void free_sftp_dirents(SFTP_DIRENT **); 611e8db6e2SBrian Feldman 621e8db6e2SBrian Feldman /* Delete file 'path' */ 63ae1f160dSDag-Erling Smørgrav int do_rm(struct sftp_conn *, char *); 641e8db6e2SBrian Feldman 651e8db6e2SBrian Feldman /* Create directory 'path' */ 66ae1f160dSDag-Erling Smørgrav int do_mkdir(struct sftp_conn *, char *, Attrib *); 671e8db6e2SBrian Feldman 681e8db6e2SBrian Feldman /* Remove directory 'path' */ 69ae1f160dSDag-Erling Smørgrav int do_rmdir(struct sftp_conn *, char *); 701e8db6e2SBrian Feldman 711e8db6e2SBrian Feldman /* Get file attributes of 'path' (follows symlinks) */ 72ae1f160dSDag-Erling Smørgrav Attrib *do_stat(struct sftp_conn *, char *, int); 731e8db6e2SBrian Feldman 741e8db6e2SBrian Feldman /* Get file attributes of 'path' (does not follow symlinks) */ 75ae1f160dSDag-Erling Smørgrav Attrib *do_lstat(struct sftp_conn *, char *, int); 761e8db6e2SBrian Feldman 771e8db6e2SBrian Feldman /* Get file attributes of open file 'handle' */ 78ae1f160dSDag-Erling Smørgrav Attrib *do_fstat(struct sftp_conn *, char *, u_int, int); 791e8db6e2SBrian Feldman 801e8db6e2SBrian Feldman /* Set file attributes of 'path' */ 81ae1f160dSDag-Erling Smørgrav int do_setstat(struct sftp_conn *, char *, Attrib *); 821e8db6e2SBrian Feldman 831e8db6e2SBrian Feldman /* Set file attributes of open file 'handle' */ 84ae1f160dSDag-Erling Smørgrav int do_fsetstat(struct sftp_conn *, char *, u_int, Attrib *); 851e8db6e2SBrian Feldman 861e8db6e2SBrian Feldman /* Canonicalise 'path' - caller must free result */ 87ae1f160dSDag-Erling Smørgrav char *do_realpath(struct sftp_conn *, char *); 881e8db6e2SBrian Feldman 891e8db6e2SBrian Feldman /* Rename 'oldpath' to 'newpath' */ 90ae1f160dSDag-Erling Smørgrav int do_rename(struct sftp_conn *, char *, char *); 911e8db6e2SBrian Feldman 921e8db6e2SBrian Feldman /* Rename 'oldpath' to 'newpath' */ 93ae1f160dSDag-Erling Smørgrav int do_symlink(struct sftp_conn *, char *, char *); 941e8db6e2SBrian Feldman 951e8db6e2SBrian Feldman /* Return target of symlink 'path' - caller must free result */ 96ae1f160dSDag-Erling Smørgrav char *do_readlink(struct sftp_conn *, char *); 971e8db6e2SBrian Feldman 981e8db6e2SBrian Feldman /* XXX: add callbacks to do_download/do_upload so we can do progress meter */ 991e8db6e2SBrian Feldman 1001e8db6e2SBrian Feldman /* 1011e8db6e2SBrian Feldman * Download 'remote_path' to 'local_path'. Preserve permissions and times 1021e8db6e2SBrian Feldman * if 'pflag' is set 1031e8db6e2SBrian Feldman */ 104ae1f160dSDag-Erling Smørgrav int do_download(struct sftp_conn *, char *, char *, int); 1051e8db6e2SBrian Feldman 1061e8db6e2SBrian Feldman /* 1071e8db6e2SBrian Feldman * Upload 'local_path' to 'remote_path'. Preserve permissions and times 1081e8db6e2SBrian Feldman * if 'pflag' is set 1091e8db6e2SBrian Feldman */ 110ae1f160dSDag-Erling Smørgrav int do_upload(struct sftp_conn *, char *, char *, int); 111ae1f160dSDag-Erling Smørgrav 112ae1f160dSDag-Erling Smørgrav #endif 113