[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 3/6] options: Allow use of host ECDSA key
[Thread Prev] | [Thread Next]
- Subject: [PATCH 3/6] options: Allow use of host ECDSA key
- From: Alan Dunn <amdunn@xxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Fri, 7 Mar 2014 08:13:21 -0600
- To: libssh@xxxxxxxxxx
- Cc: Alan Dunn <amdunn@xxxxxxxxx>
Signed-off-by: Alan Dunn <amdunn@xxxxxxxxx>
---
include/libssh/server.h | 3 ++-
src/options.c | 54 +++++++++++++++++++++++++++--------------------
2 files changed, 33 insertions(+), 24 deletions(-)
diff --git a/include/libssh/server.h b/include/libssh/server.h
index 9d095fe..a1b8074 100644
--- a/include/libssh/server.h
+++ b/include/libssh/server.h
@@ -44,7 +44,8 @@ enum ssh_bind_options_e {
SSH_BIND_OPTIONS_RSAKEY,
SSH_BIND_OPTIONS_BANNER,
SSH_BIND_OPTIONS_LOG_VERBOSITY,
- SSH_BIND_OPTIONS_LOG_VERBOSITY_STR
+ SSH_BIND_OPTIONS_LOG_VERBOSITY_STR,
+ SSH_BIND_OPTIONS_ECDSAKEY
};
typedef struct ssh_bind_struct* ssh_bind;
diff --git a/src/options.c b/src/options.c
index cdcbe7c..846ce36 100644
--- a/src/options.c
+++ b/src/options.c
@@ -1303,6 +1303,22 @@ static int ssh_bind_options_set_algo(ssh_bind sshbind, int algo,
return 0;
}
+static int ssh_bind_set_key(ssh_bind sshbind, char **key_loc,
+ const void *value) {
+ if (value == NULL) {
+ ssh_set_error_invalid(sshbind);
+ return -1;
+ } else {
+ SAFE_FREE(*key_loc);
+ *key_loc = strdup(value);
+ if (*key_loc == NULL) {
+ ssh_set_error_oom(sshbind);
+ return -1;
+ }
+ }
+ return 0;
+}
+
/**
* @brief This function can set all possible ssh bind options.
*
@@ -1361,7 +1377,7 @@ static int ssh_bind_options_set_algo(ssh_bind sshbind, int algo,
int ssh_bind_options_set(ssh_bind sshbind, enum ssh_bind_options_e type,
const void *value) {
char *p, *q;
- int i;
+ int i, rc;
if (sshbind == NULL) {
return -1;
@@ -1445,31 +1461,23 @@ int ssh_bind_options_set(ssh_bind sshbind, enum ssh_bind_options_e type,
}
break;
case SSH_BIND_OPTIONS_DSAKEY:
- if (value == NULL) {
- ssh_set_error_invalid(sshbind);
- return -1;
- } else {
- SAFE_FREE(sshbind->dsakey);
- sshbind->dsakey = strdup(value);
- if (sshbind->dsakey == NULL) {
- ssh_set_error_oom(sshbind);
- return -1;
+ rc = ssh_bind_set_key(sshbind, &sshbind->dsakey, value);
+ if (rc < 0) {
+ return -1;
}
- }
- break;
+ break;
case SSH_BIND_OPTIONS_RSAKEY:
- if (value == NULL) {
- ssh_set_error_invalid(sshbind);
- return -1;
- } else {
- SAFE_FREE(sshbind->rsakey);
- sshbind->rsakey = strdup(value);
- if (sshbind->rsakey == NULL) {
- ssh_set_error_oom(sshbind);
- return -1;
+ rc = ssh_bind_set_key(sshbind, &sshbind->rsakey, value);
+ if (rc < 0) {
+ return -1;
}
- }
- break;
+ break;
+ case SSH_BIND_OPTIONS_ECDSAKEY:
+ rc = ssh_bind_set_key(sshbind, &sshbind->ecdsakey, value);
+ if (rc < 0) {
+ return -1;
+ }
+ break;
case SSH_BIND_OPTIONS_BANNER:
if (value == NULL) {
ssh_set_error_invalid(sshbind);
--
1.7.9.5
| [PATCH 0/6] Fix ability to use ECDSA keys | Alan Dunn <amdunn@xxxxxxxxx> |