diff options
author | Aris Adamantiadis <aris@0xbadc0de.be> | 2009-10-29 10:36:00 +0100 |
---|---|---|
committer | Aris Adamantiadis <aris@0xbadc0de.be> | 2009-10-29 10:36:00 +0100 |
commit | 17f2645a32e6524c36b2f83831080eda378c12bf (patch) | |
tree | c562984b687ad75baa658761811ab76bcb922910 | |
parent | 9f034aca9c848106d4fc03da9ca6ec140565413f (diff) | |
download | libssh-17f2645a32e6524c36b2f83831080eda378c12bf.tar.gz libssh-17f2645a32e6524c36b2f83831080eda378c12bf.tar.xz libssh-17f2645a32e6524c36b2f83831080eda378c12bf.zip |
Fix server kex again
-rw-r--r-- | include/libssh/priv.h | 1 | ||||
-rw-r--r-- | libssh/options.c | 2 | ||||
-rw-r--r-- | libssh/server.c | 8 |
3 files changed, 6 insertions, 5 deletions
diff --git a/include/libssh/priv.h b/include/libssh/priv.h index 7605fd5b..c8bfee35 100644 --- a/include/libssh/priv.h +++ b/include/libssh/priv.h @@ -218,6 +218,7 @@ int match_hostname(const char *host, const char *pattern, unsigned int len); /* options.c */ char *dir_expand_dup(ssh_session session, const char *value, int allowsshdir); +int ssh_options_set_algo(ssh_session session, int algo, const char *list); /** Free memory space */ #define SAFE_FREE(x) do { if ((x) != NULL) {free(x); x=NULL;} } while(0) diff --git a/libssh/options.c b/libssh/options.c index a46740c7..a6b524a0 100644 --- a/libssh/options.c +++ b/libssh/options.c @@ -140,7 +140,7 @@ static char *get_username_from_uid(ssh_session session, uid_t uid){ } #endif -static int ssh_options_set_algo(ssh_session session, int algo, +int ssh_options_set_algo(ssh_session session, int algo, const char *list) { if (!verify_existing_algo(algo, list)) { ssh_set_error(session, SSH_REQUEST_DENIED, diff --git a/libssh/server.c b/libssh/server.c index 0abb9fc5..9de032f2 100644 --- a/libssh/server.c +++ b/libssh/server.c @@ -197,7 +197,7 @@ int ssh_bind_accept(ssh_bind sshbind, ssh_session session) { ssh_set_error(sshbind, SSH_FATAL,"session is null"); return SSH_ERROR; } - if (sshbind->dsakey == NULL || sshbind->rsakey == NULL) { + if (sshbind->dsakey == NULL && sshbind->rsakey == NULL) { ssh_set_error(sshbind, SSH_FATAL, "DSA or RSA host key file must be set before accept()"); return SSH_ERROR; @@ -315,16 +315,16 @@ static int server_set_kex(ssh_session session) { ZERO_STRUCTP(server); ssh_get_random(server->cookie, 16, 0); if (session->dsa_key != NULL && session->rsa_key != NULL) { - if (ssh_options_set(session, SSH_BIND_OPTIONS_HOSTKEY, + if (ssh_options_set_algo(session, SSH_HOSTKEYS, "ssh-dss,ssh-rsa") < 0) { return -1; } } else if (session->dsa_key != NULL) { - if (ssh_options_set(session, SSH_BIND_OPTIONS_HOSTKEY, "ssh-dss") < 0) { + if (ssh_options_set_algo(session, SSH_HOSTKEYS, "ssh-dss") < 0) { return -1; } } else { - if (ssh_options_set(session, SSH_BIND_OPTIONS_HOSTKEY, "ssh-rsa") < 0) { + if (ssh_options_set_algo(session, SSH_HOSTKEYS, "ssh-rsa") < 0) { return -1; } } |