mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-07-29 13:01:13 +03:00
sftp: fix format problems, style nit and building problems
Signed-off-by: tatataeki <shengzeyu19_98@163.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org> Reviewed-by: Anderson Toshiyuki Sasaki <ansasaki@redhat.com>
This commit is contained in:
@ -53,6 +53,7 @@ The goal is to show the API in action.
|
||||
#include <unistd.h>
|
||||
#include <dirent.h>
|
||||
#include <time.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
|
||||
#ifndef KEYS_FOLDER
|
||||
@ -70,7 +71,7 @@ The goal is to show the API in action.
|
||||
|
||||
#define MAX_HANDLE_NUM 10
|
||||
#define MAX_ENTRIES_NUM_IN_PACKET 50
|
||||
#define MAX_LONG_NAME_LEN 150
|
||||
#define MAX_LONG_NAME_LEN 350
|
||||
|
||||
#define SSH_SFTP_CALLBACK(name) \
|
||||
static int name (sftp_client_message message)
|
||||
@ -184,16 +185,16 @@ static int handle_close(int handle_ind) {
|
||||
}
|
||||
|
||||
static int handle_close_by_pointer(struct sftp_handle* handle) {
|
||||
if(handle->type == NULL_HANDLE)
|
||||
if (handle->type == NULL_HANDLE)
|
||||
return -1;
|
||||
|
||||
if(handle->fd > 0)
|
||||
if (handle->fd > 0)
|
||||
close(handle->fd);
|
||||
|
||||
if(handle->dirp!=NULL)
|
||||
if (handle->dirp!=NULL)
|
||||
closedir(handle->dirp);
|
||||
|
||||
if(handle->name!=NULL){
|
||||
if (handle->name!=NULL) {
|
||||
free(handle->name);
|
||||
handle->name = NULL;
|
||||
}
|
||||
@ -202,10 +203,10 @@ static int handle_close_by_pointer(struct sftp_handle* handle) {
|
||||
}
|
||||
|
||||
static void free_handles(int handle_num) {
|
||||
|
||||
for(int i = 0; i < handle_num; i++) {
|
||||
int i;
|
||||
for(i = 0; i < handle_num; i++) {
|
||||
handle_close(i);
|
||||
//reinit this handle
|
||||
/* reinit this handle */
|
||||
reinit_single_handle(&s_handle_table[i]);
|
||||
}
|
||||
return;
|
||||
@ -213,12 +214,13 @@ static void free_handles(int handle_num) {
|
||||
|
||||
static int add_handle(int type, void *dirp, int fd, const char *name, void *session_id) {
|
||||
int ret = SSH_ERROR;
|
||||
if(dirp == NULL && fd < 0){
|
||||
int i;
|
||||
if (dirp == NULL && fd < 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
for(int i = 0; i<MAX_HANDLE_NUM; i++) {
|
||||
if(s_handle_table[i].type == NULL_HANDLE){
|
||||
for (i = 0; i < MAX_HANDLE_NUM; i++) {
|
||||
if (s_handle_table[i].type == NULL_HANDLE) {
|
||||
s_handle_table[i].type = type;
|
||||
s_handle_table[i].session_id = session_id;
|
||||
s_handle_table[i].fd = fd;
|
||||
@ -231,7 +233,7 @@ static int add_handle(int type, void *dirp, int fd, const char *name, void *sess
|
||||
}
|
||||
}
|
||||
|
||||
if(ret==SSH_ERROR)
|
||||
if (ret == SSH_ERROR)
|
||||
printf("no other space for new handle\n");
|
||||
|
||||
return ret;
|
||||
@ -240,7 +242,7 @@ static int add_handle(int type, void *dirp, int fd, const char *name, void *sess
|
||||
static char* get_handle_name(struct sftp_handle* handle) {
|
||||
char *ret = NULL;
|
||||
|
||||
if(handle!=NULL&&handle->name!=NULL)
|
||||
if (handle != NULL && handle->name != NULL)
|
||||
ret = handle->name;
|
||||
|
||||
return ret;
|
||||
@ -273,33 +275,23 @@ static int unix_errno_to_ssh_stat(int u_errno) {
|
||||
case ENOTDIR:
|
||||
case EBADF:
|
||||
case ELOOP:
|
||||
{
|
||||
ret = SSH_FX_NO_SUCH_FILE;
|
||||
break;
|
||||
}
|
||||
case EPERM:
|
||||
case EACCES:
|
||||
case EFAULT:
|
||||
{
|
||||
ret = SSH_FX_PERMISSION_DENIED;
|
||||
break;
|
||||
}
|
||||
case ENAMETOOLONG:
|
||||
case EINVAL:
|
||||
{
|
||||
ret = SSH_FX_BAD_MESSAGE;
|
||||
break;
|
||||
}
|
||||
case ENOSYS:
|
||||
{
|
||||
ret = SSH_FX_OP_UNSUPPORTED;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
ret = SSH_FX_FAILURE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
@ -431,19 +423,24 @@ static int process_open(sftp_client_message client_msg) {
|
||||
int handle_ind = -1;
|
||||
int status;
|
||||
|
||||
if (( (msg_flag&(uint32_t)SSH_FXF_READ) == SSH_FXF_READ) &&
|
||||
( (msg_flag&(uint32_t)SSH_FXF_WRITE) == SSH_FXF_WRITE)) {
|
||||
if (((msg_flag&(uint32_t)SSH_FXF_READ) == SSH_FXF_READ) &&
|
||||
((msg_flag&(uint32_t)SSH_FXF_WRITE) == SSH_FXF_WRITE)) {
|
||||
file_flag = O_RDWR; //file must exist
|
||||
if ((msg_flag & (uint32_t)SSH_FXF_CREAT) == SSH_FXF_CREAT)
|
||||
file_flag |= O_CREAT;
|
||||
} else if ( (msg_flag&(uint32_t)SSH_FXF_WRITE) == SSH_FXF_WRITE ){
|
||||
} else if ((msg_flag & (uint32_t)SSH_FXF_WRITE) == SSH_FXF_WRITE) {
|
||||
file_flag = O_WRONLY;
|
||||
if ( (msg_flag&(uint32_t)SSH_FXF_APPEND) == SSH_FXF_APPEND )
|
||||
if ((msg_flag & (uint32_t)SSH_FXF_APPEND) == SSH_FXF_APPEND)
|
||||
file_flag |= O_APPEND;
|
||||
if ( (msg_flag&(uint32_t)SSH_FXF_CREAT) == SSH_FXF_CREAT )
|
||||
if ((msg_flag & (uint32_t)SSH_FXF_CREAT) == SSH_FXF_CREAT)
|
||||
file_flag |= O_CREAT;
|
||||
} else if ( (msg_flag&(uint32_t)SSH_FXF_READ) == SSH_FXF_READ ){
|
||||
} else if ((msg_flag & (uint32_t)SSH_FXF_READ) == SSH_FXF_READ) {
|
||||
file_flag = O_RDONLY;
|
||||
} else {
|
||||
printf("undefined message flag\n");
|
||||
sftp_reply_status(client_msg, SSH_FX_FAILURE, "Flag error");
|
||||
ret = SSH_ERROR;
|
||||
return ret;
|
||||
}
|
||||
|
||||
fd = open(filename, file_flag, 0600);
|
||||
@ -496,7 +493,7 @@ static int process_read(sftp_client_message client_msg) {
|
||||
rv = lseek(fd, client_msg->offset, SEEK_SET);
|
||||
if (rv == -1) {
|
||||
sftp_reply_status(client_msg, SSH_FX_FAILURE, NULL);
|
||||
printf("error seeking file fd: %d at offset: %ld\n", fd, client_msg->offset);
|
||||
printf("error seeking file fd: %d at offset: %" PRIu64 "\n", fd, client_msg->offset);
|
||||
ret = SSH_ERROR;
|
||||
return ret;
|
||||
}
|
||||
@ -545,7 +542,7 @@ static int process_write(sftp_client_message client_msg) {
|
||||
rv = lseek(fd, client_msg->offset, SEEK_SET);
|
||||
if (rv == -1) {
|
||||
sftp_reply_status(client_msg, SSH_FX_FAILURE, NULL);
|
||||
printf("error seeking file at offset: %ld\n", client_msg->offset);
|
||||
printf("error seeking file at offset: %" PRIu64 "\n", client_msg->offset);
|
||||
}
|
||||
writen = write(fd, msg_data, len);
|
||||
if(writen == len) {
|
||||
|
@ -864,15 +864,6 @@ LIBSSH_API char *sftp_canonicalize_path(sftp_session sftp, const char *path);
|
||||
*/
|
||||
LIBSSH_API int sftp_server_version(sftp_session sftp);
|
||||
|
||||
|
||||
LIBSSH_API int sftp_decode_channel_data_to_packet(sftp_session sftp, void *data);
|
||||
|
||||
LIBSSH_API sftp_client_message sftp_get_client_message_from_packet(sftp_session sftp);
|
||||
|
||||
LIBSSH_API int sftp_process_init_packet(sftp_client_message client_msg);
|
||||
|
||||
LIBSSH_API int sftp_reply_statvfs(sftp_client_message msg, sftp_statvfs_t st);
|
||||
|
||||
#ifdef WITH_SERVER
|
||||
/**
|
||||
* @brief Create a new sftp server session.
|
||||
@ -900,6 +891,50 @@ LIBSSH_API int sftp_server_init(sftp_session sftp);
|
||||
* @param sftp The sftp session handle to free.
|
||||
*/
|
||||
LIBSSH_API void sftp_server_free(sftp_session sftp);
|
||||
|
||||
/**
|
||||
* @brief Decode the data from channel buffer into sftp read_packet.
|
||||
*
|
||||
* @param sftp The sftp session handle.
|
||||
*
|
||||
* @param data The pointer to the data buffer of channel.
|
||||
*
|
||||
* @return Length of data deocded.
|
||||
*/
|
||||
LIBSSH_API int sftp_decode_channel_data_to_packet(sftp_session sftp, void *data);
|
||||
|
||||
/**
|
||||
* @brief Get the client message from a sftp packet.
|
||||
*
|
||||
* @param sftp The sftp session handle.
|
||||
*
|
||||
* @return The pointer to the generated sftp client message.
|
||||
*/
|
||||
LIBSSH_API sftp_client_message sftp_get_client_message_from_packet(sftp_session sftp);
|
||||
|
||||
/**
|
||||
* @brief Handle the sftp_init request from client.
|
||||
*
|
||||
* @param client_msg The pointer to client message.
|
||||
*
|
||||
* @return 0 on success, < 0 on error with ssh and sftp error set.
|
||||
*
|
||||
* @see sftp_get_error()
|
||||
*/
|
||||
LIBSSH_API int sftp_process_init_packet(sftp_client_message client_msg);
|
||||
|
||||
/**
|
||||
* @brief Handle the statvfs request, return information the mounted file system.
|
||||
*
|
||||
* @param msg The sftp client message.
|
||||
*
|
||||
* @param st The statvfs state of target file.
|
||||
*
|
||||
* @return 0 on success, < 0 on error with ssh and sftp error set.
|
||||
*
|
||||
* @see sftp_get_error()
|
||||
*/
|
||||
LIBSSH_API int sftp_reply_statvfs(sftp_client_message msg, sftp_statvfs_t st);
|
||||
#endif /* WITH_SERVER */
|
||||
|
||||
/* sftpserver.c */
|
||||
|
@ -457,9 +457,5 @@ LIBSSH_4_9_0 # Released
|
||||
ssh_session_set_disconnect_message;
|
||||
ssh_userauth_publickey_auto_get_current_identity;
|
||||
ssh_vlog;
|
||||
sftp_get_client_message_from_packet;
|
||||
sftp_process_init_packet;
|
||||
sftp_decode_channel_data_to_packet;
|
||||
sftp_reply_statvfs;
|
||||
} LIBSSH_4_8_1;
|
||||
|
||||
|
12
src/sftp.c
12
src/sftp.c
@ -354,7 +354,8 @@ void sftp_server_free(sftp_session sftp)
|
||||
SAFE_FREE(sftp);
|
||||
}
|
||||
|
||||
int sftp_process_init_packet(sftp_client_message client_msg) {
|
||||
int sftp_process_init_packet(sftp_client_message client_msg)
|
||||
{
|
||||
int ret = SSH_OK;
|
||||
sftp_session sftp = client_msg->sftp;
|
||||
ssh_session session = sftp->session;
|
||||
@ -434,7 +435,8 @@ void sftp_free(sftp_session sftp)
|
||||
SAFE_FREE(sftp);
|
||||
}
|
||||
|
||||
int sftp_decode_channel_data_to_packet(sftp_session sftp, void *data) {
|
||||
int sftp_decode_channel_data_to_packet(sftp_session sftp, void *data)
|
||||
{
|
||||
sftp_packet packet = sftp->read_packet;
|
||||
int nread;
|
||||
int payload_len;
|
||||
@ -451,12 +453,12 @@ int sftp_decode_channel_data_to_packet(sftp_session sftp, void *data) {
|
||||
if(payload_len > MAX_PACKET_LEN || payload_len < 0)
|
||||
return SSH_ERROR;
|
||||
|
||||
offset = sizeof(int)+sizeof(uint8_t);
|
||||
offset = sizeof(int) + sizeof(uint8_t);
|
||||
to_read = payload_len - sizeof(uint8_t);
|
||||
ssh_buffer_add_data(packet->payload, (void*)((uint8_t *)data + offset), payload_len-sizeof(uint8_t));
|
||||
ssh_buffer_add_data(packet->payload, (void*)((uint8_t *)data + offset), payload_len - sizeof(uint8_t));
|
||||
nread = ssh_buffer_get_len(packet->payload);
|
||||
|
||||
/* We should check if we copy the whole data */
|
||||
/* We should check if we copied the whole data */
|
||||
if(nread != to_read)
|
||||
return SSH_ERROR;
|
||||
|
||||
|
@ -249,7 +249,8 @@ sftp_client_message sftp_get_client_message(sftp_session sftp) {
|
||||
return msg;
|
||||
}
|
||||
|
||||
sftp_client_message sftp_get_client_message_from_packet(sftp_session sftp) {
|
||||
sftp_client_message sftp_get_client_message_from_packet(sftp_session sftp)
|
||||
{
|
||||
ssh_session session = sftp->session;
|
||||
sftp_packet packet;
|
||||
sftp_client_message msg;
|
||||
@ -291,8 +292,9 @@ sftp_client_message sftp_get_client_message_from_packet(sftp_session sftp) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if(msg->type!=SSH_FXP_INIT)
|
||||
if (msg->type!=SSH_FXP_INIT) {
|
||||
ssh_buffer_get_u32(payload, &msg->id);
|
||||
}
|
||||
|
||||
switch(msg->type) {
|
||||
case SSH_FXP_INIT:
|
||||
@ -718,8 +720,8 @@ int sftp_reply_data(sftp_client_message msg, const void *data, int len) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* zeyu added */
|
||||
int sftp_reply_statvfs(sftp_client_message msg, sftp_statvfs_t st) {
|
||||
int sftp_reply_statvfs(sftp_client_message msg, sftp_statvfs_t st)
|
||||
{
|
||||
ssh_buffer out;
|
||||
|
||||
out = ssh_buffer_new();
|
||||
|
@ -71,7 +71,7 @@
|
||||
|
||||
#define MAX_HANDLE_NUM 10
|
||||
#define MAX_ENTRIES_NUM_IN_PACKET 50
|
||||
#define MAX_LONG_NAME_LEN 150
|
||||
#define MAX_LONG_NAME_LEN 300
|
||||
|
||||
#define SSH_SFTP_CALLBACK(name) \
|
||||
static int name (sftp_client_message message)
|
||||
@ -266,41 +266,30 @@ static const char* ssh_str_error(int u_errno) {
|
||||
|
||||
static int unix_errno_to_ssh_stat(int u_errno) {
|
||||
int ret = SSH_OK;
|
||||
switch (u_errno)
|
||||
{
|
||||
switch (u_errno) {
|
||||
case 0:
|
||||
break;
|
||||
case ENOENT:
|
||||
case ENOTDIR:
|
||||
case EBADF:
|
||||
case ELOOP:
|
||||
{
|
||||
ret = SSH_FX_NO_SUCH_FILE;
|
||||
break;
|
||||
}
|
||||
case EPERM:
|
||||
case EACCES:
|
||||
case EFAULT:
|
||||
{
|
||||
ret = SSH_FX_PERMISSION_DENIED;
|
||||
break;
|
||||
}
|
||||
case ENAMETOOLONG:
|
||||
case EINVAL:
|
||||
{
|
||||
ret = SSH_FX_BAD_MESSAGE;
|
||||
break;
|
||||
}
|
||||
case ENOSYS:
|
||||
{
|
||||
ret = SSH_FX_OP_UNSUPPORTED;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
ret = SSH_FX_FAILURE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
@ -437,13 +426,13 @@ static int process_open(sftp_client_message client_msg) {
|
||||
file_flag = O_RDWR; //file must exist
|
||||
if ((msg_flag & (uint32_t)SSH_FXF_CREAT) == SSH_FXF_CREAT)
|
||||
file_flag |= O_CREAT;
|
||||
} else if ( (msg_flag&(uint32_t)SSH_FXF_WRITE) == SSH_FXF_WRITE ){
|
||||
} else if ( (msg_flag&(uint32_t)SSH_FXF_WRITE) == SSH_FXF_WRITE ) {
|
||||
file_flag = O_WRONLY;
|
||||
if ( (msg_flag&(uint32_t)SSH_FXF_APPEND) == SSH_FXF_APPEND )
|
||||
file_flag |= O_APPEND;
|
||||
if ( (msg_flag&(uint32_t)SSH_FXF_CREAT) == SSH_FXF_CREAT )
|
||||
file_flag |= O_CREAT;
|
||||
} else if ( (msg_flag&(uint32_t)SSH_FXF_READ) == SSH_FXF_READ ){
|
||||
} else {
|
||||
file_flag = O_RDONLY;
|
||||
}
|
||||
|
||||
|
@ -123,18 +123,6 @@ static int setup_default_server(void **state)
|
||||
torture_write_file(ecdsa_hostkey,
|
||||
torture_get_testkey(SSH_KEYTYPE_ECDSA_P521, 0));
|
||||
|
||||
// sftp_server = getenv("TORTURE_SFTP_SERVER");
|
||||
// if (sftp_server == NULL) {
|
||||
// for (i = 0; i < sftp_sl_size; i++) {
|
||||
// sftp_server = sftp_server_locations[i];
|
||||
// rc = lstat(sftp_server, &sb);
|
||||
// if (rc == 0) {
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// assert_non_null(sftp_server);
|
||||
|
||||
/* Create default server state */
|
||||
ss = (struct server_state_st *)calloc(1, sizeof(struct server_state_st));
|
||||
assert_non_null(ss);
|
||||
@ -442,7 +430,7 @@ static void torture_server_test_sftp_function(void **state)
|
||||
assert_non_null(fichier);
|
||||
|
||||
to = sftp_open(sftp, "ssh-copy", O_WRONLY | O_CREAT, 0700);
|
||||
assert_non_null(fichier);
|
||||
assert_non_null(to);
|
||||
|
||||
read_len = sftp_read(fichier, data, 4096);
|
||||
write_len = sftp_write(to, data, read_len);
|
||||
|
Reference in New Issue
Block a user