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
diff options
context:
space:
mode:
authorGiovanni Panozzo <giovanni@panozzo.it>2014-08-17 01:07:52 +0400
committerGiovanni Panozzo <giovanni@panozzo.it>2014-08-17 01:07:52 +0400
commitecbedf5280719683a0685e50e419f29f3a6038ad (patch)
tree234cc9acba508f399284ab46507b4334965fbb80 /remmina-plugins/rdp
parent58e868f49030680d46cc9ca09ab11046d1cac1bf (diff)
Fix password not saved in RDP auth dialog, also fixes #247
Diffstat (limited to 'remmina-plugins/rdp')
-rw-r--r--remmina-plugins/rdp/rdp_plugin.c67
1 files changed, 45 insertions, 22 deletions
diff --git a/remmina-plugins/rdp/rdp_plugin.c b/remmina-plugins/rdp/rdp_plugin.c
index 0e59c6f8e..bf854b204 100644
--- a/remmina-plugins/rdp/rdp_plugin.c
+++ b/remmina-plugins/rdp/rdp_plugin.c
@@ -47,6 +47,7 @@
#include <freerdp/constants.h>
#include <freerdp/client/cliprdr.h>
#include <freerdp/client/channels.h>
+#include <freerdp/error.h>
#include <winpr/memory.h>
#define REMMINA_RDP_FEATURE_TOOL_REFRESH 1
@@ -351,13 +352,16 @@ static BOOL remmina_rdp_post_connect(freerdp* instance)
static BOOL remmina_rdp_authenticate(freerdp* instance, char** username, char** password, char** domain)
{
- gchar* s;
+ gchar *s_username, *s_password, *s_domain;
gint ret;
rfContext* rfi;
RemminaProtocolWidget* gp;
+ gboolean save;
+ RemminaFile* remminafile;
rfi = (rfContext*) instance->context;
gp = rfi->protocol_widget;
+ remminafile = remmina_plugin_service->protocol_plugin_get_file(gp);
THREADS_ENTER
ret = remmina_plugin_service->protocol_plugin_init_authuserpwd(gp, TRUE);
@@ -365,29 +369,32 @@ static BOOL remmina_rdp_authenticate(freerdp* instance, char** username, char**
if (ret == GTK_RESPONSE_OK)
{
- s = remmina_plugin_service->protocol_plugin_init_get_username(gp);
-
- if (s)
- {
- rfi->settings->Username = strdup(s);
- g_free(s);
- }
+ s_username = remmina_plugin_service->protocol_plugin_init_get_username(gp);
+ if (s_username) rfi->settings->Username = strdup(s_username);
- s = remmina_plugin_service->protocol_plugin_init_get_password(gp);
+ s_password = remmina_plugin_service->protocol_plugin_init_get_password(gp);
+ if (s_password) rfi->settings->Password = strdup(s_password);
- if (s)
+ s_domain = remmina_plugin_service->protocol_plugin_init_get_domain(gp);
+ if (s_domain) rfi->settings->Domain = strdup(s_domain);
+
+ save = remmina_plugin_service->protocol_plugin_init_get_savepassword(gp);
+ if (save)
{
- rfi->settings->Password = strdup(s);
- g_free(s);
- }
-
- s = remmina_plugin_service->protocol_plugin_init_get_domain(gp);
-
- if (s)
- {
- rfi->settings->Domain = strdup(s);
- g_free(s);
+ // User has requested to save password. We put all the new cretentials
+ // into remminafile->settings. They will be saved later, when disconnecting, by
+ // remmina_connection_object_on_disconnect of remmina_connection_window.c
+ // (this operation should be called "save credentials" and not "save password")
+
+ remmina_plugin_service->file_set_string( remminafile, "username", s_username );
+ remmina_plugin_service->file_set_string( remminafile, "password", s_password );
+ remmina_plugin_service->file_set_string( remminafile, "domain", s_domain );
+
}
+
+ if ( s_username ) g_free( s_username );
+ if ( s_password ) g_free( s_password );
+ if ( s_domain ) g_free( s_domain );
return True;
}
@@ -879,8 +886,24 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget* gp)
{
if (!rfi->user_cancelled)
{
- remmina_plugin_service->protocol_plugin_set_error(gp, _("Unable to connect to RDP server %s"),
- rfi->settings->ServerHostname);
+ UINT32 e;
+
+ e = freerdp_get_last_error(rfi->instance->context);
+ switch(e) {
+ case FREERDP_ERROR_AUTHENTICATION_FAILED:
+ remmina_plugin_service->protocol_plugin_set_error(gp, _("Authentication to RDP server %s failed.\nCheck username, password and domain."),
+ rfi->settings->ServerHostname );
+ // Invalidate the saved password, so the user will be re-asked at next logon
+ remmina_plugin_service->file_unsave_password(remminafile);
+ break;
+ case FREERDP_ERROR_CONNECT_FAILED:
+ remmina_plugin_service->protocol_plugin_set_error(gp, _("Connection to RDP server %s failed."), rfi->settings->ServerHostname );
+ break;
+ default:
+ remmina_plugin_service->protocol_plugin_set_error(gp, _("Unable to connect to RDP server %s"), rfi->settings->ServerHostname);
+ break;
+ }
+
}
return FALSE;