version 1.93, 2010/09/22 22:58:51 |
version 1.94, 2010/12/04 00:18:01 |
|
|
#define SFTP_EXT_POSIX_RENAME 0x00000001 |
#define SFTP_EXT_POSIX_RENAME 0x00000001 |
#define SFTP_EXT_STATVFS 0x00000002 |
#define SFTP_EXT_STATVFS 0x00000002 |
#define SFTP_EXT_FSTATVFS 0x00000004 |
#define SFTP_EXT_FSTATVFS 0x00000004 |
|
#define SFTP_EXT_HARDLINK 0x00000008 |
u_int exts; |
u_int exts; |
u_int64_t limit_kbps; |
u_int64_t limit_kbps; |
struct bwlimit bwlimit_in, bwlimit_out; |
struct bwlimit bwlimit_in, bwlimit_out; |
|
|
strcmp(value, "2") == 0) { |
strcmp(value, "2") == 0) { |
ret->exts |= SFTP_EXT_STATVFS; |
ret->exts |= SFTP_EXT_STATVFS; |
known = 1; |
known = 1; |
} if (strcmp(name, "fstatvfs@openssh.com") == 0 && |
} else if (strcmp(name, "fstatvfs@openssh.com") == 0 && |
strcmp(value, "2") == 0) { |
strcmp(value, "2") == 0) { |
ret->exts |= SFTP_EXT_FSTATVFS; |
ret->exts |= SFTP_EXT_FSTATVFS; |
known = 1; |
known = 1; |
|
} else if (strcmp(name, "hardlink@openssh.com") == 0 && |
|
strcmp(value, "1") == 0) { |
|
ret->exts |= SFTP_EXT_HARDLINK; |
|
known = 1; |
} |
} |
if (known) { |
if (known) { |
debug2("Server supports extension \"%s\" revision %s", |
debug2("Server supports extension \"%s\" revision %s", |
|
|
status = get_status(conn, id); |
status = get_status(conn, id); |
if (status != SSH2_FX_OK) |
if (status != SSH2_FX_OK) |
error("Couldn't rename file \"%s\" to \"%s\": %s", oldpath, |
error("Couldn't rename file \"%s\" to \"%s\": %s", oldpath, |
|
newpath, fx2txt(status)); |
|
|
|
return(status); |
|
} |
|
|
|
int |
|
do_hardlink(struct sftp_conn *conn, char *oldpath, char *newpath) |
|
{ |
|
Buffer msg; |
|
u_int status, id; |
|
|
|
buffer_init(&msg); |
|
|
|
/* Send link request */ |
|
id = conn->msg_id++; |
|
if ((conn->exts & SFTP_EXT_HARDLINK) == 0) { |
|
error("Server does not support hardlink@openssh.com extension"); |
|
return -1; |
|
} |
|
|
|
buffer_put_char(&msg, SSH2_FXP_EXTENDED); |
|
buffer_put_int(&msg, id); |
|
buffer_put_cstring(&msg, "hardlink@openssh.com"); |
|
buffer_put_cstring(&msg, oldpath); |
|
buffer_put_cstring(&msg, newpath); |
|
send_msg(conn, &msg); |
|
debug3("Sent message hardlink@openssh.com \"%s\" -> \"%s\"", |
|
oldpath, newpath); |
|
buffer_free(&msg); |
|
|
|
status = get_status(conn, id); |
|
if (status != SSH2_FX_OK) |
|
error("Couldn't link file \"%s\" to \"%s\": %s", oldpath, |
newpath, fx2txt(status)); |
newpath, fx2txt(status)); |
|
|
return(status); |
return(status); |