aboutsummaryrefslogtreecommitdiff
path: root/libssh
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2005-08-26 16:04:49 +0000
committerAris Adamantiadis <aris@0xbadc0de.be>2005-08-26 16:04:49 +0000
commitc76e6e496d6065b8cb61c5ea25df6a38619cfdf4 (patch)
treecbd81a88b36e773c3dcf9f93e03e1f910afb50e3 /libssh
parent6fd3760797d74d0e4886029ac4f1c2d5a6369d35 (diff)
downloadlibssh-c76e6e496d6065b8cb61c5ea25df6a38619cfdf4.tar.gz
libssh-c76e6e496d6065b8cb61c5ea25df6a38619cfdf4.tar.xz
libssh-c76e6e496d6065b8cb61c5ea25df6a38619cfdf4.zip
file opening/reading works :).
I fixed the "longname" part of a stat (which makes the output for ls into openssh's sftp) it's possible to browse and open abritrary files. but no ACL yet git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@19 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'libssh')
-rw-r--r--libssh/sftp.c4
-rw-r--r--libssh/sftpserver.c22
2 files changed, 22 insertions, 4 deletions
diff --git a/libssh/sftp.c b/libssh/sftp.c
index 0d08b3c0..3c7e7410 100644
--- a/libssh/sftp.c
+++ b/libssh/sftp.c
@@ -244,7 +244,7 @@ int sftp_init(SFTP_SESSION *sftp){
if(ext_data_s)
free(ext_data_s);
sftp_packet_free(packet);
- sftp->server_version=version;
+ sftp->version=sftp->server_version=version;
return 0;
}
@@ -643,7 +643,7 @@ void buffer_add_attributes(BUFFER *buffer, SFTP_ATTRIBUTES *attr){
SFTP_ATTRIBUTES *sftp_parse_attr(SFTP_SESSION *session, BUFFER *buf,int expectname){
- switch(session->server_version){
+ switch(session->version){
case 4:
return sftp_parse_attr_4(session,buf,expectname);
case 3:
diff --git a/libssh/sftpserver.c b/libssh/sftpserver.c
index fd759a12..bfbbc400 100644
--- a/libssh/sftpserver.c
+++ b/libssh/sftpserver.c
@@ -76,11 +76,11 @@ SFTP_CLIENT_MESSAGE *sftp_get_client_message(SFTP_SESSION *sftp){
tmp=buffer_get_ssh_string(payload);
msg->filename=string_to_char(tmp);
free(tmp);
-#warning attributes
+ msg->attr=sftp_parse_attr(sftp, payload,0);
break;
case SSH_FXP_FSETSTAT:
msg->handle=buffer_get_ssh_string(payload);
-#warning attributes
+ msg->attr=sftp_parse_attr(sftp, payload,0);
break;
case SSH_FXP_LSTAT:
case SSH_FXP_STAT:
@@ -90,6 +90,12 @@ SFTP_CLIENT_MESSAGE *sftp_get_client_message(SFTP_SESSION *sftp){
if(sftp->version >3)
buffer_get_u32(payload,&msg->flags);
break;
+ case SSH_FXP_OPEN:
+ tmp=buffer_get_ssh_string(payload);
+ msg->filename=string_to_char(tmp);
+ free(tmp);
+ buffer_get_u32(payload,&msg->flags);
+ msg->attr=sftp_parse_attr(sftp, payload,0);
case SSH_FXP_FSTAT:
msg->handle=buffer_get_ssh_string(payload);
buffer_get_u32(payload,&msg->flags);
@@ -198,6 +204,17 @@ int sftp_reply_status(SFTP_CLIENT_MESSAGE *msg, u32 status, char *message){
return r<0;
}
+int sftp_reply_data(SFTP_CLIENT_MESSAGE *msg, void *data, int len){
+ BUFFER *out=buffer_new();
+ int r;
+ buffer_add_u32(out,msg->id);
+ buffer_add_u32(out,ntohl(len));
+ buffer_add_data(out,data,len);
+ r=sftp_packet_write(msg->sftp,SSH_FXP_DATA,out);
+ buffer_free(out);
+ return r<0;
+}
+
/* this function will return you a new handle to give the client.
* the function accepts an info that can be retrieved later with
* the handle. Care is given that a corrupted handle won't give a
@@ -233,6 +250,7 @@ void *sftp_handle(SFTP_SESSION *sftp, STRING *handle){
return NULL;
return sftp->handles[val];
}
+
void sftp_handle_remove(SFTP_SESSION *sftp, void *handle){
int i;
for(i=0;i<SFTP_HANDLES;++i){