Add error checking to publickey_from_string().
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@432 7dcaeef0-15fb-0310-b436-a5af3365683c
Этот коммит содержится в:
родитель
29c57bab33
Коммит
89670904c0
@ -247,36 +247,51 @@ void publickey_free(PUBLIC_KEY *key) {
|
|||||||
SAFE_FREE(key);
|
SAFE_FREE(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
PUBLIC_KEY *publickey_from_string(SSH_SESSION *session, STRING *pubkey_s){
|
PUBLIC_KEY *publickey_from_string(SSH_SESSION *session, STRING *pubkey_s) {
|
||||||
BUFFER *tmpbuf=buffer_new();
|
BUFFER *tmpbuf = NULL;
|
||||||
STRING *type_s;
|
STRING *type_s = NULL;
|
||||||
char *type;
|
char *type = NULL;
|
||||||
|
|
||||||
buffer_add_data(tmpbuf,pubkey_s->string,string_len(pubkey_s));
|
tmpbuf = buffer_new();
|
||||||
type_s=buffer_get_ssh_string(tmpbuf);
|
if (tmpbuf == NULL) {
|
||||||
if(!type_s){
|
|
||||||
buffer_free(tmpbuf);
|
|
||||||
ssh_set_error(session,SSH_FATAL,"Invalid public key format");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
type=string_to_char(type_s);
|
|
||||||
free(type_s);
|
|
||||||
if(!strcmp(type,"ssh-dss")){
|
|
||||||
free(type);
|
|
||||||
return publickey_make_dss(session, tmpbuf);
|
|
||||||
}
|
|
||||||
if(!strcmp(type,"ssh-rsa")){
|
|
||||||
free(type);
|
|
||||||
return publickey_make_rsa(session, tmpbuf,"ssh-rsa");
|
|
||||||
}
|
|
||||||
if(!strcmp(type,"ssh-rsa1")){
|
|
||||||
free(type);
|
|
||||||
return publickey_make_rsa(session, tmpbuf,"ssh-rsa1");
|
|
||||||
}
|
|
||||||
ssh_set_error(session,SSH_FATAL,"unknown public key protocol %s",type);
|
|
||||||
buffer_free(tmpbuf);
|
|
||||||
free(type);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buffer_add_data(tmpbuf, pubkey_s->string, string_len(pubkey_s)) < 0) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
type_s = buffer_get_ssh_string(tmpbuf);
|
||||||
|
if (type_s == NULL) {
|
||||||
|
ssh_set_error(session,SSH_FATAL,"Invalid public key format");
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
type = string_to_char(type_s);
|
||||||
|
string_free(type_s);
|
||||||
|
|
||||||
|
if (type == NULL) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(strcmp(type, "ssh-dss") == 0) {
|
||||||
|
SAFE_FREE(type);
|
||||||
|
return publickey_make_dss(session, tmpbuf);
|
||||||
|
}
|
||||||
|
if(strcmp(type,"ssh-rsa") == 0) {
|
||||||
|
SAFE_FREE(type);
|
||||||
|
return publickey_make_rsa(session, tmpbuf,"ssh-rsa");
|
||||||
|
}
|
||||||
|
if (strcmp(type,"ssh-rsa1") == 0) {
|
||||||
|
SAFE_FREE(type);
|
||||||
|
return publickey_make_rsa(session, tmpbuf,"ssh-rsa1");
|
||||||
|
}
|
||||||
|
|
||||||
|
ssh_set_error(session, SSH_FATAL, "Unknown public key protocol %s", type);
|
||||||
|
error:
|
||||||
|
buffer_free(tmpbuf);
|
||||||
|
SAFE_FREE(type);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** \brief Makes a PUBLIC_KEY object out of a PRIVATE_KEY object
|
/** \brief Makes a PUBLIC_KEY object out of a PRIVATE_KEY object
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user