aboutsummaryrefslogtreecommitdiffstats
path: root/extcap
diff options
context:
space:
mode:
authorDario Lombardo <lomato@gmail.com>2018-11-09 17:41:36 +0100
committerAnders Broman <a.broman58@gmail.com>2018-11-14 04:57:48 +0000
commitcd0a98e221ad70798a9b0efecb82e5a49b0ed3b7 (patch)
tree7f4e1d59810513bf697a729df2200aa86c187a67 /extcap
parent3aec5e1a2882a04aae33207750e9053d5f73174b (diff)
ssh-base: support libssh config file.
It's operating system dependent, but the library takes care of it on different operating systems. Options are set with this precedence: - if user-provided, use it - if not, take the one from config file - (username only) if none in the config file, take the current user from OS Change-Id: I00dcc1c9a8613e6d1250b6404bf2100f6ccff7b7 Reviewed-on: https://code.wireshark.org/review/30558 Petri-Dish: Dario Lombardo <lomato@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'extcap')
-rw-r--r--extcap/ssh-base.c34
1 files changed, 23 insertions, 11 deletions
diff --git a/extcap/ssh-base.c b/extcap/ssh-base.c
index 4f07e6f15f..68732a8331 100644
--- a/extcap/ssh-base.c
+++ b/extcap/ssh-base.c
@@ -23,6 +23,8 @@ ssh_session create_ssh_connection(const char* hostname, const unsigned int port,
char** err_info)
{
ssh_session sshs;
+ gchar* user_set = NULL;
+ guint port_set;
/* Open session and set options */
sshs = ssh_new();
@@ -41,6 +43,13 @@ ssh_session create_ssh_connection(const char* hostname, const unsigned int port,
goto failure;
}
+ /* Load the configurations already present in the system configuration file. */
+ /* They will be overwritten by the user-provided configurations. */
+ if (ssh_options_parse_config(sshs, NULL) != 0) {
+ *err_info = g_strdup("Unable to load the configuration file");
+ goto failure;
+ }
+
if (port != 0) {
if (ssh_options_set(sshs, SSH_OPTIONS_PORT, &port)) {
*err_info = g_strdup_printf("Can't set the port: %d", port);
@@ -48,14 +57,6 @@ ssh_session create_ssh_connection(const char* hostname, const unsigned int port,
}
}
- if (!username)
- username = g_get_user_name();
-
- if (ssh_options_set(sshs, SSH_OPTIONS_USER, username)) {
- *err_info = g_strdup_printf("Can't set the username: %s", username);
- goto failure;
- }
-
if (proxycommand) {
if (ssh_options_set(sshs, SSH_OPTIONS_PROXYCOMMAND, proxycommand)) {
*err_info = g_strdup_printf("Can't set the ProxyCommand: %s", proxycommand);
@@ -63,12 +64,23 @@ ssh_session create_ssh_connection(const char* hostname, const unsigned int port,
}
}
- g_log(LOG_DOMAIN_CAPTURE_CHILD, G_LOG_LEVEL_INFO, "Opening ssh connection to %s@%s:%u", username, hostname, port);
+ if (username) {
+ if (ssh_options_set(sshs, SSH_OPTIONS_USER, username)) {
+ *err_info = g_strdup_printf("Can't set the username: %s", username);
+ goto failure;
+ }
+ }
+
+ ssh_options_get(sshs, SSH_OPTIONS_USER, &user_set);
+ ssh_options_get_port(sshs, &port_set);
+
+ g_log(LOG_DOMAIN_CAPTURE_CHILD, G_LOG_LEVEL_INFO, "Opening ssh connection to %s@%s:%u", user_set, hostname, port_set);
+
+ ssh_string_free_char(user_set);
/* Connect to server */
if (ssh_connect(sshs) != SSH_OK) {
- *err_info = g_strdup_printf("Error connecting to %s@%s:%u (%s)", username, hostname, port,
- ssh_get_error(sshs));
+ *err_info = g_strdup_printf("Connection error: %s", ssh_get_error(sshs));
goto failure;
}