mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-08-05 20:55:46 +03:00
fixed a load of ssh_set_error(NULL,...)
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@139 7dcaeef0-15fb-0310-b436-a5af3365683c
This commit is contained in:
@@ -511,10 +511,10 @@ PRIVATE_KEY *_privatekey_from_file(void *session,char *filename,int type);
|
|||||||
|
|
||||||
/* in keys.c */
|
/* in keys.c */
|
||||||
char *ssh_type_to_char(int type);
|
char *ssh_type_to_char(int type);
|
||||||
PUBLIC_KEY *publickey_make_dss(BUFFER *buffer);
|
PUBLIC_KEY *publickey_make_dss(SSH_SESSION *session, BUFFER *buffer);
|
||||||
PUBLIC_KEY *publickey_make_rsa(BUFFER *buffer,char *type);
|
PUBLIC_KEY *publickey_make_rsa(SSH_SESSION *session, BUFFER *buffer,char *type);
|
||||||
PUBLIC_KEY *publickey_from_string(STRING *pubkey_s);
|
PUBLIC_KEY *publickey_from_string(SSH_SESSION *session, STRING *pubkey_s);
|
||||||
SIGNATURE *signature_from_string(STRING *signature,PUBLIC_KEY *pubkey,int needed_type);
|
SIGNATURE *signature_from_string(SSH_SESSION *session, STRING *signature,PUBLIC_KEY *pubkey,int needed_type);
|
||||||
void signature_free(SIGNATURE *sign);
|
void signature_free(SIGNATURE *sign);
|
||||||
STRING *ssh_do_sign(SSH_SESSION *session,BUFFER *sigbuf,
|
STRING *ssh_do_sign(SSH_SESSION *session,BUFFER *sigbuf,
|
||||||
PRIVATE_KEY *privatekey);
|
PRIVATE_KEY *privatekey);
|
||||||
|
@@ -213,7 +213,7 @@ int ssh_fd_poll(SSH_SESSION *session, int *write, int *except){
|
|||||||
|
|
||||||
/* Make the call, and listen for errors */
|
/* Make the call, and listen for errors */
|
||||||
if (select(fdmax, &rdes,&wdes,&edes, &sometime) < 0) {
|
if (select(fdmax, &rdes,&wdes,&edes, &sometime) < 0) {
|
||||||
ssh_set_error(NULL,SSH_FATAL, "select: %s", strerror(errno));
|
ssh_set_error(session,SSH_FATAL, "select: %s", strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if(!session->data_to_read)
|
if(!session->data_to_read)
|
||||||
|
@@ -540,7 +540,7 @@ static int sig_verify(SSH_SESSION *session, PUBLIC_KEY *pubkey, SIGNATURE *signa
|
|||||||
if(valid==0)
|
if(valid==0)
|
||||||
return 0;
|
return 0;
|
||||||
if (gcry_err_code(valid)!=GPG_ERR_BAD_SIGNATURE){
|
if (gcry_err_code(valid)!=GPG_ERR_BAD_SIGNATURE){
|
||||||
ssh_set_error(NULL,SSH_FATAL,"DSA error : %s", gcry_strerror(valid));
|
ssh_set_error(session,SSH_FATAL,"DSA error : %s", gcry_strerror(valid));
|
||||||
#elif defined HAVE_LIBCRYPTO
|
#elif defined HAVE_LIBCRYPTO
|
||||||
valid=DSA_do_verify(hash+1,SHA_DIGEST_LEN,signature->dsa_sign,
|
valid=DSA_do_verify(hash+1,SHA_DIGEST_LEN,signature->dsa_sign,
|
||||||
pubkey->dsa_pub);
|
pubkey->dsa_pub);
|
||||||
@@ -562,7 +562,7 @@ static int sig_verify(SSH_SESSION *session, PUBLIC_KEY *pubkey, SIGNATURE *signa
|
|||||||
if(valid==0)
|
if(valid==0)
|
||||||
return 0;
|
return 0;
|
||||||
if(gcry_err_code(valid)!=GPG_ERR_BAD_SIGNATURE){
|
if(gcry_err_code(valid)!=GPG_ERR_BAD_SIGNATURE){
|
||||||
ssh_set_error(NULL,SSH_FATAL,"RSA error : %s",gcry_strerror(valid));
|
ssh_set_error(session,SSH_FATAL,"RSA error : %s",gcry_strerror(valid));
|
||||||
#elif defined HAVE_LIBCRYPTO
|
#elif defined HAVE_LIBCRYPTO
|
||||||
valid=RSA_verify(NID_sha1,hash+1,SHA_DIGEST_LEN,
|
valid=RSA_verify(NID_sha1,hash+1,SHA_DIGEST_LEN,
|
||||||
signature->rsa_sign->string,string_len(signature->rsa_sign),pubkey->rsa_pub);
|
signature->rsa_sign->string,string_len(signature->rsa_sign),pubkey->rsa_pub);
|
||||||
@@ -590,7 +590,7 @@ int signature_verify(SSH_SESSION *session,STRING *signature){
|
|||||||
ssh_say(1,"Host key wasn't verified\n");
|
ssh_say(1,"Host key wasn't verified\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
pubkey=publickey_from_string(session->next_crypto->server_pubkey);
|
pubkey=publickey_from_string(session,session->next_crypto->server_pubkey);
|
||||||
if(!pubkey)
|
if(!pubkey)
|
||||||
return -1;
|
return -1;
|
||||||
if(session->options->wanted_methods[SSH_HOSTKEYS]){
|
if(session->options->wanted_methods[SSH_HOSTKEYS]){
|
||||||
@@ -601,7 +601,7 @@ int signature_verify(SSH_SESSION *session,STRING *signature){
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sign=signature_from_string(signature,pubkey,pubkey->type);
|
sign=signature_from_string(session, signature,pubkey,pubkey->type);
|
||||||
if(!sign){
|
if(!sign){
|
||||||
ssh_set_error(session,SSH_FATAL,"Invalid signature blob");
|
ssh_set_error(session,SSH_FATAL,"Invalid signature blob");
|
||||||
publickey_free(pubkey);
|
publickey_free(pubkey);
|
||||||
|
10
libssh/kex.c
10
libssh/kex.c
@@ -408,7 +408,7 @@ int ssh_get_kex1(SSH_SESSION *session){
|
|||||||
}
|
}
|
||||||
ssh_say(3,"Got a SSH_SMSG_PUBLIC_KEY\n");
|
ssh_say(3,"Got a SSH_SMSG_PUBLIC_KEY\n");
|
||||||
if(buffer_get_data(session->in_buffer,session->server_kex.cookie,8)!=8){
|
if(buffer_get_data(session->in_buffer,session->server_kex.cookie,8)!=8){
|
||||||
ssh_set_error(NULL,SSH_FATAL,"Can't get cookie in buffer");
|
ssh_set_error(session,SSH_FATAL,"Can't get cookie in buffer");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
buffer_get_u32(session->in_buffer,&server_bits);
|
buffer_get_u32(session->in_buffer,&server_bits);
|
||||||
@@ -422,7 +422,7 @@ int ssh_get_kex1(SSH_SESSION *session){
|
|||||||
ko=buffer_get_u32(session->in_buffer,&supported_authentications_mask);
|
ko=buffer_get_u32(session->in_buffer,&supported_authentications_mask);
|
||||||
if((ko!=sizeof(u32)) || !host_mod || !host_exp || !server_mod || !server_exp){
|
if((ko!=sizeof(u32)) || !host_mod || !host_exp || !server_mod || !server_exp){
|
||||||
ssh_say(2,"Invalid SSH_SMSG_PUBLIC_KEY packet\n");
|
ssh_say(2,"Invalid SSH_SMSG_PUBLIC_KEY packet\n");
|
||||||
ssh_set_error(NULL,SSH_FATAL,"Invalid SSH_SMSG_PUBLIC_KEY packet");
|
ssh_set_error(session,SSH_FATAL,"Invalid SSH_SMSG_PUBLIC_KEY packet");
|
||||||
if(host_mod)
|
if(host_mod)
|
||||||
free(host_mod);
|
free(host_mod);
|
||||||
if(host_exp)
|
if(host_exp)
|
||||||
@@ -449,15 +449,15 @@ int ssh_get_kex1(SSH_SESSION *session){
|
|||||||
free(server_mod);
|
free(server_mod);
|
||||||
free(host_exp);
|
free(host_exp);
|
||||||
free(host_mod);
|
free(host_mod);
|
||||||
svr=publickey_from_string(serverkey);
|
svr=publickey_from_string(session, serverkey);
|
||||||
host=publickey_from_string(hostkey);
|
host=publickey_from_string(session, hostkey);
|
||||||
session->next_crypto->server_pubkey=string_copy(hostkey);
|
session->next_crypto->server_pubkey=string_copy(hostkey);
|
||||||
session->next_crypto->server_pubkey_type="ssh-rsa1";
|
session->next_crypto->server_pubkey_type="ssh-rsa1";
|
||||||
|
|
||||||
/* now, we must choose an encryption algo */
|
/* now, we must choose an encryption algo */
|
||||||
/* hardcode 3des */
|
/* hardcode 3des */
|
||||||
if(!(supported_ciphers_mask & (1<<SSH_CIPHER_3DES))){
|
if(!(supported_ciphers_mask & (1<<SSH_CIPHER_3DES))){
|
||||||
ssh_set_error(NULL,SSH_FATAL,"Remote server doesn't accept 3des");
|
ssh_set_error(session,SSH_FATAL,"Remote server doesn't accept 3des");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
packet_clear_out(session);
|
packet_clear_out(session);
|
||||||
|
@@ -937,7 +937,7 @@ int ssh_write_knownhost(SSH_SESSION *session){
|
|||||||
Be compatible --kv */
|
Be compatible --kv */
|
||||||
char *e_string, *n_string;
|
char *e_string, *n_string;
|
||||||
bignum e, n;
|
bignum e, n;
|
||||||
PUBLIC_KEY *key = publickey_from_string(pubkey);
|
PUBLIC_KEY *key = publickey_from_string(session, pubkey);
|
||||||
int rsa_size;
|
int rsa_size;
|
||||||
#ifdef HAVE_LIBGCRYPT
|
#ifdef HAVE_LIBGCRYPT
|
||||||
gcry_sexp_t sexp;
|
gcry_sexp_t sexp;
|
||||||
|
@@ -44,7 +44,7 @@ char *ssh_type_to_char(int type){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PUBLIC_KEY *publickey_make_dss(BUFFER *buffer){
|
PUBLIC_KEY *publickey_make_dss(SSH_SESSION *session, BUFFER *buffer){
|
||||||
STRING *p,*q,*g,*pubkey;
|
STRING *p,*q,*g,*pubkey;
|
||||||
PUBLIC_KEY *key=malloc(sizeof(PUBLIC_KEY));
|
PUBLIC_KEY *key=malloc(sizeof(PUBLIC_KEY));
|
||||||
key->type=TYPE_DSS;
|
key->type=TYPE_DSS;
|
||||||
@@ -55,7 +55,7 @@ PUBLIC_KEY *publickey_make_dss(BUFFER *buffer){
|
|||||||
pubkey=buffer_get_ssh_string(buffer);
|
pubkey=buffer_get_ssh_string(buffer);
|
||||||
buffer_free(buffer); /* we don't need it anymore */
|
buffer_free(buffer); /* we don't need it anymore */
|
||||||
if(!p || !q || !g || !pubkey){
|
if(!p || !q || !g || !pubkey){
|
||||||
ssh_set_error(NULL,SSH_FATAL,"Invalid DSA public key");
|
ssh_set_error(session,SSH_FATAL,"Invalid DSA public key");
|
||||||
if(p)
|
if(p)
|
||||||
free(p);
|
free(p);
|
||||||
if(q)
|
if(q)
|
||||||
@@ -68,7 +68,7 @@ PUBLIC_KEY *publickey_make_dss(BUFFER *buffer){
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#ifdef HAVE_LIBGCRYPT
|
#ifdef HAVE_LIBGCRYPT
|
||||||
gcry_sexp_build(&key->dsa_pub,NULL,"(public-key(dsa(p %b)(q %b)(g %b)(y %b)))",string_len(p),p->string,string_len(q),q->string,string_len(g),g->string,string_len(pubkey),pubkey->string);
|
gcry_sexp_build(&key->dsa_pub,session,"(public-key(dsa(p %b)(q %b)(g %b)(y %b)))",string_len(p),p->string,string_len(q),q->string,string_len(g),g->string,string_len(pubkey),pubkey->string);
|
||||||
#elif defined HAVE_LIBCRYPTO
|
#elif defined HAVE_LIBCRYPTO
|
||||||
key->dsa_pub=DSA_new();
|
key->dsa_pub=DSA_new();
|
||||||
key->dsa_pub->p=make_string_bn(p);
|
key->dsa_pub->p=make_string_bn(p);
|
||||||
@@ -83,7 +83,7 @@ PUBLIC_KEY *publickey_make_dss(BUFFER *buffer){
|
|||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
PUBLIC_KEY *publickey_make_rsa(BUFFER *buffer, char *type){
|
PUBLIC_KEY *publickey_make_rsa(SSH_SESSION *session, BUFFER *buffer, char *type){
|
||||||
STRING *e,*n;
|
STRING *e,*n;
|
||||||
PUBLIC_KEY *key=malloc(sizeof(PUBLIC_KEY));
|
PUBLIC_KEY *key=malloc(sizeof(PUBLIC_KEY));
|
||||||
if(!strcmp(type,"ssh-rsa"))
|
if(!strcmp(type,"ssh-rsa"))
|
||||||
@@ -95,7 +95,7 @@ PUBLIC_KEY *publickey_make_rsa(BUFFER *buffer, char *type){
|
|||||||
n=buffer_get_ssh_string(buffer);
|
n=buffer_get_ssh_string(buffer);
|
||||||
buffer_free(buffer); /* we don't need it anymore */
|
buffer_free(buffer); /* we don't need it anymore */
|
||||||
if(!e || !n){
|
if(!e || !n){
|
||||||
ssh_set_error(NULL,SSH_FATAL,"Invalid RSA public key");
|
ssh_set_error(session,SSH_FATAL,"Invalid RSA public key");
|
||||||
if(e)
|
if(e)
|
||||||
free(e);
|
free(e);
|
||||||
if(n)
|
if(n)
|
||||||
@@ -144,7 +144,7 @@ void publickey_free(PUBLIC_KEY *key){
|
|||||||
free(key);
|
free(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
PUBLIC_KEY *publickey_from_string(STRING *pubkey_s){
|
PUBLIC_KEY *publickey_from_string(SSH_SESSION *session, STRING *pubkey_s){
|
||||||
BUFFER *tmpbuf=buffer_new();
|
BUFFER *tmpbuf=buffer_new();
|
||||||
STRING *type_s;
|
STRING *type_s;
|
||||||
char *type;
|
char *type;
|
||||||
@@ -153,24 +153,24 @@ PUBLIC_KEY *publickey_from_string(STRING *pubkey_s){
|
|||||||
type_s=buffer_get_ssh_string(tmpbuf);
|
type_s=buffer_get_ssh_string(tmpbuf);
|
||||||
if(!type_s){
|
if(!type_s){
|
||||||
buffer_free(tmpbuf);
|
buffer_free(tmpbuf);
|
||||||
ssh_set_error(NULL,SSH_FATAL,"Invalid public key format");
|
ssh_set_error(session,SSH_FATAL,"Invalid public key format");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
type=string_to_char(type_s);
|
type=string_to_char(type_s);
|
||||||
free(type_s);
|
free(type_s);
|
||||||
if(!strcmp(type,"ssh-dss")){
|
if(!strcmp(type,"ssh-dss")){
|
||||||
free(type);
|
free(type);
|
||||||
return publickey_make_dss(tmpbuf);
|
return publickey_make_dss(session, tmpbuf);
|
||||||
}
|
}
|
||||||
if(!strcmp(type,"ssh-rsa")){
|
if(!strcmp(type,"ssh-rsa")){
|
||||||
free(type);
|
free(type);
|
||||||
return publickey_make_rsa(tmpbuf,"ssh-rsa");
|
return publickey_make_rsa(session, tmpbuf,"ssh-rsa");
|
||||||
}
|
}
|
||||||
if(!strcmp(type,"ssh-rsa1")){
|
if(!strcmp(type,"ssh-rsa1")){
|
||||||
free(type);
|
free(type);
|
||||||
return publickey_make_rsa(tmpbuf,"ssh-rsa1");
|
return publickey_make_rsa(session, tmpbuf,"ssh-rsa1");
|
||||||
}
|
}
|
||||||
ssh_set_error(NULL,SSH_FATAL,"unknown public key protocol %s",type);
|
ssh_set_error(session,SSH_FATAL,"unknown public key protocol %s",type);
|
||||||
buffer_free(tmpbuf);
|
buffer_free(tmpbuf);
|
||||||
free(type);
|
free(type);
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -428,7 +428,7 @@ STRING *signature_to_string(SIGNATURE *sign){
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* TODO : split this function in two so it becomes smaller */
|
/* TODO : split this function in two so it becomes smaller */
|
||||||
SIGNATURE *signature_from_string(STRING *signature,PUBLIC_KEY *pubkey,int needed_type){
|
SIGNATURE *signature_from_string(SSH_SESSION *session, STRING *signature,PUBLIC_KEY *pubkey,int needed_type){
|
||||||
#ifdef HAVE_LIBGCRYPT
|
#ifdef HAVE_LIBGCRYPT
|
||||||
gcry_sexp_t sig;
|
gcry_sexp_t sig;
|
||||||
#elif defined HAVE_LIBCRYPTO
|
#elif defined HAVE_LIBCRYPTO
|
||||||
@@ -444,7 +444,7 @@ SIGNATURE *signature_from_string(STRING *signature,PUBLIC_KEY *pubkey,int needed
|
|||||||
buffer_add_data(tmpbuf,signature->string,string_len(signature));
|
buffer_add_data(tmpbuf,signature->string,string_len(signature));
|
||||||
type_s=buffer_get_ssh_string(tmpbuf);
|
type_s=buffer_get_ssh_string(tmpbuf);
|
||||||
if(!type_s){
|
if(!type_s){
|
||||||
ssh_set_error(NULL,SSH_FATAL,"Invalid signature packet");
|
ssh_set_error(session,SSH_FATAL,"Invalid signature packet");
|
||||||
buffer_free(tmpbuf);
|
buffer_free(tmpbuf);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -453,7 +453,7 @@ SIGNATURE *signature_from_string(STRING *signature,PUBLIC_KEY *pubkey,int needed
|
|||||||
switch(needed_type){
|
switch(needed_type){
|
||||||
case TYPE_DSS:
|
case TYPE_DSS:
|
||||||
if(strcmp(type,"ssh-dss")){
|
if(strcmp(type,"ssh-dss")){
|
||||||
ssh_set_error(NULL,SSH_FATAL,"Invalid signature type : %s",type);
|
ssh_set_error(session,SSH_FATAL,"Invalid signature type : %s",type);
|
||||||
buffer_free(tmpbuf);
|
buffer_free(tmpbuf);
|
||||||
free(type);
|
free(type);
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -461,14 +461,14 @@ SIGNATURE *signature_from_string(STRING *signature,PUBLIC_KEY *pubkey,int needed
|
|||||||
break;
|
break;
|
||||||
case TYPE_RSA:
|
case TYPE_RSA:
|
||||||
if(strcmp(type,"ssh-rsa")){
|
if(strcmp(type,"ssh-rsa")){
|
||||||
ssh_set_error(NULL,SSH_FATAL,"Invalid signature type : %s",type);
|
ssh_set_error(session,SSH_FATAL,"Invalid signature type : %s",type);
|
||||||
buffer_free(tmpbuf);
|
buffer_free(tmpbuf);
|
||||||
free(type);
|
free(type);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ssh_set_error(NULL,SSH_FATAL,"Invalid signature type : %s",type);
|
ssh_set_error(session,SSH_FATAL,"Invalid signature type : %s",type);
|
||||||
free(type);
|
free(type);
|
||||||
buffer_free(tmpbuf);
|
buffer_free(tmpbuf);
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -520,7 +520,7 @@ SIGNATURE *signature_from_string(STRING *signature,PUBLIC_KEY *pubkey,int needed
|
|||||||
if(len>rsalen){
|
if(len>rsalen){
|
||||||
free(e);
|
free(e);
|
||||||
free(sign);
|
free(sign);
|
||||||
ssh_set_error(NULL,SSH_FATAL,"signature too big ! %d instead of %d",len,rsalen);
|
ssh_set_error(session,SSH_FATAL,"signature too big ! %d instead of %d",len,rsalen);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if(len<rsalen)
|
if(len<rsalen)
|
||||||
|
@@ -493,7 +493,7 @@ static int crypt_set_algorithms1(SSH_SESSION *session){
|
|||||||
while(ssh_ciphertab[i].name && strcmp(ssh_ciphertab[i].name,"3des-cbc-ssh1"))
|
while(ssh_ciphertab[i].name && strcmp(ssh_ciphertab[i].name,"3des-cbc-ssh1"))
|
||||||
++i;
|
++i;
|
||||||
if(!ssh_ciphertab[i].name){
|
if(!ssh_ciphertab[i].name){
|
||||||
ssh_set_error(NULL,SSH_FATAL,"cipher 3des-cbc-ssh1 not found !");
|
ssh_set_error(session,SSH_FATAL,"cipher 3des-cbc-ssh1 not found !");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
session->next_crypto->out_cipher=cipher_new(i);
|
session->next_crypto->out_cipher=cipher_new(i);
|
||||||
|
Reference in New Issue
Block a user