aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2009-10-29 10:36:00 +0100
committerAris Adamantiadis <aris@0xbadc0de.be>2009-10-29 10:36:00 +0100
commit17f2645a32e6524c36b2f83831080eda378c12bf (patch)
treec562984b687ad75baa658761811ab76bcb922910
parent9f034aca9c848106d4fc03da9ca6ec140565413f (diff)
downloadlibssh-17f2645a32e6524c36b2f83831080eda378c12bf.tar.gz
libssh-17f2645a32e6524c36b2f83831080eda378c12bf.tar.xz
libssh-17f2645a32e6524c36b2f83831080eda378c12bf.zip
Fix server kex again
-rw-r--r--include/libssh/priv.h1
-rw-r--r--libssh/options.c2
-rw-r--r--libssh/server.c8
3 files changed, 6 insertions, 5 deletions
diff --git a/include/libssh/priv.h b/include/libssh/priv.h
index 7605fd5..c8bfee3 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 a46740c..a6b524a 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 0abb9fc..9de032f 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;
}
}