mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-08-08 19:02:06 +03:00
keyfiles: Make ssh_try_publickey_from_file() legacy.
This commit is contained in:
@@ -1530,84 +1530,6 @@ ssh_signature pki_do_sign_sessionid(const ssh_key key,
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Write a public key to a file.
|
||||
*
|
||||
* @param[in] session The ssh session to use.
|
||||
*
|
||||
* @param[in] file The filename to write the key into.
|
||||
*
|
||||
* @param[in] pubkey The public key to write.
|
||||
*
|
||||
* @param[in] type The type of the public key.
|
||||
*
|
||||
* @return 0 on success, -1 on error.
|
||||
*/
|
||||
int ssh_publickey_to_file(ssh_session session, const char *file,
|
||||
ssh_string pubkey, int type) {
|
||||
FILE *fp;
|
||||
char *user;
|
||||
char buffer[1024];
|
||||
char host[256];
|
||||
unsigned char *pubkey_64;
|
||||
size_t len;
|
||||
int rc;
|
||||
if(session==NULL)
|
||||
return SSH_ERROR;
|
||||
if(file==NULL || pubkey==NULL){
|
||||
ssh_set_error(session, SSH_FATAL, "Invalid parameters");
|
||||
return SSH_ERROR;
|
||||
}
|
||||
pubkey_64 = bin_to_base64(pubkey->string, ssh_string_len(pubkey));
|
||||
if (pubkey_64 == NULL) {
|
||||
return SSH_ERROR;
|
||||
}
|
||||
|
||||
user = ssh_get_local_username();
|
||||
if (user == NULL) {
|
||||
SAFE_FREE(pubkey_64);
|
||||
return SSH_ERROR;
|
||||
}
|
||||
|
||||
rc = gethostname(host, sizeof(host));
|
||||
if (rc < 0) {
|
||||
SAFE_FREE(user);
|
||||
SAFE_FREE(pubkey_64);
|
||||
return SSH_ERROR;
|
||||
}
|
||||
|
||||
snprintf(buffer, sizeof(buffer), "%s %s %s@%s\n",
|
||||
ssh_type_to_char(type),
|
||||
pubkey_64,
|
||||
user,
|
||||
host);
|
||||
|
||||
SAFE_FREE(pubkey_64);
|
||||
SAFE_FREE(user);
|
||||
|
||||
ssh_log(session, SSH_LOG_RARE, "Trying to write public key file: %s", file);
|
||||
ssh_log(session, SSH_LOG_PACKET, "public key file content: %s", buffer);
|
||||
|
||||
fp = fopen(file, "w+");
|
||||
if (fp == NULL) {
|
||||
ssh_set_error(session, SSH_REQUEST_DENIED,
|
||||
"Error opening %s: %s", file, strerror(errno));
|
||||
return SSH_ERROR;
|
||||
}
|
||||
|
||||
len = strlen(buffer);
|
||||
if (fwrite(buffer, len, 1, fp) != 1 || ferror(fp)) {
|
||||
ssh_set_error(session, SSH_REQUEST_DENIED,
|
||||
"Unable to write to %s", file);
|
||||
fclose(fp);
|
||||
unlink(file);
|
||||
return SSH_ERROR;
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
return SSH_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Try to read the public key from a given file.
|
||||
*
|
||||
|
Reference in New Issue
Block a user