1
0
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:
tatataeki
2022-09-12 20:49:14 +08:00
committed by Jakub Jelen
parent 329d53a109
commit 0a5161a7d1
7 changed files with 91 additions and 82 deletions

View File

@ -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;
@ -230,8 +232,8 @@ static int add_handle(int type, void *dirp, int fd, const char *name, void *sess
break;
}
}
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) {

View File

@ -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 */

View File

@ -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;

View File

@ -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;

View File

@ -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();

View File

@ -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;
}

View File

@ -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);