Fix scp pull bug + scp logging

This commit is contained in:
Aris Adamantiadis
2009-09-04 19:01:50 +03:00
parent d5840aa1f0
commit 7fed54b1e5

View File

@@ -85,11 +85,15 @@ int ssh_scp_init(ssh_scp scp){
scp->state=SSH_SCP_ERROR; scp->state=SSH_SCP_ERROR;
return SSH_ERROR; return SSH_ERROR;
} }
r=channel_read(scp->channel,&code,1,0); if(scp->mode == SSH_SCP_WRITE){
if(code != 0){ r=channel_read(scp->channel,&code,1,0);
ssh_set_error(scp->session,SSH_FATAL, "scp status code %ud not valid", code); if(code != 0){
scp->state=SSH_SCP_ERROR; ssh_set_error(scp->session,SSH_FATAL, "scp status code %ud not valid", code);
return SSH_ERROR; scp->state=SSH_SCP_ERROR;
return SSH_ERROR;
}
} else {
channel_write(scp->channel,"",1);
} }
if(scp->mode == SSH_SCP_WRITE) if(scp->mode == SSH_SCP_WRITE)
scp->state=SSH_SCP_WRITE_INITED; scp->state=SSH_SCP_WRITE_INITED;
@@ -328,6 +332,10 @@ int ssh_scp_pull_request(ssh_scp scp){
err=ssh_scp_read_string(scp,buffer,sizeof(buffer)); err=ssh_scp_read_string(scp,buffer,sizeof(buffer));
if(err==SSH_ERROR) if(err==SSH_ERROR)
return err; return err;
p=strchr(buffer,'\n');
if(p!=NULL)
*p='\0';
ssh_log(scp->session,SSH_LOG_PROTOCOL,"Received SCP request: '%s'",buffer);
switch(buffer[0]){ switch(buffer[0]){
case 'C': case 'C':
/* File */ /* File */
@@ -347,12 +355,7 @@ int ssh_scp_pull_request(ssh_scp scp){
*p=0; *p=0;
size=strtoull(tmp,NULL,10); size=strtoull(tmp,NULL,10);
p++; p++;
tmp=p; name=strdup(p);
p=strchr(p,'\n');
if(p==NULL)
goto error;
*p=0;
name=strdup(tmp);
SAFE_FREE(scp->request_name); SAFE_FREE(scp->request_name);
scp->request_name=name; scp->request_name=name;
if(buffer[0]=='C'){ if(buffer[0]=='C'){
@@ -368,6 +371,13 @@ int ssh_scp_pull_request(ssh_scp scp){
break; break;
case 'T': case 'T':
/* Timestamp */ /* Timestamp */
break;
case 0x1:
ssh_set_error(scp->session,SSH_REQUEST_DENIED,"SCP: %s",&buffer[1]);
return SSH_ERROR;
case 0x2:
ssh_set_error(scp->session,SSH_FATAL,"SCP: %s",&buffer[1]);
return SSH_ERROR;
default: default:
ssh_set_error(scp->session,SSH_FATAL,"Unhandled message: %s",buffer); ssh_set_error(scp->session,SSH_FATAL,"Unhandled message: %s",buffer);
return SSH_ERROR; return SSH_ERROR;