mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-22 20:36:50 +03:00
Fix: sftp: password ask too often if hostname was bring from ~/.ssh/config file
Signed-off-by: Slava Zanko <slavazanko@gmail.com>
This commit is contained in:
parent
f2c94d53d2
commit
cb08c1d0bf
@ -1,11 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
GLIB - Library of useful routines for C programming
|
GLIB - Library of useful routines for C programming
|
||||||
|
|
||||||
Copyright (C) 2009, 2011
|
Copyright (C) 2009, 2011, 2013
|
||||||
The Free Software Foundation, Inc.
|
The Free Software Foundation, Inc.
|
||||||
|
|
||||||
Written by:
|
Written by:
|
||||||
Slava Zanko <slavazanko@gmail.com>, 2009.
|
Slava Zanko <slavazanko@gmail.com>, 2009, 2013.
|
||||||
|
|
||||||
This file is part of the Midnight Commander.
|
This file is part of the Midnight Commander.
|
||||||
|
|
||||||
@ -31,6 +31,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "glibcompat.h"
|
#include "glibcompat.h"
|
||||||
@ -68,3 +69,30 @@ g_unichar_iszerowidth (gunichar c)
|
|||||||
#endif /* ! GLIB_CHECK_VERSION (2, 13, 0) */
|
#endif /* ! GLIB_CHECK_VERSION (2, 13, 0) */
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#if ! GLIB_CHECK_VERSION (2, 16, 0)
|
||||||
|
/**
|
||||||
|
* g_strcmp0:
|
||||||
|
* @str1: (allow-none): a C string or %NULL
|
||||||
|
* @str2: (allow-none): another C string or %NULL
|
||||||
|
*
|
||||||
|
* Compares @str1 and @str2 like strcmp(). Handles %NULL
|
||||||
|
* gracefully by sorting it before non-%NULL strings.
|
||||||
|
* Comparing two %NULL pointers returns 0.
|
||||||
|
*
|
||||||
|
* Returns: an integer less than, equal to, or greater than zero, if @str1 is <, == or > than @str2.
|
||||||
|
*
|
||||||
|
* Since: 2.16
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
g_strcmp0 (const char *str1, const char *str2)
|
||||||
|
{
|
||||||
|
if (!str1)
|
||||||
|
return -(str1 != str2);
|
||||||
|
if (!str2)
|
||||||
|
return str1 != str2;
|
||||||
|
return strcmp (str1, str2);
|
||||||
|
}
|
||||||
|
#endif /* ! GLIB_CHECK_VERSION (2, 16, 0) */
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
@ -15,6 +15,10 @@
|
|||||||
gboolean g_unichar_iszerowidth (gunichar);
|
gboolean g_unichar_iszerowidth (gunichar);
|
||||||
#endif /* ! GLIB_CHECK_VERSION (2, 13, 0) */
|
#endif /* ! GLIB_CHECK_VERSION (2, 13, 0) */
|
||||||
|
|
||||||
|
#if ! GLIB_CHECK_VERSION (2, 16, 0)
|
||||||
|
int g_strcmp0 (const char *str1, const char *str2);
|
||||||
|
#endif /* ! GLIB_CHECK_VERSION (2, 16, 0) */
|
||||||
|
|
||||||
/*** inline functions ****************************************************************************/
|
/*** inline functions ****************************************************************************/
|
||||||
|
|
||||||
#endif /* MC_GLIBCOMPAT_H */
|
#endif /* MC_GLIBCOMPAT_H */
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
/* Virtual File System: SFTP file system.
|
/* Virtual File System: SFTP file system.
|
||||||
The internal functions: connections
|
The internal functions: connections
|
||||||
|
|
||||||
Copyright (C) 2011
|
Copyright (C) 2011, 2013
|
||||||
The Free Software Foundation, Inc.
|
The Free Software Foundation, Inc.
|
||||||
|
|
||||||
Written by:
|
Written by:
|
||||||
Ilia Maslakov <il.smind@gmail.com>, 2011
|
Ilia Maslakov <il.smind@gmail.com>, 2011
|
||||||
Slava Zanko <slavazanko@gmail.com>, 2011, 2012
|
Slava Zanko <slavazanko@gmail.com>, 2011, 2012, 2013
|
||||||
|
|
||||||
This file is part of the Midnight Commander.
|
This file is part of the Midnight Commander.
|
||||||
|
|
||||||
@ -437,6 +437,7 @@ sftpfs_close_connection (struct vfs_s_super *super, const char *shutdown_message
|
|||||||
if (super_data == NULL)
|
if (super_data == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
vfs_path_element_free (super_data->original_connection_info);
|
||||||
if (super_data->agent != NULL)
|
if (super_data->agent != NULL)
|
||||||
{
|
{
|
||||||
libssh2_agent_disconnect (super_data->agent);
|
libssh2_agent_disconnect (super_data->agent);
|
||||||
|
@ -43,6 +43,7 @@ typedef struct
|
|||||||
|
|
||||||
int socket_handle;
|
int socket_handle;
|
||||||
const char *fingerprint;
|
const char *fingerprint;
|
||||||
|
vfs_path_element_t *original_connection_info;
|
||||||
} sftpfs_super_data_t;
|
} sftpfs_super_data_t;
|
||||||
|
|
||||||
/*** global variables defined in .c file *********************************************************/
|
/*** global variables defined in .c file *********************************************************/
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
/* Virtual File System: SFTP file system.
|
/* Virtual File System: SFTP file system.
|
||||||
The VFS subclass functions
|
The VFS subclass functions
|
||||||
|
|
||||||
Copyright (C) 2011
|
Copyright (C) 2011, 2013
|
||||||
The Free Software Foundation, Inc.
|
The Free Software Foundation, Inc.
|
||||||
|
|
||||||
Written by:
|
Written by:
|
||||||
Ilia Maslakov <il.smind@gmail.com>, 2011
|
Ilia Maslakov <il.smind@gmail.com>, 2011
|
||||||
Slava Zanko <slavazanko@gmail.com>, 2011, 2012
|
Slava Zanko <slavazanko@gmail.com>, 2011, 2012, 2013
|
||||||
|
|
||||||
This file is part of the Midnight Commander.
|
This file is part of the Midnight Commander.
|
||||||
|
|
||||||
@ -58,29 +58,17 @@ static gboolean
|
|||||||
sftpfs_cb_is_equal_connection (const vfs_path_element_t * vpath_element, struct vfs_s_super *super,
|
sftpfs_cb_is_equal_connection (const vfs_path_element_t * vpath_element, struct vfs_s_super *super,
|
||||||
const vfs_path_t * vpath, void *cookie)
|
const vfs_path_t * vpath, void *cookie)
|
||||||
{
|
{
|
||||||
int port;
|
|
||||||
char *user_name;
|
|
||||||
int result;
|
int result;
|
||||||
|
vfs_path_element_t *orig_connect_info;
|
||||||
|
|
||||||
(void) vpath;
|
(void) vpath;
|
||||||
(void) cookie;
|
(void) cookie;
|
||||||
|
|
||||||
if (vpath_element->user != NULL)
|
orig_connect_info = ((sftpfs_super_data_t *) super->data)->original_connection_info;
|
||||||
user_name = vpath_element->user;
|
|
||||||
else
|
|
||||||
user_name = vfs_get_local_username ();
|
|
||||||
|
|
||||||
if (vpath_element->port != 0)
|
result = ((g_strcmp0 (vpath_element->host, orig_connect_info->host) == 0)
|
||||||
port = vpath_element->port;
|
&& (g_strcmp0 (vpath_element->user, orig_connect_info->user) == 0)
|
||||||
else
|
&& (vpath_element->port == orig_connect_info->port));
|
||||||
port = SFTP_DEFAULT_PORT;
|
|
||||||
|
|
||||||
result = ((strcmp (vpath_element->host, super->path_element->host) == 0)
|
|
||||||
&& (strcmp (user_name, super->path_element->user) == 0)
|
|
||||||
&& (port == super->path_element->port));
|
|
||||||
|
|
||||||
if (user_name != vpath_element->user)
|
|
||||||
g_free (user_name);
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -100,6 +88,7 @@ sftpfs_cb_open_connection (struct vfs_s_super *super,
|
|||||||
const vfs_path_t * vpath, const vfs_path_element_t * vpath_element)
|
const vfs_path_t * vpath, const vfs_path_element_t * vpath_element)
|
||||||
{
|
{
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
sftpfs_super_data_t *sftpfs_super_data;
|
||||||
int ret_value;
|
int ret_value;
|
||||||
|
|
||||||
(void) vpath;
|
(void) vpath;
|
||||||
@ -111,7 +100,9 @@ sftpfs_cb_open_connection (struct vfs_s_super *super,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
super->data = g_new0 (sftpfs_super_data_t, 1);
|
sftpfs_super_data = g_new0 (sftpfs_super_data_t, 1);
|
||||||
|
sftpfs_super_data->original_connection_info = vfs_path_element_clone (vpath_element);
|
||||||
|
super->data = sftpfs_super_data;
|
||||||
super->path_element = vfs_path_element_clone (vpath_element);
|
super->path_element = vfs_path_element_clone (vpath_element);
|
||||||
|
|
||||||
sftpfs_fill_connection_data_from_config (super, &error);
|
sftpfs_fill_connection_data_from_config (super, &error);
|
||||||
|
Loading…
Reference in New Issue
Block a user