1
1
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@30 7dcaeef0-15fb-0310-b436-a5af3365683c
Этот коммит содержится в:
Aris Adamantiadis 2005-08-29 23:34:32 +00:00
родитель ed62d1fb53
Коммит a8b5d63e14
3 изменённых файлов: 40 добавлений и 1 удалений

Просмотреть файл

@ -134,6 +134,7 @@ char *string_to_char(STRING *str);
STRING *string_copy(STRING *str);
/* burns the data inside a string */
void string_burn(STRING *str);
void *string_data(STRING *str);
/* deprecated */
void ssh_crypto_init();

Просмотреть файл

@ -68,3 +68,6 @@ void string_burn(STRING *s){
memset(s->string,'X',string_len(s));
}
void *string_data(STRING *s){
return s->string;
}

Просмотреть файл

@ -247,6 +247,28 @@ int handle_read(SFTP_CLIENT_MESSAGE *msg){
return 0;
}
int handle_write(SFTP_CLIENT_MESSAGE *msg){
struct sftp_handle *handle=sftp_handle(msg->sftp,msg->handle);
u32 len=string_len(msg->data);
int r;
if(!handle || handle->type!=TYPE_FILE){
sftp_reply_status(msg,SSH_FX_BAD_MESSAGE,"invalid handle");
return 0;
}
fseeko(handle->file,msg->offset,SEEK_SET);
do {
r=fwrite(string_data(msg->data),1,len,handle->file);
ssh_say(2,"wrote %d bytes\n",r);
if(r<=0 && (msg->data>0)){
reply_status(msg);
return 0;
}
len-=r;
} while (len>0);
sftp_reply_status(msg,SSH_FX_OK,"");
return 0;
}
int handle_close(SFTP_CLIENT_MESSAGE *msg){
struct sftp_handle *handle=sftp_handle(msg->sftp,msg->handle);
if(!handle){
@ -362,9 +384,22 @@ int sftploop(SSH_SESSION *session, SFTP_SESSION *sftp){
handle_open(msg);
break;
case SFTP_READ:
ssh_say(1,"client read(off=%ld,len=%d)\n",msg->offset,msg->len);
ssh_say(1,"client read(off=%lld,len=%d)\n",msg->offset,msg->len);
handle_read(msg);
break;
case SFTP_WRITE:
ssh_say(1,"client write(off=%lld len=%d)\n)\n",msg->offset,string_len(msg->data));
handle_write(msg);
break;
case SFTP_SETSTAT:
case SFTP_FSETSTAT:
case SFTP_REMOVE:
case SFTP_MKDIR:
case SFTP_RMDIR:
case SFTP_FSTAT:
case SFTP_RENAME:
case SFTP_READLINK:
case SFTP_SYMLINK:
default:
ssh_say(1,"Unknown message %d\n",msg->type);
sftp_reply_status(msg,SSH_FX_OP_UNSUPPORTED,"Unsupported message");