mirror of
https://git.libssh.org/projects/libssh.git
synced 2026-02-06 10:27:22 +09:00
New ssh_get_local_hostname()
Signed-off-by: Jakub Jelen <jjelen@redhat.com> Reviewed-by: Pavol Žáčik <pzacik@redhat.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
This commit is contained in:
@@ -45,6 +45,7 @@ extern "C" {
|
||||
/* gets the user home dir. */
|
||||
char *ssh_get_user_home_dir(ssh_session session);
|
||||
char *ssh_get_local_username(void);
|
||||
char *ssh_get_local_hostname(void);
|
||||
int ssh_file_readaccess_ok(const char *file);
|
||||
int ssh_dir_writeable(const char *path);
|
||||
|
||||
|
||||
19
src/gssapi.c
19
src/gssapi.c
@@ -198,7 +198,7 @@ int
|
||||
ssh_gssapi_handle_userauth(ssh_session session, const char *user,
|
||||
uint32_t n_oid, ssh_string *oids)
|
||||
{
|
||||
char hostname[NI_MAXHOST] = {0};
|
||||
char *hostname = NULL;
|
||||
OM_uint32 maj_stat, min_stat;
|
||||
size_t i;
|
||||
gss_OID_set supported; /* oids supported by server */
|
||||
@@ -210,14 +210,6 @@ ssh_gssapi_handle_userauth(ssh_session session, const char *user,
|
||||
int rc;
|
||||
char err_msg[SSH_ERRNO_MSG_MAX] = {0};
|
||||
|
||||
rc = gethostname(hostname, 64);
|
||||
if (rc != 0) {
|
||||
SSH_LOG(SSH_LOG_TRACE,
|
||||
"Error getting hostname: %s",
|
||||
ssh_strerror(errno, err_msg, SSH_ERRNO_MSG_MAX));
|
||||
return SSH_ERROR;
|
||||
}
|
||||
|
||||
/* Destroy earlier GSSAPI context if any */
|
||||
ssh_gssapi_free(session);
|
||||
rc = ssh_gssapi_init(session);
|
||||
@@ -284,7 +276,16 @@ ssh_gssapi_handle_userauth(ssh_session session, const char *user,
|
||||
return SSH_OK;
|
||||
}
|
||||
|
||||
hostname = ssh_get_local_hostname();
|
||||
if (hostname == NULL) {
|
||||
SSH_LOG(SSH_LOG_TRACE,
|
||||
"Error getting hostname: %s",
|
||||
ssh_strerror(errno, err_msg, SSH_ERRNO_MSG_MAX));
|
||||
return SSH_ERROR;
|
||||
}
|
||||
|
||||
rc = ssh_gssapi_import_name(session->gssapi, hostname);
|
||||
SAFE_FREE(hostname);
|
||||
if (rc != SSH_OK) {
|
||||
ssh_auth_reply_default(session, 0);
|
||||
gss_release_oid_set(&min_stat, &both_supported);
|
||||
|
||||
@@ -421,7 +421,7 @@ int ssh_server_gss_kex_process_init(ssh_session session, ssh_buffer packet)
|
||||
gss_name_t client_name = GSS_C_NO_NAME;
|
||||
OM_uint32 ret_flags = 0;
|
||||
gss_buffer_desc mic = GSS_C_EMPTY_BUFFER, msg = GSS_C_EMPTY_BUFFER;
|
||||
char hostname[NI_MAXHOST] = {0};
|
||||
char *hostname = NULL;
|
||||
char err_msg[SSH_ERRNO_MSG_MAX] = {0};
|
||||
|
||||
rc = ssh_buffer_unpack(packet, "S", &otoken);
|
||||
@@ -538,8 +538,8 @@ int ssh_server_gss_kex_process_init(ssh_session session, ssh_buffer packet)
|
||||
goto error;
|
||||
}
|
||||
|
||||
rc = gethostname(hostname, 64);
|
||||
if (rc != 0) {
|
||||
hostname = ssh_get_local_hostname();
|
||||
if (hostname == NULL) {
|
||||
SSH_LOG(SSH_LOG_TRACE,
|
||||
"Error getting hostname: %s",
|
||||
ssh_strerror(errno, err_msg, SSH_ERRNO_MSG_MAX));
|
||||
@@ -547,6 +547,7 @@ int ssh_server_gss_kex_process_init(ssh_session session, ssh_buffer packet)
|
||||
}
|
||||
|
||||
rc = ssh_gssapi_import_name(session->gssapi, hostname);
|
||||
SAFE_FREE(hostname);
|
||||
if (rc != SSH_OK) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -615,10 +615,10 @@ int ssh_publickey_to_file(ssh_session session,
|
||||
FILE *fp = NULL;
|
||||
char *user = NULL;
|
||||
char buffer[1024];
|
||||
char host[256];
|
||||
char *host = NULL;
|
||||
unsigned char *pubkey_64 = NULL;
|
||||
size_t len;
|
||||
int rc;
|
||||
|
||||
if(session==NULL)
|
||||
return SSH_ERROR;
|
||||
if(file==NULL || pubkey==NULL){
|
||||
@@ -636,8 +636,8 @@ int ssh_publickey_to_file(ssh_session session,
|
||||
return SSH_ERROR;
|
||||
}
|
||||
|
||||
rc = gethostname(host, sizeof(host));
|
||||
if (rc < 0) {
|
||||
host = ssh_get_local_hostname();
|
||||
if (host == NULL) {
|
||||
SAFE_FREE(user);
|
||||
SAFE_FREE(pubkey_64);
|
||||
return SSH_ERROR;
|
||||
@@ -651,6 +651,7 @@ int ssh_publickey_to_file(ssh_session session,
|
||||
|
||||
SAFE_FREE(pubkey_64);
|
||||
SAFE_FREE(user);
|
||||
SAFE_FREE(host);
|
||||
|
||||
SSH_LOG(SSH_LOG_RARE, "Trying to write public key file: %s", file);
|
||||
SSH_LOG(SSH_LOG_PACKET, "public key file content: %s", buffer);
|
||||
|
||||
17
src/misc.c
17
src/misc.c
@@ -1233,6 +1233,18 @@ char *ssh_path_expand_tilde(const char *d)
|
||||
return r;
|
||||
}
|
||||
|
||||
char *ssh_get_local_hostname(void)
|
||||
{
|
||||
char host[NI_MAXHOST] = {0};
|
||||
int rc;
|
||||
|
||||
rc = gethostname(host, sizeof(host));
|
||||
if (rc != 0) {
|
||||
return NULL;
|
||||
}
|
||||
return strdup(host);
|
||||
}
|
||||
|
||||
/** @internal
|
||||
* @brief expands a string in function of session options
|
||||
* @param[in] s Format string to expand. Known parameters:
|
||||
@@ -1249,7 +1261,6 @@ char *ssh_path_expand_tilde(const char *d)
|
||||
*/
|
||||
char *ssh_path_expand_escape(ssh_session session, const char *s)
|
||||
{
|
||||
char host[NI_MAXHOST] = {0};
|
||||
char *buf = NULL;
|
||||
char *r = NULL;
|
||||
char *x = NULL;
|
||||
@@ -1313,9 +1324,7 @@ char *ssh_path_expand_escape(ssh_session session, const char *s)
|
||||
x = ssh_get_local_username();
|
||||
break;
|
||||
case 'l':
|
||||
if (gethostname(host, sizeof(host) == 0)) {
|
||||
x = strdup(host);
|
||||
}
|
||||
x = ssh_get_local_hostname();
|
||||
break;
|
||||
case 'h':
|
||||
if (session->opts.host) {
|
||||
|
||||
@@ -2684,7 +2684,7 @@ int ssh_pki_export_pubkey_file(const ssh_key key,
|
||||
const char *filename)
|
||||
{
|
||||
char key_buf[MAX_LINE_SIZE];
|
||||
char host[256];
|
||||
char *host = NULL;
|
||||
char *b64_key = NULL;
|
||||
char *user = NULL;
|
||||
FILE *fp = NULL;
|
||||
@@ -2699,8 +2699,8 @@ int ssh_pki_export_pubkey_file(const ssh_key key,
|
||||
return SSH_ERROR;
|
||||
}
|
||||
|
||||
rc = gethostname(host, sizeof(host));
|
||||
if (rc < 0) {
|
||||
host = ssh_get_local_hostname();
|
||||
if (host == NULL) {
|
||||
free(user);
|
||||
return SSH_ERROR;
|
||||
}
|
||||
@@ -2708,6 +2708,7 @@ int ssh_pki_export_pubkey_file(const ssh_key key,
|
||||
rc = ssh_pki_export_pubkey_base64(key, &b64_key);
|
||||
if (rc < 0) {
|
||||
free(user);
|
||||
free(host);
|
||||
return SSH_ERROR;
|
||||
}
|
||||
|
||||
@@ -2718,6 +2719,7 @@ int ssh_pki_export_pubkey_file(const ssh_key key,
|
||||
user,
|
||||
host);
|
||||
free(user);
|
||||
free(host);
|
||||
free(b64_key);
|
||||
if (rc < 0) {
|
||||
return SSH_ERROR;
|
||||
|
||||
Reference in New Issue
Block a user