1
1

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
Этот коммит содержится в:
Andreas Schneider 2009-04-08 13:11:26 +00:00
родитель 29c57bab33
Коммит 89670904c0

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

@ -247,35 +247,50 @@ 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; return NULL;
} }
type=string_to_char(type_s);
free(type_s); if (buffer_add_data(tmpbuf, pubkey_s->string, string_len(pubkey_s)) < 0) {
if(!strcmp(type,"ssh-dss")){ goto error;
free(type); }
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); return publickey_make_dss(session, tmpbuf);
} }
if(!strcmp(type,"ssh-rsa")){ if(strcmp(type,"ssh-rsa") == 0) {
free(type); SAFE_FREE(type);
return publickey_make_rsa(session, tmpbuf,"ssh-rsa"); return publickey_make_rsa(session, tmpbuf,"ssh-rsa");
} }
if(!strcmp(type,"ssh-rsa1")){ if (strcmp(type,"ssh-rsa1") == 0) {
free(type); SAFE_FREE(type);
return publickey_make_rsa(session, tmpbuf,"ssh-rsa1"); return publickey_make_rsa(session, tmpbuf,"ssh-rsa1");
} }
ssh_set_error(session,SSH_FATAL,"unknown public key protocol %s",type);
ssh_set_error(session, SSH_FATAL, "Unknown public key protocol %s", type);
error:
buffer_free(tmpbuf); buffer_free(tmpbuf);
free(type); SAFE_FREE(type);
return NULL; return NULL;
} }