Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/Remmina/Remmina.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEspen Tveit <espen@tveit.io>2020-07-23 02:41:37 +0300
committerAntenore Gatta <antenore@simbiosi.org>2020-07-23 02:41:37 +0300
commit29c5dc10a2ec8d00b9b788dd8f15c31e2f825484 (patch)
tree2aadcfa4847ac72a99bb777cef5098488a7bb0bf /src
parent3ae30e73a184cb3d175c060323e91ec95bc4ae43 (diff)
Make local variables reusable (not prefixed with type). Format code using uncrustify. Add indication that URI may be used in remmina --help. Add some examples to man page.
Diffstat (limited to 'src')
-rw-r--r--src/remmina_sftp_plugin.c9
-rw-r--r--src/remmina_ssh.c28
-rw-r--r--src/remmina_ssh.h3
-rw-r--r--src/remmina_ssh_plugin.c10
4 files changed, 46 insertions, 4 deletions
diff --git a/src/remmina_sftp_plugin.c b/src/remmina_sftp_plugin.c
index 9cf216beb..bd75f660d 100644
--- a/src/remmina_sftp_plugin.c
+++ b/src/remmina_sftp_plugin.c
@@ -131,6 +131,15 @@ remmina_plugin_sftp_main_thread(gpointer data)
ret = remmina_ssh_auth_gui(ssh, gp, remminafile);
if (ret != REMMINA_SSH_AUTH_SUCCESS) {
+ if(ret == REMMINA_SSH_AUTH_RECONNECT) {
+ if (ssh->session) {
+ ssh_disconnect(ssh->session);
+ ssh_free(ssh->session);
+ ssh->session = NULL;
+ }
+ g_free(ssh->callback);
+ continue;
+ }
if (ret != REMMINA_SSH_AUTH_USERCANCEL)
remmina_plugin_service->protocol_plugin_set_error(gp, "%s", ssh->error);
break;
diff --git a/src/remmina_ssh.c b/src/remmina_ssh.c
index 3845a29ef..2aeb0f494 100644
--- a/src/remmina_ssh.c
+++ b/src/remmina_ssh.c
@@ -463,6 +463,7 @@ remmina_ssh_auth_gui(RemminaSSH *ssh, RemminaProtocolWidget *gp, RemminaFile *re
gchar *pwdfkey;
gchar *message;
gchar *current_pwd;
+ gchar *current_user;
gint ret;
size_t len;
guchar *pubkey;
@@ -635,12 +636,14 @@ remmina_ssh_auth_gui(RemminaSSH *ssh, RemminaProtocolWidget *gp, RemminaFile *re
/* Ask for user credentials. Username cannot be changed here,
* because we already sent it when opening the connection */
g_debug("Showing panel for password\n");
+ current_user = g_strdup(remmina_file_get_string(remminafile, ssh->is_tunnel ? "ssh_tunnel_username" : "username"));
ret = remmina_protocol_widget_panel_auth(gp,
(disablepasswordstoring ? 0 : REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD)
- | REMMINA_MESSAGE_PANEL_FLAG_USERNAME | REMMINA_MESSAGE_PANEL_FLAG_USERNAME_READONLY,
+ | REMMINA_MESSAGE_PANEL_FLAG_USERNAME
+ | (!ssh->is_tunnel ? 0 : REMMINA_MESSAGE_PANEL_FLAG_USERNAME_READONLY),
ssh->is_tunnel ? _("SSH tunnel credentials") : _("SSH credentials"),
- remmina_file_get_string(remminafile, ssh->is_tunnel ? "ssh_tunnel_username" : "username"),
- remmina_file_get_string(remminafile, pwdfkey),
+ current_user,
+ current_pwd,
NULL,
NULL);
if (ret == GTK_RESPONSE_OK) {
@@ -651,8 +654,27 @@ remmina_ssh_auth_gui(RemminaSSH *ssh, RemminaProtocolWidget *gp, RemminaFile *re
remmina_file_set_string(remminafile, pwdfkey, current_pwd);
else
remmina_file_set_string(remminafile, pwdfkey, NULL);
+
+ if(!ssh->is_tunnel) {
+ g_free(current_user);
+ current_user = remmina_protocol_widget_get_username(gp);
+ remmina_file_set_string(remminafile, "username", current_user);
+ if(ssh->user != NULL) {
+ g_free(ssh->user);
+ }
+ ssh->user = g_strdup(current_user);
+ if(ssh->password != NULL) {
+ g_free(ssh->password);
+ }
+ ssh->password = g_strdup(current_pwd);
+ g_free(current_user);
+ return REMMINA_SSH_AUTH_RECONNECT;
+ }
+ g_free(current_user);
+
} else {
g_free(current_pwd);
+ g_free(current_user);
return REMMINA_SSH_AUTH_USERCANCEL;
}
} else {
diff --git a/src/remmina_ssh.h b/src/remmina_ssh.h
index 024cef411..7742ae377 100644
--- a/src/remmina_ssh.h
+++ b/src/remmina_ssh.h
@@ -106,7 +106,8 @@ enum remmina_ssh_auth_result {
REMMINA_SSH_AUTH_SUCCESS,
REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT,
REMMINA_SSH_AUTH_USERCANCEL,
- REMMINA_SSH_AUTH_FATAL_ERROR
+ REMMINA_SSH_AUTH_FATAL_ERROR,
+ REMMINA_SSH_AUTH_RECONNECT
};
enum remmina_ssh_auth_result remmina_ssh_auth(RemminaSSH *ssh, const gchar *password, RemminaProtocolWidget *gp, RemminaFile *remminafile);
diff --git a/src/remmina_ssh_plugin.c b/src/remmina_ssh_plugin.c
index 061641fee..de533a20a 100644
--- a/src/remmina_ssh_plugin.c
+++ b/src/remmina_ssh_plugin.c
@@ -277,6 +277,16 @@ remmina_plugin_ssh_main_thread(gpointer data)
ret = remmina_ssh_auth_gui(ssh, gp, remminafile);
if (ret != REMMINA_SSH_AUTH_SUCCESS) {
+ if(ret == REMMINA_SSH_AUTH_RECONNECT) {
+ if (ssh->session) {
+ ssh_disconnect(ssh->session);
+ ssh_free(ssh->session);
+ ssh->session = NULL;
+ }
+ g_free(ssh->callback);
+ continue;
+ }
+
if (ret != REMMINA_SSH_AUTH_USERCANCEL)
remmina_plugin_service->protocol_plugin_set_error(gp, "%s", ssh->error);
break;