summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/legacy.c65
-rw-r--r--src/pki_gcrypt.c63
2 files changed, 65 insertions, 63 deletions
diff --git a/src/legacy.c b/src/legacy.c
index 9550834..ac98478 100644
--- a/src/legacy.c
+++ b/src/legacy.c
@@ -572,6 +572,71 @@ int ssh_publickey_to_file(ssh_session session,
return SSH_OK;
}
+int ssh_try_publickey_from_file(ssh_session session,
+ const char *keyfile,
+ ssh_string *publickey,
+ int *type) {
+ char *pubkey_file;
+ size_t len;
+ ssh_string pubkey_string;
+ int pubkey_type;
+
+ if (session == NULL || keyfile == NULL || publickey == NULL || type == NULL) {
+ return -1;
+ }
+
+ if (session->sshdir == NULL) {
+ if (ssh_options_apply(session) < 0) {
+ return -1;
+ }
+ }
+
+ ssh_log(session, SSH_LOG_PACKET, "Trying to open privatekey %s", keyfile);
+ if (!ssh_file_readaccess_ok(keyfile)) {
+ ssh_log(session, SSH_LOG_PACKET, "Failed to open privatekey %s", keyfile);
+ return -1;
+ }
+
+ len = strlen(keyfile) + 5;
+ pubkey_file = malloc(len);
+ if (pubkey_file == NULL) {
+ return -1;
+ }
+ snprintf(pubkey_file, len, "%s.pub", keyfile);
+
+ ssh_log(session, SSH_LOG_PACKET, "Trying to open publickey %s",
+ pubkey_file);
+ if (!ssh_file_readaccess_ok(pubkey_file)) {
+ ssh_log(session, SSH_LOG_PACKET, "Failed to open publickey %s",
+ pubkey_file);
+ SAFE_FREE(pubkey_file);
+ return 1;
+ }
+
+ ssh_log(session, SSH_LOG_PACKET, "Success opening public and private key");
+
+ /*
+ * We are sure both the private and public key file is readable. We return
+ * the public as a string, and the private filename as an argument
+ */
+ pubkey_string = publickey_from_file(session, pubkey_file, &pubkey_type);
+ if (pubkey_string == NULL) {
+ ssh_log(session, SSH_LOG_PACKET,
+ "Wasn't able to open public key file %s: %s",
+ pubkey_file,
+ ssh_get_error(session));
+ SAFE_FREE(pubkey_file);
+ return -1;
+ }
+
+ SAFE_FREE(pubkey_file);
+
+ *publickey = pubkey_string;
+ *type = pubkey_type;
+
+ return 0;
+}
+
/****************************************************************************
* SERVER SUPPORT
****************************************************************************/
diff --git a/src/pki_gcrypt.c b/src/pki_gcrypt.c
index 9e2bd44..4935dee 100644
--- a/src/pki_gcrypt.c
+++ b/src/pki_gcrypt.c
@@ -1544,69 +1544,6 @@ ssh_signature pki_do_sign_sessionid(const ssh_key key,
* @return 0 on success, -1 on error or the private key doesn't
* exist, 1 if the public key doesn't exist.
*/
-int ssh_try_publickey_from_file(ssh_session session, const char *keyfile,
- ssh_string *publickey, int *type) {
- char *pubkey_file;
- size_t len;
- ssh_string pubkey_string;
- int pubkey_type;
-
- if (session == NULL || keyfile == NULL || publickey == NULL || type == NULL) {
- return -1;
- }
-
- if (session->sshdir == NULL) {
- if (ssh_options_apply(session) < 0) {
- return -1;
- }
- }
-
- ssh_log(session, SSH_LOG_PACKET, "Trying to open privatekey %s", keyfile);
- if (!ssh_file_readaccess_ok(keyfile)) {
- ssh_log(session, SSH_LOG_PACKET, "Failed to open privatekey %s", keyfile);
- return -1;
- }
-
- len = strlen(keyfile) + 5;
- pubkey_file = malloc(len);
- if (pubkey_file == NULL) {
- return -1;
- }
- snprintf(pubkey_file, len, "%s.pub", keyfile);
-
- ssh_log(session, SSH_LOG_PACKET, "Trying to open publickey %s",
- pubkey_file);
- if (!ssh_file_readaccess_ok(pubkey_file)) {
- ssh_log(session, SSH_LOG_PACKET, "Failed to open publickey %s",
- pubkey_file);
- SAFE_FREE(pubkey_file);
- return 1;
- }
-
- ssh_log(session, SSH_LOG_PACKET, "Success opening public and private key");
-
- /*
- * We are sure both the private and public key file is readable. We return
- * the public as a string, and the private filename as an argument
- */
- pubkey_string = publickey_from_file(session, pubkey_file, &pubkey_type);
- if (pubkey_string == NULL) {
- ssh_log(session, SSH_LOG_PACKET,
- "Wasn't able to open public key file %s: %s",
- pubkey_file,
- ssh_get_error(session));
- SAFE_FREE(pubkey_file);
- return -1;
- }
-
- SAFE_FREE(pubkey_file);
-
- *publickey = pubkey_string;
- *type = pubkey_type;
-
- return 0;
-}
-
ssh_string try_publickey_from_file(ssh_session session, struct ssh_keys_struct keytab,
char **privkeyfile, int *type) {
const char *priv;